From 520fb72517bae14aa8c5e0d00228302673f4e390 Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Sat, 4 Jul 2015 15:52:06 -0400 Subject: [PATCH] Returning concerns to the DataStore from the adapters --- lib/haro.es6.js | 6 +++--- lib/haro.js | 6 +++--- lib/haro.min.js | 2 +- lib/haro.min.js.map | 2 +- package.json | 2 +- src/haro.js | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/haro.es6.js b/lib/haro.es6.js index e134b66..70817b1 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.4.1 + * @version 1.4.2 */ "use strict"; @@ -459,7 +459,7 @@ class Haro { console.log("Loaded " + this.id + " from " + type + " persistent storage"); } - return arg; + return this.batch(arg, "set"); }, e => { if (this.logging) { console.error("Error loading " + this.id + " from " + type + " persistent storage: " + (e.message || e.stack || e)); @@ -830,7 +830,7 @@ function factory (data = null, config = {}, indexes = []) { return new Haro(data, config, indexes); } -factory.version = "1.4.1"; +factory.version = "1.4.2"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index c5e01a4..481a86a 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.4.1 + * @version 1.4.2 */ "use strict"; @@ -512,7 +512,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons console.log("Loaded " + _this5.id + " from " + type + " persistent storage"); } - return arg; + return _this5.batch(arg, "set"); }, function (e) { if (_this5.logging) { console.error("Error loading " + _this5.id + " from " + type + " persistent storage: " + (e.message || e.stack || e)); @@ -941,7 +941,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return new Haro(data, config, indexes); } - factory.version = "1.4.1"; + factory.version = "1.4.2"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 92d5bec..ef43075 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2015 Jason Mulligan */ -"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?d.map(function(a){return String(b[a])}).join(c):b[a]}function f(a,b,c,d,f){a.forEach(function(a){var g=b.get(a),h=e(a,f,c),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,c){var d=b(a),e=b(c);return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=void 0===arguments[0]?{}:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?"":arguments[2],d=void 0===arguments[3]?!1:arguments[3],e=[];return d&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function l(a,b,c,d,f,g){g?k(b.get(g),e(g,f,c),d):a.forEach(function(a){k(b.get(a),e(a,f,c),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function o(){var a=void 0===arguments[0]?null:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?[]:arguments[2];return new Haro(a,b,c)}var p=a.Promise||require("es6-promise").Promise,q=a.Map||require("es6-map"),r=a.Set||require("es6-set"),s=a.fetch||require("node-fetch"),t=a.tuple||require("tiny-tuple"),u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w={},Haro=function(){function Haro(a){var b=this,c=void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new q,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=n(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function e(){p.all(a.map(k)).then(function(a){g.resolve(a)},function(a){g.reject(a)})}var f=this,g=d(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0)},this.patch?(h?j=i(this.toArray().map(function(a){return a[f.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[f.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){e()},function(a){g.reject(a)}):g.resolve()):e(),g.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared "+this.id),this.reindex()}},{key:"cmd",value:function(a){var b=d();if(this.adapters[a]&&w[a]){for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;c>f;f++)e[f-1]=arguments[f];w[a].apply(this,[this].concat(e)).then(function(a){b.resolve(a)},function(a){b.reject(a)})}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=void 0===arguments[1]?!1:arguments[1],g=d(),h=void 0;return h=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),f(b.index,b.indexes,b.delimiter,a,b.data.get(a)),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),g.resolve()},this.data.has(a)?!e&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(h,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)})):g.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)}):h():g.reject(new Error("Record not found")),g.promise}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new r).forEach(function(a){f.push(b.get(a))}),t.apply(t,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(t(d,c))}),t.apply(t,b)}},{key:"forEach",value:function(a,c){return this.data.forEach(function(c,d){a(b(c),b(d))},c),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=t(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a,b){void 0===a&&(a=0);var c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===d&&(d=c,c=0),f=c,h=c+d,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++fe;e++)c[e]=arguments[e];var f=d(),g=[];return Object.keys(this.adapters).forEach(function(b){g.push(a.cmd.apply(a,[b].concat(c)))}),g.length>0?p.all(g).then(function(){f.resolve(!0)},function(a){f.reject(a)}):f.resolve(!1),f.promise}},{key:"register",value:function(a,b){w[a]=b}},{key:"reindex",value:function(a){var b=this;return a?(this.indexes.set(a,new q),this.forEach(function(c,d){l(b.index,b.indexes,b.delimiter,d,c,a)})):(this.indexes.clear(),this.index.forEach(function(a){b.indexes.set(a,new q)}),this.forEach(function(a,c){b.index.forEach(function(d){l(b.index,b.indexes,b.delimiter,c,a,d)})})),this}},{key:"request",value:function(a){var b=void 0===arguments[1]?{}:arguments[1],c=d(),e=h(this.config,b);return e.method=e.method.toUpperCase(),s(a,e).then(function(a){var b=a.status,d=void 0;a.headers._headers?(d={},Object.keys(a.headers._headers).forEach(function(b){d[b]=a.headers._headers[b].join(", ")})):d=m(a.headers),a[a.headers.get("content-type").indexOf("application/json")>-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](t(a,b,d))},function(a){c.reject(t(a.message,b,d))})},function(a){c.reject(t(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved "+a.id+" to "+b+" persistent storage"),c},function(c){throw a.logging&&console.error("Error saving "+a.id+" to "+b+" persistent storage: "+(c.message||c.stack||c)),c})}},{key:"search",value:function(a,b){var c=this,d=b?this.index.indexOf(b)>-1?[b]:[]:this.index,e=[],f="function"==typeof a,g=a instanceof RegExp,h=new r;return a&&d.forEach(function(b){var d=c.indexes.get(b);d&&d.forEach(function(b,d){(f&&a(d)||g&&a.test(d)||d===a)&&b.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a)))})})}),t.apply(t,e)}},{key:"set",value:function(a,e){var g=this,j=void 0===arguments[2]?!1:arguments[2],k=void 0===arguments[3]?!1:arguments[3],m=d(),o="post",p=b(e),q=a,s=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===q&&(g.key?(g.source&&g.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[g.key]||p[g.key]||n()):q=n()),"post"===o?(g.registry[g.total]=q,++g.total,g.versioning&&g.versions.set(q,new r)):(g.versioning&&g.versions.get(q).add(t(u)),f(g.index,g.indexes,g.delimiter,q,u)),g.data.set(q,p),l(g.index,g.indexes,g.delimiter,q,p),m.resolve(g.get(q)),g.storage("set",q,p).then(function(a){a&&g.logging&&console.log("Saved",q,"to persistent storage")},function(a){g.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return void 0===q||null===q?q=null:this.data.has(q)&&(o="put",u=this.data.get(q),k||(p=h(u,p))),!j&&this.uri?this.patch?(s="post"===o?[{op:"add",path:"/",value:p}]:k?[{op:"replace",path:"/",value:p}]:i(u,p,this.key),this.request(c(this.uri,q),{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(g.patch=!1,g.request(c(g.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(c(this.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)}):v(),m.promise}},{key:"setUri",value:function(a){var b=void 0===arguments[1]?!1:arguments[1],c=d();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){return this.toArray().sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),t.apply(t,c)}},{key:"sync",value:function(){var a=this,b=void 0===arguments[0]?!1:arguments[0],c=d();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(){var a=[];return this.forEach(function(b){a.push(b)}),a}},{key:"toObject",value:function(){return m(this)}},{key:"unload",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"remove").then(function(c){return a.logging&&console.log("Unloaded "+a.id+" from "+b+" persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading "+a.id+" from "+b+" persistent storage: "+(c.message||c.stack||c)),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();o.version="1.4.1","undefined"!=typeof exports?module.exports=o:"function"==typeof define?define(function(){return o}):a.haro=o}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?d.map(function(a){return String(b[a])}).join(c):b[a]}function f(a,b,c,d,f){a.forEach(function(a){var g=b.get(a),h=e(a,f,c),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function g(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function h(a,c){var d=b(a),e=b(c);return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=h(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function i(){var a=void 0===arguments[0]?{}:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?"":arguments[2],d=void 0===arguments[3]?!1:arguments[3],e=[];return d&&g(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),g(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function k(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function l(a,b,c,d,f,g){g?k(b.get(g),e(g,f,c),d):a.forEach(function(a){k(b.get(a),e(a,f,c),d)})}function m(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function n(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+u[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function o(){var a=void 0===arguments[0]?null:arguments[0],b=void 0===arguments[1]?{}:arguments[1],c=void 0===arguments[2]?[]:arguments[2];return new Haro(a,b,c)}var p=a.Promise||require("es6-promise").Promise,q=a.Map||require("es6-map"),r=a.Set||require("es6-set"),s=a.fetch||require("node-fetch"),t=a.tuple||require("tiny-tuple"),u=[8,9,"a","b"],v={querystring:/\?.*/,endslash:/\/$/},w={},Haro=function(){function Haro(a){var b=this,c=void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new q,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=n(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=h(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function e(){p.all(a.map(k)).then(function(a){g.resolve(a)},function(a){g.reject(a)})}var f=this,g=d(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return f.del(a,!0)}:function(a){return f.set(null,a,!0,!0)},this.patch?(h?j=i(this.toArray().map(function(a){return a[f.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[f.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){e()},function(a){g.reject(a)}):g.resolve()):e(),g.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared "+this.id),this.reindex()}},{key:"cmd",value:function(a){var b=d();if(this.adapters[a]&&w[a]){for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;c>f;f++)e[f-1]=arguments[f];w[a].apply(this,[this].concat(e)).then(function(a){b.resolve(a)},function(a){b.reject(a)})}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,e=void 0===arguments[1]?!1:arguments[1],g=d(),h=void 0;return h=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),f(b.index,b.indexes,b.delimiter,a,b.data.get(a)),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),g.resolve()},this.data.has(a)?!e&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(h,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)})):g.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(h,function(a){g.reject(a)}):h():g.reject(new Error("Record not found")),g.promise}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=e(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new r).forEach(function(a){f.push(b.get(a))}),t.apply(t,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(t(d,c))}),t.apply(t,b)}},{key:"forEach",value:function(a,c){return this.data.forEach(function(c,d){a(b(c),b(d))},c),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=t(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a,b){void 0===a&&(a=0);var c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===d&&(d=c,c=0),f=c,h=c+d,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++fe;e++)c[e]=arguments[e];var f=d(),g=[];return Object.keys(this.adapters).forEach(function(b){g.push(a.cmd.apply(a,[b].concat(c)))}),g.length>0?p.all(g).then(function(){f.resolve(!0)},function(a){f.reject(a)}):f.resolve(!1),f.promise}},{key:"register",value:function(a,b){w[a]=b}},{key:"reindex",value:function(a){var b=this;return a?(this.indexes.set(a,new q),this.forEach(function(c,d){l(b.index,b.indexes,b.delimiter,d,c,a)})):(this.indexes.clear(),this.index.forEach(function(a){b.indexes.set(a,new q)}),this.forEach(function(a,c){b.index.forEach(function(d){l(b.index,b.indexes,b.delimiter,c,a,d)})})),this}},{key:"request",value:function(a){var b=void 0===arguments[1]?{}:arguments[1],c=d(),e=h(this.config,b);return e.method=e.method.toUpperCase(),s(a,e).then(function(a){var b=a.status,d=void 0;a.headers._headers?(d={},Object.keys(a.headers._headers).forEach(function(b){d[b]=a.headers._headers[b].join(", ")})):d=m(a.headers),a[a.headers.get("content-type").indexOf("application/json")>-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](t(a,b,d))},function(a){c.reject(t(a.message,b,d))})},function(a){c.reject(t(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved "+a.id+" to "+b+" persistent storage"),c},function(c){throw a.logging&&console.error("Error saving "+a.id+" to "+b+" persistent storage: "+(c.message||c.stack||c)),c})}},{key:"search",value:function(a,b){var c=this,d=b?this.index.indexOf(b)>-1?[b]:[]:this.index,e=[],f="function"==typeof a,g=a instanceof RegExp,h=new r;return a&&d.forEach(function(b){var d=c.indexes.get(b);d&&d.forEach(function(b,d){(f&&a(d)||g&&a.test(d)||d===a)&&b.forEach(function(a){h.has(a)||(h.add(a),e.push(c.get(a)))})})}),t.apply(t,e)}},{key:"set",value:function(a,e){var g=this,j=void 0===arguments[2]?!1:arguments[2],k=void 0===arguments[3]?!1:arguments[3],m=d(),o="post",p=b(e),q=a,s=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===q&&(g.key?(g.source&&g.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[g.key]||p[g.key]||n()):q=n()),"post"===o?(g.registry[g.total]=q,++g.total,g.versioning&&g.versions.set(q,new r)):(g.versioning&&g.versions.get(q).add(t(u)),f(g.index,g.indexes,g.delimiter,q,u)),g.data.set(q,p),l(g.index,g.indexes,g.delimiter,q,p),m.resolve(g.get(q)),g.storage("set",q,p).then(function(a){a&&g.logging&&console.log("Saved",q,"to persistent storage")},function(a){g.logging&&console.error("Error saving",q,"to persistent storage:",a.message||a.stack||a)})};return void 0===q||null===q?q=null:this.data.has(q)&&(o="put",u=this.data.get(q),k||(p=h(u,p))),!j&&this.uri?this.patch?(s="post"===o?[{op:"add",path:"/",value:p}]:k?[{op:"replace",path:"/",value:p}]:i(u,p,this.key),this.request(c(this.uri,q),{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(g.patch=!1,g.request(c(g.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(c(this.uri,q),{method:o,body:JSON.stringify(p)}).then(v,function(a){m.reject(a)}):v(),m.promise}},{key:"setUri",value:function(a){var b=void 0===arguments[1]?!1:arguments[1],c=d();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){return this.toArray().sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),t.apply(t,c)}},{key:"sync",value:function(){var a=this,b=void 0===arguments[0]?!1:arguments[0],c=d();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(){var a=[];return this.forEach(function(b){a.push(b)}),a}},{key:"toObject",value:function(){return m(this)}},{key:"unload",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"remove").then(function(c){return a.logging&&console.log("Unloaded "+a.id+" from "+b+" persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading "+a.id+" from "+b+" persistent storage: "+(c.message||c.stack||c)),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();o.version="1.4.2","undefined"!=typeof exports?module.exports=o:"function"==typeof define?define(function(){return o}):a.haro=o}("undefined"!=typeof global?global:window); //# sourceMappingURL=haro.min.js.map \ No newline at end of file diff --git a/lib/haro.min.js.map b/lib/haro.min.js.map index ba06d6d..f867f1c 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","clone","arg","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","deferred","promise","undefined","resolver","rejecter","Promise","resolve","reject","keyIndex","data","delimiter","keys","split","sort","result","map","String","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","require","Map","fetch","tuple","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","type","next","all","then","defer","e","_this2","del","hash","toArray","toObject","request","body","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","err","entries","where","_this4","ctx","output","offset","max","loffset","lmax","list","nth","_this5","cmd","_this6","_len2","_key2","deferreds","_this7","input","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","RegExp","seen","lset","lkey","test","_this10","override","ldata","xdata","sync","_this11","lindex","_this12","Allow","allow","records","_this13","values","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2015\r\n * @license BSD-3-Clause\r\n * @link http://haro.rocks\r\n * @version 1.4.1\r\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar Promise = global.Promise || require(\"es6-promise\").Promise;\n\tvar Map = global.Map || require(\"es6-map\");\n\tvar Set = global.Set || require(\"es6-set\");\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar tuple = global.tuple || require(\"tiny-tuple\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar adapter = {};\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction deferred() {\n\t\tvar promise = undefined,\n\t\t resolver = undefined,\n\t\t rejecter = undefined;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction keyIndex(key, data, delimiter) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]);\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = clone(a),\n\t\t d = clone(b);\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared \" + this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key));\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\tresult.push(_this4.get(i));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(key, this.data.get(key));\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit(offset, max) {\n\t\t\t\tif (offset === undefined) offset = 0;\n\n\t\t\t\tvar loffset = offset,\n\t\t\t\t lmax = max,\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 = loffset;\n\t\t\t\t\tloffset = 0;\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[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\tthis.clear();\n\n\t\t\t\treturn this.cmd(type, \"get\").then(function (arg) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded \" + _this5.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 (_this5.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading \" + _this5.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: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this6 = 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(_this6.cmd.apply(_this6, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"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);\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);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_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 indexes = index ? this.index.indexOf(index) > -1 ? [index] : [] : this.index,\n\t\t\t\t result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value instanceof RegExp,\n\t\t\t\t seen = new Set();\n\n\t\t\t\tif (value) {\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\tif (fn && value(lkey) || rgex && value.test(lkey) || lkey === value) {\n\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\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}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\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 _this10 = this;\n\n\t\t\t\tvar batch = arguments[2] === undefined ? false : arguments[2];\n\t\t\t\tvar override = arguments[3] === undefined ? false : arguments[3];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_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);\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);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\tif (success && _this10.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this10.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = null;\n\t\t\t\t} else if (this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(concatURI(_this10.uri, lkey), {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\treturn this.toArray().sort(fn);\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: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar clear = arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this12.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this12.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this12.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this12.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this12.batch(data, \"set\").then(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray() {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value) {\n\t\t\t\t\tresult.push(value);\n\t\t\t\t});\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject() {\n\t\t\t\treturn toObjekt(this);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"remove\").then(function (arg) {\n\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded \" + _this13.id + \" from \" + type + \" persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading \" + _this13.id + \" from \" + type + \" persistent storage: \" + (e.message || e.stack || e));\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments[2] === undefined ? [] : arguments[2];\n\n\t\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.4.1\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","clone","arg","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","deferred","promise","undefined","resolver","rejecter","Promise","resolve","reject","keyIndex","data","delimiter","keys","split","sort","result","map","String","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","require","Map","fetch","tuple","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","args","type","next","all","then","defer","e","_this2","del","hash","toArray","toObject","request","body","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","stack","err","entries","where","_this4","ctx","output","offset","max","loffset","lmax","list","nth","_this5","cmd","_this6","_len2","_key2","deferreds","_this7","input","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","RegExp","seen","lset","lkey","test","_this10","override","ldata","xdata","sync","_this11","lindex","_this12","Allow","allow","records","_this13","values","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2015\r\n * @license BSD-3-Clause\r\n * @link http://haro.rocks\r\n * @version 1.4.2\r\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar Promise = global.Promise || require(\"es6-promise\").Promise;\n\tvar Map = global.Map || require(\"es6-map\");\n\tvar Set = global.Set || require(\"es6-set\");\n\tvar fetch = global.fetch || require(\"node-fetch\");\n\tvar tuple = global.tuple || require(\"tiny-tuple\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar adapter = {};\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction deferred() {\n\t\tvar promise = undefined,\n\t\t resolver = undefined,\n\t\t rejecter = undefined;\n\n\t\tpromise = new Promise(function (resolve, reject) {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\treturn { resolve: resolver, reject: rejecter, promise: promise };\n\t}\n\n\tfunction keyIndex(key, data, delimiter) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]);\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = clone(a),\n\t\t d = clone(b);\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared \" + this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key));\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\tresult.push(_this4.get(i));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(key, this.data.get(key));\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit(offset, max) {\n\t\t\t\tif (offset === undefined) offset = 0;\n\n\t\t\t\tvar loffset = offset,\n\t\t\t\t lmax = max,\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 = loffset;\n\t\t\t\t\tloffset = 0;\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[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\tthis.clear();\n\n\t\t\t\treturn this.cmd(type, \"get\").then(function (arg) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded \" + _this5.id + \" from \" + type + \" persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _this5.batch(arg, \"set\");\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 \" + _this5.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: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this6 = 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(_this6.cmd.apply(_this6, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"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);\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);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_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 indexes = index ? this.index.indexOf(index) > -1 ? [index] : [] : this.index,\n\t\t\t\t result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value instanceof RegExp,\n\t\t\t\t seen = new Set();\n\n\t\t\t\tif (value) {\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\tif (fn && value(lkey) || rgex && value.test(lkey) || lkey === value) {\n\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\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}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\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 _this10 = this;\n\n\t\t\t\tvar batch = arguments[2] === undefined ? false : arguments[2];\n\t\t\t\tvar override = arguments[3] === undefined ? false : arguments[3];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_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);\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);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\tif (success && _this10.logging) {\n\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tif (_this10.logging) {\n\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = null;\n\t\t\t\t} else if (this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(concatURI(_this10.uri, lkey), {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\treturn this.toArray().sort(fn);\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: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar clear = arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this12.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this12.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this12.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this12.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this12.batch(data, \"set\").then(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray() {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value) {\n\t\t\t\t\tresult.push(value);\n\t\t\t\t});\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject() {\n\t\t\t\treturn toObjekt(this);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"remove\").then(function (arg) {\n\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded \" + _this13.id + \" from \" + type + \" persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading \" + _this13.id + \" from \" + type + \" persistent storage: \" + (e.message || e.stack || e));\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments[2] === undefined ? [] : arguments[2];\n\n\t\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.4.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/package.json b/package.json index 3d44ca8..ed47f4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.4.1", + "version": "1.4.2", "description": "Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples", "main": "lib/haro.js", "scripts": { diff --git a/src/haro.js b/src/haro.js index e78e62b..c6332e7 100644 --- a/src/haro.js +++ b/src/haro.js @@ -293,7 +293,7 @@ class Haro { console.log("Loaded " + this.id + " from " + type + " persistent storage"); } - return arg; + return this.batch(arg, "set"); }, e => { if (this.logging) { console.error("Error loading " + this.id + " from " + type + " persistent storage: " + (e.message || e.stack || e));