@beenotung/tslib
Version:
utils library in Typescript
144 lines • 4.15 kB
JavaScript
;
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