Type-safe and Unified way to access storage
This library gives you type-safe way to access storages.
npm install @reactleaf/storage
# or
yarn add @reactleaf/storageimport StorageAccessor from '@reactleaf/storage`
const storage = new StorageAccessor<{ key: { value: number } }>("prefix")
// set
storage.set("key", { value: 1 })
// get
const { value } = storage.get("key")
// remove
storage.remove("key")Storage Accessor has to know the types of stored values, to make it type-safe.
const storage = new StorageAccesssor<{
key: { value: number };
SomeToken: string;
SomeTimestamp: number;
}>("prefix");
// as accessor knows the types, it can be assure types of the value that we read from storage.
const token = storage.get("SomeToken"); // token is string
const { value } = storage.get("key"); // value is numberTo distinguish storages, you can set prefix option.
const defaultStorage = new StorageAccesssor<{ notified_100: boolean }>("myProject/"); // stored as `myProject/${key}`
const authStorage = new StorageAccesssor<{ accessToken: string }>("auth_"); // stored as `auth_${key}`Localstorage is our default storage, but you can use another storage.
Just put storage getter on accessor's second parameter.
const storage = new StorageAccesssor("prefix", () => window.sessionStorage);The reason that is not an storage, but getter, is SSR. Storages are accessible only in client side, so not available during server-side runtime. Using getter, we avoid the problem for SSR runtime error.
Alternative storages could be anything that implements Web Storage API.
Data will be serialized by JSON.stringify, and Deserialized by JSON.parse.
So, values like Date or Class Instance could not be saved and loaded properly.