12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- function createBrowserLocalStorageCache(options) {
- const namespaceKey = `algoliasearch-client-js-${options.key}`;
- // eslint-disable-next-line functional/no-let
- let storage;
- const getStorage = () => {
- if (storage === undefined) {
- storage = options.localStorage || window.localStorage;
- }
- return storage;
- };
- const getNamespace = () => {
- return JSON.parse(getStorage().getItem(namespaceKey) || '{}');
- };
- return {
- get(key, defaultValue, events = {
- miss: () => Promise.resolve(),
- }) {
- return Promise.resolve()
- .then(() => {
- const keyAsString = JSON.stringify(key);
- const value = getNamespace()[keyAsString];
- return Promise.all([value || defaultValue(), value !== undefined]);
- })
- .then(([value, exists]) => {
- return Promise.all([value, exists || events.miss(value)]);
- })
- .then(([value]) => value);
- },
- set(key, value) {
- return Promise.resolve().then(() => {
- const namespace = getNamespace();
- // eslint-disable-next-line functional/immutable-data
- namespace[JSON.stringify(key)] = value;
- getStorage().setItem(namespaceKey, JSON.stringify(namespace));
- return value;
- });
- },
- delete(key) {
- return Promise.resolve().then(() => {
- const namespace = getNamespace();
- // eslint-disable-next-line functional/immutable-data
- delete namespace[JSON.stringify(key)];
- getStorage().setItem(namespaceKey, JSON.stringify(namespace));
- });
- },
- clear() {
- return Promise.resolve().then(() => {
- getStorage().removeItem(namespaceKey);
- });
- },
- };
- }
- exports.createBrowserLocalStorageCache = createBrowserLocalStorageCache;
|