JSPM

localstore-ts

1.0.4
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 1
    • Score
      100M100P100Q44847F
    • License ISC

    Package Exports

    • localstore-ts
    • localstore-ts/dtype
    • localstore-ts/index
    • localstore-ts/model
    • localstore-ts/operations
    • localstore-ts/schema
    • localstore-ts/utils

    Readme

    localstore-ts

    A typesafe api that supercharges local and session storage with database like capabilities. Inspired by drizzle.

    Installing

    Run

    npm install localstore-ts

    Usage

    The core of localStore lies in defining schemas. These are definitions of the underlying data that will be entered/retrieved from localStorage or sessionStrorage. You define a schema using type objects provided in localStore/dtypes:

    // ./schema/local.ts
    import { date, number, text } from "localstore-ts/dtype";
    import { createSchema } from "localstore-ts/schema";
    
    export const users = createSchema("users", {
      id: number().required(),
      age: number().default(() => 20),
      createdAt: date().default(() => new Date()),
      name: text(),
    });

    You then define a model from the schemas. In this case, we define a localStorage model called localStore:

    // ./store
    import { createLocalStoreModel } from "localstore-ts";
    
    import * as localSchema from "./schema/local";
    
    export const localStore = createLocalStoreModel(localSchema);

    You can use your typesafe localStorage api as such

    import { localStore } from "path/to/store";
    import { users } from "path/to/schema";
    
    localStore.set(users).values({ id: 1, name: "John" });
    localStore.get(users); // [{ id: 1, age: 20, createdAt: new Date(), name: "John" }]
    
    localStore.insert(users).values({ id: 2, name: "Jane" });
    localStore.get(users); // [{ id: 1, ..., name: "John" }, { id: 2, ..., name: "Jane" }]
    
    localStore.update(users).value({ age: 30 });
    localStore.get(users); // [{ id: 1, age: 30, ..., name: "John" }, { id: 2, age: 30, ..., name: "Jane" }]
    
    localStore
      .update(users)
      .where((user) => user.id === 1)
      .value({ name: "Jason" });
    localStore.get(users); // [{ id: 1, age: 30, ..., name: "Jason" }, { id: 2, age: 30, ..., name: "Jane" }]