Socket
Socket
Sign inDemoInstall

@ngx-pwa/local-storage

Package Overview
Dependencies
Maintainers
1
Versions
126
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ngx-pwa/local-storage - npm Package Compare versions

Comparing version 6.1.0 to 6.1.1-beta.0

2

bundles/ngx-pwa-local-storage.umd.min.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@ngx-pwa/local-storage",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t((e["ngx-pwa"]=e["ngx-pwa"]||{},e["ngx-pwa"]["local-storage"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,function(e,r,s,c,n){"use strict";var o=new r.InjectionToken("localStoragePrefix",{providedIn:"root",factory:function(){return""}});var i=function(){function e(e){void 0===e&&(e=null),this.userPrefix=e,this.prefix="",e&&(this.prefix=e+"_")}return e.prototype.getItem=function(e){var t=localStorage.getItem(""+this.prefix+e),r=null;if(null!=t)try{r=JSON.parse(t)}catch(n){return s.throwError(new Error("Invalid data in localStorage."))}return s.of(r)},e.prototype.setItem=function(e,t){return localStorage.setItem(""+this.prefix+e,JSON.stringify(t)),s.of(!0)},e.prototype.removeItem=function(e){return localStorage.removeItem(""+this.prefix+e),s.of(!0)},e.prototype.clear=function(){return localStorage.clear(),s.of(!0)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:r.Optional},{type:r.Inject,args:[o]}]}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(o,8))},token:e,providedIn:"root"}),e}(),a=function(){function e(e){void 0===e&&(e=null),this.prefix=e,this.dbName="ngStorage",this.objectStoreName="localStorage",this.keyPath="key",this.dataPath="value",this.fallback=null,e&&(this.dbName=e+"_"+this.dbName),this.database=new s.ReplaySubject,this.connect(e)}return e.prototype.getItem=function(t){var r=this;return this.fallback?this.fallback.getItem(t):this.transaction().pipe(c.map(function(e){return e.get(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e&&r.dataPath in e?e[r.dataPath]:null}));return s.race(t,r.toErrorObservable(e,"getter")).pipe(c.first())}),c.first())},e.prototype.setItem=function(i,a){var u=this;return this.fallback?this.fallback.setItem(i,a):null==a?s.of(!0):this.getItem(i).pipe(c.map(function(e){return null==e?"add":"put"}),c.mergeMap(function(o){return u.transaction("readwrite").pipe(c.mergeMap(function(e){var t,r,n;switch(o){case"add":t=e.add(((r={})[u.dataPath]=a,r),i);break;case"put":default:t=e.put(((n={})[u.dataPath]=a,n),i)}return s.race(u.toSuccessObservable(t),u.toErrorObservable(t,"setter")).pipe(c.first())}))}),c.first())},e.prototype.removeItem=function(r){var n=this;return this.fallback?this.fallback.removeItem(r):this.getItem(r).pipe(c.mergeMap(function(e){return null!=e?n.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e["delete"](r);return s.race(n.toSuccessObservable(t),n.toErrorObservable(t,"remover")).pipe(c.first())})):s.of(!0)}),c.first())},e.prototype.clear=function(){var r=this;return this.fallback?this.fallback.clear():this.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e.clear();return s.race(r.toSuccessObservable(t),r.toErrorObservable(t,"clearer")).pipe(c.first())}),c.first())},e.prototype.connect=function(e){var t,r=this;void 0===e&&(e=null);try{t=indexedDB.open(this.dbName)}catch(o){return void this.setFallback(e)}s.fromEvent(t,"upgradeneeded").pipe(c.first()).subscribe(function(e){var t=e.target.result;t.objectStoreNames.contains(r.objectStoreName)||t.createObjectStore(r.objectStoreName)});var n=s.fromEvent(t,"success");s.race(n,this.toErrorObservable(t,"connection")).pipe(c.first()).subscribe(function(e){r.database.next(e.target.result)},function(){r.setFallback(e)})},e.prototype.transaction=function(t){var r=this;return void 0===t&&(t="readonly"),this.database.pipe(c.map(function(e){return e.transaction([r.objectStoreName],t).objectStore(r.objectStoreName)}))},e.prototype.toSuccessObservable=function(e){return s.fromEvent(e,"success").pipe(c.map(function(){return!0}))},e.prototype.toErrorObservable=function(e,t){return void 0===t&&(t=""),s.fromEvent(e,"error").pipe(c.mergeMap(function(){return s.throwError(new Error("IndexedDB "+t+" issue : "+e.error.message+"."))}))},e.prototype.setFallback=function(e){this.fallback=new i(e)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:r.Optional},{type:r.Inject,args:[o]}]}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(o,8))},token:e,providedIn:"root"}),e}(),u=function(){function e(){this.localStorage=new Map}return e.prototype.getItem=function(e){var t=this.localStorage.get(e);return s.of(t!==undefined?t:null)},e.prototype.setItem=function(e,t){return this.localStorage.set(e,t),s.of(!0)},e.prototype.removeItem=function(e){return this.localStorage["delete"](e),s.of(!0)},e.prototype.clear=function(){return this.localStorage.clear(),s.of(!0)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e},token:e,providedIn:"root"}),e}();function l(e,t){return n.isPlatformBrowser(e)&&"indexedDB"in window&&indexedDB!==undefined&&null!==indexedDB?new a(t):n.isPlatformBrowser(e)&&"localStorage"in window&&localStorage!==undefined&&null!==localStorage?new i(t):new u}var p=function(){function e(){}return e.decorators=[{type:r.Injectable,args:[{providedIn:"root",useFactory:l,deps:[r.PLATFORM_ID,[new r.Optional,o]]}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return l(r.inject(r.PLATFORM_ID),r.inject(o,8))},token:e,providedIn:"root"}),e}();function f(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}var m=function(){function e(){}return e.prototype.validate=function(e,t){if(!((t.hasOwnProperty("const")&&t["const"]!==undefined||t.hasOwnProperty("enum")&&null!=t["enum"]||t.hasOwnProperty("type")&&null!=t.type)&&"array"!==t.type&&"object"!==t.type||t.hasOwnProperty("properties")&&null!=t.properties||t.hasOwnProperty("items")&&null!=t.items))throw new Error("Each value must have a 'type' or 'properties' or 'items' or 'const' or 'enum', to enforce strict types.");return(!t.hasOwnProperty("const")||t["const"]===undefined||e===t["const"])&&(!!this.validateEnum(e,t)&&(!!this.validateType(e,t)&&(!!this.validateItems(e,t)&&(!!this.validateProperties(e,t)&&!!this.validateRequired(e,t)))))},e.prototype.isObjectNotNull=function(e){return null!==e&&"object"==typeof e},e.prototype.validateProperties=function(e,t){if(!t.hasOwnProperty("properties")||null==t.properties)return!0;if(!this.isObjectNotNull(e))return!1;if(Object.keys(t.properties).length!==Object.keys(e).length)return!1;for(var r in t.properties)if(t.properties.hasOwnProperty(r)&&e.hasOwnProperty(r)&&!this.validate(e[r],t.properties[r]))return!1;return!0},e.prototype.validateRequired=function(e,t){if(!t.hasOwnProperty("required")||null==t.required)return!0;if(!this.isObjectNotNull(e))return!1;try{for(var r=f(t.required),n=r.next();!n.done;n=r.next()){var o=n.value;if(!t.properties||!t.properties.hasOwnProperty(o))throw new Error("'required' properties must be described in 'properties' too.");if(!e.hasOwnProperty(o))return!1}}catch(u){i={error:u}}finally{try{n&&!n.done&&(a=r["return"])&&a.call(r)}finally{if(i)throw i.error}}return!0;var i,a},e.prototype.validateEnum=function(e,t){return!t.hasOwnProperty("enum")||null==t["enum"]||-1!==t["enum"].indexOf(e)},e.prototype.validateType=function(e,t){if(!t.hasOwnProperty("type")||null==t.type)return!0;switch(t.type){case"null":return null===e;case"string":return this.validateString(e,t);case"number":case"integer":return this.validateNumber(e,t);case"boolean":return"boolean"==typeof e;case"object":return"object"==typeof e;case"array":return Array.isArray(e)}},e.prototype.validateItems=function(e,t){if(!t.hasOwnProperty("items")||null==t.items)return!0;if(!Array.isArray(e))return!1;if(t.hasOwnProperty("maxItems")&&null!=t.maxItems){if(!Number.isInteger(t.maxItems)||t.maxItems<0)throw new Error("'maxItems' must be a non-negative integer.");if(e.length>t.maxItems)return!1}if(t.hasOwnProperty("minItems")&&null!=t.minItems){if(!Number.isInteger(t.minItems)||t.minItems<0)throw new Error("'minItems' must be a non-negative integer.");if(e.length<t.minItems)return!1}if(t.hasOwnProperty("uniqueItems")&&null!=t.uniqueItems&&t.uniqueItems){var r=new Set(e);if(e.length!==r.size)return!1}if(Array.isArray(t.items))return this.validateItemsList(e,t);try{for(var n=f(e),o=n.next();!o.done;o=n.next()){var i=o.value;if(!this.validate(i,t.items))return!1}}catch(s){a={error:s}}finally{try{o&&!o.done&&(u=n["return"])&&u.call(n)}finally{if(a)throw a.error}}return!0;var a,u},e.prototype.validateItemsList=function(e,t){var r=t.items;if(e.length!==r.length)return!1;for(var n=0;n<r.length;n+=1)if(!this.validate(e[n],r[n]))return!1;return!0},e.prototype.validateString=function(e,t){if("string"!=typeof e)return!1;if(t.hasOwnProperty("maxLength")&&null!=t.maxLength){if(!Number.isInteger(t.maxLength)||t.maxLength<0)throw new Error("'maxLength' must be a non-negative integer.");if(e.length>t.maxLength)return!1}if(t.hasOwnProperty("minLength")&&null!=t.minLength){if(!Number.isInteger(t.minLength)||t.minLength<0)throw new Error("'minLength' must be a non-negative integer.");if(e.length<t.minLength)return!1}if(t.hasOwnProperty("pattern")&&null!=t.pattern&&!new RegExp(t.pattern).test(e))return!1;return!0},e.prototype.validateNumber=function(e,t){if("number"!=typeof e)return!1;if("integer"===t.type&&!Number.isInteger(e))return!1;if(t.hasOwnProperty("multipleOf")&&null!=t.multipleOf){if(t.multipleOf<=0)throw new Error("'multipleOf' must be a number strictly greater than 0.");if(!Number.isInteger(e/t.multipleOf))return!1}return!(t.hasOwnProperty("maximum")&&null!=t.maximum&&e>t.maximum)&&(!(t.hasOwnProperty("exclusiveMaximum")&&null!=t.exclusiveMaximum&&e>=t.exclusiveMaximum)&&(!(t.hasOwnProperty("minimum")&&null!=t.minimum&&e<t.minimum)&&!(t.hasOwnProperty("exclusiveMinimum")&&null!=t.exclusiveMinimum&&e<=t.exclusiveMinimum)))},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e},token:e,providedIn:"root"}),e}(),t=function(){function e(e,t){this.database=e,this.jsonValidator=t,this.getItemOptionsDefault={schema:null}}return e.prototype.getItem=function(e,n){var o=this;return void 0===n&&(n=this.getItemOptionsDefault),this.database.getItem(e).pipe(c.mergeMap(function(e){if(n.schema&&null!==e){var t=!0;try{t=o.jsonValidator.validate(e,n.schema)}catch(r){return s.throwError(r)}if(!t)return s.throwError(new Error("JSON invalid"))}return s.of(e)}))},e.prototype.setItem=function(e,t){return this.database.setItem(e,t)},e.prototype.removeItem=function(e){return this.database.removeItem(e)},e.prototype.clear=function(){return this.database.clear()},e.prototype.setItemSubscribe=function(e,t){this.setItem(e,t).subscribe(function(){},function(){})},e.prototype.removeItemSubscribe=function(e){this.removeItem(e).subscribe(function(){},function(){})},e.prototype.clearSubscribe=function(){this.clear().subscribe(function(){},function(){})},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:p},{type:m}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(p),r.inject(m))},token:e,providedIn:"root"}),e}();e.LocalDatabase=p,e.IndexedDBDatabase=a,e.LocalStorageDatabase=i,e.MockLocalDatabase=u,e.JSONValidator=m,e.LocalStorage=t,e.localStorageProviders=function d(e){return[e.prefix?{provide:o,useValue:e.prefix}:[]]},e.LOCAL_STORAGE_PREFIX=o,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@ngx-pwa/local-storage",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t((e["ngx-pwa"]=e["ngx-pwa"]||{},e["ngx-pwa"]["local-storage"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,function(e,r,s,c,n){"use strict";var o=new r.InjectionToken("localStoragePrefix",{providedIn:"root",factory:function(){return""}});var i=function(){function e(e){void 0===e&&(e=null),this.userPrefix=e,this.prefix="",e&&(this.prefix=e+"_")}return e.prototype.getItem=function(e){var t=localStorage.getItem(""+this.prefix+e),r=null;if(null!=t)try{r=JSON.parse(t)}catch(n){return s.throwError(new Error("Invalid data in localStorage."))}return s.of(r)},e.prototype.setItem=function(e,t){return localStorage.setItem(""+this.prefix+e,JSON.stringify(t)),s.of(!0)},e.prototype.removeItem=function(e){return localStorage.removeItem(""+this.prefix+e),s.of(!0)},e.prototype.clear=function(){return localStorage.clear(),s.of(!0)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:r.Optional},{type:r.Inject,args:[o]}]}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(o,8))},token:e,providedIn:"root"}),e}(),a=function(){function e(e){void 0===e&&(e=null),this.prefix=e,this.dbName="ngStorage",this.objectStoreName="localStorage",this.keyPath="key",this.dataPath="value",this.fallback=null,e&&(this.dbName=e+"_"+this.dbName),this.database=new s.ReplaySubject,this.connect(e)}return e.prototype.getItem=function(e){return this.fallback?this.fallback.getItem(e):this.getItemFromTransaction(e)},e.prototype.getItemFromTransaction=function(t,e){var r=this;return(e?s.of(e):this.transaction()).pipe(c.map(function(e){return e.get(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e&&r.dataPath in e?e[r.dataPath]:null}));return s.race(t,r.toErrorObservable(e,"getter")).pipe(c.first())}),c.first())},e.prototype.setItem=function(o,i){var a=this;if(this.fallback)return this.fallback.setItem(o,i);if(null==i)return s.of(!0);var e=this.transaction("readwrite"),u=null;return e.pipe(c.tap(function(e){u=e}),c.mergeMap(function(){return a.getItemFromTransaction(o,u)}),c.map(function(e){return null==e?"add":"put"}),c.mergeMap(function(e){var t,r,n;switch(e){case"add":t=u.add(((r={})[a.dataPath]=i,r),o);break;case"put":default:t=u.put(((n={})[a.dataPath]=i,n),o)}return s.race(a.toSuccessObservable(t),a.toErrorObservable(t,"setter")).pipe(c.first())}),c.first())},e.prototype.removeItem=function(r){var n=this;return this.fallback?this.fallback.removeItem(r):this.getItem(r).pipe(c.mergeMap(function(e){return null!=e?n.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e["delete"](r);return s.race(n.toSuccessObservable(t),n.toErrorObservable(t,"remover")).pipe(c.first())})):s.of(!0)}),c.first())},e.prototype.clear=function(){var r=this;return this.fallback?this.fallback.clear():this.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e.clear();return s.race(r.toSuccessObservable(t),r.toErrorObservable(t,"clearer")).pipe(c.first())}),c.first())},e.prototype.connect=function(e){var t,r=this;void 0===e&&(e=null);try{t=indexedDB.open(this.dbName)}catch(o){return void this.setFallback(e)}s.fromEvent(t,"upgradeneeded").pipe(c.first()).subscribe(function(e){var t=e.target.result;t.objectStoreNames.contains(r.objectStoreName)||t.createObjectStore(r.objectStoreName)});var n=s.fromEvent(t,"success");s.race(n,this.toErrorObservable(t,"connection")).pipe(c.first()).subscribe(function(e){r.database.next(e.target.result)},function(){r.setFallback(e)})},e.prototype.transaction=function(t){var r=this;return void 0===t&&(t="readonly"),this.database.pipe(c.map(function(e){return e.transaction([r.objectStoreName],t).objectStore(r.objectStoreName)}))},e.prototype.toSuccessObservable=function(e){return s.fromEvent(e,"success").pipe(c.map(function(){return!0}))},e.prototype.toErrorObservable=function(e,t){return void 0===t&&(t=""),s.fromEvent(e,"error").pipe(c.mergeMap(function(){return s.throwError(new Error("IndexedDB "+t+" issue : "+e.error.message+"."))}))},e.prototype.setFallback=function(e){this.fallback=new i(e)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:r.Optional},{type:r.Inject,args:[o]}]}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(o,8))},token:e,providedIn:"root"}),e}(),u=function(){function e(){this.localStorage=new Map}return e.prototype.getItem=function(e){var t=this.localStorage.get(e);return s.of(t!==undefined?t:null)},e.prototype.setItem=function(e,t){return this.localStorage.set(e,t),s.of(!0)},e.prototype.removeItem=function(e){return this.localStorage["delete"](e),s.of(!0)},e.prototype.clear=function(){return this.localStorage.clear(),s.of(!0)},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e},token:e,providedIn:"root"}),e}();function l(e,t){return n.isPlatformBrowser(e)&&"indexedDB"in window&&indexedDB!==undefined&&null!==indexedDB?new a(t):n.isPlatformBrowser(e)&&"localStorage"in window&&localStorage!==undefined&&null!==localStorage?new i(t):new u}var p=function(){function e(){}return e.decorators=[{type:r.Injectable,args:[{providedIn:"root",useFactory:l,deps:[r.PLATFORM_ID,[new r.Optional,o]]}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return l(r.inject(r.PLATFORM_ID),r.inject(o,8))},token:e,providedIn:"root"}),e}();function f(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}var m=function(){function e(){}return e.prototype.validate=function(e,t){if(!((t.hasOwnProperty("const")&&t["const"]!==undefined||t.hasOwnProperty("enum")&&null!=t["enum"]||t.hasOwnProperty("type")&&null!=t.type)&&"array"!==t.type&&"object"!==t.type||t.hasOwnProperty("properties")&&null!=t.properties||t.hasOwnProperty("items")&&null!=t.items))throw new Error("Each value must have a 'type' or 'properties' or 'items' or 'const' or 'enum', to enforce strict types.");return(!t.hasOwnProperty("const")||t["const"]===undefined||e===t["const"])&&(!!this.validateEnum(e,t)&&(!!this.validateType(e,t)&&(!!this.validateItems(e,t)&&(!!this.validateProperties(e,t)&&!!this.validateRequired(e,t)))))},e.prototype.isObjectNotNull=function(e){return null!==e&&"object"==typeof e},e.prototype.validateProperties=function(e,t){if(!t.hasOwnProperty("properties")||null==t.properties)return!0;if(!this.isObjectNotNull(e))return!1;if(Object.keys(t.properties).length!==Object.keys(e).length)return!1;for(var r in t.properties)if(t.properties.hasOwnProperty(r)&&e.hasOwnProperty(r)&&!this.validate(e[r],t.properties[r]))return!1;return!0},e.prototype.validateRequired=function(e,t){if(!t.hasOwnProperty("required")||null==t.required)return!0;if(!this.isObjectNotNull(e))return!1;try{for(var r=f(t.required),n=r.next();!n.done;n=r.next()){var o=n.value;if(!t.properties||!t.properties.hasOwnProperty(o))throw new Error("'required' properties must be described in 'properties' too.");if(!e.hasOwnProperty(o))return!1}}catch(u){i={error:u}}finally{try{n&&!n.done&&(a=r["return"])&&a.call(r)}finally{if(i)throw i.error}}return!0;var i,a},e.prototype.validateEnum=function(e,t){return!t.hasOwnProperty("enum")||null==t["enum"]||-1!==t["enum"].indexOf(e)},e.prototype.validateType=function(e,t){if(!t.hasOwnProperty("type")||null==t.type)return!0;switch(t.type){case"null":return null===e;case"string":return this.validateString(e,t);case"number":case"integer":return this.validateNumber(e,t);case"boolean":return"boolean"==typeof e;case"object":return"object"==typeof e;case"array":return Array.isArray(e)}},e.prototype.validateItems=function(e,t){if(!t.hasOwnProperty("items")||null==t.items)return!0;if(!Array.isArray(e))return!1;if(t.hasOwnProperty("maxItems")&&null!=t.maxItems){if(!Number.isInteger(t.maxItems)||t.maxItems<0)throw new Error("'maxItems' must be a non-negative integer.");if(e.length>t.maxItems)return!1}if(t.hasOwnProperty("minItems")&&null!=t.minItems){if(!Number.isInteger(t.minItems)||t.minItems<0)throw new Error("'minItems' must be a non-negative integer.");if(e.length<t.minItems)return!1}if(t.hasOwnProperty("uniqueItems")&&null!=t.uniqueItems&&t.uniqueItems){var r=new Set(e);if(e.length!==r.size)return!1}if(Array.isArray(t.items))return this.validateItemsList(e,t);try{for(var n=f(e),o=n.next();!o.done;o=n.next()){var i=o.value;if(!this.validate(i,t.items))return!1}}catch(s){a={error:s}}finally{try{o&&!o.done&&(u=n["return"])&&u.call(n)}finally{if(a)throw a.error}}return!0;var a,u},e.prototype.validateItemsList=function(e,t){var r=t.items;if(e.length!==r.length)return!1;for(var n=0;n<r.length;n+=1)if(!this.validate(e[n],r[n]))return!1;return!0},e.prototype.validateString=function(e,t){if("string"!=typeof e)return!1;if(t.hasOwnProperty("maxLength")&&null!=t.maxLength){if(!Number.isInteger(t.maxLength)||t.maxLength<0)throw new Error("'maxLength' must be a non-negative integer.");if(e.length>t.maxLength)return!1}if(t.hasOwnProperty("minLength")&&null!=t.minLength){if(!Number.isInteger(t.minLength)||t.minLength<0)throw new Error("'minLength' must be a non-negative integer.");if(e.length<t.minLength)return!1}if(t.hasOwnProperty("pattern")&&null!=t.pattern&&!new RegExp(t.pattern).test(e))return!1;return!0},e.prototype.validateNumber=function(e,t){if("number"!=typeof e)return!1;if("integer"===t.type&&!Number.isInteger(e))return!1;if(t.hasOwnProperty("multipleOf")&&null!=t.multipleOf){if(t.multipleOf<=0)throw new Error("'multipleOf' must be a number strictly greater than 0.");if(!Number.isInteger(e/t.multipleOf))return!1}return!(t.hasOwnProperty("maximum")&&null!=t.maximum&&e>t.maximum)&&(!(t.hasOwnProperty("exclusiveMaximum")&&null!=t.exclusiveMaximum&&e>=t.exclusiveMaximum)&&(!(t.hasOwnProperty("minimum")&&null!=t.minimum&&e<t.minimum)&&!(t.hasOwnProperty("exclusiveMinimum")&&null!=t.exclusiveMinimum&&e<=t.exclusiveMinimum)))},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e},token:e,providedIn:"root"}),e}(),t=function(){function e(e,t){this.database=e,this.jsonValidator=t,this.getItemOptionsDefault={schema:null}}return e.prototype.getItem=function(e,n){var o=this;return void 0===n&&(n=this.getItemOptionsDefault),this.database.getItem(e).pipe(c.mergeMap(function(e){if(n.schema&&null!==e){var t=!0;try{t=o.jsonValidator.validate(e,n.schema)}catch(r){return s.throwError(r)}if(!t)return s.throwError(new Error("JSON invalid"))}return s.of(e)}))},e.prototype.setItem=function(e,t){return this.database.setItem(e,t)},e.prototype.removeItem=function(e){return this.database.removeItem(e)},e.prototype.clear=function(){return this.database.clear()},e.prototype.setItemSubscribe=function(e,t){this.setItem(e,t).subscribe(function(){},function(){})},e.prototype.removeItemSubscribe=function(e){this.removeItem(e).subscribe(function(){},function(){})},e.prototype.clearSubscribe=function(){this.clear().subscribe(function(){},function(){})},e.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:p},{type:m}]},e.ngInjectableDef=r.defineInjectable({factory:function t(){return new e(r.inject(p),r.inject(m))},token:e,providedIn:"root"}),e}();e.LocalDatabase=p,e.IndexedDBDatabase=a,e.LocalStorageDatabase=i,e.MockLocalDatabase=u,e.JSONValidator=m,e.LocalStorage=t,e.localStorageProviders=function d(e){return[e.prefix?{provide:o,useValue:e.prefix}:[]]},e.LOCAL_STORAGE_PREFIX=o,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-pwa-local-storage.umd.min.js.map

