From d926351f06d1ad60c0048e910befd7a16d2ceb08 Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Wed, 14 Oct 2015 19:35:58 -0400 Subject: [PATCH] Fixing `registry` & `total` growth --- lib/haro.es6.js | 10 ++++++---- lib/haro.js | 10 ++++++---- lib/haro.min.js | 2 +- lib/haro.min.js.map | 2 +- package.json | 2 +- src/haro.js | 6 ++++-- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/haro.es6.js b/lib/haro.es6.js index a8f1f27..7d9c0b9 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.7.5 + * @version 1.7.6 */ "use strict"; @@ -770,8 +770,10 @@ class Haro { } if (method === "post") { - this.registry[this.total] = lkey; - ++this.total; + if (!this.data.has(lkey)) { + this.registry[this.total] = lkey; + ++this.total; + } if (this.versioning) { this.versions.set(lkey, new Set()); @@ -1105,7 +1107,7 @@ function factory (data = null, config = {}, indexes = []) { } factory.transform = cast; -factory.version = "1.7.5"; +factory.version = "1.7.6"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index fa3dc25..c797d93 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.7.5 + * @version 1.7.6 */ "use strict"; @@ -864,8 +864,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (method === "post") { - _this10.registry[_this10.total] = lkey; - ++_this10.total; + if (!_this10.data.has(lkey)) { + _this10.registry[_this10.total] = lkey; + ++_this10.total; + } if (_this10.versioning) { _this10.versions.set(lkey, new Set()); @@ -1237,7 +1239,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } factory.transform = cast; - factory.version = "1.7.5"; + factory.version = "1.7.6"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 84e2bb7..8a43f90 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2015 Jason Mulligan */ -"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function createIndexes(a,b,c,d,e){var f={};return b.forEach(function(a){f[a]={}}),a.forEach(function(a){var g=a[c];void 0!==g&&b.forEach(function(b){var c=keyIndex(b,a,d,e);void 0===f[b][c]&&(f[b][c]=[]),f[b][c].push(g)})}),f}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,b){var d=void 0!==a?c(a):a,e=void 0!==b?c(b):b;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(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 h(a){var b=JSON.parse(a.data),c=b.records,d=b.index,e=b.cmd,f=b.key,g=b.delimiter,h=b.pattern,i=void 0;"index"===e&&(i=createIndexes(c,d,f,g,h)),postMessage(JSON.stringify(i))}function i(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?"":arguments[2],d=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],e=[];return d&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(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 setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){var h=void 0;f?(h=keyIndex(f,e,c,g),void 0!==h&&null!==h&&setIndexValue(b.get(f),h,d)):a.forEach(function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],f=new Haro(c,d,e),g=void 0;if(w){g=[createIndexes.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),cast.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{f.worker=n?new Function(g.join("\n")):a.URL.createObjectURL(b(g.join("\n")))}catch(i){f.worker=null}}return f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=n?require("es6-promise").Promise:a.Promise,Map=n?require("es6-map"):a.Map,Set=n?require("es6-set"):a.Set,p=n?require("node-fetch"):a.fetch,q=n?require("tiny-defer"):a.deferred,r=n?require("tiny-tuple"):a.tuple,s=n?require("Blob"):a.Blob,t=n?require("tiny-worker"):a.Worker,u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w="undefined"!=typeof s&&"undefined"!=typeof t,x="Web Worker not supported",y={},Haro=function(){function Haro(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){o.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=q(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(h?j=i(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){c()},g.reject):g.resolve()):c(),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=q();if(this.adapters[a]&&y[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];y[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=q(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!c&&this.uri?this.patch?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(c){405===c[1]?(b.patch=!1,b.request(d(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=keyIndex(c,a,this.delimiter),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new Set).forEach(function(a){e.push(b.get(a))}),r.apply(r,e)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(r(d,c))}),r.apply(r,b)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,d){a(c(b),c(d))},b),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=r(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=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](r(a,b,d))},function(a){c.reject(r(a.message,b,d))})},function(a){c.reject(r(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0,j=void 0;return a&&(i=c(b||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)))})}})})),r.apply(r,e)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=q(),n="post",o=c(b),p=a,s=void 0,t=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===p&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),p=b[h.key]||o[h.key]||l()):p=l()),"post"===n?(h.registry[h.total]=p,++h.total,h.versioning&&h.versions.set(p,new Set)):(h.versioning&&h.versions.get(p).add(r(t)),e(h.index,h.indexes,h.delimiter,p,t,h.pattern)),h.data.set(p,o),setIndex(h.index,h.indexes,h.delimiter,p,o,null,h.pattern),m.resolve(h.get(p)),k||h.storage("set",p,o).then(function(a){a&&h.logging&&console.log("Saved",p,"to persistent storage")},function(a){h.logging&&console.error("Error saving",p,"to persistent storage:",a.message||a.stack||a)})};return void 0===p||null===p?p=null:this.data.has(p)&&(n="put",t=this.data.get(p),j||(o=g(t,o))),!f&&this.uri?(u=d(this.uri,p),this.patch?(s="post"===n?[{op:"add",path:"/",value:o}]:j?[{op:"replace",path:"/",value:o}]:i(t,o,this.key),this.request(u,{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(h.patch=!1,h.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):v(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=q();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),r.apply(r,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=q(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?o.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=q();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,b){var e=c(b[1]);return void 0===e[d]&&(e[d]=c(b[0])),a.push(e),a}:function(a,b){return a.push(c(b[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,b){var e=c(a);void 0===e[d]&&(e[d]=c(b)),f.push(e)}:function(a){f.push(c(a))}}(),f=[],this.forEach(e)),b?Object.freeze(f):f}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=b?function(a){return a}:function(a){return c(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):k(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete y[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new t(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(x)),b}}]),Haro}();m.transform=cast,m.version="1.7.5","undefined"!=typeof exports?module.exports=m:"function"==typeof define?define(function(){return m}):a.haro=m}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function createIndexes(a,b,c,d,e){var f={};return b.forEach(function(a){f[a]={}}),a.forEach(function(a){var g=a[c];void 0!==g&&b.forEach(function(b){var c=keyIndex(b,a,d,e);void 0===f[b][c]&&(f[b][c]=[]),f[b][c].push(g)})}),f}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,b){var d=void 0!==a?c(a):a,e=void 0!==b?c(b):b;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(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 h(a){var b=JSON.parse(a.data),c=b.records,d=b.index,e=b.cmd,f=b.key,g=b.delimiter,h=b.pattern,i=void 0;"index"===e&&(i=createIndexes(c,d,f,g,h)),postMessage(JSON.stringify(i))}function i(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?"":arguments[2],d=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],e=[];return d&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(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 setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){var h=void 0;f?(h=keyIndex(f,e,c,g),void 0!==h&&null!==h&&setIndexValue(b.get(f),h,d)):a.forEach(function(a){var f=keyIndex(a,e,c,g);void 0!==f&&null!==f&&setIndexValue(b.get(a),f,d)})}function k(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],f=new Haro(c,d,e),g=void 0;if(w){g=[createIndexes.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),cast.toString(),(n?"self.":"")+"onmessage = "+h.toString()+";"];try{f.worker=n?new Function(g.join("\n")):a.URL.createObjectURL(b(g.join("\n")))}catch(i){f.worker=null}}return f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=n?require("es6-promise").Promise:a.Promise,Map=n?require("es6-map"):a.Map,Set=n?require("es6-set"):a.Set,p=n?require("node-fetch"):a.fetch,q=n?require("tiny-defer"):a.deferred,r=n?require("tiny-tuple"):a.tuple,s=n?require("Blob"):a.Blob,t=n?require("tiny-worker"):a.Worker,u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w="undefined"!=typeof s&&"undefined"!=typeof t,x="Web Worker not supported",y={},Haro=function(){function Haro(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){o.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=q(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(h?j=i(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){c()},g.reject):g.resolve()):c(),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=q();if(this.adapters[a]&&y[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];y[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=q(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!c&&this.uri?this.patch?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(c){405===c[1]?(b.patch=!1,b.request(d(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=keyIndex(c,a,this.delimiter),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new Set).forEach(function(a){e.push(b.get(a))}),r.apply(r,e)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(r(d,c))}),r.apply(r,b)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,d){a(c(b),c(d))},b),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=r(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=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](r(a,b,d))},function(a){c.reject(r(a.message,b,d))})},function(a){c.reject(r(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0,j=void 0;return a&&(i=c(b||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)))})}})})),r.apply(r,e)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=q(),n="post",o=c(b),p=a,s=void 0,t=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===p&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),p=b[h.key]||o[h.key]||l()):p=l()),"post"===n?(h.data.has(p)||(h.registry[h.total]=p,++h.total),h.versioning&&h.versions.set(p,new Set)):(h.versioning&&h.versions.get(p).add(r(t)),e(h.index,h.indexes,h.delimiter,p,t,h.pattern)),h.data.set(p,o),setIndex(h.index,h.indexes,h.delimiter,p,o,null,h.pattern),m.resolve(h.get(p)),k||h.storage("set",p,o).then(function(a){a&&h.logging&&console.log("Saved",p,"to persistent storage")},function(a){h.logging&&console.error("Error saving",p,"to persistent storage:",a.message||a.stack||a)})};return void 0===p||null===p?p=null:this.data.has(p)&&(n="put",t=this.data.get(p),j||(o=g(t,o))),!f&&this.uri?(u=d(this.uri,p),this.patch?(s="post"===n?[{op:"add",path:"/",value:o}]:j?[{op:"replace",path:"/",value:o}]:i(t,o,this.key),this.request(u,{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(h.patch=!1,h.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):v(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=q();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),r.apply(r,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=q(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?o.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=q();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,b){var e=c(b[1]);return void 0===e[d]&&(e[d]=c(b[0])),a.push(e),a}:function(a,b){return a.push(c(b[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,b){var e=c(a);void 0===e[d]&&(e[d]=c(b)),f.push(e)}:function(a){f.push(c(a))}}(),f=[],this.forEach(e)),b?Object.freeze(f):f}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=b?function(a){return a}:function(a){return c(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):k(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete y[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new t(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(x)),b}}]),Haro}();m.transform=cast,m.version="1.7.6","undefined"!=typeof exports?module.exports=m:"function"==typeof define?define(function(){return m}):a.haro=m}("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 4e8dd99..7df8674 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","records","lkey","lindex","iterate","fn","call","merge","a","b","c","d","concat","onmessage","ev","cmd","postMessage","patch","ogdata","arguments","overwrite","v","k","op","path","s","Math","random","toString","substring","setIndexValue","setIndex","indice","lidx","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","Promise","require","fetch","deferred","tuple","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","next","all","then","defer","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","transform","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","useWorker","_this6","datum","_this7","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lset","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","values","onerror","terminate","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,GAmBV,QAASC,MAAKC,GACb,GAAIC,GAASC,MAEb,SAAQ,GACP,IAAKF,aAAiBG,KACrBF,KACAD,EAAMI,QAAQ,SAAUC,EAAOX,GAC9BO,EAAOP,GAAOK,KAAKM,IAEpB,MACD,KAAKL,aAAiBM,KACrBL,KACAD,EAAMI,QAAQ,SAAUlB,GACvBe,EAAOM,KAAKR,KAAKb,KAElB,MACD,KAAKc,aAAiBQ,OACrBP,EAAS,GAAIK,KACbN,EAAMI,QAAQ,SAAUlB,GACvBe,EAAOQ,IAAIV,KAAKb,KAEjB,MACD,KAAKc,aAAiBR,QACrBS,EAAS,GAAIE,KACbX,OAAOkB,KAAKV,GAAOI,QAAQ,SAAUlB,GACpCe,EAAOU,IAAIzB,EAAGa,KAAKC,EAAMd,MAE1B,MACD,SACCe,EAASD,EAGX,MAAOC,GAGR,QAASW,GAAKC,GACb,GAAIC,GAAMZ,MAEV,KACCY,EAAM,GAAIC,IAAMF,IAAQG,KAAM,2BAC7B,MAAOC,GACHnB,EAAOoB,cACXpB,EAAOoB,YAAcpB,EAAOqB,eAAiBrB,EAAOsB,mBAAqBtB,EAAOuB,gBAGjFP,GAAM,GAAIhB,GAAOoB,aAAcI,OAAOT,GAAKU,UAG5C,MAAOT,GAGR,QAASU,GAAMX,GACd,MAAOY,MAAKC,MAAMD,KAAKE,UAAUd,IAGlC,QAASe,GAAUC,EAAMC,GACxB,MAAOD,GAAKE,QAAQC,EAAMC,YAAa,IAAIF,QAAQC,EAAME,SAAU,KAAOJ,EAAQ,IAAMA,EAAQ,IAGjG,QAASK,UAASzC,EAAK0C,EAAMC,EAAWC,GACvC,GAAI5B,GAAOhB,EAAI6C,MAAMF,GAAWG,OAC5BvC,EAASC,MAUb,OAPCD,GADGS,EAAKvB,OAAS,EACRuB,EAAK+B,IAAI,SAAUvD,GAC3B,MAAOwD,QAAON,EAAKlD,IAAI6C,QAAQ,GAAIY,QAAOL,EAAS,KAAM,IAAIM,gBAC3DC,KAAKR,GAECD,EAAK1C,GAMhB,QAASoD,GAASC,EAAOC,EAASX,EAAW3C,EAAK0C,EAAME,GACvDS,EAAM3C,QAAQ,SAAUlB,GACvB,GAAI+D,GAAMD,EAAQE,IAAIhE,GAClBmB,EAAQ8B,SAASjD,EAAGkD,EAAMC,EAAWC,GACrCa,EAAIjD,MAEJ+C,GAAIG,IAAI/C,KACX8C,EAAIF,EAAIC,IAAI7C,GACZ8C,EAAE,UAAUzD,GAEG,IAAXyD,EAAEE,MACLJ,EAAI,UAAU5C,MAMlB,QAASiD,eAAcC,EAASP,EAAStD,EAAK2C,EAAWC,GACxD,GAAIrC,KAsBJ,OApBA+C,GAAQ5C,QAAQ,SAAUlB,GACzBe,EAAOf,QAGRqE,EAAQnD,QAAQ,SAAUlB,GACzB,GAAIsE,GAAOtE,EAAEQ,EAEAQ,UAATsD,GACHR,EAAQ5C,QAAQ,SAAU2C,GACzB,GAAIU,GAAStB,SAASY,EAAO7D,EAAGmD,EAAWC,EAEbpC,UAA1BD,EAAO8C,GAAOU,KACjBxD,EAAO8C,GAAOU,OAGfxD,EAAO8C,GAAOU,GAAQlD,KAAKiD,OAKvBvD,EAGR,QAASyD,GAAQ5C,EAAK6C,GACjB7C,YAAetB,QAClBA,OAAOkB,KAAKI,GAAKV,QAAQ,SAAUlB,GAClCyE,EAAGC,KAAK9C,EAAKA,EAAI5B,GAAIA,KAGtB4B,EAAIV,QAAQuD,GAId,QAASE,GAAMC,EAAGC,GACjB,GAAIC,GAAU9D,SAAN4D,EAAkBtC,EAAMsC,GAAKA,EACjCG,EAAU/D,SAAN6D,EAAkBvC,EAAMuC,GAAKA,CAkBrC,OAhBIC,aAAaxE,SAAUyE,YAAazE,QACvCA,OAAOkB,KAAKuD,GAAG7D,QAAQ,SAAUlB,GAC5B8E,EAAE9E,YAAcM,SAAUyE,EAAE/E,YAAcM,QAC7CwE,EAAE9E,GAAK2E,EAAMG,EAAE9E,GAAI+E,EAAE/E,IACX8E,EAAE9E,YAAcsB,QAASyD,EAAE/E,YAAcsB,OACnDwD,EAAE9E,GAAK8E,EAAE9E,GAAGgF,OAAOD,EAAE/E,IAErB8E,EAAE9E,GAAK+E,EAAE/E,KAIX8E,EADUA,YAAaxD,QAASyD,YAAazD,OACzCwD,EAAEE,OAAOD,GAETA,EAGED,EAGR,QAASG,GAAUC,GAClB,GAAIhC,GAAOX,KAAKC,MAAM0C,EAAGhC,MACrBmB,EAAUnB,EAAKmB,QACfR,EAAQX,EAAKW,MACbsB,EAAMjC,EAAKiC,IACX3E,EAAM0C,EAAK1C,IACX2C,EAAYD,EAAKC,UACjBC,EAAUF,EAAKE,QACfrC,EAASC,MAED,WAARmE,IACHpE,EAASqD,cAAcC,EAASR,EAAOrD,EAAK2C,EAAWC,IAGxDgC,YAAY7C,KAAKE,UAAU1B,IAG5B,QAASsE,KACR,GAAIC,GAASC,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,GAC9ErC,EAAOqC,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,GAC5E/E,EAAM+E,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,GAAKA,UAAU,GAC3EC,EAAYD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEpFxE,IAkBJ,OAhBIyE,IACHhB,EAAQc,EAAQ,SAAUG,EAAGC,GACxBA,IAAMlF,GAAmBQ,SAAZkC,EAAKwC,IACrB3E,EAAOM,MAAOsE,GAAI,SAAUC,KAAM,IAAMF,MAK3ClB,EAAQtB,EAAM,SAAUuC,EAAGC,GACtBA,IAAMlF,GAAqBQ,SAAdsE,EAAOI,GACvB3E,EAAOM,MAAOsE,GAAI,MAAOC,KAAM,IAAMF,EAAGvE,MAAOsE,IACrClD,KAAKE,UAAU6C,EAAOI,MAAQnD,KAAKE,UAAUgD,IACvD1E,EAAOM,MAAOsE,GAAI,UAAWC,KAAM,IAAMF,EAAGvE,MAAOsE,MAI9C1E,EAGR,QAAS8E,KACR,OAA8B,OAArB,EAAIC,KAAKC,UAAsB,GAAGC,SAAS,IAAIC,UAAU,GAGnE,QAASC,eAAcrC,EAAOrD,EAAKW,GAC7B0C,EAAMK,IAAI1D,IACdqD,EAAMpC,IAAIjB,EAAK,GAAIY,MAGpByC,EAAMG,IAAIxD,GAAKe,IAAIJ,GAGpB,QAASgF,UAAStC,EAAOC,EAASX,EAAW3C,EAAK0C,EAAMkD,EAAQhD,GAC/D,GAAIW,GAAM/C,MAELoF,IASJrC,EAAMd,SAASmD,EAAQlD,EAAMC,EAAWC,GAE5BpC,SAAR+C,GAA6B,OAARA,GACxBmC,cAAcpC,EAAQE,IAAIoC,GAASrC,EAAKvD,IAXzCqD,EAAM3C,QAAQ,SAAUlB,GACvB,GAAIqG,GAAOpD,SAASjD,EAAGkD,EAAMC,EAAWC,EAE3BpC,UAATqF,GAA+B,OAATA,GACzBH,cAAcpC,EAAQE,IAAIhE,GAAIqG,EAAM7F,KAYxC,QAAS8F,GAAS3E,GACjB,GAAIZ,KAMJ,OAJAY,GAAIT,QAAQ,SAAUC,EAAOX,GAC5BO,EAAOP,GAAOW,IAGRJ,EAGR,QAASwF,KACR,MAAOV,KAAMA,IAAM,IAAMA,IAAM,KAAOA,IAAIW,OAAO,EAAG,GAAK,IAAMC,EAAEX,KAAKY,MAAsB,EAAhBZ,KAAKC,WAAiBF,IAAIW,OAAO,EAAG,GAAK,IAAMX,IAAMA,IAAMA,IAk7BxI,QAASc,KACR,GAAIzD,GAAOqC,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,KAAOA,UAAU,GAC9EqB,EAASrB,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,GAC9EzB,EAAUyB,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,GAE/E3D,EAAM,GAAIiF,MAAK3D,EAAM0D,EAAQ9C,GAC7BgD,EAAY9F,MAEhB,IAAI+F,EAAW,CACdD,GAAa1C,cAAc4B,WAAY/C,SAAS+C,WAAYE,cAAcF,WAAYG,SAASH,WAAYnF,KAAKmF,YAAcgB,EAAc,QAAL,IAAgB,eAAiB/B,EAAUe,WAAa,IAE/L,KACCpE,EAAIqF,OAAUD,EAAkE,GAAIE,UAASJ,EAAUnD,KAAK,OAArF/C,EAAOuG,IAAIC,gBAAgB1F,EAAKoF,EAAUnD,KAAK,QACrE,MAAO5B,GACRH,EAAIqF,OAAS,MAIf,MAAOrF,GAnsCR,GAAIoF,GAA4B,mBAAZK,UAAuD,kBAArBA,SAAQC,SAC1DC,EAAWP,EAA0BQ,QAAQ,eAAeD,QAAxC3G,EAAO2G,QAC3BtG,IAAO+F,EAAsBQ,QAAQ,WAArB5G,EAAOK,IACvBG,IAAO4F,EAAsBQ,QAAQ,WAArB5G,EAAOQ,IACvBqG,EAAST,EAAwBQ,QAAQ,cAAvB5G,EAAO6G,MACzBC,EAAYV,EAA2BQ,QAAQ,cAA1B5G,EAAO8G,SAC5BC,EAASX,EAAwBQ,QAAQ,cAAvB5G,EAAO+G,MACzB9F,EAAQmF,EAAuBQ,QAAQ,QAAtB5G,EAAOiB,KACxB+F,EAAUZ,EAAyBQ,QAAQ,eAAxB5G,EAAOgH,OAC1BnB,GAAK,EAAG,EAAG,IAAK,KAChB3D,GACHC,YAAa,OACbC,SAAU,OAEP+D,EAA4B,mBAATlF,IAA0C,mBAAX+F,GAClDC,EAAiB,2BACjBC,KAkPAjB,KAAO,WACV,QAASA,MAAK3D,GACb,GAAI6E,GAAQC,KAERpB,EAASrB,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,EAElF/F,iBAAgBwI,KAAMnB,MAEtBmB,KAAKC,YACLD,KAAK9E,KAAO,GAAIjC,KAChB+G,KAAK7E,UAAY,IACjB6E,KAAKpB,QACJsB,OAAQ,MACRC,aAAa,EACbC,SACCC,OAAQ,mBACRC,eAAgB,qBAGlBN,KAAKO,GAAKhC,IACVyB,KAAKnE,SACLmE,KAAKlE,QAAU,GAAI7C,KACnB+G,KAAKxH,IAAM,GACXwH,KAAKQ,SAAU,EACfR,KAAK3C,OAAQ,EACb2C,KAAK5E,QAAU,YACf4E,KAAKS,YACLT,KAAKU,OAAS,GACdV,KAAKW,MAAQ,EACbX,KAAKY,IAAM,GACXZ,KAAKf,OAAS,KACde,KAAKa,SAAW,GAAI5H,KACpB+G,KAAKc,YAAa,EAElBxI,OAAOkB,KAAKoF,GAAQ1F,QAAQ,SAAUlB,GACrC+H,EAAM/H,GAAK2E,EAAMoD,EAAM/H,GAAI4G,EAAO5G,MAGnCgI,KAAKe,UAED7F,GACH8E,KAAKgB,MAAM9F,EAAM,OAm4BnB,MA/3BAtD,cAAaiH,OACZrG,IAAK,QACLW,MAAO,SAAe8H,EAAMnH,GAW3B,QAASoH,KACR3B,EAAQ4B,IAAIF,EAAK1F,IAAIkB,IAAK2E,KAAKC,EAAMC,QAASD,EAAME,QAXrD,GAAIC,GAASxB,KAETyB,EAAQlE,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhF8D,EAAQ3B,IACRgC,EAAe,QAAT5H,EACNoB,EAAOlC,OACPyD,EAAKzD,OACL2I,EAAO3I,MAkDX,OA3CCyD,GADGiF,EACE,SAAU1J,GACd,MAAOwJ,GAAOE,IAAI1J,GAAG,IAGjB,SAAUA,GACd,MAAOwJ,GAAO/H,IAAI,KAAMzB,GAAG,GAAM,EAAMyJ,IAIrCzB,KAAK3C,OACJqE,EACHxG,EAAOmC,EAAM2C,KAAK4B,UAAUrG,IAAI,SAAUvD,GACzC,MAAOA,GAAEwJ,EAAOhJ,OACbyI,EAAMjB,KAAKxH,KAAK,IAEpB0C,KACAyG,KACAV,EAAK/H,QAAQ,SAAUlB,GACtB,GAAIQ,GAAMR,EAAEwJ,EAAOhJ,IAEfA,GACHmJ,EAAKnJ,GAAOR,EAEZkD,EAAK7B,MAAOsE,GAAI,MAAOC,KAAM,IAAKzE,MAAOnB,MAG3CkD,EAAOA,EAAK8B,OAAOK,EAAM2C,KAAK6B,WAAYF,EAAM3B,KAAKxH,KAAK,KAGvD0C,EAAKjD,OAAS,EACjB+H,KAAK8B,QAAQpH,EAAUsF,KAAKY,IAAK,OAChCV,OAAQ,QACR6B,KAAMxH,KAAKE,UAAUS,KACnBkG,KAAK,WACPF,KACEG,EAAME,QAETF,EAAMC,WAGPJ,IAGMG,EAAMW,WAGdxJ,IAAK,QACLW,MAAO,WAWN,MAVA6G,MAAKW,MAAQ,EACbX,KAAKS,YACLT,KAAK9E,KAAK+G,QACVjC,KAAKlE,QAAQmG,QACbjC,KAAKa,SAASoB,QAEVjC,KAAKQ,SACR0B,QAAQC,IAAI,UAAWnC,KAAKO,IAGtBP,KAAKe,aAGbvI,IAAK,MACLW,MAAO,SAAaW,GACnB,GAAIuH,GAAQ3B,GAEZ,IAAKM,KAAKC,SAASnG,IAAUgG,EAAQhG,GAE9B,CACN,IAAK,GAAIsI,GAAO7E,UAAUtF,OAAQgJ,EAAO3H,MAAM8I,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAUD,EAAPC,EAAaA,IAC/FpB,EAAKoB,EAAO,GAAK9E,UAAU8E,EAG5BvC,GAAQhG,GAAMwI,MAAMtC,MAAOA,MAAMhD,OAAOiE,IAAOG,KAAKC,EAAMC,QAASD,EAAME,YANzEF,GAAME,OAAO,GAAIgB,OAAMzI,EAAO,0CAS/B,OAAOuH,GAAMW,WAGdxJ,IAAK,MACLW,MAAO,SAAaX,GACnB,GAAIgK,GAASxC,KAETgB,EAAQzD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhF8D,EAAQ3B,IACRwB,EAAOlI,MAgEX,OA9DAkI,GAAO,WACN,GAAIrF,GAAQ2G,EAAO/B,SAASgC,QAAQjK,EAEhCqD,GAAQ,KACG,IAAVA,EACH2G,EAAO/B,SAASiC,QACN7G,IAAU2G,EAAO/B,SAASxI,OAAS,EAC7CuK,EAAO/B,SAASkC,MAEhBH,EAAO/B,SAASmC,OAAO/G,EAAO,GAG/BD,EAAS4G,EAAO3G,MAAO2G,EAAO1G,QAAS0G,EAAOrH,UAAW3C,EAAKgK,EAAOtH,KAAKc,IAAIxD,GAAMgK,EAAOpH,SAC3FoH,EAAOtH,KAAK,UAAU1C,KACpBgK,EAAO7B,MAEL6B,EAAO1B,YACV0B,EAAO3B,SAAS,UAAUrI,GAG3BgK,EAAOK,QAAQ,SAAUrK,GAAK4I,KAAK,SAAU0B,GACxCA,GAAWN,EAAOhC,SACrB0B,QAAQC,IAAI,UAAW3J,EAAK,4BAE3B,SAAUuB,GACRyI,EAAOhC,SACV0B,QAAQa,MAAM,iBAAkBvK,EAAK,2BAA4BuB,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,MAK5FsH,EAAMC,WAGHtB,KAAK9E,KAAKgB,IAAI1D,IACZwI,GAAShB,KAAKY,IACdZ,KAAK3C,MACR2C,KAAK8B,QAAQpH,EAAUsF,KAAKY,IAAK,OAChCV,OAAQ,QACR6B,KAAMxH,KAAKE,YAAakD,GAAI,SAAUC,KAAM,IAAMpF,OAChD4I,KAAKF,EAAM,SAAUnH,GACV,MAATA,EAAE,IACLyI,EAAOnF,OAAQ,EACfmF,EAAOV,QAAQpH,EAAU8H,EAAO5B,IAAKpI,IACpC0H,OAAQ,WACNkB,KAAKF,EAAMG,EAAME,SAEpBF,EAAME,OAAOxH,KAIfiG,KAAK8B,QAAQpH,EAAUsF,KAAKY,IAAKpI,IAChC0H,OAAQ,WACNkB,KAAKF,EAAMG,EAAME,QAGrBL,IAGDG,EAAME,OAAO,GAAIgB,OAAM,qBAGjBlB,EAAMW,WAGdxJ,IAAK,OACLW,MAAO,WACN,GAAIW,GAAOyD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,UAAYA,UAAU,GAEnFxE,EAASC,MAQb,OALCD,GADY,YAATe,EACMkG,KAAK4B,QAAQ,MAAM,GAEnB5B,KAAKkD,UAAUlD,KAAKlE,YAM/BtD,IAAK,UACLW,MAAO,WACN,MAAO6G,MAAK9E,KAAKiI,aAGlB3K,IAAK,OACLW,MAAO,SAAciK,GACpB,GAAIC,GAASrD,KAETxH,EAAMF,OAAOkB,KAAK4J,GAAO9H,OAAOK,KAAKqE,KAAK7E,WAC1ChC,EAAQ8B,SAASzC,EAAK4K,EAAOpD,KAAK7E,WAClCpC,IAQJ,OANIiH,MAAKlE,QAAQI,IAAI1D,KACnBwH,KAAKlE,QAAQE,IAAIxD,GAAKwD,IAAI7C,IAAU,GAAIC,MAAOF,QAAQ,SAAUlB,GACjEe,EAAOM,KAAKgK,EAAOrH,IAAIhE,MAIlB2H,EAAM2C,MAAM3C,EAAO5G,MAG3BP,IAAK,SACLW,MAAO,SAAgBsD,GACtB,GAAI1D,KAQJ,OANAiH,MAAK9G,QAAQ,SAAUC,EAAOX,GACzBiE,EAAGtD,EAAOX,MAAS,GACtBO,EAAOM,KAAKsG,EAAMnH,EAAKW,MAIlBwG,EAAM2C,MAAM3C,EAAO5G,MAG3BP,IAAK,UACLW,MAAO,SAAiBsD,EAAI6G,GAK3B,MAJAtD,MAAK9E,KAAKhC,QAAQ,SAAUC,EAAOX,GAClCiE,EAAGnC,EAAMnB,GAAQmB,EAAM9B,KACrB8K,GAEItD,QAGRxH,IAAK,MACLW,MAAO,SAAaX,GACnB,GAAI+K,GAASvK,MAMb,OAJIgH,MAAK9E,KAAKgB,IAAI1D,KACjB+K,EAAS5D,EAAMnH,EAAKwH,KAAK9E,KAAKc,IAAIxD,KAG5B+K,KAGR/K,IAAK,MACLW,MAAO,SAAaX,GACnB,MAAOwH,MAAK9E,KAAKgB,IAAI1D,MAGtBA,IAAK,OACLW,MAAO,WACN,MAAO6G,MAAK9E,KAAK1B,UAGlBhB,IAAK,QACLW,MAAO,SAAeqK,GACrB,GAAIC,GAASlG,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,EAAIA,UAAU,GAE7EmG,EAAOF,EACPG,EAAUF,EACVG,KACA5L,EAAIgB,OACJ0E,EAAI1E,OACJ6K,EAAM7K,MASV,IAPaA,SAAT0K,IACHA,EAAO,IAGR1L,EAAI2L,EACJE,EAAMF,EAAUD,EAER,EAAJ1L,GAASA,GAAK6L,EACjB,KAAM,IAAItB,OAAM,gBAGjB,GACC7E,GAAIsC,KAAKS,SAASzI,GAEd0F,GACHkG,EAAKvK,KAAK2G,KAAKhE,IAAI0B,YAEV1F,EAAI6L,EAEf,OAAOlE,GAAM2C,MAAM3C,EAAOiE,MAG3BpL,IAAK,OACLW,MAAO,WACN,GAAI2K,GAAS9D,KAETlG,EAAOyD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,QAAUA,UAAU,GACjF/E,EAAM+E,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmBvE,OAAYuE,UAAU,GAElFyD,EAAgBhI,SAARR,EACR+H,EAAMS,EAAchB,KAAKO,GAAX/H,CAMlB,OAJIwI,IACHhB,KAAKiC,QAGCjC,KAAK7C,IAAIrD,EAAM,MAAOtB,GAAK4I,KAAK,SAAUzH,GAKhD,MAJImK,GAAOtD,SACV0B,QAAQC,IAAI,SAAU5B,EAAI,OAAQzG,EAAM,sBAGlCkH,EAAQ8C,EAAO9C,MAAMrH,EAAK,OAAO,GAAQmK,EAAOrK,IAAIjB,EAAKmB,GAAK,GAAM,GAAM,IAC/E,SAAUI,GAKZ,KAJI+J,GAAOtD,SACV0B,QAAQa,MAAM,gBAAiBxC,EAAI,OAAQzG,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAG3FA,OAIRvB,IAAK,MACLW,MAAO,SAAasD,GACnB,GAAI1D,KAMJ,OAJAiH,MAAK9G,QAAQ,SAAUC,EAAOX,GAC7BO,EAAOM,KAAKoD,EAAGtD,EAAOX,MAGhBmH,EAAM2C,MAAM3C,EAAO5G,MAG3BP,IAAK,UACLW,MAAO,SAAiB+B,GACvB,GAAIiC,GAAMI,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,QAAUA,UAAU,GAChF1B,EAAQ0B,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmByC,KAAKnE,MAAQ0B,UAAU,GAErF8D,EAAQ3B,IACR9F,EAAMZ,MAmBV,OAjBIgH,MAAKf,QACRrF,EAAMoG,KAAK+D,UAAU1C,GAEjBzH,GACHA,EAAIwD,YAAY7C,KAAKE,WACpB0C,IAAKA,EACLtB,MAAOA,EACPQ,QAASnB,EACT1C,IAAKwH,KAAKxH,IACV2C,UAAW6E,KAAK7E,UAChBC,QAAS4E,KAAK5E,YAIhBiG,EAAME,OAAO,GAAIgB,OAAM1C,IAGjBwB,EAAMW,WAGdxJ,IAAK,WACLW,MAAO,SAAkB+B,GACxB,GAAI8I,GAAShE,KAETlG,EAAOyD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,UAAYA,UAAU,GACnFd,EAAKc,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmBvE,OAAYuE,UAAU,GAEjF8D,EAAQ3B,GAoBZ,OAlBa,YAAT5F,GACHkG,KAAKlE,QAAUkE,KAAKkD,UAAUhI,EAAMuB,GACpC4E,EAAMC,SAAQ,IACK,YAATxH,GACVkG,KAAK9E,KAAO,GAAIjC,KAChB+G,KAAKS,YACLvF,EAAKhC,QAAQ,SAAU+K,GACtB,GAAIzL,GAAMyL,EAAMD,EAAOxL,MAAQ+F,GAE/ByF,GAAO9I,KAAKzB,IAAIjB,EAAKyL,GACrBD,EAAOvD,SAASpH,KAAKb,KAEtBwH,KAAKW,MAAQX,KAAK9E,KAAKiB,KACvBkF,EAAMC,SAAQ,IAEdD,EAAME,OAAO,GAAIgB,OAAM,iBAGjBlB,EAAMW,WAGdxJ,IAAK,WACLW,MAAO,SAAkBX,EAAKiE,GAC7BqD,EAAQtH,GAAOiE,KAGhBjE,IAAK,UACLW,MAAO,SAAiB0C,GACvB,GAAIqI,GAASlE,IAmBb,OAjBKnE,IAWJmE,KAAKlE,QAAQrC,IAAIoC,EAAO,GAAI5C,MAC5B+G,KAAK9G,QAAQ,SAAUgC,EAAM1C,GAC5B2F,SAAS+F,EAAOrI,MAAOqI,EAAOpI,QAASoI,EAAO/I,UAAW3C,EAAK0C,EAAMW,EAAOqI,EAAO9I,aAZnF4E,KAAKlE,QAAQmG,QACbjC,KAAKnE,MAAM3C,QAAQ,SAAUlB,GAC5BkM,EAAOpI,QAAQrC,IAAIzB,EAAG,GAAIiB,QAE3B+G,KAAK9G,QAAQ,SAAUgC,EAAM1C,GAC5B0L,EAAOrI,MAAM3C,QAAQ,SAAUlB,GAC9BmG,SAAS+F,EAAOrI,MAAOqI,EAAOpI,QAASoI,EAAO/I,UAAW3C,EAAK0C,EAAMlD,EAAGkM,EAAO9I,cAU1E4E,QAGRxH,IAAK,UACLW,MAAO,SAAiBL,GACvB,GAAI8F,GAASrB,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,MAAwBA,UAAU,GAE9E8D,EAAQ3B,IACRyE,EAAMxH,EAAMqD,KAAKpB,OAAQA,EA0B7B,OAxBAuF,GAAIjE,OAASiE,EAAIjE,OAAOkE,cAExB3E,EAAM3G,EAAOqL,GAAK/C,KAAK,SAAUiD,GAChC,GAAIC,GAASD,EAAIC,OACblE,EAAUpH,MAEVqL,GAAIjE,QAAQmE,UACfnE,KACA9H,OAAOkB,KAAK6K,EAAIjE,QAAQmE,UAAUrL,QAAQ,SAAUlB,GACnDoI,EAAQpI,GAAKqM,EAAIjE,QAAQmE,SAASvM,GAAG2D,KAAK,SAG3CyE,EAAU9B,EAAS+F,EAAIjE,SAGxBiE,EAAIA,EAAIjE,QAAQpE,IAAI,gBAAgByG,QAAQ,oBAAsB,GAAK,OAAS,UAAUrB,KAAK,SAAUzH,GACxG0H,EAAe,IAATiD,GAAgBA,GAAU,IAAM,SAAW,WAAW3E,EAAMhG,EAAK2K,EAAQlE,KAC7E,SAAUrG,GACZsH,EAAME,OAAO5B,EAAM5F,EAAEiJ,QAASsB,EAAQlE,OAErC,SAAUrG,GACZsH,EAAME,OAAO5B,EAAM5F,EAAEiJ,QAAS,SAGxB3B,EAAMW,WAGdxJ,IAAK,OACLW,MAAO,WACN,GAAIqL,GAASxE,KAETlG,EAAOyD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,QAAUA,UAAU,EAErF,OAAOyC,MAAK7C,IAAIrD,EAAM,OAAOsH,KAAK,SAAUzH,GAK3C,MAJI6K,GAAOhE,SACV0B,QAAQC,IAAI,QAASqC,EAAOjE,GAAI,KAAMzG,EAAM,sBAGtCH,GACL,SAAUI,GAKZ,KAJIyK,GAAOhE,SACV0B,QAAQa,MAAM,gBAAiByB,EAAOjE,GAAI,KAAMzG,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAGhGA,OAIRvB,IAAK,SACLW,MAAO,SAAgBA,EAAO0C,GAC7B,GAAI4I,GAASzE,KAETjH,KACA0D,EAAsB,kBAAVtD,GACZuL,EAAOvL,GAA+B,kBAAfA,GAAMwL,KAC7BC,EAAO,GAAIxL,KACXmD,EAASvD,OACT8C,EAAU9C,MAmCd,OAjCIG,KACHoD,EAASjC,EAAMuB,GAASmE,KAAKnE,OAEzBU,YAAkBjD,OACrBwC,EAAUS,EACkB,gBAAXA,KACjBT,GAAWS,IAGZT,EAAQ5C,QAAQ,SAAUlB,GACzB,GAAI+D,GAAM0I,EAAO3I,QAAQE,IAAIhE,EAEzB+D,IACHA,EAAI7C,QAAQ,SAAU2L,EAAMvI,GAC3B,QAAQ,GACP,IAAKG,IAAMtD,EAAMmD,EAAMtE,GACvB,IAAK0M,IAAQvL,EAAMwL,KAAKrI,GACxB,IAAKA,KAASnD,EACb0L,EAAK3L,QAAQ,SAAUV,GACjBoM,EAAK1I,IAAI1D,KACboM,EAAKrL,IAAIf,GACTO,EAAOM,KAAKoL,EAAOzI,IAAIxD,aAYxBmH,EAAM2C,MAAM3C,EAAO5G,MAG3BP,IAAK,MACLW,MAAO,SAAaX,EAAK0C,GACxB,GAAI8F,GAAQzD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhFuH,EAAU9E,KAEV+E,EAAWxH,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GACnFkE,EAAQlE,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhF8D,EAAQ3B,IACRQ,EAAS,OACT8E,EAAQ1K,EAAMY,GACdoB,EAAO9D,EACPuJ,EAAO/I,OACPsE,EAAStE,OACTiM,EAAOjM,OAEPkI,EAAO,SAAcvH,GACxB,GAAIuL,GAAQvL,EAAMA,EAAI,KAET,QAAT2C,IACCwI,EAAQtM,KACPsM,EAAQpE,QACXoE,EAAQpE,OAAOrF,MAAM,KAAKnC,QAAQ,SAAUlB,GAC3CkN,EAAQA,EAAMlN,SAIhBsE,EAAO4I,EAAMJ,EAAQtM,MAAQwM,EAAMF,EAAQtM,MAAQ+F,KAEnDjC,EAAOiC,KAIM,SAAX2B,GACH4E,EAAQrE,SAASqE,EAAQnE,OAASrE,IAChCwI,EAAQnE,MAENmE,EAAQhE,YACXgE,EAAQjE,SAASpH,IAAI6C,EAAM,GAAIlD,QAG5B0L,EAAQhE,YACXgE,EAAQjE,SAAS7E,IAAIM,GAAM/C,IAAIoG,EAAMrC,IAGtC1B,EAASkJ,EAAQjJ,MAAOiJ,EAAQhJ,QAASgJ,EAAQ3J,UAAWmB,EAAMgB,EAAQwH,EAAQ1J,UAGnF0J,EAAQ5J,KAAKzB,IAAI6C,EAAM0I,GACvB7G,SAAS2G,EAAQjJ,MAAOiJ,EAAQhJ,QAASgJ,EAAQ3J,UAAWmB,EAAM0I,EAAO,KAAMF,EAAQ1J,SACvFiG,EAAMC,QAAQwD,EAAQ9I,IAAIM,IAErBmF,GACJqD,EAAQjC,QAAQ,MAAOvG,EAAM0I,GAAO5D,KAAK,SAAU0B,GAC9CA,GAAWgC,EAAQtE,SACtB0B,QAAQC,IAAI,QAAS7F,EAAM,0BAE1B,SAAUvC,GACR+K,EAAQtE,SACX0B,QAAQa,MAAM,eAAgBzG,EAAM,yBAA0BvC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,KAyD1F,OAnDaf,UAATsD,GAA+B,OAATA,EACzBA,EAAO,KACG0D,KAAK9E,KAAKgB,IAAII,KACxB4D,EAAS,MACT5C,EAAS0C,KAAK9E,KAAKc,IAAIM,GAElByI,IACJC,EAAQrI,EAAMW,EAAQ0H,MAInBhE,GAAShB,KAAKY,KAClBqE,EAAOvK,EAAUsF,KAAKY,IAAKtE,GAEvB0D,KAAK3C,OAEP0E,EADc,SAAX7B,IACOvC,GAAI,MAAOC,KAAM,IAAKzE,MAAO6L,IAC7BD,IACApH,GAAI,UAAWC,KAAM,IAAKzE,MAAO6L,IAEpC3H,EAAMC,EAAQ0H,EAAOhF,KAAKxH,KAGlCwH,KAAK8B,QAAQmD,GACZ/E,OAAQ,QACR6B,KAAMxH,KAAKE,UAAUsH,KACnBX,KAAKF,EAAM,SAAUnH,GACV,MAATA,EAAE,IACL+K,EAAQzH,OAAQ,EAChByH,EAAQhD,QAAQmD,GACf/E,OAAQA,EACR6B,KAAMxH,KAAKE,UAAUuK,KACnB5D,KAAKF,EAAM,SAAUiE,GACvB9D,EAAME,OAAO4D,MAGd9D,EAAME,OAAOxH,MAIfiG,KAAK8B,QAAQmD,GACZ/E,OAAQA,EACR6B,KAAMxH,KAAKE,UAAUuK,KACnB5D,KAAKF,EAAM,SAAUnH,GACvBsH,EAAME,OAAOxH,MAIfmH,IAGMG,EAAMW,WAGdxJ,IAAK,SACLW,MAAO,SAAgByH,GACtB,GAAIqB,GAAQ1E,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhF8D,EAAQ3B,GAUZ,OARAM,MAAKY,IAAMA,EAEPZ,KAAKY,IACRZ,KAAKoF,KAAKnD,GAAOb,KAAKC,EAAMC,QAASD,EAAME,QAE3CF,EAAMC,YAGAD,EAAMW,WAGdxJ,IAAK,OACLW,MAAO,SAAcsD,GACpB,GAAI4I,GAAS9H,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAOA,UAAU,GAEhFxE,EAASC,MAUb,OAPCD,GADGsM,EACM/M,OAAOgN,OAAOtF,KAAK4B,QAAQ,MAAM,GAAOtG,KAAKmB,GAAIlB,IAAI,SAAUvD,GACvE,MAAOM,QAAOgN,OAAOtN,MAGbgI,KAAK4B,QAAQ,MAAM,GAAOtG,KAAKmB,MAM1CjE,IAAK,SACLW,MAAO,SAAgB0C,GACtB,GAAI0J,GAAUvF,KAEVjH,KACAS,KACA+C,EAASvD,MAkBb,OAhBKgH,MAAKlE,QAAQI,IAAIL,KACrBmE,KAAKnE,MAAMxC,KAAKwC,GAChBmE,KAAKe,QAAQlF,IAGdU,EAASyD,KAAKlE,QAAQE,IAAIH,GAC1BU,EAAOrD,QAAQ,SAAU6C,EAAKvD,GAC7BgB,EAAKH,KAAKb,KAGXgB,EAAK8B,OAAOpC,QAAQ,SAAUlB,GAC7BuE,EAAOP,IAAIhE,GAAGkB,QAAQ,SAAUV,GAC/BO,EAAOM,KAAKkM,EAAQvJ,IAAIxD,QAInBmH,EAAM2C,MAAM3C,EAAO5G,MAG3BP,IAAK,UACLW,MAAO,WAGN,IAAK,GAFDqM,GAAUxF,KAELyF,EAAQlI,UAAUtF,OAAQgJ,EAAO3H,MAAMmM,GAAQC,EAAQ,EAAWD,EAARC,EAAeA,IACjFzE,EAAKyE,GAASnI,UAAUmI,EAGzB,IAAIrE,GAAQ3B,IACRiG,IAcJ,OAZArN,QAAOkB,KAAKwG,KAAKC,UAAU/G,QAAQ,SAAUlB,GAC5C2N,EAAUtM,KAAKmM,EAAQrI,IAAImF,MAAMkD,GAAUxN,GAAGgF,OAAOiE,OAGlD0E,EAAU1N,OAAS,EACtBsH,EAAQ4B,IAAIwE,GAAWvE,KAAK,WAC3BC,EAAMC,SAAQ,IACZD,EAAME,QAETF,EAAMC,SAAQ,GAGRD,EAAMW,WAGdxJ,IAAK,OACLW,MAAO,WACN,GAAIyM,GAAU5F,KAEViC,EAAQ1E,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAQA,UAAU,GAEhF8D,EAAQ3B,GA0BZ,OAxBAM,MAAK8B,QAAQ9B,KAAKY,KAAKQ,KAAK,SAAUzH,GACrC,GAAIuB,GAAOvB,EAAI,EAIf,IAFAiM,EAAQvI,OAAS1D,EAAI,GAAGkM,OAASlM,EAAI,GAAGmM,OAAS,IAAIrD,QAAQ,SAAW,GAEpEmD,EAAQlF,OACX,IACCkF,EAAQlF,OAAOrF,MAAM,KAAKnC,QAAQ,SAAUlB,GAC3CkD,EAAOA,EAAKlD,KAEZ,MAAO+B,GACR,MAAOsH,GAAME,OAAOxH,GAIlBkI,GACH2D,EAAQ3D,QAGT2D,EAAQ5E,MAAM9F,EAAM,OAAOkG,KAAKC,EAAMC,QAASD,EAAME,SACnD,SAAUxH,GACZsH,EAAME,OAAOxH,EAAE,IAAMA,KAGfsH,EAAMW,WAGdxJ,IAAK,UACLW,MAAO,SAAiB+B,GACvB,GAAImK,GAAS9H,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAOA,UAAU,GAEhF/E,EAAMwH,KAAKxH,IACXiE,EAAKzD,OACLD,EAASC,MA+Cb,OA7CIkC,IACHuB,EAAK,WACJ,MAAIjE,GACI,SAAUoE,EAAGC,GACnB,GAAIjD,GAAMU,EAAMuC,EAAE,GAQlB,OANiB7D,UAAbY,EAAIpB,KACPoB,EAAIpB,GAAO8B,EAAMuC,EAAE,KAGpBD,EAAEvD,KAAKO,GAEAgD,GAGD,SAAUA,EAAGC,GAGnB,MAFAD,GAAEvD,KAAKiB,EAAMuC,EAAE,KAERD,MAIV7D,EAASmC,EAAK6K,OAAOtJ,QAErBA,EAAK,WACJ,MAAIjE,GACI,SAAUwN,EAAKzF,GACrB,GAAI3G,GAAMU,EAAM0L,EAEChN,UAAbY,EAAIpB,KACPoB,EAAIpB,GAAO8B,EAAMiG,IAGlBxH,EAAOM,KAAKO,IAGN,SAAUoM,GAChBjN,EAAOM,KAAKiB,EAAM0L,QAIrBjN,KACAiH,KAAK9G,QAAQuD,IAGP4I,EAAS/M,OAAOgN,OAAOvM,GAAUA,KAGzCP,IAAK,WACLW,MAAO,SAAkB+B,GACxB,GAAImK,GAAS9H,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,IAAmB,EAAOA,UAAU,GAEhF0I,EAAOjN,MAYX,QATCiN,EADGZ,EACI,SAAU1L,GAChB,MAAOA,IAGD,SAAUA,GAChB,MAAOW,GAAMX,KAIFuB,EAAwBA,EAAK6K,OAAO,SAAUnJ,EAAGC,GAG7D,MAFAD,GAAEC,EAAE,IAAMA,EAAE,GAELD,OAHY0B,EAAS0B,UAO9BxH,IAAK,YACLW,MAAO,SAAmBL,EAAO2D,GAChC,MAAqB,kBAAPA,GAAoBA,EAAG3D,GAASD,KAAKC,MAGpDN,IAAK,SACLW,MAAO,WACN,GAAI+M,GAAUlG,KAEVlG,EAAOyD,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmB,QAAUA,UAAU,GACjF/E,EAAM+E,UAAUtF,QAAU,GAAsBe,SAAjBuE,UAAU,GAAmBvE,OAAYuE,UAAU,GAElFgD,EAAavH,SAARR,EAAoBA,EAAMwH,KAAKO,EAExC,OAAOP,MAAK7C,IAAIrD,EAAM,SAAUtB,GAAK4I,KAAK,SAAUzH,GAKnD,MAJIuM,GAAQ1F,SACX0B,QAAQC,IAAI,WAAY5B,EAAI,OAAQzG,EAAM,sBAGpCH,GACL,SAAUI,GAKZ,KAJImM,GAAQ1F,SACX0B,QAAQa,MAAM,kBAAmBxC,EAAI,OAAQzG,EAAM,sBAAuBC,EAAEiJ,SAAWjJ,EAAEkJ,OAASlJ,GAG7FA,OAIRvB,IAAK,aACLW,MAAO,SAAoBX,SACnBsH,GAAQtH,MAGhBA,IAAK,SACLW,MAAO,WACN,MAAO6G,MAAK9E,KAAKiL,YAGlB3N,IAAK,YACLW,MAAO,SAAmBkI,GACzB,GAAIzH,GAAMZ,MAiBV,OAfIgH,MAAKf,QACRrF,EAAM,GAAIgG,GAAOI,KAAKf,QACtBrF,EAAIwM,QAAU,SAAUjB,GACvB9D,EAAME,OAAO4D,GACbvL,EAAIyM,aAGLzM,EAAIqD,UAAY,SAAUC,GACzBmE,EAAMC,QAAQ/G,KAAKC,MAAM0C,EAAGhC,OAC5BtB,EAAIyM,cAGLhF,EAAME,OAAO,GAAIgB,OAAM1C,IAGjBjG,MAIFiF,OAwBRF,GAAQuE,UAAYrK,KACpB8F,EAAQ2H,QAAU,QAGK,mBAAZC,SACVC,OAAOD,QAAU5H,EACW,kBAAX8H,QACjBA,OAAO,WACN,MAAO9H,KAGR/F,EAAO8N,KAAO/H,GAEK,mBAAX/F,QAAyBA,OAAS+N","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.7.5\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = !server ? global.Promise : require(\"es6-promise\").Promise;\n\tvar Map = !server ? global.Map : require(\"es6-map\");\n\tvar Set = !server ? global.Set : require(\"es6-set\");\n\tvar fetch = !server ? global.fetch : require(\"node-fetch\");\n\tvar deferred = !server ? global.deferred : require(\"tiny-defer\");\n\tvar tuple = !server ? global.tuple : require(\"tiny-tuple\");\n\tvar Blob = !server ? global.Blob : require(\"Blob\");\n\tvar Worker = !server ? global.Worker : require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction cast(input) {\n\t\tvar result = undefined;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = undefined;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\tindexes.forEach(function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\trecords.forEach(function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (result[index][lindex] === undefined) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t records = data.records,\n\t\t index = data.index,\n\t\t cmd = data.cmd,\n\t\t key = data.key,\n\t\t delimiter = data.delimiter,\n\t\t pattern = data.pattern,\n\t\t result = undefined;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(records, index, key, delimiter, pattern);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments.length <= 2 || arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\tvar idx = undefined;\n\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tidx = keyIndex(indice, data, delimiter, pattern);\n\n\t\t\tif (idx !== undefined && idx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(indice), idx, key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\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(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar 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.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_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: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length <= 1 || arguments[1] === undefined ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tobj.postMessage(JSON.stringify({\n\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this6.key] || uuid();\n\n\t\t\t\t\t\t_this6.data.set(key, datum);\n\t\t\t\t\t\t_this6.registry.push(key);\n\t\t\t\t\t});\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this7 = 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_this7.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_this7.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, i, _this7.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, index, _this7.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this8.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 (_this8.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this8.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 _this9 = 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 = _this9.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(_this9.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this10.key) {\n\t\t\t\t\t\t\tif (_this10.source) {\n\t\t\t\t\t\t\t\t_this10.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[_this10.key] || ldata[_this10.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_this10.registry[_this10.total] = lkey;\n\t\t\t\t\t\t++_this10.total;\n\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.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 (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ogdata, _this10.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ldata, null, _this10.pattern);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this10.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 (_this10.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\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.toArray(null, false).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this11 = 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(_this11.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 _this12 = 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(_this12.cmd.apply(_this12, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this13.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this13.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this13.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_this13.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this13.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this14.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 (_this14.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [createIndexes.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), cast.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"1.7.5\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","records","lkey","lindex","iterate","fn","call","merge","a","b","c","d","concat","onmessage","ev","cmd","postMessage","patch","ogdata","arguments","overwrite","v","k","op","path","s","Math","random","toString","substring","setIndexValue","setIndex","indice","lidx","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","server","worker","Function","URL","createObjectURL","process","nextTick","Promise","require","fetch","deferred","tuple","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","next","all","then","defer","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","transform","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","useWorker","_this6","datum","_this7","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lset","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","values","onerror","terminate","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.7.6\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = !server ? global.Promise : require(\"es6-promise\").Promise;\n\tvar Map = !server ? global.Map : require(\"es6-map\");\n\tvar Set = !server ? global.Set : require(\"es6-set\");\n\tvar fetch = !server ? global.fetch : require(\"node-fetch\");\n\tvar deferred = !server ? global.deferred : require(\"tiny-defer\");\n\tvar tuple = !server ? global.tuple : require(\"tiny-tuple\");\n\tvar Blob = !server ? global.Blob : require(\"Blob\");\n\tvar Worker = !server ? global.Worker : require(\"tiny-worker\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction cast(input) {\n\t\tvar result = undefined;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = undefined;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(records, indexes, key, delimiter, pattern) {\n\t\tvar result = {};\n\n\t\tindexes.forEach(function (i) {\n\t\t\tresult[i] = {};\n\t\t});\n\n\t\trecords.forEach(function (i) {\n\t\t\tvar lkey = i[key];\n\n\t\t\tif (lkey !== undefined) {\n\t\t\t\tindexes.forEach(function (index) {\n\t\t\t\t\tvar lindex = keyIndex(index, i, delimiter, pattern);\n\n\t\t\t\t\tif (result[index][lindex] === undefined) {\n\t\t\t\t\t\tresult[index][lindex] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index][lindex].push(lkey);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t records = data.records,\n\t\t index = data.index,\n\t\t cmd = data.cmd,\n\t\t key = data.key,\n\t\t delimiter = data.delimiter,\n\t\t pattern = data.pattern,\n\t\t result = undefined;\n\n\t\tif (cmd === \"index\") {\n\t\t\tresult = createIndexes(records, index, key, delimiter, pattern);\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments.length <= 2 || arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\tvar idx = undefined;\n\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tvar lidx = keyIndex(i, data, delimiter, pattern);\n\n\t\t\t\tif (lidx !== undefined && lidx !== null) {\n\t\t\t\t\tsetIndexValue(indexes.get(i), lidx, key);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tidx = keyIndex(indice, data, delimiter, pattern);\n\n\t\t\tif (idx !== undefined && idx !== null) {\n\t\t\t\tsetIndexValue(indexes.get(indice), idx, key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\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(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar 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.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_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: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length <= 1 || arguments[1] === undefined ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tobj.postMessage(JSON.stringify({\n\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this6.key] || uuid();\n\n\t\t\t\t\t\t_this6.data.set(key, datum);\n\t\t\t\t\t\t_this6.registry.push(key);\n\t\t\t\t\t});\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this7 = 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_this7.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_this7.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, i, _this7.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, index, _this7.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this8.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 (_this8.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this8.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 _this9 = 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 = _this9.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(_this9.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this10.key) {\n\t\t\t\t\t\t\tif (_this10.source) {\n\t\t\t\t\t\t\t\t_this10.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[_this10.key] || ldata[_this10.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\tif (!_this10.data.has(lkey)) {\n\t\t\t\t\t\t\t_this10.registry[_this10.total] = lkey;\n\t\t\t\t\t\t\t++_this10.total;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.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 (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ogdata, _this10.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ldata, null, _this10.pattern);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this10.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 (_this10.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\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.toArray(null, false).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this11 = 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(_this11.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 _this12 = 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(_this12.cmd.apply(_this12, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this13.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this13.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this13.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_this13.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this13.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this14.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 (_this14.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [createIndexes.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), cast.toString(), (!server ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = !server ? global.URL.createObjectURL(blob(functions.join(\"\\n\"))) : new Function(functions.join(\"\\n\"));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"1.7.6\";\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 9871a74..f7dad49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.7.5", + "version": "1.7.6", "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 e8edd5c..d3ce43a 100644 --- a/src/haro.js +++ b/src/haro.js @@ -505,8 +505,10 @@ class Haro { } if (method === "post") { - this.registry[this.total] = lkey; - ++this.total; + if (!this.data.has(lkey)) { + this.registry[this.total] = lkey; + ++this.total; + } if (this.versioning) { this.versions.set(lkey, new Set());