UNPKG

among-store

Version:

Data Center for Website, Mange localStorage && sessionStorage in Browser Environment

416 lines (388 loc) 13.3 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.among = factory()); }(this, function () { 'use strict'; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var base64 = createCommonjsModule(function (module, exports) { (function (global, factory) { module.exports = factory(global) ; }(( typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : commonjsGlobal ), function(global) { // existing version for noConflict() global = global || {}; var _Base64 = global.Base64; var version = "2.5.1"; // if node.js and NOT React Native, we use Buffer var buffer; if ( module.exports) { try { buffer = eval("require('buffer').Buffer"); } catch (err) { buffer = undefined; } } // constants var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var b64tab = function(bin) { var t = {}; for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i; return t; }(b64chars); var fromCharCode = String.fromCharCode; // encoder stuff var cb_utob = function(c) { if (c.length < 2) { var cc = c.charCodeAt(0); return cc < 0x80 ? c : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))) : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + fromCharCode(0x80 | ( cc & 0x3f))); } else { var cc = 0x10000 + (c.charCodeAt(0) - 0xD800) * 0x400 + (c.charCodeAt(1) - 0xDC00); return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) + fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + fromCharCode(0x80 | ( cc & 0x3f))); } }; var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; var utob = function(u) { return u.replace(re_utob, cb_utob); }; var cb_encode = function(ccc) { var padlen = [0, 2, 1][ccc.length % 3], ord = ccc.charCodeAt(0) << 16 | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)), chars = [ b64chars.charAt( ord >>> 18), b64chars.charAt((ord >>> 12) & 63), padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63), padlen >= 1 ? '=' : b64chars.charAt(ord & 63) ]; return chars.join(''); }; var btoa = global.btoa ? function(b) { return global.btoa(b); } : function(b) { return b.replace(/[\s\S]{1,3}/g, cb_encode); }; var _encode = buffer ? buffer.from && Uint8Array && buffer.from !== Uint8Array.from ? function (u) { return (u.constructor === buffer.constructor ? u : buffer.from(u)) .toString('base64') } : function (u) { return (u.constructor === buffer.constructor ? u : new buffer(u)) .toString('base64') } : function (u) { return btoa(utob(u)) } ; var encode = function(u, urisafe) { return !urisafe ? _encode(String(u)) : _encode(String(u)).replace(/[+\/]/g, function(m0) { return m0 == '+' ? '-' : '_'; }).replace(/=/g, ''); }; var encodeURI = function(u) { return encode(u, true) }; // decoder stuff var re_btou = new RegExp([ '[\xC0-\xDF][\x80-\xBF]', '[\xE0-\xEF][\x80-\xBF]{2}', '[\xF0-\xF7][\x80-\xBF]{3}' ].join('|'), 'g'); var cb_btou = function(cccc) { switch(cccc.length) { case 4: var cp = ((0x07 & cccc.charCodeAt(0)) << 18) | ((0x3f & cccc.charCodeAt(1)) << 12) | ((0x3f & cccc.charCodeAt(2)) << 6) | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; return (fromCharCode((offset >>> 10) + 0xD800) + fromCharCode((offset & 0x3FF) + 0xDC00)); case 3: return fromCharCode( ((0x0f & cccc.charCodeAt(0)) << 12) | ((0x3f & cccc.charCodeAt(1)) << 6) | (0x3f & cccc.charCodeAt(2)) ); default: return fromCharCode( ((0x1f & cccc.charCodeAt(0)) << 6) | (0x3f & cccc.charCodeAt(1)) ); } }; var btou = function(b) { return b.replace(re_btou, cb_btou); }; var cb_decode = function(cccc) { var len = cccc.length, padlen = len % 4, n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) | (len > 3 ? b64tab[cccc.charAt(3)] : 0), chars = [ fromCharCode( n >>> 16), fromCharCode((n >>> 8) & 0xff), fromCharCode( n & 0xff) ]; chars.length -= [0, 0, 2, 1][padlen]; return chars.join(''); }; var _atob = global.atob ? function(a) { return global.atob(a); } : function(a){ return a.replace(/\S{1,4}/g, cb_decode); }; var atob = function(a) { return _atob(String(a).replace(/[^A-Za-z0-9\+\/]/g, '')); }; var _decode = buffer ? buffer.from && Uint8Array && buffer.from !== Uint8Array.from ? function(a) { return (a.constructor === buffer.constructor ? a : buffer.from(a, 'base64')).toString(); } : function(a) { return (a.constructor === buffer.constructor ? a : new buffer(a, 'base64')).toString(); } : function(a) { return btou(_atob(a)) }; var decode = function(a){ return _decode( String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' }) .replace(/[^A-Za-z0-9\+\/]/g, '') ); }; var noConflict = function() { var Base64 = global.Base64; global.Base64 = _Base64; return Base64; }; // export Base64 global.Base64 = { VERSION: version, atob: atob, btoa: btoa, fromBase64: decode, toBase64: encode, utob: utob, encode: encode, encodeURI: encodeURI, btou: btou, decode: decode, noConflict: noConflict, __buffer__: buffer }; // if ES5 is available, make Base64.extendString() available if (typeof Object.defineProperty === 'function') { var noEnum = function(v){ return {value:v,enumerable:false,writable:true,configurable:true}; }; global.Base64.extendString = function () { Object.defineProperty( String.prototype, 'fromBase64', noEnum(function () { return decode(this) })); Object.defineProperty( String.prototype, 'toBase64', noEnum(function (urisafe) { return encode(this, urisafe) })); Object.defineProperty( String.prototype, 'toBase64URI', noEnum(function () { return encode(this, true) })); }; } // // export Base64 to the namespace // if (global['Meteor']) { // Meteor.js Base64 = global.Base64; } // module.exports and AMD are mutually exclusive. // module.exports has precedence. if ( module.exports) { module.exports.Base64 = global.Base64; } // that's it! return {Base64: global.Base64} })); }); var base64_1 = base64.Base64; // judge data type var judgeType = function judgeType(target) { if (target === undefined) return 'undefined'; if (target === null) return 'null'; return Object.prototype.toString.call(target, null).slice(8, -1).toString().toLowerCase(); }; // null undefined symbol function array object string number boolean var formatKey = function formatKey(key) { var ret = void 0; var keyType = judgeType(key); if (/null|undefined|symbol|function/.test(keyType)) { ret = false; } else if (/array|object/.test(keyType)) { ret = JSON.stringify(key); } else { ret = String(key); } return ret; }; // judge whether the string is a parseable JSON string var isCanParseJSON = function isCanParseJSON(str) { if (!str) return false; var isString = judgeType(str) === 'string'; var isJSONObj = str.startsWith('{') && str.endsWith('}'); var isJSONArr = str.startsWith('[') && str.endsWith(']'); return isString && (isJSONObj || isJSONArr); }; // throw error var throwError = function throwError(errorMessage) { console.warn(errorMessage); return false; }; // encode target data var encodeData = function encodeData(target) { return base64.Base64.encode(target); }; // decode target data var decodeData = function decodeData(target) { return base64.Base64.decode(target); }; var helper = { throwError: throwError, judgeType: judgeType, formatKey: formatKey, isCanParseJSON: isCanParseJSON, encodeData: encodeData, decodeData: decodeData }; var judgeType$1 = helper.judgeType, throwError$1 = helper.throwError, formatKey$1 = helper.formatKey, isCanParseJSON$1 = helper.isCanParseJSON, encodeData$1 = helper.encodeData, decodeData$1 = helper.decodeData; var amongOrigin = { storage: 'localStorage', // localStorage || sessionStorage encode: true, amongKey: '', // setting defaultt storager changeDefaultStorager: function changeDefaultStorager(storager) { if (!/localStorage|sessionStorage/.test(storager)) return; this.storage = storager; return storager; }, // turn on encode openEncoding: function openEncoding() { this.encode = true; }, // turn off encode closeEncoding: function closeEncoding() { this.encode = false; }, // set a amongKey to prevent clear action setAmongKey: function setAmongKey(key) { this.amongKey = key; return true; }, // get value by key get: function get(key) { if (!formatKey$1(key)) { throwError$1('paramter of key is wrong type'); return false; } var data = window[this.storage].getItem(key); var loadData = this.encode ? decodeData$1(data) : data; var parseRet = isCanParseJSON$1(loadData) ? JSON.parse(loadData) : loadData; return parseRet; }, // set key-value set: function set(key, data) { if (!formatKey$1(key)) { throwError$1('paramter of key is wrong type'); return false; } var dataType = judgeType$1(data); if (!/number|string|array|object/.test(dataType)) { // symbol|null|undefined|function is not allowed throwError$1('Avalibe Data Type is number, string, array and object!'); return; } var saveTarget = /number|string/.test(dataType) ? data : JSON.stringify(data); var saveData = this.encode ? encodeData$1(saveTarget) : saveTarget; window[this.storage].setItem(key, saveData); return key; }, // update key-value update: function update(key, data) { if (!formatKey$1(key)) { throwError$1('paramter of key is wrong type'); return false; } var isExistKey = this.get(key, data); if (isExistKey === null) { throwError$1('target key is not exist in current storage'); return false; } this.set(key, data); return key; }, // remove target key remove: function remove(key) { if (!formatKey$1(key)) { throwError$1('paramter of key is wrong type'); return false; } window[this.storage].removeItem(key); return key; }, // clear all saved data clear: function clear() { var amongKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; if (amongKey !== this.amongKey) { throwError$1('supply a among key to clear all data'); return false; } window[this.storage].clear(); return true; }, // show all storage data getAll: function getAll() { return JSON.parse(JSON.stringify(window[this.storage])); } }; var among = Object.defineProperties(amongOrigin, { "storage": { enumerable: false }, "encode": { enumerable: false }, "amongKey": { enumerable: false } }); var main = among; return main; }));