@yehn/store-engine
TypeScript icon, indicating that this package has built-in type declarations

0.11.24 • Public • Published

Yehn™

This repository is part of the source code of Yehn. You can find more information at yehn.io or by contacting opensource@yehn.io.

You can find the published source code at github.com/yehn/yehn.

For licensing information, see the attached LICENSE file and the list of third-party licenses at yehn.io/legal/licenses/.

Store Engine

Provider for the following storage engines: File, FileSystem, IndexedDB, Memory & LocalStorage.

Motivation

One API to rule them all!

big deal

Nowadays there are more and more storage possibilities and developers must be familiar with the characteristics of each individual solution to reliably store data. Because it can be sometimes hard to keep up with the highly dynamic world of data storages, we have developed a system which unifies the usage of IndexedDB, In-memory storage, File-based storage and LocalStorage. In addition we built some functionality (like a transient store which deletes data after a TTL) on top.

Quickstart

Engines

Engine Available in Browser Available in Node.js Description
FileEngine 🞫 Rudimentary persistent store based on files. Very generic and easy to read.
FileSystemEngine 🞫 FileSystem is used to represent a file system which is managed by modern browsers. It is often used to build Chrome Web Store apps.
IndexedDBEngine 🞫 Persistent storage which handles significant amounts of structured data, including files/blobs. Enables very fast searches.
MemoryEngine Transient store which loses data on application restart. Suitable for testing environments.
LocalStorageEngine 🞫 Can save very small amount of data. Stored data is saved across browser sessions. Suitable for simple objects and strings.

Stores

With an engine you can build a store which has special capabilities like a timeout.

Using a TransientStore

const {Store, LocalStorageEngine} = require('@yehn/store-engine');

const engine = new LocalStorageEngine('my-favorite-actors');
const store = new Store.TransientStore(engine);

store
  .init('the-simpsons')
  .then(() => store.set('bart', {name: 'Bart Simpson'}, 1000))
  .then(transientBundle => {
    console.log(`The record of "${transientBundle.payload.name}" will expires in "${transientBundle.expires}"ms.`);
  });

API

No matter what engine you use, all CRUD operations work the same. 🙂

In the following examples this data is used:

const TABLE_NAME = 'the-simpsons';
const PRIMARY_KEY = 'lisa-simpson';
const ENTITY = {name: 'Lisa Simpson'};

create

engine.create(TABLE_NAME, PRIMARY_KEY, ENTITY).then(primaryKey => {
  console.log(`Saved record with primary key "${primaryKey}".`);
});

delete

engine.delete(TABLE_NAME, PRIMARY_KEY).then(primaryKey => {
  console.log(`Deleted record with primary key "${primaryKey}".`);
});

deleteAll

engine.deleteAll(TABLE_NAME).then(wasDeleted => {
  if (wasDeleted) {
    console.log('The Simpsons have been deleted. Poor Simpsons!');
  }
});

purge

engine.purge().then(() => {
  console.log('The Simpson Universe has been deleted. Doh!');
});

read

engine.read(TABLE_NAME, PRIMARY_KEY).then(record => {
  console.log(`Her name is "${record.name}".`);
});

readAll

engine.readAll(TABLE_NAME).then(records => {
  console.log(`There are "${record.length}" Simpsons in our database.`);
});

readAllPrimaryKeys

engine.readAllPrimaryKeys(TABLE_NAME).then(primaryKeys => {
  console.log(`Identifiers of our Simpsons: "${primaryKeys.join(', ')}"`);
});

update

engine.update(TABLE_NAME, PRIMARY_KEY, {brother: 'Bart Simpson'}).then((primaryKey) => {
  return engine.read(TABLE_NAME, PRIMARY_KEY);
}).then((updatedRecord) => {
  console.log(`The brother of "${updatedRecord.name}" is "${updatedRecord.brother}".`):
})

Dependents (3)

Package Sidebar

Install

npm i @yehn/store-engine

Weekly Downloads

0

Version

0.11.24

License

GPL-3.0

Unpacked Size

6.67 kB

Total Files

2

Last publish

Collaborators

  • yehn-owner