#/storage#
Usage#
Import the correctly scoped store from #/storage. Each instance of Storage
(the base class, not to be used directly), has the following interface:
set([...scope, key], value)get([...scope, key])remove([...scope, key])removeMany([...scope], [...keys])
For example, using our device store looks like this, since it's scoped to the
device (the most base level scope):
import { device } from '#/storage';
device.set(['foobar'], true);
device.get(['foobar']);
device.remove(['foobar']);
device.removeMany([], ['foobar']);
TypeScript#
Stores are strongly typed, and when setting a given value, it will need to
conform to the schemas defined in #/storage/schema. When getting a value, it
will be returned to you as the type defined in its schema.
Scoped Stores#
Some stores are (or might be) scoped to an account or other identifier. In this case, storage instances are created with type-guards, like this:
type AccountSchema = {
language: `${string}-${string}`;
};
type DID = `did:${string}`;
const account = new Storage<
[DID],
AccountSchema
>({
id: 'account',
});
account.set(
['did:plc:abc', 'language'],
'en-US',
);
const language = account.get([
'did:plc:abc',
'language',
]);
Here, if ['did:plc:abc'] is not supplied along with the key of
language, the get will return undefined (and TS will yell at you).