1.0.0 • Published 1 year ago

@foopis23/ts-store v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

ts-store

ts-store is a simple key-value store interface for TypeScript. The main use case is for library authors to allow users to provide their own store implementation.

The goals of this project are:

  • Provide a simple, reusable interface for store implementations
  • Provide modern JS/TS experience (e.g. async/await, promises, etc.)
  • Stores can be implemented for a wide range platforms (e.g. browser, node, etc.)
  • Stores can be implemented for a wide range of storage types (e.g. memory, disk, mongo, localstorage, etc.)

Creating a Store Implementation

To create a store implementation, implement the Store interface.

Class Example

import { Store } from "ts-store";

class MyStore implements Store {
  get(key: string): Promise<any> {
    // ...
  }

  set(key: string, value: any): Promise<void> {
    // ...
  }

  delete(key: string): Promise<void> {
    // ...
  }
}

Object Example

import { Store } from "ts-store";

const myStore: Store = {
  get(key: string): Promise<any> {
    // ...
  },

  set(key: string, value: any): Promise<void> {
    // ...
  },

  delete(key: string): Promise<void> {
    // ...
  },
};

See memory store for a more complete example.

Using a Store Implementation

Example Library

// Library code
import { Store } from "ts-store";

function helloWorldLibrary(store: Store<string>) {
  const saveHello = (value: string) => store.set("hello", value);
  const getHello = () => store.get("hello");

  return {
    saveHello,
    getHello,
  };
}

// Use the library
import { MemoryStore } from "ts-store"; // or your own store implementation

async function main() {
  const lib = helloWorldLibrary(new MemoryStore());

  // save and read example
  await lib.saveHello("world");
  const hello = await lib.getHello();
  console.log(hello); // { key: 'hello', value: 'world', createdAt: 1681318294496, updatedAt: 1681318294496 }

  // wait a second
  await new Promise((resolve) => setTimeout(resolve, 1000));

  // update and read example
  await lib.saveHello("gamer");
  const hello2 = await lib.getHello();
  console.log(hello2); // { key: 'hello', value: 'gamer', createdAt: 1681318294496, updatedAt: 1681318295500 }
}
main();
1.0.0

1 year ago