@@ -7,3 +7,3 @@ /**

import { ReplaySubject, fromEvent, of, throwError, race } from 'rxjs';
import { map, mergeMap, first } from 'rxjs/operators';
import { map, mergeMap, first, tap } from 'rxjs/operators';
import { LocalStorageDatabase } from './localstorage-database';

@@ -61,3 +61,14 @@ import { LOCAL_STORAGE_PREFIX } from '../tokens';

/* Opening a trasaction and requesting the item in local storage */
return this.transaction().pipe(map((transaction) => transaction.get(key)), mergeMap((request) => {
return this.getItemFromTransaction(key);
}
/**
* Gets an item value in local storage
* @template T
* @param {?} key The item's key
* @param {?=} transactionParam Optional pre-existing transaction to use for the read request
* @return {?} The item's value if the key exists, null otherwise, wrapped in an RxJS Observable
*/
getItemFromTransaction(key, transactionParam) {
const /** @type {?} */ transaction$ = transactionParam ? of(transactionParam) : this.transaction();
return transaction$.pipe(map((transaction) => transaction.get(key)), mergeMap((request) => {
/* Listening to the success event, and passing the item value if found, null otherwise */

@@ -85,21 +96,24 @@ const /** @type {?} */ success = (/** @type {?} */ (fromEvent(request, 'success'))).pipe(map((event) => (/** @type {?} */ (event.target)).result), map((result) => result && (this.dataPath in result) ? (/** @type {?} */ (result[this.dataPath])) : null));

}
/* Opening a transaction and checking if the item already exists in local storage */
return this.getItem(key).pipe(map((existingData) => (existingData == null) ? 'add' : 'put'), mergeMap((method) => {
/* Opening a transaction */
return this.transaction('readwrite').pipe(mergeMap((transaction) => {
let /** @type {?} */ request;
/* Adding or updating local storage, based on previous checking */
switch (method) {
case 'add':
request = transaction.add({ [this.dataPath]: data }, key);
break;
case 'put':
default:
request = transaction.put({ [this.dataPath]: data }, key);
break;
}
/* Merging success (passing true) and error events and autoclosing the observable */
return (/** @type {?} */ (race(this.toSuccessObservable(request), this.toErrorObservable(request, `setter`))))
.pipe(first());
}));
/* Transaction must be the same for read and write, to avoid concurrency issues */
const /** @type {?} */ transaction$ = this.transaction('readwrite');
let /** @type {?} */ transaction = null;
/* Opening a transaction */
return transaction$.pipe(tap((value) => {
transaction = value;
}), /* Check if the key already exists or not */
mergeMap(() => this.getItemFromTransaction(key, (/** @type {?} */ (transaction)))), map((existingData) => (existingData == null) ? 'add' : 'put'), mergeMap((method) => {
let /** @type {?} */ request;
/* Adding or updating local storage, based on previous checking */
switch (method) {
case 'add':
request = (/** @type {?} */ (transaction)).add({ [this.dataPath]: data }, key);
break;
case 'put':
default:
request = (/** @type {?} */ (transaction)).put({ [this.dataPath]: data }, key);
break;
}
/* Merging success (passing true) and error events and autoclosing the observable */
return (/** @type {?} */ (race(this.toSuccessObservable(request), this.toErrorObservable(request, `setter`))))
.pipe(first());
}), first());

@@ -222,3 +236,3 @@ }

return (/** @type {?} */ (fromEvent(request, 'error')))
.pipe(mergeMap(() => throwError(new Error(`IndexedDB ${error} issue : ${request.error.message}.`))));
.pipe(mergeMap(() => throwError(new Error(`IndexedDB ${error} issue : ${((/** @type {?} */ (request.error))).message}.`))));
}

@@ -280,2 +294,2 @@ /**

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLWRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1wd2EvbG9jYWwtc3RvcmFnZS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhYmFzZXMvaW5kZXhlZGRiLWRhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFLakQsTUFBTTs7Ozs7SUFnQ0osWUFBZ0UsU0FBd0IsSUFBSTtRQUE1QixXQUFNLEdBQU4sTUFBTSxDQUFzQjs7OztzQkEzQnpFLFdBQVc7Ozs7K0JBSU8sY0FBYzs7Ozt1QkFJdEIsS0FBSzs7Ozt3QkFJSixPQUFPOzs7Ozt3QkFVTSxJQUFJO1FBTzdDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUUxQzs7UUFHRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxFQUFlLENBQUM7O1FBR2pELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7S0FFdEI7Ozs7Ozs7SUFPRCxPQUFPLENBQVUsR0FBVzs7UUFHMUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElB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QUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FFeEc7Ozs7O0lBRVMsV0FBVyxDQUFDLE1BQXFCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNsRDs7O1lBcFRGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs0Q0FpQ2MsUUFBUSxZQUFJLE1BQU0sU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBmcm9tRXZlbnQsIG9mLCB0aHJvd0Vycm9yLCByYWNlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTG9jYWxEYXRhYmFzZSB9IGZyb20gJy4vbG9jYWwtZGF0YWJhc2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRGF0YWJhc2UgfSBmcm9tICcuL2xvY2Fsc3RvcmFnZS1kYXRhYmFzZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFX1BSRUZJWCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEluZGV4ZWREQkRhdGFiYXNlIGltcGxlbWVudHMgTG9jYWxEYXRhYmFzZSB7XG5cbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhYmFzZSBuYW1lIGZvciBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgZGJOYW1lID0gJ25nU3RvcmFnZSc7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgb2JqZWN0IHN0b3JlIG5hbWUgZm9yIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvYmplY3RTdG9yZU5hbWUgPSAnbG9jYWxTdG9yYWdlJztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBrZXkgcGF0aCBuYW1lIGZvciBsb2NhbCBzdG9yYWdlICh3aGVyZSBhbiBpdGVtJ3Mga2V5IHdpbGwgYmUgc3RvcmVkKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleVBhdGggPSAna2V5JztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhIHBhdGggbmFtZSBmb3IgbG9jYWwgc3RvcmFnZSAod2hlcmUgaXRlbXMnIHZhbHVlIHdpbGwgYmUgc3RvcmVkKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFQYXRoID0gJ3ZhbHVlJztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhYmFzZSBjb25uZWN0aW9uLCB3cmFwcGVkIGluIGEgUnhKUyBSZXBsYXlTdWJqZWN0IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjb25uZWN0aW9uXG4gICAqIGV2ZW4gYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gc3VjY2VzcyBldmVudCBoYXBwZW5lZFxuICAgKi9cbiAgcHJvdGVjdGVkIGRhdGFiYXNlOiBSZXBsYXlTdWJqZWN0PElEQkRhdGFiYXNlPjtcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBpcyBhdmFpbGFibGUgYnV0IGZhaWxpbmcgaW4gc29tZSBzY2VuYXJpb3MgKEZpcmVmb3ggcHJpdmF0ZSBtb2RlLCBTYWZhcmkgY3Jvc3Mtb3JpZ2luIGlmcmFtZXMpLFxuICAgKiBzbyBhIGZhbGxiYWNrIGNhbiBiZSBuZWVkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZmFsbGJhY2s6IExvY2FsRGF0YWJhc2UgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29ubmVjdHMgdG8gSW5kZXhlZERCXG4gICAqL1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMX1NUT1JBR0VfUFJFRklYKSBwcm90ZWN0ZWQgcHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuXG4gICAgaWYgKHByZWZpeCkge1xuXG4gICAgICB0aGlzLmRiTmFtZSA9IGAke3ByZWZpeH1fJHt0aGlzLmRiTmFtZX1gO1xuXG4gICAgfVxuXG4gICAgLyogQ3JlYXRpbmcgdGhlIFJ4SlMgUmVwbGF5U3ViamVjdCAqL1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmVwbGF5U3ViamVjdDxJREJEYXRhYmFzZT4oKTtcblxuICAgIC8qIENvbm5lY3RpbmcgdG8gSW5kZXhlZERCICovXG4gICAgdGhpcy5jb25uZWN0KHByZWZpeCk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGl0ZW0gdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIFRoZSBpdGVtJ3MgdmFsdWUgaWYgdGhlIGtleSBleGlzdHMsIG51bGwgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGFuIFJ4SlMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgZ2V0SXRlbTxUID0gYW55PihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VMKgfCBudWxsPiB7XG5cbiAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIHNldCAqL1xuICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5nZXRJdGVtPFQ+KGtleSk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYXNhY3Rpb24gYW5kIHJlcXVlc3RpbmcgdGhlIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uKCkucGlwZShcbiAgICAgIG1hcCgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLmdldChrZXkpKSxcbiAgICAgIG1lcmdlTWFwKChyZXF1ZXN0KSA9PiB7XG5cbiAgICAgICAgLyogTGlzdGVuaW5nIHRvIHRoZSBzdWNjZXNzIGV2ZW50LCBhbmQgcGFzc2luZyB0aGUgaXRlbSB2YWx1ZSBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UgKi9cbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IChmcm9tRXZlbnQocmVxdWVzdCwgJ3N1Y2Nlc3MnKSBhcyBPYnNlcnZhYmxlPEV2ZW50PikucGlwZShcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiAoZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3QpLnJlc3VsdCksXG4gICAgICAgICAgbWFwKChyZXN1bHQpID0+IHJlc3VsdCAmJiAodGhpcy5kYXRhUGF0aCBpbiByZXN1bHQpID8gKHJlc3VsdFt0aGlzLmRhdGFQYXRoXSBhcyBUKSA6IG51bGwpXG4gICAgICAgICk7XG5cbiAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIGFuZCBlcnJvcnMgZXZlbnRzIGFuZCBhdXRvY2xvc2luZyB0aGUgb2JzZXJ2YWJsZSAqL1xuICAgICAgICByZXR1cm4gKHJhY2Uoc3VjY2VzcywgdGhpcy50b0Vycm9yT2JzZXJ2YWJsZShyZXF1ZXN0LCBgZ2V0dGVyYCkpIGFzIE9ic2VydmFibGU8VCB8IG51bGw+KVxuICAgICAgICAgIC5waXBlKGZpcnN0KCkpO1xuXG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBpdGVtIGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgaXRlbSdzIHZhbHVlLCBtdXN0IE5PVCBiZSBudWxsIG9yIHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBBbiBSeEpTIE9ic2VydmFibGUgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suc2V0SXRlbShrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qIFN0b3JpbmcgbnVsbCBpcyBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCBieSBJbmRleGVkREIgYW5kIHVubmVjZXNzYXJ5IGhlcmUgKi9cbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG5cbiAgICAgIHJldHVybiBvZih0cnVlKTtcblxuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgY2hlY2tpbmcgaWYgdGhlIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oa2V5KS5waXBlKFxuICAgICAgbWFwKChleGlzdGluZ0RhdGEpID0+IChleGlzdGluZ0RhdGEgPT0gbnVsbCkgPyAnYWRkJyA6ICdwdXQnKSxcbiAgICAgIG1lcmdlTWFwKChtZXRob2QpID0+IHtcblxuICAgICAgICAvKiBPcGVuaW5nIGEgdHJhbnNhY3Rpb24gKi9cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUobWVyZ2VNYXAoKHRyYW5zYWN0aW9uKSA9PiB7XG5cbiAgICAgICAgICBsZXQgcmVxdWVzdDogSURCUmVxdWVzdDtcblxuICAgICAgICAgIC8qIEFkZGluZyBvciB1cGRhdGluZyBsb2NhbCBzdG9yYWdlLCBiYXNlZCBvbiBwcmV2aW91cyBjaGVja2luZyAqL1xuICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICByZXF1ZXN0ID0gdHJhbnNhY3Rpb24uYWRkKHsgW3RoaXMuZGF0YVBhdGhdOiBkYXRhIH0sIGtleSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHV0JzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5wdXQoeyBbdGhpcy5kYXRhUGF0aF06IGRhdGEgfSwga2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgcmV0dXJuIChyYWNlKHRoaXMudG9TdWNjZXNzT2JzZXJ2YWJsZShyZXF1ZXN0KSwgdGhpcy50b0Vycm9yT2JzZXJ2YWJsZShyZXF1ZXN0LCBgc2V0dGVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKTtcblxuICAgICAgICB9KSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIEFuIFJ4SlMgT2JzZXJ2YWJsZSB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2sucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgY2hlY2tpbmcgaWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKGtleSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiB7XG5cbiAgICAgICAgLyogSWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuXG4gICAgICAgICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUobWVyZ2VNYXAoKHRyYW5zYWN0aW9uKSA9PiB7XG5cbiAgICAgICAgICAgIC8qIERlbGV0aW5nIHRoZSBpdGVtIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5kZWxldGUoa2V5KTtcblxuICAgICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGByZW1vdmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpO1xuXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBQYXNzaW5nIHRydWUgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBpdGVtcyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICogQHJldHVybnMgQW4gUnhKUyBPYnNlcnZhYmxlIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgc2V0ICovXG4gICAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodHJhbnNhY3Rpb24pID0+IHtcblxuICAgICAgICAvKiBEZWxldGluZyBhbGwgaXRlbXMgZnJvbSBsb2NhbCBzdG9yYWdlICovXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5jbGVhcigpO1xuXG4gICAgICAgIC8qIE1lcmdpbmcgc3VjY2VzcyAocGFzc2luZyB0cnVlKSBhbmQgZXJyb3IgZXZlbnRzIGFuZCBhdXRvY2xvc2luZyB0aGUgb2JzZXJ2YWJsZSAqL1xuICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjbGVhcmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBJbmRleGVkREIgYW5kIGNyZWF0ZXMgdGhlIG9iamVjdCBzdG9yZSBvbiBmaXJzdCB0aW1lXG4gICAqL1xuICBwcm90ZWN0ZWQgY29ubmVjdChwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCB7XG5cbiAgICBsZXQgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdDtcblxuICAgIC8qIENvbm5lY3RpbmcgdG8gSW5kZXhlZERCICovXG4gICAgdHJ5IHtcblxuICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuZGJOYW1lKTtcblxuICAgIH3CoGNhdGNoIChlcnJvcikge1xuXG4gICAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIEluZGV4ZWREYiBjb25uZWN0aW9uIGlzIGZhaWxpbmcgKi9cbiAgICAgIHRoaXMuc2V0RmFsbGJhY2socHJlZml4KTtcblxuICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgLyogTGlzdGVuaW5nIHRoZSBldmVudCBmaXJlZCBvbiBmaXJzdCBjb25uZWN0aW9uLCBjcmVhdGluZyB0aGUgb2JqZWN0IHN0b3JlIGZvciBsb2NhbCBzdG9yYWdlICovXG4gICAgKGZyb21FdmVudChyZXF1ZXN0LCAndXBncmFkZW5lZWRlZCcpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogR2V0dGluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiAqL1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlO1xuXG4gICAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBvYmplY3Qgc3RvcmUgYWxyZWFkeSBleGlzdHMsIHRvIGF2b2lkIGVycm9yICovXG4gICAgICAgIGlmICghZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLm9iamVjdFN0b3JlTmFtZSkpIHtcblxuICAgICAgICAgIC8qIENyZWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUgZm9yIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSk7XG5cbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgIC8qIExpc3RlbmluZyB0aGUgc3VjY2VzcyBldmVudCBhbmQgY29udmVydGluZyB0byBhbiBSeEpTIE9ic2VydmFibGUgKi9cbiAgICBjb25zdCBzdWNjZXNzID0gZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD47XG5cbiAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgYW5kIGVycm9ycyBldmVudHMgKi9cbiAgICAocmFjZShzdWNjZXNzLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjb25uZWN0aW9uYCkpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogU3RvcmluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBmb3IgZnVydGhlciBhY2Nlc3MgKi9cbiAgICAgICAgdGhpcy5kYXRhYmFzZS5uZXh0KChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlKTtcblxuICAgICAgfSwgKCkgPT4ge1xuXG4gICAgICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgSW5kZXhlZERiIGNvbm5lY3Rpb24gaXMgZmFpbGluZyAqL1xuICAgICAgICB0aGlzLnNldEZhbGxiYWNrKHByZWZpeCk7XG5cbiAgICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIGFuZCBnZXRzIHRoZSBsb2NhbCBzdG9yYWdlIG9iamVjdCBzdG9yZVxuICAgKiBAcGFyYW0gbW9kZSBEZWZhdWx0IHRvICdyZWFkb25seScgZm9yIHJlYWQgb3BlcmF0aW9ucywgb3IgJ3JlYWR3cml0ZScgZm9yIHdyaXRlIG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMgQW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIG9iamVjdCBzdG9yZSwgd3JhcHBlZCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2FjdGlvbihtb2RlOiAncmVhZG9ubHknIHwgJ3JlYWR3cml0ZScgPSAncmVhZG9ubHknKTogT2JzZXJ2YWJsZTxJREJPYmplY3RTdG9yZT4ge1xuXG4gICAgLyogRnJvbSB0aGUgSW5kZXhlZERCIGNvbm5lY3Rpb24sIG9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgZ2V0dGluZyB0aGUgbG9jYWwgc3RvcmFnZSBvYmpldCBzdG9yZSAqL1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlXG4gICAgICAucGlwZShtYXAoKGRhdGFiYXNlKSA9PiBkYXRhYmFzZS50cmFuc2FjdGlvbihbdGhpcy5vYmplY3RTdG9yZU5hbWVdLCBtb2RlKS5vYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSkpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYSBJbmRleGVkREIgc3VjY2VzcyBldmVudCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHJlcXVlc3QgdG8gbGlzdGVuXG4gICAqIEByZXR1cm5zIEEgUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIHRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogVHJhbnNmb3JtaW5nIGEgSW5kZXhlZERCIHN1Y2Nlc3MgZXZlbnQgaW4gYW4gUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0byBsaXN0ZW5cbiAgICogQHBhcmFtIGVycm9yIE9wdGlvbm5hbCBkZXRhaWxzIGFib3V0IHRoZSBlcnJvcidzIG9yaWdpblxuICAgKiBAcmV0dXJucyBBIFJ4SlMgRXJyb3JPYnNlcnZhYmxlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9FcnJvck9ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCwgZXJyb3IgPSBgYCk6IE9ic2VydmFibGU8bmV2ZXI+IHtcblxuICAgIC8qIFRyYW5zZm9ybWluZyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdlcnJvcicpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUobWVyZ2VNYXAoKCkgPT4gdGhyb3dFcnJvcihuZXcgRXJyb3IoYEluZGV4ZWREQiAke2Vycm9yfSBpc3N1ZSA6ICR7cmVxdWVzdC5lcnJvci5tZXNzYWdlfS5gKSkpKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHNldEZhbGxiYWNrKHByZWZpeDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZmFsbGJhY2sgPSBuZXcgTG9jYWxTdG9yYWdlRGF0YWJhc2UocHJlZml4KTtcbiAgfVxuXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLWRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1wd2EvbG9jYWwtc3RvcmFnZS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhYmFzZXMvaW5kZXhlZGRiLWRhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBS2pELE1BQU07Ozs7O0lBZ0NKLFlBQWdFLFNBQXdCLElBQUk7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7Ozs7c0JBM0J6RSxXQUFXOzs7OytCQUlPLGNBQWM7Ozs7dUJBSXRCLEtBQUs7Ozs7d0JBSUosT0FBTzs7Ozs7d0JBVU0sSUFBSTtRQU83QyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRVgsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FFMUM7O1FBR0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBZSxDQUFDOztRQUdqRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBRXRCOzs7Ozs7O0lBT0QsT0FBTyxDQUFVLEdBQVc7O1FBRzFCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBSSxHQUFHLENBQUMsQ0FBQztTQUN0Qzs7UUFHRCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFJLEdBQUcsQ0FBQyxDQUFDO0tBRTVDOzs7Ozs7OztJQVFPLHNCQUFzQixDQUFVLEdBQVcsRUFBRSxnQkFBaUM7UUFFcEYsdUJBQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWxGLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDMUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O1lBR25CLHVCQUFNLE9BQU8sR0FBRyxtQkFBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBc0IsRUFBQyxDQUFDLElBQUksQ0FDdkUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBQyxLQUFLLENBQUMsTUFBb0IsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUNuRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQzNGLENBQUM7O1lBR0YsTUFBTSxDQUFDLG1CQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBeUIsRUFBQztpQkFDdEYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDbEIsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNSLENBQUM7Ozs7Ozs7O0lBVUosT0FBTyxDQUFDLEdBQVcsRUFBRSxJQUFTOztRQUc1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDOztRQUdELEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRWpCLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FFakI7O1FBR0QsdUJBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQscUJBQUksV0FBVyxHQUEwQixJQUFJLENBQUM7O1FBRzFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDckIsQ0FBQztRQUVGLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLG1CQUFDLFdBQTZCLEVBQUMsQ0FBQyxDQUFDLEVBQ2pGLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQzdELFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRWxCLHFCQUFJLE9BQW1CLENBQUM7O1lBR3hCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsS0FBSyxLQUFLO29CQUNSLE9BQU8sR0FBRyxtQkFBQyxXQUE2QixFQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzlFLEtBQUssQ0FBQztnQkFDUixLQUFLLEtBQUssQ0FBQztnQkFDWDtvQkFDRSxPQUFPLEdBQUcsbUJBQUMsV0FBNkIsRUFBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM5RSxLQUFLLENBQUM7YUFDVDs7WUFHRCxNQUFNLENBQUMsbUJBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUF3QixFQUFDO2lCQUMvRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUVwQixDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztLQUVMOzs7Ozs7SUFPRCxVQUFVLENBQUMsR0FBVzs7UUFHcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDOztRQUdELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDM0IsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O1lBR2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDOztnQkFHakIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFOztvQkFHakUsdUJBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7O29CQUd4QyxNQUFNLENBQUMsbUJBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUF3QixFQUFDO3lCQUNoSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFFbEIsQ0FBQyxDQUFDLENBQUM7YUFFTDs7WUFHRCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBRWpCLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUixDQUFDO0tBRUg7Ozs7O0lBTUQsS0FBSzs7UUFHSCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5Qjs7UUFHRCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFOztZQUd2Qix1QkFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDOztZQUdwQyxNQUFNLENBQUMsbUJBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUF3QixFQUFDO2lCQUNoSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUVsQixDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztLQUVIOzs7Ozs7SUFLUyxPQUFPLENBQUMsU0FBd0IsSUFBSTtRQUU1QyxxQkFBSSxPQUF5QixDQUFDOztRQUc5QixJQUFJLENBQUM7WUFFSCxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FFdkM7UUFBQyxLQUFLLENBQUMsQ0FBQyxpQkFBQSxLQUFLLEVBQUUsQ0FBQzs7WUFHZixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXpCLE1BQU0sQ0FBQztTQUVSOztRQUdELG1CQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFzQixFQUFDO2FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztZQUduQix1QkFBTSxRQUFRLHFCQUFHLG1CQUFDLEtBQUssQ0FBQyxNQUFvQixFQUFDLENBQUMsTUFBcUIsQ0FBQSxDQUFDOztZQUdwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRzlELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFFbEQ7U0FFRixDQUFDLENBQUM7O1FBR0wsdUJBQU0sT0FBTyxxQkFBRyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBc0IsQ0FBQSxDQUFDOztRQUduRSxtQkFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQXNCLEVBQUM7YUFDaEYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O1lBR25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBQyxtQkFBQyxLQUFLLENBQUMsTUFBb0IsRUFBQyxDQUFDLE1BQXFCLEVBQUMsQ0FBQztTQUV4RSxFQUFFLEdBQUcsRUFBRTs7WUFHTixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBRTFCLENBQUMsQ0FBQztLQUVOOzs7Ozs7SUFPUyxXQUFXLENBQUMsT0FBaUMsVUFBVTs7UUFHL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRO2FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FFbEg7Ozs7OztJQU9TLG1CQUFtQixDQUFDLE9BQW1COztRQUcvQyxNQUFNLENBQUMsbUJBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQXNCLEVBQUM7YUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBRTFCOzs7Ozs7O0lBUVMsaUJBQWlCLENBQUMsT0FBbUIsRUFBRSxLQUFLLEdBQUcsRUFBRTs7UUFHekQsTUFBTSxDQUFDLG1CQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFzQixFQUFDO2FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxZQUFZLG9CQUFDLE9BQU8sQ0FBQyxLQUFxQixHQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUUxSDs7Ozs7SUFFUyxXQUFXLENBQUMsTUFBcUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xEOzs7WUFyVUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7OzRDQWlDYyxRQUFRLFlBQUksTUFBTSxTQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIGZyb21FdmVudCwgb2YsIHRocm93RXJyb3IsIHJhY2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIGZpcnN0LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IExvY2FsRGF0YWJhc2UgfSBmcm9tICcuL2xvY2FsLWRhdGFiYXNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZURhdGFiYXNlIH0gZnJvbSAnLi9sb2NhbHN0b3JhZ2UtZGF0YWJhc2UnO1xuaW1wb3J0IHsgTE9DQUxfU1RPUkFHRV9QUkVGSVggfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbmRleGVkREJEYXRhYmFzZSBpbXBsZW1lbnRzIExvY2FsRGF0YWJhc2Uge1xuXG4gIC8qKlxuICAgKiBJbmRleGVkREIgZGF0YWJhc2UgbmFtZSBmb3IgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGRiTmFtZSA9ICduZ1N0b3JhZ2UnO1xuICAvKipcbiAgICogSW5kZXhlZERCIG9iamVjdCBzdG9yZSBuYW1lIGZvciBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb2JqZWN0U3RvcmVOYW1lID0gJ2xvY2FsU3RvcmFnZSc7XG4gIC8qKlxuICAgKiBJbmRleGVkREIga2V5IHBhdGggbmFtZSBmb3IgbG9jYWwgc3RvcmFnZSAod2hlcmUgYW4gaXRlbSdzIGtleSB3aWxsIGJlIHN0b3JlZClcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBrZXlQYXRoID0gJ2tleSc7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgZGF0YSBwYXRoIG5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgKHdoZXJlIGl0ZW1zJyB2YWx1ZSB3aWxsIGJlIHN0b3JlZClcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhUGF0aCA9ICd2YWx1ZSc7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgZGF0YWJhc2UgY29ubmVjdGlvbiwgd3JhcHBlZCBpbiBhIFJ4SlMgUmVwbGF5U3ViamVjdCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgY29ubmVjdGlvblxuICAgKiBldmVuIGFmdGVyIHRoZSBjb25uZWN0aW9uIHN1Y2Nlc3MgZXZlbnQgaGFwcGVuZWRcbiAgICovXG4gIHByb3RlY3RlZCBkYXRhYmFzZTogUmVwbGF5U3ViamVjdDxJREJEYXRhYmFzZT47XG4gIC8qKlxuICAgKiBJbmRleGVkREIgaXMgYXZhaWxhYmxlIGJ1dCBmYWlsaW5nIGluIHNvbWUgc2NlbmFyaW9zIChGaXJlZm94IHByaXZhdGUgbW9kZSwgU2FmYXJpIGNyb3NzLW9yaWdpbiBpZnJhbWVzKSxcbiAgICogc28gYSBmYWxsYmFjayBjYW4gYmUgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZhbGxiYWNrOiBMb2NhbERhdGFiYXNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENvbm5lY3RzIHRvIEluZGV4ZWREQlxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTF9TVE9SQUdFX1BSRUZJWCkgcHJvdGVjdGVkIHByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcblxuICAgIGlmIChwcmVmaXgpIHtcblxuICAgICAgdGhpcy5kYk5hbWUgPSBgJHtwcmVmaXh9XyR7dGhpcy5kYk5hbWV9YDtcblxuICAgIH1cblxuICAgIC8qIENyZWF0aW5nIHRoZSBSeEpTIFJlcGxheVN1YmplY3QgKi9cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJlcGxheVN1YmplY3Q8SURCRGF0YWJhc2U+KCk7XG5cbiAgICAvKiBDb25uZWN0aW5nIHRvIEluZGV4ZWREQiAqL1xuICAgIHRoaXMuY29ubmVjdChwcmVmaXgpO1xuXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBpdGVtIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSdzIHZhbHVlIGlmIHRoZSBrZXkgZXhpc3RzLCBudWxsIG90aGVyd2lzZSwgd3JhcHBlZCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICovXG4gIGdldEl0ZW08VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFTCoHwgbnVsbD4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suZ2V0SXRlbTxUPihrZXkpO1xuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFzYWN0aW9uIGFuZCByZXF1ZXN0aW5nIHRoZSBpdGVtIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtRnJvbVRyYW5zYWN0aW9uPFQ+KGtleSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGl0ZW0gdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvblBhcmFtIE9wdGlvbmFsIHByZS1leGlzdGluZyB0cmFuc2FjdGlvbiB0byB1c2UgZm9yIHRoZSByZWFkIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGl0ZW0ncyB2YWx1ZSBpZiB0aGUga2V5IGV4aXN0cywgbnVsbCBvdGhlcndpc2UsIHdyYXBwZWQgaW4gYW4gUnhKUyBPYnNlcnZhYmxlXG4gICAqL1xuICBwcml2YXRlIGdldEl0ZW1Gcm9tVHJhbnNhY3Rpb248VCA9IGFueT4oa2V5OiBzdHJpbmcsIHRyYW5zYWN0aW9uUGFyYW0/OiBJREJPYmplY3RTdG9yZSk6IE9ic2VydmFibGU8VMKgfCBudWxsPiB7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiQgPSB0cmFuc2FjdGlvblBhcmFtID8gb2YodHJhbnNhY3Rpb25QYXJhbSkgOiB0aGlzLnRyYW5zYWN0aW9uKCk7XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24kLnBpcGUoXG4gICAgICBtYXAoKHRyYW5zYWN0aW9uKSA9PiB0cmFuc2FjdGlvbi5nZXQoa2V5KSksXG4gICAgICBtZXJnZU1hcCgocmVxdWVzdCkgPT4ge1xuXG4gICAgICAgIC8qIExpc3RlbmluZyB0byB0aGUgc3VjY2VzcyBldmVudCwgYW5kIHBhc3NpbmcgdGhlIGl0ZW0gdmFsdWUgaWYgZm91bmQsIG51bGwgb3RoZXJ3aXNlICovXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAoZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pLnBpcGUoXG4gICAgICAgICAgbWFwKChldmVudCkgPT4gKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQpLFxuICAgICAgICAgIG1hcCgocmVzdWx0KSA9PiByZXN1bHQgJiYgKHRoaXMuZGF0YVBhdGggaW4gcmVzdWx0KSA/IChyZXN1bHRbdGhpcy5kYXRhUGF0aF0gYXMgVCkgOiBudWxsKVxuICAgICAgICApO1xuXG4gICAgICAgIC8qIE1lcmdpbmcgc3VjY2VzcyBhbmQgZXJyb3JzIGV2ZW50cyBhbmQgYXV0b2Nsb3NpbmcgdGhlIG9ic2VydmFibGUgKi9cbiAgICAgICAgcmV0dXJuIChyYWNlKHN1Y2Nlc3MsIHRoaXMudG9FcnJvck9ic2VydmFibGUocmVxdWVzdCwgYGdldHRlcmApKSBhcyBPYnNlcnZhYmxlPFQgfCBudWxsPilcbiAgICAgICAgICAucGlwZShmaXJzdCgpKTtcbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBkYXRhIFRoZSBpdGVtJ3MgdmFsdWUsIG11c3QgTk9UIGJlIG51bGwgb3IgdW5kZWZpbmVkXG4gICAqIEByZXR1cm5zIEFuIFJ4SlMgT2JzZXJ2YWJsZSB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgc2V0SXRlbShrZXk6IHN0cmluZywgZGF0YTogYW55KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIHNldCAqL1xuICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5zZXRJdGVtKGtleSwgZGF0YSk7XG4gICAgfVxuXG4gICAgLyogU3RvcmluZyBudWxsIGlzIG5vdCBjb3JyZWN0bHkgc3VwcG9ydGVkIGJ5IEluZGV4ZWREQiBhbmQgdW5uZWNlc3NhcnkgaGVyZSAqL1xuICAgIGlmIChkYXRhID09IG51bGwpIHtcblxuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuXG4gICAgfVxuXG4gICAgLyogVHJhbnNhY3Rpb24gbXVzdCBiZSB0aGUgc2FtZSBmb3IgcmVhZCBhbmQgd3JpdGUsIHRvIGF2b2lkIGNvbmN1cnJlbmN5IGlzc3VlcyAqL1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uJCA9IHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpO1xuICAgIGxldCB0cmFuc2FjdGlvbjogSURCT2JqZWN0U3RvcmXCoHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbiQucGlwZShcbiAgICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbiA9IHZhbHVlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMgb3Igbm90ICovXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5nZXRJdGVtRnJvbVRyYW5zYWN0aW9uKGtleSwgKHRyYW5zYWN0aW9uIGFzIElEQk9iamVjdFN0b3JlKSkpLFxuICAgICAgICAgIG1hcCgoZXhpc3RpbmdEYXRhKSA9PiAoZXhpc3RpbmdEYXRhID09IG51bGwpID8gJ2FkZCcgOiAncHV0JyksXG4gICAgICAgICAgbWVyZ2VNYXAoKG1ldGhvZCkgPT4ge1xuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdDogSURCUmVxdWVzdDtcblxuICAgICAgICAgICAgLyogQWRkaW5nIG9yIHVwZGF0aW5nIGxvY2FsIHN0b3JhZ2UsIGJhc2VkIG9uIHByZXZpb3VzIGNoZWNraW5nICovXG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSAodHJhbnNhY3Rpb24gYXMgSURCT2JqZWN0U3RvcmUpLmFkZCh7IFt0aGlzLmRhdGFQYXRoXTogZGF0YSB9LCBrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwdXQnOlxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSAodHJhbnNhY3Rpb24gYXMgSURCT2JqZWN0U3RvcmUpLnB1dCh7IFt0aGlzLmRhdGFQYXRoXTogZGF0YSB9LCBrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgKHBhc3NpbmcgdHJ1ZSkgYW5kIGVycm9yIGV2ZW50cyBhbmQgYXV0b2Nsb3NpbmcgdGhlIG9ic2VydmFibGUgKi9cbiAgICAgICAgICAgIHJldHVybiAocmFjZSh0aGlzLnRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdCksIHRoaXMudG9FcnJvck9ic2VydmFibGUocmVxdWVzdCwgYHNldHRlcmApKSBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KVxuICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKTtcblxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaXRlbSBpbiBsb2NhbCBzdG9yYWdlXG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXlcbiAgICogQHJldHVybnMgQW4gUnhKUyBPYnNlcnZhYmxlIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIHNldCAqL1xuICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uIGFuZCBjaGVja2luZyBpZiB0aGUgaXRlbSBleGlzdHMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oa2V5KS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGRhdGEpID0+IHtcblxuICAgICAgICAvKiBJZiB0aGUgaXRlbSBleGlzdHMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG5cbiAgICAgICAgICAvKiBPcGVuaW5nIGEgdHJhbnNhY3Rpb24gKi9cbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbigncmVhZHdyaXRlJykucGlwZShtZXJnZU1hcCgodHJhbnNhY3Rpb24pID0+IHtcblxuICAgICAgICAgICAgLyogRGVsZXRpbmcgdGhlIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRyYW5zYWN0aW9uLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgICAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgKHBhc3NpbmcgdHJ1ZSkgYW5kIGVycm9yIGV2ZW50cyBhbmQgYXV0b2Nsb3NpbmcgdGhlIG9ic2VydmFibGUgKi9cbiAgICAgICAgICAgIHJldHVybiAocmFjZSh0aGlzLnRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdCksIHRoaXMudG9FcnJvck9ic2VydmFibGUocmVxdWVzdCwgYHJlbW92ZXJgKSkgYXMgT2JzZXJ2YWJsZTxib29sZWFuPilcbiAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG5cbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFBhc3NpbmcgdHJ1ZSBpZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcblxuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIGl0ZW1zIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgKiBAcmV0dXJucyBBbiBSeEpTIE9ic2VydmFibGUgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIGNsZWFyKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKiBPcGVuaW5nIGEgdHJhbnNhY3Rpb24gKi9cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbigncmVhZHdyaXRlJykucGlwZShcbiAgICAgIG1lcmdlTWFwKCh0cmFuc2FjdGlvbikgPT4ge1xuXG4gICAgICAgIC8qIERlbGV0aW5nIGFsbCBpdGVtcyBmcm9tIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRyYW5zYWN0aW9uLmNsZWFyKCk7XG5cbiAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgIHJldHVybiAocmFjZSh0aGlzLnRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdCksIHRoaXMudG9FcnJvck9ic2VydmFibGUocmVxdWVzdCwgYGNsZWFyZXJgKSkgYXMgT2JzZXJ2YWJsZTxib29sZWFuPilcbiAgICAgICAgICAucGlwZShmaXJzdCgpKTtcblxuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3RzIHRvIEluZGV4ZWREQiBhbmQgY3JlYXRlcyB0aGUgb2JqZWN0IHN0b3JlIG9uIGZpcnN0IHRpbWVcbiAgICovXG4gIHByb3RlY3RlZCBjb25uZWN0KHByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcblxuICAgIGxldCByZXF1ZXN0OiBJREJPcGVuREJSZXF1ZXN0O1xuXG4gICAgLyogQ29ubmVjdGluZyB0byBJbmRleGVkREIgKi9cbiAgICB0cnkge1xuXG4gICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4odGhpcy5kYk5hbWUpO1xuXG4gICAgfcKgY2F0Y2ggKGVycm9yKSB7XG5cbiAgICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgSW5kZXhlZERiIGNvbm5lY3Rpb24gaXMgZmFpbGluZyAqL1xuICAgICAgdGhpcy5zZXRGYWxsYmFjayhwcmVmaXgpO1xuXG4gICAgICByZXR1cm47XG5cbiAgICB9XG5cbiAgICAvKiBMaXN0ZW5pbmcgdGhlIGV2ZW50IGZpcmVkIG9uIGZpcnN0IGNvbm5lY3Rpb24sIGNyZWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUgZm9yIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAoZnJvbUV2ZW50KHJlcXVlc3QsICd1cGdyYWRlbmVlZGVkJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblxuICAgICAgICAvKiBHZXR0aW5nIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uICovXG4gICAgICAgIGNvbnN0IGRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQgYXMgSURCRGF0YWJhc2U7XG5cbiAgICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIG9iamVjdCBzdG9yZSBhbHJlYWR5IGV4aXN0cywgdG8gYXZvaWQgZXJyb3IgKi9cbiAgICAgICAgaWYgKCFkYXRhYmFzZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMub2JqZWN0U3RvcmVOYW1lKSkge1xuXG4gICAgICAgICAgLyogQ3JlYXRpbmcgdGhlIG9iamVjdCBzdG9yZSBmb3IgbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICAgIGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMub2JqZWN0U3RvcmVOYW1lKTtcblxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgLyogTGlzdGVuaW5nIHRoZSBzdWNjZXNzIGV2ZW50IGFuZCBjb252ZXJ0aW5nIHRvIGFuIFJ4SlMgT2JzZXJ2YWJsZSAqL1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBmcm9tRXZlbnQocmVxdWVzdCwgJ3N1Y2Nlc3MnKSBhcyBPYnNlcnZhYmxlPEV2ZW50PjtcblxuICAgIC8qIE1lcmdpbmcgc3VjY2VzcyBhbmQgZXJyb3JzIGV2ZW50cyAqL1xuICAgIChyYWNlKHN1Y2Nlc3MsIHRoaXMudG9FcnJvck9ic2VydmFibGUocmVxdWVzdCwgYGNvbm5lY3Rpb25gKSkgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblxuICAgICAgICAvKiBTdG9yaW5nIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIGFjY2VzcyAqL1xuICAgICAgICB0aGlzLmRhdGFiYXNlLm5leHQoKGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQgYXMgSURCRGF0YWJhc2UpO1xuXG4gICAgICB9LCAoKSA9PiB7XG5cbiAgICAgICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBJbmRleGVkRGIgY29ubmVjdGlvbiBpcyBmYWlsaW5nICovXG4gICAgICAgIHRoaXMuc2V0RmFsbGJhY2socHJlZml4KTtcblxuICAgICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhbiBJbmRleGVkREIgdHJhbnNhY3Rpb24gYW5kIGdldHMgdGhlIGxvY2FsIHN0b3JhZ2Ugb2JqZWN0IHN0b3JlXG4gICAqIEBwYXJhbSBtb2RlIERlZmF1bHQgdG8gJ3JlYWRvbmx5JyBmb3IgcmVhZCBvcGVyYXRpb25zLCBvciAncmVhZHdyaXRlJyBmb3Igd3JpdGUgb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyBBbiBJbmRleGVkREIgdHJhbnNhY3Rpb24gb2JqZWN0IHN0b3JlLCB3cmFwcGVkIGluIGFuIFJ4SlMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uKG1vZGU6ICdyZWFkb25seScgfCAncmVhZHdyaXRlJyA9ICdyZWFkb25seScpOiBPYnNlcnZhYmxlPElEQk9iamVjdFN0b3JlPiB7XG5cbiAgICAvKiBGcm9tIHRoZSBJbmRleGVkREIgY29ubmVjdGlvbiwgb3BlbmluZyBhIHRyYW5zYWN0aW9uIGFuZCBnZXR0aW5nIHRoZSBsb2NhbCBzdG9yYWdlIG9iamV0IHN0b3JlICovXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VcbiAgICAgIC5waXBlKG1hcCgoZGF0YWJhc2UpID0+IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFt0aGlzLm9iamVjdFN0b3JlTmFtZV0sIG1vZGUpLm9iamVjdFN0b3JlKHRoaXMub2JqZWN0U3RvcmVOYW1lKSkpO1xuXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIEluZGV4ZWREQiBzdWNjZXNzIGV2ZW50IGluIGFuIFJ4SlMgT2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0byBsaXN0ZW5cbiAgICogQHJldHVybnMgQSBSeEpTIE9ic2VydmFibGUgd2l0aCB0cnVlIHZhbHVlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9TdWNjZXNzT2JzZXJ2YWJsZShyZXF1ZXN0OiBJREJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICAvKiBUcmFuc2Zvcm1pbmcgYSBJbmRleGVkREIgc3VjY2VzcyBldmVudCBpbiBhbiBSeEpTIE9ic2VydmFibGUgd2l0aCB0cnVlIHZhbHVlICovXG4gICAgcmV0dXJuIChmcm9tRXZlbnQocmVxdWVzdCwgJ3N1Y2Nlc3MnKSBhcyBPYnNlcnZhYmxlPEV2ZW50PilcbiAgICAgIC5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGEgSW5kZXhlZERCIGVycm9yIGV2ZW50IGluIGFuIFJ4SlMgRXJyb3JPYnNlcnZhYmxlXG4gICAqIEBwYXJhbSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRvIGxpc3RlblxuICAgKiBAcGFyYW0gZXJyb3IgT3B0aW9ubmFsIGRldGFpbHMgYWJvdXQgdGhlIGVycm9yJ3Mgb3JpZ2luXG4gICAqIEByZXR1cm5zIEEgUnhKUyBFcnJvck9ic2VydmFibGVcbiAgICovXG4gIHByb3RlY3RlZCB0b0Vycm9yT2JzZXJ2YWJsZShyZXF1ZXN0OiBJREJSZXF1ZXN0LCBlcnJvciA9IGBgKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuXG4gICAgLyogVHJhbnNmb3JtaW5nIGEgSW5kZXhlZERCIGVycm9yIGV2ZW50IGluIGFuIFJ4SlMgRXJyb3JPYnNlcnZhYmxlICovXG4gICAgcmV0dXJuIChmcm9tRXZlbnQocmVxdWVzdCwgJ2Vycm9yJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShtZXJnZU1hcCgoKSA9PiB0aHJvd0Vycm9yKG5ldyBFcnJvcihgSW5kZXhlZERCICR7ZXJyb3J9IGlzc3VlIDogJHsocmVxdWVzdC5lcnJvciBhcyBET01FeGNlcHRpb24pLm1lc3NhZ2V9LmApKSkpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RmFsbGJhY2socHJlZml4OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5mYWxsYmFjayA9IG5ldyBMb2NhbFN0b3JhZ2VEYXRhYmFzZShwcmVmaXgpO1xuICB9XG5cbn1cbiJdfQ==

@@ -7,3 +7,3 @@ /**

import { ReplaySubject, fromEvent, of, throwError, race } from 'rxjs';
import { map, mergeMap, first } from 'rxjs/operators';
import { map, mergeMap, first, tap } from 'rxjs/operators';
import { LocalStorageDatabase } from './localstorage-database';

@@ -67,3 +67,2 @@ import { LOCAL_STORAGE_PREFIX } from '../tokens';

function (key) {
var _this = this;
/* Fallback storage if set */

@@ -74,3 +73,22 @@ if (this.fallback) {

/* Opening a trasaction and requesting the item in local storage */
return this.transaction().pipe(map(function (transaction) { return transaction.get(key); }), mergeMap(function (request) {
return this.getItemFromTransaction(key);
};
/**
* Gets an item value in local storage
* @template T
* @param {?} key The item's key
* @param {?=} transactionParam Optional pre-existing transaction to use for the read request
* @return {?} The item's value if the key exists, null otherwise, wrapped in an RxJS Observable
*/
IndexedDBDatabase.prototype.getItemFromTransaction = /**
* Gets an item value in local storage
* @template T
* @param {?} key The item's key
* @param {?=} transactionParam Optional pre-existing transaction to use for the read request
* @return {?} The item's value if the key exists, null otherwise, wrapped in an RxJS Observable
*/
function (key, transactionParam) {
var _this = this;
var /** @type {?} */ transaction$ = transactionParam ? of(transactionParam) : this.transaction();
return transaction$.pipe(map(function (transaction) { return transaction.get(key); }), mergeMap(function (request) {
/* Listening to the success event, and passing the item value if found, null otherwise */

@@ -111,22 +129,25 @@ var /** @type {?} */ success = (/** @type {?} */ (fromEvent(request, 'success'))).pipe(map(function (event) { return (/** @type {?} */ (event.target)).result; }), map(function (result) { return result && (_this.dataPath in result) ? (/** @type {?} */ (result[_this.dataPath])) : null; }));

}
/* Opening a transaction and checking if the item already exists in local storage */
return this.getItem(key).pipe(map(function (existingData) { return (existingData == null) ? 'add' : 'put'; }), mergeMap(function (method) {
/* Opening a transaction */
return _this.transaction('readwrite').pipe(mergeMap(function (transaction) {
var /** @type {?} */ request;
/* Adding or updating local storage, based on previous checking */
switch (method) {
case 'add':
request = transaction.add((_a = {}, _a[_this.dataPath] = data, _a), key);
break;
case 'put':
default:
request = transaction.put((_b = {}, _b[_this.dataPath] = data, _b), key);
break;
}
/* Merging success (passing true) and error events and autoclosing the observable */
return (/** @type {?} */ (race(_this.toSuccessObservable(request), _this.toErrorObservable(request, "setter"))))
.pipe(first());
var _a, _b;
}));
/* Transaction must be the same for read and write, to avoid concurrency issues */
var /** @type {?} */ transaction$ = this.transaction('readwrite');
var /** @type {?} */ transaction = null;
/* Opening a transaction */
return transaction$.pipe(tap(function (value) {
transaction = value;
}), /* Check if the key already exists or not */
mergeMap(function () { return _this.getItemFromTransaction(key, (/** @type {?} */ (transaction))); }), map(function (existingData) { return (existingData == null) ? 'add' : 'put'; }), mergeMap(function (method) {
var /** @type {?} */ request;
/* Adding or updating local storage, based on previous checking */
switch (method) {
case 'add':
request = (/** @type {?} */ (transaction)).add((_a = {}, _a[_this.dataPath] = data, _a), key);
break;
case 'put':
default:
request = (/** @type {?} */ (transaction)).put((_b = {}, _b[_this.dataPath] = data, _b), key);
break;
}
/* Merging success (passing true) and error events and autoclosing the observable */
return (/** @type {?} */ (race(_this.toSuccessObservable(request), _this.toErrorObservable(request, "setter"))))
.pipe(first());
var _a, _b;
}), first());

@@ -316,3 +337,3 @@ };

return (/** @type {?} */ (fromEvent(request, 'error')))
.pipe(mergeMap(function () { return throwError(new Error("IndexedDB " + error + " issue : " + request.error.message + ".")); }));
.pipe(mergeMap(function () { return throwError(new Error("IndexedDB " + error + " issue : " + ((/** @type {?} */ (request.error))).message + ".")); }));
};

@@ -380,2 +401,2 @@ /**

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLWRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1wd2EvbG9jYWwtc3RvcmFnZS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhYmFzZXMvaW5kZXhlZGRiLWRhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0lBa0MvQzs7T0FFRztJQUNILDJCQUFnRSxNQUE0Qjs4Q0FBQTtRQUE1QixXQUFNLEdBQU4sTUFBTSxDQUFzQjs7OztzQkEzQnpFLFdBQVc7Ozs7K0JBSU8sY0FBYzs7Ozt1QkFJdEIsS0FBSzs7Ozt3QkFJSixPQUFPOzs7Ozt3QkFVTSxJQUFJO1FBTzdDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFWCxJQUFJLENBQUMsTUFBTSxHQUFNLE1BQU0sU0FBSSxJQUFJLENBQUMsTUFBUSxDQUFDO1NBRTFDOztRQUdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQWUsQ0FBQzs7UUFHakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUV0QjtJQUVEOzs7O09BSUc7Ozs7Ozs7SUFDSCxtQ0FBTzs7Ozs7O0lBQVAsVUFBaUIsR0FBVztRQUE1QixpQkEwQkM7O1FBdkJDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMs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U0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQXNCLEVBQUM7YUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFNLE9BQUEsSUFBSSxFQUFKLENBQUksQ0FBQyxDQUFDLENBQUM7S0FFMUI7SUFFRDs7Ozs7T0FLRzs7Ozs7OztJQUNPLDZDQUFpQjs7Ozs7O0lBQTNCLFVBQTRCLE9BQW1CLEVBQUUsS0FBVTtRQUFWLHNCQUFBLEVBQUEsVUFBVTs7UUFHekQsTUFBTSxDQUFDLG1CQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFzQixFQUFDO2FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBTSxPQUFBLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFhLEtBQUssaUJBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLE1BQUcsQ0FBQyxDQUFDLEVBQTdFLENBQTZFLENBQUMsQ0FBQyxDQUFDO0tBRXhHOzs7OztJQUVTLHVDQUFXOzs7O0lBQXJCLFVBQXNCLE1BQXFCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNsRDs7Z0JBcFRGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0RBaUNjLFFBQVEsWUFBSSxNQUFNLFNBQUMsb0JBQW9COzs7NEJBM0N0RDs7U0FXYSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBmcm9tRXZlbnQsIG9mLCB0aHJvd0Vycm9yLCByYWNlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTG9jYWxEYXRhYmFzZSB9IGZyb20gJy4vbG9jYWwtZGF0YWJhc2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRGF0YWJhc2UgfSBmcm9tICcuL2xvY2Fsc3RvcmFnZS1kYXRhYmFzZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFX1BSRUZJWCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEluZGV4ZWREQkRhdGFiYXNlIGltcGxlbWVudHMgTG9jYWxEYXRhYmFzZSB7XG5cbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhYmFzZSBuYW1lIGZvciBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgZGJOYW1lID0gJ25nU3RvcmFnZSc7XG4gIC8qKlxuICAgKiBJbmRleGVkREIgb2JqZWN0IHN0b3JlIG5hbWUgZm9yIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvYmplY3RTdG9yZU5hbWUgPSAnbG9jYWxTdG9yYWdlJztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBrZXkgcGF0aCBuYW1lIGZvciBsb2NhbCBzdG9yYWdlICh3aGVyZSBhbiBpdGVtJ3Mga2V5IHdpbGwgYmUgc3RvcmVkKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleVBhdGggPSAna2V5JztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhIHBhdGggbmFtZSBmb3IgbG9jYWwgc3RvcmFnZSAod2hlcmUgaXRlbXMnIHZhbHVlIHdpbGwgYmUgc3RvcmVkKVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFQYXRoID0gJ3ZhbHVlJztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBkYXRhYmFzZSBjb25uZWN0aW9uLCB3cmFwcGVkIGluIGEgUnhKUyBSZXBsYXlTdWJqZWN0IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjb25uZWN0aW9uXG4gICAqIGV2ZW4gYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gc3VjY2VzcyBldmVudCBoYXBwZW5lZFxuICAgKi9cbiAgcHJvdGVjdGVkIGRhdGFiYXNlOiBSZXBsYXlTdWJqZWN0PElEQkRhdGFiYXNlPjtcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBpcyBhdmFpbGFibGUgYnV0IGZhaWxpbmcgaW4gc29tZSBzY2VuYXJpb3MgKEZpcmVmb3ggcHJpdmF0ZSBtb2RlLCBTYWZhcmkgY3Jvc3Mtb3JpZ2luIGlmcmFtZXMpLFxuICAgKiBzbyBhIGZhbGxiYWNrIGNhbiBiZSBuZWVkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZmFsbGJhY2s6IExvY2FsRGF0YWJhc2UgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29ubmVjdHMgdG8gSW5kZXhlZERCXG4gICAqL1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMX1NUT1JBR0VfUFJFRklYKSBwcm90ZWN0ZWQgcHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuXG4gICAgaWYgKHByZWZpeCkge1xuXG4gICAgICB0aGlzLmRiTmFtZSA9IGAke3ByZWZpeH1fJHt0aGlzLmRiTmFtZX1gO1xuXG4gICAgfVxuXG4gICAgLyogQ3JlYXRpbmcgdGhlIFJ4SlMgUmVwbGF5U3ViamVjdCAqL1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmVwbGF5U3ViamVjdDxJREJEYXRhYmFzZT4oKTtcblxuICAgIC8qIENvbm5lY3RpbmcgdG8gSW5kZXhlZERCICovXG4gICAgdGhpcy5jb25uZWN0KHByZWZpeCk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGl0ZW0gdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIFRoZSBpdGVtJ3MgdmFsdWUgaWYgdGhlIGtleSBleGlzdHMsIG51bGwgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGFuIFJ4SlMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgZ2V0SXRlbTxUID0gYW55PihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VMKgfCBudWxsPiB7XG5cbiAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIHNldCAqL1xuICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5nZXRJdGVtPFQ+KGtleSk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYXNhY3Rpb24gYW5kIHJlcXVlc3RpbmcgdGhlIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uKCkucGlwZShcbiAgICAgIG1hcCgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLmdldChrZXkpKSxcbiAgICAgIG1lcmdlTWFwKChyZXF1ZXN0KSA9PiB7XG5cbiAgICAgICAgLyogTGlzdGVuaW5nIHRvIHRoZSBzdWNjZXNzIGV2ZW50LCBhbmQgcGFzc2luZyB0aGUgaXRlbSB2YWx1ZSBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UgKi9cbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IChmcm9tRXZlbnQocmVxdWVzdCwgJ3N1Y2Nlc3MnKSBhcyBPYnNlcnZhYmxlPEV2ZW50PikucGlwZShcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiAoZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3QpLnJlc3VsdCksXG4gICAgICAgICAgbWFwKChyZXN1bHQpID0+IHJlc3VsdCAmJiAodGhpcy5kYXRhUGF0aCBpbiByZXN1bHQpID8gKHJlc3VsdFt0aGlzLmRhdGFQYXRoXSBhcyBUKSA6IG51bGwpXG4gICAgICAgICk7XG5cbiAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIGFuZCBlcnJvcnMgZXZlbnRzIGFuZCBhdXRvY2xvc2luZyB0aGUgb2JzZXJ2YWJsZSAqL1xuICAgICAgICByZXR1cm4gKHJhY2Uoc3VjY2VzcywgdGhpcy50b0Vycm9yT2JzZXJ2YWJsZShyZXF1ZXN0LCBgZ2V0dGVyYCkpIGFzIE9ic2VydmFibGU8VCB8IG51bGw+KVxuICAgICAgICAgIC5waXBlKGZpcnN0KCkpO1xuXG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBpdGVtIGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgaXRlbSdzIHZhbHVlLCBtdXN0IE5PVCBiZSBudWxsIG9yIHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBBbiBSeEpTIE9ic2VydmFibGUgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suc2V0SXRlbShrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qIFN0b3JpbmcgbnVsbCBpcyBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCBieSBJbmRleGVkREIgYW5kIHVubmVjZXNzYXJ5IGhlcmUgKi9cbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG5cbiAgICAgIHJldHVybiBvZih0cnVlKTtcblxuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgY2hlY2tpbmcgaWYgdGhlIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oa2V5KS5waXBlKFxuICAgICAgbWFwKChleGlzdGluZ0RhdGEpID0+IChleGlzdGluZ0RhdGEgPT0gbnVsbCkgPyAnYWRkJyA6ICdwdXQnKSxcbiAgICAgIG1lcmdlTWFwKChtZXRob2QpID0+IHtcblxuICAgICAgICAvKiBPcGVuaW5nIGEgdHJhbnNhY3Rpb24gKi9cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUobWVyZ2VNYXAoKHRyYW5zYWN0aW9uKSA9PiB7XG5cbiAgICAgICAgICBsZXQgcmVxdWVzdDogSURCUmVxdWVzdDtcblxuICAgICAgICAgIC8qIEFkZGluZyBvciB1cGRhdGluZyBsb2NhbCBzdG9yYWdlLCBiYXNlZCBvbiBwcmV2aW91cyBjaGVja2luZyAqL1xuICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICByZXF1ZXN0ID0gdHJhbnNhY3Rpb24uYWRkKHsgW3RoaXMuZGF0YVBhdGhdOiBkYXRhIH0sIGtleSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHV0JzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5wdXQoeyBbdGhpcy5kYXRhUGF0aF06IGRhdGEgfSwga2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgcmV0dXJuIChyYWNlKHRoaXMudG9TdWNjZXNzT2JzZXJ2YWJsZShyZXF1ZXN0KSwgdGhpcy50b0Vycm9yT2JzZXJ2YWJsZShyZXF1ZXN0LCBgc2V0dGVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKTtcblxuICAgICAgICB9KSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIEFuIFJ4SlMgT2JzZXJ2YWJsZSB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2sucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgY2hlY2tpbmcgaWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKGtleSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiB7XG5cbiAgICAgICAgLyogSWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuXG4gICAgICAgICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUobWVyZ2VNYXAoKHRyYW5zYWN0aW9uKSA9PiB7XG5cbiAgICAgICAgICAgIC8qIERlbGV0aW5nIHRoZSBpdGVtIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5kZWxldGUoa2V5KTtcblxuICAgICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGByZW1vdmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpO1xuXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBQYXNzaW5nIHRydWUgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBpdGVtcyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICogQHJldHVybnMgQW4gUnhKUyBPYnNlcnZhYmxlIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgc2V0ICovXG4gICAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodHJhbnNhY3Rpb24pID0+IHtcblxuICAgICAgICAvKiBEZWxldGluZyBhbGwgaXRlbXMgZnJvbSBsb2NhbCBzdG9yYWdlICovXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5jbGVhcigpO1xuXG4gICAgICAgIC8qIE1lcmdpbmcgc3VjY2VzcyAocGFzc2luZyB0cnVlKSBhbmQgZXJyb3IgZXZlbnRzIGFuZCBhdXRvY2xvc2luZyB0aGUgb2JzZXJ2YWJsZSAqL1xuICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjbGVhcmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBJbmRleGVkREIgYW5kIGNyZWF0ZXMgdGhlIG9iamVjdCBzdG9yZSBvbiBmaXJzdCB0aW1lXG4gICAqL1xuICBwcm90ZWN0ZWQgY29ubmVjdChwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCB7XG5cbiAgICBsZXQgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdDtcblxuICAgIC8qIENvbm5lY3RpbmcgdG8gSW5kZXhlZERCICovXG4gICAgdHJ5IHtcblxuICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuZGJOYW1lKTtcblxuICAgIH3CoGNhdGNoIChlcnJvcikge1xuXG4gICAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIEluZGV4ZWREYiBjb25uZWN0aW9uIGlzIGZhaWxpbmcgKi9cbiAgICAgIHRoaXMuc2V0RmFsbGJhY2socHJlZml4KTtcblxuICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgLyogTGlzdGVuaW5nIHRoZSBldmVudCBmaXJlZCBvbiBmaXJzdCBjb25uZWN0aW9uLCBjcmVhdGluZyB0aGUgb2JqZWN0IHN0b3JlIGZvciBsb2NhbCBzdG9yYWdlICovXG4gICAgKGZyb21FdmVudChyZXF1ZXN0LCAndXBncmFkZW5lZWRlZCcpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogR2V0dGluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiAqL1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlO1xuXG4gICAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBvYmplY3Qgc3RvcmUgYWxyZWFkeSBleGlzdHMsIHRvIGF2b2lkIGVycm9yICovXG4gICAgICAgIGlmICghZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLm9iamVjdFN0b3JlTmFtZSkpIHtcblxuICAgICAgICAgIC8qIENyZWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUgZm9yIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSk7XG5cbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgIC8qIExpc3RlbmluZyB0aGUgc3VjY2VzcyBldmVudCBhbmQgY29udmVydGluZyB0byBhbiBSeEpTIE9ic2VydmFibGUgKi9cbiAgICBjb25zdCBzdWNjZXNzID0gZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD47XG5cbiAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgYW5kIGVycm9ycyBldmVudHMgKi9cbiAgICAocmFjZShzdWNjZXNzLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjb25uZWN0aW9uYCkpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogU3RvcmluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBmb3IgZnVydGhlciBhY2Nlc3MgKi9cbiAgICAgICAgdGhpcy5kYXRhYmFzZS5uZXh0KChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlKTtcblxuICAgICAgfSwgKCkgPT4ge1xuXG4gICAgICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgSW5kZXhlZERiIGNvbm5lY3Rpb24gaXMgZmFpbGluZyAqL1xuICAgICAgICB0aGlzLnNldEZhbGxiYWNrKHByZWZpeCk7XG5cbiAgICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIGFuZCBnZXRzIHRoZSBsb2NhbCBzdG9yYWdlIG9iamVjdCBzdG9yZVxuICAgKiBAcGFyYW0gbW9kZSBEZWZhdWx0IHRvICdyZWFkb25seScgZm9yIHJlYWQgb3BlcmF0aW9ucywgb3IgJ3JlYWR3cml0ZScgZm9yIHdyaXRlIG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMgQW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIG9iamVjdCBzdG9yZSwgd3JhcHBlZCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2FjdGlvbihtb2RlOiAncmVhZG9ubHknIHwgJ3JlYWR3cml0ZScgPSAncmVhZG9ubHknKTogT2JzZXJ2YWJsZTxJREJPYmplY3RTdG9yZT4ge1xuXG4gICAgLyogRnJvbSB0aGUgSW5kZXhlZERCIGNvbm5lY3Rpb24sIG9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgZ2V0dGluZyB0aGUgbG9jYWwgc3RvcmFnZSBvYmpldCBzdG9yZSAqL1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlXG4gICAgICAucGlwZShtYXAoKGRhdGFiYXNlKSA9PiBkYXRhYmFzZS50cmFuc2FjdGlvbihbdGhpcy5vYmplY3RTdG9yZU5hbWVdLCBtb2RlKS5vYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSkpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYSBJbmRleGVkREIgc3VjY2VzcyBldmVudCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHJlcXVlc3QgdG8gbGlzdGVuXG4gICAqIEByZXR1cm5zIEEgUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIHRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogVHJhbnNmb3JtaW5nIGEgSW5kZXhlZERCIHN1Y2Nlc3MgZXZlbnQgaW4gYW4gUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0byBsaXN0ZW5cbiAgICogQHBhcmFtIGVycm9yIE9wdGlvbm5hbCBkZXRhaWxzIGFib3V0IHRoZSBlcnJvcidzIG9yaWdpblxuICAgKiBAcmV0dXJucyBBIFJ4SlMgRXJyb3JPYnNlcnZhYmxlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9FcnJvck9ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCwgZXJyb3IgPSBgYCk6IE9ic2VydmFibGU8bmV2ZXI+IHtcblxuICAgIC8qIFRyYW5zZm9ybWluZyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdlcnJvcicpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUobWVyZ2VNYXAoKCkgPT4gdGhyb3dFcnJvcihuZXcgRXJyb3IoYEluZGV4ZWREQiAke2Vycm9yfSBpc3N1ZSA6ICR7cmVxdWVzdC5lcnJvci5tZXNzYWdlfS5gKSkpKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHNldEZhbGxiYWNrKHByZWZpeDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZmFsbGJhY2sgPSBuZXcgTG9jYWxTdG9yYWdlRGF0YWJhc2UocHJlZml4KTtcbiAgfVxuXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLWRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1wd2EvbG9jYWwtc3RvcmFnZS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhYmFzZXMvaW5kZXhlZGRiLWRhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztJQWtDL0M7O09BRUc7SUFDSCwyQkFBZ0UsTUFBNEI7OENBQUE7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7Ozs7c0JBM0J6RSxXQUFXOzs7OytCQUlPLGNBQWM7Ozs7dUJBSXRCLEtBQUs7Ozs7d0JBSUosT0FBTzs7Ozs7d0JBVU0sSUFBSTtRQU83QyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRVgsSUFBSSxDQUFDLE1BQU0sR0FBTSxNQUFNLFNBQUksSUFBSSxDQUFDLE1BQVEsQ0FBQztTQUUxQzs7UUFHRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxFQUFlLENBQUM7O1FBR2pELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7S0FFdEI7SUFFRDs7OztPQUlHOzs7Ozs7O0lBQ0gsbUNBQU87Ozs7OztJQUFQLFVBQWlCLEdBQVc7O1FBRzFCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FB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aUNjLFFBQVEsWUFBSSxNQUFNLFNBQUMsb0JBQW9COzs7NEJBM0N0RDs7U0FXYSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBmcm9tRXZlbnQsIG9mLCB0aHJvd0Vycm9yLCByYWNlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCBmaXJzdCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBMb2NhbERhdGFiYXNlIH0gZnJvbSAnLi9sb2NhbC1kYXRhYmFzZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VEYXRhYmFzZSB9IGZyb20gJy4vbG9jYWxzdG9yYWdlLWRhdGFiYXNlJztcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0VfUFJFRklYIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW5kZXhlZERCRGF0YWJhc2UgaW1wbGVtZW50cyBMb2NhbERhdGFiYXNlIHtcblxuICAvKipcbiAgICogSW5kZXhlZERCIGRhdGFiYXNlIG5hbWUgZm9yIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBkYk5hbWUgPSAnbmdTdG9yYWdlJztcbiAgLyoqXG4gICAqIEluZGV4ZWREQiBvYmplY3Qgc3RvcmUgbmFtZSBmb3IgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9iamVjdFN0b3JlTmFtZSA9ICdsb2NhbFN0b3JhZ2UnO1xuICAvKipcbiAgICogSW5kZXhlZERCIGtleSBwYXRoIG5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgKHdoZXJlIGFuIGl0ZW0ncyBrZXkgd2lsbCBiZSBzdG9yZWQpXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5UGF0aCA9ICdrZXknO1xuICAvKipcbiAgICogSW5kZXhlZERCIGRhdGEgcGF0aCBuYW1lIGZvciBsb2NhbCBzdG9yYWdlICh3aGVyZSBpdGVtcycgdmFsdWUgd2lsbCBiZSBzdG9yZWQpXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVBhdGggPSAndmFsdWUnO1xuICAvKipcbiAgICogSW5kZXhlZERCIGRhdGFiYXNlIGNvbm5lY3Rpb24sIHdyYXBwZWQgaW4gYSBSeEpTIFJlcGxheVN1YmplY3QgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGNvbm5lY3Rpb25cbiAgICogZXZlbiBhZnRlciB0aGUgY29ubmVjdGlvbiBzdWNjZXNzIGV2ZW50IGhhcHBlbmVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZGF0YWJhc2U6IFJlcGxheVN1YmplY3Q8SURCRGF0YWJhc2U+O1xuICAvKipcbiAgICogSW5kZXhlZERCIGlzIGF2YWlsYWJsZSBidXQgZmFpbGluZyBpbiBzb21lIHNjZW5hcmlvcyAoRmlyZWZveCBwcml2YXRlIG1vZGUsIFNhZmFyaSBjcm9zcy1vcmlnaW4gaWZyYW1lcyksXG4gICAqIHNvIGEgZmFsbGJhY2sgY2FuIGJlIG5lZWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBmYWxsYmFjazogTG9jYWxEYXRhYmFzZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBJbmRleGVkREJcbiAgICovXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxfU1RPUkFHRV9QUkVGSVgpIHByb3RlY3RlZCBwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG5cbiAgICBpZiAocHJlZml4KSB7XG5cbiAgICAgIHRoaXMuZGJOYW1lID0gYCR7cHJlZml4fV8ke3RoaXMuZGJOYW1lfWA7XG5cbiAgICB9XG5cbiAgICAvKiBDcmVhdGluZyB0aGUgUnhKUyBSZXBsYXlTdWJqZWN0ICovXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZXBsYXlTdWJqZWN0PElEQkRhdGFiYXNlPigpO1xuXG4gICAgLyogQ29ubmVjdGluZyB0byBJbmRleGVkREIgKi9cbiAgICB0aGlzLmNvbm5lY3QocHJlZml4KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gaXRlbSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXlcbiAgICogQHJldHVybnMgVGhlIGl0ZW0ncyB2YWx1ZSBpZiB0aGUga2V5IGV4aXN0cywgbnVsbCBvdGhlcndpc2UsIHdyYXBwZWQgaW4gYW4gUnhKUyBPYnNlcnZhYmxlXG4gICAqL1xuICBnZXRJdGVtPFQgPSBhbnk+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUwqB8IG51bGw+IHtcblxuICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgc2V0ICovXG4gICAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmdldEl0ZW08VD4oa2V5KTtcbiAgICB9XG5cbiAgICAvKiBPcGVuaW5nIGEgdHJhc2FjdGlvbiBhbmQgcmVxdWVzdGluZyB0aGUgaXRlbSBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZyb21UcmFuc2FjdGlvbjxUPihrZXkpO1xuXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBpdGVtIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25QYXJhbSBPcHRpb25hbCBwcmUtZXhpc3RpbmcgdHJhbnNhY3Rpb24gdG8gdXNlIGZvciB0aGUgcmVhZCByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBpdGVtJ3MgdmFsdWUgaWYgdGhlIGtleSBleGlzdHMsIG51bGwgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGFuIFJ4SlMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRJdGVtRnJvbVRyYW5zYWN0aW9uPFQgPSBhbnk+KGtleTogc3RyaW5nLCB0cmFuc2FjdGlvblBhcmFtPzogSURCT2JqZWN0U3RvcmUpOiBPYnNlcnZhYmxlPFTCoHwgbnVsbD4ge1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb24kID0gdHJhbnNhY3Rpb25QYXJhbSA/IG9mKHRyYW5zYWN0aW9uUGFyYW0pIDogdGhpcy50cmFuc2FjdGlvbigpO1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uJC5waXBlKFxuICAgICAgbWFwKCh0cmFuc2FjdGlvbikgPT4gdHJhbnNhY3Rpb24uZ2V0KGtleSkpLFxuICAgICAgbWVyZ2VNYXAoKHJlcXVlc3QpID0+IHtcblxuICAgICAgICAvKiBMaXN0ZW5pbmcgdG8gdGhlIHN1Y2Nlc3MgZXZlbnQsIGFuZCBwYXNzaW5nIHRoZSBpdGVtIHZhbHVlIGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZSAqL1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gKGZyb21FdmVudChyZXF1ZXN0LCAnc3VjY2VzcycpIGFzIE9ic2VydmFibGU8RXZlbnQ+KS5waXBlKFxuICAgICAgICAgIG1hcCgoZXZlbnQpID0+IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KSxcbiAgICAgICAgICBtYXAoKHJlc3VsdCkgPT4gcmVzdWx0ICYmICh0aGlzLmRhdGFQYXRoIGluIHJlc3VsdCkgPyAocmVzdWx0W3RoaXMuZGF0YVBhdGhdIGFzIFQpIDogbnVsbClcbiAgICAgICAgKTtcblxuICAgICAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgYW5kIGVycm9ycyBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgIHJldHVybiAocmFjZShzdWNjZXNzLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBnZXR0ZXJgKSkgYXMgT2JzZXJ2YWJsZTxUIHwgbnVsbD4pXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBpdGVtIGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgaXRlbSdzIHZhbHVlLCBtdXN0IE5PVCBiZSBudWxsIG9yIHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBBbiBSeEpTIE9ic2VydmFibGUgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suc2V0SXRlbShrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qIFN0b3JpbmcgbnVsbCBpcyBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCBieSBJbmRleGVkREIgYW5kIHVubmVjZXNzYXJ5IGhlcmUgKi9cbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG5cbiAgICAgIHJldHVybiBvZih0cnVlKTtcblxuICAgIH1cblxuICAgIC8qIFRyYW5zYWN0aW9uIG11c3QgYmUgdGhlIHNhbWUgZm9yIHJlYWQgYW5kIHdyaXRlLCB0byBhdm9pZCBjb25jdXJyZW5jeSBpc3N1ZXMgKi9cbiAgICBjb25zdCB0cmFuc2FjdGlvbiQgPSB0aGlzLnRyYW5zYWN0aW9uKCdyZWFkd3JpdGUnKTtcbiAgICBsZXQgdHJhbnNhY3Rpb246IElEQk9iamVjdFN0b3JlwqB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiAqL1xuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb24kLnBpcGUoXG4gICAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSB2YWx1ZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvKiBDaGVjayBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIG9yIG5vdCAqL1xuICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuZ2V0SXRlbUZyb21UcmFuc2FjdGlvbihrZXksICh0cmFuc2FjdGlvbiBhcyBJREJPYmplY3RTdG9yZSkpKSxcbiAgICAgICAgICBtYXAoKGV4aXN0aW5nRGF0YSkgPT4gKGV4aXN0aW5nRGF0YSA9PSBudWxsKSA/ICdhZGQnIDogJ3B1dCcpLFxuICAgICAgICAgIG1lcmdlTWFwKChtZXRob2QpID0+IHtcblxuICAgICAgICAgICAgbGV0IHJlcXVlc3Q6IElEQlJlcXVlc3Q7XG5cbiAgICAgICAgICAgIC8qIEFkZGluZyBvciB1cGRhdGluZyBsb2NhbCBzdG9yYWdlLCBiYXNlZCBvbiBwcmV2aW91cyBjaGVja2luZyAqL1xuICAgICAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gKHRyYW5zYWN0aW9uIGFzIElEQk9iamVjdFN0b3JlKS5hZGQoeyBbdGhpcy5kYXRhUGF0aF06IGRhdGEgfSwga2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAncHV0JzpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gKHRyYW5zYWN0aW9uIGFzIElEQk9iamVjdFN0b3JlKS5wdXQoeyBbdGhpcy5kYXRhUGF0aF06IGRhdGEgfSwga2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBzZXR0ZXJgKSkgYXMgT2JzZXJ2YWJsZTxib29sZWFuPilcbiAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG5cbiAgICAgICAgfSksXG4gICAgICAgIGZpcnN0KClcbiAgICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGl0ZW0gaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIEFuIFJ4SlMgT2JzZXJ2YWJsZSB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogRmFsbGJhY2sgc3RvcmFnZSBpZiBzZXQgKi9cbiAgICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2sucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cblxuICAgIC8qIE9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgY2hlY2tpbmcgaWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKGtleSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiB7XG5cbiAgICAgICAgLyogSWYgdGhlIGl0ZW0gZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuXG4gICAgICAgICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUobWVyZ2VNYXAoKHRyYW5zYWN0aW9uKSA9PiB7XG5cbiAgICAgICAgICAgIC8qIERlbGV0aW5nIHRoZSBpdGVtIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5kZWxldGUoa2V5KTtcblxuICAgICAgICAgICAgLyogTWVyZ2luZyBzdWNjZXNzIChwYXNzaW5nIHRydWUpIGFuZCBlcnJvciBldmVudHMgYW5kIGF1dG9jbG9zaW5nIHRoZSBvYnNlcnZhYmxlICovXG4gICAgICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGByZW1vdmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpO1xuXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBQYXNzaW5nIHRydWUgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBpdGVtcyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICogQHJldHVybnMgQW4gUnhKUyBPYnNlcnZhYmxlIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqL1xuICBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgc2V0ICovXG4gICAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyogT3BlbmluZyBhIHRyYW5zYWN0aW9uICovXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oJ3JlYWR3cml0ZScpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodHJhbnNhY3Rpb24pID0+IHtcblxuICAgICAgICAvKiBEZWxldGluZyBhbGwgaXRlbXMgZnJvbSBsb2NhbCBzdG9yYWdlICovXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5jbGVhcigpO1xuXG4gICAgICAgIC8qIE1lcmdpbmcgc3VjY2VzcyAocGFzc2luZyB0cnVlKSBhbmQgZXJyb3IgZXZlbnRzIGFuZCBhdXRvY2xvc2luZyB0aGUgb2JzZXJ2YWJsZSAqL1xuICAgICAgICByZXR1cm4gKHJhY2UodGhpcy50b1N1Y2Nlc3NPYnNlcnZhYmxlKHJlcXVlc3QpLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjbGVhcmVyYCkpIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSk7XG5cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBJbmRleGVkREIgYW5kIGNyZWF0ZXMgdGhlIG9iamVjdCBzdG9yZSBvbiBmaXJzdCB0aW1lXG4gICAqL1xuICBwcm90ZWN0ZWQgY29ubmVjdChwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCB7XG5cbiAgICBsZXQgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdDtcblxuICAgIC8qIENvbm5lY3RpbmcgdG8gSW5kZXhlZERCICovXG4gICAgdHJ5IHtcblxuICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuZGJOYW1lKTtcblxuICAgIH3CoGNhdGNoIChlcnJvcikge1xuXG4gICAgICAvKiBGYWxsYmFjayBzdG9yYWdlIGlmIEluZGV4ZWREYiBjb25uZWN0aW9uIGlzIGZhaWxpbmcgKi9cbiAgICAgIHRoaXMuc2V0RmFsbGJhY2socHJlZml4KTtcblxuICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgLyogTGlzdGVuaW5nIHRoZSBldmVudCBmaXJlZCBvbiBmaXJzdCBjb25uZWN0aW9uLCBjcmVhdGluZyB0aGUgb2JqZWN0IHN0b3JlIGZvciBsb2NhbCBzdG9yYWdlICovXG4gICAgKGZyb21FdmVudChyZXF1ZXN0LCAndXBncmFkZW5lZWRlZCcpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogR2V0dGluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiAqL1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlO1xuXG4gICAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBvYmplY3Qgc3RvcmUgYWxyZWFkeSBleGlzdHMsIHRvIGF2b2lkIGVycm9yICovXG4gICAgICAgIGlmICghZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLm9iamVjdFN0b3JlTmFtZSkpIHtcblxuICAgICAgICAgIC8qIENyZWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUgZm9yIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgICAgICBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSk7XG5cbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgIC8qIExpc3RlbmluZyB0aGUgc3VjY2VzcyBldmVudCBhbmQgY29udmVydGluZyB0byBhbiBSeEpTIE9ic2VydmFibGUgKi9cbiAgICBjb25zdCBzdWNjZXNzID0gZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD47XG5cbiAgICAvKiBNZXJnaW5nIHN1Y2Nlc3MgYW5kIGVycm9ycyBldmVudHMgKi9cbiAgICAocmFjZShzdWNjZXNzLCB0aGlzLnRvRXJyb3JPYnNlcnZhYmxlKHJlcXVlc3QsIGBjb25uZWN0aW9uYCkpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgLyogU3RvcmluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBmb3IgZnVydGhlciBhY2Nlc3MgKi9cbiAgICAgICAgdGhpcy5kYXRhYmFzZS5uZXh0KChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkRhdGFiYXNlKTtcblxuICAgICAgfSwgKCkgPT4ge1xuXG4gICAgICAgIC8qIEZhbGxiYWNrIHN0b3JhZ2UgaWYgSW5kZXhlZERiIGNvbm5lY3Rpb24gaXMgZmFpbGluZyAqL1xuICAgICAgICB0aGlzLnNldEZhbGxiYWNrKHByZWZpeCk7XG5cbiAgICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIGFuZCBnZXRzIHRoZSBsb2NhbCBzdG9yYWdlIG9iamVjdCBzdG9yZVxuICAgKiBAcGFyYW0gbW9kZSBEZWZhdWx0IHRvICdyZWFkb25seScgZm9yIHJlYWQgb3BlcmF0aW9ucywgb3IgJ3JlYWR3cml0ZScgZm9yIHdyaXRlIG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMgQW4gSW5kZXhlZERCIHRyYW5zYWN0aW9uIG9iamVjdCBzdG9yZSwgd3JhcHBlZCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICovXG4gIHByb3RlY3RlZCB0cmFuc2FjdGlvbihtb2RlOiAncmVhZG9ubHknIHwgJ3JlYWR3cml0ZScgPSAncmVhZG9ubHknKTogT2JzZXJ2YWJsZTxJREJPYmplY3RTdG9yZT4ge1xuXG4gICAgLyogRnJvbSB0aGUgSW5kZXhlZERCIGNvbm5lY3Rpb24sIG9wZW5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgZ2V0dGluZyB0aGUgbG9jYWwgc3RvcmFnZSBvYmpldCBzdG9yZSAqL1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlXG4gICAgICAucGlwZShtYXAoKGRhdGFiYXNlKSA9PiBkYXRhYmFzZS50cmFuc2FjdGlvbihbdGhpcy5vYmplY3RTdG9yZU5hbWVdLCBtb2RlKS5vYmplY3RTdG9yZSh0aGlzLm9iamVjdFN0b3JlTmFtZSkpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgYSBJbmRleGVkREIgc3VjY2VzcyBldmVudCBpbiBhbiBSeEpTIE9ic2VydmFibGVcbiAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHJlcXVlc3QgdG8gbGlzdGVuXG4gICAqIEByZXR1cm5zIEEgUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIHRvU3VjY2Vzc09ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLyogVHJhbnNmb3JtaW5nIGEgSW5kZXhlZERCIHN1Y2Nlc3MgZXZlbnQgaW4gYW4gUnhKUyBPYnNlcnZhYmxlIHdpdGggdHJ1ZSB2YWx1ZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdzdWNjZXNzJykgYXMgT2JzZXJ2YWJsZTxFdmVudD4pXG4gICAgICAucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0byBsaXN0ZW5cbiAgICogQHBhcmFtIGVycm9yIE9wdGlvbm5hbCBkZXRhaWxzIGFib3V0IHRoZSBlcnJvcidzIG9yaWdpblxuICAgKiBAcmV0dXJucyBBIFJ4SlMgRXJyb3JPYnNlcnZhYmxlXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9FcnJvck9ic2VydmFibGUocmVxdWVzdDogSURCUmVxdWVzdCwgZXJyb3IgPSBgYCk6IE9ic2VydmFibGU8bmV2ZXI+IHtcblxuICAgIC8qIFRyYW5zZm9ybWluZyBhIEluZGV4ZWREQiBlcnJvciBldmVudCBpbiBhbiBSeEpTIEVycm9yT2JzZXJ2YWJsZSAqL1xuICAgIHJldHVybiAoZnJvbUV2ZW50KHJlcXVlc3QsICdlcnJvcicpIGFzIE9ic2VydmFibGU8RXZlbnQ+KVxuICAgICAgLnBpcGUobWVyZ2VNYXAoKCkgPT4gdGhyb3dFcnJvcihuZXcgRXJyb3IoYEluZGV4ZWREQiAke2Vycm9yfSBpc3N1ZSA6ICR7KHJlcXVlc3QuZXJyb3IgYXMgRE9NRXhjZXB0aW9uKS5tZXNzYWdlfS5gKSkpKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHNldEZhbGxiYWNrKHByZWZpeDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZmFsbGJhY2sgPSBuZXcgTG9jYWxTdG9yYWdlRGF0YWJhc2UocHJlZml4KTtcbiAgfVxuXG59XG4iXX0=

@@ -42,2 +42,9 @@ import { Observable, ReplaySubject } from 'rxjs';

/**
* Gets an item value in local storage
* @param key The item's key
* @param transactionParam Optional pre-existing transaction to use for the read request
* @returns The item's value if the key exists, null otherwise, wrapped in an RxJS Observable
*/
private getItemFromTransaction<T>(key, transactionParam?);
/**
* Sets an item in local storage

@@ -44,0 +51,0 @@ * @param key The item's key

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"JSONSchema":{"__symbolic":"interface"},"ɵa":{"__symbolic":"function"},"LocalDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":30,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵa"},"deps":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":34,"character":4},[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":35,"character":9}},{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]]}]}],"members":{"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"IndexedDBDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":43,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":43,"character":27},"arguments":[{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"connect":[{"__symbolic":"method"}],"transaction":[{"__symbolic":"method"}],"toSuccessObservable":[{"__symbolic":"method"}],"toErrorObservable":[{"__symbolic":"method"}],"setFallback":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"LocalStorageDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":14,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":14,"character":27},"arguments":[{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"MockLocalDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"JSONValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"validate":[{"__symbolic":"method"}],"isObjectNotNull":[{"__symbolic":"method"}],"validateProperties":[{"__symbolic":"method"}],"validateRequired":[{"__symbolic":"method"}],"validateEnum":[{"__symbolic":"method"}],"validateType":[{"__symbolic":"method"}],"validateItems":[{"__symbolic":"method"}],"validateItemsList":[{"__symbolic":"method"}],"validateString":[{"__symbolic":"method"}],"validateNumber":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"LSGetItemOptions":{"__symbolic":"interface"},"LocalStorage":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"LocalDatabase"},{"__symbolic":"reference","name":"JSONValidator"}]}],"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"setItemSubscribe":[{"__symbolic":"method"}],"removeItemSubscribe":[{"__symbolic":"method"}],"clearSubscribe":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"localStorageProviders":{"__symbolic":"function","parameters":["config"],"value":[{"__symbolic":"if","condition":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"prefix"},"thenExpression":{"provide":{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"prefix"}},"elseExpression":[]}]},"LocalStorageProvidersConfig":{"__symbolic":"interface"},"LOCAL_STORAGE_PREFIX":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":40},"arguments":["localStoragePrefix",{"__symbolic":"error","message":"Lambda not supported","line":2,"character":116,"module":"./lib/tokens"}]}},"origins":{"JSONSchema":"./lib/validation/json-schema","ɵa":"./lib/databases/local-database","LocalDatabase":"./lib/databases/local-database","IndexedDBDatabase":"./lib/databases/indexeddb-database","LocalStorageDatabase":"./lib/databases/localstorage-database","MockLocalDatabase":"./lib/databases/mock-local-database","JSONValidator":"./lib/validation/json-validator","LSGetItemOptions":"./lib/lib.service","LocalStorage":"./lib/lib.service","localStorageProviders":"./lib/tokens","LocalStorageProvidersConfig":"./lib/tokens","LOCAL_STORAGE_PREFIX":"./lib/tokens"},"importAs":"@ngx-pwa/local-storage"}
{"__symbolic":"module","version":4,"metadata":{"JSONSchema":{"__symbolic":"interface"},"ɵa":{"__symbolic":"function"},"LocalDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":30,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵa"},"deps":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":34,"character":4},[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":35,"character":9}},{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]]}]}],"members":{"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"IndexedDBDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":43,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":43,"character":27},"arguments":[{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getItem":[{"__symbolic":"method"}],"getItemFromTransaction":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"connect":[{"__symbolic":"method"}],"transaction":[{"__symbolic":"method"}],"toSuccessObservable":[{"__symbolic":"method"}],"toErrorObservable":[{"__symbolic":"method"}],"setFallback":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"LocalStorageDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":14,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":14,"character":27},"arguments":[{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"MockLocalDatabase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"JSONValidator":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"validate":[{"__symbolic":"method"}],"isObjectNotNull":[{"__symbolic":"method"}],"validateProperties":[{"__symbolic":"method"}],"validateRequired":[{"__symbolic":"method"}],"validateEnum":[{"__symbolic":"method"}],"validateType":[{"__symbolic":"method"}],"validateItems":[{"__symbolic":"method"}],"validateItemsList":[{"__symbolic":"method"}],"validateString":[{"__symbolic":"method"}],"validateNumber":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"LSGetItemOptions":{"__symbolic":"interface"},"LocalStorage":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"LocalDatabase"},{"__symbolic":"reference","name":"JSONValidator"}]}],"getItem":[{"__symbolic":"method"}],"setItem":[{"__symbolic":"method"}],"removeItem":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"setItemSubscribe":[{"__symbolic":"method"}],"removeItemSubscribe":[{"__symbolic":"method"}],"clearSubscribe":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"localStorageProviders":{"__symbolic":"function","parameters":["config"],"value":[{"__symbolic":"if","condition":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"prefix"},"thenExpression":{"provide":{"__symbolic":"reference","name":"LOCAL_STORAGE_PREFIX"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"prefix"}},"elseExpression":[]}]},"LocalStorageProvidersConfig":{"__symbolic":"interface"},"LOCAL_STORAGE_PREFIX":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":40},"arguments":["localStoragePrefix",{"__symbolic":"error","message":"Lambda not supported","line":2,"character":116,"module":"./lib/tokens"}]}},"origins":{"JSONSchema":"./lib/validation/json-schema","ɵa":"./lib/databases/local-database","LocalDatabase":"./lib/databases/local-database","IndexedDBDatabase":"./lib/databases/indexeddb-database","LocalStorageDatabase":"./lib/databases/localstorage-database","MockLocalDatabase":"./lib/databases/mock-local-database","JSONValidator":"./lib/validation/json-validator","LSGetItemOptions":"./lib/lib.service","LocalStorage":"./lib/lib.service","localStorageProviders":"./lib/tokens","LocalStorageProvidersConfig":"./lib/tokens","LOCAL_STORAGE_PREFIX":"./lib/tokens"},"importAs":"@ngx-pwa/local-storage"}
{
"name": "@ngx-pwa/local-storage",
"version": "6.1.0",
"version": "6.1.1-beta.0",
"description": "Efficient local storage module for Angular apps and PWA: simple API based on native localStorage API, but internally stored via the asynchronous IndexedDB API for performance, and wrapped in RxJS observables to be homogeneous with other Angular modules.",

@@ -5,0 +5,0 @@ "author": "Cyrille Tuzi",

@@ -8,3 +8,4 @@ # Async local storage for Angular

- **security**: validate data with a JSON Schema,
- **compatibility**: works around some browsers issues.
- **compatibility**: works around some browsers issues,
- **documentation**: API fully explained, and a changelog!

@@ -30,3 +31,3 @@ You could also be interested by [@ngx-pwa/offline](https://github.com/cyrilletuzi/ngx-pwa-offline).

Mozilla has done a very great job with the [localForage library](http://localforage.github.io/localForage/) :
Mozilla has done a very great job with the [localForage library](http://localforage.github.io/localForage/):
a simple API based on native `localStorage`,

@@ -36,3 +37,3 @@ but internally stored via the asynchronous `IndexedDB` for performance.

This module is based on the same idea as localForage, but in ES6/ES2015
This module is based on the same idea as localForage, but in ES6
and additionally wrapped into [RxJS Observables](http://reactivex.io/rxjs/)

@@ -61,3 +62,3 @@ to be homogeneous with other Angular modules.

Then, **for *versions 4 & 5 only*, include the `LocalStorageModule`** in your app root module (just once, do NOT re-import it in your submodules). **Since *version 6*, this step is no longer required and `LocalStorageModule` is *removed*.**
Then, **for *versions 4 & 5 only*, include the `LocalStorageModule`** in your app root module (just once, do NOT re-import it in your submodules). **Since *version 6*, this step must be skipped, as `LocalStorageModule` is *removed*.**

@@ -162,3 +163,3 @@ ```typescript

Note: last draft of JSON Schema is used (draft 7 at this time),
but we don't support all validation features. Just follow the interface or see [#18](https://github.com/cyrilletuzi/angular-async-local-storage/issues/18) for the full list.
but we don't support all validation features. Just follow the `JSONSchema` interface or see [#18](https://github.com/cyrilletuzi/angular-async-local-storage/issues/18) for the full list.

@@ -203,3 +204,3 @@ Note: as the goal is validation, types are enforced: each value MUST have either `type` or `properties` or `items` or `const` or `enum`.

- Errors are unlikely to happen, but in an app, it's better to catch any potential error (there is currently an [issue in Firefox private browsing mode](https://github.com/cyrilletuzi/angular-async-local-storage/issues/26)).
- Errors are unlikely to happen, but in an app, it's better to catch any potential error:

@@ -206,0 +207,0 @@ ```typescript

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc