diff --git a/README.md b/README.md index f85d2ab..79876ac 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,23 @@ store.set(null, {abc: true}).then(function (rec) { }); ``` +**dump( type="records" )** +_Array_ or _Object_ + +Returns the records or indexes of the DataStore as mutable `Array` or `Object`, for the intention of reuse/persistent storage without relying on an adapter which would break up the data set. + +Example of deleting a record: +```javascript +var store = haro(); + +// Data is loaded + +var records = store.dump(); +var indexes = store.dump('indexes'); + +// Save records & indexes +``` + **entries()** _MapIterator_ @@ -483,7 +500,7 @@ console.log(ds1.length === ds2.length); // true console.log(JSON.stringify(ds1[0][1]) === JSON.stringify(ds2[0][1])); // false ``` -**load( [adapter=mongo, key] )** +**load( [adapter="mongo", key] )** _Promise_ Loads the DataStore, or a record from a specific persistent storage & updates the DataStore. The DataStore will be cleared @@ -505,6 +522,23 @@ store.map(function (value) { }); ``` +**override( data[, type="records"] )** +_Promise_ + +Returns a `Promise` for the new state. This is meant to be used in a paired override of the indexes & records, such that +you can avoid the `Promise` based code path of a `batch()` insert or `load()`. + +Example of mapping a DataStore: +```javascript +var store = haro(); + +store.override({'field': {'value': ['pk']}}, "indexes").then(function () { + // Indexes have been overridden, no records though! override as well? +}, function (e) { + console.error(e.stack); +}); +``` + **reindex( [index] )** _Haro_ @@ -743,6 +777,22 @@ store.batch(data, 'set').then(function (records) { }); ``` +**transform( input )** +_Mixed_ + +Transforms `Map` to `Object`, `Object` to `Map`, `Set` to `Array`, & `Array` to `Set`. + +```javascript +var store = haro(null, {key: 'guid', index: ['name'}), + data = [{guid: 'abc', name: 'John Doe', age: 30}, {guid: 'def', name: 'Jane Doe', age: 28}]; + +store.batch(data, 'set').then(function (records) { + console.log(store.transform(store.indexes)); // {age: {'28': ['def'], '30': ['abc']}, name: {'John Doe': ['abc'], 'Jane Doe': ['def']}} +}, function (e) { + console.error(e.stack || e.message || e); +}); +``` + **unload( [adapter=mongo, key] )** _Promise_ diff --git a/lib/haro.es6.js b/lib/haro.es6.js index efe6333..e6004b9 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.5.5 + * @version 1.6.0 */ "use strict"; @@ -358,6 +358,18 @@ class Haro { return defer.promise; } + dump (type = "records") { + let result; + + if (type === "records") { + result = this.toArray(null, false); + } else { + result = this.transform(this.indexes); + } + + return result; + } + entries () { return this.data.entries(); } @@ -475,6 +487,28 @@ class Haro { return tuple.apply(tuple, result); } + override (data, type = "records") { + let defer = deferred(); + + if (type === "indexes") { + this.indexes = this.transform(data); + defer.resolve(true); + } else if (type === "records") { + data.forEach(datum => { + let key = datum[this.key] || uuid(); + + this.data.set(key, datum); + this.registry.push(key); + }); + this.total = this.data.size; + defer.resolve(true); + } else { + defer.reject(new Error("Invalid type")); + } + + return defer.promise; + } + register (key, fn) { adapter[key] = fn; } @@ -881,6 +915,41 @@ class Haro { }, {})); } + transform (input) { + let result; + + 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; + } + unload (type = "mongo", key = undefined) { let id = key !== undefined ? key : this.id; @@ -912,7 +981,7 @@ function factory (data = null, config = {}, indexes = []) { return new Haro(data, config, indexes); } -factory.version = "1.5.5"; +factory.version = "1.6.0"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index fd3efaf..c19ce26 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.5.5 + * @version 1.6.0 */ "use strict"; @@ -102,10 +102,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } function patch() { - var ogdata = arguments[0] === undefined ? {} : arguments[0]; - var data = arguments[1] === undefined ? {} : arguments[1]; - var key = arguments[2] === undefined ? "" : arguments[2]; - var overwrite = arguments[3] === undefined ? false : arguments[3]; + var ogdata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var key = arguments.length <= 2 || arguments[2] === undefined ? "" : arguments[2]; + var overwrite = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; var result = []; @@ -168,7 +168,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function Haro(data) { var _this = this; - var config = arguments[1] === undefined ? {} : arguments[1]; + var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; _classCallCheck(this, Haro); @@ -213,7 +213,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function batch(args, type) { var _this2 = this; - var lload = arguments[2] === undefined ? false : arguments[2]; + var lload = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; var defer = deferred(), del = type === "del", @@ -318,7 +318,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function del(key) { var _this3 = this; - var batch = arguments[1] === undefined ? false : arguments[1]; + var batch = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; var defer = deferred(), next = undefined; @@ -391,6 +391,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return defer.promise; } + }, { + key: "dump", + value: function dump() { + var type = arguments.length <= 0 || arguments[0] === undefined ? "records" : arguments[0]; + + var result = undefined; + + if (type === "records") { + result = this.toArray(null, false); + } else { + result = this.transform(this.indexes); + } + + return result; + } }, { key: "entries", value: function entries() { @@ -459,7 +474,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "limit", value: function limit(max) { - var offset = arguments[1] === undefined ? 0 : arguments[1]; + var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; var lmax = max, loffset = offset, @@ -494,8 +509,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function load() { var _this5 = this; - var type = arguments[0] === undefined ? "mongo" : arguments[0]; - var key = arguments[1] === undefined ? undefined : arguments[1]; + var type = arguments.length <= 0 || arguments[0] === undefined ? "mongo" : arguments[0]; + var key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1]; var batch = key === undefined, id = !batch ? key : this.id; @@ -529,6 +544,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return tuple.apply(tuple, result); } + }, { + key: "override", + value: function override(data) { + var _this6 = this; + + var type = arguments.length <= 1 || arguments[1] === undefined ? "records" : arguments[1]; + + var defer = deferred(); + + if (type === "indexes") { + this.indexes = this.transform(data); + defer.resolve(true); + } else if (type === "records") { + data.forEach(function (datum) { + var key = datum[_this6.key] || uuid(); + + _this6.data.set(key, datum); + _this6.registry.push(key); + }); + this.total = this.data.size; + defer.resolve(true); + } else { + defer.reject(new Error("Invalid type")); + } + + return defer.promise; + } }, { key: "register", value: function register(key, fn) { @@ -537,22 +579,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "reindex", value: function reindex(index) { - var _this6 = this; + var _this7 = this; if (!index) { this.indexes.clear(); this.index.forEach(function (i) { - _this6.indexes.set(i, new Map()); + _this7.indexes.set(i, new Map()); }); this.forEach(function (data, key) { - _this6.index.forEach(function (i) { - setIndex(_this6.index, _this6.indexes, _this6.delimiter, key, data, i, _this6.pattern); + _this7.index.forEach(function (i) { + setIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, i, _this7.pattern); }); }); } else { this.indexes.set(index, new Map()); this.forEach(function (data, key) { - setIndex(_this6.index, _this6.indexes, _this6.delimiter, key, data, index, _this6.pattern); + setIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, index, _this7.pattern); }); } @@ -561,7 +603,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "request", value: function request(input) { - var config = arguments[1] === undefined ? {} : arguments[1]; + var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var defer = deferred(), cfg = merge(this.config, config); @@ -595,19 +637,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "save", value: function save() { - var _this7 = this; + var _this8 = this; - var type = arguments[0] === undefined ? "mongo" : arguments[0]; + var type = arguments.length <= 0 || arguments[0] === undefined ? "mongo" : arguments[0]; return this.cmd(type, "set").then(function (arg) { - if (_this7.logging) { - console.log("Saved", _this7.id, "to", type, "persistent storage"); + if (_this8.logging) { + console.log("Saved", _this8.id, "to", type, "persistent storage"); } return arg; }, function (e) { - if (_this7.logging) { - console.error("Error saving ", _this7.id, "to", type, "persistent storage:", e.message || e.stack || e); + if (_this8.logging) { + console.error("Error saving ", _this8.id, "to", type, "persistent storage:", e.message || e.stack || e); } throw e; @@ -616,7 +658,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "search", value: function search(value, index) { - var _this8 = this; + var _this9 = this; var result = [], fn = typeof value === "function", @@ -635,7 +677,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } indexes.forEach(function (i) { - var idx = _this8.indexes.get(i); + var idx = _this9.indexes.get(i); if (idx) { idx.forEach(function (lset, lkey) { @@ -646,7 +688,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons lset.forEach(function (key) { if (!seen.has(key)) { seen.add(key); - result.push(_this8.get(key)); + result.push(_this9.get(key)); } }); break; @@ -663,12 +705,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "set", value: function set(key, data) { - var batch = arguments[2] === undefined ? false : arguments[2]; + var batch = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - var _this9 = this; + var _this10 = this; - var override = arguments[3] === undefined ? false : arguments[3]; - var lload = arguments[4] === undefined ? false : arguments[4]; + var override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; + var lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4]; var defer = deferred(), method = "post", @@ -681,45 +723,45 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var xdata = arg ? arg[0] : {}; if (lkey === null) { - if (_this9.key) { - if (_this9.source) { - _this9.source.split(".").forEach(function (i) { + if (_this10.key) { + if (_this10.source) { + _this10.source.split(".").forEach(function (i) { xdata = xdata[i] || {}; }); } - lkey = xdata[_this9.key] || ldata[_this9.key] || uuid(); + lkey = xdata[_this10.key] || ldata[_this10.key] || uuid(); } else { lkey = uuid(); } } if (method === "post") { - _this9.registry[_this9.total] = lkey; - ++_this9.total; + _this10.registry[_this10.total] = lkey; + ++_this10.total; - if (_this9.versioning) { - _this9.versions.set(lkey, new Set()); + if (_this10.versioning) { + _this10.versions.set(lkey, new Set()); } } else { - if (_this9.versioning) { - _this9.versions.get(lkey).add(tuple(ogdata)); + if (_this10.versioning) { + _this10.versions.get(lkey).add(tuple(ogdata)); } - delIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ogdata, _this9.pattern); + delIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ogdata, _this10.pattern); } - _this9.data.set(lkey, ldata); - setIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ldata, null, _this9.pattern); - defer.resolve(_this9.get(lkey)); + _this10.data.set(lkey, ldata); + setIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ldata, null, _this10.pattern); + defer.resolve(_this10.get(lkey)); if (!lload) { - _this9.storage("set", lkey, ldata).then(function (success) { - if (success && _this9.logging) { + _this10.storage("set", lkey, ldata).then(function (success) { + if (success && _this10.logging) { console.log("Saved", lkey, "to persistent storage"); } }, function (e) { - if (_this9.logging) { + if (_this10.logging) { console.error("Error saving", lkey, "to persistent storage:", e.message || e.stack || e); } }); @@ -752,8 +794,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons body: JSON.stringify(body) }).then(next, function (e) { if (e[1] === 405) { - _this9.patch = false; - _this9.request(concatURI(_this9.uri, lkey), { + _this10.patch = false; + _this10.request(concatURI(_this10.uri, lkey), { method: method, body: JSON.stringify(ldata) }).then(next, function (err) { @@ -780,7 +822,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "setUri", value: function setUri(uri) { - var clear = arguments[1] === undefined ? false : arguments[1]; + var clear = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; var defer = deferred(); @@ -801,7 +843,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "sort", value: function sort(fn) { - var frozen = arguments[1] === undefined ? true : arguments[1]; + var frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; var result = undefined; @@ -818,7 +860,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "sortBy", value: function sortBy(index) { - var _this10 = this; + var _this11 = this; var result = [], keys = [], @@ -836,7 +878,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons keys.sort().forEach(function (i) { lindex.get(i).forEach(function (key) { - result.push(_this10.get(key)); + result.push(_this11.get(key)); }); }); @@ -845,7 +887,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "storage", value: function storage() { - var _this11 = this; + var _this12 = this; for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; @@ -855,7 +897,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons deferreds = []; Object.keys(this.adapters).forEach(function (i) { - deferreds.push(_this11.cmd.apply(_this11, [i].concat(args))); + deferreds.push(_this12.cmd.apply(_this12, [i].concat(args))); }); if (deferreds.length > 0) { @@ -873,20 +915,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "sync", value: function sync() { - var _this12 = this; + var _this13 = this; - var clear = arguments[0] === undefined ? false : arguments[0]; + var clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0]; var defer = deferred(); this.request(this.uri).then(function (arg) { var data = arg[0]; - _this12.patch = (arg[2].Allow || arg[2].allow || "").indexOf("PATCH") > -1; + _this13.patch = (arg[2].Allow || arg[2].allow || "").indexOf("PATCH") > -1; - if (_this12.source) { + if (_this13.source) { try { - _this12.source.split(".").forEach(function (i) { + _this13.source.split(".").forEach(function (i) { data = data[i]; }); } catch (e) { @@ -895,10 +937,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (clear) { - _this12.clear(); + _this13.clear(); } - _this12.batch(data, "set").then(function (records) { + _this13.batch(data, "set").then(function (records) { defer.resolve(records); }, function (e) { defer.reject(e); @@ -912,7 +954,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "toArray", value: function toArray(data) { - var frozen = arguments[1] === undefined ? true : arguments[1]; + var frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; var key = this.key, fn = undefined, @@ -968,7 +1010,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "toObject", value: function toObject(data) { - var frozen = arguments[1] === undefined ? true : arguments[1]; + var frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; var func = undefined; @@ -988,24 +1030,62 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return a; }, {})); } + }, { + key: "transform", + value: function transform(input) { + var _this14 = this; + + var result = undefined; + + 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; + } }, { key: "unload", value: function unload() { - var _this13 = this; + var _this15 = this; - var type = arguments[0] === undefined ? "mongo" : arguments[0]; - var key = arguments[1] === undefined ? undefined : arguments[1]; + var type = arguments.length <= 0 || arguments[0] === undefined ? "mongo" : arguments[0]; + var key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1]; var id = key !== undefined ? key : this.id; return this.cmd(type, "remove", key).then(function (arg) { - if (_this13.logging) { + if (_this15.logging) { console.log("Unloaded", id, "from", type, "persistent storage"); } return arg; }, function (e) { - if (_this13.logging) { + if (_this15.logging) { console.error("Error unloading", id, "from", type, "persistent storage:", e.message || e.stack || e); } @@ -1028,14 +1108,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons })(); function factory() { - var data = arguments[0] === undefined ? null : arguments[0]; - var config = arguments[1] === undefined ? {} : arguments[1]; - var indexes = arguments[2] === undefined ? [] : arguments[2]; + var data = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0]; + var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; return new Haro(data, config, indexes); } - factory.version = "1.5.5"; + factory.version = "1.6.0"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 219e8e3..0e59c6b 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2015 Jason Mulligan */ -"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,e,f,g){a.forEach(function(a){var h=b.get(a),i=d(a,f,c,g),j=void 0;h.has(i)&&(j=h.get(i),j["delete"](e),0===j.size&&h["delete"](i))})}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,c){var d=void 0!==a?b(a):a,e=void 0!==c?b(c):c;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function h(){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&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function i(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function j(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function k(a,b,c,e,f,g,h){g?j(b.get(g),d(g,f,c,h),e):a.forEach(function(a){j(b.get(a),d(a,f,c,h),e)})}function l(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function m(){return i()+i()+"-"+i()+"-4"+i().substr(0,3)+"-"+v[Math.floor(4*Math.random())]+i().substr(0,3)+"-"+i()+i()+i()}function n(){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 o="undefined"!=typeof process&&"function"==typeof process.nextTick,p=o?require("es6-promise").Promise:a.Promise,q=o?require("es6-map"):a.Map,r=o?require("es6-set"):a.Set,s=o?require("node-fetch"):a.fetch,t=o?require("tiny-defer"):a.deferred,u=o?require("tiny-tuple"):a.tuple,v=[8,9,"a","b"],w={querystring:/\?.*/,endslash:/\/$/},x={},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=m(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function d(){p.all(a.map(k)).then(function(a){g.resolve(a)},function(a){g.reject(a)})}var e=this,f=void 0===arguments[2]?!1:arguments[2],g=t(),i="del"===b,j=void 0,k=void 0,l=void 0;return k=i?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(i?j=h(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(h(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){d()},function(a){g.reject(a)}):g.resolve()):d(),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=t();if(this.adapters[a]&&x[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];x[a].apply(this,[this].concat(d)).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,d=void 0===arguments[1]?!1:arguments[1],f=t(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!d&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(g,function(a){f.reject(a)})):f.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(g,function(a){f.reject(a)}):g():f.reject(new Error("Record not found")),f.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),e=d(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(e)||new r).forEach(function(a){f.push(b.get(a))}),u.apply(u,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(u(d,c))}),u.apply(u,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=u(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a){var b=void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](u(a,b,d))},function(a){c.reject(u(a.message,b,d))})},function(a){c.reject(u(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,c){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new r,i=void 0,j=void 0;return a&&(i=b(c||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),u.apply(u,e)}},{key:"set",value:function(a,d){var f=void 0===arguments[2]?!1:arguments[2],i=this,j=void 0===arguments[3]?!1:arguments[3],l=void 0===arguments[4]?!1:arguments[4],n=t(),o="post",p=b(d),q=a,s=void 0,v=void 0,w=function(a){var b=a?a[0]:{};null===q&&(i.key?(i.source&&i.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[i.key]||p[i.key]||m()):q=m()),"post"===o?(i.registry[i.total]=q,++i.total,i.versioning&&i.versions.set(q,new r)):(i.versioning&&i.versions.get(q).add(u(v)),e(i.index,i.indexes,i.delimiter,q,v,i.pattern)),i.data.set(q,p),k(i.index,i.indexes,i.delimiter,q,p,null,i.pattern),n.resolve(i.get(q)),l||i.storage("set",q,p).then(function(a){a&&i.logging&&console.log("Saved",q,"to persistent storage")},function(a){i.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",v=this.data.get(q),j||(p=g(v,p))),!f&&this.uri?this.patch?(s="post"===o?[{op:"add",path:"/",value:p}]:j?[{op:"replace",path:"/",value:p}]:h(v,p,this.key),this.request(c(this.uri,q),{method:"patch",body:JSON.stringify(s)}).then(w,function(a){405===a[1]?(i.patch=!1,i.request(c(i.uri,q),{method:o,body:JSON.stringify(p)}).then(w,function(a){n.reject(a)})):n.reject(a)})):this.request(c(this.uri,q),{method:o,body:JSON.stringify(p)}).then(w,function(a){n.reject(a)}):w(),n.promise}},{key:"setUri",value:function(a){var b=void 0===arguments[1]?!1:arguments[1],c=t();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),u.apply(u,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=t(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?p.all(f).then(function(){e.resolve(!0)},function(a){e.reject(a)}):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=void 0===arguments[0]?!1:arguments[0],c=t();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,c){var e=b(c[1]);return void 0===e[d]&&(e[d]=b(c[0])),a.push(e),a}:function(a,c){return a.push(b(c[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,c){var e=b(a);void 0===e[d]&&(e[d]=b(c)),f.push(e)}:function(a){f.push(b(a))}}(),f=[],this.forEach(e)),c?Object.freeze(f):f}},{key:"toObject",value:function(a){var c=void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=c?function(a){return a}:function(a){return b(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):l(this))}},{key:"unload",value:function(){var a=this,b=void 0===arguments[0]?"mongo":arguments[0],c=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 x[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();n.version="1.5.5","undefined"!=typeof exports?module.exports=n:"function"==typeof define?define(function(){return n}):a.haro=n}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,e,f,g){a.forEach(function(a){var h=b.get(a),i=d(a,f,c,g),j=void 0;h.has(i)&&(j=h.get(i),j["delete"](e),0===j.size&&h["delete"](i))})}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,c){var d=void 0!==a?b(a):a,e=void 0!==c?b(c):c;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function h(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?"":arguments[2],d=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],e=[];return d&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function i(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function j(a,b,c){a.has(b)||a.set(b,new r),a.get(b).add(c)}function k(a,b,c,e,f,g,h){g?j(b.get(g),d(g,f,c,h),e):a.forEach(function(a){j(b.get(a),d(a,f,c,h),e)})}function l(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function m(){return i()+i()+"-"+i()+"-4"+i().substr(0,3)+"-"+v[Math.floor(4*Math.random())]+i().substr(0,3)+"-"+i()+i()+i()}function n(){var a=arguments.length<=0||void 0===arguments[0]?null:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?[]:arguments[2];return new Haro(a,b,c)}var o="undefined"!=typeof process&&"function"==typeof process.nextTick,p=o?require("es6-promise").Promise:a.Promise,q=o?require("es6-map"):a.Map,r=o?require("es6-set"):a.Set,s=o?require("node-fetch"):a.fetch,t=o?require("tiny-defer"):a.deferred,u=o?require("tiny-tuple"):a.tuple,v=[8,9,"a","b"],w={querystring:/\?.*/,endslash:/\/$/},x={},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 q,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=m(),this.index=[],this.indexes=new q,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.versions=new q,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function d(){p.all(a.map(k)).then(function(a){g.resolve(a)},function(a){g.reject(a)})}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=t(),i="del"===b,j=void 0,k=void 0,l=void 0;return k=i?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(i?j=h(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(h(this.toObject(),l,this.key,!0))),j.length>0?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){d()},function(a){g.reject(a)}):g.resolve()):d(),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=t();if(this.adapters[a]&&x[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];x[a].apply(this,[this].concat(d)).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,d=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=t(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!d&&this.uri?this.patch?this.request(c(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(d){405===d[1]?(b.patch=!1,b.request(c(b.uri,a),{method:"delete"}).then(g,function(a){f.reject(a)})):f.reject(d)}):this.request(c(this.uri,a),{method:"delete"}).then(g,function(a){f.reject(a)}):g():f.reject(new Error("Record not found")),f.promise}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),e=d(c,a,this.delimiter),f=[];return this.indexes.has(c)&&(this.indexes.get(c).get(e)||new r).forEach(function(a){f.push(b.get(a))}),u.apply(u,f)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(u(d,c))}),u.apply(u,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=u(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"](u(a,b,d))},function(a){c.reject(u(a.message,b,d))})},function(a){c.reject(u(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,c){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new r,i=void 0,j=void 0;return a&&(i=b(c||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),u.apply(u,e)}},{key:"set",value:function(a,d){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],i=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],l=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],n=t(),o="post",p=b(d),q=a,s=void 0,v=void 0,w=function(a){var b=a?a[0]:{};null===q&&(i.key?(i.source&&i.source.split(".").forEach(function(a){b=b[a]||{}}),q=b[i.key]||p[i.key]||m()):q=m()),"post"===o?(i.registry[i.total]=q,++i.total,i.versioning&&i.versions.set(q,new r)):(i.versioning&&i.versions.get(q).add(u(v)),e(i.index,i.indexes,i.delimiter,q,v,i.pattern)),i.data.set(q,p),k(i.index,i.indexes,i.delimiter,q,p,null,i.pattern),n.resolve(i.get(q)),l||i.storage("set",q,p).then(function(a){a&&i.logging&&console.log("Saved",q,"to persistent storage")},function(a){i.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",v=this.data.get(q),j||(p=g(v,p))),!f&&this.uri?this.patch?(s="post"===o?[{op:"add",path:"/",value:p}]:j?[{op:"replace",path:"/",value:p}]:h(v,p,this.key),this.request(c(this.uri,q),{method:"patch",body:JSON.stringify(s)}).then(w,function(a){405===a[1]?(i.patch=!1,i.request(c(i.uri,q),{method:o,body:JSON.stringify(p)}).then(w,function(a){n.reject(a)})):n.reject(a)})):this.request(c(this.uri,q),{method:o,body:JSON.stringify(p)}).then(w,function(a){n.reject(a)}):w(),n.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=t();return this.uri=a,this.uri?this.sync(b).then(function(a){c.resolve(a)},function(a){c.reject(a)}):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=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))})}),u.apply(u,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=t(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?p.all(f).then(function(){e.resolve(!0)},function(a){e.reject(a)}):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=t();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(function(a){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var c=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,c){var e=b(c[1]);return void 0===e[d]&&(e[d]=b(c[0])),a.push(e),a}:function(a,c){return a.push(b(c[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,c){var e=b(a);void 0===e[d]&&(e[d]=b(c)),f.push(e)}:function(a){f.push(b(a))}}(),f=[],this.forEach(e)),c?Object.freeze(f):f}},{key:"toObject",value:function(a){var c=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=c?function(a){return a}:function(a){return b(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):l(this))}},{key:"transform",value:function(a){var b=this,c=void 0;switch(!0){case a instanceof q:c={},a.forEach(function(a,d){c[d]=b.transform(a)});break;case a instanceof r:c=[],a.forEach(function(a){c.push(b.transform(a))});break;case a instanceof Array:c=new r,a.forEach(function(a){c.add(b.transform(a))});break;case a instanceof Object:c=new q,Object.keys(a).forEach(function(d){c.set(d,b.transform(a[d]))});break;default:c=a}return c}},{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 x[a]}},{key:"values",value:function(){return this.data.values()}}]),Haro}();n.version="1.6.0","undefined"!=typeof exports?module.exports=n:"function"==typeof define?define(function(){return n}):a.haro=n}("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 f080189..110c113 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","keyIndex","data","delimiter","pattern","keys","split","sort","result","undefined","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","server","process","nextTick","Promise","require","Map","fetch","deferred","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","resolve","e","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","err","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","cmd","_this6","input","cfg","toUpperCase","res","status","_headers","_this7","_this8","rgex","test","seen","lindex","lset","lkey","_this9","override","ldata","xdata","sync","frozen","freeze","_this10","_this11","_len2","_key2","deferreds","_this12","Allow","allow","records","reduce","val","func","_this13","values","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.5.5\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = !server ? global.Promise : require(\"es6-promise\").Promise;\n\tvar Map = !server ? global.Map : require(\"es6-map\");\n\tvar Set = !server ? global.Set : require(\"es6-set\");\n\tvar fetch = !server ? global.fetch : require(\"node-fetch\");\n\tvar deferred = !server ? global.deferred : require(\"tiny-defer\");\n\tvar tuple = !server ? global.tuple : require(\"tiny-tuple\");\n\tvar 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 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[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, 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[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.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _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, function (err) {\n\t\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\tresult.push(_this4.get(i));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(key, this.data.get(key));\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit(max) {\n\t\t\t\tvar offset = arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = 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: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\t_this6.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\t_this6.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this6.index, _this6.indexes, _this6.delimiter, key, data, i, _this6.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(_this6.index, _this6.indexes, _this6.delimiter, key, data, index, _this6.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[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this7.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this7.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this7.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set(),\n\t\t\t\t lindex = undefined,\n\t\t\t\t indexes = undefined;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tlindex = clone(index || this.index);\n\n\t\t\t\t\tif (lindex instanceof Array) {\n\t\t\t\t\t\tindexes = lindex;\n\t\t\t\t\t} else if (typeof lindex === \"string\") {\n\t\t\t\t\t\tindexes = [lindex];\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this8.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this8.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tvar override = arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this9.key) {\n\t\t\t\t\t\t\tif (_this9.source) {\n\t\t\t\t\t\t\t\t_this9.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\t\txdata = xdata[i] || {};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlkey = xdata[_this9.key] || ldata[_this9.key] || uuid();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlkey = uuid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t_this9.registry[_this9.total] = lkey;\n\t\t\t\t\t\t++_this9.total;\n\n\t\t\t\t\t\tif (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.versions.set(lkey, new Set());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (_this9.versioning) {\n\t\t\t\t\t\t\t_this9.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ogdata, _this9.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this9.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this9.index, _this9.indexes, _this9.delimiter, lkey, ldata, null, _this9.pattern);\n\t\t\t\t\tdefer.resolve(_this9.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this9.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this9.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this9.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = null;\n\t\t\t\t} else if (this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this9.patch = false;\n\t\t\t\t\t\t\t\t_this9.request(concatURI(_this9.uri, lkey), {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, lkey), {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.toArray(null, false).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [],\n\t\t\t\t lindex = undefined;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t});\n\n\t\t\t\tkeys.sort().forEach(function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this10.get(key));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = [];\n\n\t\t\t\tObject.keys(this.adapters).forEach(function (i) {\n\t\t\t\t\tdeferreds.push(_this11.cmd.apply(_this11, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tvar clear = arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this12.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this12.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this12.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this12.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this12.batch(data, \"set\").then(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar type = arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = 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 (_this13.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this13.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments[2] === undefined ? [] : arguments[2];\n\n\t\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.5.5\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","clone","arg","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","keys","split","sort","result","undefined","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","forEach","idx","get","value","o","has","size","iterate","obj","fn","call","merge","a","b","c","d","Array","concat","patch","ogdata","arguments","overwrite","v","k","push","op","path","s","Math","random","toString","substring","setIndexValue","set","Set","add","setIndex","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","server","process","nextTick","Promise","require","Map","fetch","deferred","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","resolve","e","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","err","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","xdata","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","records","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.0\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = !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 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 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.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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.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, 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: \"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\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);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\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\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\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.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(function (arg) {\n\t\t\t\t\t\tdefer.resolve(arg);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.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}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _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(function (records) {\n\t\t\t\t\t\tdefer.resolve(records);\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.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) {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase input instanceof Map:\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\t\t\tresult[key] = _this14.transform(value);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase input instanceof Set:\n\t\t\t\t\t\tresult = [];\n\t\t\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\t\t\tresult.push(_this14.transform(i));\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase input instanceof Array:\n\t\t\t\t\t\tresult = new Set();\n\t\t\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\t\t\tresult.add(_this14.transform(i));\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase input instanceof Object:\n\t\t\t\t\t\tresult = new Map();\n\t\t\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\t\t\tresult.set(i, _this14.transform(input[i]));\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tresult = input;\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\treturn new Haro(data, config, indexes);\n\t}\n\n\tfactory.version = \"1.6.0\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file diff --git a/package.json b/package.json index 1798fdd..f5a3fde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.5.5", + "version": "1.6.0", "description": "Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples", "main": "lib/haro.js", "scripts": { @@ -40,7 +40,7 @@ }, "dependencies": { "es6-map": "^0.1.1", - "es6-promise": "^2.1.1", + "es6-promise": "^3.0.2", "es6-set": "^0.1.1", "node-fetch": "^1.2.1", "tiny-defer": "^1.0.2", diff --git a/src/haro.js b/src/haro.js index cffdacf..c16830f 100644 --- a/src/haro.js +++ b/src/haro.js @@ -201,6 +201,18 @@ class Haro { return defer.promise; } + dump (type = "records") { + let result; + + if (type === "records") { + result = this.toArray(null, false); + } else { + result = this.transform(this.indexes); + } + + return result; + } + entries () { return this.data.entries(); } @@ -318,6 +330,28 @@ class Haro { return tuple.apply(tuple, result); } + override (data, type = "records") { + let defer = deferred(); + + if (type === "indexes") { + this.indexes = this.transform(data); + defer.resolve(true); + } else if (type === "records") { + data.forEach(datum => { + let key = datum[this.key] || uuid(); + + this.data.set(key, datum); + this.registry.push(key); + }); + this.total = this.data.size; + defer.resolve(true); + } else { + defer.reject(new Error("Invalid type")); + } + + return defer.promise; + } + register (key, fn) { adapter[key] = fn; } @@ -724,6 +758,41 @@ class Haro { }, {})); } + transform (input) { + let result; + + 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; + } + unload (type = "mongo", key = undefined) { let id = key !== undefined ? key : this.id; diff --git a/test/haro_test.js b/test/haro_test.js index ee71c96..736cb57 100644 --- a/test/haro_test.js +++ b/test/haro_test.js @@ -386,6 +386,125 @@ exports["delete (batch)"] = { } }; +exports["dump (indexes)"] = { + setUp: function (done) { + this.store = haro(null, {index: ["name", "age", "age|gender"]}); + done(); + }, + test: function (test) { + var self = this; + + test.expect(2); + this.store.batch(data, "set").then(function () { + var ldata = self.store.dump("indexes"); + + test.equal(Object.keys(ldata).length, 3, "Should be a match"); + test.equal(Object.isFrozen(ldata), false, "Should be `false`"); + test.done(); + }, function (e) { + throw e; + test.done(); + }); + } +}; + +exports["dump (records)"] = { + setUp: function (done) { + this.store = haro(null, {index: ["name", "age", "age|gender"]}); + done(); + }, + test: function (test) { + var self = this; + + test.expect(2); + this.store.batch(data, "set").then(function () { + var ldata = self.store.dump(); + + test.equal(ldata.length, data.length, "Should be a match"); + test.equal(Object.isFrozen(ldata), false, "Should be `false`"); + test.done(); + }, function (e) { + throw e; + test.done(); + }); + } +}; + +exports["override (indexes)"] = { + setUp: function (done) { + this.store = haro(); + this.indexes = { + name: { + 'Decker Merrill': ['cfbfe5d1-451d-47b1-96c4-8e8e83fe9cfd'], + 'Waters Yates': ['cbaa7d2f-b098-4347-9437-e1f879c9232a'], + 'Elnora Durham': ['1adf114d-f0ab-4a29-9d28-47cd4a627127'], + 'Krista Adkins': ['c5849290-afa2-4a33-a23f-64253f0d9ad9'], + 'Mcneil Weiss': ['eccdbfd9-223f-4a85-a791-4567fecbeb44'], + 'Leann Sosa': ['47ce98a7-3c4c-4175-9a9a-f32af8392065'] + }, + age: { + '20': ['cfbfe5d1-451d-47b1-96c4-8e8e83fe9cfd', + '47ce98a7-3c4c-4175-9a9a-f32af8392065'], + '24': ['cbaa7d2f-b098-4347-9437-e1f879c9232a', + 'eccdbfd9-223f-4a85-a791-4567fecbeb44'], + '26': ['1adf114d-f0ab-4a29-9d28-47cd4a627127'], + '29': ['c5849290-afa2-4a33-a23f-64253f0d9ad9'] + }, + 'age|gender': { + '20|male': ['cfbfe5d1-451d-47b1-96c4-8e8e83fe9cfd'], + '24|male': ['cbaa7d2f-b098-4347-9437-e1f879c9232a', + 'eccdbfd9-223f-4a85-a791-4567fecbeb44'], + '26|female': ['1adf114d-f0ab-4a29-9d28-47cd4a627127'], + '29|female': ['c5849290-afa2-4a33-a23f-64253f0d9ad9'], + '20|female': ['47ce98a7-3c4c-4175-9a9a-f32af8392065'] + } + }; + done(); + }, + test: function (test) { + var self = this; + + test.expect(6); + test.equal(self.store.indexes.size, 0, "Should be a '0'"); + this.store.batch(data, "set").then(function () { + return self.store.override(self.indexes, "indexes"); + }, function (e) { + throw e; + }).then(function () { + test.equal(self.store.indexes.size, 3, "Should be a '3'"); + test.equal(self.store.indexes.get('name').size, 6, "Should be a '6'"); + test.equal(self.store.indexes.get('age').size, 4, "Should be a '4'"); + test.equal(self.store.indexes.get('age').get('20').size, 2, "Should be a '2'"); + test.equal(self.store.indexes.get('age|gender').size, 5, "Should be a '5'"); + test.done(); + }, function (e) { + throw e; + test.done(); + }); + } +}; + +exports["override (records)"] = { + setUp: function (done) { + this.store = haro(); + done(); + }, + test: function (test) { + var self = this; + + test.expect(3); + this.store.override(data, "records").then(function () { + test.equal(self.store.total, 6, "Should be a '6'"); + test.equal(self.store.registry.length, 6, "Should be a '6'"); + test.equal(self.store.data.size, 6, "Should be a '6'"); + test.done(); + }, function (e) { + throw e; + test.done(); + }); + } +}; + exports["setUri"] = { setUp: function (done) { this.store = haro(null, {key: "guid", source: "data.result"});