diff --git a/lib/haro.es6.js b/lib/haro.es6.js index 0d3b12c..c47abb3 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.5.0 + * @version 1.5.1 */ "use strict"; @@ -201,7 +201,7 @@ class Haro { } } - batch (args, type) { + batch (args, type, lload = false) { let defer = deferred(), del = type === "del", data, fn, hash; @@ -220,7 +220,7 @@ class Haro { }; } else { fn = i => { - return this.set(null, i, true, true); + return this.set(null, i, true, true, lload); }; } @@ -463,7 +463,7 @@ class Haro { console.log("Loaded", id, "from", type, "persistent storage"); } - return batch ? this.batch(arg, "set") : this.set(key, arg); + return batch ? this.batch(arg, "set", true) : this.set(key, arg, true, true, true); }, e => { if (this.logging) { console.error("Error loading", id, "from", type, "persistent storage:", (e.message || e.stack || e)); @@ -598,7 +598,7 @@ class Haro { return tuple.apply(tuple, result); } - set (key, data, batch = false, override = false) { + set (key, data, batch = false, override = false, lload = false) { let defer = deferred(), method = "post", ldata = clone(data), @@ -641,15 +641,17 @@ class Haro { setIndex(this.index, this.indexes, this.delimiter, lkey, ldata); defer.resolve(this.get(lkey)); - this.storage("set", lkey, ldata).then(success => { - if (success && this.logging) { - console.log("Saved", lkey, "to persistent storage"); - } - }, e => { - if (this.logging) { - console.error("Error saving", lkey, "to persistent storage:", (e.message || e.stack || e)); - } - }); + if (!lload) { + this.storage("set", lkey, ldata).then(success => { + if (success && this.logging) { + console.log("Saved", lkey, "to persistent storage"); + } + }, e => { + if (this.logging) { + console.error("Error saving", lkey, "to persistent storage:", (e.message || e.stack || e)); + } + }); + } }; if (lkey === undefined || lkey === null) { @@ -918,7 +920,7 @@ function factory (data = null, config = {}, indexes = []) { return new Haro(data, config, indexes); } -factory.version = "1.5.0"; +factory.version = "1.5.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index db6ae4d..563601f 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.5.0 + * @version 1.5.1 */ "use strict"; @@ -223,6 +223,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function batch(args, type) { var _this2 = this; + var lload = arguments[2] === undefined ? false : arguments[2]; + var defer = deferred(), del = type === "del", data = undefined, @@ -243,7 +245,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; } else { fn = function (i) { - return _this2.set(null, i, true, true); + return _this2.set(null, i, true, true, lload); }; } @@ -516,7 +518,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons console.log("Loaded", id, "from", type, "persistent storage"); } - return batch ? _this5.batch(arg, "set") : _this5.set(key, arg); + return batch ? _this5.batch(arg, "set", true) : _this5.set(key, arg, true, true, true); }, function (e) { if (_this5.logging) { console.error("Error loading", id, "from", type, "persistent storage:", e.message || e.stack || e); @@ -670,10 +672,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "set", value: function set(key, data) { + var batch = arguments[2] === undefined ? false : arguments[2]; + var _this9 = this; - var batch = arguments[2] === undefined ? false : arguments[2]; var override = arguments[3] === undefined ? false : arguments[3]; + var lload = arguments[4] === undefined ? false : arguments[4]; var defer = deferred(), method = "post", @@ -718,15 +722,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons setIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ldata); defer.resolve(_this9.get(lkey)); - _this9.storage("set", lkey, ldata).then(function (success) { - if (success && _this9.logging) { - console.log("Saved", lkey, "to persistent storage"); - } - }, function (e) { - if (_this9.logging) { - console.error("Error saving", lkey, "to persistent storage:", e.message || e.stack || e); - } - }); + if (!lload) { + _this9.storage("set", lkey, ldata).then(function (success) { + if (success && _this9.logging) { + console.log("Saved", lkey, "to persistent storage"); + } + }, function (e) { + if (_this9.logging) { + console.error("Error saving", lkey, "to persistent storage:", e.message || e.stack || e); + } + }); + } }; if (lkey === undefined || lkey === null) { @@ -1037,7 +1043,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return new Haro(data, config, indexes); } - factory.version = "1.5.0"; + factory.version = "1.5.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 823d050..31fb243 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?d.map(function(a){return String(b[a]).replace(/\.|-|\s*|\t*/g,"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,f){a.forEach(function(a){var g=b.get(a),h=e(a,f,c),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,c){var d=void 0!==a?b(a):a,e=void 0!==c?b(c):c;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=void 0===arguments[0]?{}:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?"":arguments[2],d=void 0===arguments[3]?!1:arguments[3],e=[];return d&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function l(a,b,c,d,f,g){g?k(b.get(g),e(g,f,c),d):a.forEach(function(a){k(b.get(a),e(a,f,c),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function o(){var a=void 0===arguments[0]?null:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?[]:arguments[2];return new Haro(a,b,c)}var p=a.Promise||require("es6-promise").Promise,q=a.Map||require("es6-map"),r=a.Set||require("es6-set"),s=a.fetch||require("node-fetch"),t=a.tuple||require("tiny-tuple"),u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w={},Haro=function(){function Haro(a){var b=this,c=void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new q,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=n(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function e(){p.all(a.map(k)).then(function(a){g.resolve(a)},function(a){g.reject(a)})}var f=this,g=d(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0)},this.patch?(h?j=i(this.toArray().map(function(a){return a[f.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[f.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){e()},function(a){g.reject(a)}):g.resolve()):e(),g.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared",this.id),this.reindex()}},{key:"cmd",value:function(a){var b=d();if(this.adapters[a]&&w[a]){for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;c>f;f++)e[f-1]=arguments[f];w[a].apply(this,[this].concat(e)).then(function(a){b.resolve(a)},function(a){b.reject(a)})}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=void 0===arguments[1]?!1:arguments[1],g=d(),h=void 0;return h=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),f(b.index,b.indexes,b.delimiter,a,b.data.get(a)),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)})),g.resolve()},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(h,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)})):g.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)}):h():g.reject(new Error("Record not found")),g.promise}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new r).forEach(function(a){f.push(b.get(a))}),t.apply(t,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(t(d,c))}),t.apply(t,b)}},{key:"forEach",value:function(a,c){return this.data.forEach(function(c,d){a(b(c),b(d))},c),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=t(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a){var b=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"](t(a,b,d))},function(a){c.reject(t(a.message,b,d))})},function(a){c.reject(t(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=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,c){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new r,i=void 0,j=void 0;return a&&(i=b(c||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),t.apply(t,e)}},{key:"set",value:function(a,e){var g=this,j=void 0===arguments[2]?!1:arguments[2],k=void 0===arguments[3]?!1:arguments[3],m=d(),o="post",p=b(e),q=a,s=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===q&&(g.key?(g.source&&g.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[g.key]||p[g.key]||n()):q=n()),"post"===o?(g.registry[g.total]=q,++g.total,g.versioning&&g.versions.set(q,new r)):(g.versioning&&g.versions.get(q).add(t(u)),f(g.index,g.indexes,g.delimiter,q,u)),g.data.set(q,p),l(g.index,g.indexes,g.delimiter,q,p),m.resolve(g.get(q)),g.storage("set",q,p).then(function(a){a&&g.logging&&console.log("Saved",q,"to persistent storage")},function(a){g.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return void 0===q||null===q?q=null:this.data.has(q)&&(o="put",u=this.data.get(q),k||(p=h(u,p))),!j&&this.uri?this.patch?(s="post"===o?[{op:"add",path:"/",value:p}]:k?[{op:"replace",path:"/",value:p}]:i(u,p,this.key),this.request(c(this.uri,q),{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(g.patch=!1,g.request(c(g.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(c(this.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)}):v(),m.promise}},{key:"setUri",value:function(a){var b=void 0===arguments[1]?!1:arguments[1],c=d();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=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))})}),t.apply(t,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),e=0;b>e;e++)c[e]=arguments[e];var f=d(),g=[];return Object.keys(this.adapters).forEach(function(b){g.push(a.cmd.apply(a,[b].concat(c)))}),g.length>0?p.all(g).then(function(){f.resolve(!0)},function(a){f.reject(a)}):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,b=void 0===arguments[0]?!1:arguments[0],c=d();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(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,c){var e=b(c[1]);return void 0===e[d]&&(e[d]=b(c[0])),a.push(e),a}:function(a,c){return a.push(b(c[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,c){var e=b(a);void 0===e[d]&&(e[d]=b(c)),f.push(e)}:function(a){f.push(b(a))}}(),f=[],this.forEach(e)),c?Object.freeze(f):f}},{key:"toObject",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=c?function(a){return a}:function(a){return b(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):m(this))}},{key:"unload",value:function(a,b){var c=this;void 0===a&&(a="mongo");var d=void 0!==b?b:this.id;return this.cmd(a,"remove",b).then(function(b){return c.logging&&console.log("Unloaded",d,"from",a,"persistent storage"),b},function(b){throw c.logging&&console.error("Error unloading",d,"from",a,"persistent storage:",b.message||b.stack||b),b})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();o.version="1.5.0","undefined"!=typeof exports?module.exports=o:"function"==typeof define?define(function(){return o}):a.haro=o}("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?d.map(function(a){return String(b[a]).replace(/\.|-|\s*|\t*/g,"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,f){a.forEach(function(a){var g=b.get(a),h=e(a,f,c),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,c){var d=void 0!==a?b(a):a,e=void 0!==c?b(c):c;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=void 0===arguments[0]?{}:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?"":arguments[2],d=void 0===arguments[3]?!1:arguments[3],e=[];return d&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function l(a,b,c,d,f,g){g?k(b.get(g),e(g,f,c),d):a.forEach(function(a){k(b.get(a),e(a,f,c),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function o(){var a=void 0===arguments[0]?null:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?[]:arguments[2];return new Haro(a,b,c)}var p=a.Promise||require("es6-promise").Promise,q=a.Map||require("es6-map"),r=a.Set||require("es6-set"),s=a.fetch||require("node-fetch"),t=a.tuple||require("tiny-tuple"),u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w={},Haro=function(){function Haro(a){var b=this,c=void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new q,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=n(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function e(){p.all(a.map(l)).then(function(a){h.resolve(a)},function(a){h.reject(a)})}var f=this,g=void 0===arguments[2]?!1:arguments[2],h=d(),j="del"===b,k=void 0,l=void 0,m=void 0;return l=j?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0,g)},this.patch?(j?k=i(this.toArray().map(function(a){return a[f.key]}),a,this.key,!0):(k=[],m={},a.forEach(function(a){var b=a[f.key];b?m[b]=a:k.push({op:"add",path:"/",value:a})}),k=k.concat(i(this.toObject(),m,this.key,!0))),k.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(k)}).then(function(){e()},function(a){h.reject(a)}):h.resolve()):e(),h.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared",this.id),this.reindex()}},{key:"cmd",value:function(a){var b=d();if(this.adapters[a]&&w[a]){for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;c>f;f++)e[f-1]=arguments[f];w[a].apply(this,[this].concat(e)).then(function(a){b.resolve(a)},function(a){b.reject(a)})}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=void 0===arguments[1]?!1:arguments[1],g=d(),h=void 0;return h=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),f(b.index,b.indexes,b.delimiter,a,b.data.get(a)),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)})),g.resolve()},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(h,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)})):g.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)}):h():g.reject(new Error("Record not found")),g.promise}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new r).forEach(function(a){f.push(b.get(a))}),t.apply(t,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(t(d,c))}),t.apply(t,b)}},{key:"forEach",value:function(a,c){return this.data.forEach(function(c,d){a(b(c),b(d))},c),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=t(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a){var b=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"](t(a,b,d))},function(a){c.reject(t(a.message,b,d))})},function(a){c.reject(t(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=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,c){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new r,i=void 0,j=void 0;return a&&(i=b(c||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),t.apply(t,e)}},{key:"set",value:function(a,e){var g=void 0===arguments[2]?!1:arguments[2],j=this,k=void 0===arguments[3]?!1:arguments[3],m=void 0===arguments[4]?!1:arguments[4],o=d(),p="post",q=b(e),s=a,u=void 0,v=void 0,w=function(a){var b=a?a[0]:{};null===s&&(j.key?(j.source&&j.source.split(".").forEach(function(a){b=b[a]||{}}),s=b[j.key]||q[j.key]||n()):s=n()),"post"===p?(j.registry[j.total]=s,++j.total,j.versioning&&j.versions.set(s,new r)):(j.versioning&&j.versions.get(s).add(t(v)),f(j.index,j.indexes,j.delimiter,s,v)),j.data.set(s,q),l(j.index,j.indexes,j.delimiter,s,q),o.resolve(j.get(s)),m||j.storage("set",s,q).then(function(a){a&&j.logging&&console.log("Saved",s,"to persistent storage")},function(a){j.logging&&console.error("Error saving",s,"to persistent storage:",a.message||a.stack||a)})};return void 0===s||null===s?s=null:this.data.has(s)&&(p="put",v=this.data.get(s),k||(q=h(v,q))),!g&&this.uri?this.patch?(u="post"===p?[{op:"add",path:"/",value:q}]:k?[{op:"replace",path:"/",value:q}]:i(v,q,this.key),this.request(c(this.uri,s),{method:"patch",body:JSON.stringify(u)}).then(w,function(a){405===a[1]?(j.patch=!1,j.request(c(j.uri,s),{method:p,body:JSON.stringify(q)}).then(w,function(a){o.reject(a)})):o.reject(a)})):this.request(c(this.uri,s),{method:p,body:JSON.stringify(q)}).then(w,function(a){o.reject(a)}):w(),o.promise}},{key:"setUri",value:function(a){var b=void 0===arguments[1]?!1:arguments[1],c=d();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=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))})}),t.apply(t,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),e=0;b>e;e++)c[e]=arguments[e];var f=d(),g=[];return Object.keys(this.adapters).forEach(function(b){g.push(a.cmd.apply(a,[b].concat(c)))}),g.length>0?p.all(g).then(function(){f.resolve(!0)},function(a){f.reject(a)}):f.resolve(!1),f.promise}},{key:"sync",value:function(){var a=this,b=void 0===arguments[0]?!1:arguments[0],c=d();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(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,c){var e=b(c[1]);return void 0===e[d]&&(e[d]=b(c[0])),a.push(e),a}:function(a,c){return a.push(b(c[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,c){var e=b(a);void 0===e[d]&&(e[d]=b(c)),f.push(e)}:function(a){f.push(b(a))}}(),f=[],this.forEach(e)),c?Object.freeze(f):f}},{key:"toObject",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=c?function(a){return a}:function(a){return b(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):m(this))}},{key:"unload",value:function(a,b){var c=this;void 0===a&&(a="mongo");var d=void 0!==b?b:this.id;return this.cmd(a,"remove",b).then(function(b){return c.logging&&console.log("Unloaded",d,"from",a,"persistent storage"),b},function(b){throw c.logging&&console.error("Error unloading",d,"from",a,"persistent storage:",b.message||b.stack||b),b})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();o.version="1.5.1","undefined"!=typeof exports?module.exports=o:"function"==typeof define?define(function(){return o}):a.haro=o}("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 62531e8..a764e88 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","clone","arg","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","deferred","promise","undefined","resolver","rejecter","Promise","resolve","reject","keyIndex","data","delimiter","keys","split","sort","result","map","String","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","require","Map","fetch","tuple","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","type","next","all","then","defer","e","_this2","del","hash","toArray","toObject","request","body","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","err","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","cmd","_this6","input","cfg","toUpperCase","res","status","_headers","_this7","_this8","rgex","test","seen","lindex","lset","lkey","_this9","override","ldata","xdata","sync","frozen","freeze","_this10","_this11","_len2","_key2","deferreds","_this12","Allow","allow","records","reduce","val","func","_this13","values","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.5.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 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 tuple = global.tuple || require(\"tiny-tuple\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar adapter = {};\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 deferred() {\n\t\tvar promise = undefined,\n\t\t resolver = undefined,\n\t\t rejecter = undefined;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction keyIndex(key, data, delimiter) {\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(/\\.|-|\\s*|\\t*/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) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter),\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\tidx[\"delete\"](value);\n\t\t\t\t}\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 patch() {\n\t\tvar ogdata = arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = 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) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter), key);\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[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.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\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 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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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);\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}, 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} 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;\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\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.reindex();\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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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[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));\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();\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, function (err) {\n\t\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t\t});\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, function (e) {\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\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;\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 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));\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: \"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 output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(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: \"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[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(type, key) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tif (type === undefined) type = \"mongo\";\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 (_this5.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 ? _this5.batch(arg, \"set\") : _this5.set(key, arg);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this5.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: \"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 _this6 = 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_this6.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_this6.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this6.index, _this6.indexes, _this6.delimiter, key, data, i);\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(_this6.index, _this6.indexes, _this6.delimiter, key, data, index);\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[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 _this7 = this;\n\n\t\t\t\tvar type = 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 (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this7.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 (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this7.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 _this8 = 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 = _this8.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(_this8.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 _this9 = this;\n\n\t\t\t\tvar batch = arguments[2] === undefined ? false : arguments[2];\n\t\t\t\tvar override = arguments[3] === undefined ? false : arguments[3];\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\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 (_this9.key) {\n\t\t\t\t\t\t\tif (_this9.source) {\n\t\t\t\t\t\t\t\t_this9.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[_this9.key] || ldata[_this9.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_this9.registry[_this9.total] = lkey;\n\t\t\t\t\t\t++_this9.total;\n\n\t\t\t\t\t\tif (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.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 (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ogdata);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this9.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ldata);\n\t\t\t\t\tdefer.resolve(_this9.get(lkey));\n\n\t\t\t\t\t_this9.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\tif (success && _this9.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this9.logging) {\n\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}\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 = null;\n\t\t\t\t} else if (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\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(concatURI(this.uri, lkey), {\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_this9.patch = false;\n\t\t\t\t\t\t\t\t_this9.request(concatURI(_this9.uri, lkey), {\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(concatURI(this.uri, lkey), {\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;\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[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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\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: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = 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 _this10 = 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(_this10.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 _this11 = 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(_this11.cmd.apply(_this11, [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}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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 _this12 = this;\n\n\t\t\t\tvar clear = 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_this12.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this12.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this12.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_this12.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this12.batch(data, \"set\").then(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\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[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[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: \"unload\",\n\t\t\tvalue: function unload(type, key) {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tif (type === undefined) type = \"mongo\";\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 (_this13.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 (_this13.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\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments[2] === undefined ? [] : arguments[2];\n\n\t\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.5.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","clone","arg","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","deferred","promise","undefined","resolver","rejecter","Promise","resolve","reject","keyIndex","data","delimiter","keys","split","sort","result","map","String","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","require","Map","fetch","tuple","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","type","next","all","then","defer","e","_this2","lload","del","hash","toArray","toObject","request","body","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","err","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","cmd","_this6","input","cfg","toUpperCase","res","status","_headers","_this7","_this8","rgex","test","seen","lindex","lset","lkey","_this9","override","ldata","xdata","sync","frozen","freeze","_this10","_this11","_len2","_key2","deferreds","_this12","Allow","allow","records","reduce","val","func","_this13","values","version","exports","module","define","haro","window"],"mappings":";;AASA,YAIA,SAASA,iBAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAFhH,GAAIC,cAAe,WAAe,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUR,EAAae,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBH,EAAYiB,UAAWF,GAAiBC,GAAab,EAAiBH,EAAagB,GAAqBhB,OAIjiB,SAAWkB,GAaV,QAASC,GAAMC,GACd,MAAOC,MAAKC,MAAMD,KAAKE,UAAUH,IAGlC,QAASI,GAAUC,EAAMC,GACxB,MAAOD,GAAKE,QAAQC,EAAMC,YAAa,IAAIF,QAAQC,EAAME,SAAU,KAAOJ,EAAQ,IAAMA,EAAQ,IAGjG,QAASK,KACR,GAAIC,GAAUC,OACVC,EAAWD,OACXE,EAAWF,MAOf,OALAD,GAAU,GAAII,GAAQ,SAAUC,EAASC,GACxCJ,EAAWG,EACXF,EAAWG,KAGHD,QAASH,EAAUI,OAAQH,EAAUH,QAASA,GAGxD,QAASO,GAASzB,EAAK0B,EAAMC,GAC5B,GAAIC,GAAO5B,EAAI6B,MAAMF,GAAWG,OAC5BC,EAASZ,MAUb,OAPCY,GADGH,EAAKnC,OAAS,EACRmC,EAAKI,IAAI,SAAUxC,GAC3B,MAAOyC,QAAOP,EAAKlC,IAAIqB,QAAQ,gBAAiB,IAAIqB,gBAClDC,KAAKR,GAECD,EAAK1B,GAMhB,QAASoC,GAASC,EAAOC,EAASX,EAAW3B,EAAK0B,GACjDW,EAAME,QAAQ,SAAU/C,GACvB,GAAIgD,GAAMF,EAAQG,IAAIjD,GAClBkD,EAAQjB,EAASjC,EAAGkC,EAAMC,GAC1BgB,EAAIxB,MAEJqB,GAAII,IAAIF,KACXC,EAAIH,EAAIC,IAAIC,GACZC,EAAE,UAAU3C,GAEG,IAAX2C,EAAEE,MACLL,EAAI,UAAUE,MAMlB,QAASI,GAAQC,EAAKC,GACjBD,YAAejD,QAClBA,OAAO8B,KAAKmB,GAAKR,QAAQ,SAAU/C,GAClCwD,EAAGC,KAAKF,EAAKA,EAAIvD,GAAIA,KAGtBuD,EAAIR,QAAQS,GAId,QAASE,GAAMC,EAAGC,GACjB,GAAIC,GAAUlC,SAANgC,EAAkB9C,EAAM8C,GAAKA,EACjCG,EAAUnC,SAANiC,EAAkB/C,EAAM+C,GAAKA,CAkBrC,OAhBIC,aAAavD,SAAUwD,YAAaxD,QACvCA,OAAO8B,KAAK0B,GAAGf,QAAQ,SAAU/C,GAC5B6D,EAAE7D,YAAcM,SAAUwD,EAAE9D,YAAcM,QAC7CuD,EAAE7D,GAAK0D,EAAMG,EAAE7D,GAAI8D,EAAE9D,IACX6D,EAAE7D,YAAc+D,QAASD,EAAE9D,YAAc+D,OACnDF,EAAE7D,GAAK6D,EAAE7D,GAAGgE,OAAOF,EAAE9D,IAErB6D,EAAE7D,GAAK8D,EAAE9D,KAIX6D,EADUA,YAAaE,QAASD,YAAaC,OACzCF,EAAEG,OAAOF,GAETA,EAGED,EAGR,QAASI,KACR,GAAIC,GAA0BvC,SAAjBwC,UAAU,MAAwBA,UAAU,GACrDjC,EAAwBP,SAAjBwC,UAAU,MAAwBA,UAAU,GACnD3D,EAAuBmB,SAAjBwC,UAAU,GAAmB,GAAKA,UAAU,GAClDC,EAA6BzC,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAE3D5B,IAkBJ,OAhBI6B,IACHd,EAAQY,EAAQ,SAAUG,EAAGC,GACxBA,IAAM9D,GAAmBmB,SAAZO,EAAKoC,IACrB/B,EAAOgC,MAAOC,GAAI,SAAUC,KAAM,IAAMH,MAK3ChB,EAAQpB,EAAM,SAAUmC,EAAGC,GACtBA,IAAM9D,GAAqBmB,SAAduC,EAAOI,GACvB/B,EAAOgC,MAAOC,GAAI,MAAOC,KAAM,IAAMH,EAAGpB,MAAOmB,IACrCtD,KAAKE,UAAUiD,EAAOI,MAAQvD,KAAKE,UAAUoD,IACvD9B,EAAOgC,MAAOC,GAAI,UAAWC,KAAM,IAAMH,EAAGpB,MAAOmB,MAI9C9B,EAGR,QAASmC,KACR,OAA8B,OAArB,EAAIC,KAAKC,UAAsB,GAAGC,SAAS,IAAIC,UAAU,GAGnE,QAASC,GAAclC,EAAOrC,EAAK0C,GAC7BL,EAAMO,IAAI5C,IACdqC,EAAMmC,IAAIxE,EAAK,GAAIyE,IAGpBpC,EAAMI,IAAIzC,GAAK0E,IAAIhC,GAGpB,QAASiC,GAAStC,EAAOC,EAASX,EAAW3B,EAAK0B,EAAMkD,GAClDA,EAKJL,EAAcjC,EAAQG,IAAImC,GAASnD,EAASmD,EAAQlD,EAAMC,GAAY3B,GAJtEqC,EAAME,QAAQ,SAAU/C,GACvB+E,EAAcjC,EAAQG,IAAIjD,GAAIiC,EAASjC,EAAGkC,EAAMC,GAAY3B,KAO/D,QAAS6E,GAASvE,GACjB,GAAIyB,KAMJ,OAJAzB,GAAIiC,QAAQ,SAAUG,EAAO1C,GAC5B+B,EAAO/B,GAAO0C,IAGRX,EAGR,QAAS+C,KACR,MAAOZ,KAAMA,IAAM,IAAMA,IAAM,KAAOA,IAAIa,OAAO,EAAG,GAAK,IAAMC,EAAEb,KAAKc,MAAsB,EAAhBd,KAAKC,WAAiBF,IAAIa,OAAO,EAAG,GAAK,IAAMb,IAAMA,IAAMA,IA+1BxI,QAASgB,KACR,GAAIxD,GAAwBP,SAAjBwC,UAAU,GAAmB,KAAOA,UAAU,GACrDwB,EAA0BhE,SAAjBwC,UAAU,MAAwBA,UAAU,GACrDrB,EAA2BnB,SAAjBwC,UAAU,MAAwBA,UAAU,EAE1D,OAAO,IAAIyB,MAAK1D,EAAMyD,EAAQ7C,GAlgC/B,GAAIhB,GAAUlB,EAAOkB,SAAW+D,QAAQ,eAAe/D,QACnDgE,EAAMlF,EAAOkF,KAAOD,QAAQ,WAC5BZ,EAAMrE,EAAOqE,KAAOY,QAAQ,WAC5BE,EAAQnF,EAAOmF,OAASF,QAAQ,cAChCG,EAAQpF,EAAOoF,OAASH,QAAQ,cAChCL,GAAK,EAAG,EAAG,IAAK,KAChBlE,GACHC,YAAa,OACbC,SAAU,OAEPyE,KAuJAL,KAAO,WACV,QAASA,MAAK1D,GACb,GAAIgE,GAAQC,KAERR,EAA0BhE,SAAjBwC,UAAU,MAAwBA,UAAU,EAEzD3E,iBAAgB2G,KAAMP,MAEtBO,KAAKC,YACLD,KAAKjE,KAAO,GAAI4D,GAChBK,KAAKhE,UAAY,IACjBgE,KAAKR,QACJU,OAAQ,MACRC,aAAa,EACbC,SACCC,OAAQ,mBACRC,eAAgB,qBAGlBN,KAAKO,GAAKpB,IACVa,KAAKtD,SACLsD,KAAKrD,QAAU,GAAIgD,GACnBK,KAAK3F,IAAM,GACX2F,KAAKQ,SAAU,EACfR,KAAKlC,OAAQ,EACbkC,KAAKS,YACLT,KAAKU,OAAS,GACdV,KAAKW,MAAQ,EACbX,KAAKY,IAAM,GACXZ,KAAKa,SAAW,GAAIlB,GACpBK,KAAKc,YAAa,EAElB3G,OAAO8B,KAAKuD,GAAQ5C,QAAQ,SAAU/C,GACrCkG,EAAMlG,GAAK0D,EAAMwC,EAAMlG,GAAI2F,EAAO3F,MAGnCmG,KAAKe,UAEDhF,GACHiE,KAAKgB,MAAMjF,EAAM,OAkzBnB,MA9yBAtC,cAAagG,OACZpF,IAAK,QACL0C,MAAO,SAAekE,EAAMC,GAW3B,QAASC,KACRxF,EAAQyF,IAAIH,EAAK5E,IAAIgB,IAAKgE,KAAK,SAAU1G,GACxC2G,EAAM1F,QAAQjB,IACZ,SAAU4G,GACZD,EAAMzF,OAAO0F,KAdf,GAAIC,GAASxB,KAETyB,EAAyBjG,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvDsD,EAAQhG,IACRoG,EAAe,QAATR,EACNnF,EAAOP,OACP6B,EAAK7B,OACLmG,EAAOnG,MAwDX,OA7CC6B,GADGqE,EACE,SAAU7H,GACd,MAAO2H,GAAOE,IAAI7H,GAAG,IAGjB,SAAUA,GACd,MAAO2H,GAAO3C,IAAI,KAAMhF,GAAG,GAAM,EAAM4H,IAIrCzB,KAAKlC,OACJ4D,EACH3F,EAAO+B,EAAMkC,KAAK4B,UAAUvF,IAAI,SAAUxC,GACzC,MAAOA,GAAE2H,EAAOnH,OACb4G,EAAMjB,KAAK3F,KAAK,IAEpB0B,KACA4F,KACAV,EAAKrE,QAAQ,SAAU/C,GACtB,GAAIQ,GAAMR,EAAE2H,EAAOnH,IAEfA,GACHsH,EAAKtH,GAAOR,EAEZkC,EAAKqC,MAAOC,GAAI,MAAOC,KAAM,IAAKvB,MAAOlD,MAG3CkC,EAAOA,EAAK8B,OAAOC,EAAMkC,KAAK6B,WAAYF,EAAM3B,KAAK3F,KAAK,KAGvD0B,EAAKjC,OAAS,EACjBkG,KAAK8B,QAAQ/G,EAAUiF,KAAKY,IAAK,OAChCV,OAAQ,QACR6B,KAAMnH,KAAKE,UAAUiB,KACnBsF,KAAK,WACPF,KACE,SAAUI,GACZD,EAAMzF,OAAO0F,KAGdD,EAAM1F,WAGPuF,IAGMG,EAAM/F,WAGdlB,IAAK,QACL0C,MAAO,WAWN,MAVAiD,MAAKW,MAAQ,EACbX,KAAKS,YACLT,KAAKjE,KAAKiG,QACVhC,KAAKrD,QAAQqF,QACbhC,KAAKa,SAASmB,QAEVhC,KAAKQ,SACRyB,QAAQC,IAAI,UAAWlC,KAAKO,IAGtBP,KAAKe,aAGb1G,IAAK,MACL0C,MAAO,SAAamE,GACnB,GAAII,GAAQhG,GAEZ,IAAK0E,KAAKC,SAASiB,IAAUpB,EAAQoB,GAE9B,CACN,IAAK,GAAIiB,GAAOnE,UAAUlE,OAAQmH,EAAOrD,MAAMuE,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAUD,EAAPC,EAAaA,IAC/FnB,EAAKmB,EAAO,GAAKpE,UAAUoE,EAG5BtC,GAAQoB,GAAMmB,MAAMrC,MAAOA,MAAMnC,OAAOoD,IAAOI,KAAK,SAAU1G,GAC7D2G,EAAM1F,QAAQjB,IACZ,SAAU4G,GACZD,EAAMzF,OAAO0F,SATdD,GAAMzF,OAAO,GAAIyG,OAAMpB,EAAO,0CAa/B,OAAOI,GAAM/F,WAGdlB,IAAK,MACL0C,MAAO,SAAa1C,GACnB,GAAIkI,GAASvC,KAETgB,EAAyBxF,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvDsD,EAAQhG,IACR6F,EAAO3F,MAoEX,OAlEA2F,GAAO,WACN,GAAIzE,GAAQ6F,EAAO9B,SAAS+B,QAAQnI,EAEhCqC,GAAQ,KACG,IAAVA,EACH6F,EAAO9B,SAASgC,QACN/F,IAAU6F,EAAO9B,SAAS3G,OAAS,EAC7CyI,EAAO9B,SAASiC,MAEhBH,EAAO9B,SAASkC,OAAOjG,EAAO,GAG/BD,EAAS8F,EAAO7F,MAAO6F,EAAO5F,QAAS4F,EAAOvG,UAAW3B,EAAKkI,EAAOxG,KAAKe,IAAIzC,IAC9EkI,EAAOxG,KAAK,UAAU1B,KACpBkI,EAAO5B,MAEL4B,EAAOzB,YACVyB,EAAO1B,SAAS,UAAUxG,GAG3BkI,EAAOK,QAAQ,SAAUvI,GAAKgH,KAAK,SAAUwB,GACxCA,GAAWN,EAAO/B,SACrByB,QAAQC,IAAI,UAAW7H,EAAK,4BAE3B,SAAUkH,GACRgB,EAAO/B,SACVyB,QAAQa,MAAM,iBAAkBzI,EAAK,2BAA4BkH,EAAEwB,SAAWxB,EAAEyB,OAASzB,MAK5FD,EAAM1F,WAGHoE,KAAKjE,KAAKkB,IAAI5C,IACZ2G,GAAShB,KAAKY,IACdZ,KAAKlC,MACRkC,KAAK8B,QAAQ/G,EAAUiF,KAAKY,IAAK,OAChCV,OAAQ,QACR6B,KAAMnH,KAAKE,YAAauD,GAAI,SAAUC,KAAM,IAAMjE,OAChDgH,KAAKF,EAAM,SAAUI,GACV,MAATA,EAAE,IACLgB,EAAOzE,OAAQ,EACfyE,EAAOT,QAAQ/G,EAAUwH,EAAO3B,IAAKvG,IACpC6F,OAAQ,WACNmB,KAAKF,EAAM,SAAU8B,GACvB3B,EAAMzF,OAAOoH,MAGd3B,EAAMzF,OAAO0F,KAIfvB,KAAK8B,QAAQ/G,EAAUiF,KAAKY,IAAKvG,IAChC6F,OAAQ,WACNmB,KAAKF,EAAM,SAAUI,GACvBD,EAAMzF,OAAO0F,KAIfJ,IAGDG,EAAMzF,OAAO,GAAIyG,OAAM,qBAGjBhB,EAAM/F,WAGdlB,IAAK,UACL0C,MAAO,WACN,MAAOiD,MAAKjE,KAAKmH,aAGlB7I,IAAK,OACL0C,MAAO,SAAcoG,GACpB,GAAIC,GAASpD,KAET3F,EAAMF,OAAO8B,KAAKkH,GAAOhH,OAAOK,KAAKwD,KAAKhE,WAC1Ce,EAAQjB,EAASzB,EAAK8I,EAAOnD,KAAKhE,WAClCI,IAQJ,OANI4D,MAAKrD,QAAQM,IAAI5C,KACnB2F,KAAKrD,QAAQG,IAAIzC,GAAKyC,IAAIC,IAAU,GAAI+B,IAAOlC,QAAQ,SAAU/C,GACjEuC,EAAOgC,KAAKgF,EAAOtG,IAAIjD,MAIlBgG,EAAMwC,MAAMxC,EAAOzD,MAG3B/B,IAAK,SACL0C,MAAO,SAAgBM,GACtB,GAAIjB,KAQJ,OANA4D,MAAKpD,QAAQ,SAAUG,EAAO1C,GACzBgD,EAAGN,EAAO1C,MAAS,GACtB+B,EAAOgC,KAAKyB,EAAMxF,EAAK0C,MAIlB8C,EAAMwC,MAAMxC,EAAOzD,MAG3B/B,IAAK,UACL0C,MAAO,SAAiBM,EAAIgG,GAK3B,MAJArD,MAAKjE,KAAKa,QAAQ,SAAUG,EAAO1C,GAClCgD,EAAG3C,EAAMqC,GAAQrC,EAAML,KACrBgJ,GAEIrD,QAGR3F,IAAK,MACL0C,MAAO,SAAa1C,GACnB,GAAIiJ,GAAS9H,MAMb,OAJIwE,MAAKjE,KAAKkB,IAAI5C,KACjBiJ,EAASzD,EAAMxF,EAAK2F,KAAKjE,KAAKe,IAAIzC,KAG5BiJ,KAGRjJ,IAAK,MACL0C,MAAO,SAAa1C,GACnB,MAAO2F,MAAKjE,KAAKkB,IAAI5C,MAGtBA,IAAK,OACL0C,MAAO,WACN,MAAOiD,MAAKjE,KAAKE,UAGlB5B,IAAK,QACL0C,MAAO,SAAewG,GACrB,GAAIC,GAA0BhI,SAAjBwC,UAAU,GAAmB,EAAIA,UAAU,GAEpDyF,EAAOF,EACPG,EAAUF,EACVG,KACA9J,EAAI2B,OACJ2C,EAAI3C,OACJoI,EAAMpI,MASV,IAPaA,SAATiI,IACHA,EAAO,IAGR5J,EAAI6J,EACJE,EAAMF,EAAUD,EAER,EAAJ5J,GAASA,GAAK+J,EACjB,KAAM,IAAItB,OAAM,gBAGjB,GACCnE,GAAI6B,KAAKS,SAAS5G,GAEdsE,GACHwF,EAAKvF,KAAK4B,KAAKlD,IAAIqB,YAEVtE,EAAI+J,EAEf,OAAO/D,GAAMwC,MAAMxC,EAAO8D,MAG3BtJ,IAAK,OACL0C,MAAO,SAAcmE,EAAM7G,GAC1B,GAAIwJ,GAAS7D,IAEAxE,UAAT0F,IAAoBA,EAAO,QAE/B,IAAIF,GAAgBxF,SAARnB,EACRkG,EAAMS,EAAchB,KAAKO,GAAXlG,CAMlB,OAJI2G,IACHhB,KAAKgC,QAGChC,KAAK8D,IAAI5C,EAAM,MAAO7G,GAAKgH,KAAK,SAAU1G,GAKhD,MAJIkJ,GAAOrD,SACVyB,QAAQC,IAAI,SAAU3B,EAAI,OAAQW,EAAM,sBAGlCF,EAAQ6C,EAAO7C,MAAMrG,EAAK,OAAO,GAAQkJ,EAAOhF,IAAIxE,EAAKM,GAAK,GAAM,GAAM,IAC/E,SAAU4G,GAKZ,KAJIsC,GAAOrD,SACVyB,QAAQa,MAAM,gBAAiBvC,EAAI,OAAQW,EAAM,sBAAuBK,EAAEwB,SAAWxB,EAAEyB,OAASzB,GAG3FA,OAIRlH,IAAK,MACL0C,MAAO,SAAaM,GACnB,GAAIjB,KAMJ,OAJA4D,MAAKpD,QAAQ,SAAUG,EAAO1C,GAC7B+B,EAAOgC,KAAKf,EAAGN,EAAO1C,MAGhBwF,EAAMwC,MAAMxC,EAAOzD,MAG3B/B,IAAK,WACL0C,MAAO,SAAkB1C,EAAKgD,GAC7ByC,EAAQzF,GAAOgD,KAGhBhD,IAAK,UACL0C,MAAO,SAAiBL,GACvB,GAAIqH,GAAS/D,IAmBb,OAjBKtD,IAWJsD,KAAKrD,QAAQkC,IAAInC,EAAO,GAAIiD,IAC5BK,KAAKpD,QAAQ,SAAUb,EAAM1B,GAC5B2E,EAAS+E,EAAOrH,MAAOqH,EAAOpH,QAASoH,EAAO/H,UAAW3B,EAAK0B,EAAMW,OAZrEsD,KAAKrD,QAAQqF,QACbhC,KAAKtD,MAAME,QAAQ,SAAU/C,GAC5BkK,EAAOpH,QAAQkC,IAAIhF,EAAG,GAAI8F,MAE3BK,KAAKpD,QAAQ,SAAUb,EAAM1B,GAC5B0J,EAAOrH,MAAME,QAAQ,SAAU/C,GAC9BmF,EAAS+E,EAAOrH,MAAOqH,EAAOpH,QAASoH,EAAO/H,UAAW3B,EAAK0B,EAAMlC,QAUhEmG,QAGR3F,IAAK,UACL0C,MAAO,SAAiBiH,GACvB,GAAIxE,GAA0BhE,SAAjBwC,UAAU,MAAwBA,UAAU,GAErDsD,EAAQhG,IACR2I,EAAM1G,EAAMyC,KAAKR,OAAQA,EA0B7B,OAxBAyE,GAAI/D,OAAS+D,EAAI/D,OAAOgE,cAExBtE,EAAMoE,EAAOC,GAAK5C,KAAK,SAAU8C,GAChC,GAAIC,GAASD,EAAIC,OACbhE,EAAU5E,MAEV2I,GAAI/D,QAAQiE,UACfjE,KACAjG,OAAO8B,KAAKkI,EAAI/D,QAAQiE,UAAUzH,QAAQ,SAAU/C,GACnDuG,EAAQvG,GAAKsK,EAAI/D,QAAQiE,SAASxK,GAAG2C,KAAK,SAG3C4D,EAAUlB,EAASiF,EAAI/D,SAGxB+D,EAAIA,EAAI/D,QAAQtD,IAAI,gBAAgB0F,QAAQ,oBAAsB,GAAK,OAAS,UAAUnB,KAAK,SAAU1G,GACxG2G,EAAe,IAAT8C,GAAgBA,GAAU,IAAM,SAAW,WAAWvE,EAAMlF,EAAKyJ,EAAQhE,KAC7E,SAAUmB,GACZD,EAAMzF,OAAOgE,EAAM0B,EAAEwB,QAASqB,EAAQhE,OAErC,SAAUmB,GACZD,EAAMzF,OAAOgE,EAAM0B,EAAEwB,QAAS,SAGxBzB,EAAM/F,WAGdlB,IAAK,OACL0C,MAAO,WACN,GAAIuH,GAAStE,KAETkB,EAAwB1F,SAAjBwC,UAAU,GAAmB,QAAUA,UAAU,EAE5D,OAAOgC,MAAK8D,IAAI5C,EAAM,OAAOG,KAAK,SAAU1G,GAK3C,MAJI2J,GAAO9D,SACVyB,QAAQC,IAAI,QAASoC,EAAO/D,GAAI,KAAMW,EAAM,sBAGtCvG,GACL,SAAU4G,GAKZ,KAJI+C,GAAO9D,SACVyB,QAAQa,MAAM,gBAAiBwB,EAAO/D,GAAI,KAAMW,EAAM,sBAAuBK,EAAEwB,SAAWxB,EAAEyB,OAASzB,GAGhGA,OAIRlH,IAAK,SACL0C,MAAO,SAAgBA,EAAOL,GAC7B,GAAI6H,GAASvE,KAET5D,KACAiB,EAAsB,kBAAVN,GACZyH,EAAOzH,GAA+B,kBAAfA,GAAM0H,KAC7BC,EAAO,GAAI5F,GACX6F,EAASnJ,OACTmB,EAAUnB,MAmCd,OAjCIuB,KACH4H,EAASjK,EAAMgC,GAASsD,KAAKtD,OAEzBiI,YAAkB/G,OACrBjB,EAAUgI,EACkB,gBAAXA,KACjBhI,GAAWgI,IAGZhI,EAAQC,QAAQ,SAAU/C,GACzB,GAAIgD,GAAM0H,EAAO5H,QAAQG,IAAIjD,EAEzBgD,IACHA,EAAID,QAAQ,SAAUgI,EAAMC,GAC3B,QAAQ,GACP,IAAKxH,IAAMN,EAAM8H,EAAMhL,GACvB,IAAK2K,IAAQzH,EAAM0H,KAAKI,GACxB,IAAKA,KAAS9H,EACb6H,EAAKhI,QAAQ,SAAUvC,GACjBqK,EAAKzH,IAAI5C,KACbqK,EAAK3F,IAAI1E,GACT+B,EAAOgC,KAAKmG,EAAOzH,IAAIzC,aAYxBwF,EAAMwC,MAAMxC,EAAOzD,MAG3B/B,IAAK,MACL0C,MAAO,SAAa1C,EAAK0B,GACxB,GAAIiF,GAAyBxF,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvD8G,EAAS9E,KAET+E,EAA4BvJ,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAC1DyD,EAAyBjG,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvDsD,EAAQhG,IACR4E,EAAS,OACT8E,EAAQtK,EAAMqB,GACd8I,EAAOxK,EACP0H,EAAOvG,OACPuC,EAASvC,OAET2F,EAAO,SAAcxG,GACxB,GAAIsK,GAAQtK,EAAMA,EAAI,KAET,QAATkK,IACCC,EAAOzK,KACNyK,EAAOpE,QACVoE,EAAOpE,OAAOxE,MAAM,KAAKU,QAAQ,SAAU/C,GAC1CoL,EAAQA,EAAMpL,SAIhBgL,EAAOI,EAAMH,EAAOzK,MAAQ2K,EAAMF,EAAOzK,MAAQ8E,KAEjD0F,EAAO1F,KAIM,SAAXe,GACH4E,EAAOrE,SAASqE,EAAOnE,OAASkE,IAC9BC,EAAOnE,MAELmE,EAAOhE,YACVgE,EAAOjE,SAAShC,IAAIgG,EAAM,GAAI/F,MAG3BgG,EAAOhE,YACVgE,EAAOjE,SAAS/D,IAAI+H,GAAM9F,IAAIc,EAAM9B,IAGrCtB,EAASqI,EAAOpI,MAAOoI,EAAOnI,QAASmI,EAAO9I,UAAW6I,EAAM9G,IAGhE+G,EAAO/I,KAAK8C,IAAIgG,EAAMG,GACtBhG,EAAS8F,EAAOpI,MAAOoI,EAAOnI,QAASmI,EAAO9I,UAAW6I,EAAMG,GAC/D1D,EAAM1F,QAAQkJ,EAAOhI,IAAI+H,IAEpBpD,GACJqD,EAAOlC,QAAQ,MAAOiC,EAAMG,GAAO3D,KAAK,SAAUwB,GAC7CA,GAAWiC,EAAOtE,SACrByB,QAAQC,IAAI,QAAS2C,EAAM,0BAE1B,SAAUtD,GACRuD,EAAOtE,SACVyB,QAAQa,MAAM,eAAgB+B,EAAM,yBAA0BtD,EAAEwB,SAAWxB,EAAEyB,OAASzB,KAuD1F,OAjDa/F,UAATqJ,GAA+B,OAATA,EACzBA,EAAO,KACG7E,KAAKjE,KAAKkB,IAAI4H,KACxB3E,EAAS,MACTnC,EAASiC,KAAKjE,KAAKe,IAAI+H,GAElBE,IACJC,EAAQzH,EAAMQ,EAAQiH,MAInBhE,GAAShB,KAAKY,IACdZ,KAAKlC,OAEPiE,EADc,SAAX7B,IACO7B,GAAI,MAAOC,KAAM,IAAKvB,MAAOiI,IAC7BD,IACA1G,GAAI,UAAWC,KAAM,IAAKvB,MAAOiI,IAEpClH,EAAMC,EAAQiH,EAAOhF,KAAK3F,KAGlC2F,KAAK8B,QAAQ/G,EAAUiF,KAAKY,IAAKiE,IAChC3E,OAAQ,QACR6B,KAAMnH,KAAKE,UAAUiH,KACnBV,KAAKF,EAAM,SAAUI,GACV,MAATA,EAAE,IACLuD,EAAOhH,OAAQ,EACfgH,EAAOhD,QAAQ/G,EAAU+J,EAAOlE,IAAKiE,IACpC3E,OAAQA,EACR6B,KAAMnH,KAAKE,UAAUkK,KACnB3D,KAAKF,EAAM,SAAU8B,GACvB3B,EAAMzF,OAAOoH,MAGd3B,EAAMzF,OAAO0F,MAIfvB,KAAK8B,QAAQ/G,EAAUiF,KAAKY,IAAKiE,IAChC3E,OAAQA,EACR6B,KAAMnH,KAAKE,UAAUkK,KACnB3D,KAAKF,EAAM,SAAUI,GACvBD,EAAMzF,OAAO0F,KAIfJ,IAGMG,EAAM/F,WAGdlB,IAAK,SACL0C,MAAO,SAAgB6D,GACtB,GAAIoB,GAAyBxG,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvDsD,EAAQhG,GAcZ,OAZA0E,MAAKY,IAAMA,EAEPZ,KAAKY,IACRZ,KAAKkF,KAAKlD,GAAOX,KAAK,SAAU1G,GAC/B2G,EAAM1F,QAAQjB,IACZ,SAAU4G,GACZD,EAAMzF,OAAO0F,KAGdD,EAAM1F,YAGA0F,EAAM/F,WAGdlB,IAAK,OACL0C,MAAO,SAAcM,GACpB,GAAI8H,GAA0B3J,SAAjBwC,UAAU,IAAmB,EAAOA,UAAU,GAEvD5B,EAASZ,MAUb,OAPCY,GADG+I,EACMhL,OAAOiL,OAAOpF,KAAK4B,QAAQ,MAAM,GAAOzF,KAAKkB,GAAIhB,IAAI,SAAUxC,GACvE,MAAOM,QAAOiL,OAAOvL,MAGbmG,KAAK4B,QAAQ,MAAM,GAAOzF,KAAKkB,MAM1ChD,IAAK,SACL0C,MAAO,SAAgBL,GACtB,GAAI2I,GAAUrF,KAEV5D,KACAH,KACA0I,EAASnJ,MAkBb,OAhBKwE,MAAKrD,QAAQM,IAAIP,KACrBsD,KAAKtD,MAAM0B,KAAK1B,GAChBsD,KAAKe,QAAQrE,IAGdiI,EAAS3E,KAAKrD,QAAQG,IAAIJ,GAC1BiI,EAAO/H,QAAQ,SAAUC,EAAKxC,GAC7B4B,EAAKmC,KAAK/D,KAGX4B,EAAKE,OAAOS,QAAQ,SAAU/C,GAC7B8K,EAAO7H,IAAIjD,GAAG+C,QAAQ,SAAUvC,GAC/B+B,EAAOgC,KAAKiH,EAAQvI,IAAIzC,QAInBwF,EAAMwC,MAAMxC,EAAOzD,MAG3B/B,IAAK,UACL0C,MAAO,WAGN,IAAK,GAFDuI,GAAUtF,KAELuF,EAAQvH,UAAUlE,OAAQmH,EAAOrD,MAAM2H,GAAQC,EAAQ,EAAWD,EAARC,EAAeA,IACjFvE,EAAKuE,GAASxH,UAAUwH,EAGzB,IAAIlE,GAAQhG,IACRmK,IAgBJ,OAdAtL,QAAO8B,KAAK+D,KAAKC,UAAUrD,QAAQ,SAAU/C,GAC5C4L,EAAUrH,KAAKkH,EAAQxB,IAAIzB,MAAMiD,GAAUzL,GAAGgE,OAAOoD,OAGlDwE,EAAU3L,OAAS,EACtB6B,EAAQyF,IAAIqE,GAAWpE,KAAK,WAC3BC,EAAM1F,SAAQ,IACZ,SAAU2F,GACZD,EAAMzF,OAAO0F,KAGdD,EAAM1F,SAAQ,GAGR0F,EAAM/F,WAGdlB,IAAK,OACL0C,MAAO,WACN,GAAI2I,GAAU1F,KAEVgC,EAAyBxG,SAAjBwC,UAAU,IAAmB,EAAQA,UAAU,GAEvDsD,EAAQhG,GA8BZ,OA5BA0E,MAAK8B,QAAQ9B,KAAKY,KAAKS,KAAK,SAAU1G,GACrC,GAAIoB,GAAOpB,EAAI,EAIf,IAFA+K,EAAQ5H,OAASnD,EAAI,GAAGgL,OAAShL,EAAI,GAAGiL,OAAS,IAAIpD,QAAQ,SAAW,GAEpEkD,EAAQhF,OACX,IACCgF,EAAQhF,OAAOxE,MAAM,KAAKU,QAAQ,SAAU/C,GAC3CkC,EAAOA,EAAKlC,KAEZ,MAAO0H,GACR,MAAOD,GAAMzF,OAAO0F,GAIlBS,GACH0D,EAAQ1D,QAGT0D,EAAQ1E,MAAMjF,EAAM,OAAOsF,KAAK,SAAUwE,GACzCvE,EAAM1F,QAAQiK,IACZ,SAAUtE,GACZD,EAAMzF,OAAO0F,MAEZ,SAAUA,GACZD,EAAMzF,OAAO0F,EAAE,IAAMA,KAGfD,EAAM/F,WAGdlB,IAAK,UACL0C,MAAO,SAAiBhB,GACvB,GAAIoJ,GAA0B3J,SAAjBwC,UAAU,IAAmB,EAAOA,UAAU,GAEvD3D,EAAM2F,KAAK3F,IACXgD,EAAK7B,OACLY,EAASZ,MA+Cb,OA7CIO,IACHsB,EAAK,WACJ,MAAIhD,GACI,SAAUmD,EAAGC,GACnB,GAAIL,GAAM1C,EAAM+C,EAAE,GAQlB,OANiBjC,UAAb4B,EAAI/C,KACP+C,EAAI/C,GAAOK,EAAM+C,EAAE,KAGpBD,EAAEY,KAAKhB,GAEAI,GAGD,SAAUA,EAAGC,GAGnB,MAFAD,GAAEY,KAAK1D,EAAM+C,EAAE,KAERD,MAIVpB,EAASL,EAAK+J,OAAOzI,QAErBA,EAAK,WACJ,MAAIhD,GACI,SAAU0L,EAAKxF,GACrB,GAAInD,GAAM1C,EAAMqL,EAECvK,UAAb4B,EAAI/C,KACP+C,EAAI/C,GAAOK,EAAM6F,IAGlBnE,EAAOgC,KAAKhB,IAGN,SAAU2I,GAChB3J,EAAOgC,KAAK1D,EAAMqL,QAIrB3J,KACA4D,KAAKpD,QAAQS,IAGP8H,EAAShL,OAAOiL,OAAOhJ,GAAUA,KAGzC/B,IAAK,WACL0C,MAAO,SAAkBhB,GACxB,GAAIoJ,GAA0B3J,SAAjBwC,UAAU,IAAmB,EAAOA,UAAU,GAEvDgI,EAAOxK,MAYX,QATCwK,EADGb,EACI,SAAUxK,GAChB,MAAOA,IAGD,SAAUA,GAChB,MAAOD,GAAMC,KAIFoB,EAAwBA,EAAK+J,OAAO,SAAUtI,EAAGC,GAG7D,MAFAD,GAAEC,EAAE,IAAMA,EAAE,GAELD,OAHY0B,EAASc,UAO9B3F,IAAK,SACL0C,MAAO,SAAgBmE,EAAM7G,GAC5B,GAAI4L,GAAUjG,IAEDxE,UAAT0F,IAAoBA,EAAO,QAE/B,IAAIX,GAAa/E,SAARnB,EAAoBA,EAAM2F,KAAKO,EAExC,OAAOP,MAAK8D,IAAI5C,EAAM,SAAU7G,GAAKgH,KAAK,SAAU1G,GAKnD,MAJIsL,GAAQzF,SACXyB,QAAQC,IAAI,WAAY3B,EAAI,OAAQW,EAAM,sBAGpCvG,GACL,SAAU4G,GAKZ,KAJI0E,GAAQzF,SACXyB,QAAQa,MAAM,kBAAmBvC,EAAI,OAAQW,EAAM,sBAAuBK,EAAEwB,SAAWxB,EAAEyB,OAASzB,GAG7FA,OAIRlH,IAAK,aACL0C,MAAO,SAAoB1C,SACnByF,GAAQzF,MAGhBA,IAAK,SACL0C,MAAO,WACN,MAAOiD,MAAKjE,KAAKmK,aAIZzG,OAWRF,GAAQ4G,QAAU,QAGK,mBAAZC,SACVC,OAAOD,QAAU7G,EACW,kBAAX+G,QACjBA,OAAO,WACN,MAAO/G,KAGR9E,EAAO8L,KAAOhH,GAEK,mBAAX9E,QAAyBA,OAAS+L","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.5.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 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 tuple = global.tuple || require(\"tiny-tuple\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar adapter = {};\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 deferred() {\n\t\tvar promise = undefined,\n\t\t resolver = undefined,\n\t\t rejecter = undefined;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction keyIndex(key, data, delimiter) {\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(/\\.|-|\\s*|\\t*/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) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter),\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\tidx[\"delete\"](value);\n\t\t\t\t}\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 patch() {\n\t\tvar ogdata = arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = 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) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter), key);\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[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.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\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[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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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}, 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} 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;\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\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.reindex();\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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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[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));\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();\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, function (err) {\n\t\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t\t});\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, function (e) {\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\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;\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 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));\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: \"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 output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(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: \"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[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(type, key) {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tif (type === undefined) type = \"mongo\";\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 (_this5.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 ? _this5.batch(arg, \"set\", true) : _this5.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this5.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: \"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 _this6 = 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_this6.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_this6.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this6.index, _this6.indexes, _this6.delimiter, key, data, i);\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(_this6.index, _this6.indexes, _this6.delimiter, key, data, index);\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[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 _this7 = this;\n\n\t\t\t\tvar type = 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 (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this7.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 (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this7.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 _this8 = 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 = _this8.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(_this8.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[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tvar override = arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = 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\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 (_this9.key) {\n\t\t\t\t\t\t\tif (_this9.source) {\n\t\t\t\t\t\t\t\t_this9.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[_this9.key] || ldata[_this9.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_this9.registry[_this9.total] = lkey;\n\t\t\t\t\t\t++_this9.total;\n\n\t\t\t\t\t\tif (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.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 (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ogdata);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this9.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ldata);\n\t\t\t\t\tdefer.resolve(_this9.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this9.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this9.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 (_this9.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 = null;\n\t\t\t\t} else if (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\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(concatURI(this.uri, lkey), {\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_this9.patch = false;\n\t\t\t\t\t\t\t\t_this9.request(concatURI(_this9.uri, lkey), {\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(concatURI(this.uri, lkey), {\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;\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[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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\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: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = 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 _this10 = 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(_this10.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 _this11 = 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(_this11.cmd.apply(_this11, [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}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\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 _this12 = this;\n\n\t\t\t\tvar clear = 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_this12.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this12.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this12.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_this12.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this12.batch(data, \"set\").then(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\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[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[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: \"unload\",\n\t\t\tvalue: function unload(type, key) {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tif (type === undefined) type = \"mongo\";\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 (_this13.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 (_this13.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\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments[2] === undefined ? [] : arguments[2];\n\n\t\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.5.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 6f6ac51..a7ff081 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.5.0", + "version": "1.5.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 def59fe..5f5ede3 100644 --- a/src/haro.js +++ b/src/haro.js @@ -35,7 +35,7 @@ class Haro { } } - batch (args, type) { + batch (args, type, lload = false) { let defer = deferred(), del = type === "del", data, fn, hash; @@ -54,7 +54,7 @@ class Haro { }; } else { fn = i => { - return this.set(null, i, true, true); + return this.set(null, i, true, true, lload); }; } @@ -297,7 +297,7 @@ class Haro { console.log("Loaded", id, "from", type, "persistent storage"); } - return batch ? this.batch(arg, "set") : this.set(key, arg); + return batch ? this.batch(arg, "set", true) : this.set(key, arg, true, true, true); }, e => { if (this.logging) { console.error("Error loading", id, "from", type, "persistent storage:", (e.message || e.stack || e)); @@ -432,7 +432,7 @@ class Haro { return tuple.apply(tuple, result); } - set (key, data, batch = false, override = false) { + set (key, data, batch = false, override = false, lload = false) { let defer = deferred(), method = "post", ldata = clone(data), @@ -475,15 +475,17 @@ class Haro { setIndex(this.index, this.indexes, this.delimiter, lkey, ldata); defer.resolve(this.get(lkey)); - this.storage("set", lkey, ldata).then(success => { - if (success && this.logging) { - console.log("Saved", lkey, "to persistent storage"); - } - }, e => { - if (this.logging) { - console.error("Error saving", lkey, "to persistent storage:", (e.message || e.stack || e)); - } - }); + if (!lload) { + this.storage("set", lkey, ldata).then(success => { + if (success && this.logging) { + console.log("Saved", lkey, "to persistent storage"); + } + }, e => { + if (this.logging) { + console.error("Error saving", lkey, "to persistent storage:", (e.message || e.stack || e)); + } + }); + } }; if (lkey === undefined || lkey === null) {