29 lines
743 B
TypeScript
29 lines
743 B
TypeScript
import localforage from 'localforage';
|
|
|
|
interface IKVStore extends LocalForage {
|
|
getItemOrError: (key: string) => Promise<any>;
|
|
}
|
|
|
|
// localForage
|
|
// https://localforage.github.io/localForage/#settings-api-config
|
|
const KVStore = localforage.createInstance({
|
|
name: 'pl-fe',
|
|
description: 'pl-fe offline data store',
|
|
driver: localforage.INDEXEDDB,
|
|
storeName: 'keyvaluepairs',
|
|
}) as IKVStore;
|
|
|
|
// localForage returns 'null' when a key isn't found.
|
|
// In the Redux action flow, we want it to fail harder.
|
|
KVStore.getItemOrError = (key: string) => KVStore.getItem(key).then(value => {
|
|
if (value === null) {
|
|
throw new Error(`KVStore: null value for key ${key}`);
|
|
} else {
|
|
return value;
|
|
}
|
|
});
|
|
|
|
export {
|
|
KVStore as default,
|
|
};
|