build/betterstorage.js.map
{"version":3,"file":"betterstorage.js","sources":["../node_modules/core-decorators/es/lazy-initialize.js","../node_modules/core-decorators/es/private/utils.js","../node_modules/core-decorators/es/override.js","../node_modules/core-decorators/es/autobind.js","../src/BetterStorageAsync.js","../node_modules/core-decorators/es/time.js","../node_modules/core-decorators/es/profile.js","../src/BetterStorage.js"],"sourcesContent":["import { decorate, createDefaultSetter } from './private/utils';\nvar defineProperty = Object.defineProperty;\n\n\nfunction handleDescriptor(target, key, descriptor) {\n var configurable = descriptor.configurable,\n enumerable = descriptor.enumerable,\n initializer = descriptor.initializer,\n value = descriptor.value;\n\n return {\n configurable: configurable,\n enumerable: enumerable,\n\n get: function get() {\n // This happens if someone accesses the\n // property directly on the prototype\n if (this === target) {\n return;\n }\n\n var ret = initializer ? initializer.call(this) : value;\n\n defineProperty(this, key, {\n configurable: configurable,\n enumerable: enumerable,\n writable: true,\n value: ret\n });\n\n return ret;\n },\n\n\n set: createDefaultSetter(key)\n };\n}\n\nexport default function lazyInitialize() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _desc, _value, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n\nfunction _initDefineProp(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nfunction _initializerWarningHelper(descriptor, context) {\n throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n}\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport lazyInitialize from '../lazy-initialize';\n\nvar defineProperty = Object.defineProperty,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,\n getOwnPropertyNames = Object.getOwnPropertyNames,\n getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\n\nexport function isDescriptor(desc) {\n if (!desc || !desc.hasOwnProperty) {\n return false;\n }\n\n var keys = ['value', 'initializer', 'get', 'set'];\n\n for (var i = 0, l = keys.length; i < l; i++) {\n if (desc.hasOwnProperty(keys[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function decorate(handleDescriptor, entryArgs) {\n if (isDescriptor(entryArgs[entryArgs.length - 1])) {\n return handleDescriptor.apply(undefined, _toConsumableArray(entryArgs).concat([[]]));\n } else {\n return function () {\n return handleDescriptor.apply(undefined, _toConsumableArray(Array.prototype.slice.call(arguments)).concat([entryArgs]));\n };\n }\n}\n\nvar Meta = (_class = function Meta() {\n _classCallCheck(this, Meta);\n\n _initDefineProp(this, 'debounceTimeoutIds', _descriptor, this);\n\n _initDefineProp(this, 'throttleTimeoutIds', _descriptor2, this);\n\n _initDefineProp(this, 'throttlePreviousTimestamps', _descriptor3, this);\n\n _initDefineProp(this, 'throttleTrailingArgs', _descriptor4, this);\n\n _initDefineProp(this, 'profileLastRan', _descriptor5, this);\n}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, 'debounceTimeoutIds', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, 'throttleTimeoutIds', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, 'throttlePreviousTimestamps', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, 'throttleTrailingArgs', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return null;\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, 'profileLastRan', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return null;\n }\n})), _class);\n\n\nvar META_KEY = typeof Symbol === 'function' ? Symbol('__core_decorators__') : '__core_decorators__';\n\nexport function metaFor(obj) {\n if (obj.hasOwnProperty(META_KEY) === false) {\n defineProperty(obj, META_KEY, {\n // Defaults: NOT enumerable, configurable, or writable\n value: new Meta()\n });\n }\n\n return obj[META_KEY];\n}\n\nexport var getOwnKeys = getOwnPropertySymbols ? function (object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n} : getOwnPropertyNames;\n\nexport function getOwnPropertyDescriptors(obj) {\n var descs = {};\n\n getOwnKeys(obj).forEach(function (key) {\n return descs[key] = getOwnPropertyDescriptor(obj, key);\n });\n\n return descs;\n}\n\nexport function createDefaultSetter(key) {\n return function set(newValue) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n // IS enumerable when reassigned by the outside word\n enumerable: true,\n value: newValue\n });\n\n return newValue;\n };\n}\n\nexport function bind(fn, context) {\n if (fn.bind) {\n return fn.bind(context);\n } else {\n return function __autobind__() {\n return fn.apply(context, arguments);\n };\n }\n}\n\nexport var warn = function () {\n if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) !== 'object' || !console || typeof console.warn !== 'function') {\n return function () {};\n } else {\n return bind(console.warn, console);\n }\n}();\n\nvar seenDeprecations = {};\nexport function internalDeprecation(msg) {\n if (seenDeprecations[msg] !== true) {\n seenDeprecations[msg] = true;\n warn('DEPRECATION: ' + msg);\n }\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { decorate } from './private/utils';\n\nvar GENERIC_FUNCTION_ERROR = '{child} does not properly override {parent}';\nvar FUNCTION_REGEXP = /^function ([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?(\\([^\\)]*\\))[\\s\\S]+$/;\n\nvar SyntaxErrorReporter = function () {\n _createClass(SyntaxErrorReporter, [{\n key: '_getTopic',\n value: function _getTopic(descriptor) {\n if (descriptor === undefined) {\n return null;\n }\n\n if ('value' in descriptor) {\n return descriptor.value;\n }\n\n if ('get' in descriptor) {\n return descriptor.get;\n }\n\n if ('set' in descriptor) {\n return descriptor.set;\n }\n }\n }, {\n key: '_extractTopicSignature',\n value: function _extractTopicSignature(topic) {\n switch (typeof topic === 'undefined' ? 'undefined' : _typeof(topic)) {\n case 'function':\n return this._extractFunctionSignature(topic);\n default:\n return this.key;\n }\n }\n }, {\n key: '_extractFunctionSignature',\n value: function _extractFunctionSignature(fn) {\n var _this = this;\n\n return fn.toString().replace(FUNCTION_REGEXP, function (match) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _this.key;\n var params = arguments[2];\n return name + params;\n });\n }\n }, {\n key: 'key',\n get: function get() {\n return this.childDescriptor.key;\n }\n }, {\n key: 'parentNotation',\n get: function get() {\n return this.parentKlass.constructor.name + '#' + this.parentPropertySignature;\n }\n }, {\n key: 'childNotation',\n get: function get() {\n return this.childKlass.constructor.name + '#' + this.childPropertySignature;\n }\n }, {\n key: 'parentTopic',\n get: function get() {\n return this._getTopic(this.parentDescriptor);\n }\n }, {\n key: 'childTopic',\n get: function get() {\n return this._getTopic(this.childDescriptor);\n }\n }, {\n key: 'parentPropertySignature',\n get: function get() {\n return this._extractTopicSignature(this.parentTopic);\n }\n }, {\n key: 'childPropertySignature',\n get: function get() {\n return this._extractTopicSignature(this.childTopic);\n }\n }]);\n\n function SyntaxErrorReporter(parentKlass, childKlass, parentDescriptor, childDescriptor) {\n _classCallCheck(this, SyntaxErrorReporter);\n\n this.parentKlass = parentKlass;\n this.childKlass = childKlass;\n this.parentDescriptor = parentDescriptor;\n this.childDescriptor = childDescriptor;\n }\n\n _createClass(SyntaxErrorReporter, [{\n key: 'assert',\n value: function assert(condition) {\n var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (condition !== true) {\n this.error(GENERIC_FUNCTION_ERROR + msg);\n }\n }\n }, {\n key: 'error',\n value: function error(msg) {\n var _this2 = this;\n\n msg = msg\n // Replace lazily, because they actually might not\n // be available in all cases\n .replace('{parent}', function (m) {\n return _this2.parentNotation;\n }).replace('{child}', function (m) {\n return _this2.childNotation;\n });\n throw new SyntaxError(msg);\n }\n }]);\n\n return SyntaxErrorReporter;\n}();\n\nfunction getDescriptorType(descriptor) {\n if (descriptor.hasOwnProperty('value')) {\n return 'data';\n }\n\n if (descriptor.hasOwnProperty('get') || descriptor.hasOwnProperty('set')) {\n return 'accessor';\n }\n\n // If none of them exist, browsers treat it as\n // a data descriptor with a value of `undefined`\n return 'data';\n}\n\nfunction checkFunctionSignatures(parent, child, reporter) {\n reporter.assert(parent.length === child.length);\n}\n\nfunction checkDataDescriptors(parent, child, reporter) {\n var parentValueType = _typeof(parent.value);\n var childValueType = _typeof(child.value);\n\n if (parentValueType === 'undefined' && childValueType === 'undefined') {\n // class properties can be any expression, which isn't ran until the\n // the instance is created, so we can't reliably get type information\n // for them yet (per spec). Perhaps when Babel includes flow-type info\n // in runtime? Tried regex solutions, but super hacky and only feasible\n // on primitives, which is confusing for usage...\n reporter.error('descriptor values are both undefined. (class properties are are not currently supported)\\'');\n }\n\n if (parentValueType !== childValueType) {\n var isFunctionOverUndefined = childValueType === 'function' && parentValueType === undefined;\n // Even though we don't support class properties, this\n // will still handle more than just functions, just in case.\n // Shadowing an undefined value is an error if the inherited\n // value was undefined (usually a class property, not a method)\n if (isFunctionOverUndefined || parentValueType !== undefined) {\n reporter.error('value types do not match. {parent} is \"' + parentValueType + '\", {child} is \"' + childValueType + '\"');\n }\n }\n\n // Switch, in preparation for supporting more types\n switch (childValueType) {\n case 'function':\n checkFunctionSignatures(parent.value, child.value, reporter);\n break;\n\n default:\n reporter.error('Unexpected error. Please file a bug with: {parent} is \"' + parentValueType + '\", {child} is \"' + childValueType + '\"');\n break;\n }\n}\n\nfunction checkAccessorDescriptors(parent, child, reporter) {\n var parentHasGetter = typeof parent.get === 'function';\n var childHasGetter = typeof child.get === 'function';\n var parentHasSetter = typeof parent.set === 'function';\n var childHasSetter = typeof child.set === 'function';\n\n if (parentHasGetter || childHasGetter) {\n if (!parentHasGetter && parentHasSetter) {\n reporter.error('{parent} is setter but {child} is getter');\n }\n\n if (!childHasGetter && childHasSetter) {\n reporter.error('{parent} is getter but {child} is setter');\n }\n\n checkFunctionSignatures(parent.get, child.get, reporter);\n }\n\n if (parentHasSetter || childHasSetter) {\n if (!parentHasSetter && parentHasGetter) {\n reporter.error('{parent} is getter but {child} is setter');\n }\n\n if (!childHasSetter && childHasGetter) {\n reporter.error('{parent} is setter but {child} is getter');\n }\n\n checkFunctionSignatures(parent.set, child.set, reporter);\n }\n}\n\nfunction checkDescriptors(parent, child, reporter) {\n var parentType = getDescriptorType(parent);\n var childType = getDescriptorType(child);\n\n if (parentType !== childType) {\n reporter.error('descriptor types do not match. {parent} is \"' + parentType + '\", {child} is \"' + childType + '\"');\n }\n\n switch (childType) {\n case 'data':\n checkDataDescriptors(parent, child, reporter);\n break;\n\n case 'accessor':\n checkAccessorDescriptors(parent, child, reporter);\n break;\n }\n}\n\nvar suggestionTransforms = [function (key) {\n return key.toLowerCase();\n}, function (key) {\n return key.toUpperCase();\n}, function (key) {\n return key + 's';\n}, function (key) {\n return key.slice(0, -1);\n}, function (key) {\n return key.slice(1, key.length);\n}];\n\nfunction findPossibleAlternatives(superKlass, key) {\n for (var i = 0, l = suggestionTransforms.length; i < l; i++) {\n var fn = suggestionTransforms[i];\n var suggestion = fn(key);\n\n if (suggestion in superKlass) {\n return suggestion;\n }\n }\n\n return null;\n}\n\nfunction handleDescriptor(target, key, descriptor) {\n descriptor.key = key;\n var superKlass = Object.getPrototypeOf(target);\n var superDescriptor = Object.getOwnPropertyDescriptor(superKlass, key);\n var reporter = new SyntaxErrorReporter(superKlass, target, superDescriptor, descriptor);\n\n if (superDescriptor === undefined) {\n var suggestedKey = findPossibleAlternatives(superKlass, key);\n var suggestion = suggestedKey ? '\\n\\n Did you mean \"' + suggestedKey + '\"?' : '';\n reporter.error('No descriptor matching {child} was found on the prototype chain.' + suggestion);\n }\n\n checkDescriptors(superDescriptor, descriptor, reporter);\n\n return descriptor;\n}\n\nexport default function override() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport { decorate, createDefaultSetter, getOwnPropertyDescriptors, getOwnKeys, bind } from './private/utils';\nvar defineProperty = Object.defineProperty,\n getPrototypeOf = Object.getPrototypeOf;\n\n\nvar mapStore = void 0;\n\nfunction getBoundSuper(obj, fn) {\n if (typeof WeakMap === 'undefined') {\n throw new Error('Using @autobind on ' + fn.name + '() requires WeakMap support due to its use of super.' + fn.name + '()\\n See https://github.com/jayphelps/core-decorators.js/issues/20');\n }\n\n if (!mapStore) {\n mapStore = new WeakMap();\n }\n\n if (mapStore.has(obj) === false) {\n mapStore.set(obj, new WeakMap());\n }\n\n var superStore = mapStore.get(obj);\n\n if (superStore.has(fn) === false) {\n superStore.set(fn, bind(fn, obj));\n }\n\n return superStore.get(fn);\n}\n\nfunction autobindClass(klass) {\n var descs = getOwnPropertyDescriptors(klass.prototype);\n var keys = getOwnKeys(descs);\n\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n var desc = descs[key];\n\n if (typeof desc.value !== 'function' || key === 'constructor') {\n continue;\n }\n\n defineProperty(klass.prototype, key, autobindMethod(klass.prototype, key, desc));\n }\n}\n\nfunction autobindMethod(target, key, _ref) {\n var fn = _ref.value,\n configurable = _ref.configurable,\n enumerable = _ref.enumerable;\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@autobind can only be used on functions, not: ' + fn);\n }\n\n var constructor = target.constructor;\n\n\n return {\n configurable: configurable,\n enumerable: enumerable,\n\n get: function get() {\n // Class.prototype.key lookup\n // Someone accesses the property directly on the prototype on which it is\n // actually defined on, i.e. Class.prototype.hasOwnProperty(key)\n if (this === target) {\n return fn;\n }\n\n // Class.prototype.key lookup\n // Someone accesses the property directly on a prototype but it was found\n // up the chain, not defined directly on it\n // i.e. Class.prototype.hasOwnProperty(key) == false && key in Class.prototype\n if (this.constructor !== constructor && getPrototypeOf(this).constructor === constructor) {\n return fn;\n }\n\n // Autobound method calling super.sameMethod() which is also autobound and so on.\n if (this.constructor !== constructor && key in this.constructor.prototype) {\n return getBoundSuper(this, fn);\n }\n\n var boundFn = bind(fn, this);\n\n defineProperty(this, key, {\n configurable: true,\n writable: true,\n // NOT enumerable when it's a bound method\n enumerable: false,\n value: boundFn\n });\n\n return boundFn;\n },\n\n set: createDefaultSetter(key)\n };\n}\n\nfunction handle(args) {\n if (args.length === 1) {\n return autobindClass.apply(undefined, _toConsumableArray(args));\n } else {\n return autobindMethod.apply(undefined, _toConsumableArray(args));\n }\n}\n\nexport default function autobind() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 0) {\n return function () {\n return handle(arguments);\n };\n } else {\n return handle(args);\n }\n}","import { autobind, decorate } from 'core-decorators';\n\nfunction asPromsieResolve (val) {\n if (val instanceof Promise) {\n return val;\n }\n return new Promise(accept => accept(val));\n}\n\n@autobind\nexport default class BetterStorageAsync {\n constructor(prefix = '', kind = 'local', overrides = {}) {\n this.prefix = prefix;\n this.kind = kind;\n this.store = typeof kind === 'string' ? window[`${kind}Storage`] : kind;\n\n this.methods = Object.assign({\n doSet: this._doSet,\n doGet: this._doGet,\n doRemove: this._doRemove,\n doClear: this._doClear,\n doLength: this._doLength,\n doFullLength: this._doFullLength,\n doKey: this._doKey,\n doFullKey: this._doFullKey,\n doHas: this._doHas\n }, overrides);\n }\n\n _doSet(key, data) {\n return asPromsieResolve(this.store.setItem(key, JSON.stringify({ value: data })));\n }\n\n _doGet(key) {\n return new Promise((accept, reject) => {\n asPromsieResolve(this.store.getItem(key)).then((data) => {\n try {\n accept(JSON.parse(data).value)\n } catch (e) {\n accept(data);\n }\n }).catch(reject);\n });\n }\n\n _doRemove(key) {\n return asPromsieResolve(this.store.removeItem(key));\n }\n\n _doClear() {\n return asPromsieResolve(this.store.clear());\n }\n\n _doLength() {\n return new Promise((accept, reject) => {\n this.keys.then((keys) => accept(keys.length)).catch(reject);\n });\n }\n\n _doFullLength() {\n return new Promise((accept, reject) => {\n this.fullKeys.then((keys) => accept(keys.length)).catch(reject);\n });\n }\n\n _doKey(n) {\n return new Promise((accept, reject) => {\n this.keys.then((keys) => accept(keys[n])).catch(reject);\n });\n }\n\n _doFullKey(n) {\n return new Promise((accept, reject) => {\n this.fullKeys.then((keys) => accept(keys[n])).catch(reject);\n });\n }\n\n _doHas(key) {\n return new Promise((accept, reject) => {\n this.fullKeys.then((keys) => accept(keys.indexOf(key) > -1)).catch(reject);\n });\n }\n\n getStoreKey(key = '', prefix) {\n prefix = prefix || this.prefix;\n if (prefix === '') { return key; }\n return `${prefix}-${key}`;\n }\n\n setPrefix(prefix = '', changeExisting = false) {\n return new Promise((accept, reject) => {\n if (changeExisting && this.prefix !== '' && this.keys.length > 0) {\n this.keys\n .then((keys) => {\n Promise.all(keys.map((key) => {\n return new Promise((acceptInner, rejectInner) => {\n this.store.getItem(this.getStoreKey(key))\n .then((value) => acceptInner({ key, value }))\n .catch(rejectInner);\n })\n }))\n .then((pairs) => {\n Promise.all(pairs.reduce((promises, data) => {\n promises.push(this.store.removeItem(this.getStoreKey(data.key)));\n promises.push(this.store.setItem(this.getStoreKey(data.key, prefix), data.value));\n return promises;\n }, []))\n .then(() => {\n this.prefix = prefix;\n accept();\n })\n .catch(reject);\n })\n .catch(reject);\n })\n .catch(reject);\n } else {\n this.prefix = prefix;\n accept();\n }\n });\n }\n\n setKind(kind, migrateData = false) {\n return new Promise((accept, reject) => {\n const newStore = typeof kind === 'string' ? window[`${kind}Storage`] : kind;\n if (migrateData && this.prefix !== '' && this.keys.length > 0) {\n this.keys\n .then((keys) => {\n Promise.all(keys.map((key) => {\n return new Promise((acceptInner, rejectInner) => {\n this.store.getItem(this.getStoreKey(key))\n .then((value) => acceptInner({ key, value }))\n .catch(rejectInner);\n })\n }))\n .then((pairs) => {\n Promise.all(pairs.reduce((promises, data) => {\n promises.push(this.store.removeItem(this.getStoreKey(data.key)));\n promises.push(newStore.setItem(this.getStoreKey(data.key), data.value));\n return promises;\n }, []))\n .then(() => {\n this.kind = kind;\n this.store = newStore;\n accept();\n })\n .catch(reject);\n })\n .catch(reject);\n })\n .catch(reject);\n } else {\n this.kind = kind;\n this.store = newStore;\n accept();\n }\n });\n }\n\n /*\n * Set Item into Storage\n */\n set(key, value) {\n return this.methods.doSet(this.getStoreKey(key), value);\n }\n\n /*\n * Get Item from Storage\n */\n get(key) {\n return this.methods.doGet(this.getStoreKey(key));\n }\n\n /*\n * Removes an Item from Storage\n */\n remove(key) {\n return this.methods.doRemove(this.getStoreKey(key));\n }\n\n /*\n * If store has key\n */\n has(key) {\n return this.methods.doHas(this.getStoreKey(key));\n }\n\n /*\n * Clears the store\n */\n clear(full = false) {\n if (this.prefix === '' || full) {\n return this.methods.doClear();\n }\n return new Promise((accept, reject) => {\n this.keys.then((keys) => {\n Promise.all(keys.map((key) => this.methods.doRemove(this.getStoreKey(key))))\n .then(accept).catch(reject);\n }).catch(reject);\n });\n }\n\n /*\n * Number of items with prefix\n */\n getLength() {\n return this.methods.doLength();\n }\n\n /*\n * Number of items in the store\n */\n getFullLength() {\n return this.methods.doFullLength();\n }\n\n /*\n * Get prefix key at location\n */\n key(n) {\n return this.methods.doKey(n);\n }\n\n /*\n * Get key at location\n */\n fullKey(n) {\n return this.methods.doFullKey(n);\n }\n\n /*\n * List of prefixed keys in store\n */\n get keys() {\n if (this.prefix === '') { return this.fullKeys; }\n return new Promise((resolve, reject) => {\n this.fullKeys.then((keys) => {\n resolve(\n keys\n .filter((item) => item.indexOf(`${this.prefix}-`) === 0)\n .map((item) => item.replace(`${this.prefix}-`, ''))\n );\n }).catch(reject);\n });\n }\n\n /*\n * List of all keys in store\n */\n get fullKeys() {\n if (this.store.hasOwnProperty('getAllKeys')) {\n return this.store.getAllKeys();\n }\n return new Promise((accept) => accept(Object.keys(this.store)));\n }\n}\n","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate } from './private/utils';\n\nvar labels = {};\n\n// Exported for mocking in tests\nexport var defaultConsole = {\n time: console.time ? console.time.bind(console) : function (label) {\n labels[label] = new Date();\n },\n timeEnd: console.timeEnd ? console.timeEnd.bind(console) : function (label) {\n var timeNow = new Date();\n var timeTaken = timeNow - labels[label];\n delete labels[label];\n console.log(label + ': ' + timeTaken + 'ms');\n }\n};\n\nvar count = 0;\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n prefix = _ref2$ === undefined ? null : _ref2$,\n _ref2$2 = _ref2[1],\n console = _ref2$2 === undefined ? defaultConsole : _ref2$2;\n\n var fn = descriptor.value;\n\n if (prefix === null) {\n prefix = target.constructor.name + '.' + key;\n }\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@time can only be used on functions, not: ' + fn);\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var label = prefix + '-' + count;\n count++;\n console.time(label);\n\n try {\n return fn.apply(this, arguments);\n } finally {\n console.timeEnd(label);\n }\n }\n });\n}\n\nexport default function time() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate, metaFor, warn, bind } from './private/utils';\n\nvar oc = console;\n\n// Exported for mocking in tests\nexport var defaultConsole = {\n profile: console.profile ? bind(console.profile, console) : function () {},\n profileEnd: console.profileEnd ? bind(console.profileEnd, console) : function () {},\n warn: warn\n};\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n _ref2$ = _ref2[0],\n prefix = _ref2$ === undefined ? null : _ref2$,\n _ref2$2 = _ref2[1],\n onceThrottleOrFunction = _ref2$2 === undefined ? false : _ref2$2,\n _ref2$3 = _ref2[2],\n console = _ref2$3 === undefined ? defaultConsole : _ref2$3;\n\n if (!profile.__enabled) {\n if (!profile.__warned) {\n console.warn('console.profile is not supported. All @profile decorators are disabled.');\n profile.__warned = true;\n }\n return descriptor;\n }\n\n var fn = descriptor.value;\n\n if (prefix === null) {\n prefix = target.constructor.name + '.' + key;\n }\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@profile can only be used on functions, not: ' + fn);\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var now = Date.now();\n var meta = metaFor(this);\n if (onceThrottleOrFunction === true && !meta.profileLastRan || onceThrottleOrFunction === false || typeof onceThrottleOrFunction === 'number' && now - meta.profileLastRan > onceThrottleOrFunction || typeof onceThrottleOrFunction === 'function' && onceThrottleOrFunction.apply(this, arguments)) {\n console.profile(prefix);\n meta.profileLastRan = now;\n }\n\n try {\n return fn.apply(this, arguments);\n } finally {\n console.profileEnd(prefix);\n }\n }\n });\n}\n\nexport default function profile() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}\n\n// Only Chrome, Firefox, and Edge support profile.\n// Exposing properties for testing.\nprofile.__enabled = !!console.profile;\nprofile.__warned = false;","import { autobind } from 'core-decorators';\n\n@autobind\nexport default class BetterStorage {\n constructor(prefix = '', kind = 'local', overrides = {}) {\n this.prefix = prefix;\n this.kind = kind;\n this.store = typeof kind === 'string' ? window[`${kind}Storage`] : kind;\n\n this.methods = Object.assign({\n doSet: this._doSet,\n doGet: this._doGet,\n doRemove: this._doRemove,\n doClear: this._doClear,\n doLength: this._doLength,\n doFullLength: this._doFullLength,\n doKey: this._doKey,\n doFullKey: this._doFullKey,\n doHas: this._doHas\n }, overrides);\n }\n\n _doSet(key, data) {\n return this.store.setItem(key, JSON.stringify({ value: data }));\n }\n\n _doGet(key) {\n try {\n return JSON.parse(this.store.getItem(key)).value;\n } catch (e) {\n return this.store.getItem(key);\n }\n }\n\n _doRemove(key) {\n return this.store.removeItem(key);\n }\n\n _doClear() {\n return this.store.clear();\n }\n\n _doLength() {\n return this.keys.length;\n }\n\n _doFullLength() {\n return this.store.length;\n }\n\n _doKey(n) {\n return this.keys[n];\n }\n\n _doFullKey(n) {\n return this.store.key(n);\n }\n\n _doHas(key) {\n return this.fullKeys.indexOf(key) > -1;\n }\n\n getStoreKey(key = '', prefix) {\n prefix = prefix || this.prefix;\n if (prefix === '') { return key; }\n return `${prefix}-${key}`;\n }\n\n setPrefix(prefix = '', changeExisting = false) {\n if (changeExisting && this.prefix !== '' && this.keys.length > 0) {\n this.keys.forEach((key) => {\n const val = this.store.getItem(this.getStoreKey(key));\n this.store.removeItem(this.getStoreKey(key));\n this.store.setItem(this.getStoreKey(key, prefix), val);\n });\n }\n this.prefix = prefix;\n }\n\n setKind(kind, migrateData = false) {\n const newStore = typeof kind === 'string' ? window[`${kind}Storage`] : kind;\n if (migrateData && this.prefix !== '' && this.keys.length > 0) {\n this.keys.forEach((key) => {\n const val = this.store.getItem(this.getStoreKey(key));\n this.store.removeItem(this.getStoreKey(key));\n newStore.setItem(this.getStoreKey(key), val);\n });\n }\n this.kind = kind;\n this.store = newStore;\n }\n\n /*\n * Set Item into Storage\n */\n set(key, value) {\n return this.methods.doSet(this.getStoreKey(key), value);\n }\n\n /*\n * Get Item from Storage\n */\n get(key) {\n return this.methods.doGet(this.getStoreKey(key));\n }\n\n /*\n * Removes an Item from Storage\n */\n remove(key) {\n return this.methods.doRemove(this.getStoreKey(key));\n }\n\n /*\n * If store has key\n */\n has(key) {\n return this.methods.doHas(this.getStoreKey(key));\n }\n\n /*\n * Clears the store\n */\n clear(full = false) {\n if (this.prefix === '' || full) {\n return this.methods.doClear();\n } else {\n return Promise.all(\n this.keys.map((key) => {\n return this.methods.doRemove(this.getStoreKey(key));\n })\n );\n }\n }\n\n /*\n * Number of items with prefix\n */\n getLength() {\n return this.methods.doLength();\n }\n\n /*\n * Number of items in the store\n */\n getFullLength() {\n return this.methods.doFullLength();\n }\n\n /*\n * Get prefix key at location\n */\n key(n) {\n return this.methods.doKey(n);\n }\n\n /*\n * Get key at location\n */\n fullKey(n) {\n return this.methods.doFullKey(n);\n }\n\n /*\n * List of prefixed keys in store\n */\n get keys() {\n if (this.prefix === '') { return this.fullKeys; }\n return Object.keys(this.store)\n .filter((item) => item.indexOf(`${this.prefix}-`) === 0)\n .map((item) => item.replace(`${this.prefix}-`, ''));\n }\n\n /*\n * List of all keys in store\n */\n get fullKeys() {\n return Object.keys(this.store);\n }\n}\n"],"names":["handleDescriptor","target","key","descriptor","configurable","enumerable","initializer","value","get","this","ret","call","defineProperty","writable","set","createDefaultSetter","lazyInitialize","_len","arguments","length","args","Array","_key","decorate","_initDefineProp","property","context","Object","_classCallCheck","instance","Constructor","TypeError","_applyDecoratedDescriptor","decorators","desc","forEach","slice","reverse","reduce","decorator","undefined","_toConsumableArray","arr","isArray","i","arr2","from","isDescriptor","hasOwnProperty","keys","l","entryArgs","apply","concat","prototype","getOwnPropertyDescriptors","obj","descs","getOwnKeys","getOwnPropertyDescriptor","newValue","bind","fn","getBoundSuper","WeakMap","Error","name","mapStore","has","superStore","autobindClass","klass","autobindMethod","_ref","SyntaxError","constructor","getPrototypeOf","boundFn","handle","autobind","asPromsieResolve","val","Promise","accept","_class","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_typeof","Symbol","iterator","getOwnPropertyNames","getOwnPropertySymbols","Meta","object","warn","console","_createClass","defineProperties","props","protoProps","staticProps","FUNCTION_REGEXP","SyntaxErrorReporter","parentKlass","childKlass","parentDescriptor","childDescriptor","topic","_extractFunctionSignature","_this","toString","replace","match","parentPropertySignature","childPropertySignature","_getTopic","_extractTopicSignature","parentTopic","childTopic","condition","msg","error","_this2","m","parentNotation","childNotation","labels","time","timeEnd","profile","profileEnd","BetterStorageAsync","prefix","kind","overrides","store","window","methods","assign","_doSet","_doGet","_doRemove","_doClear","_doLength","_doFullLength","_doKey","_doFullKey","_doHas","data","setItem","JSON","stringify","reject","getItem","then","parse","e","catch","removeItem","clear","fullKeys","n","indexOf","changeExisting","_this7","all","map","acceptInner","rejectInner","getStoreKey","pairs","promises","push","migrateData","newStore","_this8","doSet","doGet","doRemove","doHas","full","doClear","_this9","doLength","doFullLength","doKey","doFullKey","resolve","filter","item","_this10","getAllKeys","_this11","BetterStorage","_this3","_this4"],"mappings":"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"}