diff --git a/lib/haro.es6.js b/lib/haro.es6.js index 9c88a28..a6d04f9 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -542,17 +542,15 @@ console.error(err.stack || err.message || err); } - if (og) { - this.set(key, og, true, true).then(() => { - if (this.logging) { - console.log("Reverted", key); - } - }).catch(() => { - if (this.logging) { - console.log("Failed to revert", key); - } - }); - } + this.set(key, og, true, true).then(() => { + if (this.logging) { + console.log("Reverted", key); + } + }).catch(() => { + if (this.logging) { + console.log("Failed to revert", key); + } + }); }); } diff --git a/lib/haro.js b/lib/haro.js index 75247da..b4d382a 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -598,17 +598,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons console.error(err.stack || err.message || err); } - if (og) { - _this3.set(key, og, true, true).then(function () { - if (_this3.logging) { - console.log("Reverted", key); - } - }).catch(function () { - if (_this3.logging) { - console.log("Failed to revert", key); - } - }); - } + _this3.set(key, og, true, true).then(function () { + if (_this3.logging) { + console.log("Reverted", key); + } + }).catch(function () { + if (_this3.logging) { + console.log("Failed to revert", key); + } + }); }); } diff --git a/lib/haro.min.js b/lib/haro.min.js index e4ed58d..cb328d7 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2017 Jason Mulligan */ -"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b2&&void 0!==arguments[2]&&arguments[2],d=a.length,e=-1;if(c)for(;++e-1?a.split(c).sort(function(a,b){return a.localeCompare(b)}).map(function(a){return b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i.delete(d),0===i.size&&(i=null,g.delete(h)))})}function createIndexes(a,b,d,e,f){var g={};return each(b,function(a){g[a]={}}),each(a,function(a){var h=a[d];void 0!==h&&b.forEach(function(b){var d=keyIndex(b,a,e,f);c(g[b],d)||(g[b][d]=[]),g[b][d].push(h)})}),g}function iterate(a,b){a instanceof Object?each(Object.keys(a),function(c){b.call(a,a[c],c)}):each(a,b)}function g(a,b){return a instanceof Object&&b instanceof Object?each(Object.keys(b),function(c){a[c]instanceof Object&&b[c]instanceof Object?a[c]=g(a[c],b[c]):Array.isArray(a[c])&&Array.isArray(b[c])?a[c]=a[c].concat(b[c]):a[c]=b[c]}):a=Array.isArray(a)&&Array.isArray(b)?a.concat(b):b,a}function joinData(a,b,c,d,e){function f(a,b,c){var f=arguments.length>3&&void 0!==arguments[3]&&arguments[3],g=arguments.length>4&&void 0!==arguments[4]&&arguments[4],k=Object.keys(b[0]),l=g?function(a,b){return a[d]===b[e]}:function(a,b){return a[e]===b[d]};each(a,function(a){var d={},g=b.filter(function(b){return l(b,a)}),m=!0;return g.length>1?(i=!0,j+=a[e],m=!1):1===g.length?each([a,g[0]],function(a,b){return iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),each(k,function(a){d[c[1]+"_"+a]=null})),m&&Object.keys(d).length>0&&h.push(d),m},!0)}var g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"inner",h=[],i=!1,j="More than one record found on ";return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),i?j:h}function h(a){var b=JSON.parse(a.data),c=b.cmd,d=void 0;"index"===c&&(d=createIndexes(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=joinData(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=[];return d&&iterate(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),iterate(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(Math.random()+1)|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){each(f?[f]:a,function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c={};return a.forEach(function(a,d){var e=a;b&&Object.freeze(e),c[clone(d)]=e}),b&&Object.freeze(c),c}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],g=new Haro(b,e,f),i=void 0;if(u){i=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),c.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{g.worker=n?new Function(i.join("\n")):a.URL.createObjectURL(d(i.join("\n")))}catch(a){g.worker=null}}return g}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||require("node-fetch"),q=a.Blob||require("Blob"),r=a.Worker||require("tiny-worker"),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,each(Object.keys(c),function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,c){function d(){o.all(a.map(l)).then(h.resolve,h.reject)}var f=this,g=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=b(),j="del"===c,k=void 0,l=void 0,m=void 0;return l=j?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0,g)},this.patch?(j?k=i(this.limit(0,this.total,!0).map(function(a){return a[f.key]}),a,this.key,!0):(k=[],m={},each(a,function(a){var b=a[f.key];b?m[b]=a:k.push({op:"add",path:"/",value:a})}),k=k.concat(i(this.toObject(void 0,!1),m,this.key,!0))),k.length>0?this.request(e(this.uri,null),{method:"patch",body:JSON.stringify(k)}).then(d,h.reject):h.resolve()):d(),h.promise.then(function(a){return f.onbatch(c,a),f.logging&&console.log("Batch inserted data into",f.id),a},function(a){throw f.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry.length=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.logging&&console.log("Cleared",this.id),this}},{key:"cmd",value:function(a){var c=b();if(this.adapters[a]&&w[a]){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],e=b(),g=this.get(a,!0),h=void 0;return g?(h=this.registry.indexOf(a),0===h?this.registry.shift():h===this.registry.length-1?this.registry.pop():this.registry.splice(h,1),f(this.index,this.indexes,this.delimiter,a,g,this.pattern),this.data.delete(a),--this.total,e.resolve(a)):e.reject(new Error("Record not found")),e.promise.then(function(b){return c.ondelete(b),c.versioning&&c.versions.delete(a),c.storage("remove",a).then(function(b){b&&c.logging&&console.log("Deleted",a,"from persistent storage")},function(b){c.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c.uri&&!d&&c.transmit(a,null,g,!1,"delete").catch(function(b){c.logging&&console.error(b.stack||b.message||b),g&&c.set(a,g,!0,!0).then(function(){c.logging&&console.log("Reverted",a)}).catch(function(){c.logging&&console.log("Failed to revert",a)})}),b},function(a){throw c.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"records",b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=Object.keys(a).sort().join(this.delimiter),e=keyIndex(d,a,this.delimiter),f=[];return this.indexes.has(d)&&(this.indexes.get(d).get(e)||new Set).forEach(function(a){f.push(b.get(a,c))}),c?f:this.list.apply(this,f)}},{key:"filter",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=void 0;return e=c?function(b,c){a(b,c)===!0&&d.push(b)}:function(c,e){a(c,e)===!0&&d.push(b.list(e,c))},this.forEach(e),c?d:this.list.apply(this,d)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,c){a(clone(b),clone(c))},b),this}},{key:"get",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=clone(this.data.get(a)||null);return c&&!b?this.list(a,c):c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.key,d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"inner",e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],f=b(),g=void 0;return a.total>0?(g=e.length>0?this.offload([[this.id,a.id],this.find(e[0],!0),e[1]?a.find(e[1],!0):a.toArray(null,!0),this.key,c,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c,d],"join"),g.then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject)):f.resolve([]),f.promise}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this.registry.slice(a,a+c).map(function(a){return b.get(a,d)});return d?e:this.list.apply(this,_toConsumableArray(e))}},{key:"list",value:function(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0===c,e=d?this.id:c;return d&&this.clear(),this.cmd(b,"get",c).then(function(f){return a.logging&&console.log("Loaded",e,"from",b,"persistent storage"),d?a.batch(f,"set",!0):a.set(c,f,!0,!0,!0)},function(c){throw a.logging&&console.error("Error loading",e,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"map",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=[];return this.forEach(function(b,d){c.push(a(b,d))}),b?c:this.list.apply(this,c)}},{key:"offload",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"index",d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.index,e=b(),f=void 0,g=void 0;return this.worker?(g=this.useWorker(e),g&&("index"===c&&(f={cmd:c,index:d,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}),"join"===c&&(f={cmd:c,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),g.postMessage(JSON.stringify(f,null,0)))):e.reject(new Error(v)),e.promise}},{key:"onbatch",value:function(){}},{key:"onclear",value:function(){}},{key:"ondelete",value:function(){}},{key:"onerror",value:function(){}},{key:"onrequest",value:function(a){return a}},{key:"onset",value:function(){}},{key:"onsync",value:function(){}},{key:"override",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"records",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,f=b();return"indexes"===d?(this.indexes=this.transform(a,e),f.resolve(!0)):"records"===d?(this.data.clear(),this.indexes.clear(),this.registry.length=0,each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a),c.registry.push(b)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return w[a]=b,this}},{key:"reindex",value:function(a){var b=this;return a?(this.index.indexOf(a)===-1&&this.index.push(a),this.indexes.set(a,new Map),this.forEach(function(c,d){setIndex(b.index,b.indexes,b.delimiter,d,c,a,b.pattern)})):(this.indexes.clear(),this.index.forEach(function(a){b.indexes.set(a,new Map)}),this.forEach(function(a,c){b.index.forEach(function(d){setIndex(b.index,b.indexes,b.delimiter,c,a,d,b.pattern)})})),this}},{key:"request",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=b(),f=g(clone(this.config),d);return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,p(a,f).then(function(a){var b=a.status,d=void 0;a.headers._headers?(d={},each(Object.keys(a.headers._headers),function(b){d[b]=a.headers._headers[b].join(", ")})):d=k(a.headers),a[a.headers.get("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){e.reject(c.list(a.message,b,d))})},function(a){e.reject(c.list(a.message,0,{}))}),e.promise}},{key:"save",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo";return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var c=this,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0;return a&&(i=b?Array.isArray(b)?b:[b]:this.index,i.forEach(function(b){var i=c.indexes.get(b);i&&i.forEach(function(i,j){switch(!0){case f&&a(j,b):case g&&a.test(Array.isArray(j)?j.join(", "):j):case j===a:i.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a,d)))})}})})),d?e:this.list.apply(this,e)}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this,h=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=b(),k=clone(c),m=void 0,n=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==k[this.key]?k[this.key]:l()),this.data.has(a)?(n=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,n,this.pattern),m="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(n))),h||(k=g(clone(n),k))):(this.registry[this.total]=a,++this.total,m="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,k),setIndex(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),j.resolve(this.get(a)),j.promise.then(function(b){return e.onset(b),!d&&e.uri&&e.transmit(a,k,n,h,m).catch(function(b){e.logging&&console.error(b.stack||b.message||b),n?e.set(a,n,!0,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)}):e.del(a,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)})}),i||e.storage("set",a,k).then(function(b){b&&e.logging&&console.log("Saved",a,"to persistent storage")},function(b){e.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),b},function(a){throw e.onerror("set",a),a})}},{key:"setUri",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=b();return this.uri=a,this.uri?this.sync(c).then(d.resolve,d.reject):d.resolve([]),d.promise}},{key:"sort",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return c=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){e.push(b)}),each(e.sort(),function(a){f.get(a).forEach(function(a){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(){f.resolve(!0)},f.reject):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,c=arguments.length>0&&void 0!==arguments[0]&&arguments[0],d=b(),e=!0;return this.request(this.uri).then(function(b){var f=void 0;a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1;try{f=a.source?a.crawl(b[0]):b[0]}catch(a){e=!1,d.reject(a)}e&&(c&&a.clear(),a.batch(f,"set").then(d.resolve,d.reject))},function(a){d.reject(a[0]||a)}),d.promise.then(function(b){return a.onsync(b),b},function(b){throw a.onerror("sync",b),b})}},{key:"toArray",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return a?c=a.map(function(a){return b?a[1]:clone(a[1])}):(c=this.limit(0,this.total,!0),b&&each(c,function(a){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=void 0;return 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),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(a){405===a[1]?(f.patch=!1,f.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject)):j.reject(a)})):this.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject),j.promise}},{key:"unload",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new r(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="3.1.4","undefined"!=typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):a.haro=m}("undefined"!=typeof window?window:global); +"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b2&&void 0!==arguments[2]&&arguments[2],d=a.length,e=-1;if(c)for(;++e-1?a.split(c).sort(function(a,b){return a.localeCompare(b)}).map(function(a){return b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i.delete(d),0===i.size&&(i=null,g.delete(h)))})}function createIndexes(a,b,d,e,f){var g={};return each(b,function(a){g[a]={}}),each(a,function(a){var h=a[d];void 0!==h&&b.forEach(function(b){var d=keyIndex(b,a,e,f);c(g[b],d)||(g[b][d]=[]),g[b][d].push(h)})}),g}function iterate(a,b){a instanceof Object?each(Object.keys(a),function(c){b.call(a,a[c],c)}):each(a,b)}function g(a,b){return a instanceof Object&&b instanceof Object?each(Object.keys(b),function(c){a[c]instanceof Object&&b[c]instanceof Object?a[c]=g(a[c],b[c]):Array.isArray(a[c])&&Array.isArray(b[c])?a[c]=a[c].concat(b[c]):a[c]=b[c]}):a=Array.isArray(a)&&Array.isArray(b)?a.concat(b):b,a}function joinData(a,b,c,d,e){function f(a,b,c){var f=arguments.length>3&&void 0!==arguments[3]&&arguments[3],g=arguments.length>4&&void 0!==arguments[4]&&arguments[4],k=Object.keys(b[0]),l=g?function(a,b){return a[d]===b[e]}:function(a,b){return a[e]===b[d]};each(a,function(a){var d={},g=b.filter(function(b){return l(b,a)}),m=!0;return g.length>1?(i=!0,j+=a[e],m=!1):1===g.length?each([a,g[0]],function(a,b){return iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),each(k,function(a){d[c[1]+"_"+a]=null})),m&&Object.keys(d).length>0&&h.push(d),m},!0)}var g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"inner",h=[],i=!1,j="More than one record found on ";return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),i?j:h}function h(a){var b=JSON.parse(a.data),c=b.cmd,d=void 0;"index"===c&&(d=createIndexes(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=joinData(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=[];return d&&iterate(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),iterate(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(Math.random()+1)|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){each(f?[f]:a,function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c={};return a.forEach(function(a,d){var e=a;b&&Object.freeze(e),c[clone(d)]=e}),b&&Object.freeze(c),c}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],g=new Haro(b,e,f),i=void 0;if(u){i=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),c.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{g.worker=n?new Function(i.join("\n")):a.URL.createObjectURL(d(i.join("\n")))}catch(a){g.worker=null}}return g}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=a.Promise,Map=a.Map,Set=a.Set,p=a.fetch||require("node-fetch"),q=a.Blob||require("Blob"),r=a.Worker||require("tiny-worker"),s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof q&&"undefined"!=typeof r,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,each(Object.keys(c),function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,c){function d(){o.all(a.map(l)).then(h.resolve,h.reject)}var f=this,g=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=b(),j="del"===c,k=void 0,l=void 0,m=void 0;return l=j?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0,g)},this.patch?(j?k=i(this.limit(0,this.total,!0).map(function(a){return a[f.key]}),a,this.key,!0):(k=[],m={},each(a,function(a){var b=a[f.key];b?m[b]=a:k.push({op:"add",path:"/",value:a})}),k=k.concat(i(this.toObject(void 0,!1),m,this.key,!0))),k.length>0?this.request(e(this.uri,null),{method:"patch",body:JSON.stringify(k)}).then(d,h.reject):h.resolve()):d(),h.promise.then(function(a){return f.onbatch(c,a),f.logging&&console.log("Batch inserted data into",f.id),a},function(a){throw f.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry.length=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.logging&&console.log("Cleared",this.id),this}},{key:"cmd",value:function(a){var c=b();if(this.adapters[a]&&w[a]){for(var d=arguments.length,e=Array(d>1?d-1:0),f=1;f1&&void 0!==arguments[1]&&arguments[1],e=b(),g=this.get(a,!0),h=void 0;return g?(h=this.registry.indexOf(a),0===h?this.registry.shift():h===this.registry.length-1?this.registry.pop():this.registry.splice(h,1),f(this.index,this.indexes,this.delimiter,a,g,this.pattern),this.data.delete(a),--this.total,e.resolve(a)):e.reject(new Error("Record not found")),e.promise.then(function(b){return c.ondelete(b),c.versioning&&c.versions.delete(a),c.storage("remove",a).then(function(b){b&&c.logging&&console.log("Deleted",a,"from persistent storage")},function(b){c.logging&&console.error("Error deleting",a,"from persistent storage:",b.message||b.stack||b)}),c.uri&&!d&&c.transmit(a,null,g,!1,"delete").catch(function(b){c.logging&&console.error(b.stack||b.message||b),c.set(a,g,!0,!0).then(function(){c.logging&&console.log("Reverted",a)}).catch(function(){c.logging&&console.log("Failed to revert",a)})}),b},function(a){throw c.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"records",b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=Object.keys(a).sort().join(this.delimiter),e=keyIndex(d,a,this.delimiter),f=[];return this.indexes.has(d)&&(this.indexes.get(d).get(e)||new Set).forEach(function(a){f.push(b.get(a,c))}),c?f:this.list.apply(this,f)}},{key:"filter",value:function(a){var b=this,c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=[],e=void 0;return e=c?function(b,c){a(b,c)===!0&&d.push(b)}:function(c,e){a(c,e)===!0&&d.push(b.list(e,c))},this.forEach(e),c?d:this.list.apply(this,d)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,c){a(clone(b),clone(c))},b),this}},{key:"get",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=clone(this.data.get(a)||null);return c&&!b?this.list(a,c):c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.key,d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"inner",e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],f=b(),g=void 0;return a.total>0?(g=e.length>0?this.offload([[this.id,a.id],this.find(e[0],!0),e[1]?a.find(e[1],!0):a.toArray(null,!0),this.key,c,d],"join"):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,c,d],"join"),g.then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject)):f.resolve([]),f.promise}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,b=this,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this.registry.slice(a,a+c).map(function(a){return b.get(a,d)});return d?e:this.list.apply(this,_toConsumableArray(e))}},{key:"list",value:function(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0===c,e=d?this.id:c;return d&&this.clear(),this.cmd(b,"get",c).then(function(f){return a.logging&&console.log("Loaded",e,"from",b,"persistent storage"),d?a.batch(f,"set",!0):a.set(c,f,!0,!0,!0)},function(c){throw a.logging&&console.error("Error loading",e,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"map",value:function(a){var b=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=[];return this.forEach(function(b,d){c.push(a(b,d))}),b?c:this.list.apply(this,c)}},{key:"offload",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"index",d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.index,e=b(),f=void 0,g=void 0;return this.worker?(g=this.useWorker(e),g&&("index"===c&&(f={cmd:c,index:d,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}),"join"===c&&(f={cmd:c,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),g.postMessage(JSON.stringify(f,null,0)))):e.reject(new Error(v)),e.promise}},{key:"onbatch",value:function(){}},{key:"onclear",value:function(){}},{key:"ondelete",value:function(){}},{key:"onerror",value:function(){}},{key:"onrequest",value:function(a){return a}},{key:"onset",value:function(){}},{key:"onsync",value:function(){}},{key:"override",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"records",e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,f=b();return"indexes"===d?(this.indexes=this.transform(a,e),f.resolve(!0)):"records"===d?(this.data.clear(),this.indexes.clear(),this.registry.length=0,each(a,function(a){var b=c.key?a[c.key]:l()||l();c.data.set(b,a),c.registry.push(b)}),this.total=this.data.size,f.resolve(!0)):f.reject(new Error("Invalid type")),f.promise}},{key:"register",value:function(a,b){return w[a]=b,this}},{key:"reindex",value:function(a){var b=this;return a?(this.index.indexOf(a)===-1&&this.index.push(a),this.indexes.set(a,new Map),this.forEach(function(c,d){setIndex(b.index,b.indexes,b.delimiter,d,c,a,b.pattern)})):(this.indexes.clear(),this.index.forEach(function(a){b.indexes.set(a,new Map)}),this.forEach(function(a,c){b.index.forEach(function(d){setIndex(b.index,b.indexes,b.delimiter,c,a,d,b.pattern)})})),this}},{key:"request",value:function(a){var c=this,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=b(),f=g(clone(this.config),d);return f.method=f.method.toUpperCase(),"DELETE"===f.method&&delete f.body,p(a,f).then(function(a){var b=a.status,d=void 0;a.headers._headers?(d={},each(Object.keys(a.headers._headers),function(b){d[b]=a.headers._headers[b].join(", ")})):d=k(a.headers),a[a.headers.get("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){e.reject(c.list(a.message,b,d))})},function(a){e.reject(c.list(a.message,0,{}))}),e.promise}},{key:"save",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo";return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var c=this,d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0;return a&&(i=b?Array.isArray(b)?b:[b]:this.index,i.forEach(function(b){var i=c.indexes.get(b);i&&i.forEach(function(i,j){switch(!0){case f&&a(j,b):case g&&a.test(Array.isArray(j)?j.join(", "):j):case j===a:i.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a,d)))})}})})),d?e:this.list.apply(this,e)}},{key:"set",value:function(a,c){var d=arguments.length>2&&void 0!==arguments[2]&&arguments[2],e=this,h=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],j=b(),k=clone(c),m=void 0,n=void 0;return void 0!==a&&null!==a||(a=this.key&&void 0!==k[this.key]?k[this.key]:l()),this.data.has(a)?(n=this.get(a,!0),f(this.index,this.indexes,this.delimiter,a,n,this.pattern),m="put",this.versioning&&this.versions.get(a).add(Object.freeze(clone(n))),h||(k=g(clone(n),k))):(this.registry[this.total]=a,++this.total,m="post",this.versioning&&this.versions.set(a,new Set)),this.data.set(a,k),setIndex(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),j.resolve(this.get(a)),j.promise.then(function(b){return e.onset(b),!d&&e.uri&&e.transmit(a,k,n,h,m).catch(function(b){e.logging&&console.error(b.stack||b.message||b),n?e.set(a,n,!0,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)}):e.del(a,!0).then(function(){e.logging&&console.log("Reverted",a)}).catch(function(){e.logging&&console.log("Failed to revert",a)})}),i||e.storage("set",a,k).then(function(b){b&&e.logging&&console.log("Saved",a,"to persistent storage")},function(b){e.logging&&console.error("Error saving",a,"to persistent storage:",b.message||b.stack||b)}),b},function(a){throw e.onerror("set",a),a})}},{key:"setUri",value:function(a){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1],d=b();return this.uri=a,this.uri?this.sync(c).then(d.resolve,d.reject):d.resolve([]),d.promise}},{key:"sort",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return c=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){e.push(b)}),each(e.sort(),function(a){f.get(a).forEach(function(a){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(){f.resolve(!0)},f.reject):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,c=arguments.length>0&&void 0!==arguments[0]&&arguments[0],d=b(),e=!0;return this.request(this.uri).then(function(b){var f=void 0;a.patch=(b[2].Allow||b[2].allow||"").indexOf("PATCH")>-1;try{f=a.source?a.crawl(b[0]):b[0]}catch(a){e=!1,d.reject(a)}e&&(c&&a.clear(),a.batch(f,"set").then(d.resolve,d.reject))},function(a){d.reject(a[0]||a)}),d.promise.then(function(b){return a.onsync(b),b},function(b){throw a.onerror("sync",b),b})}},{key:"toArray",value:function(a){var b=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=void 0;return a?c=a.map(function(a){return b?a[1]:clone(a[1])}):(c=this.limit(0,this.total,!0),b&&each(c,function(a){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=void 0;return 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),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(a){405===a[1]?(f.patch=!1,f.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject)):j.reject(a)})):this.request(k,{method:h,body:JSON.stringify(c,null,0)}).then(j.resolve,j.reject),j.promise}},{key:"unload",value:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"mongo",c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new r(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="3.1.4","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 e1a4e3e..3557652 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["haro.js"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","from","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","deferred","promise","resolver","rejecter","Promise","resolve","reject","has","a","b","each","arg","fn","exit","arguments","undefined","nth","cast","input","result","Map","forEach","value","Set","push","add","keys","set","blob","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","map","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","iterate","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","patch","ogdata","overwrite","op","path","s","Math","random","substring","setIndexValue","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","fetch","require","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","next","all","then","defer","_this2","lload","del","hash","limit","toObject","request","body","onbatch","console","log","onerror","clear","onclear","_len","_key","apply","Error","_this3","og","shift","pop","splice","ondelete","storage","success","message","stack","transmit","catch","err","toArray","transform","entries","where","_this4","raw","list","_this5","lfn","ctx","other","offload","find","offset","_this6","max","slice","_len2","_key2","_this7","payload","useWorker","_this8","datum","_this9","_this10","cfg","toUpperCase","res","status","_headers","onrequest","_this11","_this12","rgex","test","seen","lset","_this13","override","onset","sync","_this14","_this15","_len3","_key3","deferreds","_this16","Allow","allow","crawl","onsync","reduce","_this17","_this18","values","terminate","version","exports","module","define","amd","haro","window"],"mappings":"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","file":"haro.min.js","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2017\r\n * @license BSD-3-Clause\r\n * @link https://github.com/avoidwork/haro\r\n * @version 3.1.4\r\n */\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = global.Promise;\n\tvar Map = global.Map;\n\tvar Set = global.Set;\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar Blob = global.Blob || require(\"Blob\");\n\tvar Worker = global.Worker || require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction deferred() {\n\t\tvar promise = void 0,\n\t\t resolver = void 0,\n\t\t rejecter = void 0;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction has(a, b) {\n\t\treturn b in a;\n\t}\n\n\tfunction each(arg, fn) {\n\t\tvar exit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\tvar nth = arg.length;\n\n\t\tvar i = -1;\n\n\t\tif (exit) {\n\t\t\twhile (++i < nth) {\n\t\t\t\tif (fn(arg[i], i) === false) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\twhile (++i < nth) {\n\t\t\t\tfn(arg[i], i);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cast(input) {\n\t\tvar result = void 0;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase Array.isArray(input):\n\t\t\t\tresult = new Set();\n\t\t\t\teach(input, function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\teach(Object.keys(input), function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = void 0;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar result = void 0;\n\n\t\tif (key.indexOf(delimiter) > -1) {\n\t\t\tresult = key.split(delimiter).sort(function (a, b) {\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t}).map(function (i) {\n\t\t\t\treturn data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tvar o = void 0;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to.delete(key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\to = null;\n\t\t\t\t\tidx.delete(value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\teach(indexes, function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\teach(records, function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (!has(result[index], lindex)) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\teach(Object.keys(obj), function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\teach(obj, fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tif (a instanceof Object && b instanceof Object) {\n\t\t\teach(Object.keys(b), function (i) {\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\n\t\t\t\t} else {\n\t\t\t\t\ta[i] = b[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\n\t\t\ta = a.concat(b);\n\t\t} else {\n\t\t\ta = b;\n\t\t}\n\n\t\treturn a;\n\t}\n\n\tfunction joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : \"inner\";\n\n\t\tvar result = [];\n\n\t\tvar error = false,\n\t\t errorMsg = \"More than one record found on \";\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\tvar reverse = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = !reverse ? function (x, i) {\n\t\t\t\treturn x[on] === i[key];\n\t\t\t} : function (x, i) {\n\t\t\t\treturn x[key] === i[on];\n\t\t\t};\n\n\t\t\teach(left, function (i) {\n\t\t\t\tvar comp = {},\n\t\t\t\t c = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg += i[on];\n\t\t\t\t\tvalid = false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\teach([i, c[0]], function (x, idx) {\n\t\t\t\t\t\treturn iterate(x, function (v, k) {\n\t\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else if (include) {\n\t\t\t\t\titerate(i, function (v, k) {\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\n\t\t\t\t\t});\n\n\t\t\t\t\teach(keys, function (k) {\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\n\t\t\t\treturn valid;\n\t\t\t}, true);\n\t\t}\n\n\t\tif (type === \"inner\") {\n\t\t\tjoin(a, b, id);\n\t\t}\n\n\t\tif (type === \"left\") {\n\t\t\tjoin(a, b, id, true);\n\t\t}\n\n\t\tif (type === \"right\") {\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\n\t\t}\n\n\t\treturn !error ? result : errorMsg;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd;\n\n\t\tvar result = void 0;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\n\t\t}\n\n\t\tif (cmd === \"join\") {\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n\t\tvar overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\teach(!indice ? index : [indice], function (i) {\n\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tvar obj = value;\n\n\t\t\tif (frozen) {\n\t\t\t\tObject.freeze(obj);\n\t\t\t}\n\n\t\t\tresult[clone(key)] = obj;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tObject.freeze(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\teach(Object.keys(config), function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\";\n\n\t\t\t\tvar data = void 0,\n\t\t\t\t fn = void 0,\n\t\t\t\t hash = void 0;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function fn(i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function fn(i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.limit(0, this.total, true).map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\teach(args, function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(undefined, false), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this2.onbatch(type, arg);\n\n\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch inserted data into\", _this2.id);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this2.onerror(\"batch\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry.length = 0;\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\t\t\t\tthis.reindex().onclear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"crawl\",\n\t\t\tvalue: function crawl(arg) {\n\t\t\t\tvar result = clone(arg);\n\n\t\t\t\teach((this.source || \"\").split(\".\"), function (i) {\n\t\t\t\t\tresult = result[i];\n\t\t\t\t});\n\n\t\t\t\treturn result || arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tvar index = void 0;\n\n\t\t\t\tif (og) {\n\t\t\t\t\tindex = this.registry.indexOf(key);\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tthis.registry.shift();\n\t\t\t\t\t} else if (index === this.registry.length - 1) {\n\t\t\t\t\t\tthis.registry.pop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.registry.splice(index, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tthis.data.delete(key);\n\t\t\t\t\t--this.total;\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this3.ondelete(arg);\n\n\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t_this3.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (_this3.uri && !batch) {\n\t\t\t\t\t\t_this3.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t_this3.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this3.onerror(\"delete\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"records\";\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\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\tresult.push(_this4.get(i, raw));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tvar lfn = void 0;\n\n\t\t\t\tif (!raw) {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(_this5.list(key, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.forEach(lfn);\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = clone(this.data.get(key) || null);\n\n\t\t\t\treturn result && !raw ? this.list(key, result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other) {\n\t\t\t\tvar on = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.key;\n\t\t\t\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"inner\";\n\t\t\t\tvar where = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar promise = void 0;\n\n\t\t\t\tif (other.total > 0) {\n\t\t\t\t\tif (where.length > 0) {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on, type], \"join\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\");\n\t\t\t\t\t}\n\n\t\t\t\t\tpromise.then(function (arg) {\n\t\t\t\t\t\tif (typeof arg === \"string\") {\n\t\t\t\t\t\t\tdefer.reject(new Error(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit() {\n\t\t\t\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = this.registry.slice(offset, offset + max).map(function (i) {\n\t\t\t\t\treturn _this6.get(i, raw);\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, _toConsumableArray(result));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"list\",\n\t\t\tvalue: function list() {\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\treturn Object.freeze(args.map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this7.batch(arg, \"set\", true) : _this7.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tresult.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"index\";\n\t\t\t\tvar index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.index;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar payload = void 0,\n\t\t\t\t obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (cmd === \"index\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (cmd === \"join\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tids: data[0],\n\t\t\t\t\t\t\t\trecords: [data[1], data[2]],\n\t\t\t\t\t\t\t\tkey: data[3],\n\t\t\t\t\t\t\t\ton: data[4],\n\t\t\t\t\t\t\t\ttype: data[5]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onbatch\",\n\t\t\tvalue: function onbatch() {}\n\t\t}, {\n\t\t\tkey: \"onclear\",\n\t\t\tvalue: function onclear() {}\n\t\t}, {\n\t\t\tkey: \"ondelete\",\n\t\t\tvalue: function ondelete() {}\n\t\t}, {\n\t\t\tkey: \"onerror\",\n\t\t\tvalue: function onerror() {}\n\t\t}, {\n\t\t\tkey: \"onrequest\",\n\t\t\tvalue: function onrequest(arg) {\n\t\t\t\treturn arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"records\";\n\t\t\t\tvar fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data.clear();\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.registry.length = 0;\n\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this8.key ? datum[_this8.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this8.data.set(key, datum);\n\t\t\t\t\t\t_this8.registry.push(key);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\t_this9.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\t_this9.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, i, _this9.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.index.indexOf(index) === -1) {\n\t\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, index, _this9.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(clone(this.config), config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tif (cfg.method === \"DELETE\") {\n\t\t\t\t\tdelete cfg.body;\n\t\t\t\t}\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = void 0;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\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\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](_this10.list(_this10.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(_this10.list(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(_this10.list(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this11.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this11.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set();\n\n\t\t\t\tvar indexes = void 0;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tif (index) {\n\t\t\t\t\t\tindexes = Array.isArray(index) ? index : [index];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindexes = this.index;\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this12.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this12.get(key, raw));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar lload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar x = clone(data),\n\t\t\t\t method = void 0,\n\t\t\t\t og = void 0;\n\n\t\t\t\tif (key === undefined || key === null) {\n\t\t\t\t\tkey = this.key && x[this.key] !== undefined ? x[this.key] : uuid();\n\t\t\t\t}\n\n\t\t\t\tif (!this.data.has(key)) {\n\t\t\t\t\tthis.registry[this.total] = key;\n\t\t\t\t\t++this.total;\n\t\t\t\t\tmethod = \"post\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.set(key, new Set());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tog = this.get(key, true);\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tmethod = \"put\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tx = merge(clone(og), x);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.data.set(key, x);\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\n\t\t\t\tdefer.resolve(this.get(key));\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this13.onset(arg);\n\n\t\t\t\t\tif (!batch && _this13.uri) {\n\t\t\t\t\t\t_this13.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t_this13.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_this13.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this13.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this13.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", key, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", key, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this13.onerror(\"set\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.limit(0, this.total, true).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [];\n\n\t\t\t\tvar lindex = void 0;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t});\n\n\t\t\t\teach(keys.sort(), function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this14.get(key, raw));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tfor (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n\t\t\t\t\targs[_key3] = arguments[_key3];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = Object.keys(this.adapters).map(function (i) {\n\t\t\t\t\treturn _this15.cmd.apply(_this15, [i].concat(args));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this16 = this;\n\n\t\t\t\tvar clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = void 0;\n\n\t\t\t\t\t_this16.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (_this16.source) {\n\t\t\t\t\t\t\tdata = _this16.crawl(arg[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdata = arg[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (valid) {\n\t\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t\t_this16.clear();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this16.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t\t}\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this16.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this16.onerror(\"sync\", e);\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tresult = data.map(function (i) {\n\t\t\t\t\t\treturn frozen ? i[1] : clone(i[1]);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\teach(result, function (i) {\n\t\t\t\t\t\t\tObject.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 = void 0;\n\n\t\t\t\tresult = !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\tif (frozen) {\n\t\t\t\t\tObject.freeze(result);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transmit\",\n\t\t\tvalue: function transmit(key, data, og) {\n\t\t\t\tvar _this17 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar method = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"post\";\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t uri = concatURI(this.uri, data ? key : null);\n\n\t\t\t\tvar body = void 0;\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tbody = [{ op: \"remove\", path: \"/\", value: key }];\n\t\t\t\t\t} else if (!og) {\n\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: data }];\n\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: data }];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = patch(og, data, this.key);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.request(uri, { method: \"patch\", body: JSON.stringify(body, null, 0) }).then(defer.resolve, function (e) {\n\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t_this17.patch = false;\n\t\t\t\t\t\t\t_this17.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this18 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t}();\n\n\tfunction factory() {\n\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar indexes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = void 0;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.1.4\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\" && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof window !== \"undefined\" ? window : global);\n"]} \ No newline at end of file +{"version":3,"sources":["haro.js"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","from","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","deferred","promise","resolver","rejecter","Promise","resolve","reject","has","a","b","each","arg","fn","exit","arguments","undefined","nth","cast","input","result","Map","forEach","value","Set","push","add","keys","set","blob","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","map","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","iterate","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","error","errorMsg","v","k","onmessage","ev","cmd","postMessage","patch","ogdata","overwrite","op","path","s","Math","random","substring","setIndexValue","setIndex","indice","lidx","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","fetch","require","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","next","all","then","defer","_this2","lload","del","hash","limit","toObject","request","body","onbatch","console","log","onerror","clear","onclear","_len","_key","apply","Error","_this3","og","shift","pop","splice","ondelete","storage","success","message","stack","transmit","catch","err","toArray","transform","entries","where","_this4","raw","list","_this5","lfn","ctx","other","offload","find","offset","_this6","max","slice","_len2","_key2","_this7","payload","useWorker","_this8","datum","_this9","_this10","cfg","toUpperCase","res","status","_headers","onrequest","_this11","_this12","rgex","test","seen","lset","_this13","override","onset","sync","_this14","_this15","_len3","_key3","deferreds","_this16","Allow","allow","crawl","onsync","reduce","_this17","_this18","values","terminate","version","exports","module","define","amd","haro","window"],"mappings":"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","file":"haro.min.js","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2017\r\n * @license BSD-3-Clause\r\n * @link https://github.com/avoidwork/haro\r\n * @version 3.1.4\r\n */\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = global.Promise;\n\tvar Map = global.Map;\n\tvar Set = global.Set;\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar Blob = global.Blob || require(\"Blob\");\n\tvar Worker = global.Worker || require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction deferred() {\n\t\tvar promise = void 0,\n\t\t resolver = void 0,\n\t\t rejecter = void 0;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction has(a, b) {\n\t\treturn b in a;\n\t}\n\n\tfunction each(arg, fn) {\n\t\tvar exit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\tvar nth = arg.length;\n\n\t\tvar i = -1;\n\n\t\tif (exit) {\n\t\t\twhile (++i < nth) {\n\t\t\t\tif (fn(arg[i], i) === false) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\twhile (++i < nth) {\n\t\t\t\tfn(arg[i], i);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cast(input) {\n\t\tvar result = void 0;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase Array.isArray(input):\n\t\t\t\tresult = new Set();\n\t\t\t\teach(input, function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\teach(Object.keys(input), function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = void 0;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar result = void 0;\n\n\t\tif (key.indexOf(delimiter) > -1) {\n\t\t\tresult = key.split(delimiter).sort(function (a, b) {\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t}).map(function (i) {\n\t\t\t\treturn data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tvar o = void 0;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to.delete(key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\to = null;\n\t\t\t\t\tidx.delete(value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\teach(indexes, function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\teach(records, function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (!has(result[index], lindex)) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\teach(Object.keys(obj), function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\teach(obj, fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tif (a instanceof Object && b instanceof Object) {\n\t\t\teach(Object.keys(b), function (i) {\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\n\t\t\t\t} else {\n\t\t\t\t\ta[i] = b[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\n\t\t\ta = a.concat(b);\n\t\t} else {\n\t\t\ta = b;\n\t\t}\n\n\t\treturn a;\n\t}\n\n\tfunction joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : \"inner\";\n\n\t\tvar result = [];\n\n\t\tvar error = false,\n\t\t errorMsg = \"More than one record found on \";\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\tvar reverse = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = !reverse ? function (x, i) {\n\t\t\t\treturn x[on] === i[key];\n\t\t\t} : function (x, i) {\n\t\t\t\treturn x[key] === i[on];\n\t\t\t};\n\n\t\t\teach(left, function (i) {\n\t\t\t\tvar comp = {},\n\t\t\t\t c = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg += i[on];\n\t\t\t\t\tvalid = false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\teach([i, c[0]], function (x, idx) {\n\t\t\t\t\t\treturn iterate(x, function (v, k) {\n\t\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else if (include) {\n\t\t\t\t\titerate(i, function (v, k) {\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\n\t\t\t\t\t});\n\n\t\t\t\t\teach(keys, function (k) {\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\n\t\t\t\treturn valid;\n\t\t\t}, true);\n\t\t}\n\n\t\tif (type === \"inner\") {\n\t\t\tjoin(a, b, id);\n\t\t}\n\n\t\tif (type === \"left\") {\n\t\t\tjoin(a, b, id, true);\n\t\t}\n\n\t\tif (type === \"right\") {\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\n\t\t}\n\n\t\treturn !error ? result : errorMsg;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd;\n\n\t\tvar result = void 0;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\n\t\t}\n\n\t\tif (cmd === \"join\") {\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n\t\tvar overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\teach(!indice ? index : [indice], function (i) {\n\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tvar obj = value;\n\n\t\t\tif (frozen) {\n\t\t\t\tObject.freeze(obj);\n\t\t\t}\n\n\t\t\tresult[clone(key)] = obj;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tObject.freeze(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\teach(Object.keys(config), function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\";\n\n\t\t\t\tvar data = void 0,\n\t\t\t\t fn = void 0,\n\t\t\t\t hash = void 0;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function fn(i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function fn(i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.limit(0, this.total, true).map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\teach(args, function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(undefined, false), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this2.onbatch(type, arg);\n\n\t\t\t\t\tif (_this2.logging) {\n\t\t\t\t\t\tconsole.log(\"Batch inserted data into\", _this2.id);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this2.onerror(\"batch\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry.length = 0;\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\t\t\t\tthis.reindex().onclear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"crawl\",\n\t\t\tvalue: function crawl(arg) {\n\t\t\t\tvar result = clone(arg);\n\n\t\t\t\teach((this.source || \"\").split(\".\"), function (i) {\n\t\t\t\t\tresult = result[i];\n\t\t\t\t});\n\n\t\t\t\treturn result || arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t og = this.get(key, true);\n\n\t\t\t\tvar index = void 0;\n\n\t\t\t\tif (og) {\n\t\t\t\t\tindex = this.registry.indexOf(key);\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tthis.registry.shift();\n\t\t\t\t\t} else if (index === this.registry.length - 1) {\n\t\t\t\t\t\tthis.registry.pop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.registry.splice(index, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tthis.data.delete(key);\n\t\t\t\t\t--this.total;\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this3.ondelete(arg);\n\n\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t_this3.versions.delete(key);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (_this3.uri && !batch) {\n\t\t\t\t\t\t_this3.transmit(key, null, og, false, \"delete\").catch(function (err) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(err.stack || err.message || err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_this3.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this3.onerror(\"delete\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"records\";\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\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\tresult.push(_this4.get(i, raw));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tvar lfn = void 0;\n\n\t\t\t\tif (!raw) {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(_this5.list(key, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlfn = function lfn(value, key) {\n\t\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\t\tresult.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.forEach(lfn);\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = clone(this.data.get(key) || null);\n\n\t\t\t\treturn result && !raw ? this.list(key, result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"join\",\n\t\t\tvalue: function join(other) {\n\t\t\t\tvar on = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.key;\n\t\t\t\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"inner\";\n\t\t\t\tvar where = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar promise = void 0;\n\n\t\t\t\tif (other.total > 0) {\n\t\t\t\t\tif (where.length > 0) {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on, type], \"join\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromise = this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\");\n\t\t\t\t\t}\n\n\t\t\t\t\tpromise.then(function (arg) {\n\t\t\t\t\t\tif (typeof arg === \"string\") {\n\t\t\t\t\t\t\tdefer.reject(new Error(arg));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit() {\n\t\t\t\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = this.registry.slice(offset, offset + max).map(function (i) {\n\t\t\t\t\treturn _this6.get(i, raw);\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, _toConsumableArray(result));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"list\",\n\t\t\tvalue: function list() {\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\treturn Object.freeze(args.map(function (i) {\n\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this7.batch(arg, \"set\", true) : _this7.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tresult.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"index\";\n\t\t\t\tvar index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.index;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar payload = void 0,\n\t\t\t\t obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (cmd === \"index\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (cmd === \"join\") {\n\t\t\t\t\t\t\tpayload = {\n\t\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\t\tids: data[0],\n\t\t\t\t\t\t\t\trecords: [data[1], data[2]],\n\t\t\t\t\t\t\t\tkey: data[3],\n\t\t\t\t\t\t\t\ton: data[4],\n\t\t\t\t\t\t\t\ttype: data[5]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onbatch\",\n\t\t\tvalue: function onbatch() {}\n\t\t}, {\n\t\t\tkey: \"onclear\",\n\t\t\tvalue: function onclear() {}\n\t\t}, {\n\t\t\tkey: \"ondelete\",\n\t\t\tvalue: function ondelete() {}\n\t\t}, {\n\t\t\tkey: \"onerror\",\n\t\t\tvalue: function onerror() {}\n\t\t}, {\n\t\t\tkey: \"onrequest\",\n\t\t\tvalue: function onrequest(arg) {\n\t\t\t\treturn arg;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"records\";\n\t\t\t\tvar fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data.clear();\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.registry.length = 0;\n\n\t\t\t\t\teach(data, function (datum) {\n\t\t\t\t\t\tvar key = _this8.key ? datum[_this8.key] : uuid() || uuid();\n\n\t\t\t\t\t\t_this8.data.set(key, datum);\n\t\t\t\t\t\t_this8.registry.push(key);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\t_this9.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\t_this9.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, i, _this9.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.index.indexOf(index) === -1) {\n\t\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, key, data, index, _this9.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(clone(this.config), config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tif (cfg.method === \"DELETE\") {\n\t\t\t\t\tdelete cfg.body;\n\t\t\t\t}\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = void 0;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\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\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](_this10.list(_this10.onrequest(arg, status, headers), status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(_this10.list(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(_this10.list(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this11.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this11.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this11.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar raw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set();\n\n\t\t\t\tvar indexes = void 0;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tif (index) {\n\t\t\t\t\t\tindexes = Array.isArray(index) ? index : [index];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindexes = this.index;\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this12.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this12.get(key, raw));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar lload = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar x = clone(data),\n\t\t\t\t method = void 0,\n\t\t\t\t og = void 0;\n\n\t\t\t\tif (key === undefined || key === null) {\n\t\t\t\t\tkey = this.key && x[this.key] !== undefined ? x[this.key] : uuid();\n\t\t\t\t}\n\n\t\t\t\tif (!this.data.has(key)) {\n\t\t\t\t\tthis.registry[this.total] = key;\n\t\t\t\t\t++this.total;\n\t\t\t\t\tmethod = \"post\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.set(key, new Set());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tog = this.get(key, true);\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\n\t\t\t\t\tmethod = \"put\";\n\n\t\t\t\t\tif (this.versioning) {\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tx = merge(clone(og), x);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.data.set(key, x);\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\n\t\t\t\tdefer.resolve(this.get(key));\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this13.onset(arg);\n\n\t\t\t\t\tif (!batch && _this13.uri) {\n\t\t\t\t\t\t_this13.transmit(key, x, og, override, method).catch(function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(e.stack || e.message || e);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (og) {\n\t\t\t\t\t\t\t\t_this13.set(key, og, true, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_this13.del(key, true).then(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Reverted\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"Failed to revert\", key);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this13.storage(\"set\", key, x).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this13.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", key, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", key, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this13.onerror(\"set\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.limit(0, this.total, true).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar raw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [];\n\n\t\t\t\tvar lindex = void 0;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t});\n\n\t\t\t\teach(keys.sort(), function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this14.get(key, raw));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn raw ? result : this.list.apply(this, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tfor (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n\t\t\t\t\targs[_key3] = arguments[_key3];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = Object.keys(this.adapters).map(function (i) {\n\t\t\t\t\treturn _this15.cmd.apply(_this15, [i].concat(args));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this16 = this;\n\n\t\t\t\tvar clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tvar valid = true;\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = void 0;\n\n\t\t\t\t\t_this16.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (_this16.source) {\n\t\t\t\t\t\t\tdata = _this16.crawl(arg[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdata = arg[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (valid) {\n\t\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t\t_this16.clear();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this16.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t\t}\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this16.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this16.onerror(\"sync\", e);\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t\t\t\tvar result = void 0;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tresult = data.map(function (i) {\n\t\t\t\t\t\treturn frozen ? i[1] : clone(i[1]);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.limit(0, this.total, true);\n\n\t\t\t\t\tif (frozen) {\n\t\t\t\t\t\teach(result, function (i) {\n\t\t\t\t\t\t\tObject.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 = void 0;\n\n\t\t\t\tresult = !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\tif (frozen) {\n\t\t\t\t\tObject.freeze(result);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transmit\",\n\t\t\tvalue: function transmit(key, data, og) {\n\t\t\t\tvar _this17 = this;\n\n\t\t\t\tvar override = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\t\t\t\tvar method = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"post\";\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t uri = concatURI(this.uri, data ? key : null);\n\n\t\t\t\tvar body = void 0;\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tbody = [{ op: \"remove\", path: \"/\", value: key }];\n\t\t\t\t\t} else if (!og) {\n\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: data }];\n\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: data }];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = patch(og, data, this.key);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.request(uri, { method: \"patch\", body: JSON.stringify(body, null, 0) }).then(defer.resolve, function (e) {\n\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t_this17.patch = false;\n\t\t\t\t\t\t\t_this17.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.request(uri, { method: method, body: JSON.stringify(data, null, 0) }).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this18 = this;\n\n\t\t\t\tvar type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"mongo\";\n\t\t\t\tvar key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this18.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = void 0;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t}();\n\n\tfunction factory() {\n\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar indexes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = void 0;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.toString(), has.toString(), iterate.toString(), joinData.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"3.1.4\";\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/src/haro.js b/src/haro.js index 8c9a1da..662ebf7 100644 --- a/src/haro.js +++ b/src/haro.js @@ -189,17 +189,15 @@ console.error(err.stack || err.message || err); } - if (og) { - this.set(key, og, true, true).then(() => { - if (this.logging) { - console.log("Reverted", key); - } - }).catch(() => { - if (this.logging) { - console.log("Failed to revert", key); - } - }); - } + this.set(key, og, true, true).then(() => { + if (this.logging) { + console.log("Reverted", key); + } + }).catch(() => { + if (this.logging) { + console.log("Failed to revert", key); + } + }); }); }