From f5370b2134787e6d6ffc10a50382f044dbe7abfe Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Mon, 19 Oct 2015 20:45:41 -0400 Subject: [PATCH] Changing `onbatch` arguments to be ['type', `Tuple`] --- README.md | 2 +- lib/haro.es6.js | 6 +++--- lib/haro.js | 6 +++--- lib/haro.min.js | 2 +- lib/haro.min.js.map | 2 +- package.json | 2 +- src/haro.js | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0f36534..9821009 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,7 @@ Logs persistent storage messages to `console`, default is `true`. **onbatch** _Function_ -Event listener which receives a `Tuple` of records after a batch set, receives a `Tuple` of `Tuples`. +Event listener for a batch operation, receives two arguments ['type', `Tuple`]. **onclear** _Function_ diff --git a/lib/haro.es6.js b/lib/haro.es6.js index f17396d..637b037 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.9.0 + * @version 1.9.1 */ "use strict"; @@ -431,7 +431,7 @@ class Haro { } return defer.promise.then(arg => { - this.onbatch(arg); + this.onbatch(type, arg); return arg; }, e => { @@ -1272,7 +1272,7 @@ function factory (data = null, config = {}, indexes = []) { } factory.transform = cast; -factory.version = "1.9.0"; +factory.version = "1.9.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index cbb53c0..bf57b41 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.9.0 + * @version 1.9.1 */ "use strict"; @@ -459,7 +459,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } return defer.promise.then(function (arg) { - _this2.onbatch(arg); + _this2.onbatch(type, arg); return arg; }, function (e) { @@ -1426,7 +1426,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } factory.transform = cast; - factory.version = "1.9.0"; + factory.version = "1.9.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 5545ab2..0dec076 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2015 Jason Mulligan */ -"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function d(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,c,d,e){var f={};return b.forEach(function(a){f[a]={}}),a.forEach(function(a){var g=a[c];void 0!==g&&b.forEach(function(b){var c=keyIndex(b,a,d,e);void 0===f[b][c]&&(f[b][c]=[]),f[b][c].push(g)})}),f}function each(a,b){for(var c=-1,d=a.length;++c1?(h=!0,j="More than one record found on "+a[e],!1):(1===g.length?[a,g[0]].forEach(function(a,b){iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),k.forEach(function(a){d[c[1]+"_"+a]=null})),void(Object.keys(d).length>0&&i.push(d)))})}var g=arguments.length<=5||void 0===arguments[5]?"inner":arguments[5],h=!1,i=[],j=void 0;return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),h?j:i}function g(){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]?!1: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 h(){return(65536*(1+Math.random())|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){var h=void 0;f?(h=keyIndex(f,e,c,g),void 0!==h&&null!==h&&setIndexValue(b.get(f),h,d)):a.forEach(function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function i(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function j(){return h()+h()+"-"+h()+"-4"+h().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+h().substr(0,3)+"-"+h()+h()+h()}function k(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],g=new Haro(c,d,e),h=void 0;if(u){h=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(l?"self.":"")+"onmessage = "+f.toString()+";"];try{g.worker=l?new Function(h.join("\n")):a.URL.createObjectURL(b(h.join("\n")))}catch(i){g.worker=null}}return g}var l="undefined"!=typeof process&&"function"==typeof process.nextTick,m=a.Promise||require("es6-promise").Promise,Map=a.Map||require("es6-map"),Set=a.Set||require("es6-set"),n=a.fetch||require("node-fetch"),o=a.deferred||require("tiny-defer"),p=a.tuple||require("tiny-tuple"),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=j(),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,Object.keys(c).forEach(function(a){b[a]=e(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function d(){m.all(a.map(k)).then(h.resolve,h.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=o(),i="del"===b,j=void 0,k=void 0,l=void 0;return k=i?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(i?j=g(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(g(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){d()},h.reject):h.resolve()):d(),h.promise.then(function(a){return e.onbatch(a),a},function(a){throw e.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry=[],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 b=o();if(this.adapters[a]&&w[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];w[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=o(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),d(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve(a)},this.data.has(a)?!e&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise.then(function(a){return b.ondelete(a),a},function(a){throw b.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],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]?!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?clone(f):p.apply(p,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(p(d,c))}),p.apply(p,b)}},{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]?!1:arguments[1],c=void 0;return this.data.has(a)&&(c=b?this.data.get(a):p(a,this.data.get(a))),c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.key:arguments[1],c=this,d=arguments.length<=2||void 0===arguments[2]?"inner":arguments[2],e=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],f=o();return a.total>0?Object.keys(e).length>0?m.all([this.find(e,!0),a.find(e,!0)]).then(function(e){return e[0].length>0&&e[1].length>1?c.offload([[c.id,a.id],e[0],e[1],c.key,b,d],"join"):[]},function(a){throw a}).then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,b,d],"join").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(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](p(a,b,d))},function(a){c.reject(p(a.message,b,d))})},function(a){c.reject(p(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];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=[],e="function"==typeof a,f=a&&"function"==typeof a.test,g=new Set,h=void 0,i=void 0;return a&&(h=clone(b||this.index),h instanceof Array?i=h:"string"==typeof h&&(i=[h]),i.forEach(function(b){var h=c.indexes.get(b);h&&h.forEach(function(h,i){switch(!0){case e&&a(i,b):case f&&a.test(i):case i===a:h.forEach(function(a){g.has(a)||(g.add(a),d.push(c.get(a)))})}})})),p.apply(p,d)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,i=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],l=o(),m="post",n=clone(b),q=a,r=void 0,s=void 0,t=void 0,u=function(a){var b=a?a[0]:{};null===q&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[h.key]||n[h.key]||j()):q=j()),"post"===m?(h.registry[h.total]=q,++h.total,h.versioning&&h.versions.set(q,new Set)):(h.versioning&&h.versions.get(q).add(p(s)),d(h.index,h.indexes,h.delimiter,q,s,h.pattern)),h.data.set(q,n),setIndex(h.index,h.indexes,h.delimiter,q,n,null,h.pattern),l.resolve(h.get(q)),k||h.storage("set",q,n).then(function(a){a&&h.logging&&console.log("Saved",q,"to persistent storage")},function(a){h.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return(void 0===q||null===q)&&(q=n[this.key]||null),q&&this.data.has(q)&&(m="put",s=this.data.get(q),i||(n=e(s,n))),!f&&this.uri?(t=c(this.uri,q),this.patch?(r="post"===m?[{op:"add",path:"/",value:n}]:i?[{op:"replace",path:"/",value:n}]:g(s,n,this.key),this.request(t,{method:"patch",body:JSON.stringify(r)}).then(u,function(a){405===a[1]?(h.patch=!1,h.request(t,{method:m,body:JSON.stringify(n)}).then(u,function(a){l.reject(a)})):l.reject(a)})):this.request(t,{method:m,body:JSON.stringify(n)}).then(u,function(a){l.reject(a)})):u(),l.promise.then(function(a){return h.onset(a),a},function(a){throw h.onerror("set",a),a})}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=o();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),p.apply(p,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=o(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?m.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=o();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.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]?!0:arguments[1],c=this.key,d=void 0,e=void 0;return a?(d=function(){return c?function(a,b){var d=clone(b[1]);return void 0===d[c]&&(d[c]=clone(b[0])),a.push(d),a}:function(a,b){return a.push(clone(b[1])),a}}(),e=a.reduce(d,[])):(d=function(){return c?function(a,b){var d=clone(a);void 0===d[c]&&(d[c]=clone(b)),e.push(d)}:function(a){e.push(clone(a))}}(),e=[],this.forEach(d)),b?Object.freeze(e):e}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return(c=b?function(a){return a}:function(a){return clone(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):i(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],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}();k.transform=cast,k.version="1.9.0","undefined"!=typeof exports?module.exports=k:"function"==typeof define?define(function(){return k}):a.haro=k}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function d(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,c,d,e){var f={};return b.forEach(function(a){f[a]={}}),a.forEach(function(a){var g=a[c];void 0!==g&&b.forEach(function(b){var c=keyIndex(b,a,d,e);void 0===f[b][c]&&(f[b][c]=[]),f[b][c].push(g)})}),f}function each(a,b){for(var c=-1,d=a.length;++c1?(h=!0,j="More than one record found on "+a[e],!1):(1===g.length?[a,g[0]].forEach(function(a,b){iterate(a,function(a,e){d[c[b]+"_"+e]=a})}):f&&(iterate(a,function(a,b){d[c[0]+"_"+b]=a}),k.forEach(function(a){d[c[1]+"_"+a]=null})),void(Object.keys(d).length>0&&i.push(d)))})}var g=arguments.length<=5||void 0===arguments[5]?"inner":arguments[5],h=!1,i=[],j=void 0;return"inner"===g&&f(b,c,a),"left"===g&&f(b,c,a,!0),"right"===g&&f(c,b,clone(a).reverse(),!0,!0),h?j:i}function g(){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]?!1: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 h(){return(65536*(1+Math.random())|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){var h=void 0;f?(h=keyIndex(f,e,c,g),void 0!==h&&null!==h&&setIndexValue(b.get(f),h,d)):a.forEach(function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function i(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function j(){return h()+h()+"-"+h()+"-4"+h().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+h().substr(0,3)+"-"+h()+h()+h()}function k(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],g=new Haro(c,d,e),h=void 0;if(u){h=[cast.toString(),clone.toString(),createIndexes.toString(),each.toString(),iterate.toString(),joinData.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),(l?"self.":"")+"onmessage = "+f.toString()+";"];try{g.worker=l?new Function(h.join("\n")):a.URL.createObjectURL(b(h.join("\n")))}catch(i){g.worker=null}}return g}var l="undefined"!=typeof process&&"function"==typeof process.nextTick,m=a.Promise||require("es6-promise").Promise,Map=a.Map||require("es6-map"),Set=a.Set||require("es6-set"),n=a.fetch||require("node-fetch"),o=a.deferred||require("tiny-defer"),p=a.tuple||require("tiny-tuple"),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=j(),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,Object.keys(c).forEach(function(a){b[a]=e(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function d(){m.all(a.map(k)).then(h.resolve,h.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=o(),i="del"===b,j=void 0,k=void 0,l=void 0;return k=i?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(i?j=g(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(g(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){d()},h.reject):h.resolve()):d(),h.promise.then(function(a){return e.onbatch(b,a),a},function(a){throw e.onerror("batch",a),a})}},{key:"clear",value:function(){return this.total=0,this.registry=[],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 b=o();if(this.adapters[a]&&w[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];w[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=o(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),d(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve(a)},this.data.has(a)?!e&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise.then(function(a){return b.ondelete(a),a},function(a){throw b.onerror("delete",a),a})}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],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]?!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?clone(f):p.apply(p,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(p(d,c))}),p.apply(p,b)}},{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]?!1:arguments[1],c=void 0;return this.data.has(a)&&(c=b?this.data.get(a):p(a,this.data.get(a))),c}},{key:"has",value:function(a){return this.data.has(a)}},{key:"join",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.key:arguments[1],c=this,d=arguments.length<=2||void 0===arguments[2]?"inner":arguments[2],e=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],f=o();return a.total>0?Object.keys(e).length>0?m.all([this.find(e,!0),a.find(e,!0)]).then(function(e){return e[0].length>0&&e[1].length>1?c.offload([[c.id,a.id],e[0],e[1],c.key,b,d],"join"):[]},function(a){throw a}).then(function(a){"string"==typeof a?f.reject(new Error(a)):f.resolve(a)},f.reject):this.offload([[this.id,a.id],this.toArray(null,!0),a.toArray(null,!0),this.key,b,d],"join").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(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](p(a,b,d))},function(a){c.reject(p(a.message,b,d))})},function(a){c.reject(p(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];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=[],e="function"==typeof a,f=a&&"function"==typeof a.test,g=new Set,h=void 0,i=void 0;return a&&(h=clone(b||this.index),h instanceof Array?i=h:"string"==typeof h&&(i=[h]),i.forEach(function(b){var h=c.indexes.get(b);h&&h.forEach(function(h,i){switch(!0){case e&&a(i,b):case f&&a.test(i):case i===a:h.forEach(function(a){g.has(a)||(g.add(a),d.push(c.get(a)))})}})})),p.apply(p,d)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,i=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],l=o(),m="post",n=clone(b),q=a,r=void 0,s=void 0,t=void 0,u=function(a){var b=a?a[0]:{};null===q&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[h.key]||n[h.key]||j()):q=j()),"post"===m?(h.registry[h.total]=q,++h.total,h.versioning&&h.versions.set(q,new Set)):(h.versioning&&h.versions.get(q).add(p(s)),d(h.index,h.indexes,h.delimiter,q,s,h.pattern)),h.data.set(q,n),setIndex(h.index,h.indexes,h.delimiter,q,n,null,h.pattern),l.resolve(h.get(q)),k||h.storage("set",q,n).then(function(a){a&&h.logging&&console.log("Saved",q,"to persistent storage")},function(a){h.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return(void 0===q||null===q)&&(q=n[this.key]||null),q&&this.data.has(q)&&(m="put",s=this.data.get(q),i||(n=e(s,n))),!f&&this.uri?(t=c(this.uri,q),this.patch?(r="post"===m?[{op:"add",path:"/",value:n}]:i?[{op:"replace",path:"/",value:n}]:g(s,n,this.key),this.request(t,{method:"patch",body:JSON.stringify(r)}).then(u,function(a){405===a[1]?(h.patch=!1,h.request(t,{method:m,body:JSON.stringify(n)}).then(u,function(a){l.reject(a)})):l.reject(a)})):this.request(t,{method:m,body:JSON.stringify(n)}).then(u,function(a){l.reject(a)})):u(),l.promise.then(function(a){return h.onset(a),a},function(a){throw h.onerror("set",a),a})}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=o();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),p.apply(p,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=o(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?m.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=o();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.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]?!0:arguments[1],c=this.key,d=void 0,e=void 0;return a?(d=function(){return c?function(a,b){var d=clone(b[1]);return void 0===d[c]&&(d[c]=clone(b[0])),a.push(d),a}:function(a,b){return a.push(clone(b[1])),a}}(),e=a.reduce(d,[])):(d=function(){return c?function(a,b){var d=clone(a);void 0===d[c]&&(d[c]=clone(b)),e.push(d)}:function(a){e.push(clone(a))}}(),e=[],this.forEach(d)),b?Object.freeze(e):e}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return(c=b?function(a){return a}:function(a){return clone(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):i(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],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}();k.transform=cast,k.version="1.9.1","undefined"!=typeof exports?module.exports=k:"function"==typeof define?define(function(){return k}):a.haro=k}("undefined"!=typeof global?global:window); //# 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 213a881..da1a615 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","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","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","records","lkey","lindex","each","fn","nth","iterate","call","merge","a","b","c","d","concat","onmessage","ev","cmd","joinData","ids","on","postMessage","id","include","arguments","reverse","x","comp","filter","error","errorMsg","v","k","patch","ogdata","overwrite","op","path","s","Math","random","toString","substring","setIndexValue","setIndex","indice","lidx","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","Promise","require","fetch","deferred","tuple","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","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","onbatch","onerror","clear","onclear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","message","stack","ondelete","transform","entries","where","_this4","raw","ctx","output","other","_this5","find","offload","max","offset","lmax","loffset","list","_this6","payload","useWorker","_this7","datum","_this8","cfg","toUpperCase","res","status","_headers","_this9","_this10","rgex","test","seen","lset","_this11","override","ldata","luri","xdata","err","onset","sync","frozen","freeze","_this12","_this13","_len2","_key2","deferreds","_this14","Allow","allow","onsync","reduce","val","func","_this15","values","terminate","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.9.0\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 _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 || require(\"es6-promise\").Promise;\n\tvar Map = global.Map || require(\"es6-map\");\n\tvar Set = global.Set || require(\"es6-set\");\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar deferred = global.deferred || require(\"tiny-defer\");\n\tvar tuple = global.tuple || require(\"tiny-tuple\");\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 cast(input) {\n\t\tvar result = undefined;\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 input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(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\tObject.keys(input).forEach(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 = undefined;\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));\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 keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).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\t\t\t o = undefined;\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\tindexes.forEach(function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\trecords.forEach(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 (result[index][lindex] === undefined) {\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 each(arg, fn) {\n\t\tvar i = -1,\n\t\t nth = arg.length;\n\n\t\twhile (++i < nth) {\n\t\t\tif (fn(arg[i]) === false) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd,\n\t\t result = undefined;\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 joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length <= 5 || arguments[5] === undefined ? \"inner\" : arguments[5];\n\n\t\tvar error = false,\n\t\t result = [],\n\t\t errorMsg = undefined;\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\tvar reverse = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = undefined;\n\n\t\t\tfn = !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 = undefined;\n\n\t\t\t\tc = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg = \"More than one record found on \" + i[on];\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\t[i, c[0]].forEach(function (x, idx) {\n\t\t\t\t\t\titerate(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\tkeys.forEach(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 (Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\t\t\t});\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 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 ? false : arguments[3];\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 ((1 + Math.random()) * 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\tvar idx = undefined;\n\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tidx = keyIndex(indice, data, delimiter, pattern);\n\n\t\t\tif (idx !== undefined && idx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(indice), idx, key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\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\tObject.keys(config).forEach(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 ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\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 (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 (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.toArray().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\targs.forEach(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(), 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(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, 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(arg);\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 = [];\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: \"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 ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\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\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 ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\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 ? false : arguments[1];\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 ? tuple.apply(tuple, result) : clone(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 result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, 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 ? false : arguments[1];\n\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = !raw ? tuple(key, this.data.get(key)) : this.data.get(key);\n\t\t\t\t}\n\n\t\t\t\treturn output;\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 ? this.key : arguments[1];\n\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 2 || arguments[2] === undefined ? \"inner\" : arguments[2];\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\tif (other.total > 0) {\n\t\t\t\t\tif (Object.keys(where).length > 0) {\n\t\t\t\t\t\tPromise.all([this.find(where, true), other.find(where, true)]).then(function (data) {\n\t\t\t\t\t\t\treturn data[0].length > 0 && data[1].length > 1 ? _this5.offload([[_this5.id, other.id], data[0], data[1], _this5.key, on, type], \"join\") : [];\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}).then(function (result) {\n\t\t\t\t\t\t\tif (typeof result === \"string\") {\n\t\t\t\t\t\t\t\tdefer.reject(new Error(result));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.resolve(result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\").then(function (result) {\n\t\t\t\t\t\t\tif (typeof result === \"string\") {\n\t\t\t\t\t\t\t\tdefer.reject(new Error(result));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.resolve(result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t}\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(max) {\n\t\t\t\tvar offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this6.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this6.batch(arg, \"set\", true) : _this6.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this6.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar 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 tuple.apply(tuple, 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 ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t payload = undefined,\n\t\t\t\t obj = undefined;\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));\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: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\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 = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this7.key] || uuid();\n\n\t\t\t\t\t\t_this7.data.set(key, datum);\n\t\t\t\t\t\t_this7.registry.push(key);\n\t\t\t\t\t});\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\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\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_this8.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_this8.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, i, _this8.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\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, index, _this8.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\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 = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(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\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(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 _this9 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this9.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this9.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 (_this9.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this9.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 _this10 = this;\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\t\t\t\t lindex = undefined,\n\t\t\t\t indexes = undefined;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tlindex = clone(index || this.index);\n\n\t\t\t\t\tif (lindex instanceof Array) {\n\t\t\t\t\t\tindexes = lindex;\n\t\t\t\t\t} else if (typeof lindex === \"string\") {\n\t\t\t\t\t\tindexes = [lindex];\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this10.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(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(_this10.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\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 tuple.apply(tuple, 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 ? false : arguments[2];\n\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this11.key) {\n\t\t\t\t\t\t\tif (_this11.source) {\n\t\t\t\t\t\t\t\t_this11.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\t\txdata = xdata[i] || {};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlkey = xdata[_this11.key] || ldata[_this11.key] || uuid();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlkey = uuid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t_this11.registry[_this11.total] = lkey;\n\t\t\t\t\t\t++_this11.total;\n\n\t\t\t\t\t\tif (_this11.versioning) {\n\t\t\t\t\t\t\t_this11.versions.set(lkey, new Set());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (_this11.versioning) {\n\t\t\t\t\t\t\t_this11.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this11.index, _this11.indexes, _this11.delimiter, lkey, ogdata, _this11.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this11.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this11.index, _this11.indexes, _this11.delimiter, lkey, ldata, null, _this11.pattern);\n\t\t\t\t\tdefer.resolve(_this11.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this11.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this11.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"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 (_this11.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"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\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = ldata[this.key] || null;\n\t\t\t\t}\n\n\t\t\t\tif (lkey && this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this11.patch = false;\n\t\t\t\t\t\t\t\t_this11.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\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\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\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\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this11.onset(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this11.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 ? false : arguments[1];\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 ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).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.toArray(null, false).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 _this12 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [],\n\t\t\t\t lindex = undefined;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.index.push(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\tkeys.sort().forEach(function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this12.get(key));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this13 = this;\n\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\tvar defer = deferred(),\n\t\t\t\t deferreds = [];\n\n\t\t\t\tObject.keys(this.adapters).forEach(function (i) {\n\t\t\t\t\tdeferreds.push(_this13.cmd.apply(_this13, [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 _this14 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this14.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this14.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this14.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this14.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this14.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this14.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this14.onerror(\"sync\", e);\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 ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\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\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\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\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\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 ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\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: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\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 (_this15.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 (_this15.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 = undefined;\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 ? null : arguments[0];\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 = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.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 = \"1.9.0\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","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","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","records","lkey","lindex","each","fn","nth","iterate","call","merge","a","b","c","d","concat","onmessage","ev","cmd","joinData","ids","on","postMessage","id","include","arguments","reverse","x","comp","filter","error","errorMsg","v","k","patch","ogdata","overwrite","op","path","s","Math","random","toString","substring","setIndexValue","setIndex","indice","lidx","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","Promise","require","fetch","deferred","tuple","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","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","onbatch","onerror","clear","onclear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","message","stack","ondelete","transform","entries","where","_this4","raw","ctx","output","other","_this5","find","offload","max","offset","lmax","loffset","list","_this6","payload","useWorker","_this7","datum","_this8","cfg","toUpperCase","res","status","_headers","_this9","_this10","rgex","test","seen","lset","_this11","override","ldata","luri","xdata","err","onset","sync","frozen","freeze","_this12","_this13","_len2","_key2","deferreds","_this14","Allow","allow","onsync","reduce","val","func","_this15","values","terminate","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.9.1\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 _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 || require(\"es6-promise\").Promise;\n\tvar Map = global.Map || require(\"es6-map\");\n\tvar Set = global.Set || require(\"es6-set\");\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar deferred = global.deferred || require(\"tiny-defer\");\n\tvar tuple = global.tuple || require(\"tiny-tuple\");\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 cast(input) {\n\t\tvar result = undefined;\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 input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(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\tObject.keys(input).forEach(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 = undefined;\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));\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 keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).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\t\t\t o = undefined;\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\tindexes.forEach(function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\trecords.forEach(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 (result[index][lindex] === undefined) {\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 each(arg, fn) {\n\t\tvar i = -1,\n\t\t nth = arg.length;\n\n\t\twhile (++i < nth) {\n\t\t\tif (fn(arg[i]) === false) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t cmd = data.cmd,\n\t\t result = undefined;\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 joinData(id, a, b, key, on) {\n\t\tvar type = arguments.length <= 5 || arguments[5] === undefined ? \"inner\" : arguments[5];\n\n\t\tvar error = false,\n\t\t result = [],\n\t\t errorMsg = undefined;\n\n\t\tfunction join(left, right, ids) {\n\t\t\tvar include = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\tvar reverse = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\tvar keys = Object.keys(right[0]),\n\t\t\t fn = undefined;\n\n\t\t\tfn = !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 = undefined;\n\n\t\t\t\tc = right.filter(function (x) {\n\t\t\t\t\treturn fn(x, i);\n\t\t\t\t});\n\n\t\t\t\tif (c.length > 1) {\n\t\t\t\t\terror = true;\n\t\t\t\t\terrorMsg = \"More than one record found on \" + i[on];\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (c.length === 1) {\n\t\t\t\t\t[i, c[0]].forEach(function (x, idx) {\n\t\t\t\t\t\titerate(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\tkeys.forEach(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 (Object.keys(comp).length > 0) {\n\t\t\t\t\tresult.push(comp);\n\t\t\t\t}\n\t\t\t});\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 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 ? false : arguments[3];\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 ((1 + Math.random()) * 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\tvar idx = undefined;\n\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tidx = keyIndex(indice, data, delimiter, pattern);\n\n\t\t\tif (idx !== undefined && idx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(indice), idx, key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\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\tObject.keys(config).forEach(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 ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\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 (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 (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.toArray().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\targs.forEach(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(), 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(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, 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\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 = [];\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: \"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 ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve(key);\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\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\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 ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\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 ? false : arguments[1];\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 ? tuple.apply(tuple, result) : clone(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 result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, 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 ? false : arguments[1];\n\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = !raw ? tuple(key, this.data.get(key)) : this.data.get(key);\n\t\t\t\t}\n\n\t\t\t\treturn output;\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 ? this.key : arguments[1];\n\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 2 || arguments[2] === undefined ? \"inner\" : arguments[2];\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\tif (other.total > 0) {\n\t\t\t\t\tif (Object.keys(where).length > 0) {\n\t\t\t\t\t\tPromise.all([this.find(where, true), other.find(where, true)]).then(function (data) {\n\t\t\t\t\t\t\treturn data[0].length > 0 && data[1].length > 1 ? _this5.offload([[_this5.id, other.id], data[0], data[1], _this5.key, on, type], \"join\") : [];\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}).then(function (result) {\n\t\t\t\t\t\t\tif (typeof result === \"string\") {\n\t\t\t\t\t\t\t\tdefer.reject(new Error(result));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.resolve(result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on, type], \"join\").then(function (result) {\n\t\t\t\t\t\t\tif (typeof result === \"string\") {\n\t\t\t\t\t\t\t\tdefer.reject(new Error(result));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.resolve(result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t}\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(max) {\n\t\t\t\tvar offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this6.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this6.batch(arg, \"set\", true) : _this6.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this6.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar 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 tuple.apply(tuple, 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 ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t payload = undefined,\n\t\t\t\t obj = undefined;\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));\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: \"onset\",\n\t\t\tvalue: function onset() {}\n\t\t}, {\n\t\t\tkey: \"onsync\",\n\t\t\tvalue: function onsync() {}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\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 = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this7.key] || uuid();\n\n\t\t\t\t\t\t_this7.data.set(key, datum);\n\t\t\t\t\t\t_this7.registry.push(key);\n\t\t\t\t\t});\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\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\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_this8.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_this8.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, i, _this8.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\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this8.index, _this8.indexes, _this8.delimiter, key, data, index, _this8.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\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 = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(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\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(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 _this9 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this9.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this9.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 (_this9.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this9.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 _this10 = this;\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\t\t\t\t lindex = undefined,\n\t\t\t\t indexes = undefined;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tlindex = clone(index || this.index);\n\n\t\t\t\t\tif (lindex instanceof Array) {\n\t\t\t\t\t\tindexes = lindex;\n\t\t\t\t\t} else if (typeof lindex === \"string\") {\n\t\t\t\t\t\tindexes = [lindex];\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this10.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(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(_this10.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\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 tuple.apply(tuple, 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 ? false : arguments[2];\n\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this11.key) {\n\t\t\t\t\t\t\tif (_this11.source) {\n\t\t\t\t\t\t\t\t_this11.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\t\txdata = xdata[i] || {};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlkey = xdata[_this11.key] || ldata[_this11.key] || uuid();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlkey = uuid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t_this11.registry[_this11.total] = lkey;\n\t\t\t\t\t\t++_this11.total;\n\n\t\t\t\t\t\tif (_this11.versioning) {\n\t\t\t\t\t\t\t_this11.versions.set(lkey, new Set());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (_this11.versioning) {\n\t\t\t\t\t\t\t_this11.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this11.index, _this11.indexes, _this11.delimiter, lkey, ogdata, _this11.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this11.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this11.index, _this11.indexes, _this11.delimiter, lkey, ldata, null, _this11.pattern);\n\t\t\t\t\tdefer.resolve(_this11.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this11.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this11.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"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 (_this11.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"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\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = ldata[this.key] || null;\n\t\t\t\t}\n\n\t\t\t\tif (lkey && this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this11.patch = false;\n\t\t\t\t\t\t\t\t_this11.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\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\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\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\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this11.onset(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this11.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 ? false : arguments[1];\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 ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).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.toArray(null, false).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 _this12 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [],\n\t\t\t\t lindex = undefined;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.index.push(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\tkeys.sort().forEach(function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this12.get(key));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this13 = this;\n\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\tvar defer = deferred(),\n\t\t\t\t deferreds = [];\n\n\t\t\t\tObject.keys(this.adapters).forEach(function (i) {\n\t\t\t\t\tdeferreds.push(_this13.cmd.apply(_this13, [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 _this14 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this14.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this14.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this14.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this14.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this14.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise.then(function (arg) {\n\t\t\t\t\t_this14.onsync(arg);\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\t_this14.onerror(\"sync\", e);\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 ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\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\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\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\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\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 ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\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: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\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 (_this15.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 (_this15.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 = undefined;\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 ? null : arguments[0];\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 = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [cast.toString(), clone.toString(), createIndexes.toString(), each.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 = \"1.9.1\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file diff --git a/package.json b/package.json index 3a481ef..c834d03 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.9.0", + "version": "1.9.1", "description": "Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples", "main": "lib/haro.js", "scripts": { diff --git a/src/haro.js b/src/haro.js index b2c531b..38db9a4 100644 --- a/src/haro.js +++ b/src/haro.js @@ -91,7 +91,7 @@ class Haro { } return defer.promise.then(arg => { - this.onbatch(arg); + this.onbatch(type, arg); return arg; }, e => {