@yehn/store-engine
v0.11.24
Published
Provides a generic storage layer for File, FileSystem, IndexedDB, Memory & LocalStorage.
Downloads
2
Maintainers
Readme
Yehn™
This repository is part of the source code of Yehn. You can find more information at yehn.io or by contacting [email protected].
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!
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}".`):
})