npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@yehn/store-engine

v0.11.24

Published

Provides a generic storage layer for File, FileSystem, IndexedDB, Memory & LocalStorage.

Downloads

2

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!

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}".`):
})