From c43688474dd6ad46ee22836cdd32b6b8fbebbeb9 Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Sat, 4 Feb 2017 12:53:47 -0500 Subject: [PATCH] Fixing `set()` by passing `batch` on recursive call, removing `onset()` --- README.md | 2 +- lib/haro.es6.js | 8 +++----- lib/haro.js | 8 +++----- lib/haro.min.js | 2 +- lib/haro.min.js.map | 2 +- package.json | 2 +- src/haro.js | 4 +--- 7 files changed, 11 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 5384eda..fe672b0 100644 --- a/README.md +++ b/README.md @@ -269,7 +269,7 @@ Event listener for transforming an API response, receives `body`, `status` & `he **onset** _Function_ -Event listener for when a record is set, receives an `Array`, `Boolean` for batch operation, & `Boolean` for reversion. +Event listener for when a record is set, receives an `Array`. **onsync** _Function_ diff --git a/lib/haro.es6.js b/lib/haro.es6.js index 9bd9d18..80853e4 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -4,7 +4,7 @@ * @author Jason Mulligan * @copyright 2017 * @license BSD-3-Clause - * @version 3.1.12 + * @version 3.1.13 */ "use strict"; @@ -879,12 +879,10 @@ } if (og) { - this.set(key, og, true, true).then(() => { + this.set(key, og, batch, true).then(() => { if (this.logging) { console.log("Reverted", key); } - - this.onset(this.list(key, og), batch, true); }).catch(() => { if (this.logging) { console.log("Failed to revert", key); @@ -1157,7 +1155,7 @@ } factory.transform = cast; - factory.version = "3.1.12"; + factory.version = "3.1.13"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index dc7f58b..0192106 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -4,7 +4,7 @@ * @author Jason Mulligan * @copyright 2017 * @license BSD-3-Clause - * @version 3.1.12 + * @version 3.1.13 */ "use strict"; @@ -1074,12 +1074,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (og) { - _this13.set(key, og, true, true).then(function () { + _this13.set(key, og, batch, true).then(function () { if (_this13.logging) { console.log("Reverted", key); } - - _this13.onset(_this13.list(key, og), batch, true); }).catch(function () { if (_this13.logging) { console.log("Failed to revert", key); @@ -1408,7 +1406,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } factory.transform = cast; - factory.version = "3.1.12"; + factory.version = "3.1.13"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 9f38c9c..ec56aeb 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2017 Jason Mulligan */ -"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b2&&void 0!==arguments[2]&&arguments[2],d=a.length,e=-1;if(c)for(;++e-1?a.split(c).sort(function(a,b){return a.localeCompare(b)}).map(function(a){return b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i.delete(d),0===i.size&&(i=null,g.delete(h)))})}function createIndexes(a,b,d,e,f){var g={};return each(b,function(a){g[a]={}}),each(a,function(a){var h=a[d];void 0!==h&&b.forEach(function(b){var d=keyIndex(b,a,e,f);c(g[b],d)||(g[b][d]=[]),g[b][d].push(h)})}),g}function iterate(a,b){a instanceof Object?each(Object.keys(a),function(c){b.call(a,a[c],c)}):each(a,b)}function g(a,b){return a instanceof Object&&b instanceof Object?each(Object.keys(b),function(c){a[c]instanceof Object&&b[c]instanceof Object?a[c]=g(a[c],b[c]):Array.isArray(a[c])&&Array.isArray(b[c])?a[c]=a[c].concat(b[c]):a[c]=b[c]}):a=Array.isArray(a)&&Array.isArray(b)?a.concat(b):b,a}function joinData(a,b,c,d,e){function f(a,b,c){var f=arguments.length>3&&void 0!==arguments[3]&&arguments[3],g=arguments.length>4&&void 0!==arguments[4]&&arguments[4],k=Object.keys(b[0]),l=g?function(a,b){return a[d]===b[e]}:function(a,b){return a[e]===b[d]};each(a,function(a){var d={},g=b.filter(function(b){return l(b,a)}),m=!0;return g.length>1?(i=!0,j+=a[e],m=!1):1===g.length?each([a,g[0]],function(a,b){return iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),each(k,function(a){d[c[1]+"_"+a]=null})),m&&Object.keys(d).length>0&&h.push(d),m},!0)}var g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"inner",h=[],i=!1,j="More than one record found on ";return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),i?j:h}function h(a){var b=JSON.parse(a.data),c=b.cmd,d=void 0;"index"===c&&(d=createIndexes(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=joinData(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=[];return d&&iterate(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),iterate(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(Math.random()+1)|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){each(f?[f]:a,function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c={};return a.forEach(function(a,d){var e=a;b&&Object.freeze(e),c[clone(d)]=e}),b&&Object.freeze(c),c}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],g=new Haro(b,e,f),i=void 0;if(u){i=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),c.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{g.worker=n?new Function(i.join("\n")):a.URL.createObjectURL(d(i.join("\n")))}catch(a){g.worker=null}}return g}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||require("node-fetch"),q=a.Blob||require("Blob"),r=a.Worker||require("tiny-worker"),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,each(Object.keys(c),function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set",e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],f=b(),g="del"===d?function(a){return c.del(a,!0)}:function(a){return c.set(null,a,!0,!0,e)};return o.all(a.map(g)).then(f.resolve,f.reject),f.promise.then(function(a){return c.onbatch(d,a),c.logging&&console.log("Batch inserted data into",c.id),a},function(a){throw c.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry.length=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.logging&&console.log("Cleared",this.id),this}},{key:"cmd",value:function(a){var c=b();if(this.adapters[a]&&w[a]){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],e=b(),g=this.get(a,!0),h=void 0;return g?(h=this.registry.indexOf(a),0===h?this.registry.shift():h===this.registry.length-1?this.registry.pop():this.registry.splice(h,1),f(this.index,this.indexes,this.delimiter,a,g,this.pattern),this.data.delete(a),--this.total,e.resolve(a)):e.reject(new Error("Record not found")),e.promise.then(function(b){return c.ondelete(b,d),c.versioning&&c.versions.delete(a),c.storage("remove",a).then(function(b){b&&c.logging&&console.log("Deleted",a,"from persistent storage")},function(b){c.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c.uri&&!d&&c.transmit(a,null,g,!1,"delete").catch(function(b){c.logging&&console.error(b.stack||b.message||b),c.set(a,g,!0,!0).then(function(){c.logging&&console.log("Reverted",a)}).catch(function(){c.logging&&console.log("Failed to revert",a)})}),b},function(a){throw c.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"records";return"records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=Object.keys(a).sort().join(this.delimiter),e=keyIndex(d,a,this.delimiter,this.pattern),f=[];return this.indexes.has(d)&&(this.indexes.get(d).get(e)||new Set).forEach(function(a){return f.push(b.get(a,c))}),c?f:this.list.apply(this,f)}},{key:"filter",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=void 0;return e=c?function(b,c){a(b,c)===!0&&d.push(b)}:function(c,e){a(c,e)===!0&&d.push(b.list(e,c))},this.forEach(e),c?d:this.list.apply(this,d)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,c){return a(clone(b),clone(c))},b),this}},{key:"get",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=clone(this.data.get(a)||null);return c&&!b?this.list(a,c):c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.key,d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"inner",e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],f=b(),g=void 0;return a.total>0?(g=e.length>0?this.offload([[this.id,a.id],this.find(e[0],!0),e[1]?a.find(e[1],!0):a.toArray(null,!0),this.key,c,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c,d],"join"),g.then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject)):f.resolve([]),f.promise}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this.registry.slice(a,a+c).map(function(a){return b.get(a,d)});return d?e:this.list.apply(this,_toConsumableArray(e))}},{key:"list",value:function(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0===c,e=d?this.id:c;return d&&this.clear(),this.cmd(b,"get",c).then(function(f){return a.logging&&console.log("Loaded",e,"from",b,"persistent storage"),d?a.batch(f,"set",!0):a.set(c,f,!0,!0,!0)},function(c){throw a.logging&&console.error("Error loading",e,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"map",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=[];return this.forEach(function(b,d){return c.push(a(b,d))}),b?c:this.list.apply(this,c)}},{key:"offload",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"index",d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.index,e=b(),f=void 0,g=void 0;return this.worker?(g=this.useWorker(e),g&&("index"===c&&(f={cmd:c,index:d,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}),"join"===c&&(f={cmd:c,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),g.postMessage(JSON.stringify(f,null,0)))):e.reject(new Error(v)),e.promise}},{key:"onbatch",value:function(){}},{key:"onclear",value:function(){}},{key:"ondelete",value:function(){}},{key:"onerror",value:function(){}},{key:"onrequest",value:function(a){return a}},{key:"onset",value:function(){}},{key:"onsync",value:function(){}},{key:"override",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"records",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,f=b();return"indexes"===d?(this.indexes=this.transform(a,e),f.resolve(!0)):"records"===d?(this.data.clear(),this.indexes.clear(),this.registry.length=0,each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a),c.registry.push(b)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return w[a]=b,this}},{key:"reindex",value:function(a){var b=this;return a?(this.index.indexOf(a)===-1&&this.index.push(a),this.indexes.set(a,new Map),this.forEach(function(c,d){return setIndex(b.index,b.indexes,b.delimiter,d,c,a,b.pattern)})):(this.indexes.clear(),this.index.forEach(function(a){return b.indexes.set(a,new Map)}),this.forEach(function(a,c){return b.index.forEach(function(d){return setIndex(b.index,b.indexes,b.delimiter,c,a,d,b.pattern)})})),this}},{key:"request",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=b(),f=g(clone(this.config),d);return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,p(a,f).then(function(a){var b=a.status,d={};if(a.headers._headers)each(Object.keys(a.headers._headers),function(b){d[b]=a.headers._headers[b].join(", ")});else{var f=!0,g=!1,h=void 0;try{for(var i,j=a.headers.entries()[Symbol.iterator]();!(f=(i=j.next()).done);f=!0){var k=i.value;d[k[0]]=k[1]}}catch(a){g=!0,h=a}finally{try{!f&&j.return&&j.return()}finally{if(g)throw h}}}a[(d["content-type"]||"").indexOf("application/json")>-1?"json":"text"]().then(function(a){e[b<200||b>=400?"reject":"resolve"](c.list(c.onrequest(a,b,d),b,d))},function(a){return e.reject(c.list(a.message,b,d))})},function(a){return e.reject(c.list(a.message,0,{}))}),e.promise}},{key:"save",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo";return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var c=this,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set;return a&&each(b?Array.isArray(b)?b:[b]:this.index,function(b){var i=c.indexes.get(b);i&&i.forEach(function(i,j){switch(!0){case f&&a(j,b):case g&&a.test(Array.isArray(j)?j.join(", "):j):case j===a:i.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a,d)))})}})}),d?e:this.list.apply(this,e)}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this,h=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=b(),k=clone(c),m=void 0,n=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==k[this.key]?k[this.key]:l()),this.data.has(a)?(n=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,n,this.pattern),m="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(n))),h||(k=g(clone(n),k))):(this.registry[this.total]=a,++this.total,m="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,k),setIndex(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),j.resolve(this.get(a)),j.promise.then(function(b){return e.onset(b,d),!d&&e.uri&&e.transmit(a,k,n,h,m).catch(function(b){e.logging&&console.error(b.stack||b.message||b),n?e.set(a,n,!0,!0).then(function(){e.logging&&console.log("Reverted",a),e.onset(e.list(a,n),d,!0)}).catch(function(){e.logging&&console.log("Failed to revert",a)}):e.del(a,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)})}),i||e.storage("set",a,k).then(function(b){b&&e.logging&&console.log("Saved",a,"to persistent storage")},function(b){e.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),b},function(a){throw e.onerror("set",a),a})}},{key:"setUri",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=b();return this.uri=a,this.uri?this.sync(c).then(d.resolve,d.reject):d.resolve([]),d.promise}},{key:"sort",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return b?Object.freeze(this.limit(0,this.total,!0).sort(a).map(function(a){return Object.freeze(a)})):this.limit(0,this.total,!0).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=[],f=void 0;return this.indexes.has(a)||this.reindex(a),f=this.indexes.get(a),f.forEach(function(a,b){return e.push(b)}),each(e.sort(),function(a){return f.get(a).forEach(function(a){return d.push(b.get(a,c))})}),c?d:this.list.apply(this,d)}},{key:"storage",value:function(){for(var a=this,c=arguments.length,d=Array(c),e=0;e0?o.all(g).then(function(){return f.resolve(!0)},f.reject):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,c=arguments.length>0&&void 0!==arguments[0]&&arguments[0],d=b(),e=!0;return this.request(this.uri).then(function(b){var f=void 0;a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1;try{f=a.source?a.crawl(b[0]):b[0]}catch(a){e=!1,d.reject(a)}e&&(c&&a.clear(),a.batch(f,"set").then(d.resolve,d.reject))},function(a){d.reject(a[0]||a)}),d.promise.then(function(b){return a.onsync(b),b},function(b){throw a.onerror("sync",b),b})}},{key:"toArray",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return a?c=a.map(function(a){return b?a[1]:clone(a[1])}):(c=this.limit(0,this.total,!0),b&&each(c,function(a){return Object.freeze(a)})),b?Object.freeze(c):c}},{key:"toObject",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=a?a.reduce(function(a,c){var d=clone(c[1]);return b&&Object.freeze(d),a[c[0]]=d,a},{}):k(this,b);return b?Object.freeze(c):c}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"transmit",value:function(a,c,d){var f=this,g=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"post",j=b(),k=e(this.uri,c?a:null),l=void 0;return this.patch?(l=c?d?g?[{op:"replace",path:"/",value:c}]:i(d,c,this.key):[{op:"add",path:"/",value:c}]:[{op:"remove",path:"/",value:a}],this.request(k,{method:"patch",body:JSON.stringify(l,null,0)}).then(j.resolve,function(b){405===b[1]?(f.patch=!1,f.request(c?k:e(f.uri,a),{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject)):j.reject(b)})):this.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject),j.promise}},{key:"unload",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new r(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="3.1.12","undefined"!=typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):a.haro=m}("undefined"!=typeof window?window:global); +"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b2&&void 0!==arguments[2]&&arguments[2],d=a.length,e=-1;if(c)for(;++e-1?a.split(c).sort(function(a,b){return a.localeCompare(b)}).map(function(a){return b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i.delete(d),0===i.size&&(i=null,g.delete(h)))})}function createIndexes(a,b,d,e,f){var g={};return each(b,function(a){g[a]={}}),each(a,function(a){var h=a[d];void 0!==h&&b.forEach(function(b){var d=keyIndex(b,a,e,f);c(g[b],d)||(g[b][d]=[]),g[b][d].push(h)})}),g}function iterate(a,b){a instanceof Object?each(Object.keys(a),function(c){b.call(a,a[c],c)}):each(a,b)}function g(a,b){return a instanceof Object&&b instanceof Object?each(Object.keys(b),function(c){a[c]instanceof Object&&b[c]instanceof Object?a[c]=g(a[c],b[c]):Array.isArray(a[c])&&Array.isArray(b[c])?a[c]=a[c].concat(b[c]):a[c]=b[c]}):a=Array.isArray(a)&&Array.isArray(b)?a.concat(b):b,a}function joinData(a,b,c,d,e){function f(a,b,c){var f=arguments.length>3&&void 0!==arguments[3]&&arguments[3],g=arguments.length>4&&void 0!==arguments[4]&&arguments[4],k=Object.keys(b[0]),l=g?function(a,b){return a[d]===b[e]}:function(a,b){return a[e]===b[d]};each(a,function(a){var d={},g=b.filter(function(b){return l(b,a)}),m=!0;return g.length>1?(i=!0,j+=a[e],m=!1):1===g.length?each([a,g[0]],function(a,b){return iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),each(k,function(a){d[c[1]+"_"+a]=null})),m&&Object.keys(d).length>0&&h.push(d),m},!0)}var g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"inner",h=[],i=!1,j="More than one record found on ";return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),i?j:h}function h(a){var b=JSON.parse(a.data),c=b.cmd,d=void 0;"index"===c&&(d=createIndexes(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=joinData(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=[];return d&&iterate(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),iterate(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(Math.random()+1)|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){each(f?[f]:a,function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c={};return a.forEach(function(a,d){var e=a;b&&Object.freeze(e),c[clone(d)]=e}),b&&Object.freeze(c),c}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],g=new Haro(b,e,f),i=void 0;if(u){i=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),c.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{g.worker=n?new Function(i.join("\n")):a.URL.createObjectURL(d(i.join("\n")))}catch(a){g.worker=null}}return g}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||require("node-fetch"),q=a.Blob||require("Blob"),r=a.Worker||require("tiny-worker"),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,each(Object.keys(c),function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set",e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],f=b(),g="del"===d?function(a){return c.del(a,!0)}:function(a){return c.set(null,a,!0,!0,e)};return o.all(a.map(g)).then(f.resolve,f.reject),f.promise.then(function(a){return c.onbatch(d,a),c.logging&&console.log("Batch inserted data into",c.id),a},function(a){throw c.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry.length=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.logging&&console.log("Cleared",this.id),this}},{key:"cmd",value:function(a){var c=b();if(this.adapters[a]&&w[a]){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],e=b(),g=this.get(a,!0),h=void 0;return g?(h=this.registry.indexOf(a),0===h?this.registry.shift():h===this.registry.length-1?this.registry.pop():this.registry.splice(h,1),f(this.index,this.indexes,this.delimiter,a,g,this.pattern),this.data.delete(a),--this.total,e.resolve(a)):e.reject(new Error("Record not found")),e.promise.then(function(b){return c.ondelete(b,d),c.versioning&&c.versions.delete(a),c.storage("remove",a).then(function(b){b&&c.logging&&console.log("Deleted",a,"from persistent storage")},function(b){c.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c.uri&&!d&&c.transmit(a,null,g,!1,"delete").catch(function(b){c.logging&&console.error(b.stack||b.message||b),c.set(a,g,!0,!0).then(function(){c.logging&&console.log("Reverted",a)}).catch(function(){c.logging&&console.log("Failed to revert",a)})}),b},function(a){throw c.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"records";return"records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=Object.keys(a).sort().join(this.delimiter),e=keyIndex(d,a,this.delimiter,this.pattern),f=[];return this.indexes.has(d)&&(this.indexes.get(d).get(e)||new Set).forEach(function(a){return f.push(b.get(a,c))}),c?f:this.list.apply(this,f)}},{key:"filter",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=void 0;return e=c?function(b,c){a(b,c)===!0&&d.push(b)}:function(c,e){a(c,e)===!0&&d.push(b.list(e,c))},this.forEach(e),c?d:this.list.apply(this,d)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,c){return a(clone(b),clone(c))},b),this}},{key:"get",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=clone(this.data.get(a)||null);return c&&!b?this.list(a,c):c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.key,d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"inner",e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],f=b(),g=void 0;return a.total>0?(g=e.length>0?this.offload([[this.id,a.id],this.find(e[0],!0),e[1]?a.find(e[1],!0):a.toArray(null,!0),this.key,c,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c,d],"join"),g.then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject)):f.resolve([]),f.promise}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this.registry.slice(a,a+c).map(function(a){return b.get(a,d)});return d?e:this.list.apply(this,_toConsumableArray(e))}},{key:"list",value:function(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0===c,e=d?this.id:c;return d&&this.clear(),this.cmd(b,"get",c).then(function(f){return a.logging&&console.log("Loaded",e,"from",b,"persistent storage"),d?a.batch(f,"set",!0):a.set(c,f,!0,!0,!0)},function(c){throw a.logging&&console.error("Error loading",e,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"map",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=[];return this.forEach(function(b,d){return c.push(a(b,d))}),b?c:this.list.apply(this,c)}},{key:"offload",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"index",d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.index,e=b(),f=void 0,g=void 0;return this.worker?(g=this.useWorker(e),g&&("index"===c&&(f={cmd:c,index:d,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}),"join"===c&&(f={cmd:c,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),g.postMessage(JSON.stringify(f,null,0)))):e.reject(new Error(v)),e.promise}},{key:"onbatch",value:function(){}},{key:"onclear",value:function(){}},{key:"ondelete",value:function(){}},{key:"onerror",value:function(){}},{key:"onrequest",value:function(a){return a}},{key:"onset",value:function(){}},{key:"onsync",value:function(){}},{key:"override",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"records",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,f=b();return"indexes"===d?(this.indexes=this.transform(a,e),f.resolve(!0)):"records"===d?(this.data.clear(),this.indexes.clear(),this.registry.length=0,each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a),c.registry.push(b)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return w[a]=b,this}},{key:"reindex",value:function(a){var b=this;return a?(this.index.indexOf(a)===-1&&this.index.push(a),this.indexes.set(a,new Map),this.forEach(function(c,d){return setIndex(b.index,b.indexes,b.delimiter,d,c,a,b.pattern)})):(this.indexes.clear(),this.index.forEach(function(a){return b.indexes.set(a,new Map)}),this.forEach(function(a,c){return b.index.forEach(function(d){return setIndex(b.index,b.indexes,b.delimiter,c,a,d,b.pattern)})})),this}},{key:"request",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=b(),f=g(clone(this.config),d);return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,p(a,f).then(function(a){var b=a.status,d={};if(a.headers._headers)each(Object.keys(a.headers._headers),function(b){d[b]=a.headers._headers[b].join(", ")});else{var f=!0,g=!1,h=void 0;try{for(var i,j=a.headers.entries()[Symbol.iterator]();!(f=(i=j.next()).done);f=!0){var k=i.value;d[k[0]]=k[1]}}catch(a){g=!0,h=a}finally{try{!f&&j.return&&j.return()}finally{if(g)throw h}}}a[(d["content-type"]||"").indexOf("application/json")>-1?"json":"text"]().then(function(a){e[b<200||b>=400?"reject":"resolve"](c.list(c.onrequest(a,b,d),b,d))},function(a){return e.reject(c.list(a.message,b,d))})},function(a){return e.reject(c.list(a.message,0,{}))}),e.promise}},{key:"save",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo";return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var c=this,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set;return a&&each(b?Array.isArray(b)?b:[b]:this.index,function(b){var i=c.indexes.get(b);i&&i.forEach(function(i,j){switch(!0){case f&&a(j,b):case g&&a.test(Array.isArray(j)?j.join(", "):j):case j===a:i.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a,d)))})}})}),d?e:this.list.apply(this,e)}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this,h=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=b(),k=clone(c),m=void 0,n=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==k[this.key]?k[this.key]:l()),this.data.has(a)?(n=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,n,this.pattern),m="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(n))),h||(k=g(clone(n),k))):(this.registry[this.total]=a,++this.total,m="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,k),setIndex(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),j.resolve(this.get(a)),j.promise.then(function(b){return e.onset(b,d),!d&&e.uri&&e.transmit(a,k,n,h,m).catch(function(b){e.logging&&console.error(b.stack||b.message||b),n?e.set(a,n,d,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)}):e.del(a,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)})}),i||e.storage("set",a,k).then(function(b){b&&e.logging&&console.log("Saved",a,"to persistent storage")},function(b){e.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),b},function(a){throw e.onerror("set",a),a})}},{key:"setUri",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=b();return this.uri=a,this.uri?this.sync(c).then(d.resolve,d.reject):d.resolve([]),d.promise}},{key:"sort",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return b?Object.freeze(this.limit(0,this.total,!0).sort(a).map(function(a){return Object.freeze(a)})):this.limit(0,this.total,!0).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=[],f=void 0;return this.indexes.has(a)||this.reindex(a),f=this.indexes.get(a),f.forEach(function(a,b){return e.push(b)}),each(e.sort(),function(a){return f.get(a).forEach(function(a){return d.push(b.get(a,c))})}),c?d:this.list.apply(this,d)}},{key:"storage",value:function(){for(var a=this,c=arguments.length,d=Array(c),e=0;e0?o.all(g).then(function(){return f.resolve(!0)},f.reject):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,c=arguments.length>0&&void 0!==arguments[0]&&arguments[0],d=b(),e=!0;return this.request(this.uri).then(function(b){var f=void 0;a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1;try{f=a.source?a.crawl(b[0]):b[0]}catch(a){e=!1,d.reject(a)}e&&(c&&a.clear(),a.batch(f,"set").then(d.resolve,d.reject))},function(a){d.reject(a[0]||a)}),d.promise.then(function(b){return a.onsync(b),b},function(b){throw a.onerror("sync",b),b})}},{key:"toArray",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return a?c=a.map(function(a){return b?a[1]:clone(a[1])}):(c=this.limit(0,this.total,!0),b&&each(c,function(a){return Object.freeze(a)})),b?Object.freeze(c):c}},{key:"toObject",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=a?a.reduce(function(a,c){var d=clone(c[1]);return b&&Object.freeze(d),a[c[0]]=d,a},{}):k(this,b);return b?Object.freeze(c):c}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"transmit",value:function(a,c,d){var f=this,g=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"post",j=b(),k=e(this.uri,c?a:null),l=void 0;return this.patch?(l=c?d?g?[{op:"replace",path:"/",value:c}]:i(d,c,this.key):[{op:"add",path:"/",value:c}]:[{op:"remove",path:"/",value:a}],this.request(k,{method:"patch",body:JSON.stringify(l,null,0)}).then(j.resolve,function(b){405===b[1]?(f.patch=!1,f.request(c?k:e(f.uri,a),{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject)):j.reject(b)})):this.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject),j.promise}},{key:"unload",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new r(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="3.1.13","undefined"!=typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):a.haro=m}("undefined"!=typeof window?window:global); //# sourceMappingURL=haro.min.js.map \ No newline at end of file diff --git a/lib/haro.min.js.map b/lib/haro.min.js.map index 437e2f1..76b69ef 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["haro.js"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","from","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","deferred","promise","resolver","rejecter","Promise","resolve","reject","has","a","b","each","arg","fn","exit","arguments","undefined","nth","cast","input","result","Map","forEach","value","Set","push","add","keys","set","blob","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","map","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","iterate","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","patch","ogdata","overwrite","op","path","s","Math","random","substring","setIndexValue","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","fetch","require","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","_this2","lload","defer","del","all","then","onbatch","console","log","onerror","clear","onclear","_len","_key","apply","Error","_this3","og","shift","pop","splice","ondelete","storage","success","message","stack","transmit","catch","err","toArray","transform","entries","where","_this4","raw","list","_this5","lfn","ctx","other","offload","find","offset","_this6","max","slice","_len2","_key2","_this7","payload","useWorker","_this8","datum","_this9","_this10","cfg","toUpperCase","body","res","status","_headers","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","pair","return","onrequest","_this11","_this12","rgex","test","seen","lset","_this13","override","onset","sync","limit","_this14","_this15","_len3","_key3","deferreds","_this16","request","Allow","allow","crawl","onsync","reduce","_this17","_this18","values","terminate","version","exports","module","define","amd","haro","window"],"mappings":";;AAQA,YAIA,SAASA,oBAAmBC,GAAO,GAAIC,MAAMC,QAAQF,GAAM,CAAE,IAAK,GAAIG,GAAI,EAAGC,EAAOH,MAAMD,EAAIK,QAASF,EAAIH,EAAIK,OAAQF,IAAOC,EAAKD,GAAKH,EAAIG,EAAM,OAAOC,GAAe,MAAOH,OAAMK,KAAKN,GAE1L,QAASO,iBAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAJhH,GAAIC,cAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIX,GAAI,EAAGA,EAAIW,EAAMT,OAAQF,IAAK,CAAE,GAAIY,GAAaD,EAAMX,EAAIY,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeP,EAAQE,EAAWM,IAAKN,IAAiB,MAAO,UAAUN,EAAaa,EAAYC,GAAiJ,MAA9HD,IAAYV,EAAiBH,EAAYe,UAAWF,GAAiBC,GAAaX,EAAiBH,EAAac,GAAqBd,OAMhiB,SAAWgB,GAiBV,QAASC,KACR,GAAIC,GAAU,OACVC,EAAW,OACXC,EAAW,MAOf,OALAF,GAAU,GAAIG,GAAQ,SAAUC,EAASC,GACxCJ,EAAWG,EACXF,EAAWG,KAGHD,QAASH,EAAUI,OAAQH,EAAUF,QAASA,GAGxD,QAASM,GAAIC,EAAGC,GACf,MAAOA,KAAKD,GAGb,QAASE,MAAKC,EAAKC,GAClB,GAAIC,GAAOC,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEtEE,EAAML,EAAIhC,OAEVF,GAAI,CAER,IAAIoC,EACH,OAASpC,EAAIuC,GACRJ,EAAGD,EAAIlC,GAAIA,MAAO,QAKvB,QAASA,EAAIuC,GACZJ,EAAGD,EAAIlC,GAAIA,GAKd,QAASwC,MAAKC,GACb,GAAIC,GAAS,MAEb,SAAQ,GACP,IAAKD,aAAiBE,KACrBD,KACAD,EAAMG,QAAQ,SAAUC,EAAO3B,GAC9BwB,EAAOxB,GAAOsB,KAAKK,IAEpB,MACD,KAAKJ,aAAiBK,KACrBJ,KACAD,EAAMG,QAAQ,SAAU5C,GACvB0C,EAAOK,KAAKP,KAAKxC,KAElB,MACD,KAAKF,OAAMC,QAAQ0C,GAClBC,EAAS,GAAII,KACbb,KAAKQ,EAAO,SAAUzC,GACrB0C,EAAOM,IAAIR,KAAKxC,KAEjB,MACD,KAAKyC,aAAiBzB,QACrB0B,EAAS,GAAIC,KACbV,KAAKjB,OAAOiC,KAAKR,GAAQ,SAAUzC,GAClC0C,EAAOQ,IAAIlD,EAAGwC,KAAKC,EAAMzC,MAE1B,MACD,SACC0C,EAASD,EAGX,MAAOC,GAGR,QAASS,GAAKjB,GACb,GAAIkB,GAAM,MAEV,KACCA,EAAM,GAAIC,IAAMnB,IAAQoB,KAAM,2BAC7B,MAAOC,GACHjC,EAAOkC,cACXlC,EAAOkC,YAAclC,EAAOmC,eAAiBnC,EAAOoC,mBAAqBpC,EAAOqC,gBAGjFP,GAAM,GAAI9B,GAAOkC,aAAcI,OAAO1B,GAAK2B,UAG5C,MAAOT,GAGR,QAASU,OAAM5B,GACd,MAAO6B,MAAKC,MAAMD,KAAKE,UAAU/B,EAAK,KAAM,IAG7C,QAASgC,GAAUC,EAAMC,GACxB,MAAOD,GAAKE,QAAQC,EAAMC,YAAa,IAAIF,QAAQC,EAAME,SAAU,KAAOJ,EAAQ,IAAMA,EAAQ,IAGjG,QAASK,UAASvD,EAAKwD,EAAMC,EAAWC,GACvC,GAAIlC,GAAS,MAYb,OATCA,GADGxB,EAAI2D,QAAQF,IAAa,EACnBzD,EAAI4D,MAAMH,GAAWI,KAAK,SAAUhD,EAAGC,GAC/C,MAAOD,GAAEiD,cAAchD,KACrBiD,IAAI,SAAUjF,GAChB,MAAO0E,GAAK1E,GAAGkF,WAAWb,QAAQ,GAAIc,QAAOP,EAAS,KAAM,IAAIQ,gBAC9DC,KAAKV,GAECD,EAAKxD,GAMhB,QAASoE,GAASC,EAAOC,EAASb,EAAWzD,EAAKwD,EAAME,GACvDW,EAAM3C,QAAQ,SAAU5C,GACvB,GAAIyF,GAAMD,EAAQE,IAAI1F,GAClB6C,EAAQ4B,SAASzE,EAAG0E,EAAMC,EAAWC,GAErCe,EAAI,MAEJF,GAAI3D,IAAIe,KACX8C,EAAIF,EAAIC,IAAI7C,GACZ8C,EAAEC,OAAO1E,GAEM,IAAXyE,EAAEE,OACLF,EAAI,KACJF,EAAIG,OAAO/C,OAMf,QAASiD,eAAcC,EAASP,EAAStE,EAAKyD,EAAWC,GACxD,GAAIlC,KAsBJ,OApBAT,MAAKuD,EAAS,SAAUxF,GACvB0C,EAAO1C,QAGRiC,KAAK8D,EAAS,SAAU/F,GACvB,GAAIgG,GAAOhG,EAAEkB,EAEAoB,UAAT0D,GACHR,EAAQ5C,QAAQ,SAAU2C,GACzB,GAAIU,GAASxB,SAASc,EAAOvF,EAAG2E,EAAWC,EAEtC9C,GAAIY,EAAO6C,GAAQU,KACvBvD,EAAO6C,GAAOU,OAGfvD,EAAO6C,GAAOU,GAAQlD,KAAKiD,OAKvBtD,EAGR,QAASwD,SAAQ9C,EAAKjB,GACjBiB,YAAepC,QAClBiB,KAAKjB,OAAOiC,KAAKG,GAAM,SAAUpD,GAChCmC,EAAGgE,KAAK/C,EAAKA,EAAIpD,GAAIA,KAGtBiC,KAAKmB,EAAKjB,GAIZ,QAASiE,GAAMrE,EAAGC,GAiBjB,MAhBID,aAAaf,SAAUgB,YAAahB,QACvCiB,KAAKjB,OAAOiC,KAAKjB,GAAI,SAAUhC,GAC1B+B,EAAE/B,YAAcgB,SAAUgB,EAAEhC,YAAcgB,QAC7Ce,EAAE/B,GAAKoG,EAAMrE,EAAE/B,GAAIgC,EAAEhC,IACXF,MAAMC,QAAQgC,EAAE/B,KAAOF,MAAMC,QAAQiC,EAAEhC,IACjD+B,EAAE/B,GAAK+B,EAAE/B,GAAGqG,OAAOrE,EAAEhC,IAErB+B,EAAE/B,GAAKgC,EAAEhC,KAIX+B,EADUjC,MAAMC,QAAQgC,IAAMjC,MAAMC,QAAQiC,GACxCD,EAAEsE,OAAOrE,GAETA,EAGED,EAGR,QAASuE,UAASC,EAAIxE,EAAGC,EAAGd,EAAKsF,GAQhC,QAASnB,GAAKlB,EAAMC,EAAOqC,GAC1B,GAAIC,GAAUrE,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GACzEsE,EAAUtE,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEzEY,EAAOjC,OAAOiC,KAAKmB,EAAM,IACzBjC,EAAMwE,EAEN,SAAUC,EAAG5G,GAChB,MAAO4G,GAAE1F,KAASlB,EAAEwG,IAHD,SAAUI,EAAG5G,GAChC,MAAO4G,GAAEJ,KAAQxG,EAAEkB,GAKpBe,MAAKkC,EAAM,SAAUnE,GACpB,GAAI6G,MACAC,EAAI1C,EAAM2C,OAAO,SAAUH,GAC9B,MAAOzE,GAAGyE,EAAG5G,KAGVgH,GAAQ,CA0BZ,OAxBIF,GAAE5G,OAAS,GACd+G,GAAQ,EACRC,GAAYlH,EAAEwG,GACdQ,GAAQ,GACe,IAAbF,EAAE5G,OACZ+B,MAAMjC,EAAG8G,EAAE,IAAK,SAAUF,EAAGnB,GAC5B,MAAOS,SAAQU,EAAG,SAAUO,EAAGC,GAC9BP,EAAKJ,EAAIhB,GAAO,IAAM2B,GAAKD,MAGnBT,IACVR,QAAQlG,EAAG,SAAUmH,EAAGC,GACvBP,EAAKJ,EAAI,GAAK,IAAMW,GAAKD,IAG1BlF,KAAKgB,EAAM,SAAUmE,GACpBP,EAAKJ,EAAI,GAAK,IAAMW,GAAK,QAIvBJ,GAAShG,OAAOiC,KAAK4D,GAAM3G,OAAS,GACvCwC,EAAOK,KAAK8D,GAGNG,IACL,GAnDJ,GAAI1D,GAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,QAE3EK,KAEAuE,GAAQ,EACRC,EAAW,gCA6Df,OAZa,UAAT5D,GACH+B,EAAKtD,EAAGC,EAAGuE,GAGC,SAATjD,GACH+B,EAAKtD,EAAGC,EAAGuE,GAAI,GAGH,UAATjD,GACH+B,EAAKrD,EAAGD,EAAG+B,MAAMyC,GAAII,WAAW,GAAM,GAG/BM,EAAiBC,EAATxE,EAGjB,QAAS2E,GAAUC,GAClB,GAAI5C,GAAOX,KAAKC,MAAMsD,EAAG5C,MACrB6C,EAAM7C,EAAK6C,IAEX7E,EAAS,MAED,WAAR6E,IACH7E,EAASoD,cAAcpB,EAAKqB,QAASrB,EAAKa,MAAOb,EAAKxD,IAAKwD,EAAKC,UAAWD,EAAKE,UAGrE,SAAR2C,IACH7E,EAAS4D,SAAS5B,EAAK+B,IAAK/B,EAAKqB,QAAQ,GAAIrB,EAAKqB,QAAQ,GAAIrB,EAAKxD,IAAKwD,EAAK8B,GAAI9B,EAAKpB,OAGvFkE,YAAYzD,KAAKE,UAAUvB,IAG5B,QAAS+E,KACR,GAAIC,GAASrF,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MACxEqC,EAAOrC,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MACtEnB,EAAMmB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC1EsF,EAAYtF,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAE3EK,IAkBJ,OAhBIiF,IACHzB,QAAQwB,EAAQ,SAAUP,EAAGC,GACxBA,IAAMlG,GAAmBoB,SAAZoC,EAAK0C,IACrB1E,EAAOK,MAAO6E,GAAI,SAAUC,KAAM,IAAMT,MAK3ClB,QAAQxB,EAAM,SAAUyC,EAAGC,GACtBA,IAAMlG,GAAqBoB,SAAdoF,EAAON,GACvB1E,EAAOK,MAAO6E,GAAI,MAAOC,KAAM,IAAMT,EAAGvE,MAAOsE,IACrCpD,KAAKE,UAAUyD,EAAON,MAAQrD,KAAKE,UAAUkD,IACvDzE,EAAOK,MAAO6E,GAAI,UAAWC,KAAM,IAAMT,EAAGvE,MAAOsE,MAI9CzE,EAGR,QAASoF,KACR,OAA8B,OAArBC,KAAKC,SAAW,GAAe,GAAG9C,SAAS,IAAI+C,UAAU,GAGnE,QAASC,eAAc3C,EAAOrE,EAAK2B,GAC7B0C,EAAMzD,IAAIZ,IACdqE,EAAMrC,IAAIhC,EAAK,GAAI4B,MAGpByC,EAAMG,IAAIxE,GAAK8B,IAAIH,GAGpB,QAASsF,UAAS5C,EAAOC,EAASb,EAAWzD,EAAKwD,EAAM0D,EAAQxD,GAC/D3C,KAAMmG,GAAkBA,GAAT7C,EAAkB,SAAUvF,GAC1C,GAAIqI,GAAO5D,SAASzE,EAAG0E,EAAMC,EAAWC,EAE3BtC,UAAT+F,GAA+B,OAATA,GACzBH,cAAc1C,EAAQE,IAAI1F,GAAIqI,EAAMnH,KAKvC,QAASoH,GAASpG,GACjB,GAAIqG,KAASlG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,KAAmBA,UAAU,GAExEK,IAgBJ,OAdAR,GAAIU,QAAQ,SAAUC,EAAO3B,GAC5B,GAAIkC,GAAMP,CAEN0F,IACHvH,OAAOwH,OAAOpF,GAGfV,EAAOoB,MAAM5C,IAAQkC,IAGlBmF,GACHvH,OAAOwH,OAAO9F,GAGRA,EAGR,QAAS+F,KACR,MAAOX,KAAMA,IAAM,IAAMA,IAAM,KAAOA,IAAIY,OAAO,EAAG,GAAK,IAAMC,EAAEZ,KAAKa,MAAsB,EAAhBb,KAAKC,WAAiBF,IAAIY,OAAO,EAAG,GAAK,IAAMZ,IAAMA,IAAMA,IAi/BxI,QAASe,KACR,GAAInE,GAAOrC,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,KAC3EyG,EAASzG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MACxEmD,EAAUnD,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MAEzEe,EAAM,GAAI2F,MAAKrE,EAAMoE,EAAQtD,GAC7BwD,EAAY,MAEhB,IAAIC,EAAW,CACdD,GAAaxG,KAAK0C,WAAYpB,MAAMoB,WAAYY,cAAcZ,WAAYjD,KAAKiD,WAAYpD,EAAIoD,WAAYgB,QAAQhB,WAAYoB,SAASpB,WAAYT,SAASS,WAAYgD,cAAchD,WAAYiD,SAASjD,YAAcgE,EAAc,QAAL,IAAgB,eAAiB7B,EAAUnC,WAAa,IAE3R,KACC9B,EAAI+F,OAAUD,EAAkE,GAAIE,UAASJ,EAAU3D,KAAK,OAArF/D,EAAO+H,IAAIC,gBAAgBnG,EAAK6F,EAAU3D,KAAK,QACrE,MAAO9B,GACRH,EAAI+F,OAAS,MAIf,MAAO/F,GA72CR,GAAI8F,GAA4B,mBAAZK,UAAuD,kBAArBA,SAAQC,SAC1D7H,EAAUL,EAAOK,QACjBgB,IAAMrB,EAAOqB,IACbG,IAAMxB,EAAOwB,IACb2G,EAAQnI,EAAOmI,OAASC,QAAQ,cAChCrG,EAAO/B,EAAO+B,MAAQqG,QAAQ,QAC9BC,EAASrI,EAAOqI,QAAUD,QAAQ,eAClCf,GAAK,EAAG,EAAG,IAAK,KAChBrE,GACHC,YAAa,OACbC,SAAU,OAEPyE,EAA4B,mBAAT5F,IAA0C,mBAAXsG,GAClDC,EAAiB,2BACjBC,KA+VAd,KAAO,WACV,QAASA,MAAKrE,GACb,GAAIoF,GAAQC,KAERjB,EAASzG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,KAE5EjC,iBAAgB2J,KAAMhB,MAEtBgB,KAAKC,YACLD,KAAKrF,KAAO,GAAI/B,KAChBoH,KAAKpF,UAAY,IACjBoF,KAAKjB,QACJmB,OAAQ,MACRC,aAAa,EACbC,SACCC,OAAQ,mBACRC,eAAgB,qBAGlBN,KAAKxD,GAAKkC,IACVsB,KAAKxE,SACLwE,KAAKvE,QAAU,GAAI7C,KACnBoH,KAAK7I,IAAM,GACX6I,KAAKO,SAAU,EACfP,KAAKtC,OAAQ,EACbsC,KAAKnF,QAAU,YACfmF,KAAKQ,YACLR,KAAKS,OAAS,GACdT,KAAKU,MAAQ,EACbV,KAAKW,IAAM,GACXX,KAAKZ,OAAS,KACdY,KAAKY,SAAW,GAAIhI,KACpBoH,KAAKa,YAAa,EAElB3I,KAAKjB,OAAOiC,KAAK6F,GAAS,SAAU9I,GACnC8J,EAAM9J,GAAKoG,EAAM0D,EAAM9J,GAAI8I,EAAO9I,MAGnC+J,KAAKc,UAEDnG,GACHqF,KAAKe,MAAMpG,EAAM,OAk8BnB,MA97BAlE,cAAauI,OACZ7H,IAAK,QACL2B,MAAO,SAAekI,GACrB,GAAIC,GAASjB,KAETzG,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,MAC3E4I,EAAQ5I,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE6I,EAAQ3J,IACRY,EAAc,QAATmB,EAAiB,SAAUtD,GACnC,MAAOgL,GAAOG,IAAInL,GAAG,IAClB,SAAUA,GACb,MAAOgL,GAAO9H,IAAI,KAAMlD,GAAG,GAAM,EAAMiL,GAKxC,OAFAtJ,GAAQyJ,IAAIL,EAAK9F,IAAI9C,IAAKkJ,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,QAE7CqJ,EAAM1J,QAAQ6J,KAAK,SAAUnJ,GAOnC,MANA8I,GAAOM,QAAQhI,EAAMpB,GAEjB8I,EAAOV,SACViB,QAAQC,IAAI,2BAA4BR,EAAOzE,IAGzCrE,GACL,SAAUqB,GAEZ,KADAyH,GAAOS,QAAQ,QAASlI,GAClBA,OAIRrC,IAAK,QACL2B,MAAO,WAYN,MAXAkH,MAAKU,MAAQ,EACbV,KAAKQ,SAASrK,OAAS,EACvB6J,KAAKrF,KAAKgH,QACV3B,KAAKvE,QAAQkG,QACb3B,KAAKY,SAASe,QACd3B,KAAKc,UAAUc,UAEX5B,KAAKO,SACRiB,QAAQC,IAAI,UAAWzB,KAAKxD,IAGtBwD,QAGR7I,IAAK,MACL2B,MAAO,SAAaS,GACnB,GAAI4H,GAAQ3J,GAEZ,IAAKwI,KAAKC,SAAS1G,IAAUuG,EAAQvG,GAE9B,CACN,IAAK,GAAIsI,GAAOvJ,UAAUnC,OAAQ6K,EAAOjL,MAAM8L,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAC/Fd,EAAKc,EAAO,GAAKxJ,UAAUwJ,EAG5BhC,GAAQvG,GAAMwI,MAAM/B,MAAOA,MAAM1D,OAAO0E,IAAOM,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,YANzEqJ,GAAMrJ,OAAO,GAAIkK,OAAMzI,EAAO,0CAS/B,OAAO4H,GAAM1J,WAGdN,IAAK,QACL2B,MAAO,SAAeX,GACrB,GAAIQ,GAASoB,MAAM5B,EAMnB,OAJAD,OAAM8H,KAAKS,QAAU,IAAI1F,MAAM,KAAM,SAAU9E,GAC9C0C,EAASA,EAAO1C,KAGV0C,GAAUR,KAGlBhB,IAAK,MACL2B,MAAO,SAAa3B,GACnB,GAAI8K,GAASjC,KAETe,EAAQzI,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE6I,EAAQ3J,IACR0K,EAAKlC,KAAKrE,IAAIxE,GAAK,GAEnBqE,EAAQ,MAsBZ,OApBI0G,IACH1G,EAAQwE,KAAKQ,SAAS1F,QAAQ3D,GAEhB,IAAVqE,EACHwE,KAAKQ,SAAS2B,QACJ3G,IAAUwE,KAAKQ,SAASrK,OAAS,EAC3C6J,KAAKQ,SAAS4B,MAEdpC,KAAKQ,SAAS6B,OAAO7G,EAAO,GAG7BD,EAASyE,KAAKxE,MAAOwE,KAAKvE,QAASuE,KAAKpF,UAAWzD,EAAK+K,EAAIlC,KAAKnF,SACjEmF,KAAKrF,KAAKkB,OAAO1E,KACf6I,KAAKU,MAEPS,EAAMtJ,QAAQV,IAEdgK,EAAMrJ,OAAO,GAAIkK,OAAM,qBAGjBb,EAAM1J,QAAQ6J,KAAK,SAAUnJ,GAmCnC,MAlCA8J,GAAOK,SAASnK,EAAK4I,GAEjBkB,EAAOpB,YACVoB,EAAOrB,SAAS/E,OAAO1E,GAGxB8K,EAAOM,QAAQ,SAAUpL,GAAKmK,KAAK,SAAUkB,GACxCA,GAAWP,EAAO1B,SACrBiB,QAAQC,IAAI,UAAWtK,EAAK,4BAE3B,SAAUqC,GACRyI,EAAO1B,SACViB,QAAQtE,MAAM,iBAAkB/F,EAAK,2BAA4BqC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,KAIvFyI,EAAOtB,MAAQI,GAClBkB,EAAOU,SAASxL,EAAK,KAAM+K,GAAI,EAAO,UAAUU,MAAM,SAAUC,GAC3DZ,EAAO1B,SACViB,QAAQtE,MAAM2F,EAAIH,OAASG,EAAIJ,SAAWI,GAG3CZ,EAAO9I,IAAIhC,EAAK+K,GAAI,GAAM,GAAMZ,KAAK,WAChCW,EAAO1B,SACViB,QAAQC,IAAI,WAAYtK,KAEvByL,MAAM,WACJX,EAAO1B,SACViB,QAAQC,IAAI,mBAAoBtK,OAM7BgB,GACL,SAAUqB,GAEZ,KADAyI,GAAOP,QAAQ,SAAUlI,GACnBA,OAIRrC,IAAK,OACL2B,MAAO,WACN,GAAIS,GAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,SAE/E,OAAgB,YAATiB,EAAqByG,KAAK8C,QAAQ,MAAM,GAAS9C,KAAK+C,UAAU/C,KAAKvE,YAG7EtE,IAAK,UACL2B,MAAO,WACN,MAAOkH,MAAKrF,KAAKqI,aAGlB7L,IAAK,OACL2B,MAAO,SAAcmK,GACpB,GAAIC,GAASlD,KAETmD,EAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEnB,EAAMF,OAAOiC,KAAK+J,GAAOjI,OAAOM,KAAK0E,KAAKpF,WAC1C9B,EAAQ4B,SAASvD,EAAK8L,EAAOjD,KAAKpF,UAAWoF,KAAKnF,SAClDlC,IAQJ,OANIqH,MAAKvE,QAAQ1D,IAAIZ,KACnB6I,KAAKvE,QAAQE,IAAIxE,GAAKwE,IAAI7C,IAAU,GAAIC,MAAOF,QAAQ,SAAU5C,GACjE,MAAO0C,GAAOK,KAAKkK,EAAOvH,IAAI1F,EAAGkN,MAI5BA,EAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMrH,MAG7CxB,IAAK,SACL2B,MAAO,SAAgBV,GACtB,GAAIiL,GAASrD,KAETmD,EAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,KAEA2K,EAAM,MAkBV,OATCA,GAPIH,EAOE,SAAarK,EAAO3B,GACrBiB,EAAGU,EAAO3B,MAAS,GACtBwB,EAAOK,KAAKF,IARR,SAAaA,EAAO3B,GACrBiB,EAAGU,EAAO3B,MAAS,GACtBwB,EAAOK,KAAKqK,EAAOD,KAAKjM,EAAK2B,KAWhCkH,KAAKnH,QAAQyK,GAENH,EAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMrH,MAG7CxB,IAAK,UACL2B,MAAO,SAAiBV,EAAImL,GAK3B,MAJAvD,MAAKrF,KAAK9B,QAAQ,SAAUC,EAAO3B,GAClC,MAAOiB,GAAG2B,MAAMjB,GAAQiB,MAAM5C,KAC5BoM,GAEIvD,QAGR7I,IAAK,MACL2B,MAAO,SAAa3B,GACnB,GAAIgM,GAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,EAASoB,MAAMiG,KAAKrF,KAAKgB,IAAIxE,IAAQ,KAEzC,OAAOwB,KAAWwK,EAAMnD,KAAKoD,KAAKjM,EAAKwB,GAAUA,KAGlDxB,IAAK,MACL2B,MAAO,SAAa3B,GACnB,MAAO6I,MAAKrF,KAAK5C,IAAIZ,MAGtBA,IAAK,OACL2B,MAAO,SAAc0K,GACpB,GAAI/G,GAAKnE,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK0H,KAAK7I,IAC9EoC,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,QAC3E2K,EAAQ3K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MAEvE6I,EAAQ3J,IAERC,EAAU,MAoBd,OAlBI+L,GAAM9C,MAAQ,GAEhBjJ,EADGwL,EAAM9M,OAAS,EACR6J,KAAKyD,UAAUzD,KAAKxD,GAAIgH,EAAMhH,IAAKwD,KAAK0D,KAAKT,EAAM,IAAI,GAAQA,EAAM,GAAiCO,EAAME,KAAKT,EAAM,IAAI,GAAjDO,EAAMV,QAAQ,MAAM,GAAoC9C,KAAK7I,IAAKsF,EAAIlD,GAAO,QAEvJyG,KAAKyD,UAAUzD,KAAKxD,GAAIgH,EAAMhH,IAAKwD,KAAK8C,QAAQ,MAAM,GAAOU,EAAMV,QAAQ,MAAM,GAAO9C,KAAK7I,IAAKsF,EAAIlD,GAAO,QAGxH9B,EAAQ6J,KAAK,SAAUnJ,GACH,gBAARA,GACVgJ,EAAMrJ,OAAO,GAAIkK,OAAM7J,IAEvBgJ,EAAMtJ,QAAQM,IAEbgJ,EAAMrJ,SAETqJ,EAAMtJ,YAGAsJ,EAAM1J,WAGdN,IAAK,OACL2B,MAAO,WACN,MAAOkH,MAAKrF,KAAKzB,UAGlB/B,IAAK,QACL2B,MAAO,WACN,GAAI6K,GAASrL,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAE7EsL,EAAS5D,KAET6D,EAAMvL,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAC1E6K,EAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,EAASqH,KAAKQ,SAASsD,MAAMH,EAAQA,EAASE,GAAK3I,IAAI,SAAUjF,GACpE,MAAO2N,GAAOjI,IAAI1F,EAAGkN,IAGtB,OAAOA,GAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMnK,mBAAmB8C,OAGhExB,IAAK,OACL2B,MAAO,WACN,IAAK,GAAIiL,GAAQzL,UAAUnC,OAAQ6K,EAAOjL,MAAMgO,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACjFhD,EAAKgD,GAAS1L,UAAU0L,EAGzB,OAAO/M,QAAOwH,OAAOuC,EAAK9F,IAAI,SAAUjF,GACvC,MAAOgB,QAAOwH,OAAOxI,SAIvBkB,IAAK,OACL2B,MAAO,WACN,GAAImL,GAASjE,KAETzG,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,QAC3EnB,EAAMmB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAKC,OAE1EwI,EAAgBxI,SAARpB,EACRqF,EAAMuE,EAAcf,KAAKxD,GAAXrF,CAMlB,OAJI4J,IACHf,KAAK2B,QAGC3B,KAAKxC,IAAIjE,EAAM,MAAOpC,GAAKmK,KAAK,SAAUnJ,GAKhD,MAJI8L,GAAO1D,SACViB,QAAQC,IAAI,SAAUjF,EAAI,OAAQjD,EAAM,sBAGlCwH,EAAQkD,EAAOlD,MAAM5I,EAAK,OAAO,GAAQ8L,EAAO9K,IAAIhC,EAAKgB,GAAK,GAAM,GAAM,IAC/E,SAAUqB,GAKZ,KAJIyK,GAAO1D,SACViB,QAAQtE,MAAM,gBAAiBV,EAAI,OAAQjD,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAG3FA,OAIRrC,IAAK,MACL2B,MAAO,SAAaV,GACnB,GAAI+K,GAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,IAMJ,OAJAqH,MAAKnH,QAAQ,SAAUC,EAAO3B,GAC7B,MAAOwB,GAAOK,KAAKZ,EAAGU,EAAO3B,MAGvBgM,EAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMrH,MAG7CxB,IAAK,UACL2B,MAAO,SAAiB6B,GACvB,GAAI6C,GAAMlF,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,QAC1EkD,EAAQlD,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK0H,KAAKxE,MAEjF2F,EAAQ3J,IAER0M,EAAU,OACV7K,EAAM,MAkCV,OAhCI2G,MAAKZ,QACR/F,EAAM2G,KAAKmE,UAAUhD,GAEjB9H,IACS,UAARmE,IACH0G,GACC1G,IAAKA,EACLhC,MAAOA,EACPQ,QAASrB,EACTxD,IAAK6I,KAAK7I,IACVyD,UAAWoF,KAAKpF,UAChBC,QAASmF,KAAKnF,UAIJ,SAAR2C,IACH0G,GACC1G,IAAKA,EACLd,IAAK/B,EAAK,GACVqB,SAAUrB,EAAK,GAAIA,EAAK,IACxBxD,IAAKwD,EAAK,GACV8B,GAAI9B,EAAK,GACTpB,KAAMoB,EAAK,KAIbtB,EAAIoE,YAAYzD,KAAKE,UAAUgK,EAAS,KAAM,MAG/C/C,EAAMrJ,OAAO,GAAIkK,OAAMnC,IAGjBsB,EAAM1J,WAGdN,IAAK,UACL2B,MAAO,eAEP3B,IAAK,UACL2B,MAAO,eAEP3B,IAAK,WACL2B,MAAO,eAEP3B,IAAK,UACL2B,MAAO,eAEP3B,IAAK,YACL2B,MAAO,SAAmBX,GACzB,MAAOA,MAGRhB,IAAK,QACL2B,MAAO,eAEP3B,IAAK,SACL2B,MAAO,eAEP3B,IAAK,WACL2B,MAAO,SAAkB6B,GACxB,GAAIyJ,GAASpE,KAETzG,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,UAC3EF,EAAKE,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAKC,OAEzE4I,EAAQ3J,GAuBZ,OArBa,YAAT+B,GACHyG,KAAKvE,QAAUuE,KAAK+C,UAAUpI,EAAMvC,GACpC+I,EAAMtJ,SAAQ,IACK,YAAT0B,GACVyG,KAAKrF,KAAKgH,QACV3B,KAAKvE,QAAQkG,QACb3B,KAAKQ,SAASrK,OAAS,EAEvB+B,KAAKyC,EAAM,SAAU0J,GACpB,GAAIlN,GAAMiN,EAAOjN,IAAMkN,EAAMD,EAAOjN,KAAOuH,KAAUA,GAErD0F,GAAOzJ,KAAKxB,IAAIhC,EAAKkN,GACrBD,EAAO5D,SAASxH,KAAK7B,KAGtB6I,KAAKU,MAAQV,KAAKrF,KAAKmB,KACvBqF,EAAMtJ,SAAQ,IAEdsJ,EAAMrJ,OAAO,GAAIkK,OAAM,iBAGjBb,EAAM1J,WAGdN,IAAK,WACL2B,MAAO,SAAkB3B,EAAKiB,GAG7B,MAFA0H,GAAQ3I,GAAOiB,EAER4H,QAGR7I,IAAK,UACL2B,MAAO,SAAiB0C,GACvB,GAAI8I,GAAStE,IAuBb,OArBKxE,IAWAwE,KAAKxE,MAAMV,QAAQU,MAAW,GACjCwE,KAAKxE,MAAMxC,KAAKwC,GAGjBwE,KAAKvE,QAAQtC,IAAIqC,EAAO,GAAI5C,MAC5BoH,KAAKnH,QAAQ,SAAU8B,EAAMxD,GAC5B,MAAOiH,UAASkG,EAAO9I,MAAO8I,EAAO7I,QAAS6I,EAAO1J,UAAWzD,EAAKwD,EAAMa,EAAO8I,EAAOzJ,aAhB1FmF,KAAKvE,QAAQkG,QACb3B,KAAKxE,MAAM3C,QAAQ,SAAU5C,GAC5B,MAAOqO,GAAO7I,QAAQtC,IAAIlD,EAAG,GAAI2C,QAElCoH,KAAKnH,QAAQ,SAAU8B,EAAMxD,GAC5B,MAAOmN,GAAO9I,MAAM3C,QAAQ,SAAU5C,GACrC,MAAOmI,UAASkG,EAAO9I,MAAO8I,EAAO7I,QAAS6I,EAAO1J,UAAWzD,EAAKwD,EAAM1E,EAAGqO,EAAOzJ,cAcjFmF,QAGR7I,IAAK,UACL2B,MAAO,SAAiBJ,GACvB,GAAI6L,GAAUvE,KAEVjB,EAASzG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,MAExE6I,EAAQ3J,IACRgN,EAAMnI,EAAMtC,MAAMiG,KAAKjB,QAASA,EAoDpC,OAlDAyF,GAAItE,OAASsE,EAAItE,OAAOuE,cAEL,WAAfD,EAAItE,cACAsE,GAAIE,KAGZhF,EAAMhH,EAAO8L,GAAKlD,KAAK,SAAUqD,GAChC,GAAIC,GAASD,EAAIC,OACbxE,IAEJ,IAAIuE,EAAIvE,QAAQyE,SACf3M,KAAKjB,OAAOiC,KAAKyL,EAAIvE,QAAQyE,UAAW,SAAU5O,GACjDmK,EAAQnK,GAAK0O,EAAIvE,QAAQyE,SAAS5O,GAAGqF,KAAK,YAErC,CACN,GAAIwJ,IAA4B,EAC5BC,GAAoB,EACpBC,EAAiBzM,MAErB,KACC,IAAK,GAA0D0M,GAAtDC,EAAYP,EAAIvE,QAAQ4C,UAAUmC,OAAOC,cAAsBN,GAA6BG,EAAQC,EAAUG,QAAQC,MAAOR,GAA4B,EAAM,CACvK,GAAIS,GAAON,EAAMnM,KAEjBsH,GAAQmF,EAAK,IAAMA,EAAK,IAExB,MAAO1C,GACRkC,GAAoB,EACpBC,EAAiBnC,EAChB,QACD,KACMiC,GAA6BI,EAAUM,QAC3CN,EAAUM,SAEV,QACD,GAAIT,EACH,KAAMC,KAMVL,GAAKvE,EAAQ,iBAAmB,IAAItF,QAAQ,qBAAsB,EAAK,OAAS,UAAUwG,KAAK,SAAUnJ,GACxGgJ,EAAMyD,EAAS,KAAOA,GAAU,IAAM,SAAW,WAAWL,EAAQnB,KAAKmB,EAAQkB,UAAUtN,EAAKyM,EAAQxE,GAAUwE,EAAQxE,KACxH,SAAU5G,GACZ,MAAO2H,GAAMrJ,OAAOyM,EAAQnB,KAAK5J,EAAEiJ,QAASmC,EAAQxE,OAEnD,SAAU5G,GACZ,MAAO2H,GAAMrJ,OAAOyM,EAAQnB,KAAK5J,EAAEiJ,QAAS,SAGtCtB,EAAM1J,WAGdN,IAAK,OACL2B,MAAO,WACN,GAAI4M,GAAU1F,KAEVzG,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,OAE/E,OAAO0H,MAAKxC,IAAIjE,EAAM,OAAO+H,KAAK,SAAUnJ,GAK3C,MAJIuN,GAAQnF,SACXiB,QAAQC,IAAI,QAASiE,EAAQlJ,GAAI,KAAMjD,EAAM,sBAGvCpB,GACL,SAAUqB,GAKZ,KAJIkM,GAAQnF,SACXiB,QAAQtE,MAAM,gBAAiBwI,EAAQlJ,GAAI,KAAMjD,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAGjGA,OAIRrC,IAAK,SACL2B,MAAO,SAAgBA,EAAO0C,GAC7B,GAAImK,GAAU3F,KAEVmD,EAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,KACAP,EAAsB,kBAAVU,GACZ8M,EAAO9M,GAA+B,kBAAfA,GAAM+M,KAC7BC,EAAO,GAAI/M,IA2Bf,OAzBID,IACHZ,KAAKsD,EAAQzF,MAAMC,QAAQwF,GAASA,GAASA,GAASwE,KAAKxE,MAAO,SAAUvF,GAC3E,GAAIyF,GAAMiK,EAAQlK,QAAQE,IAAI1F,EAE1ByF,IACHA,EAAI7C,QAAQ,SAAUkN,EAAM9J,GAC3B,QAAQ,GACP,IAAK7D,IAAMU,EAAMmD,EAAMhG,GACvB,IAAK2P,IAAQ9M,EAAM+M,KAAK9P,MAAMC,QAAQiG,GAAQA,EAAKX,KAAK,MAAQW,GAChE,IAAKA,KAASnD,EACbiN,EAAKlN,QAAQ,SAAU1B,GACjB2O,EAAK/N,IAAIZ,KACb2O,EAAK7M,IAAI9B,GACTwB,EAAOK,KAAK2M,EAAQhK,IAAIxE,EAAKgM,YAY9BA,EAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMrH,MAG7CxB,IAAK,MACL2B,MAAO,SAAa3B,EAAKwD,GACxB,GAAIoG,GAAQzI,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE0N,EAAUhG,KAEViG,EAAW3N,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAC1E4I,EAAQ5I,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE6I,EAAQ3J,IAERqF,EAAI9C,MAAMY,GACVuF,EAAS,OACTgC,EAAK,MAgCT,OA9BY3J,UAARpB,GAA6B,OAARA,IACxBA,EAAM6I,KAAK7I,KAAuBoB,SAAhBsE,EAAEmD,KAAK7I,KAAqB0F,EAAEmD,KAAK7I,KAAOuH,KAGxDsB,KAAKrF,KAAK5C,IAAIZ,IASlB+K,EAAKlC,KAAKrE,IAAIxE,GAAK,GACnBoE,EAASyE,KAAKxE,MAAOwE,KAAKvE,QAASuE,KAAKpF,UAAWzD,EAAK+K,EAAIlC,KAAKnF,SACjEqF,EAAS,MAELF,KAAKa,YACRb,KAAKY,SAASjF,IAAIxE,GAAK8B,IAAIhC,OAAOwH,OAAO1E,MAAMmI,KAG3C+D,IACJpJ,EAAIR,EAAMtC,MAAMmI,GAAKrF,MAjBtBmD,KAAKQ,SAASR,KAAKU,OAASvJ,IAC1B6I,KAAKU,MACPR,EAAS,OAELF,KAAKa,YACRb,KAAKY,SAASzH,IAAIhC,EAAK,GAAI4B,OAgB7BiH,KAAKrF,KAAKxB,IAAIhC,EAAK0F,GACnBuB,SAAS4B,KAAKxE,MAAOwE,KAAKvE,QAASuE,KAAKpF,UAAWzD,EAAK0F,EAAG,KAAMmD,KAAKnF,SACtEsG,EAAMtJ,QAAQmI,KAAKrE,IAAIxE,IAEhBgK,EAAM1J,QAAQ6J,KAAK,SAAUnJ,GA+CnC,MA9CA6N,GAAQE,MAAM/N,EAAK4I,IAEdA,GAASiF,EAAQrF,KACrBqF,EAAQrD,SAASxL,EAAK0F,EAAGqF,EAAI+D,EAAU/F,GAAQ0C,MAAM,SAAUpJ,GAC1DwM,EAAQzF,SACXiB,QAAQtE,MAAM1D,EAAEkJ,OAASlJ,EAAEiJ,SAAWjJ,GAGnC0I,EACH8D,EAAQ7M,IAAIhC,EAAK+K,GAAI,GAAM,GAAMZ,KAAK,WACjC0E,EAAQzF,SACXiB,QAAQC,IAAI,WAAYtK,GAGzB6O,EAAQE,MAAMF,EAAQ5C,KAAKjM,EAAK+K,GAAKnB,GAAO,KAC1C6B,MAAM,WACJoD,EAAQzF,SACXiB,QAAQC,IAAI,mBAAoBtK,KAIlC6O,EAAQ5E,IAAIjK,GAAK,GAAMmK,KAAK,WACvB0E,EAAQzF,SACXiB,QAAQC,IAAI,WAAYtK,KAEvByL,MAAM,WACJoD,EAAQzF,SACXiB,QAAQC,IAAI,mBAAoBtK,OAOhC+J,GACJ8E,EAAQzD,QAAQ,MAAOpL,EAAK0F,GAAGyE,KAAK,SAAUkB,GACzCA,GAAWwD,EAAQzF,SACtBiB,QAAQC,IAAI,QAAStK,EAAK,0BAEzB,SAAUqC,GACRwM,EAAQzF,SACXiB,QAAQtE,MAAM,eAAgB/F,EAAK,yBAA0BqC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,KAKjFrB,GACL,SAAUqB,GAEZ,KADAwM,GAAQtE,QAAQ,MAAOlI,GACjBA,OAIRrC,IAAK,SACL2B,MAAO,SAAgB6H,GACtB,GAAIgB,GAAQrJ,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE6I,EAAQ3J,GAUZ,OARAwI,MAAKW,IAAMA,EAEPX,KAAKW,IACRX,KAAKmG,KAAKxE,GAAOL,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,QAE3CqJ,EAAMtJ,YAGAsJ,EAAM1J,WAGdN,IAAK,OACL2B,MAAO,SAAcV,GACpB,GAAIoG,KAASlG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,KAAmBA,UAAU,EAE5E,OAAOkG,GAASvH,OAAOwH,OAAOuB,KAAKoG,MAAM,EAAGpG,KAAKU,OAAO,GAAM1F,KAAK5C,GAAI8C,IAAI,SAAUjF,GACpF,MAAOgB,QAAOwH,OAAOxI,MAChB+J,KAAKoG,MAAM,EAAGpG,KAAKU,OAAO,GAAM1F,KAAK5C,MAG5CjB,IAAK,SACL2B,MAAO,SAAgB0C,GACtB,GAAI6K,GAAUrG,KAEVmD,EAAM7K,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAErEK,KACAO,KAEAgD,EAAS,MAgBb,OAdK8D,MAAKvE,QAAQ1D,IAAIyD,IACrBwE,KAAKc,QAAQtF,GAGdU,EAAS8D,KAAKvE,QAAQE,IAAIH,GAC1BU,EAAOrD,QAAQ,SAAU6C,EAAKvE,GAC7B,MAAO+B,GAAKF,KAAK7B,KAElBe,KAAKgB,EAAK8B,OAAQ,SAAU/E,GAC3B,MAAOiG,GAAOP,IAAI1F,GAAG4C,QAAQ,SAAU1B,GACtC,MAAOwB,GAAOK,KAAKqN,EAAQ1K,IAAIxE,EAAKgM,QAI/BA,EAAMxK,EAASqH,KAAKoD,KAAKrB,MAAM/B,KAAMrH,MAG7CxB,IAAK,UACL2B,MAAO,WAGN,IAAK,GAFDwN,GAAUtG,KAELuG,EAAQjO,UAAUnC,OAAQ6K,EAAOjL,MAAMwQ,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACjFxF,EAAKwF,GAASlO,UAAUkO,EAGzB,IAAIrF,GAAQ3J,IACRiP,EAAYxP,OAAOiC,KAAK8G,KAAKC,UAAU/E,IAAI,SAAUjF,GACxD,MAAOqQ,GAAQ9I,IAAIuE,MAAMuE,GAAUrQ,GAAGqG,OAAO0E,KAW9C,OARIyF,GAAUtQ,OAAS,EACtByB,EAAQyJ,IAAIoF,GAAWnF,KAAK,WAC3B,MAAOH,GAAMtJ,SAAQ,IACnBsJ,EAAMrJ,QAETqJ,EAAMtJ,SAAQ,GAGRsJ,EAAM1J,WAGdN,IAAK,OACL2B,MAAO,WACN,GAAI4N,GAAU1G,KAEV2B,EAAQrJ,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAEvE6I,EAAQ3J,IAERyF,GAAQ,CAyBZ,OAvBA+C,MAAK2G,QAAQ3G,KAAKW,KAAKW,KAAK,SAAUnJ,GACrC,GAAIwC,GAAO,MAEX+L,GAAQhJ,OAASvF,EAAI,GAAGyO,OAASzO,EAAI,GAAG0O,OAAS,IAAI/L,QAAQ,UAAW,CAExE,KACCH,EAAO+L,EAAQjG,OAASiG,EAAQI,MAAM3O,EAAI,IAAMA,EAAI,GACnD,MAAOqB,GACRyD,GAAQ,EACRkE,EAAMrJ,OAAO0B,GAGVyD,IACC0E,GACH+E,EAAQ/E,QAGT+E,EAAQ3F,MAAMpG,EAAM,OAAO2G,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,UAEpD,SAAU0B,GACZ2H,EAAMrJ,OAAO0B,EAAE,IAAMA,KAGf2H,EAAM1J,QAAQ6J,KAAK,SAAUnJ,GAGnC,MAFAuO,GAAQK,OAAO5O,GAERA,GACL,SAAUqB,GAGZ,KAFAkN,GAAQhF,QAAQ,OAAQlI,GAElBA,OAIRrC,IAAK,UACL2B,MAAO,SAAiB6B,GACvB,GAAI6D,KAASlG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,KAAmBA,UAAU,GAExEK,EAAS,MAgBb,OAdIgC,GACHhC,EAASgC,EAAKO,IAAI,SAAUjF,GAC3B,MAAOuI,GAASvI,EAAE,GAAK8D,MAAM9D,EAAE,OAGhC0C,EAASqH,KAAKoG,MAAM,EAAGpG,KAAKU,OAAO,GAE/BlC,GACHtG,KAAKS,EAAQ,SAAU1C,GACtB,MAAOgB,QAAOwH,OAAOxI,MAKjBuI,EAASvH,OAAOwH,OAAO9F,GAAUA,KAGzCxB,IAAK,WACL2B,MAAO,SAAkB6B,GACxB,GAAI6D,KAASlG,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,KAAmBA,UAAU,GAExEK,EAAUgC,EAAgCA,EAAKqM,OAAO,SAAUhP,EAAGC,GACtE,GAAIoB,GAAMU,MAAM9B,EAAE,GAQlB,OANIuG,IACHvH,OAAOwH,OAAOpF,GAGfrB,EAAEC,EAAE,IAAMoB,EAEHrB,OATauG,EAASyB,KAAMxB,EAYpC,OAAOA,GAASvH,OAAOwH,OAAO9F,GAAUA,KAGzCxB,IAAK,YACL2B,MAAO,SAAmBJ,EAAON,GAChC,MAAqB,kBAAPA,GAAoBA,EAAGM,GAASD,KAAKC,MAGpDvB,IAAK,WACL2B,MAAO,SAAkB3B,EAAKwD,EAAMuH,GACnC,GAAI+E,GAAUjH,KAEViG,EAAW3N,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,IAAmBA,UAAU,GAC1E4H,EAAS5H,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,OAE7E6I,EAAQ3J,IACRmJ,EAAMxG,EAAU6F,KAAKW,IAAKhG,EAAOxD,EAAM,MAEvCuN,EAAO,MAyBX,OAvBI1E,MAAKtC,OAMPgH,EALI/J,EAEOuH,EAED+D,IACApI,GAAI,UAAWC,KAAM,IAAKhF,MAAO6B,IAEpC+C,EAAMwE,EAAIvH,EAAMqF,KAAK7I,OAJlB0G,GAAI,MAAOC,KAAM,IAAKhF,MAAO6B,MAF7BkD,GAAI,SAAUC,KAAM,IAAKhF,MAAO3B,IAS3C6I,KAAK2G,QAAQhG,GAAOT,OAAQ,QAASwE,KAAM1K,KAAKE,UAAUwK,EAAM,KAAM,KAAMpD,KAAKH,EAAMtJ,QAAS,SAAU2B,GAC5F,MAATA,EAAE,IACLyN,EAAQvJ,OAAQ,EAChBuJ,EAAQN,QAAShM,EAAqCgG,EAA9BxG,EAAU8M,EAAQtG,IAAKxJ,IAAc+I,OAAQA,EAAQwE,KAAM1K,KAAKE,UAAUS,EAAM,KAAM,KAAM2G,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,SAE9IqJ,EAAMrJ,OAAO0B,MAIfwG,KAAK2G,QAAQhG,GAAOT,OAAQA,EAAQwE,KAAM1K,KAAKE,UAAUS,EAAM,KAAM,KAAM2G,KAAKH,EAAMtJ,QAASsJ,EAAMrJ,QAG/FqJ,EAAM1J,WAGdN,IAAK,SACL2B,MAAO,WACN,GAAIoO,GAAUlH,KAEVzG,EAAOjB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAK,QAC3EnB,EAAMmB,UAAUnC,OAAS,GAAsBoC,SAAjBD,UAAU,GAAmBA,UAAU,GAAKC,OAE1EiE,EAAajE,SAARpB,EAAoBA,EAAM6I,KAAKxD,EAExC,OAAOwD,MAAKxC,IAAIjE,EAAM,SAAUpC,GAAKmK,KAAK,SAAUnJ,GAKnD,MAJI+O,GAAQ3G,SACXiB,QAAQC,IAAI,WAAYjF,EAAI,OAAQjD,EAAM,sBAGpCpB,GACL,SAAUqB,GAKZ,KAJI0N,GAAQ3G,SACXiB,QAAQtE,MAAM,kBAAmBV,EAAI,OAAQjD,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAG7FA,OAIRrC,IAAK,aACL2B,MAAO,SAAoB3B,SACnB2I,GAAQ3I,MAGhBA,IAAK,SACL2B,MAAO,WACN,MAAOkH,MAAKrF,KAAKwM,YAGlBhQ,IAAK,YACL2B,MAAO,SAAmBqI,GACzB,GAAI9H,GAAM,MAkBV,OAhBI2G,MAAKZ,QACR/F,EAAM,GAAIuG,GAAOI,KAAKZ,QAEtB/F,EAAIqI,QAAU,SAAUmB,GACvB1B,EAAMrJ,OAAO+K,GACbxJ,EAAI+N,aAGL/N,EAAIiE,UAAY,SAAUC,GACzB4D,EAAMtJ,QAAQmC,KAAKC,MAAMsD,EAAG5C,OAC5BtB,EAAI+N,cAGLjG,EAAMrJ,OAAO,GAAIkK,OAAMnC,IAGjBxG,MAIF2F,OAwBRF,GAAQiE,UAAYtK,KACpBqG,EAAQuI,QAAU,SAGK,mBAAZC,SACVC,OAAOD,QAAUxI,EACW,kBAAX0I,SAAyBA,OAAOC,IACjDD,OAAO,WACN,MAAO1I,KAGRvH,EAAOmQ,KAAO5I,GAEK,mBAAX6I,QAAyBA,OAASpQ","file":"haro.min.js","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2017\r\n * @license BSD-3-Clause\r\n * @version 3.1.12\r\n */\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = global.Promise;\n\tvar Map = global.Map;\n\tvar Set = global.Set;\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar Blob = global.Blob || require(\"Blob\");\n\tvar Worker = global.Worker || require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction deferred() {\n\t\tvar promise = void 0,\n\t\t resolver = void 0,\n\t\t rejecter = void 0;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction has(a, b) {\n\t\treturn b in a;\n\t}\n\n\tfunction each(arg, fn) {\n\t\tvar exit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\tvar nth = arg.length;\n\n\t\tvar i = -1;\n\n\t\tif (exit) {\n\t\t\twhile (++i < nth) {\n\t\t\t\tif (fn(arg[i], i) === false) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\twhile (++i < nth) {\n\t\t\t\tfn(arg[i], i);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cast(input) {\n\t\tvar result = void 0;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase Array.isArray(input):\n\t\t\t\tresult = new Set();\n\t\t\t\teach(input, function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\teach(Object.keys(input), function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = void 0;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar result = void 0;\n\n\t\tif (key.indexOf(delimiter) > -1) {\n\t\t\tresult = key.split(delimiter).sort(function (a, b) {\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t}).map(function (i) {\n\t\t\t\treturn data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tvar o = void 0;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to.delete(key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\to = null;\n\t\t\t\t\tidx.delete(value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\teach(indexes, function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\teach(records, function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (!has(result[index], lindex)) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\teach(Object.keys(obj), function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\teach(obj, fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tif (a instanceof Object && b instanceof Object) {\n\t\t\teach(Object.keys(b), function (i) {\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\n\t\t\t\t} else {\n\t\t\t\t\ta[i] = b[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\n\t\t\ta = a.concat(b);\n\t\t} else {\n\t\t\ta = b;\n\t\t}\n\n\t\treturn a;\n\t}\n\n\tfunction joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : \"inner\";\n\n\t\tvar result = [];\n\n\t\tvar error = false,\n\t\t errorMsg = \"More than one record found on \";\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\tvar reverse = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = !reverse ? function (x, i) {\n\t\t\t\treturn x[on] === i[key];\n\t\t\t} : function (x, i) {\n\t\t\t\treturn x[key] === i[on];\n\t\t\t};\n\n\t\t\teach(left, function (i) {\n\t\t\t\tvar comp = {},\n\t\t\t\t c = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg += i[on];\n\t\t\t\t\tvalid = false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\teach([i, c[0]], function (x, idx) {\n\t\t\t\t\t\treturn iterate(x, function (v, k) {\n\t\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else if (include) {\n\t\t\t\t\titerate(i, function (v, k) {\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\n\t\t\t\t\t});\n\n\t\t\t\t\teach(keys, function (k) {\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\n\t\t\t\treturn valid;\n\t\t\t}, true);\n\t\t}\n\n\t\tif (type === \"inner\") {\n\t\t\tjoin(a, b, id);\n\t\t}\n\n\t\tif (type === \"left\") {\n\t\t\tjoin(a, b, id, true);\n\t\t}\n\n\t\tif (type === \"right\") {\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\n\t\t}\n\n\t\treturn !error ? result : errorMsg;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd;\n\n\t\tvar result = void 0;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\n\t\t}\n\n\t\tif (cmd === \"join\") {\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n\t\tvar overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\teach(!indice ? index : [indice], function (i) {\n\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tvar obj = value;\n\n\t\t\tif (frozen) {\n\t\t\t\tObject.freeze(obj);\n\t\t\t}\n\n\t\t\tresult[clone(key)] = obj;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tObject.freeze(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\teach(Object.keys(config), function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"set\";\n\t\t\t\tvar lload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t fn = type === \"del\" ? function (i) {\n\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t} : function (i) {\n\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t};\n\n\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this2.onbatch(type, arg);\n\n\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch inserted data into\", _this2.id);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this2.onerror(\"batch\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry.length = 0;\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\t\t\t\tthis.reindex().onclear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"crawl\",\n\t\t\tvalue: function crawl(arg) {\n\t\t\t\tvar result = clone(arg);\n\n\t\t\t\teach((this.source || \"\").split(\".\"), function (i) {\n\t\t\t\t\tresult = result[i];\n\t\t\t\t});\n\n\t\t\t\treturn result || arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tvar index = void 0;\n\n\t\t\t\tif (og) {\n\t\t\t\t\tindex = this.registry.indexOf(key);\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tthis.registry.shift();\n\t\t\t\t\t} else if (index === this.registry.length - 1) {\n\t\t\t\t\t\tthis.registry.pop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.registry.splice(index, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tthis.data.delete(key);\n\t\t\t\t\t--this.total;\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this3.ondelete(arg, batch);\n\n\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t_this3.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (_this3.uri && !batch) {\n\t\t\t\t\t\t_this3.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this3.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this3.onerror(\"delete\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"records\";\n\n\t\t\t\treturn type === \"records\" ? this.toArray(null, false) : this.transform(this.indexes);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter, this.pattern),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\treturn result.push(_this4.get(i, raw));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tvar lfn = void 0;\n\n\t\t\t\tif (!raw) {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(_this5.list(key, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.forEach(lfn);\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\treturn fn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = clone(this.data.get(key) || null);\n\n\t\t\t\treturn result && !raw ? this.list(key, result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other) {\n\t\t\t\tvar on = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.key;\n\t\t\t\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"inner\";\n\t\t\t\tvar where = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar promise = void 0;\n\n\t\t\t\tif (other.total > 0) {\n\t\t\t\t\tif (where.length > 0) {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on, type], \"join\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\");\n\t\t\t\t\t}\n\n\t\t\t\t\tpromise.then(function (arg) {\n\t\t\t\t\t\tif (typeof arg === \"string\") {\n\t\t\t\t\t\t\tdefer.reject(new Error(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit() {\n\t\t\t\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = this.registry.slice(offset, offset + max).map(function (i) {\n\t\t\t\t\treturn _this6.get(i, raw);\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, _toConsumableArray(result));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"list\",\n\t\t\tvalue: function list() {\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\treturn Object.freeze(args.map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this7.batch(arg, \"set\", true) : _this7.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\treturn result.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"index\";\n\t\t\t\tvar index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.index;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar payload = void 0,\n\t\t\t\t obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (cmd === \"index\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (cmd === \"join\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tids: data[0],\n\t\t\t\t\t\t\t\trecords: [data[1], data[2]],\n\t\t\t\t\t\t\t\tkey: data[3],\n\t\t\t\t\t\t\t\ton: data[4],\n\t\t\t\t\t\t\t\ttype: data[5]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onbatch\",\n\t\t\tvalue: function onbatch() {}\n\t\t}, {\n\t\t\tkey: \"onclear\",\n\t\t\tvalue: function onclear() {}\n\t\t}, {\n\t\t\tkey: \"ondelete\",\n\t\t\tvalue: function ondelete() {}\n\t\t}, {\n\t\t\tkey: \"onerror\",\n\t\t\tvalue: function onerror() {}\n\t\t}, {\n\t\t\tkey: \"onrequest\",\n\t\t\tvalue: function onrequest(arg) {\n\t\t\t\treturn arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"records\";\n\t\t\t\tvar fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data.clear();\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.registry.length = 0;\n\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this8.key ? datum[_this8.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this8.data.set(key, datum);\n\t\t\t\t\t\t_this8.registry.push(key);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\treturn _this9.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\treturn _this9.index.forEach(function (i) {\n\t\t\t\t\t\t\treturn setIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, i, _this9.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.index.indexOf(index) === -1) {\n\t\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\treturn setIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, index, _this9.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(clone(this.config), config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tif (cfg.method === \"DELETE\") {\n\t\t\t\t\tdelete cfg.body;\n\t\t\t\t}\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = {};\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\teach(Object.keys(res.headers._headers), function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\t\t\t\tvar _didIteratorError = false;\n\t\t\t\t\t\tvar _iteratorError = undefined;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tfor (var _iterator = res.headers.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\t\t\t\tvar pair = _step.value;\n\n\t\t\t\t\t\t\t\theaders[pair[0]] = pair[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t_didIteratorError = true;\n\t\t\t\t\t\t\t_iteratorError = err;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tres[(headers[\"content-type\"] || \"\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](_this10.list(_this10.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\treturn defer.reject(_this10.list(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\treturn defer.reject(_this10.list(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this11.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this11.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set();\n\n\t\t\t\tif (value) {\n\t\t\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, function (i) {\n\t\t\t\t\t\tvar idx = _this12.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this12.get(key, raw));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar lload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar x = clone(data),\n\t\t\t\t method = void 0,\n\t\t\t\t og = void 0;\n\n\t\t\t\tif (key === undefined || key === null) {\n\t\t\t\t\tkey = this.key && x[this.key] !== undefined ? x[this.key] : uuid();\n\t\t\t\t}\n\n\t\t\t\tif (!this.data.has(key)) {\n\t\t\t\t\tthis.registry[this.total] = key;\n\t\t\t\t\t++this.total;\n\t\t\t\t\tmethod = \"post\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.set(key, new Set());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tog = this.get(key, true);\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tmethod = \"put\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tx = merge(clone(og), x);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.data.set(key, x);\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\n\t\t\t\tdefer.resolve(this.get(key));\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this13.onset(arg, batch);\n\n\t\t\t\t\tif (!batch && _this13.uri) {\n\t\t\t\t\t\t_this13.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t_this13.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_this13.onset(_this13.list(key, og), batch, true);\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_this13.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this13.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this13.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", key, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", key, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this13.onerror(\"set\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\treturn frozen ? Object.freeze(this.limit(0, this.total, true).sort(fn).map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t})) : this.limit(0, this.total, true).sort(fn);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [];\n\n\t\t\t\tvar lindex = void 0;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\treturn keys.push(key);\n\t\t\t\t});\n\t\t\t\teach(keys.sort(), function (i) {\n\t\t\t\t\treturn lindex.get(i).forEach(function (key) {\n\t\t\t\t\t\treturn result.push(_this14.get(key, raw));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tfor (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n\t\t\t\t\targs[_key3] = arguments[_key3];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = Object.keys(this.adapters).map(function (i) {\n\t\t\t\t\treturn _this15.cmd.apply(_this15, [i].concat(args));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\treturn defer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this16 = this;\n\n\t\t\t\tvar clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = void 0;\n\n\t\t\t\t\t_this16.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata = _this16.source ? _this16.crawl(arg[0]) : arg[0];\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (valid) {\n\t\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t\t_this16.clear();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this16.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t\t}\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this16.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this16.onerror(\"sync\", e);\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tresult = data.map(function (i) {\n\t\t\t\t\t\treturn frozen ? i[1] : clone(i[1]);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\teach(result, function (i) {\n\t\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = !data ? toObjekt(this, frozen) : data.reduce(function (a, b) {\n\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\tObject.freeze(obj);\n\t\t\t\t\t}\n\n\t\t\t\t\ta[b[0]] = obj;\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {});\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transmit\",\n\t\t\tvalue: function transmit(key, data, og) {\n\t\t\t\tvar _this17 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar method = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"post\";\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t uri = concatURI(this.uri, data ? key : null);\n\n\t\t\t\tvar body = void 0;\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tbody = [{ op: \"remove\", path: \"/\", value: key }];\n\t\t\t\t\t} else if (!og) {\n\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: data }];\n\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: data }];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = patch(og, data, this.key);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.request(uri, { method: \"patch\", body: JSON.stringify(body, null, 0) }).then(defer.resolve, function (e) {\n\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t_this17.patch = false;\n\t\t\t\t\t\t\t_this17.request(!data ? concatURI(_this17.uri, key) : uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this18 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t}();\n\n\tfunction factory() {\n\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar indexes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = void 0;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.1.12\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\" && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof window !== \"undefined\" ? window : global);\n"]} \ No newline at end of file +{"version":3,"sources":["haro.js"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","from","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","deferred","promise","resolver","rejecter","Promise","resolve","reject","has","a","b","each","arg","fn","exit","arguments","undefined","nth","cast","input","result","Map","forEach","value","Set","push","add","keys","set","blob","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","map","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","iterate","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","patch","ogdata","overwrite","op","path","s","Math","random","substring","setIndexValue","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","fetch","require","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","_this2","lload","defer","del","all","then","onbatch","console","log","onerror","clear","onclear","_len","_key","apply","Error","_this3","og","shift","pop","splice","ondelete","storage","success","message","stack","transmit","catch","err","toArray","transform","entries","where","_this4","raw","list","_this5","lfn","ctx","other","offload","find","offset","_this6","max","slice","_len2","_key2","_this7","payload","useWorker","_this8","datum","_this9","_this10","cfg","toUpperCase","body","res","status","_headers","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","pair","return","onrequest","_this11","_this12","rgex","test","seen","lset","_this13","override","onset","sync","limit","_this14","_this15","_len3","_key3","deferreds","_this16","request","Allow","allow","crawl","onsync","reduce","_this17","_this18","values","terminate","version","exports","module","define","amd","haro","window"],"mappings":"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","file":"haro.min.js","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2017\r\n * @license BSD-3-Clause\r\n * @version 3.1.13\r\n */\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = global.Promise;\n\tvar Map = global.Map;\n\tvar Set = global.Set;\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar Blob = global.Blob || require(\"Blob\");\n\tvar Worker = global.Worker || require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction deferred() {\n\t\tvar promise = void 0,\n\t\t resolver = void 0,\n\t\t rejecter = void 0;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction has(a, b) {\n\t\treturn b in a;\n\t}\n\n\tfunction each(arg, fn) {\n\t\tvar exit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\tvar nth = arg.length;\n\n\t\tvar i = -1;\n\n\t\tif (exit) {\n\t\t\twhile (++i < nth) {\n\t\t\t\tif (fn(arg[i], i) === false) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\twhile (++i < nth) {\n\t\t\t\tfn(arg[i], i);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cast(input) {\n\t\tvar result = void 0;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase Array.isArray(input):\n\t\t\t\tresult = new Set();\n\t\t\t\teach(input, function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\teach(Object.keys(input), function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = void 0;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar result = void 0;\n\n\t\tif (key.indexOf(delimiter) > -1) {\n\t\t\tresult = key.split(delimiter).sort(function (a, b) {\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t}).map(function (i) {\n\t\t\t\treturn data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tvar o = void 0;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to.delete(key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\to = null;\n\t\t\t\t\tidx.delete(value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\teach(indexes, function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\teach(records, function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (!has(result[index], lindex)) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\teach(Object.keys(obj), function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\teach(obj, fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tif (a instanceof Object && b instanceof Object) {\n\t\t\teach(Object.keys(b), function (i) {\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\n\t\t\t\t} else {\n\t\t\t\t\ta[i] = b[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\n\t\t\ta = a.concat(b);\n\t\t} else {\n\t\t\ta = b;\n\t\t}\n\n\t\treturn a;\n\t}\n\n\tfunction joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : \"inner\";\n\n\t\tvar result = [];\n\n\t\tvar error = false,\n\t\t errorMsg = \"More than one record found on \";\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\tvar reverse = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = !reverse ? function (x, i) {\n\t\t\t\treturn x[on] === i[key];\n\t\t\t} : function (x, i) {\n\t\t\t\treturn x[key] === i[on];\n\t\t\t};\n\n\t\t\teach(left, function (i) {\n\t\t\t\tvar comp = {},\n\t\t\t\t c = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg += i[on];\n\t\t\t\t\tvalid = false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\teach([i, c[0]], function (x, idx) {\n\t\t\t\t\t\treturn iterate(x, function (v, k) {\n\t\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else if (include) {\n\t\t\t\t\titerate(i, function (v, k) {\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\n\t\t\t\t\t});\n\n\t\t\t\t\teach(keys, function (k) {\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\n\t\t\t\treturn valid;\n\t\t\t}, true);\n\t\t}\n\n\t\tif (type === \"inner\") {\n\t\t\tjoin(a, b, id);\n\t\t}\n\n\t\tif (type === \"left\") {\n\t\t\tjoin(a, b, id, true);\n\t\t}\n\n\t\tif (type === \"right\") {\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\n\t\t}\n\n\t\treturn !error ? result : errorMsg;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd;\n\n\t\tvar result = void 0;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\n\t\t}\n\n\t\tif (cmd === \"join\") {\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n\t\tvar overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\teach(!indice ? index : [indice], function (i) {\n\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tvar obj = value;\n\n\t\t\tif (frozen) {\n\t\t\t\tObject.freeze(obj);\n\t\t\t}\n\n\t\t\tresult[clone(key)] = obj;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tObject.freeze(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\teach(Object.keys(config), function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"set\";\n\t\t\t\tvar lload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t fn = type === \"del\" ? function (i) {\n\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t} : function (i) {\n\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t};\n\n\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this2.onbatch(type, arg);\n\n\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch inserted data into\", _this2.id);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this2.onerror(\"batch\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry.length = 0;\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\t\t\t\tthis.reindex().onclear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"crawl\",\n\t\t\tvalue: function crawl(arg) {\n\t\t\t\tvar result = clone(arg);\n\n\t\t\t\teach((this.source || \"\").split(\".\"), function (i) {\n\t\t\t\t\tresult = result[i];\n\t\t\t\t});\n\n\t\t\t\treturn result || arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tvar index = void 0;\n\n\t\t\t\tif (og) {\n\t\t\t\t\tindex = this.registry.indexOf(key);\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tthis.registry.shift();\n\t\t\t\t\t} else if (index === this.registry.length - 1) {\n\t\t\t\t\t\tthis.registry.pop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.registry.splice(index, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tthis.data.delete(key);\n\t\t\t\t\t--this.total;\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this3.ondelete(arg, batch);\n\n\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t_this3.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (_this3.uri && !batch) {\n\t\t\t\t\t\t_this3.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this3.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this3.onerror(\"delete\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"records\";\n\n\t\t\t\treturn type === \"records\" ? this.toArray(null, false) : this.transform(this.indexes);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter, this.pattern),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\treturn result.push(_this4.get(i, raw));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tvar lfn = void 0;\n\n\t\t\t\tif (!raw) {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(_this5.list(key, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.forEach(lfn);\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\treturn fn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = clone(this.data.get(key) || null);\n\n\t\t\t\treturn result && !raw ? this.list(key, result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other) {\n\t\t\t\tvar on = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.key;\n\t\t\t\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"inner\";\n\t\t\t\tvar where = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar promise = void 0;\n\n\t\t\t\tif (other.total > 0) {\n\t\t\t\t\tif (where.length > 0) {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on, type], \"join\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\");\n\t\t\t\t\t}\n\n\t\t\t\t\tpromise.then(function (arg) {\n\t\t\t\t\t\tif (typeof arg === \"string\") {\n\t\t\t\t\t\t\tdefer.reject(new Error(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit() {\n\t\t\t\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = this.registry.slice(offset, offset + max).map(function (i) {\n\t\t\t\t\treturn _this6.get(i, raw);\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, _toConsumableArray(result));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"list\",\n\t\t\tvalue: function list() {\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\treturn Object.freeze(args.map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this7.batch(arg, \"set\", true) : _this7.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\treturn result.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"index\";\n\t\t\t\tvar index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.index;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar payload = void 0,\n\t\t\t\t obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (cmd === \"index\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (cmd === \"join\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tids: data[0],\n\t\t\t\t\t\t\t\trecords: [data[1], data[2]],\n\t\t\t\t\t\t\t\tkey: data[3],\n\t\t\t\t\t\t\t\ton: data[4],\n\t\t\t\t\t\t\t\ttype: data[5]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onbatch\",\n\t\t\tvalue: function onbatch() {}\n\t\t}, {\n\t\t\tkey: \"onclear\",\n\t\t\tvalue: function onclear() {}\n\t\t}, {\n\t\t\tkey: \"ondelete\",\n\t\t\tvalue: function ondelete() {}\n\t\t}, {\n\t\t\tkey: \"onerror\",\n\t\t\tvalue: function onerror() {}\n\t\t}, {\n\t\t\tkey: \"onrequest\",\n\t\t\tvalue: function onrequest(arg) {\n\t\t\t\treturn arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"records\";\n\t\t\t\tvar fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data.clear();\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.registry.length = 0;\n\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this8.key ? datum[_this8.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this8.data.set(key, datum);\n\t\t\t\t\t\t_this8.registry.push(key);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\treturn _this9.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\treturn _this9.index.forEach(function (i) {\n\t\t\t\t\t\t\treturn setIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, i, _this9.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.index.indexOf(index) === -1) {\n\t\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\treturn setIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, index, _this9.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(clone(this.config), config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tif (cfg.method === \"DELETE\") {\n\t\t\t\t\tdelete cfg.body;\n\t\t\t\t}\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = {};\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\teach(Object.keys(res.headers._headers), function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\t\t\t\tvar _didIteratorError = false;\n\t\t\t\t\t\tvar _iteratorError = undefined;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tfor (var _iterator = res.headers.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\t\t\t\tvar pair = _step.value;\n\n\t\t\t\t\t\t\t\theaders[pair[0]] = pair[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t_didIteratorError = true;\n\t\t\t\t\t\t\t_iteratorError = err;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tres[(headers[\"content-type\"] || \"\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](_this10.list(_this10.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\treturn defer.reject(_this10.list(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\treturn defer.reject(_this10.list(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this11.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this11.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set();\n\n\t\t\t\tif (value) {\n\t\t\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, function (i) {\n\t\t\t\t\t\tvar idx = _this12.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this12.get(key, raw));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar lload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar x = clone(data),\n\t\t\t\t method = void 0,\n\t\t\t\t og = void 0;\n\n\t\t\t\tif (key === undefined || key === null) {\n\t\t\t\t\tkey = this.key && x[this.key] !== undefined ? x[this.key] : uuid();\n\t\t\t\t}\n\n\t\t\t\tif (!this.data.has(key)) {\n\t\t\t\t\tthis.registry[this.total] = key;\n\t\t\t\t\t++this.total;\n\t\t\t\t\tmethod = \"post\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.set(key, new Set());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tog = this.get(key, true);\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tmethod = \"put\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tx = merge(clone(og), x);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.data.set(key, x);\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\n\t\t\t\tdefer.resolve(this.get(key));\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this13.onset(arg, batch);\n\n\t\t\t\t\tif (!batch && _this13.uri) {\n\t\t\t\t\t\t_this13.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t_this13.set(key, og, batch, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_this13.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this13.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this13.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", key, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", key, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this13.onerror(\"set\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\treturn frozen ? Object.freeze(this.limit(0, this.total, true).sort(fn).map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t})) : this.limit(0, this.total, true).sort(fn);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [];\n\n\t\t\t\tvar lindex = void 0;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\treturn keys.push(key);\n\t\t\t\t});\n\t\t\t\teach(keys.sort(), function (i) {\n\t\t\t\t\treturn lindex.get(i).forEach(function (key) {\n\t\t\t\t\t\treturn result.push(_this14.get(key, raw));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tfor (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n\t\t\t\t\targs[_key3] = arguments[_key3];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = Object.keys(this.adapters).map(function (i) {\n\t\t\t\t\treturn _this15.cmd.apply(_this15, [i].concat(args));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\treturn defer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this16 = this;\n\n\t\t\t\tvar clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = void 0;\n\n\t\t\t\t\t_this16.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata = _this16.source ? _this16.crawl(arg[0]) : arg[0];\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (valid) {\n\t\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t\t_this16.clear();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this16.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t\t}\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this16.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this16.onerror(\"sync\", e);\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tresult = data.map(function (i) {\n\t\t\t\t\t\treturn frozen ? i[1] : clone(i[1]);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\teach(result, function (i) {\n\t\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = !data ? toObjekt(this, frozen) : data.reduce(function (a, b) {\n\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\tObject.freeze(obj);\n\t\t\t\t\t}\n\n\t\t\t\t\ta[b[0]] = obj;\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {});\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transmit\",\n\t\t\tvalue: function transmit(key, data, og) {\n\t\t\t\tvar _this17 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar method = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"post\";\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t uri = concatURI(this.uri, data ? key : null);\n\n\t\t\t\tvar body = void 0;\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tbody = [{ op: \"remove\", path: \"/\", value: key }];\n\t\t\t\t\t} else if (!og) {\n\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: data }];\n\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: data }];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = patch(og, data, this.key);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.request(uri, { method: \"patch\", body: JSON.stringify(body, null, 0) }).then(defer.resolve, function (e) {\n\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t_this17.patch = false;\n\t\t\t\t\t\t\t_this17.request(!data ? concatURI(_this17.uri, key) : uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this18 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t}();\n\n\tfunction factory() {\n\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar indexes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = void 0;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.1.13\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\" && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof window !== \"undefined\" ? window : global);\n"]} \ No newline at end of file diff --git a/package.json b/package.json index c7d9b4d..7f63f2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "3.1.12", + "version": "3.1.13", "description": "Harō is a modern immutable DataStore", "main": "lib/haro.es6.js", "scripts": { diff --git a/src/haro.js b/src/haro.js index b0a9b49..3146330 100644 --- a/src/haro.js +++ b/src/haro.js @@ -527,12 +527,10 @@ } if (og) { - this.set(key, og, true, true).then(() => { + this.set(key, og, batch, true).then(() => { if (this.logging) { console.log("Reverted", key); } - - this.onset(this.list(key, og), batch, true); }).catch(() => { if (this.logging) { console.log("Failed to revert", key);