diff --git a/bower.json b/bower.json index 75c8341..7bc1cf1 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.7.0", + "version": "1.7.1", "homepage": "http://haro.rocks", "authors": [ "Jason Mulligan " diff --git a/lib/haro.es6.js b/lib/haro.es6.js index 4b99d0b..60f60bf 100644 --- a/lib/haro.es6.js +++ b/lib/haro.es6.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.7.0 + * @version 1.7.1 */ "use strict"; @@ -1087,7 +1087,7 @@ function factory (data = null, config = {}, indexes = []) { } factory.transform = cast; -factory.version = "1.7.0"; +factory.version = "1.7.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.js b/lib/haro.js index c8d013b..7a4fe1f 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -5,7 +5,7 @@ * @copyright 2015 * @license BSD-3-Clause * @link http://haro.rocks - * @version 1.7.0 + * @version 1.7.1 */ "use strict"; @@ -1219,7 +1219,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } factory.transform = cast; - factory.version = "1.7.0"; + factory.version = "1.7.1"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 3d68505..7fc76c3 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,4 +1,4 @@ /* 2015 Jason Mulligan */ -"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function createIndexes(a,b,c,d,e){var f=new Map;return b.forEach(function(a){f.set(a,new Map)}),a.forEach(function(a){void 0!==a[c]&&setIndex(b,f,d,a[c],a,void 0,e)}),f}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,b){var d=void 0!==a?c(a):a,e=void 0!==b?c(b):b;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function h(a){var b=JSON.parse(a.data),c=b.records,d=b.index,e=b.cmd,f=b.key,g=b.delimiter,h=b.pattern,i=void 0;try{"index"===e&&(i=cast(createIndexes(c,d,f,g,h)))}catch(j){i=j.stack}postMessage(JSON.stringify(i))}function i(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?"":arguments[2],d=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],e=[];return d&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){f?setIndexValue(b.get(f),keyIndex(f,e,c,g),d):a.forEach(function(a){setIndexValue(b.get(a),keyIndex(a,e,c,g),d)})}function k(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],f=new Haro(c,d,e),g=void 0;if(u){g=[createIndexes.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),cast.toString(),"onmessage = "+h.toString()+";"];try{f.worker=a.URL.createObjectURL(b(g.join("\n")))}catch(i){f.worker=null}}return f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=n?require("es6-promise").Promise:a.Promise,Map=n?require("es6-map"):a.Map,Set=n?require("es6-set"):a.Set,p=n?require("node-fetch"):a.fetch,q=n?require("tiny-defer"):a.deferred,r=n?require("tiny-tuple"):a.tuple,s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof Blob&&"undefined"!=typeof Worker,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){o.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=q(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(h?j=i(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){c()},g.reject):g.resolve()):c(),g.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared",this.id),this.reindex()}},{key:"cmd",value:function(a){var b=q();if(this.adapters[a]&&w[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];w[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=q(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!c&&this.uri?this.patch?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(c){405===c[1]?(b.patch=!1,b.request(d(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=keyIndex(c,a,this.delimiter),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new Set).forEach(function(a){e.push(b.get(a))}),r.apply(r,e)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(r(d,c))}),r.apply(r,b)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,d){a(c(b),c(d))},b),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=r(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](r(a,b,d))},function(a){c.reject(r(a.message,b,d))})},function(a){c.reject(r(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0,j=void 0;return a&&(i=c(b||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),r.apply(r,e)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=q(),n="post",o=c(b),p=a,s=void 0,t=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===p&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),p=b[h.key]||o[h.key]||l()):p=l()),"post"===n?(h.registry[h.total]=p,++h.total,h.versioning&&h.versions.set(p,new Set)):(h.versioning&&h.versions.get(p).add(r(t)),e(h.index,h.indexes,h.delimiter,p,t,h.pattern)),h.data.set(p,o),setIndex(h.index,h.indexes,h.delimiter,p,o,null,h.pattern),m.resolve(h.get(p)),k||h.storage("set",p,o).then(function(a){a&&h.logging&&console.log("Saved",p,"to persistent storage")},function(a){h.logging&&console.error("Error saving",p,"to persistent storage:",a.message||a.stack||a)})};return void 0===p||null===p?p=null:this.data.has(p)&&(n="put",t=this.data.get(p),j||(o=g(t,o))),!f&&this.uri?(u=d(this.uri,p),this.patch?(s="post"===n?[{op:"add",path:"/",value:o}]:j?[{op:"replace",path:"/",value:o}]:i(t,o,this.key),this.request(u,{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(h.patch=!1,h.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):v(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=q();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),r.apply(r,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=q(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?o.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=q();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,b){var e=c(b[1]);return void 0===e[d]&&(e[d]=c(b[0])),a.push(e),a}:function(a,b){return a.push(c(b[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,b){var e=c(a);void 0===e[d]&&(e[d]=c(b)),f.push(e)}:function(a){f.push(c(a))}}(),f=[],this.forEach(e)),b?Object.freeze(f):f}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=b?function(a){return a}:function(a){return c(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):k(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new Worker(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="1.7.0","undefined"!=typeof exports?module.exports=m:"function"==typeof define?define(function(){return m}):a.haro=m}("undefined"!=typeof global?global:window); +"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function a(a,b){for(var c=0;c1?e.map(function(a){return String(b[a]).replace(new RegExp(d,"g"),"").toLowerCase()}).join(c):b[a]}function e(a,b,c,d,e,f){a.forEach(function(a){var g=b.get(a),h=keyIndex(a,e,c,f),i=void 0;g.has(h)&&(i=g.get(h),i["delete"](d),0===i.size&&g["delete"](h))})}function createIndexes(a,b,c,d,e){var f=new Map;return b.forEach(function(a){f.set(a,new Map)}),a.forEach(function(a){void 0!==a[c]&&setIndex(b,f,d,a[c],a,void 0,e)}),f}function f(a,b){a instanceof Object?Object.keys(a).forEach(function(c){b.call(a,a[c],c)}):a.forEach(b)}function g(a,b){var d=void 0!==a?c(a):a,e=void 0!==b?c(b):b;return d instanceof Object&&e instanceof Object?Object.keys(e).forEach(function(a){d[a]instanceof Object&&e[a]instanceof Object?d[a]=g(d[a],e[a]):d[a]instanceof Array&&e[a]instanceof Array?d[a]=d[a].concat(e[a]):d[a]=e[a]}):d=d instanceof Array&&e instanceof Array?d.concat(e):e,d}function h(a){var b=JSON.parse(a.data),c=b.records,d=b.index,e=b.cmd,f=b.key,g=b.delimiter,h=b.pattern,i=void 0;try{"index"===e&&(i=cast(createIndexes(c,d,f,g,h)))}catch(j){i=j.stack}postMessage(JSON.stringify(i))}function i(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?"":arguments[2],d=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],e=[];return d&&f(a,function(a,d){d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),f(b,function(b,d){d!==c&&void 0===a[d]?e.push({op:"add",path:"/"+d,value:b}):JSON.stringify(a[d])!==JSON.stringify(b)&&e.push({op:"replace",path:"/"+d,value:b})}),e}function j(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function setIndexValue(a,b,c){a.has(b)||a.set(b,new Set),a.get(b).add(c)}function setIndex(a,b,c,d,e,f,g){f?setIndexValue(b.get(f),keyIndex(f,e,c,g),d):a.forEach(function(a){setIndexValue(b.get(a),keyIndex(a,e,c,g),d)})}function k(a){var b={};return a.forEach(function(a,c){b[c]=a}),b}function l(){return j()+j()+"-"+j()+"-4"+j().substr(0,3)+"-"+s[Math.floor(4*Math.random())]+j().substr(0,3)+"-"+j()+j()+j()}function m(){var c=arguments.length<=0||void 0===arguments[0]?null:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],f=new Haro(c,d,e),g=void 0;if(u){g=[createIndexes.toString(),keyIndex.toString(),setIndexValue.toString(),setIndex.toString(),cast.toString(),"onmessage = "+h.toString()+";"];try{f.worker=a.URL.createObjectURL(b(g.join("\n")))}catch(i){f.worker=null}}return f}var n="undefined"!=typeof process&&"function"==typeof process.nextTick,o=n?require("es6-promise").Promise:a.Promise,Map=n?require("es6-map"):a.Map,Set=n?require("es6-set"):a.Set,p=n?require("node-fetch"):a.fetch,q=n?require("tiny-defer"):a.deferred,r=n?require("tiny-tuple"):a.tuple,s=[8,9,"a","b"],t={querystring:/\?.*/,endslash:/\/$/},u="undefined"!=typeof Blob&&"undefined"!=typeof Worker,v="Web Worker not supported",w={},Haro=function(){function Haro(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];_classCallCheck(this,Haro),this.adapters={},this.data=new Map,this.delimiter="|",this.config={method:"get",credentials:!1,headers:{accept:"application/json","content-type":"application/json"}},this.id=l(),this.index=[],this.indexes=new Map,this.key="",this.logging=!0,this.patch=!1,this.pattern="\\s*|\\t*",this.registry=[],this.source="",this.total=0,this.uri="",this.worker=null,this.versions=new Map,this.versioning=!0,Object.keys(c).forEach(function(a){b[a]=g(b[a],c[a])}),this.reindex(),a&&this.batch(a,"set")}return _createClass(Haro,[{key:"batch",value:function(a,b){function c(){o.all(a.map(k)).then(g.resolve,g.reject)}var e=this,f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],g=q(),h="del"===b,j=void 0,k=void 0,l=void 0;return k=h?function(a){return e.del(a,!0)}:function(a){return e.set(null,a,!0,!0,f)},this.patch?(h?j=i(this.toArray().map(function(a){return a[e.key]}),a,this.key,!0):(j=[],l={},a.forEach(function(a){var b=a[e.key];b?l[b]=a:j.push({op:"add",path:"/",value:a})}),j=j.concat(i(this.toObject(),l,this.key,!0))),j.length>0?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify(j)}).then(function(){c()},g.reject):g.resolve()):c(),g.promise}},{key:"clear",value:function(){return this.total=0,this.registry=[],this.data.clear(),this.indexes.clear(),this.versions.clear(),this.logging&&console.log("Cleared",this.id),this.reindex()}},{key:"cmd",value:function(a){var b=q();if(this.adapters[a]&&w[a]){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;c>e;e++)d[e-1]=arguments[e];w[a].apply(this,[this].concat(d)).then(b.resolve,b.reject)}else b.reject(new Error(a+" not configured for persistent storage"));return b.promise}},{key:"del",value:function(a){var b=this,c=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],f=q(),g=void 0;return g=function(){var c=b.registry.indexOf(a);c>-1&&(0===c?b.registry.shift():c===b.registry.length-1?b.registry.pop():b.registry.splice(c,1),e(b.index,b.indexes,b.delimiter,a,b.data.get(a),b.pattern),b.data["delete"](a),--b.total,b.versioning&&b.versions["delete"](a),b.storage("remove",a).then(function(c){c&&b.logging&&console.log("Deleted",a,"from persistent storage")},function(c){b.logging&&console.error("Error deleting",a,"from persistent storage:",c.message||c.stack||c)})),f.resolve()},this.data.has(a)?!c&&this.uri?this.patch?this.request(d(this.uri,null),{method:"patch",body:JSON.stringify([{op:"remove",path:"/"+a}])}).then(g,function(c){405===c[1]?(b.patch=!1,b.request(d(b.uri,a),{method:"delete"}).then(g,f.reject)):f.reject(c)}):this.request(d(this.uri,a),{method:"delete"}).then(g,f.reject):g():f.reject(new Error("Record not found")),f.promise}},{key:"dump",value:function(){var a=arguments.length<=0||void 0===arguments[0]?"records":arguments[0],b=void 0;return b="records"===a?this.toArray(null,!1):this.transform(this.indexes)}},{key:"entries",value:function(){return this.data.entries()}},{key:"find",value:function(a){var b=this,c=Object.keys(a).sort().join(this.delimiter),d=keyIndex(c,a,this.delimiter),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new Set).forEach(function(a){e.push(b.get(a))}),r.apply(r,e)}},{key:"filter",value:function(a){var b=[];return this.forEach(function(c,d){a(c,d)===!0&&b.push(r(d,c))}),r.apply(r,b)}},{key:"forEach",value:function(a,b){return this.data.forEach(function(b,d){a(c(b),c(d))},b),this}},{key:"get",value:function(a){var b=void 0;return this.data.has(a)&&(b=r(a,this.data.get(a))),b}},{key:"has",value:function(a){return this.data.has(a)}},{key:"keys",value:function(){return this.data.keys()}},{key:"limit",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=a,d=b,e=[],f=void 0,g=void 0,h=void 0;if(void 0===c&&(c=-1),f=d,h=d+c,0>f||f>=h)throw new Error("Invalid range");do g=this.registry[f],g&&e.push(this.get(g));while(++f-1?"json":"text"]().then(function(a){c[200>b||b>=400?"reject":"resolve"](r(a,b,d))},function(a){c.reject(r(a.message,b,d))})},function(a){c.reject(r(a.message,0,{}))}),c.promise}},{key:"save",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0];return this.cmd(b,"set").then(function(c){return a.logging&&console.log("Saved",a.id,"to",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error saving ",a.id,"to",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"search",value:function(a,b){var d=this,e=[],f="function"==typeof a,g=a&&"function"==typeof a.test,h=new Set,i=void 0,j=void 0;return a&&(i=c(b||this.index),i instanceof Array?j=i:"string"==typeof i&&(j=[i]),j.forEach(function(b){var c=d.indexes.get(b);c&&c.forEach(function(c,i){switch(!0){case f&&a(i,b):case g&&a.test(i):case i===a:c.forEach(function(a){h.has(a)||(h.add(a),e.push(d.get(a)))})}})})),r.apply(r,e)}},{key:"set",value:function(a,b){var f=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],h=this,j=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],k=arguments.length<=4||void 0===arguments[4]?!1:arguments[4],m=q(),n="post",o=c(b),p=a,s=void 0,t=void 0,u=void 0,v=function(a){var b=a?a[0]:{};null===p&&(h.key?(h.source&&h.source.split(".").forEach(function(a){b=b[a]||{}}),p=b[h.key]||o[h.key]||l()):p=l()),"post"===n?(h.registry[h.total]=p,++h.total,h.versioning&&h.versions.set(p,new Set)):(h.versioning&&h.versions.get(p).add(r(t)),e(h.index,h.indexes,h.delimiter,p,t,h.pattern)),h.data.set(p,o),setIndex(h.index,h.indexes,h.delimiter,p,o,null,h.pattern),m.resolve(h.get(p)),k||h.storage("set",p,o).then(function(a){a&&h.logging&&console.log("Saved",p,"to persistent storage")},function(a){h.logging&&console.error("Error saving",p,"to persistent storage:",a.message||a.stack||a)})};return void 0===p||null===p?p=null:this.data.has(p)&&(n="put",t=this.data.get(p),j||(o=g(t,o))),!f&&this.uri?(u=d(this.uri,p),this.patch?(s="post"===n?[{op:"add",path:"/",value:o}]:j?[{op:"replace",path:"/",value:o}]:i(t,o,this.key),this.request(u,{method:"patch",body:JSON.stringify(s)}).then(v,function(a){405===a[1]?(h.patch=!1,h.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):m.reject(a)})):this.request(u,{method:n,body:JSON.stringify(o)}).then(v,function(a){m.reject(a)})):v(),m.promise}},{key:"setUri",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=q();return this.uri=a,this.uri?this.sync(b).then(c.resolve,c.reject):c.resolve([]),c.promise}},{key:"sort",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],c=void 0;return c=b?Object.freeze(this.toArray(null,!1).sort(a).map(function(a){return Object.freeze(a)})):this.toArray(null,!1).sort(a)}},{key:"sortBy",value:function(a){var b=this,c=[],d=[],e=void 0;return this.indexes.has(a)||(this.index.push(a),this.reindex(a)),e=this.indexes.get(a),e.forEach(function(a,b){d.push(b)}),d.sort().forEach(function(a){e.get(a).forEach(function(a){c.push(b.get(a))})}),r.apply(r,c)}},{key:"storage",value:function(){for(var a=this,b=arguments.length,c=Array(b),d=0;b>d;d++)c[d]=arguments[d];var e=q(),f=[];return Object.keys(this.adapters).forEach(function(b){f.push(a.cmd.apply(a,[b].concat(c)))}),f.length>0?o.all(f).then(function(){e.resolve(!0)},e.reject):e.resolve(!1),e.promise}},{key:"sync",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],c=q();return this.request(this.uri).then(function(d){var e=d[0];if(a.patch=(d[2].Allow||d[2].allow||"").indexOf("PATCH")>-1,a.source)try{a.source.split(".").forEach(function(a){e=e[a]})}catch(f){return c.reject(f)}b&&a.clear(),a.batch(e,"set").then(c.resolve,c.reject)},function(a){c.reject(a[0]||a)}),c.promise}},{key:"toArray",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=this.key,e=void 0,f=void 0;return a?(e=function(){return d?function(a,b){var e=c(b[1]);return void 0===e[d]&&(e[d]=c(b[0])),a.push(e),a}:function(a,b){return a.push(c(b[1])),a}}(),f=a.reduce(e,[])):(e=function(){return d?function(a,b){var e=c(a);void 0===e[d]&&(e[d]=c(b)),f.push(e)}:function(a){f.push(c(a))}}(),f=[],this.forEach(e)),b?Object.freeze(f):f}},{key:"toObject",value:function(a){var b=arguments.length<=1||void 0===arguments[1]?!0:arguments[1],d=void 0;return(d=b?function(a){return a}:function(a){return c(a)})(a?a.reduce(function(a,b){return a[b[0]]=b[1],a},{}):k(this))}},{key:"transform",value:function(a,b){return"function"==typeof b?b(a):cast(a)}},{key:"unload",value:function(){var a=this,b=arguments.length<=0||void 0===arguments[0]?"mongo":arguments[0],c=arguments.length<=1||void 0===arguments[1]?void 0:arguments[1],d=void 0!==c?c:this.id;return this.cmd(b,"remove",c).then(function(c){return a.logging&&console.log("Unloaded",d,"from",b,"persistent storage"),c},function(c){throw a.logging&&console.error("Error unloading",d,"from",b,"persistent storage:",c.message||c.stack||c),c})}},{key:"unregister",value:function(a){delete w[a]}},{key:"values",value:function(){return this.data.values()}},{key:"useWorker",value:function(a){var b=void 0;return this.worker?(b=new Worker(this.worker),b.onerror=function(c){a.reject(c),b.terminate()},b.onmessage=function(c){a.resolve(JSON.parse(c.data)),b.terminate()}):a.reject(new Error(v)),b}}]),Haro}();m.transform=cast,m.version="1.7.1","undefined"!=typeof exports?module.exports=m:"function"==typeof define?define(function(){return m}):a.haro=m}("undefined"!=typeof global?global:window); //# sourceMappingURL=haro.min.js.map \ No newline at end of file diff --git a/lib/haro.min.js.map b/lib/haro.min.js.map index 3ef3955..7e263ce 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","args","setIndex","iterate","fn","call","merge","a","b","c","d","concat","onmessage","ev","records","cmd","stack","postMessage","patch","ogdata","arguments","overwrite","v","k","op","path","s","Math","random","toString","substring","setIndexValue","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","worker","URL","createObjectURL","server","process","nextTick","Promise","require","fetch","deferred","tuple","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","next","all","then","defer","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","transform","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","useWorker","_this6","datum","_this7","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lindex","lset","lkey","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","values","onerror","terminate","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.7.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 webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction cast(input) {\n\t\tvar result = undefined;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = undefined;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(args, indexes, key, delimiter, pattern) {\n\t\tvar result = new Map();\n\n\t\tindexes.forEach(function (i) {\n\t\t\tresult.set(i, new Map());\n\t\t});\n\n\t\targs.forEach(function (i) {\n\t\t\tif (i[key] !== undefined) {\n\t\t\t\tsetIndex(indexes, result, delimiter, i[key], i, undefined, pattern);\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t records = data.records,\n\t\t index = data.index,\n\t\t cmd = data.cmd,\n\t\t key = data.key,\n\t\t delimiter = data.delimiter,\n\t\t pattern = data.pattern,\n\t\t result = undefined;\n\n\t\ttry {\n\t\t\tif (cmd === \"index\") {\n\t\t\t\tresult = cast(createIndexes(records, index, key, delimiter, pattern));\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tresult = e.stack;\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments.length <= 2 || arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter, pattern), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter, pattern), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\tresult.push(_this4.get(i));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(key, this.data.get(key));\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit(max) {\n\t\t\t\tvar offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this5.batch(arg, \"set\", true) : _this5.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tresult.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length <= 1 || arguments[1] === undefined ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tobj.postMessage(JSON.stringify({\n\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this6.key] || uuid();\n\n\t\t\t\t\t\t_this6.data.set(key, datum);\n\t\t\t\t\t\t_this6.registry.push(key);\n\t\t\t\t\t});\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\t_this7.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\t_this7.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, i, _this7.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, index, _this7.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this8.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this8.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set(),\n\t\t\t\t lindex = undefined,\n\t\t\t\t indexes = undefined;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tlindex = clone(index || this.index);\n\n\t\t\t\t\tif (lindex instanceof Array) {\n\t\t\t\t\t\tindexes = lindex;\n\t\t\t\t\t} else if (typeof lindex === \"string\") {\n\t\t\t\t\t\tindexes = [lindex];\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this9.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this9.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this10.key) {\n\t\t\t\t\t\t\tif (_this10.source) {\n\t\t\t\t\t\t\t\t_this10.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\t\txdata = xdata[i] || {};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlkey = xdata[_this10.key] || ldata[_this10.key] || uuid();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlkey = uuid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t_this10.registry[_this10.total] = lkey;\n\t\t\t\t\t\t++_this10.total;\n\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.set(lkey, new Set());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ogdata, _this10.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ldata, null, _this10.pattern);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this10.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this10.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = null;\n\t\t\t\t} else if (this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.toArray(null, false).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [],\n\t\t\t\t lindex = undefined;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t});\n\n\t\t\t\tkeys.sort().forEach(function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this11.get(key));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = [];\n\n\t\t\t\tObject.keys(this.adapters).forEach(function (i) {\n\t\t\t\t\tdeferreds.push(_this12.cmd.apply(_this12, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this13.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this13.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this13.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this13.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this13.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this14.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this14.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [createIndexes.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), cast.toString(), \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = global.URL.createObjectURL(blob(functions.join(\"\\n\")));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"1.7.0\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["haro.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","global","cast","input","result","undefined","Map","forEach","value","Set","push","Array","add","keys","set","blob","arg","obj","Blob","type","e","BlobBuilder","MSBlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","split","sort","map","String","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","has","size","createIndexes","args","setIndex","iterate","fn","call","merge","a","b","c","d","concat","onmessage","ev","records","cmd","stack","postMessage","patch","ogdata","arguments","overwrite","v","k","op","path","s","Math","random","toString","substring","setIndexValue","indice","toObjekt","uuid","substr","r","floor","factory","config","Haro","functions","webWorker","worker","URL","createObjectURL","server","process","nextTick","Promise","require","fetch","deferred","tuple","Worker","webWorkerError","adapter","_this","this","adapters","method","credentials","headers","accept","content-type","id","logging","registry","source","total","uri","versions","versioning","reindex","batch","next","all","then","defer","resolve","reject","_this2","lload","del","hash","toArray","toObject","request","body","promise","clear","console","log","_len","_key","apply","Error","_this3","indexOf","shift","pop","splice","storage","success","error","message","transform","entries","where","_this4","ctx","output","max","offset","lmax","loffset","list","nth","_this5","useWorker","_this6","datum","_this7","cfg","toUpperCase","res","status","_headers","_this8","_this9","rgex","test","seen","lindex","lset","lkey","_this10","override","ldata","luri","xdata","err","sync","frozen","freeze","_this11","_this12","_len2","_key2","deferreds","_this13","Allow","allow","reduce","val","func","_this14","values","onerror","terminate","version","exports","module","define","haro","window"],"mappings":"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","sourcesContent":["/**\n * Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples\n *\n * @author Jason Mulligan \n * @copyright 2015\n * @license BSD-3-Clause\n * @link http://haro.rocks\n * @version 1.7.1\n */\n\"use strict\";\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global) {\n\tvar server = typeof process !== \"undefined\" && typeof process.nextTick === \"function\";\n\tvar Promise = !server ? global.Promise : require(\"es6-promise\").Promise;\n\tvar Map = !server ? global.Map : require(\"es6-map\");\n\tvar Set = !server ? global.Set : require(\"es6-set\");\n\tvar fetch = !server ? global.fetch : require(\"node-fetch\");\n\tvar deferred = !server ? global.deferred : require(\"tiny-defer\");\n\tvar tuple = !server ? global.tuple : require(\"tiny-tuple\");\n\tvar r = [8, 9, \"a\", \"b\"];\n\tvar regex = {\n\t\tquerystring: /\\?.*/,\n\t\tendslash: /\\/$/\n\t};\n\tvar webWorker = typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\";\n\tvar webWorkerError = \"Web Worker not supported\";\n\tvar adapter = {};\n\n\tfunction cast(input) {\n\t\tvar result = undefined;\n\n\t\tswitch (true) {\n\t\t\tcase input instanceof Map:\n\t\t\t\tresult = {};\n\t\t\t\tinput.forEach(function (value, key) {\n\t\t\t\t\tresult[key] = cast(value);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Set:\n\t\t\t\tresult = [];\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.push(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Array:\n\t\t\t\tresult = new Set();\n\t\t\t\tinput.forEach(function (i) {\n\t\t\t\t\tresult.add(cast(i));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase input instanceof Object:\n\t\t\t\tresult = new Map();\n\t\t\t\tObject.keys(input).forEach(function (i) {\n\t\t\t\t\tresult.set(i, cast(input[i]));\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = input;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction blob(arg) {\n\t\tvar obj = undefined;\n\n\t\ttry {\n\t\t\tobj = new Blob([arg], { type: \"application/javascript\" });\n\t\t} catch (e) {\n\t\t\tif (!global.BlobBuilder) {\n\t\t\t\tglobal.BlobBuilder = global.MSBlobBuilder || global.WebKitBlobBuilder || global.MozBlobBuilder;\n\t\t\t}\n\n\t\t\tobj = new global.BlobBuilder().append(arg).getBlob();\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfunction clone(arg) {\n\t\treturn JSON.parse(JSON.stringify(arg));\n\t}\n\n\tfunction concatURI(left, right) {\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\n\t}\n\n\tfunction keyIndex(key, data, delimiter, pattern) {\n\t\tvar keys = key.split(delimiter).sort(),\n\t\t result = undefined;\n\n\t\tif (keys.length > 1) {\n\t\t\tresult = keys.map(function (i) {\n\t\t\t\treturn String(data[i]).replace(new RegExp(pattern, \"g\"), \"\").toLowerCase();\n\t\t\t}).join(delimiter);\n\t\t} else {\n\t\t\tresult = data[key];\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction delIndex(index, indexes, delimiter, key, data, pattern) {\n\t\tindex.forEach(function (i) {\n\t\t\tvar idx = indexes.get(i),\n\t\t\t value = keyIndex(i, data, delimiter, pattern),\n\t\t\t o = undefined;\n\n\t\t\tif (idx.has(value)) {\n\t\t\t\to = idx.get(value);\n\t\t\t\to[\"delete\"](key);\n\n\t\t\t\tif (o.size === 0) {\n\t\t\t\t\tidx[\"delete\"](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction createIndexes(args, indexes, key, delimiter, pattern) {\n\t\tvar result = new Map();\n\n\t\tindexes.forEach(function (i) {\n\t\t\tresult.set(i, new Map());\n\t\t});\n\n\t\targs.forEach(function (i) {\n\t\t\tif (i[key] !== undefined) {\n\t\t\t\tsetIndex(indexes, result, delimiter, i[key], i, undefined, pattern);\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction iterate(obj, fn) {\n\t\tif (obj instanceof Object) {\n\t\t\tObject.keys(obj).forEach(function (i) {\n\t\t\t\tfn.call(obj, obj[i], i);\n\t\t\t});\n\t\t} else {\n\t\t\tobj.forEach(fn);\n\t\t}\n\t}\n\n\tfunction merge(a, b) {\n\t\tvar c = a !== undefined ? clone(a) : a,\n\t\t d = b !== undefined ? clone(b) : b;\n\n\t\tif (c instanceof Object && d instanceof Object) {\n\t\t\tObject.keys(d).forEach(function (i) {\n\t\t\t\tif (c[i] instanceof Object && d[i] instanceof Object) {\n\t\t\t\t\tc[i] = merge(c[i], d[i]);\n\t\t\t\t} else if (c[i] instanceof Array && d[i] instanceof Array) {\n\t\t\t\t\tc[i] = c[i].concat(d[i]);\n\t\t\t\t} else {\n\t\t\t\t\tc[i] = d[i];\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (c instanceof Array && d instanceof Array) {\n\t\t\tc = c.concat(d);\n\t\t} else {\n\t\t\tc = d;\n\t\t}\n\n\t\treturn c;\n\t}\n\n\tfunction onmessage(ev) {\n\t\tvar data = JSON.parse(ev.data),\n\t\t records = data.records,\n\t\t index = data.index,\n\t\t cmd = data.cmd,\n\t\t key = data.key,\n\t\t delimiter = data.delimiter,\n\t\t pattern = data.pattern,\n\t\t result = undefined;\n\n\t\ttry {\n\t\t\tif (cmd === \"index\") {\n\t\t\t\tresult = cast(createIndexes(records, index, key, delimiter, pattern));\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tresult = e.stack;\n\t\t}\n\n\t\tpostMessage(JSON.stringify(result));\n\t}\n\n\tfunction patch() {\n\t\tvar ogdata = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\tvar data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar key = arguments.length <= 2 || arguments[2] === undefined ? \"\" : arguments[2];\n\t\tvar overwrite = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n\t\tvar result = [];\n\n\t\tif (overwrite) {\n\t\t\titerate(ogdata, function (v, k) {\n\t\t\t\tif (k !== key && data[k] === undefined) {\n\t\t\t\t\tresult.push({ op: \"remove\", path: \"/\" + k });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\titerate(data, function (v, k) {\n\t\t\tif (k !== key && ogdata[k] === undefined) {\n\t\t\t\tresult.push({ op: \"add\", path: \"/\" + k, value: v });\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\n\t\t\t\tresult.push({ op: \"replace\", path: \"/\" + k, value: v });\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction s() {\n\t\treturn ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n\t}\n\n\tfunction setIndexValue(index, key, value) {\n\t\tif (!index.has(key)) {\n\t\t\tindex.set(key, new Set());\n\t\t}\n\n\t\tindex.get(key).add(value);\n\t}\n\n\tfunction setIndex(index, indexes, delimiter, key, data, indice, pattern) {\n\t\tif (!indice) {\n\t\t\tindex.forEach(function (i) {\n\t\t\t\tsetIndexValue(indexes.get(i), keyIndex(i, data, delimiter, pattern), key);\n\t\t\t});\n\t\t} else {\n\t\t\tsetIndexValue(indexes.get(indice), keyIndex(indice, data, delimiter, pattern), key);\n\t\t}\n\t}\n\n\tfunction toObjekt(arg) {\n\t\tvar result = {};\n\n\t\targ.forEach(function (value, key) {\n\t\t\tresult[key] = value;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction uuid() {\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\n\t}\n\n\tvar Haro = (function () {\n\t\tfunction Haro(data) {\n\t\t\tvar _this = this;\n\n\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t_classCallCheck(this, Haro);\n\n\t\t\tthis.adapters = {};\n\t\t\tthis.data = new Map();\n\t\t\tthis.delimiter = \"|\";\n\t\t\tthis.config = {\n\t\t\t\tmethod: \"get\",\n\t\t\t\tcredentials: false,\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.id = uuid();\n\t\t\tthis.index = [];\n\t\t\tthis.indexes = new Map();\n\t\t\tthis.key = \"\";\n\t\t\tthis.logging = true;\n\t\t\tthis.patch = false;\n\t\t\tthis.pattern = \"\\\\s*|\\\\t*\";\n\t\t\tthis.registry = [];\n\t\t\tthis.source = \"\";\n\t\t\tthis.total = 0;\n\t\t\tthis.uri = \"\";\n\t\t\tthis.worker = null;\n\t\t\tthis.versions = new Map();\n\t\t\tthis.versioning = true;\n\n\t\t\tObject.keys(config).forEach(function (i) {\n\t\t\t\t_this[i] = merge(_this[i], config[i]);\n\t\t\t});\n\n\t\t\tthis.reindex();\n\n\t\t\tif (data) {\n\t\t\t\tthis.batch(data, \"set\");\n\t\t\t}\n\t\t}\n\n\t\t_createClass(Haro, [{\n\t\t\tkey: \"batch\",\n\t\t\tvalue: function batch(args, type) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tvar lload = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t del = type === \"del\",\n\t\t\t\t data = undefined,\n\t\t\t\t fn = undefined,\n\t\t\t\t hash = undefined;\n\n\t\t\t\tfunction next() {\n\t\t\t\t\tPromise.all(args.map(fn)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\tif (del) {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.del(i, true);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfn = function (i) {\n\t\t\t\t\t\treturn _this2.set(null, i, true, true, lload);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (this.patch) {\n\t\t\t\t\tif (del) {\n\t\t\t\t\t\tdata = patch(this.toArray().map(function (i) {\n\t\t\t\t\t\t\treturn i[_this2.key];\n\t\t\t\t\t\t}), args, this.key, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\thash = {};\n\t\t\t\t\t\targs.forEach(function (i) {\n\t\t\t\t\t\t\tvar key = i[_this2.key];\n\n\t\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\t\thash[key] = i;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata.push({ op: \"add\", path: \"/\", value: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdata = data.concat(patch(this.toObject(), hash, this.key, true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.length > 0) {\n\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(data)\n\t\t\t\t\t\t}).then(function () {\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t}, defer.reject);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefer.resolve();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"clear\",\n\t\t\tvalue: function clear() {\n\t\t\t\tthis.total = 0;\n\t\t\t\tthis.registry = [];\n\t\t\t\tthis.data.clear();\n\t\t\t\tthis.indexes.clear();\n\t\t\t\tthis.versions.clear();\n\n\t\t\t\tif (this.logging) {\n\t\t\t\t\tconsole.log(\"Cleared\", this.id);\n\t\t\t\t}\n\n\t\t\t\treturn this.reindex();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"cmd\",\n\t\t\tvalue: function cmd(type) {\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (!this.adapters[type] || !adapter[type]) {\n\t\t\t\t\tdefer.reject(new Error(type + \" not configured for persistent storage\"));\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\t\t\t\targs[_key - 1] = arguments[_key];\n\t\t\t\t\t}\n\n\t\t\t\t\tadapter[type].apply(this, [this].concat(args)).then(defer.resolve, defer.reject);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"del\",\n\t\t\tvalue: function del(key) {\n\t\t\t\tvar _this3 = this;\n\n\t\t\t\tvar batch = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t next = undefined;\n\n\t\t\t\tnext = function () {\n\t\t\t\t\tvar index = _this3.registry.indexOf(key);\n\n\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t_this3.registry.shift();\n\t\t\t\t\t\t} else if (index === _this3.registry.length - 1) {\n\t\t\t\t\t\t\t_this3.registry.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this3.registry.splice(index, 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this3.index, _this3.indexes, _this3.delimiter, key, _this3.data.get(key), _this3.pattern);\n\t\t\t\t\t\t_this3.data[\"delete\"](key);\n\t\t\t\t\t\t--_this3.total;\n\n\t\t\t\t\t\tif (_this3.versioning) {\n\t\t\t\t\t\t\t_this3.versions[\"delete\"](key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this3.storage(\"remove\", key).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this3.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Deleted\", key, \"from persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this3.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error deleting\", key, \"from persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdefer.resolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, null), {\n\t\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\t\tbody: JSON.stringify([{ op: \"remove\", path: \"/\" + key }])\n\t\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t\t_this3.patch = false;\n\t\t\t\t\t\t\t\t\t_this3.request(concatURI(_this3.uri, key), {\n\t\t\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.request(concatURI(this.uri, key), {\n\t\t\t\t\t\t\t\tmethod: \"delete\"\n\t\t\t\t\t\t\t}).then(next, defer.reject);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Record not found\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"dump\",\n\t\t\tvalue: function dump() {\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"records\" : arguments[0];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (type === \"records\") {\n\t\t\t\t\tresult = this.toArray(null, false);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.transform(this.indexes);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"entries\",\n\t\t\tvalue: function entries() {\n\t\t\t\treturn this.data.entries();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"find\",\n\t\t\tvalue: function find(where) {\n\t\t\t\tvar _this4 = this;\n\n\t\t\t\tvar key = Object.keys(where).sort().join(this.delimiter),\n\t\t\t\t value = keyIndex(key, where, this.delimiter),\n\t\t\t\t result = [];\n\n\t\t\t\tif (this.indexes.has(key)) {\n\t\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(function (i) {\n\t\t\t\t\t\tresult.push(_this4.get(i));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"filter\",\n\t\t\tvalue: function filter(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tif (fn(value, key) === true) {\n\t\t\t\t\t\tresult.push(tuple(key, value));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"forEach\",\n\t\t\tvalue: function forEach(fn, ctx) {\n\t\t\t\tthis.data.forEach(function (value, key) {\n\t\t\t\t\tfn(clone(value), clone(key));\n\t\t\t\t}, ctx);\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"get\",\n\t\t\tvalue: function get(key) {\n\t\t\t\tvar output = undefined;\n\n\t\t\t\tif (this.data.has(key)) {\n\t\t\t\t\toutput = tuple(key, this.data.get(key));\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"has\",\n\t\t\tvalue: function has(key) {\n\t\t\t\treturn this.data.has(key);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"keys\",\n\t\t\tvalue: function keys() {\n\t\t\t\treturn this.data.keys();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"limit\",\n\t\t\tvalue: function limit(max) {\n\t\t\t\tvar offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n\t\t\t\tvar lmax = max,\n\t\t\t\t loffset = offset,\n\t\t\t\t list = [],\n\t\t\t\t i = undefined,\n\t\t\t\t k = undefined,\n\t\t\t\t nth = undefined;\n\n\t\t\t\tif (lmax === undefined) {\n\t\t\t\t\tlmax = -1;\n\t\t\t\t}\n\n\t\t\t\ti = loffset;\n\t\t\t\tnth = loffset + lmax;\n\n\t\t\t\tif (i < 0 || i >= nth) {\n\t\t\t\t\tthrow new Error(\"Invalid range\");\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tk = this.registry[i];\n\n\t\t\t\t\tif (k) {\n\t\t\t\t\t\tlist.push(this.get(k));\n\t\t\t\t\t}\n\t\t\t\t} while (++i < nth);\n\n\t\t\t\treturn tuple.apply(tuple, list);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"load\",\n\t\t\tvalue: function load() {\n\t\t\t\tvar _this5 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar batch = key === undefined,\n\t\t\t\t id = !batch ? key : this.id;\n\n\t\t\t\tif (batch) {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\n\t\t\t\treturn this.cmd(type, \"get\", key).then(function (arg) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.log(\"Loaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn batch ? _this5.batch(arg, \"set\", true) : _this5.set(key, arg, true, true, true);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this5.logging) {\n\t\t\t\t\t\tconsole.error(\"Error loading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"map\",\n\t\t\tvalue: function map(fn) {\n\t\t\t\tvar result = [];\n\n\t\t\t\tthis.forEach(function (value, key) {\n\t\t\t\t\tresult.push(fn(value, key));\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"offload\",\n\t\t\tvalue: function offload(data) {\n\t\t\t\tvar cmd = arguments.length <= 1 || arguments[1] === undefined ? \"index\" : arguments[1];\n\t\t\t\tvar index = arguments.length <= 2 || arguments[2] === undefined ? this.index : arguments[2];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = this.useWorker(defer);\n\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tobj.postMessage(JSON.stringify({\n\t\t\t\t\t\t\tcmd: cmd,\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\trecords: data,\n\t\t\t\t\t\t\tkey: this.key,\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\n\t\t\t\t\t\t\tpattern: this.pattern\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"override\",\n\t\t\tvalue: function override(data) {\n\t\t\t\tvar _this6 = this;\n\n\t\t\t\tvar type = arguments.length <= 1 || arguments[1] === undefined ? \"records\" : arguments[1];\n\t\t\t\tvar fn = arguments.length <= 2 || arguments[2] === undefined ? undefined : arguments[2];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tif (type === \"indexes\") {\n\t\t\t\t\tthis.indexes = this.transform(data, fn);\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else if (type === \"records\") {\n\t\t\t\t\tthis.data = new Map();\n\t\t\t\t\tthis.registry = [];\n\t\t\t\t\tdata.forEach(function (datum) {\n\t\t\t\t\t\tvar key = datum[_this6.key] || uuid();\n\n\t\t\t\t\t\t_this6.data.set(key, datum);\n\t\t\t\t\t\t_this6.registry.push(key);\n\t\t\t\t\t});\n\t\t\t\t\tthis.total = this.data.size;\n\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(\"Invalid type\"));\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"register\",\n\t\t\tvalue: function register(key, fn) {\n\t\t\t\tadapter[key] = fn;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"reindex\",\n\t\t\tvalue: function reindex(index) {\n\t\t\t\tvar _this7 = this;\n\n\t\t\t\tif (!index) {\n\t\t\t\t\tthis.indexes.clear();\n\t\t\t\t\tthis.index.forEach(function (i) {\n\t\t\t\t\t\t_this7.indexes.set(i, new Map());\n\t\t\t\t\t});\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\t_this7.index.forEach(function (i) {\n\t\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, i, _this7.pattern);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis.indexes.set(index, new Map());\n\t\t\t\t\tthis.forEach(function (data, key) {\n\t\t\t\t\t\tsetIndex(_this7.index, _this7.indexes, _this7.delimiter, key, data, index, _this7.pattern);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"request\",\n\t\t\tvalue: function request(input) {\n\t\t\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t cfg = merge(this.config, config);\n\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\n\n\t\t\t\tfetch(input, cfg).then(function (res) {\n\t\t\t\t\tvar status = res.status,\n\t\t\t\t\t headers = undefined;\n\n\t\t\t\t\tif (res.headers._headers) {\n\t\t\t\t\t\theaders = {};\n\t\t\t\t\t\tObject.keys(res.headers._headers).forEach(function (i) {\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaders = toObjekt(res.headers);\n\t\t\t\t\t}\n\n\t\t\t\t\tres[res.headers.get(\"content-type\").indexOf(\"application/json\") > -1 ? \"json\" : \"text\"]().then(function (arg) {\n\t\t\t\t\t\tdefer[status < 200 || status >= 400 ? \"reject\" : \"resolve\"](tuple(arg, status, headers));\n\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\tdefer.reject(tuple(e.message, status, headers));\n\t\t\t\t\t});\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(tuple(e.message, 0, {}));\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"save\",\n\t\t\tvalue: function save() {\n\t\t\t\tvar _this8 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\n\t\t\t\treturn this.cmd(type, \"set\").then(function (arg) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.log(\"Saved\", _this8.id, \"to\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this8.logging) {\n\t\t\t\t\t\tconsole.error(\"Error saving \", _this8.id, \"to\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"search\",\n\t\t\tvalue: function search(value, index) {\n\t\t\t\tvar _this9 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t fn = typeof value === \"function\",\n\t\t\t\t rgex = value && typeof value.test === \"function\",\n\t\t\t\t seen = new Set(),\n\t\t\t\t lindex = undefined,\n\t\t\t\t indexes = undefined;\n\n\t\t\t\tif (value) {\n\t\t\t\t\tlindex = clone(index || this.index);\n\n\t\t\t\t\tif (lindex instanceof Array) {\n\t\t\t\t\t\tindexes = lindex;\n\t\t\t\t\t} else if (typeof lindex === \"string\") {\n\t\t\t\t\t\tindexes = [lindex];\n\t\t\t\t\t}\n\n\t\t\t\t\tindexes.forEach(function (i) {\n\t\t\t\t\t\tvar idx = _this9.indexes.get(i);\n\n\t\t\t\t\t\tif (idx) {\n\t\t\t\t\t\t\tidx.forEach(function (lset, lkey) {\n\t\t\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\n\t\t\t\t\t\t\t\t\tcase rgex && value.test(lkey):\n\t\t\t\t\t\t\t\t\tcase lkey === value:\n\t\t\t\t\t\t\t\t\t\tlset.forEach(function (key) {\n\t\t\t\t\t\t\t\t\t\t\tif (!seen.has(key)) {\n\t\t\t\t\t\t\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\t\t\t\t\t\t\tresult.push(_this9.get(key));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"set\",\n\t\t\tvalue: function set(key, data) {\n\t\t\t\tvar batch = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n\t\t\t\tvar _this10 = this;\n\n\t\t\t\tvar override = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\t\t\t\tvar lload = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4];\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t method = \"post\",\n\t\t\t\t ldata = clone(data),\n\t\t\t\t lkey = key,\n\t\t\t\t body = undefined,\n\t\t\t\t ogdata = undefined,\n\t\t\t\t luri = undefined;\n\n\t\t\t\tvar next = function next(arg) {\n\t\t\t\t\tvar xdata = arg ? arg[0] : {};\n\n\t\t\t\t\tif (lkey === null) {\n\t\t\t\t\t\tif (_this10.key) {\n\t\t\t\t\t\t\tif (_this10.source) {\n\t\t\t\t\t\t\t\t_this10.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\t\txdata = xdata[i] || {};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlkey = xdata[_this10.key] || ldata[_this10.key] || uuid();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlkey = uuid();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t_this10.registry[_this10.total] = lkey;\n\t\t\t\t\t\t++_this10.total;\n\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.set(lkey, new Set());\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (_this10.versioning) {\n\t\t\t\t\t\t\t_this10.versions.get(lkey).add(tuple(ogdata));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ogdata, _this10.pattern);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.data.set(lkey, ldata);\n\t\t\t\t\tsetIndex(_this10.index, _this10.indexes, _this10.delimiter, lkey, ldata, null, _this10.pattern);\n\t\t\t\t\tdefer.resolve(_this10.get(lkey));\n\n\t\t\t\t\tif (!lload) {\n\t\t\t\t\t\t_this10.storage(\"set\", lkey, ldata).then(function (success) {\n\t\t\t\t\t\t\tif (success && _this10.logging) {\n\t\t\t\t\t\t\t\tconsole.log(\"Saved\", lkey, \"to persistent storage\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, function (e) {\n\t\t\t\t\t\t\tif (_this10.logging) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error saving\", lkey, \"to persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (lkey === undefined || lkey === null) {\n\t\t\t\t\tlkey = null;\n\t\t\t\t} else if (this.data.has(lkey)) {\n\t\t\t\t\tmethod = \"put\";\n\t\t\t\t\togdata = this.data.get(lkey);\n\n\t\t\t\t\tif (!override) {\n\t\t\t\t\t\tldata = merge(ogdata, ldata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!batch && this.uri) {\n\t\t\t\t\tluri = concatURI(this.uri, lkey);\n\n\t\t\t\t\tif (this.patch) {\n\t\t\t\t\t\tif (method === \"post\") {\n\t\t\t\t\t\t\tbody = [{ op: \"add\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else if (override) {\n\t\t\t\t\t\t\tbody = [{ op: \"replace\", path: \"/\", value: ldata }];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody = patch(ogdata, ldata, this.key);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: \"patch\",\n\t\t\t\t\t\t\tbody: JSON.stringify(body)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tif (e[1] === 405) {\n\t\t\t\t\t\t\t\t_this10.patch = false;\n\t\t\t\t\t\t\t\t_this10.request(luri, {\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t\t\t}).then(next, function (err) {\n\t\t\t\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.request(luri, {\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tbody: JSON.stringify(ldata)\n\t\t\t\t\t\t}).then(next, function (e) {\n\t\t\t\t\t\t\tdefer.reject(e);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"setUri\",\n\t\t\tvalue: function setUri(uri) {\n\t\t\t\tvar clear = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.uri = uri;\n\n\t\t\t\tif (this.uri) {\n\t\t\t\t\tthis.sync(clear).then(defer.resolve, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve([]);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sort\",\n\t\t\tvalue: function sort(fn) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar result = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tresult = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {\n\t\t\t\t\t\treturn Object.freeze(i);\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.toArray(null, false).sort(fn);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sortBy\",\n\t\t\tvalue: function sortBy(index) {\n\t\t\t\tvar _this11 = this;\n\n\t\t\t\tvar result = [],\n\t\t\t\t keys = [],\n\t\t\t\t lindex = undefined;\n\n\t\t\t\tif (!this.indexes.has(index)) {\n\t\t\t\t\tthis.index.push(index);\n\t\t\t\t\tthis.reindex(index);\n\t\t\t\t}\n\n\t\t\t\tlindex = this.indexes.get(index);\n\t\t\t\tlindex.forEach(function (idx, key) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t});\n\n\t\t\t\tkeys.sort().forEach(function (i) {\n\t\t\t\t\tlindex.get(i).forEach(function (key) {\n\t\t\t\t\t\tresult.push(_this11.get(key));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn tuple.apply(tuple, result);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"storage\",\n\t\t\tvalue: function storage() {\n\t\t\t\tvar _this12 = this;\n\n\t\t\t\tfor (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\t\t\targs[_key2] = arguments[_key2];\n\t\t\t\t}\n\n\t\t\t\tvar defer = deferred(),\n\t\t\t\t deferreds = [];\n\n\t\t\t\tObject.keys(this.adapters).forEach(function (i) {\n\t\t\t\t\tdeferreds.push(_this12.cmd.apply(_this12, [i].concat(args)));\n\t\t\t\t});\n\n\t\t\t\tif (deferreds.length > 0) {\n\t\t\t\t\tPromise.all(deferreds).then(function () {\n\t\t\t\t\t\tdefer.resolve(true);\n\t\t\t\t\t}, defer.reject);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(false);\n\t\t\t\t}\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"sync\",\n\t\t\tvalue: function sync() {\n\t\t\t\tvar _this13 = this;\n\n\t\t\t\tvar clear = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n\t\t\t\tvar defer = deferred();\n\n\t\t\t\tthis.request(this.uri).then(function (arg) {\n\t\t\t\t\tvar data = arg[0];\n\n\t\t\t\t\t_this13.patch = (arg[2].Allow || arg[2].allow || \"\").indexOf(\"PATCH\") > -1;\n\n\t\t\t\t\tif (_this13.source) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t_this13.source.split(\".\").forEach(function (i) {\n\t\t\t\t\t\t\t\tdata = data[i];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn defer.reject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clear) {\n\t\t\t\t\t\t_this13.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\t_this13.batch(data, \"set\").then(defer.resolve, defer.reject);\n\t\t\t\t}, function (e) {\n\t\t\t\t\tdefer.reject(e[0] || e);\n\t\t\t\t});\n\n\t\t\t\treturn defer.promise;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toArray\",\n\t\t\tvalue: function toArray(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar key = this.key,\n\t\t\t\t fn = undefined,\n\t\t\t\t result = undefined;\n\n\t\t\t\tif (data) {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\tvar obj = clone(b[1]);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(b[0]);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ta.push(obj);\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (a, b) {\n\t\t\t\t\t\t\t\ta.push(clone(b[1]));\n\n\t\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = data.reduce(fn, []);\n\t\t\t\t} else {\n\t\t\t\t\tfn = (function () {\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\treturn function (val, id) {\n\t\t\t\t\t\t\t\tvar obj = clone(val);\n\n\t\t\t\t\t\t\t\tif (obj[key] === undefined) {\n\t\t\t\t\t\t\t\t\tobj[key] = clone(id);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresult.push(obj);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function (val) {\n\t\t\t\t\t\t\t\tresult.push(clone(val));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tresult = [];\n\t\t\t\t\tthis.forEach(fn);\n\t\t\t\t}\n\n\t\t\t\treturn frozen ? Object.freeze(result) : result;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"toObject\",\n\t\t\tvalue: function toObject(data) {\n\t\t\t\tvar frozen = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n\t\t\t\tvar func = undefined;\n\n\t\t\t\tif (frozen) {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfunc = function (arg) {\n\t\t\t\t\t\treturn clone(arg);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn func(!data ? toObjekt(this) : data.reduce(function (a, b) {\n\t\t\t\t\ta[b[0]] = b[1];\n\n\t\t\t\t\treturn a;\n\t\t\t\t}, {}));\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"transform\",\n\t\t\tvalue: function transform(input, fn) {\n\t\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unload\",\n\t\t\tvalue: function unload() {\n\t\t\t\tvar _this14 = this;\n\n\t\t\t\tvar type = arguments.length <= 0 || arguments[0] === undefined ? \"mongo\" : arguments[0];\n\t\t\t\tvar key = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];\n\n\t\t\t\tvar id = key !== undefined ? key : this.id;\n\n\t\t\t\treturn this.cmd(type, \"remove\", key).then(function (arg) {\n\t\t\t\t\tif (_this14.logging) {\n\t\t\t\t\t\tconsole.log(\"Unloaded\", id, \"from\", type, \"persistent storage\");\n\t\t\t\t\t}\n\n\t\t\t\t\treturn arg;\n\t\t\t\t}, function (e) {\n\t\t\t\t\tif (_this14.logging) {\n\t\t\t\t\t\tconsole.error(\"Error unloading\", id, \"from\", type, \"persistent storage:\", e.message || e.stack || e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"unregister\",\n\t\t\tvalue: function unregister(key) {\n\t\t\t\tdelete adapter[key];\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"values\",\n\t\t\tvalue: function values() {\n\t\t\t\treturn this.data.values();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"useWorker\",\n\t\t\tvalue: function useWorker(defer) {\n\t\t\t\tvar obj = undefined;\n\n\t\t\t\tif (this.worker) {\n\t\t\t\t\tobj = new Worker(this.worker);\n\t\t\t\t\tobj.onerror = function (err) {\n\t\t\t\t\t\tdefer.reject(err);\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\n\t\t\t\t\tobj.onmessage = function (ev) {\n\t\t\t\t\t\tdefer.resolve(JSON.parse(ev.data));\n\t\t\t\t\t\tobj.terminate();\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tdefer.reject(new Error(webWorkerError));\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Haro;\n\t})();\n\n\tfunction factory() {\n\t\tvar data = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\t\tvar config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\tvar indexes = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\n\t\tvar obj = new Haro(data, config, indexes),\n\t\t functions = undefined;\n\n\t\tif (webWorker) {\n\t\t\tfunctions = [createIndexes.toString(), keyIndex.toString(), setIndexValue.toString(), setIndex.toString(), cast.toString(), \"onmessage = \" + onmessage.toString() + \";\"];\n\n\t\t\ttry {\n\t\t\t\tobj.worker = global.URL.createObjectURL(blob(functions.join(\"\\n\")));\n\t\t\t} catch (e) {\n\t\t\t\tobj.worker = null;\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\tfactory.transform = cast;\n\tfactory.version = \"1.7.1\";\n\n\t// Node, AMD & window supported\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = factory;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn factory;\n\t\t});\n\t} else {\n\t\tglobal.haro = factory;\n\t}\n})(typeof global !== \"undefined\" ? global : window);\n"]} \ No newline at end of file diff --git a/package.json b/package.json index cee8b04..f2df827 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "1.7.0", + "version": "1.7.1", "description": "Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples", "main": "lib/haro.js", "scripts": {