jcgertig/betterstorage

View on GitHub
build/betterstorage.js.map

Summary

Maintainability
Test Coverage
{"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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"}