UNPKG

@beenotung/tslib

Version:
97 lines (96 loc) 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Store = exports.storageSymbol = void 0; exports.getNodeStore = getNodeStore; exports.getLocalStorage = getLocalStorage; exports.proxyStore = proxyStore; exports.getStoreKeys = getStoreKeys; exports.storageSymbol = Symbol.for('storage'); function getNodeStore(name, quota) { // eslint-disable-next-line @typescript-eslint/no-var-requires const { LocalStorage } = require('node-localstorage'); return typeof quota === 'number' ? new LocalStorage(name, quota) : new LocalStorage(name); } function getLocalStorage(name, quota) { return typeof localStorage === 'undefined' || localStorage === null ? getNodeStore(name, quota) : localStorage; } 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; }, }); } class Store { [exports.storageSymbol]; constructor(storage) { this[exports.storageSymbol] = storage; } get length() { return this[exports.storageSymbol].length; } clear() { return this[exports.storageSymbol].clear(); } getItem(key) { return this[exports.storageSymbol].getItem(key); } getObject(key) { const value = this.getItem(key); return JSON.parse(value); } key(index) { const value = this[exports.storageSymbol].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[exports.storageSymbol].removeItem(key); } setItem(key, value) { return this[exports.storageSymbol].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; /** * @param storage {Storage} e.g. localStorage * */ function getStoreKeys(storage) { const n = storage.length; const keys = new Array(n); for (let i = 0; i < n; i++) { keys[i] = storage.key(i); } return keys; }