diff --git a/lib/haro.es6.js b/lib/haro.es6.js index e7a6730..ef2620a 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.4.2 + * @version 3.4.3 */ "use strict"; @@ -281,20 +281,19 @@ return ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1); } - function setIndexValue (index, key, value) { - if (!index.has(key)) { - index.set(key, new Set()); - } - - index.get(key).add(value); - } - function setIndex (index, indexes, delimiter, key, data, indice, pattern) { each(!indice ? index : [indice], i => { - let lidx = keyIndex(i, data, delimiter, pattern); + let lidx = keyIndex(i, data, delimiter, pattern), + lindex; if (lidx !== undefined && lidx !== null) { - setIndexValue(indexes.get(i), lidx, key); + lindex = indexes.get(i); + + if (!lindex.has(lidx)) { + lindex.set(lidx, new Set()); + } + + lindex.get(lidx).add(key); } }); } @@ -1116,7 +1115,6 @@ iterate.toString(), joinData.toString(), keyIndex.toString(), - setIndexValue.toString(), setIndex.toString(), (!node ? "" : "self.") + "onmessage = " + onmessage.toString() + ";" ]; @@ -1132,7 +1130,7 @@ } factory.transform = cast; - factory.version = "3.4.2"; + factory.version = "3.4.3"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index fc54503..1197268 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -4,7 +4,7 @@ * @author Jason Mulligan * @copyright 2017 * @license BSD-3-Clause - * @version 3.4.2 + * @version 3.4.3 */ "use strict"; @@ -319,20 +319,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1); } - function setIndexValue(index, key, value) { - if (!index.has(key)) { - index.set(key, new Set()); - } - - index.get(key).add(value); - } - function setIndex(index, indexes, delimiter, key, data, indice, pattern) { each(!indice ? index : [indice], function (i) { - var lidx = keyIndex(i, data, delimiter, pattern); + var lidx = keyIndex(i, data, delimiter, pattern), + lindex = void 0; if (lidx !== undefined && lidx !== null) { - setIndexValue(indexes.get(i), lidx, key); + lindex = indexes.get(i); + + if (!lindex.has(lidx)) { + lindex.set(lidx, new Set()); + } + + lindex.get(lidx).add(key); } }); } @@ -1407,7 +1406,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var functions = void 0; if (webWorker) { - functions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), (!node ? "" : "self.") + "onmessage = " + onmessage.toString() + ";"]; + functions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndex.toString(), (!node ? "" : "self.") + "onmessage = " + onmessage.toString() + ";"]; obj.worker = !node ? global.URL.createObjectURL(blob(functions.join("\n"))) : new Function(functions.join("\n")); } @@ -1420,7 +1419,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } factory.transform = cast; - factory.version = "3.4.2"; + factory.version = "3.4.3"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 7986578..3557868 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&&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){return 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=new Haro(e).reindex(),g=void 0;return u&&(g=[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()+";"],f.worker=n?new Function(g.join("\n")):a.URL.createObjectURL(d(g.join("\n")))),b&&f.batch(b,"set"),f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||(n?require("node-fetch"):void 0),q=a.Blob||(n?require("Blob"):void 0),r=a.Worker||(n?require("tiny-worker"):void 0),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",Haro=function(){function Haro(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=a.config,c=void 0===b?{}:b,d=a.debounce,e=void 0===d?0:d,f=a.delimiter,h=void 0===f?"|":f,i=a.id,j=void 0===i?l():i,k=a.index,m=void 0===k?[]:k,n=a.key,o=void 0===n?"":n,p=a.logging,q=void 0===p||p,r=a.patch,s=void 0!==r&&r,t=a.pattern,u=void 0===t?"\\s*|\\t*":t,v=a.source,w=void 0===v?"":v,x=a.versioning,y=void 0!==x&&x;_classCallCheck(this,Haro),this.adapters=new Map,this.data=new Map,this.debounce=e,this.debounced=new Map,this.delimiter=h,this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=j,this.index=m,this.indexes=new Map,this.key=o,this.logging=q,this.patch=s,this.pattern=u,this.source=w,this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=y,Object.defineProperty(this,"registry",{get:function(){return Array.from(this.data.keys())}}),Object.keys(c).length>1&&(this.config=g(this.config,c))}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,e)}:function(a){return c.set(null,a,!0,!0,e)};return this.beforeBatch(a,d),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 successful on",c.id),a},function(a){throw c.onerror("batch",a),c.logging&&console.log("Batch failure on",c.id),a})}},{key:"beforeBatch",value:function(){}},{key:"beforeClear",value:function(){}},{key:"beforeDelete",value:function(){}},{key:"beforeRequest",value:function(){}},{key:"beforeSet",value:function(){}},{key:"beforeSync",value:function(){}},{key:"clear",value:function(){return this.beforeClear(),this.total=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.has(a)){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],d=this,e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=b(),i=this.get(a,!0);return i?(this.beforeDelete(a,c,e,g),f(this.index,this.indexes,this.delimiter,a,i,this.pattern),this.data.delete(a),--this.total,h.resolve(a)):h.reject(new Error("Record not found")),h.promise.then(function(b){return d.ondelete(b,c,g,e),d.versioning&&d.versions.delete(a),e||(d.storage("remove",a).then(function(b){b&&d.logging&&console.log("Deleted",a,"from persistent storage")},function(b){d.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c||g||!d.uri||(d.debounced.has(a)&&clearTimeout(d.debounced.get(a)),d.debounced.set(a,setTimeout(function(){d.debounced.delete(a),d.transmit(a,null,i,!1,"delete").catch(function(b){d.logging&&console.error(b.stack||b.message||b),d.set(a,i,!0,!0).then(function(){d.logging&&console.log("Reverted",a)}).catch(function(){d.logging&&console.log("Failed to revert",a)})})},d.debounce)))),b},function(a){throw d.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(function(a,b){return a.localeCompare(b)}).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=[];return this.forEach(function(e,f){a(e,f)===!0&&d.push(b.get(f,c))},this),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.data),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,b){return(b||this.data).has(a)}},{key:"join",value:function(a,c){var 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||this.key,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c||this.key,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(),each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return this.adapters.set(a,b),this}},{key:"reindex",value:function(a){var b=this,c=a?[a]:this.index;return a&&this.index.indexOf(a)===-1&&this.index.push(a),each(c,function(a){return b.indexes.set(a,new Map)}),this.forEach(function(a,d){return each(c,function(c){return setIndex(b.index,b.indexes,b.delimiter,d,a,c,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),h=[a,f];return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,this.beforeRequest.apply(this,h),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=new Map,f="function"==typeof a,g=a&&"function"==typeof a.test;return a&&each(b?Array.isArray(b)?b:[b]:this.index,function(b){var h=c.indexes.get(b);h&&h.forEach(function(h,i){switch(!0){case f&&a(i,b):case g&&a.test(Array.isArray(i)?i.join(", "):i):case i===a:h.forEach(function(a){!e.has(a)&&c.has(a)&&e.set(a,c.get(a,d))})}})}),d?Array.from(e.values()):this.list.apply(this,_toConsumableArray(Array.from(e.values())))}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=this,i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=arguments.length>5&&void 0!==arguments[5]&&arguments[5],k=b(),m=clone(c),n=void 0,o=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==m[this.key]?m[this.key]:l()),this.beforeSet(a,c,d,e,i,j),this.data.has(a)?(o=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,o,this.pattern),n="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(o))),e||(m=g(clone(o),m))):(++this.total,n="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,m),setIndex(this.index,this.indexes,this.delimiter,a,m,null,this.pattern),k.resolve(this.get(a)),k.promise.then(function(b){return h.onset(b,d,j,i),i||(h.storage("set",a,m).then(function(b){b&&h.logging&&console.log("Saved",a,"to persistent storage")},function(b){h.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),d||j||!h.uri||(h.debounced.has(a)&&clearTimeout(h.debounced.get(a)),h.debounced.set(a,setTimeout(function(){h.debounced.delete(a),h.transmit(a,m,o,e,n).catch(function(b){h.logging&&console.error(b.stack||b.message||b),o?h.set(a,o,d,!0,i,!0).then(function(){h.logging&&console.log("Reverted",a)}).catch(function(){h.logging&&console.log("Failed to revert",a)}):h.del(a,!0).then(function(){h.logging&&console.log("Reverted",a)}).catch(function(){h.logging&&console.log("Failed to revert",a)})})},h.debounce)))),b},function(a){throw h.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();return this.beforeSync(this.uri,c),this.request(this.uri).then(function(b){var e=a.source?a.crawl(b[0]):b[0];a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1,c&&a.clear(),a.batch(e,"set").then(d.resolve,d.reject)},function(a){d.reject(a[0]||a)}).catch(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){this.adapters.has(a)&&this.adapters.delete(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.4.2","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&&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){return 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 setIndex(a,b,c,d,e,f,g){each(f?[f]:a,function(a){var f=keyIndex(a,e,c,g),h=void 0;void 0!==f&&null!==f&&(h=b.get(a),h.has(f)||h.set(f,new Set),h.get(f).add(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=new Haro(e).reindex(),g=void 0;return u&&(g=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),c.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndex.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"],f.worker=n?new Function(g.join("\n")):a.URL.createObjectURL(d(g.join("\n")))),b&&f.batch(b,"set"),f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||(n?require("node-fetch"):void 0),q=a.Blob||(n?require("Blob"):void 0),r=a.Worker||(n?require("tiny-worker"):void 0),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",Haro=function(){function Haro(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=a.config,c=void 0===b?{}:b,d=a.debounce,e=void 0===d?0:d,f=a.delimiter,h=void 0===f?"|":f,i=a.id,j=void 0===i?l():i,k=a.index,m=void 0===k?[]:k,n=a.key,o=void 0===n?"":n,p=a.logging,q=void 0===p||p,r=a.patch,s=void 0!==r&&r,t=a.pattern,u=void 0===t?"\\s*|\\t*":t,v=a.source,w=void 0===v?"":v,x=a.versioning,y=void 0!==x&&x;_classCallCheck(this,Haro),this.adapters=new Map,this.data=new Map,this.debounce=e,this.debounced=new Map,this.delimiter=h,this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=j,this.index=m,this.indexes=new Map,this.key=o,this.logging=q,this.patch=s,this.pattern=u,this.source=w,this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=y,Object.defineProperty(this,"registry",{get:function(){return Array.from(this.data.keys())}}),Object.keys(c).length>1&&(this.config=g(this.config,c))}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,e)}:function(a){return c.set(null,a,!0,!0,e)};return this.beforeBatch(a,d),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 successful on",c.id),a},function(a){throw c.onerror("batch",a),c.logging&&console.log("Batch failure on",c.id),a})}},{key:"beforeBatch",value:function(){}},{key:"beforeClear",value:function(){}},{key:"beforeDelete",value:function(){}},{key:"beforeRequest",value:function(){}},{key:"beforeSet",value:function(){}},{key:"beforeSync",value:function(){}},{key:"clear",value:function(){return this.beforeClear(),this.total=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.has(a)){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],d=this,e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=b(),i=this.get(a,!0);return i?(this.beforeDelete(a,c,e,g),f(this.index,this.indexes,this.delimiter,a,i,this.pattern),this.data.delete(a),--this.total,h.resolve(a)):h.reject(new Error("Record not found")),h.promise.then(function(b){return d.ondelete(b,c,g,e),d.versioning&&d.versions.delete(a),e||(d.storage("remove",a).then(function(b){b&&d.logging&&console.log("Deleted",a,"from persistent storage")},function(b){d.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c||g||!d.uri||(d.debounced.has(a)&&clearTimeout(d.debounced.get(a)),d.debounced.set(a,setTimeout(function(){d.debounced.delete(a),d.transmit(a,null,i,!1,"delete").catch(function(b){d.logging&&console.error(b.stack||b.message||b),d.set(a,i,!0,!0).then(function(){d.logging&&console.log("Reverted",a)}).catch(function(){d.logging&&console.log("Failed to revert",a)})})},d.debounce)))),b},function(a){throw d.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(function(a,b){return a.localeCompare(b)}).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=[];return this.forEach(function(e,f){a(e,f)===!0&&d.push(b.get(f,c))},this),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.data),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,b){return(b||this.data).has(a)}},{key:"join",value:function(a,c){var 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||this.key,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c||this.key,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(),each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return this.adapters.set(a,b),this}},{key:"reindex",value:function(a){var b=this,c=a?[a]:this.index;return a&&this.index.indexOf(a)===-1&&this.index.push(a),each(c,function(a){return b.indexes.set(a,new Map)}),this.forEach(function(a,d){return each(c,function(c){return setIndex(b.index,b.indexes,b.delimiter,d,a,c,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),h=[a,f];return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,this.beforeRequest.apply(this,h),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=new Map,f="function"==typeof a,g=a&&"function"==typeof a.test;return a&&each(b?Array.isArray(b)?b:[b]:this.index,function(b){var h=c.indexes.get(b);h&&h.forEach(function(h,i){switch(!0){case f&&a(i,b):case g&&a.test(Array.isArray(i)?i.join(", "):i):case i===a:h.forEach(function(a){!e.has(a)&&c.has(a)&&e.set(a,c.get(a,d))})}})}),d?Array.from(e.values()):this.list.apply(this,_toConsumableArray(Array.from(e.values())))}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=arguments.length>3&&void 0!==arguments[3]&&arguments[3],h=this,i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=arguments.length>5&&void 0!==arguments[5]&&arguments[5],k=b(),m=clone(c),n=void 0,o=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==m[this.key]?m[this.key]:l()),this.beforeSet(a,c,d,e,i,j),this.data.has(a)?(o=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,o,this.pattern),n="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(o))),e||(m=g(clone(o),m))):(++this.total,n="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,m),setIndex(this.index,this.indexes,this.delimiter,a,m,null,this.pattern),k.resolve(this.get(a)),k.promise.then(function(b){return h.onset(b,d,j,i),i||(h.storage("set",a,m).then(function(b){b&&h.logging&&console.log("Saved",a,"to persistent storage")},function(b){h.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),d||j||!h.uri||(h.debounced.has(a)&&clearTimeout(h.debounced.get(a)),h.debounced.set(a,setTimeout(function(){h.debounced.delete(a),h.transmit(a,m,o,e,n).catch(function(b){h.logging&&console.error(b.stack||b.message||b),o?h.set(a,o,d,!0,i,!0).then(function(){h.logging&&console.log("Reverted",a)}).catch(function(){h.logging&&console.log("Failed to revert",a)}):h.del(a,!0).then(function(){h.logging&&console.log("Reverted",a)}).catch(function(){h.logging&&console.log("Failed to revert",a)})})},h.debounce)))),b},function(a){throw h.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();return this.beforeSync(this.uri,c),this.request(this.uri).then(function(b){var e=a.source?a.crawl(b[0]):b[0];a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1,c&&a.clear(),a.batch(e,"set").then(d.resolve,d.reject)},function(a){d.reject(a[0]||a)}).catch(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){this.adapters.has(a)&&this.adapters.delete(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.4.3","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 10a06bc..05c69eb 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","add","keys","set","blob","Blob","type","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","push","iterate","obj","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","createPatch","ogdata","overwrite","op","path","s","Math","random","substring","setIndexValue","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","reindex","functions","webWorker","node","worker","Function","URL","createObjectURL","batch","process","nextTick","fetch","require","Worker","webWorkerError","_ref","_ref$config","_ref$debounce","debounce","_ref$delimiter","_ref$id","_ref$index","_ref$key","_ref$logging","logging","_ref$patch","patch","_ref$pattern","_ref$source","source","_ref$versioning","versioning","this","adapters","debounced","method","credentials","headers","accept","content-type","total","uri","versions","args","_this","lazyLoad","defer","del","beforeBatch","all","then","onbatch","console","log","e","onerror","beforeClear","clear","onclear","_len","_key","apply","Error","_this2","retry","og","beforeDelete","ondelete","storage","success","message","stack","clearTimeout","setTimeout","transmit","catch","err","toArray","transform","entries","where","_this3","raw","list","_this4","ctx","other","offload","find","offset","_this5","max","registry","slice","_len2","_key2","_this6","payload","useWorker","_this7","datum","_this8","indices","_this9","cfg","ref","toUpperCase","body","beforeRequest","res","status","_headers","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","pair","return","onrequest","_this10","_this11","rgex","test","lset","values","override","_this12","beforeSet","onset","sync","limit","_this13","_this14","_len3","_key3","deferreds","_this15","beforeSync","request","crawl","Allow","allow","onsync","reduce","_this16","_this17","terminate","version","exports","module","define","amd","haro","window"],"mappings":"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","file":"haro.min.js","sourcesContent":["/**\n * Harō is a modern immutable DataStore\n *\n * @author Jason Mulligan \n * @copyright 2017\n * @license BSD-3-Clause\n * @version 3.4.2\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 node = typeof process !== \"undefined\" && typeof process.nextTick === \"function\",\n\t Promise = global.Promise,\n\t Map = global.Map,\n\t Set = global.Set,\n\t fetch = global.fetch || (node ? require(\"node-fetch\") : undefined),\n\t Blob = global.Blob || (node ? require(\"Blob\") : undefined),\n\t Worker = global.Worker || (node ? require(\"tiny-worker\") : undefined),\n\t r = [8, 9, \"a\", \"b\"],\n\t regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t},\n\t webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\",\n\t webWorkerError = \"Web Worker not supported\";\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 = Array.from(input);\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\treturn result.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\treturn result.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\treturn new Blob([arg], { type: \"application/javascript\" });\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\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\treturn fn.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 createPatch() {\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() {\n\t\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t\t _ref$config = _ref.config,\n\t\t\t config = _ref$config === undefined ? {} : _ref$config,\n\t\t\t _ref$debounce = _ref.debounce,\n\t\t\t debounce = _ref$debounce === undefined ? 0 : _ref$debounce,\n\t\t\t _ref$delimiter = _ref.delimiter,\n\t\t\t delimiter = _ref$delimiter === undefined ? \"|\" : _ref$delimiter,\n\t\t\t _ref$id = _ref.id,\n\t\t\t id = _ref$id === undefined ? uuid() : _ref$id,\n\t\t\t _ref$index = _ref.index,\n\t\t\t index = _ref$index === undefined ? [] : _ref$index,\n\t\t\t _ref$key = _ref.key,\n\t\t\t key = _ref$key === undefined ? \"\" : _ref$key,\n\t\t\t _ref$logging = _ref.logging,\n\t\t\t logging = _ref$logging === undefined ? true : _ref$logging,\n\t\t\t _ref$patch = _ref.patch,\n\t\t\t patch = _ref$patch === undefined ? false : _ref$patch,\n\t\t\t _ref$pattern = _ref.pattern,\n\t\t\t pattern = _ref$pattern === undefined ? \"\\\\s*|\\\\t*\" : _ref$pattern,\n\t\t\t _ref$source = _ref.source,\n\t\t\t source = _ref$source === undefined ? \"\" : _ref$source,\n\t\t\t _ref$versioning = _ref.versioning,\n\t\t\t versioning = _ref$versioning === undefined ? false : _ref$versioning;\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = new Map();\n\t\t\tthis.data = new Map();\n\t\t\tthis.debounce = debounce;\n\t\t\tthis.debounced = new Map();\n\t\t\tthis.delimiter = 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 = id;\n\t\t\tthis.index = index;\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = key;\n\t\t\tthis.logging = logging;\n\t\t\tthis.patch = patch;\n\t\t\tthis.pattern = pattern;\n\t\t\tthis.source = 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 = versioning;\n\n\t\t\tObject.defineProperty(this, \"registry\", {\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn Array.from(this.data.keys());\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (Object.keys(config).length > 1) {\n\t\t\t\tthis.config = merge(this.config, config);\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 _this = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"set\";\n\t\t\t\tvar lazyLoad = 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 _this.del(i, true, lazyLoad);\n\t\t\t\t} : function (i) {\n\t\t\t\t\treturn _this.set(null, i, true, true, lazyLoad);\n\t\t\t\t};\n\n\t\t\t\tthis.beforeBatch(args, type);\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_this.onbatch(type, arg);\n\n\t\t\t\t\tif (_this.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch successful on\", _this.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_this.onerror(\"batch\", e);\n\n\t\t\t\t\tif (_this.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch failure on\", _this.id);\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: \"beforeBatch\",\n\t\t\tvalue: function beforeBatch() {}\n\t\t}, {\n\t\t\tkey: \"beforeClear\",\n\t\t\tvalue: function beforeClear() {}\n\t\t}, {\n\t\t\tkey: \"beforeDelete\",\n\t\t\tvalue: function beforeDelete() {}\n\t\t}, {\n\t\t\tkey: \"beforeRequest\",\n\t\t\tvalue: function beforeRequest() {}\n\t\t}, {\n\t\t\tkey: \"beforeSet\",\n\t\t\tvalue: function beforeSet() {}\n\t\t}, {\n\t\t\tkey: \"beforeSync\",\n\t\t\tvalue: function beforeSync() {}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.beforeClear();\n\t\t\t\tthis.total = 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.has(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\tthis.adapters.get(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 batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lazyLoad = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\t\t\t\tvar retry = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tif (og) {\n\t\t\t\t\tthis.beforeDelete(key, batch, lazyLoad, retry);\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\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_this2.ondelete(arg, batch, retry, lazyLoad);\n\n\t\t\t\t\tif (_this2.versioning) {\n\t\t\t\t\t\t_this2.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lazyLoad) {\n\t\t\t\t\t\t_this2.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this2.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from 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 (_this2.logging) {\n\t\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\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!batch && !retry && _this2.uri) {\n\t\t\t\t\t\t\tif (_this2.debounced.has(key)) {\n\t\t\t\t\t\t\t\tclearTimeout(_this2.debounced.get(key));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this2.debounced.set(key, setTimeout(function () {\n\t\t\t\t\t\t\t\t_this2.debounced.delete(key);\n\t\t\t\t\t\t\t\t_this2.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_this2.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\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\t}\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}, _this2.debounce));\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_this2.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 _this3 = 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(function (a, b) {\n\t\t\t\t\treturn a.localeCompare(b);\n\t\t\t\t}).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(_this3.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 _this4 = 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\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(_this4.get(key, raw));\n\t\t\t\t\t}\n\t\t\t\t}, this);\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 || this.data);\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, map) {\n\t\t\t\treturn (map || this.data).has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other, on) {\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 || this.key, 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 || this.key, 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 _this5 = 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 _this5.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 _this6 = 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 (_this6.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 ? _this6.batch(arg, \"set\", true) : _this6.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this6.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 _this7 = 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\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this7.key ? datum[_this7.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this7.data.set(key, datum);\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\tthis.adapters.set(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 _this8 = this;\n\n\t\t\t\tvar indices = index ? [index] : this.index;\n\n\t\t\t\tif (index && this.index.indexOf(index) === -1) {\n\t\t\t\t\tthis.index.push(index);\n\t\t\t\t}\n\n\t\t\t\teach(indices, function (i) {\n\t\t\t\t\treturn _this8.indexes.set(i, new Map());\n\t\t\t\t});\n\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\treturn each(indices, function (i) {\n\t\t\t\t\t\treturn setIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, i, _this8.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 _this9 = 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\t\t\t\t ref = [input, cfg];\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\tthis.beforeRequest.apply(this, ref);\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\"](_this9.list(_this9.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\treturn defer.reject(_this9.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(_this9.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 _this10 = 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 (_this10.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this10.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 (_this10.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this10.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 _this11 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = new Map(),\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\";\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 = _this11.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 (!result.has(key) && _this11.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tresult.set(key, _this11.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 ? Array.from(result.values()) : this.list.apply(this, _toConsumableArray(Array.from(result.values())));\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\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar lazyLoad = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\t\t\t\tvar retry = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 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\tthis.beforeSet(key, data, batch, override, lazyLoad, retry);\n\n\t\t\t\tif (!this.data.has(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_this12.onset(arg, batch, retry, lazyLoad);\n\n\t\t\t\t\tif (!lazyLoad) {\n\t\t\t\t\t\t_this12.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this12.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 (_this12.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\n\t\t\t\t\t\tif (!batch && !retry && _this12.uri) {\n\t\t\t\t\t\t\tif (_this12.debounced.has(key)) {\n\t\t\t\t\t\t\t\tclearTimeout(_this12.debounced.get(key));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this12.debounced.set(key, setTimeout(function () {\n\t\t\t\t\t\t\t\t_this12.debounced.delete(key);\n\t\t\t\t\t\t\t\t_this12.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t\t\t_this12.set(key, og, batch, true, lazyLoad, true).then(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\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\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t_this12.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\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\t\t}\n\t\t\t\t\t\t\t\t\t\t});\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}, _this12.debounce));\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_this12.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 _this13 = 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(_this13.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 _this14 = 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 = Array.from(this.adapters.keys()).map(function (i) {\n\t\t\t\t\treturn _this14.cmd.apply(_this14, [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 _this15 = 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\tthis.beforeSync(this.uri, clear);\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = _this15.source ? _this15.crawl(arg[0]) : arg[0];\n\n\t\t\t\t\t_this15.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this15.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this15.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t}).catch(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_this15.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this15.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 _this16 = 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 = createPatch(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_this16.patch = false;\n\t\t\t\t\t\t\t_this16.request(!data ? concatURI(_this16.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 _this17 = 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 (_this17.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 (_this17.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\tif (this.adapters.has(key)) {\n\t\t\t\t\tthis.adapters.delete(key);\n\t\t\t\t}\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\n\t\tvar obj = new Haro(config).reindex();\n\n\t\tvar 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(), (!node ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\tobj.worker = !node ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t}\n\n\t\tif (data) {\n\t\t\tobj.batch(data, \"set\");\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.4.2\";\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","add","keys","set","blob","Blob","type","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","push","iterate","obj","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","createPatch","ogdata","overwrite","op","path","s","Math","random","substring","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","reindex","functions","webWorker","node","worker","Function","URL","createObjectURL","batch","process","nextTick","fetch","require","Worker","webWorkerError","_ref","_ref$config","_ref$debounce","debounce","_ref$delimiter","_ref$id","_ref$index","_ref$key","_ref$logging","logging","_ref$patch","patch","_ref$pattern","_ref$source","source","_ref$versioning","versioning","this","adapters","debounced","method","credentials","headers","accept","content-type","total","uri","versions","args","_this","lazyLoad","defer","del","beforeBatch","all","then","onbatch","console","log","e","onerror","beforeClear","clear","onclear","_len","_key","apply","Error","_this2","retry","og","beforeDelete","ondelete","storage","success","message","stack","clearTimeout","setTimeout","transmit","catch","err","toArray","transform","entries","where","_this3","raw","list","_this4","ctx","other","offload","find","offset","_this5","max","registry","slice","_len2","_key2","_this6","payload","useWorker","_this7","datum","_this8","indices","_this9","cfg","ref","toUpperCase","body","beforeRequest","res","status","_headers","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","pair","return","onrequest","_this10","_this11","rgex","test","lset","values","override","_this12","beforeSet","onset","sync","limit","_this13","_this14","_len3","_key3","deferreds","_this15","beforeSync","request","crawl","Allow","allow","onsync","reduce","_this16","_this17","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.4.3\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 node = typeof process !== \"undefined\" && typeof process.nextTick === \"function\",\n\t Promise = global.Promise,\n\t Map = global.Map,\n\t Set = global.Set,\n\t fetch = global.fetch || (node ? require(\"node-fetch\") : undefined),\n\t Blob = global.Blob || (node ? require(\"Blob\") : undefined),\n\t Worker = global.Worker || (node ? require(\"tiny-worker\") : undefined),\n\t r = [8, 9, \"a\", \"b\"],\n\t regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t},\n\t webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\",\n\t webWorkerError = \"Web Worker not supported\";\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 = Array.from(input);\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\treturn result.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\treturn result.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\treturn new Blob([arg], { type: \"application/javascript\" });\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\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\treturn fn.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 createPatch() {\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 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\t\t\t lindex = void 0;\n\n\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\tlindex = indexes.get(i);\n\n\t\t\t\tif (!lindex.has(lidx)) {\n\t\t\t\t\tlindex.set(lidx, new Set());\n\t\t\t\t}\n\n\t\t\t\tlindex.get(lidx).add(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() {\n\t\t\tvar _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n\t\t\t _ref$config = _ref.config,\n\t\t\t config = _ref$config === undefined ? {} : _ref$config,\n\t\t\t _ref$debounce = _ref.debounce,\n\t\t\t debounce = _ref$debounce === undefined ? 0 : _ref$debounce,\n\t\t\t _ref$delimiter = _ref.delimiter,\n\t\t\t delimiter = _ref$delimiter === undefined ? \"|\" : _ref$delimiter,\n\t\t\t _ref$id = _ref.id,\n\t\t\t id = _ref$id === undefined ? uuid() : _ref$id,\n\t\t\t _ref$index = _ref.index,\n\t\t\t index = _ref$index === undefined ? [] : _ref$index,\n\t\t\t _ref$key = _ref.key,\n\t\t\t key = _ref$key === undefined ? \"\" : _ref$key,\n\t\t\t _ref$logging = _ref.logging,\n\t\t\t logging = _ref$logging === undefined ? true : _ref$logging,\n\t\t\t _ref$patch = _ref.patch,\n\t\t\t patch = _ref$patch === undefined ? false : _ref$patch,\n\t\t\t _ref$pattern = _ref.pattern,\n\t\t\t pattern = _ref$pattern === undefined ? \"\\\\s*|\\\\t*\" : _ref$pattern,\n\t\t\t _ref$source = _ref.source,\n\t\t\t source = _ref$source === undefined ? \"\" : _ref$source,\n\t\t\t _ref$versioning = _ref.versioning,\n\t\t\t versioning = _ref$versioning === undefined ? false : _ref$versioning;\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = new Map();\n\t\t\tthis.data = new Map();\n\t\t\tthis.debounce = debounce;\n\t\t\tthis.debounced = new Map();\n\t\t\tthis.delimiter = 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 = id;\n\t\t\tthis.index = index;\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = key;\n\t\t\tthis.logging = logging;\n\t\t\tthis.patch = patch;\n\t\t\tthis.pattern = pattern;\n\t\t\tthis.source = 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 = versioning;\n\n\t\t\tObject.defineProperty(this, \"registry\", {\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn Array.from(this.data.keys());\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (Object.keys(config).length > 1) {\n\t\t\t\tthis.config = merge(this.config, config);\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 _this = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"set\";\n\t\t\t\tvar lazyLoad = 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 _this.del(i, true, lazyLoad);\n\t\t\t\t} : function (i) {\n\t\t\t\t\treturn _this.set(null, i, true, true, lazyLoad);\n\t\t\t\t};\n\n\t\t\t\tthis.beforeBatch(args, type);\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_this.onbatch(type, arg);\n\n\t\t\t\t\tif (_this.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch successful on\", _this.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_this.onerror(\"batch\", e);\n\n\t\t\t\t\tif (_this.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch failure on\", _this.id);\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: \"beforeBatch\",\n\t\t\tvalue: function beforeBatch() {}\n\t\t}, {\n\t\t\tkey: \"beforeClear\",\n\t\t\tvalue: function beforeClear() {}\n\t\t}, {\n\t\t\tkey: \"beforeDelete\",\n\t\t\tvalue: function beforeDelete() {}\n\t\t}, {\n\t\t\tkey: \"beforeRequest\",\n\t\t\tvalue: function beforeRequest() {}\n\t\t}, {\n\t\t\tkey: \"beforeSet\",\n\t\t\tvalue: function beforeSet() {}\n\t\t}, {\n\t\t\tkey: \"beforeSync\",\n\t\t\tvalue: function beforeSync() {}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.beforeClear();\n\t\t\t\tthis.total = 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.has(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\tthis.adapters.get(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 batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lazyLoad = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\t\t\t\tvar retry = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tif (og) {\n\t\t\t\t\tthis.beforeDelete(key, batch, lazyLoad, retry);\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\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_this2.ondelete(arg, batch, retry, lazyLoad);\n\n\t\t\t\t\tif (_this2.versioning) {\n\t\t\t\t\t\t_this2.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lazyLoad) {\n\t\t\t\t\t\t_this2.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this2.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from 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 (_this2.logging) {\n\t\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\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!batch && !retry && _this2.uri) {\n\t\t\t\t\t\t\tif (_this2.debounced.has(key)) {\n\t\t\t\t\t\t\t\tclearTimeout(_this2.debounced.get(key));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this2.debounced.set(key, setTimeout(function () {\n\t\t\t\t\t\t\t\t_this2.debounced.delete(key);\n\t\t\t\t\t\t\t\t_this2.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_this2.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\tif (_this2.logging) {\n\t\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\t}\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}, _this2.debounce));\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_this2.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 _this3 = 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(function (a, b) {\n\t\t\t\t\treturn a.localeCompare(b);\n\t\t\t\t}).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(_this3.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 _this4 = 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\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(_this4.get(key, raw));\n\t\t\t\t\t}\n\t\t\t\t}, this);\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 || this.data);\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, map) {\n\t\t\t\treturn (map || this.data).has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other, on) {\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 || this.key, 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 || this.key, 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 _this5 = 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 _this5.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 _this6 = 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 (_this6.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 ? _this6.batch(arg, \"set\", true) : _this6.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this6.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 _this7 = 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\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this7.key ? datum[_this7.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this7.data.set(key, datum);\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\tthis.adapters.set(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 _this8 = this;\n\n\t\t\t\tvar indices = index ? [index] : this.index;\n\n\t\t\t\tif (index && this.index.indexOf(index) === -1) {\n\t\t\t\t\tthis.index.push(index);\n\t\t\t\t}\n\n\t\t\t\teach(indices, function (i) {\n\t\t\t\t\treturn _this8.indexes.set(i, new Map());\n\t\t\t\t});\n\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\treturn each(indices, function (i) {\n\t\t\t\t\t\treturn setIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, i, _this8.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 _this9 = 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\t\t\t\t ref = [input, cfg];\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\tthis.beforeRequest.apply(this, ref);\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\"](_this9.list(_this9.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\treturn defer.reject(_this9.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(_this9.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 _this10 = 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 (_this10.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this10.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 (_this10.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this10.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 _this11 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = new Map(),\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\";\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 = _this11.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 (!result.has(key) && _this11.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tresult.set(key, _this11.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 ? Array.from(result.values()) : this.list.apply(this, _toConsumableArray(Array.from(result.values())));\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\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar lazyLoad = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\t\t\t\tvar retry = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 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\tthis.beforeSet(key, data, batch, override, lazyLoad, retry);\n\n\t\t\t\tif (!this.data.has(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_this12.onset(arg, batch, retry, lazyLoad);\n\n\t\t\t\t\tif (!lazyLoad) {\n\t\t\t\t\t\t_this12.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this12.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 (_this12.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\n\t\t\t\t\t\tif (!batch && !retry && _this12.uri) {\n\t\t\t\t\t\t\tif (_this12.debounced.has(key)) {\n\t\t\t\t\t\t\t\tclearTimeout(_this12.debounced.get(key));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this12.debounced.set(key, setTimeout(function () {\n\t\t\t\t\t\t\t\t_this12.debounced.delete(key);\n\t\t\t\t\t\t\t\t_this12.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t\t\t_this12.set(key, og, batch, true, lazyLoad, true).then(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\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\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t_this12.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\t\t\tif (_this12.logging) {\n\t\t\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\t\t}\n\t\t\t\t\t\t\t\t\t\t});\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}, _this12.debounce));\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_this12.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 _this13 = 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(_this13.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 _this14 = 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 = Array.from(this.adapters.keys()).map(function (i) {\n\t\t\t\t\treturn _this14.cmd.apply(_this14, [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 _this15 = 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\tthis.beforeSync(this.uri, clear);\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = _this15.source ? _this15.crawl(arg[0]) : arg[0];\n\n\t\t\t\t\t_this15.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this15.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this15.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t}).catch(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_this15.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this15.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 _this16 = 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 = createPatch(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_this16.patch = false;\n\t\t\t\t\t\t\t_this16.request(!data ? concatURI(_this16.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 _this17 = 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 (_this17.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 (_this17.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\tif (this.adapters.has(key)) {\n\t\t\t\t\tthis.adapters.delete(key);\n\t\t\t\t}\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\n\t\tvar obj = new Haro(config).reindex();\n\n\t\tvar 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(), setIndex.toString(), (!node ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\tobj.worker = !node ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t}\n\n\t\tif (data) {\n\t\t\tobj.batch(data, \"set\");\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.4.3\";\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 328d214..2bf42d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "3.4.2", + "version": "3.4.3", "description": "Harō is a modern immutable DataStore", "main": "lib/haro.es6.js", "scripts": { diff --git a/src/factory.js b/src/factory.js index 2461f70..17dd193 100644 --- a/src/factory.js +++ b/src/factory.js @@ -13,7 +13,6 @@ iterate.toString(), joinData.toString(), keyIndex.toString(), - setIndexValue.toString(), setIndex.toString(), (!node ? "" : "self.") + "onmessage = " + onmessage.toString() + ";" ]; diff --git a/src/utility.js b/src/utility.js index 7ec3ffc..78b000d 100644 --- a/src/utility.js +++ b/src/utility.js @@ -255,20 +255,19 @@ return ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1); } - function setIndexValue (index, key, value) { - if (!index.has(key)) { - index.set(key, new Set()); - } - - index.get(key).add(value); - } - function setIndex (index, indexes, delimiter, key, data, indice, pattern) { each(!indice ? index : [indice], i => { - let lidx = keyIndex(i, data, delimiter, pattern); + let lidx = keyIndex(i, data, delimiter, pattern), + lindex; if (lidx !== undefined && lidx !== null) { - setIndexValue(indexes.get(i), lidx, key); + lindex = indexes.get(i); + + if (!lindex.has(lidx)) { + lindex.set(lidx, new Set()); + } + + lindex.get(lidx).add(key); } }); }