@beenotung/tslib
Version:
utils library in Typescript
97 lines (96 loc) • 2.82 kB
JavaScript
;
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;
}