UNPKG

@beenotung/tslib

Version:
144 lines 4.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.storeKeys = exports.storeKey = exports.storeLength = exports.storeGet = exports.storeSet = exports.getStore = exports.setStoreQuota = exports.setStoreName = exports.storeQuota = exports.storeName = exports.Store = exports.proxyStore = exports.getLocalStorage = exports.getNodeStore = void 0; /// <reference types="./global" /> Symbol.storage = Symbol.for('storage'); function getNodeStore(name, quota) { const { LocalStorage } = require('node-localstorage'); return typeof quota === 'number' ? new LocalStorage(name, quota) : new LocalStorage(name); } exports.getNodeStore = getNodeStore; function getLocalStorage(name, quota) { return typeof localStorage === 'undefined' || localStorage === null ? getNodeStore(name, quota) : localStorage; } exports.getLocalStorage = getLocalStorage; function proxyStore(store) { return new Proxy(store, { get(target, p, receiver) { const value = Reflect.get(target, p, receiver); if (typeof p === 'symbol' || p === 'inspect' || typeof value === 'function') { return value; } return target.getItem(p); }, set(target, p, value, receiver) { if (typeof p === 'symbol') { return Reflect.set(target, p, value, receiver); } target.setItem(p, value); return true; }, }); } exports.proxyStore = proxyStore; class Store { constructor(storage) { this[Symbol.storage] = storage; } get length() { return this[Symbol.storage].length; } clear() { return this[Symbol.storage].clear(); } getItem(key) { return this[Symbol.storage].getItem(key); } getObject(key) { const value = this.getItem(key); return JSON.parse(value); } key(index) { const value = this[Symbol.storage].key(index); return value === undefined ? null : value; } keys() { const n = this.length; const keys = new Array(n); for (let i = 0; i < n; i++) { keys[i] = this.key(i); } return keys; } removeItem(key) { return this[Symbol.storage].removeItem(key); } setItem(key, value) { return this[Symbol.storage].setItem(key, value); } setObject(key, value) { return this.setItem(key, JSON.stringify(value)); } static create(storage) { const store = new Store(storage); return proxyStore(store); } } exports.Store = Store; /** * below are deprecated * the impl below use global state, may have unintended side effect by other client * */ exports.storeName = 'data'; let _store; function setStoreName(name) { exports.storeName = name; _store = undefined; } exports.setStoreName = setStoreName; function setStoreQuota(quota) { exports.storeQuota = quota; _store = undefined; } exports.setStoreQuota = setStoreQuota; function getStore() { if (!_store) { if (typeof localStorage === 'undefined' || localStorage === null) { _store = getNodeStore(exports.storeName, exports.storeQuota); } else { _store = localStorage; } } return _store; } exports.getStore = getStore; function storeSet(key, value) { getStore().setItem(key, JSON.stringify(value)); } exports.storeSet = storeSet; function storeGet(key) { const s = getStore().getItem(key); try { return JSON.parse(s); } catch (e) { return s; } } exports.storeGet = storeGet; function storeLength() { return getStore().length; } exports.storeLength = storeLength; function storeKey(index) { return getStore().key(index); } exports.storeKey = storeKey; function storeKeys() { const store = getStore(); const n = store.length; const keys = new Array(n); for (let i = 0; i < n; i++) { keys[i] = store.key(i); } return keys; } exports.storeKeys = storeKeys; //# sourceMappingURL=store.js.map