diff --git a/lib/haro.es6.js b/lib/haro.es6.js index 3560276..ada5ebb 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -168,6 +168,41 @@ function toObjekt (arg) { return result; } +function transform (input) { + let result; + + switch (true) { + case input instanceof Map: + result = {}; + input.forEach((value, key) => { + result[key] = transform(value); + }); + break; + case input instanceof Set: + result = []; + input.forEach(i => { + result.push(transform(i)); + }); + break; + case input instanceof Array: + result = new Set(); + input.forEach(i => { + result.add(transform(i)); + }); + break; + case input instanceof Object: + result = new Map(); + Object.keys(input).forEach(i => { + result.set(i, transform(input[i])); + }); + break; + default: + result = input; + } + + return result; +} + function uuid () { return (s() + s() + "-" + s() + "-4" + s().substr(0, 3) + "-" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + "-" + s() + s() + s()); } @@ -914,42 +949,7 @@ class Haro { } transform (input, fn) { - let result; - - if (typeof fn === "function") { - result = fn(input); - } else { - switch (true) { - case input instanceof Map: - result = {}; - input.forEach((value, key) => { - result[key] = this.transform(value); - }); - break; - case input instanceof Set: - result = []; - input.forEach(i => { - result.push(this.transform(i)); - }); - break; - case input instanceof Array: - result = new Set(); - input.forEach(i => { - result.add(this.transform(i)); - }); - break; - case input instanceof Object: - result = new Map(); - Object.keys(input).forEach(i => { - result.set(i, this.transform(input[i])); - }); - break; - default: - result = input; - } - } - - return result; + return typeof fn === "function" ? fn(input) : transform(input); } unload (type = "mongo", key = undefined) { @@ -981,11 +981,21 @@ class Haro { function factory (data = null, config = {}, indexes = []) { let obj = new Haro(data, config, indexes), - fns = []; + functions; if (webWorker) { + functions = [ + clone.toString(), + keyIndex.toString(), + iterate.toString(), + merge.toString(), + setIndexValue.toString(), + setIndex.toString(), + transform.toString() + ]; + try { - obj.worker = global.URL.createObjectURL(blob(fns.join("\n"))); + obj.worker = global.URL.createObjectURL(blob(functions.join("\n"))); } catch (e) { obj.worker = null; } diff --git a/lib/haro.js b/lib/haro.js index d92a69a..1cb4256 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -177,6 +177,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return result; } + function _transform(input) { + var result = undefined; + + switch (true) { + case input instanceof Map: + result = {}; + input.forEach(function (value, key) { + result[key] = _transform(value); + }); + break; + case input instanceof Set: + result = []; + input.forEach(function (i) { + result.push(_transform(i)); + }); + break; + case input instanceof Array: + result = new Set(); + input.forEach(function (i) { + result.add(_transform(i)); + }); + break; + case input instanceof Object: + result = new Map(); + Object.keys(input).forEach(function (i) { + result.set(i, _transform(input[i])); + }); + break; + default: + result = input; + } + + return result; + } + function uuid() { return s() + s() + "-" + s() + "-4" + s().substr(0, 3) + "-" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + "-" + s() + s() + s(); } @@ -1033,49 +1068,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "transform", value: function transform(input, fn) { - var _this14 = this; - - var result = undefined; - - if (typeof fn === "function") { - result = fn(input); - } else { - switch (true) { - case input instanceof Map: - result = {}; - input.forEach(function (value, key) { - result[key] = _this14.transform(value); - }); - break; - case input instanceof Set: - result = []; - input.forEach(function (i) { - result.push(_this14.transform(i)); - }); - break; - case input instanceof Array: - result = new Set(); - input.forEach(function (i) { - result.add(_this14.transform(i)); - }); - break; - case input instanceof Object: - result = new Map(); - Object.keys(input).forEach(function (i) { - result.set(i, _this14.transform(input[i])); - }); - break; - default: - result = input; - } - } - - return result; + return typeof fn === "function" ? fn(input) : _transform(input); } }, { key: "unload", value: function unload() { - var _this15 = this; + var _this14 = this; var type = arguments.length <= 0 || arguments[0] === undefined ? "mongo" : arguments[0]; var key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1]; @@ -1083,13 +1081,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var id = key !== undefined ? key : this.id; return this.cmd(type, "remove", key).then(function (arg) { - if (_this15.logging) { + if (_this14.logging) { console.log("Unloaded", id, "from", type, "persistent storage"); } return arg; }, function (e) { - if (_this15.logging) { + if (_this14.logging) { console.error("Error unloading", id, "from", type, "persistent storage:", e.message || e.stack || e); } @@ -1117,11 +1115,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; var obj = new Haro(data, config, indexes), - fns = []; + functions = undefined; if (webWorker) { + functions = [clone.toString(), keyIndex.toString(), iterate.toString(), merge.toString(), setIndexValue.toString(), setIndex.toString(), _transform.toString()]; + try { - obj.worker = global.URL.createObjectURL(blob(fns.join("\n"))); + obj.worker = global.URL.createObjectURL(blob(functions.join("\n"))); } catch (e) { obj.worker = null; } diff --git a/lib/haro.min.js b/lib/haro.min.js index 8bbfec6..118c958 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 f(a,b,c,d,f,g){a.forEach(function(a){var h=b.get(a),i=e(a,f,c,g),j=void 0;h.has(i)&&(j=h.get(i),j["delete"](d),0===j.size&&h["delete"](i))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,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]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=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&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new s),a.get(b).add(c)}function l(a,b,c,d,f,g,h){g?k(b.get(g),e(g,f,c,h),d):a.forEach(function(a){k(b.get(a),e(a,f,c,h),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+w[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function o(){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=[];if(y)try{f.worker=a.URL.createObjectURL(b(g.join("\n")))}catch(h){f.worker=null}return f}var p="undefined"!=typeof process&&"function"==typeof process.nextTick,q=p?require("es6-promise").Promise:a.Promise,r=p?require("es6-map"):a.Map,s=p?require("es6-set"):a.Set,t=p?require("node-fetch"):a.fetch,u=p?require("tiny-defer"):a.deferred,v=p?require("tiny-tuple"):a.tuple,w=[8,9,"a","b"],x={querystring:/\?.*/,endslash:/\/$/},y="undefined"!=typeof Blob&&"undefined"!=typeof Worker,z={},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 r,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=n(),this.index=[],this.indexes=new r,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=void 0,this.versions=new r,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){q.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=u(),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=u();if(this.adapters[a]&&z[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];z[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],e=u(),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),f(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)})),e.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,e.reject)):e.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,e.reject):g():e.reject(new Error("Record not found")),e.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=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new s).forEach(function(a){f.push(b.get(a))}),v.apply(v,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(v(d,c))}),v.apply(v,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=v(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"](v(a,b,d))},function(a){c.reject(v(a.message,b,d))})},function(a){c.reject(v(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 s,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)))})}})})),v.apply(v,e)}},{key:"set",value:function(a,b){var e=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=u(),o="post",p=c(b),q=a,r=void 0,t=void 0,w=void 0,x=function(a){var b=a?a[0]:{};null===q&&(g.key?(g.source&&g.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[g.key]||p[g.key]||n()):q=n()),"post"===o?(g.registry[g.total]=q,++g.total,g.versioning&&g.versions.set(q,new s)):(g.versioning&&g.versions.get(q).add(v(t)),f(g.index,g.indexes,g.delimiter,q,t,g.pattern)),g.data.set(q,p),l(g.index,g.indexes,g.delimiter,q,p,null,g.pattern),m.resolve(g.get(q)),k||g.storage("set",q,p).then(function(a){a&&g.logging&&console.log("Saved",q,"to persistent storage")},function(a){g.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return void 0===q||null===q?q=null:this.data.has(q)&&(o="put",t=this.data.get(q),j||(p=h(t,p))),!e&&this.uri?(w=d(this.uri,q),this.patch?(r="post"===o?[{op:"add",path:"/",value:p}]:j?[{op:"replace",path:"/",value:p}]:i(t,p,this.key),this.request(w,{method:"patch",body:JSON.stringify(r)}).then(x,function(a){405===a[1]?(g.patch=!1,g.request(w,{method:o,body:JSON.stringify(p)}).then(x,function(a){m.reject(a)})):m.reject(a)})):this.request(w,{method:o,body:JSON.stringify(p)}).then(x,function(a){m.reject(a)})):x(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=u();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))})}),v.apply(v,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=u(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?q.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=u();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},{}):m(this))}},{key:"transform",value:function(a,b){var c=this,d=void 0;if("function"==typeof b)d=b(a);else switch(!0){case a instanceof r:d={},a.forEach(function(a,b){d[b]=c.transform(a)});break;case a instanceof s:d=[],a.forEach(function(a){d.push(c.transform(a))});break;case a instanceof Array:d=new s,a.forEach(function(a){d.add(c.transform(a))});break;case a instanceof Object:d=new r,Object.keys(a).forEach(function(b){d.set(b,c.transform(a[b]))});break;default:d=a}return d}},{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 z[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();o.version="1.6.2","undefined"!=typeof exports?module.exports=o:"function"==typeof define?define(function(){return o}):a.haro=o}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function f(a,b,c,d,f,g){a.forEach(function(a){var h=b.get(a),i=e(a,f,c,g),j=void 0;h.has(i)&&(j=h.get(i),j["delete"](d),0===j.size&&h["delete"](i))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,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]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=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&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new t),a.get(b).add(c)}function l(a,b,c,d,f,g,h){g?k(b.get(g),e(g,f,c,h),d):a.forEach(function(a){k(b.get(a),e(a,f,c,h),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(a){var b=void 0;switch(!0){case a instanceof s:b={},a.forEach(function(a,c){b[c]=n(a)});break;case a instanceof t:b=[],a.forEach(function(a){b.push(n(a))});break;case a instanceof Array:b=new t,a.forEach(function(a){b.add(n(a))});break;case a instanceof Object:b=new s,Object.keys(a).forEach(function(c){b.set(c,n(a[c]))});break;default:b=a}return b}function o(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+x[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function p(){var d=arguments.length<=0||void 0===arguments[0]?null:arguments[0],f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],i=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],j=new Haro(d,f,i),m=void 0;if(z){m=[c.toString(),e.toString(),g.toString(),h.toString(),k.toString(),l.toString(),n.toString()];try{j.worker=a.URL.createObjectURL(b(m.join("\n")))}catch(o){j.worker=null}}return j}var q="undefined"!=typeof process&&"function"==typeof process.nextTick,r=q?require("es6-promise").Promise:a.Promise,s=q?require("es6-map"):a.Map,t=q?require("es6-set"):a.Set,u=q?require("node-fetch"):a.fetch,v=q?require("tiny-defer"):a.deferred,w=q?require("tiny-tuple"):a.tuple,x=[8,9,"a","b"],y={querystring:/\?.*/,endslash:/\/$/},z="undefined"!=typeof Blob&&"undefined"!=typeof Worker,A={},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 s,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=o(),this.index=[],this.indexes=new s,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=void 0,this.versions=new s,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){r.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=v(),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=v();if(this.adapters[a]&&A[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];A[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],e=v(),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),f(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)})),e.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,e.reject)):e.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,e.reject):g():e.reject(new Error("Record not found")),e.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=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new t).forEach(function(a){f.push(b.get(a))}),w.apply(w,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(w(d,c))}),w.apply(w,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=w(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"](w(a,b,d))},function(a){c.reject(w(a.message,b,d))})},function(a){c.reject(w(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 t,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)))})}})})),w.apply(w,e)}},{key:"set",value:function(a,b){var e=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=v(),n="post",p=c(b),q=a,r=void 0,s=void 0,u=void 0,x=function(a){var b=a?a[0]:{};null===q&&(g.key?(g.source&&g.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[g.key]||p[g.key]||o()):q=o()),"post"===n?(g.registry[g.total]=q,++g.total,g.versioning&&g.versions.set(q,new t)):(g.versioning&&g.versions.get(q).add(w(s)),f(g.index,g.indexes,g.delimiter,q,s,g.pattern)),g.data.set(q,p),l(g.index,g.indexes,g.delimiter,q,p,null,g.pattern),m.resolve(g.get(q)),k||g.storage("set",q,p).then(function(a){a&&g.logging&&console.log("Saved",q,"to persistent storage")},function(a){g.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return void 0===q||null===q?q=null:this.data.has(q)&&(n="put",s=this.data.get(q),j||(p=h(s,p))),!e&&this.uri?(u=d(this.uri,q),this.patch?(r="post"===n?[{op:"add",path:"/",value:p}]:j?[{op:"replace",path:"/",value:p}]:i(s,p,this.key),this.request(u,{method:"patch",body:JSON.stringify(r)}).then(x,function(a){405===a[1]?(g.patch=!1,g.request(u,{method:n,body:JSON.stringify(p)}).then(x,function(a){m.reject(a)})):m.reject(a)})):this.request(u,{method:n,body:JSON.stringify(p)}).then(x,function(a){m.reject(a)})):x(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=v();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))})}),w.apply(w,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=v(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?r.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=v();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},{}):m(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):n(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 A[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();p.version="1.6.2","undefined"!=typeof exports?module.exports=p:"function"==typeof define?define(function(){return p}):a.haro=p}("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 ede88db..bb031d5 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","blob","arg","obj","undefined","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","keys","split","sort","result","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","fns","webWorker","worker","URL","createObjectURL","server","process","nextTick","Promise","require","Map","fetch","deferred","tuple","Worker","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","cmd","_this6","datum","_this7","input","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lindex","lset","lkey","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","_this15","values","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.6.2\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _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 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 adapter = {};\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 iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.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\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter, pattern), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter, pattern), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.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 = undefined;\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: \"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\tvar _this14 = this;\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (typeof fn === \"function\") {\n\t\t\t\t\tresult = fn(input);\n\t\t\t\t} else {\n\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\tcase input instanceof Map:\n\t\t\t\t\t\t\tresult = {};\n\t\t\t\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\t\t\t\tresult[key] = _this14.transform(value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase input instanceof Set:\n\t\t\t\t\t\t\tresult = [];\n\t\t\t\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\t\t\t\tresult.push(_this14.transform(i));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase input instanceof Array:\n\t\t\t\t\t\t\tresult = new Set();\n\t\t\t\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\t\t\t\tresult.add(_this14.transform(i));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase input instanceof Object:\n\t\t\t\t\t\t\tresult = new Map();\n\t\t\t\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\t\t\t\tresult.set(i, _this14.transform(input[i]));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tresult = input;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this15 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this15.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this15.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}]);\n\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 fns = [];\n\n\t\tif (webWorker) {\n\t\t\ttry {\n\t\t\t\tobj.worker = global.URL.createObjectURL(blob(fns.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.version = \"1.6.2\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\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","blob","arg","obj","undefined","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","keys","split","sort","result","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","_transform","input","Map","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","worker","URL","createObjectURL","server","process","nextTick","Promise","require","fetch","deferred","tuple","Worker","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","cmd","_this6","datum","_this7","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lindex","lset","lkey","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","values","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.6.2\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _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 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 adapter = {};\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 iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.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\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter, pattern), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter, pattern), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction _transform(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] = _transform(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(_transform(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(_transform(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, _transform(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 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 = undefined;\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: \"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) : _transform(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\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 = [clone.toString(), keyIndex.toString(), iterate.toString(), merge.toString(), setIndexValue.toString(), setIndex.toString(), _transform.toString()];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = global.URL.createObjectURL(blob(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.version = \"1.6.2\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\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/src/factory.js b/src/factory.js index 1be47c6..ccb5e3b 100644 --- a/src/factory.js +++ b/src/factory.js @@ -1,10 +1,20 @@ function factory (data = null, config = {}, indexes = []) { let obj = new Haro(data, config, indexes), - fns = []; + functions; if (webWorker) { + functions = [ + clone.toString(), + keyIndex.toString(), + iterate.toString(), + merge.toString(), + setIndexValue.toString(), + setIndex.toString(), + transform.toString() + ]; + try { - obj.worker = global.URL.createObjectURL(blob(fns.join("\n"))); + obj.worker = global.URL.createObjectURL(blob(functions.join("\n"))); } catch (e) { obj.worker = null; } diff --git a/src/haro.js b/src/haro.js index a140536..fd87aa9 100644 --- a/src/haro.js +++ b/src/haro.js @@ -740,42 +740,7 @@ class Haro { } transform (input, fn) { - let result; - - if (typeof fn === "function") { - result = fn(input); - } else { - switch (true) { - case input instanceof Map: - result = {}; - input.forEach((value, key) => { - result[key] = this.transform(value); - }); - break; - case input instanceof Set: - result = []; - input.forEach(i => { - result.push(this.transform(i)); - }); - break; - case input instanceof Array: - result = new Set(); - input.forEach(i => { - result.add(this.transform(i)); - }); - break; - case input instanceof Object: - result = new Map(); - Object.keys(input).forEach(i => { - result.set(i, this.transform(input[i])); - }); - break; - default: - result = input; - } - } - - return result; + return typeof fn === "function" ? fn(input) : transform(input); } unload (type = "mongo", key = undefined) { diff --git a/src/utility.js b/src/utility.js index 8f2ce90..6b8276e 100644 --- a/src/utility.js +++ b/src/utility.js @@ -141,6 +141,41 @@ function toObjekt (arg) { return result; } +function transform (input) { + let result; + + switch (true) { + case input instanceof Map: + result = {}; + input.forEach((value, key) => { + result[key] = transform(value); + }); + break; + case input instanceof Set: + result = []; + input.forEach(i => { + result.push(transform(i)); + }); + break; + case input instanceof Array: + result = new Set(); + input.forEach(i => { + result.add(transform(i)); + }); + break; + case input instanceof Object: + result = new Map(); + Object.keys(input).forEach(i => { + result.set(i, transform(input[i])); + }); + break; + default: + result = input; + } + + return result; +} + function uuid () { return (s() + s() + "-" + s() + "-4" + s().substr(0, 3) + "-" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + "-" + s() + s() + s()); }