{"version":3,"sources":["webpack:///./node_modules/vuex-persist/dist/esm/index.js"],"names":["i","MockStorage","length","Object","keys","this","key","index","setItem","data","toString","getItem","removeItem","clear","SimplePromiseQueue","constructor","_queue","_flushing","enqueue","promise","push","Promise","resolve","flushQueue","chain","nextTask","shift","then","options","replaceArrays","arrayMerge","destinationArray","sourceArray","concatArrays","target","source","concat","merge","into","from","mergeOption","FlattedJSON","JSON","_mutex","subscriber","store","handler","subscribe","subscribed","supportCircular","localStorageLitmus","window","localStorage","err","storage","Error","reducer","modules","state","reduce","a","filter","mutation","strictMode","RESTORE_MUTATION","savedState","mergedState","propertyName","_vm","$set","asyncStorage","restoreState","value","parse","saveState","stringify","plugin","restored","commit","replaceState"],"mappings":"kHAAA,gBAAAA,EAAA,OAKA,IAAIC,EAGAA,EAAc,MACNC,aACA,OAAOC,OAAOC,KAAKC,MAAMH,OAE7BI,IAAIC,GACA,OAAOJ,OAAOC,KAAKC,MAAME,GAE7BC,QAAQF,EAAKG,GACTJ,KAAKC,GAAOG,EAAKC,WAErBC,QAAQL,GACJ,OAAOD,KAAKC,GAEhBM,WAAWN,UACAD,KAAKC,GAEhBO,QACI,IAAK,IAAIP,KAAOH,OAAOC,KAAKC,aACjBA,KAAKC,KAO5B,MAAMQ,EACFC,cACIV,KAAKW,OAAS,GACdX,KAAKY,aAETC,QAAQC,GAEJ,OADAd,KAAKW,OAAOI,KAAKD,GACZd,KAAKY,UAGHI,QAAQC,UAFJjB,KAAKkB,aAIpBA,aACIlB,KAAKY,aACL,MAAMO,EAAQ,KACV,MAAMC,EAAWpB,KAAKW,OAAOU,QAC7B,GAAID,EACA,OAAOA,EAASE,KAAKH,GAGrBnB,KAAKY,cAGb,OAAOI,QAAQC,QAAQE,MAI/B,MAAMI,EAAU,CACZC,cAAe,CACXC,WAAY,CAACC,EAAkBC,EAAaJ,IAAYI,GAE5DC,aAAc,CACVH,WAAY,CAACI,EAAQC,EAAQP,IAAYM,EAAOE,UAAUD,KAGlE,SAASE,EAAMC,EAAMC,EAAMC,GACvB,OAAO,IAAUF,EAAMC,EAAMX,EAAQY,IAGzC,IAAIC,EAAcC,KAgMH,IA3Lf,MAOI3B,YAAYa,GAERvB,KAAKsC,OAAS,IAAI7B,EAMlBT,KAAKuC,WAAcC,GAAWC,GAAYD,EAAME,UAAUD,QACnC,IAAZlB,IACPA,EAAU,IACdvB,KAAKC,IAAuB,MAAfsB,EAAQtB,IAAesB,EAAQtB,IAAM,OAClDD,KAAK2C,cACL3C,KAAK4C,gBAAkBrB,EAAQqB,oBAC3B5C,KAAK4C,kBACLR,EAAc,EAAQ,SAE1BpC,KAAKmC,YAAcZ,EAAQY,aAAe,gBAC1C,IAAIU,KACJ,IACIC,OAAOC,aAAazC,QAAQ,IAEhC,MAAO0C,GACHH,KAQJ,GAAItB,EAAQ0B,QACRjD,KAAKiD,QAAU1B,EAAQ0B,aAEtB,GAAIJ,EACL7C,KAAKiD,QAAUH,OAAOC,iBAErB,KAAInD,EAIL,MAAM,IAAIsD,MAAM,+DAHhBlD,KAAKiD,QAAU,IAAIrD,EAcvBI,KAAKmD,QAA+B,MAAnB5B,EAAQ4B,QACnB5B,EAAQ4B,QACa,MAAnB5B,EAAQ6B,QACJC,GAAUA,EACVA,GAAU9B,EAAQ6B,QAAQE,QAAO,CAACC,EAAG5D,IAAMqC,EAAMuB,EAAG,CAAE,CAAC5D,GAAI0D,EAAM1D,IAAMK,KAAKmC,cAAc,IACtGnC,KAAKwD,OAASjC,EAAQiC,QAAU,CAAEC,OAClCzD,KAAK0D,WAAanC,EAAQmC,eAC1B1D,KAAK2D,iBAAmB,SAA0BN,EAAOO,GACrD,MAAMC,EAAc7B,EAAMqB,EAAOO,GAAc,GAAI5D,KAAKmC,aACxD,IAAK,MAAM2B,KAAgBhE,OAAOC,KAAK8D,GACnC7D,KAAK+D,IAAIC,KAAKX,EAAOS,EAAcD,EAAYC,KAGvD9D,KAAKiE,aAAe1C,EAAQ0C,iBACxBjE,KAAKiE,cAMLjE,KAAKkE,aAAyC,MAAxB3C,EAAQ2C,aACxB3C,EAAQ2C,aACR,CAAEjE,EAAKgD,IAAY,EAAU3C,QAAQL,GAClCqB,MAAM6C,GAA2B,iBAAVA,EACrBnE,KAAK4C,gBACFR,EAAYgC,MAAMD,GAAS,MAC3B9B,KAAK+B,MAAMD,GAAS,MACvBA,GAAS,KAMpBnE,KAAKqE,UAAmC,MAArB9C,EAAQ8C,UACrB9C,EAAQ8C,UACR,CAAEpE,EAAKoD,EAAOJ,IAAY,EAAU9C,QAAQF,EAE7CD,KAAKiE,aACAjC,EAAM,GAAIqB,GAAS,GAAIrD,KAAKmC,aAC3BnC,KAAK4C,gBACFR,EAAYkC,UAAUjB,GACtBhB,KAAKiC,UAAUjB,IAK7BrD,KAAKuE,OAAU/B,IAUXA,EAAMgC,SAAYxE,KAAKkE,aAAalE,KAAKC,IAAKD,KAAKiD,SAAU3B,MAAMsC,IAI3D5D,KAAK0D,WACLlB,EAAMiC,OAAO,mBAAoBb,GAGjCpB,EAAMkC,aAAa1C,EAAMQ,EAAMa,MAAOO,GAAc,GAAI5D,KAAKmC,cAEjEnC,KAAKuC,WAAWC,EAAhBxC,EAAuB,CAACyD,EAAUJ,KAC1BrD,KAAKwD,OAAOC,IACZzD,KAAKsC,OAAOzB,QAAQb,KAAKqE,UAAUrE,KAAKC,IAAKD,KAAKmD,QAAQE,GAAQrD,KAAKiD,aAG/EjD,KAAK2C,oBAUb3C,KAAKkE,aAAyC,MAAxB3C,EAAQ2C,aACxB3C,EAAQ2C,aACR,CAAEjE,EAAKgD,KACL,MAAMkB,EAAQ,EAAU7D,QAAQL,GAChC,MAAqB,iBAAVkE,EACCnE,KAAK4C,gBACPR,EAAYgC,MAAMD,GAAS,MAC3B9B,KAAK+B,MAAMD,GAAS,MAGlBA,GAAS,IAQ7BnE,KAAKqE,UAAmC,MAArB9C,EAAQ8C,UACrB9C,EAAQ8C,UACR,CAAEpE,EAAKoD,EAAOJ,IAAY,EAAU9C,QAAQF,EAC7CD,KAAK4C,gBACAR,EAAYkC,UAAUjB,GACtBhB,KAAKiC,UAAUjB,IAKzBrD,KAAKuE,OAAU/B,IACX,MAAMoB,EAAa5D,KAAKkE,aAAalE,KAAKC,IAAKD,KAAKiD,SAChDjD,KAAK0D,WACLlB,EAAMiC,OAAO,mBAAoBb,GAGjCpB,EAAMkC,aAAa1C,EAAMQ,EAAMa,MAAOO,GAAc,GAAI5D,KAAKmC,cAEjEnC,KAAKuC,WAAWC,EAAhBxC,EAAuB,CAACyD,EAAUJ,KAC1BrD,KAAKwD,OAAOC,IACZzD,KAAKqE,UAAUrE,KAAKC,IAAKD,KAAKmD,QAAQE,GAAQrD,KAAKiD,YAG3DjD,KAAK2C","file":"js/chunk-vendors~85a2bf1a.a9654383.js","sourcesContent":["import deepmerge from 'deepmerge';\n\n/**\r\n * Created by championswimmer on 22/07/17.\r\n */\r\nlet MockStorage;\r\n// @ts-ignore\r\n{\r\n MockStorage = class {\r\n get length() {\r\n return Object.keys(this).length;\r\n }\r\n key(index) {\r\n return Object.keys(this)[index];\r\n }\r\n setItem(key, data) {\r\n this[key] = data.toString();\r\n }\r\n getItem(key) {\r\n return this[key];\r\n }\r\n removeItem(key) {\r\n delete this[key];\r\n }\r\n clear() {\r\n for (let key of Object.keys(this)) {\r\n delete this[key];\r\n }\r\n }\r\n };\r\n}\n\n// tslint:disable: variable-name\r\nclass SimplePromiseQueue {\r\n constructor() {\r\n this._queue = [];\r\n this._flushing = false;\r\n }\r\n enqueue(promise) {\r\n this._queue.push(promise);\r\n if (!this._flushing) {\r\n return this.flushQueue();\r\n }\r\n return Promise.resolve();\r\n }\r\n flushQueue() {\r\n this._flushing = true;\r\n const chain = () => {\r\n const nextTask = this._queue.shift();\r\n if (nextTask) {\r\n return nextTask.then(chain);\r\n }\r\n else {\r\n this._flushing = false;\r\n }\r\n };\r\n return Promise.resolve(chain());\r\n }\r\n}\n\nconst options = {\r\n replaceArrays: {\r\n arrayMerge: (destinationArray, sourceArray, options) => sourceArray\r\n },\r\n concatArrays: {\r\n arrayMerge: (target, source, options) => target.concat(...source)\r\n }\r\n};\r\nfunction merge(into, from, mergeOption) {\r\n return deepmerge(into, from, options[mergeOption]);\r\n}\n\nlet FlattedJSON = JSON;\r\n/**\r\n * A class that implements the vuex persistence.\r\n * @type S type of the 'state' inside the store (default: any)\r\n */\r\nclass VuexPersistence {\r\n /**\r\n * Create a {@link VuexPersistence} object.\r\n * Use the plugin function of this class as a\r\n * Vuex plugin.\r\n * @param {PersistOptions} options\r\n */\r\n constructor(options) {\r\n // tslint:disable-next-line:variable-name\r\n this._mutex = new SimplePromiseQueue();\r\n /**\r\n * Creates a subscriber on the store. automatically is used\r\n * when this is used a vuex plugin. Not for manual usage.\r\n * @param store\r\n */\r\n this.subscriber = (store) => (handler) => store.subscribe(handler);\r\n if (typeof options === 'undefined')\r\n options = {};\r\n this.key = ((options.key != null) ? options.key : 'vuex');\r\n this.subscribed = false;\r\n this.supportCircular = options.supportCircular || false;\r\n if (this.supportCircular) {\r\n FlattedJSON = require('flatted');\r\n }\r\n this.mergeOption = options.mergeOption || 'replaceArrays';\r\n let localStorageLitmus = true;\r\n try {\r\n window.localStorage.getItem('');\r\n }\r\n catch (err) {\r\n localStorageLitmus = false;\r\n }\r\n /**\r\n * 1. First, prefer storage sent in optinos\r\n * 2. Otherwise, use window.localStorage if available\r\n * 3. Finally, try to use MockStorage\r\n * 4. None of above? Well we gotta fail.\r\n */\r\n if (options.storage) {\r\n this.storage = options.storage;\r\n }\r\n else if (localStorageLitmus) {\r\n this.storage = window.localStorage;\r\n }\r\n else if (MockStorage) {\r\n this.storage = new MockStorage();\r\n }\r\n else {\r\n throw new Error(\"Neither 'window' is defined, nor 'MockStorage' is available\");\r\n }\r\n /**\r\n * How this works is -\r\n * 1. If there is options.reducer function, we use that, if not;\r\n * 2. We check options.modules;\r\n * 1. If there is no options.modules array, we use entire state in reducer\r\n * 2. Otherwise, we create a reducer that merges all those state modules that are\r\n * defined in the options.modules[] array\r\n * @type {((state: S) => {}) | ((state: S) => S) | ((state: any) => {})}\r\n */\r\n this.reducer = ((options.reducer != null)\r\n ? options.reducer\r\n : ((options.modules == null)\r\n ? ((state) => state)\r\n : ((state) => options.modules.reduce((a, i) => merge(a, { [i]: state[i] }, this.mergeOption), { /* start empty accumulator*/}))));\r\n this.filter = options.filter || ((mutation) => true);\r\n this.strictMode = options.strictMode || false;\r\n this.RESTORE_MUTATION = function RESTORE_MUTATION(state, savedState) {\r\n const mergedState = merge(state, savedState || {}, this.mergeOption);\r\n for (const propertyName of Object.keys(mergedState)) {\r\n this._vm.$set(state, propertyName, mergedState[propertyName]);\r\n }\r\n };\r\n this.asyncStorage = options.asyncStorage || false;\r\n if (this.asyncStorage) {\r\n /**\r\n * Async {@link #VuexPersistence.restoreState} implementation\r\n * @type {((key: string, storage?: Storage) =>\r\n * (Promise | S)) | ((key: string, storage: AsyncStorage) => Promise)}\r\n */\r\n this.restoreState = ((options.restoreState != null)\r\n ? options.restoreState\r\n : ((key, storage) => (storage).getItem(key)\r\n .then((value) => typeof value === 'string' // If string, parse, or else, just return\r\n ? (this.supportCircular\r\n ? FlattedJSON.parse(value || '{}')\r\n : JSON.parse(value || '{}'))\r\n : (value || {}))));\r\n /**\r\n * Async {@link #VuexPersistence.saveState} implementation\r\n * @type {((key: string, state: {}, storage?: Storage) =>\r\n * (Promise | void)) | ((key: string, state: {}, storage?: Storage) => Promise)}\r\n */\r\n this.saveState = ((options.saveState != null)\r\n ? options.saveState\r\n : ((key, state, storage) => (storage).setItem(key, // Second argument is state _object_ if asyc storage, stringified otherwise\r\n // do not stringify the state if the storage type is async\r\n (this.asyncStorage\r\n ? merge({}, state || {}, this.mergeOption)\r\n : (this.supportCircular\r\n ? FlattedJSON.stringify(state)\r\n : JSON.stringify(state))))));\r\n /**\r\n * Async version of plugin\r\n * @param {Store} store\r\n */\r\n this.plugin = (store) => {\r\n /**\r\n * For async stores, we're capturing the Promise returned\r\n * by the `restoreState()` function in a `restored` property\r\n * on the store itself. This would allow app developers to\r\n * determine when and if the store's state has indeed been\r\n * refreshed. This approach was suggested by GitHub user @hotdogee.\r\n * See https://github.com/championswimmer/vuex-persist/pull/118#issuecomment-500914963\r\n * @since 2.1.0\r\n */\r\n store.restored = (this.restoreState(this.key, this.storage)).then((savedState) => {\r\n /**\r\n * If in strict mode, do only via mutation\r\n */\r\n if (this.strictMode) {\r\n store.commit('RESTORE_MUTATION', savedState);\r\n }\r\n else {\r\n store.replaceState(merge(store.state, savedState || {}, this.mergeOption));\r\n }\r\n this.subscriber(store)((mutation, state) => {\r\n if (this.filter(mutation)) {\r\n this._mutex.enqueue(this.saveState(this.key, this.reducer(state), this.storage));\r\n }\r\n });\r\n this.subscribed = true;\r\n });\r\n };\r\n }\r\n else {\r\n /**\r\n * Sync {@link #VuexPersistence.restoreState} implementation\r\n * @type {((key: string, storage?: Storage) =>\r\n * (Promise | S)) | ((key: string, storage: Storage) => (any | string | {}))}\r\n */\r\n this.restoreState = ((options.restoreState != null)\r\n ? options.restoreState\r\n : ((key, storage) => {\r\n const value = (storage).getItem(key);\r\n if (typeof value === 'string') { // If string, parse, or else, just return\r\n return (this.supportCircular\r\n ? FlattedJSON.parse(value || '{}')\r\n : JSON.parse(value || '{}'));\r\n }\r\n else {\r\n return (value || {});\r\n }\r\n }));\r\n /**\r\n * Sync {@link #VuexPersistence.saveState} implementation\r\n * @type {((key: string, state: {}, storage?: Storage) =>\r\n * (Promise | void)) | ((key: string, state: {}, storage?: Storage) => Promise)}\r\n */\r\n this.saveState = ((options.saveState != null)\r\n ? options.saveState\r\n : ((key, state, storage) => (storage).setItem(key, // Second argument is state _object_ if localforage, stringified otherwise\r\n (this.supportCircular\r\n ? FlattedJSON.stringify(state)\r\n : JSON.stringify(state)))));\r\n /**\r\n * Sync version of plugin\r\n * @param {Store} store\r\n */\r\n this.plugin = (store) => {\r\n const savedState = this.restoreState(this.key, this.storage);\r\n if (this.strictMode) {\r\n store.commit('RESTORE_MUTATION', savedState);\r\n }\r\n else {\r\n store.replaceState(merge(store.state, savedState || {}, this.mergeOption));\r\n }\r\n this.subscriber(store)((mutation, state) => {\r\n if (this.filter(mutation)) {\r\n this.saveState(this.key, this.reducer(state), this.storage);\r\n }\r\n });\r\n this.subscribed = true;\r\n };\r\n }\r\n }\r\n}\n\nexport default VuexPersistence;\nexport { MockStorage, VuexPersistence };\n//# sourceMappingURL=index.js.map\n"],"sourceRoot":""}