From c5a7614a56205be9c195ff2fea09c7cd0f0fde08 Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Thu, 11 Oct 2018 21:32:02 -0400 Subject: [PATCH] Setting `content-type` header on outbound requests --- lib/haro.js | 9 +++++---- lib/haro.min.js | 4 ++-- lib/haro.min.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/haro.js | 5 +++-- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/haro.js b/lib/haro.js index 5f4c9af..bdde29f 100644 --- a/lib/haro.js +++ b/lib/haro.js @@ -4,7 +4,7 @@ * @author Jason Mulligan * @copyright 2018 * @license BSD-3-Clause - * @version 4.3.4 + * @version 4.3.5 */ "use strict"; @@ -995,12 +995,13 @@ } try { - result = await this.request(uri, {method: "patch", body: JSON.stringify(body, null, 0)}); + result = await this.request(uri, {method: "patch", headers: {"content-type": "application/json-patch+json"}, body: JSON.stringify(body, null, 0)}); } catch (e) { if (e[1] === 405) { this.patch = false; result = await this.request(!data ? concatURI(this.uri, key) : uri, { method: method, + headers: {"content-type": "application/json"}, body: JSON.stringify(data, null, 0) }); } else { @@ -1008,7 +1009,7 @@ } } } else { - result = await this.request(uri, {method: method, body: JSON.stringify(data, null, 0)}); + result = await this.request(uri, {method: method, headers: {"content-type": "application/json"}, body: JSON.stringify(data, null, 0)}); } return result; @@ -1085,7 +1086,7 @@ } factory.transform = cast; - factory.version = "4.3.4"; + factory.version = "4.3.5"; // Node, AMD & window supported if (typeof exports !== "undefined") { diff --git a/lib/haro.min.js b/lib/haro.min.js index 1df4b98..0455400 100644 --- a/lib/haro.min.js +++ b/lib/haro.min.js @@ -1,6 +1,6 @@ /* 2018 Jason Mulligan - @version 4.3.4 + @version 4.3.5 */ -"use strict";(function(a){function b(c,a){return a in c}function d(a,b){for(const c of a.entries())b(c[1],c[0]);return a}function c(a){let b;switch(!0){case a instanceof w:b={},a.forEach((a,d)=>{b[d]=c(a)});break;case a instanceof y:b=Array.from(a);break;case Array.isArray(a):b=new y(a);break;case a instanceof Object:b=new w(Object.keys(a).map(b=>[b,c(a[b])]));break;default:b=a;}return b}function e(a){return new z([a],{type:"application/javascript"})}function f(a){return JSON.parse(JSON.stringify(a,null,0))}function g(a,b){return a.replace(r.querystring,"").replace(r.endslash,"")+(b?"/"+b:"")}function h(a,b,c,d){let e;return e=-1c.localeCompare(a)).map(a=>b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()).join(c):b[a],e}function i(a,b,c,d,e,f){a.forEach(a=>{const g=b.get(a),i=h(a,e,c,f);if(g.has(i)){const a=g.get(i);a.delete(d),0===a.size&&g.delete(i)}})}function j(a,c,e,f,g){const j={};return d(c,a=>{j[a]={}}),d(a,a=>{const d=a[e];void 0!==d&&c.forEach(c=>{const e=h(c,a,f,g);b(j[c],e)||(j[c][e]=[]),j[c][e].push(d)})}),j}function k(a,b){a instanceof Object?d(Object.keys(a),c=>b.call(a,a[c],c)):d(a,b)}function l(c,e){return c instanceof Object&&e instanceof Object?d(Object.keys(e),a=>{c[a]=c[a]instanceof Object&&e[a]instanceof Object?l(c[a],e[a]):Array.isArray(c[a])&&Array.isArray(e[a])?c[a].concat(e[a]):e[a]}):Array.isArray(c)&&Array.isArray(e)?c=c.concat(e):c=e,c}function m(c,e,a,b,g,h="inner"){function i(a,e,c,f=!1,h=!1){const n=Object.keys(e[0]),o=h?(a,c)=>a[b]===c[g]:(a,c)=>a[g]===c[b];d(a,a=>{const b={},h=e.filter(b=>o(b,a));let i=!0;return 1k(a,(a,e)=>{b[c[d]+"_"+e]=a})):f&&(k(a,(a,d)=>{b[c[0]+"_"+d]=a}),d(n,a=>{b[c[1]+"_"+a]=null})),i&&0{d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),k(b,(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 o(){return(0|65536*(Math.random()+1)).toString(16).substring(1)}function p(a,b,c,e,f,g,j){d(g?[g]:a,a=>{const d=h(a,f,c,j);let g;void 0!==d&&null!==d&&(g=b.get(a),!g.has(d)&&g.set(d,new y),g.get(d).add(e))})}function q(a,b=!0){const c={};return a.forEach((a,d)=>{const e=a;b&&Object.freeze(e),c[f(d)]=e}),b&&Object.freeze(c),c}function s(){return o()+o()+"-"+o()+"-4"+o().substr(0,3)+"-"+B[Math.floor(4*Math.random())]+o().substr(0,3)+"-"+o()+o()+o()}function t(b=null,c={}){const d=new G(c);return C&&(d.worker=!1===u?a.URL.createObjectURL(e(F)):new Function(F)),Array.isArray(b)&&d.batch(b,"set"),d}const u="undefined"!=typeof process&&"function"==typeof process.nextTick,v=a.Promise,w=a.Map,y=a.Set,x=a.fetch||(u?require("node-fetch"):void 0),z=a.Blob,A=a.Worker||(u?require("tiny-worker"):void 0),B=[8,9,"a","b"],r={querystring:/\?.*/,endslash:/\/$/,json:/^application\/json/},C="undefined"!=typeof A,D="Web Worker not supported",E={},F=[c.toString(),f.toString(),j.toString(),d.toString(),b.toString(),k.toString(),m.toString(),h.toString(),p.toString(),(!1===u?"":"self.")+"onmessage = "+function(a){const b=JSON.parse(a.data),c=b.cmd;let d;"index"===c&&(d=j(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=m(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}.toString()+";"].join("\n");class G{constructor({adapters:a={},config:b={},debounce:c=0,delimiter:d="|",id:e=s(),index:f=[],key:g="",logging:h=!0,patch:i=!1,pattern:j="\\s*|\\t*",source:k="",versioning:m=!1}={}){return this.adapters=a,this.data=new w,this.debounce=c,this.debounced=new w,this.delimiter=d,this.config={method:"get",credentials:"include",headers:{accept:"application/json","content-type":"application/json"}},this.id=e,this.index=f,this.indexes=new w,this.key=g,this.logging=h,this.patch=i,this.pattern=j,this.source=k,this.size=this.total=0,this.uri="",this.worker=null,this.versions=new w,this.versioning=m,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),1this.del(a,!0,c):a=>this.set(null,a,!0,!0,c);d=await v.all(a.map(e)),this.onbatch(b,d),this.log(`Batch successful on ${this.id}`)}catch(a){throw this.onerror("batch",a),this.log(`Batch failure on ${this.id}`),a}return d}beforeBatch(){}beforeClear(){}beforeDelete(){}beforeRequest(){}beforeSet(){}beforeSync(){}clear(){return this.beforeClear(),this.size=this.total=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.log(`Cleared ${this.id}`),this}async cmd(a,...b){if(void 0===this.adapters[a]||void 0===E[a])throw new Error(`${a} not configured for persistent storage`);return await E[a].apply(this,[this,...b])}crawl(a){let b=f(a);return d((this.source||"").split("."),a=>{b=b[a]}),b||a}del(a,b=!1,c=!1,d=!1){if(!1===this.has(a))throw new Error("Record not found");const e=this.get(a,!0);return this.exec(async()=>{this.beforeDelete(a,b,c,d),i(this.index,this.indexes,this.delimiter,a,e,this.pattern),this.data.delete(a),--this.total,this.size=this.total},async()=>{this.ondelete(a,b,d,c),this.versioning&&this.versions.delete(a),c||(this.storage("remove",a).then(b=>{b&&this.log(`Deleted ${a} from persistent storage`)},b=>this.log(`Error deleting ${a} from persistent storage: ${b.message||b.stack||b}`,"error")),!b&&!d&&this.uri&&(this.debounced.has(a)&&clearTimeout(this.debounced.get(a)),this.debounced.set(a,setTimeout(async()=>{this.debounced.delete(a);try{await this.transmit(a,null,e,!1,"delete")}catch(b){this.log(b.stack||b.message||b,"error");try{await this.set(a,e,!0,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}}},this.debounce))))},a=>{throw this.onerror("delete",a),a})}dump(a="records"){return"records"===a?this.toArray(null,!1):this.transform(this.indexes)}entries(){return this.data.entries()}async exec(a,b,c){let d;try{const c=await a();d=await b(c)}catch(a){c(a)}return d}find(a,b=!1){const c=Object.keys(a).sort((c,a)=>c.localeCompare(a)).join(this.delimiter),d=h(c,a,this.delimiter,this.pattern),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new y).forEach(a=>e.push(this.get(a,b))),b?e:this.list(...e)}filter(b,c=!1){const a=this.reduce((d,a,e,f)=>(!0===b.call(f,a)&&d.push(this.get(e,c)),d),[]);return c?a:this.list(...a)}forEach(a,b){return this.data.forEach((b,c)=>a(f(b),f(c)),b||this.data),this}get(a,b=!1){const c=f(this.data.get(a)||null);return c&&!b?this.list(a,c):c}has(a,b){return(b||this.data).has(a)}async join(a,b,c="inner",d=[]){let e;if(!(0this.get(a,c));return c?d:this.list(...d)}list(...a){return Object.freeze(a.map(a=>Object.freeze(a)))}async load(a="mongo",b=void 0){const c=void 0===b,d=c?this.id:b;let e;c&&this.clear();try{const f=await this.cmd(a,"get",b);e=c?this.batch(f,"set",!0):this.set(b,f,!0,!0,!0),this.log(`Loaded ${d} from ${a} persistent storage`)}catch(b){throw this.log(`Error loading ${d} from ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return e}log(a="",b="log"){this.logging&&console[b](`haro: ${a}`)}map(a,b=!1){const c=[];return this.forEach((b,d)=>c.push(a(b,d))),b?c:this.list(...c)}async offload(a,b="index",c=this.index){return new v((d,e)=>{if(this.worker){const f=this.useWorker(d,e);let g;"index"===b?g={cmd:b,index:c,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}:"join"===b&&(g={cmd:b,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),f.postMessage(JSON.stringify(g,null,0))}else e(new Error(D))})}onbatch(){}onclear(){}ondelete(){}onerror(){}onrequest(a){return a}onset(){}onsync(){}async override(a,b="records",c=void 0){if("indexes"===b)this.indexes=this.transform(a,c);else if("records"===b){const b=""===this.key?()=>s():a=>a[this.key]||s();this.indexes.clear(),this.data=new w(a.map(a=>[b(a),a])),this.size=this.total=this.data.size}else throw new Error("Invalid type");return!0}reduce(b,c,d=!1){let e=c||this.data.keys().next().value;return this.forEach((a,c)=>{e=b(e,a,c,this,d)},this),e}register(a,b){return E[a]=b,this}reindex(a){const b=a?[a]:this.index;return a&&!1===this.index.includes(a)&&this.index.push(a),d(b,a=>this.indexes.set(a,new w)),this.forEach((a,c)=>d(b,b=>p(this.index,this.indexes,this.delimiter,c,a,b,this.pattern))),this}async request(a,b={}){return new v(async(c,g)=>{const e=l(f(this.config),b),h={};e.method=e.method.toUpperCase(),"DELETE"===e.method&&delete e.body,this.beforeRequest(...[a,e]);try{const b=await x(a,e),f=b.ok,i=b.status;if(b.headers._headers)d(Object.keys(b.headers._headers),a=>{h[a]=b.headers._headers[a].join(", ")});else for(const a of b.headers.entries())h[a[0]]=a[1];const j=await b[r.json.test(h["content-type"]||"")?"json":"text"](),k=f?c:g;k(this.list(this.onrequest(j,i,h),i,h))}catch(a){g(this.list(a.message,0,{}))}})}async save(a="mongo"){let b;try{b=await this.cmd(a,"set"),this.log(`Saved ${this.id} to ${a} persistent storage`)}catch(b){throw this.log(`Error saving ${this.id} to ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return b}search(a,b,c=!1){const e=new w,f=a&&"function"==typeof a.test;return a&&d(b?Array.isArray(b)?b:[b]:this.index,b=>{let d=this.indexes.get(b);d&&d.forEach((d,g)=>{switch(!0){case"function"==typeof a&&a(g,b):case f&&a.test(Array.isArray(g)?g.join(", "):g):case g===a:d.forEach(a=>{!e.has(a)&&this.has(a)&&e.set(a,this.get(a,c))});break;default:}})}),c?Array.from(e.values()):this.list(...Array.from(e.values()))}async set(a,b,c=!1,d=!1,e=!1,g=!1){let h,j,k=f(b);return this.exec(async()=>((void 0===a||null===a)&&(a=this.key&&void 0!==k[this.key]?k[this.key]:s()),this.beforeSet(a,b,c,d,e,g),this.data.has(a)?(j=this.get(a,!0),i(this.index,this.indexes,this.delimiter,a,j,this.pattern),h="put",this.versioning&&this.versions.get(a).add(Object.freeze(f(j))),!1===d&&(k=l(f(j),k))):(++this.total,this.size=this.total,h="post",this.versioning&&this.versions.set(a,new y)),this.data.set(a,k),p(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),this.get(a)),async b=>(this.onset(b,c,g,e),e||(this.storage("set",a,k).then(b=>{b&&this.log(`Saved ${a} to persistent storage`)},b=>this.log(`Error saving ${a} to persistent storage: ${b.message||b.stack||b}`,"error")),!c&&!g&&this.uri&&(this.debounced.has(a)&&clearTimeout(this.debounced.get(a)),this.debounced.set(a,setTimeout(async()=>{this.debounced.delete(a);try{if(await this.transmit(a,k,j,d,h),j)try{await this.set(a,j,c,!0,e,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}else try{await this.del(a,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}}catch(a){this.log(a.stack||a.message||a,"error")}},this.debounce)))),b),a=>{throw this.onerror("set",a),a})}async setUri(a,b=!1){return this.uri=a,""===this.uri?[]:await this.sync(b)}sort(a,b=!0){return b?Object.freeze(this.limit(0,this.total,!0).sort(a).map(a=>Object.freeze(a))):this.limit(0,this.total,!0).sort(a)}sortBy(a,b=!1){const c=[],e=[];let f;return this.indexes.has(a)||this.reindex(a),f=this.indexes.get(a),f.forEach((a,b)=>e.push(b)),d(e.sort(),a=>f.get(a).forEach(a=>c.push(this.get(a,b)))),b?c:this.list(...c)}async storage(...a){let b;try{const c=Object.keys(this.adapters).map(async b=>await this.cmd.apply(this,[b,...a]));0b?a[1]:f(a[1])):(c=this.limit(0,this.total,!0),b&&d(c,a=>Object.freeze(a))),b?Object.freeze(c):c}toObject(a,c=!0){const b=a?a.reduce((d,a)=>{const b=f(a[1]);return c&&Object.freeze(b),d[a[0]]=b,d},{}):q(this,c);return c?Object.freeze(b):b}transform(a,b){return"function"==typeof b?b(a):c(a)}async transmit(a,b,c,d=!1,f="post"){const h=g(this.uri,b?a:null);let e,i;if(this.patch){e=void 0===b?[{op:"remove",path:"/",value:a}]:void 0===c?[{op:"add",path:"/",value:b}]:d?[{op:"replace",path:"/",value:b}]:n(c,b,this.key);try{i=await this.request(h,{method:"patch",body:JSON.stringify(e,null,0)})}catch(c){if(405===c[1])this.patch=!1,i=await this.request(b?h:g(this.uri,a),{method:f,body:JSON.stringify(b,null,0)});else throw c}}else i=await this.request(h,{method:f,body:JSON.stringify(b,null,0)});return i}async unload(a="mongo",b=void 0){const c=void 0===b?this.id:b;let d;try{d=await this.cmd(a,"remove",b),this.log(`Unloaded ${c} from ${a} persistent storage`)}catch(b){throw this.log(`Error unloading ${c} from ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return d}unregister(a){delete E[a]}values(){return this.data.values()}useWorker(a,b){let c;return this.worker?(c=new A(this.worker),c.onerror=a=>{b(a),c.terminate()},c.onmessage=b=>{a(JSON.parse(b.data)),c.terminate()}):b(new Error(D)),c}where(a,b=!1){const c=this.index.filter(b=>b in a);return 0{const c="string"==typeof a[b]?`'${a[b]}'`:a[b];return`Array.isArray(a['${b}']) ? a['${b}'].includes(${c}) : a['${b}'] === ${c}`}).join(") && (")});`),b):[]}}t.transform=c,t.version="4.3.4","undefined"==typeof exports?"function"==typeof define&&void 0!==define.amd?define(()=>t):a.haro=t:module.exports=t})("undefined"==typeof window?global:window); +"use strict";(function(a){function b(c,a){return a in c}function d(a,b){for(const c of a.entries())b(c[1],c[0]);return a}function c(a){let b;switch(!0){case a instanceof w:b={},a.forEach((a,d)=>{b[d]=c(a)});break;case a instanceof y:b=Array.from(a);break;case Array.isArray(a):b=new y(a);break;case a instanceof Object:b=new w(Object.keys(a).map(b=>[b,c(a[b])]));break;default:b=a;}return b}function e(a){return new z([a],{type:"application/javascript"})}function f(a){return JSON.parse(JSON.stringify(a,null,0))}function g(a,b){return a.replace(r.querystring,"").replace(r.endslash,"")+(b?"/"+b:"")}function h(a,b,c,d){let e;return e=-1c.localeCompare(a)).map(a=>b[a].toString().replace(new RegExp(d,"g"),"").toLowerCase()).join(c):b[a],e}function i(a,b,c,d,e,f){a.forEach(a=>{const g=b.get(a),i=h(a,e,c,f);if(g.has(i)){const a=g.get(i);a.delete(d),0===a.size&&g.delete(i)}})}function j(a,c,e,f,g){const j={};return d(c,a=>{j[a]={}}),d(a,a=>{const d=a[e];void 0!==d&&c.forEach(c=>{const e=h(c,a,f,g);b(j[c],e)||(j[c][e]=[]),j[c][e].push(d)})}),j}function k(a,b){a instanceof Object?d(Object.keys(a),c=>b.call(a,a[c],c)):d(a,b)}function l(c,e){return c instanceof Object&&e instanceof Object?d(Object.keys(e),a=>{c[a]=c[a]instanceof Object&&e[a]instanceof Object?l(c[a],e[a]):Array.isArray(c[a])&&Array.isArray(e[a])?c[a].concat(e[a]):e[a]}):Array.isArray(c)&&Array.isArray(e)?c=c.concat(e):c=e,c}function m(c,e,a,b,g,h="inner"){function i(a,e,c,f=!1,h=!1){const n=Object.keys(e[0]),o=h?(a,c)=>a[b]===c[g]:(a,c)=>a[g]===c[b];d(a,a=>{const b={},h=e.filter(b=>o(b,a));let i=!0;return 1k(a,(a,e)=>{b[c[d]+"_"+e]=a})):f&&(k(a,(a,d)=>{b[c[0]+"_"+d]=a}),d(n,a=>{b[c[1]+"_"+a]=null})),i&&0{d!==c&&void 0===b[d]&&e.push({op:"remove",path:"/"+d})}),k(b,(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 o(){return(0|65536*(Math.random()+1)).toString(16).substring(1)}function p(a,b,c,e,f,g,j){d(g?[g]:a,a=>{const d=h(a,f,c,j);let g;void 0!==d&&null!==d&&(g=b.get(a),!g.has(d)&&g.set(d,new y),g.get(d).add(e))})}function q(a,b=!0){const c={};return a.forEach((a,d)=>{const e=a;b&&Object.freeze(e),c[f(d)]=e}),b&&Object.freeze(c),c}function s(){return o()+o()+"-"+o()+"-4"+o().substr(0,3)+"-"+B[Math.floor(4*Math.random())]+o().substr(0,3)+"-"+o()+o()+o()}function t(b=null,c={}){const d=new G(c);return C&&(d.worker=!1===u?a.URL.createObjectURL(e(F)):new Function(F)),Array.isArray(b)&&d.batch(b,"set"),d}const u="undefined"!=typeof process&&"function"==typeof process.nextTick,v=a.Promise,w=a.Map,y=a.Set,x=a.fetch||(u?require("node-fetch"):void 0),z=a.Blob,A=a.Worker||(u?require("tiny-worker"):void 0),B=[8,9,"a","b"],r={querystring:/\?.*/,endslash:/\/$/,json:/^application\/json/},C="undefined"!=typeof A,D="Web Worker not supported",E={},F=[c.toString(),f.toString(),j.toString(),d.toString(),b.toString(),k.toString(),m.toString(),h.toString(),p.toString(),(!1===u?"":"self.")+"onmessage = "+function(a){const b=JSON.parse(a.data),c=b.cmd;let d;"index"===c&&(d=j(b.records,b.index,b.key,b.delimiter,b.pattern)),"join"===c&&(d=m(b.ids,b.records[0],b.records[1],b.key,b.on,b.type)),postMessage(JSON.stringify(d))}.toString()+";"].join("\n");class G{constructor({adapters:a={},config:b={},debounce:c=0,delimiter:d="|",id:e=s(),index:f=[],key:g="",logging:h=!0,patch:i=!1,pattern:j="\\s*|\\t*",source:k="",versioning:m=!1}={}){return this.adapters=a,this.data=new w,this.debounce=c,this.debounced=new w,this.delimiter=d,this.config={method:"get",credentials:"include",headers:{accept:"application/json","content-type":"application/json"}},this.id=e,this.index=f,this.indexes=new w,this.key=g,this.logging=h,this.patch=i,this.pattern=j,this.source=k,this.size=this.total=0,this.uri="",this.worker=null,this.versions=new w,this.versioning=m,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),1this.del(a,!0,c):a=>this.set(null,a,!0,!0,c);d=await v.all(a.map(e)),this.onbatch(b,d),this.log(`Batch successful on ${this.id}`)}catch(a){throw this.onerror("batch",a),this.log(`Batch failure on ${this.id}`),a}return d}beforeBatch(){}beforeClear(){}beforeDelete(){}beforeRequest(){}beforeSet(){}beforeSync(){}clear(){return this.beforeClear(),this.size=this.total=0,this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this.log(`Cleared ${this.id}`),this}async cmd(a,...b){if(void 0===this.adapters[a]||void 0===E[a])throw new Error(`${a} not configured for persistent storage`);return await E[a].apply(this,[this,...b])}crawl(a){let b=f(a);return d((this.source||"").split("."),a=>{b=b[a]}),b||a}del(a,b=!1,c=!1,d=!1){if(!1===this.has(a))throw new Error("Record not found");const e=this.get(a,!0);return this.exec(async()=>{this.beforeDelete(a,b,c,d),i(this.index,this.indexes,this.delimiter,a,e,this.pattern),this.data.delete(a),--this.total,this.size=this.total},async()=>{this.ondelete(a,b,d,c),this.versioning&&this.versions.delete(a),c||(this.storage("remove",a).then(b=>{b&&this.log(`Deleted ${a} from persistent storage`)},b=>this.log(`Error deleting ${a} from persistent storage: ${b.message||b.stack||b}`,"error")),!b&&!d&&this.uri&&(this.debounced.has(a)&&clearTimeout(this.debounced.get(a)),this.debounced.set(a,setTimeout(async()=>{this.debounced.delete(a);try{await this.transmit(a,null,e,!1,"delete")}catch(b){this.log(b.stack||b.message||b,"error");try{await this.set(a,e,!0,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}}},this.debounce))))},a=>{throw this.onerror("delete",a),a})}dump(a="records"){return"records"===a?this.toArray(null,!1):this.transform(this.indexes)}entries(){return this.data.entries()}async exec(a,b,c){let d;try{const c=await a();d=await b(c)}catch(a){c(a)}return d}find(a,b=!1){const c=Object.keys(a).sort((c,a)=>c.localeCompare(a)).join(this.delimiter),d=h(c,a,this.delimiter,this.pattern),e=[];return this.indexes.has(c)&&(this.indexes.get(c).get(d)||new y).forEach(a=>e.push(this.get(a,b))),b?e:this.list(...e)}filter(b,c=!1){const a=this.reduce((d,a,e,f)=>(!0===b.call(f,a)&&d.push(this.get(e,c)),d),[]);return c?a:this.list(...a)}forEach(a,b){return this.data.forEach((b,c)=>a(f(b),f(c)),b||this.data),this}get(a,b=!1){const c=f(this.data.get(a)||null);return c&&!b?this.list(a,c):c}has(a,b){return(b||this.data).has(a)}async join(a,b,c="inner",d=[]){let e;if(!(0this.get(a,c));return c?d:this.list(...d)}list(...a){return Object.freeze(a.map(a=>Object.freeze(a)))}async load(a="mongo",b=void 0){const c=void 0===b,d=c?this.id:b;let e;c&&this.clear();try{const f=await this.cmd(a,"get",b);e=c?this.batch(f,"set",!0):this.set(b,f,!0,!0,!0),this.log(`Loaded ${d} from ${a} persistent storage`)}catch(b){throw this.log(`Error loading ${d} from ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return e}log(a="",b="log"){this.logging&&console[b](`haro: ${a}`)}map(a,b=!1){const c=[];return this.forEach((b,d)=>c.push(a(b,d))),b?c:this.list(...c)}async offload(a,b="index",c=this.index){return new v((d,e)=>{if(this.worker){const f=this.useWorker(d,e);let g;"index"===b?g={cmd:b,index:c,records:a,key:this.key,delimiter:this.delimiter,pattern:this.pattern}:"join"===b&&(g={cmd:b,ids:a[0],records:[a[1],a[2]],key:a[3],on:a[4],type:a[5]}),f.postMessage(JSON.stringify(g,null,0))}else e(new Error(D))})}onbatch(){}onclear(){}ondelete(){}onerror(){}onrequest(a){return a}onset(){}onsync(){}async override(a,b="records",c=void 0){if("indexes"===b)this.indexes=this.transform(a,c);else if("records"===b){const b=""===this.key?()=>s():a=>a[this.key]||s();this.indexes.clear(),this.data=new w(a.map(a=>[b(a),a])),this.size=this.total=this.data.size}else throw new Error("Invalid type");return!0}reduce(b,c,d=!1){let e=c||this.data.keys().next().value;return this.forEach((a,c)=>{e=b(e,a,c,this,d)},this),e}register(a,b){return E[a]=b,this}reindex(a){const b=a?[a]:this.index;return a&&!1===this.index.includes(a)&&this.index.push(a),d(b,a=>this.indexes.set(a,new w)),this.forEach((a,c)=>d(b,b=>p(this.index,this.indexes,this.delimiter,c,a,b,this.pattern))),this}async request(a,b={}){return new v(async(c,g)=>{const e=l(f(this.config),b),h={};e.method=e.method.toUpperCase(),"DELETE"===e.method&&delete e.body,this.beforeRequest(...[a,e]);try{const b=await x(a,e),f=b.ok,i=b.status;if(b.headers._headers)d(Object.keys(b.headers._headers),a=>{h[a]=b.headers._headers[a].join(", ")});else for(const a of b.headers.entries())h[a[0]]=a[1];const j=await b[r.json.test(h["content-type"]||"")?"json":"text"](),k=f?c:g;k(this.list(this.onrequest(j,i,h),i,h))}catch(a){g(this.list(a.message,0,{}))}})}async save(a="mongo"){let b;try{b=await this.cmd(a,"set"),this.log(`Saved ${this.id} to ${a} persistent storage`)}catch(b){throw this.log(`Error saving ${this.id} to ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return b}search(a,b,c=!1){const e=new w,f=a&&"function"==typeof a.test;return a&&d(b?Array.isArray(b)?b:[b]:this.index,b=>{let d=this.indexes.get(b);d&&d.forEach((d,g)=>{switch(!0){case"function"==typeof a&&a(g,b):case f&&a.test(Array.isArray(g)?g.join(", "):g):case g===a:d.forEach(a=>{!e.has(a)&&this.has(a)&&e.set(a,this.get(a,c))});break;default:}})}),c?Array.from(e.values()):this.list(...Array.from(e.values()))}async set(a,b,c=!1,d=!1,e=!1,g=!1){let h,j,k=f(b);return this.exec(async()=>((void 0===a||null===a)&&(a=this.key&&void 0!==k[this.key]?k[this.key]:s()),this.beforeSet(a,b,c,d,e,g),this.data.has(a)?(j=this.get(a,!0),i(this.index,this.indexes,this.delimiter,a,j,this.pattern),h="put",this.versioning&&this.versions.get(a).add(Object.freeze(f(j))),!1===d&&(k=l(f(j),k))):(++this.total,this.size=this.total,h="post",this.versioning&&this.versions.set(a,new y)),this.data.set(a,k),p(this.index,this.indexes,this.delimiter,a,k,null,this.pattern),this.get(a)),async b=>(this.onset(b,c,g,e),e||(this.storage("set",a,k).then(b=>{b&&this.log(`Saved ${a} to persistent storage`)},b=>this.log(`Error saving ${a} to persistent storage: ${b.message||b.stack||b}`,"error")),!c&&!g&&this.uri&&(this.debounced.has(a)&&clearTimeout(this.debounced.get(a)),this.debounced.set(a,setTimeout(async()=>{this.debounced.delete(a);try{if(await this.transmit(a,k,j,d,h),j)try{await this.set(a,j,c,!0,e,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}else try{await this.del(a,!0),this.log(`Reverted ${a}`)}catch(b){this.log(`Failed to revert ${a}`)}}catch(a){this.log(a.stack||a.message||a,"error")}},this.debounce)))),b),a=>{throw this.onerror("set",a),a})}async setUri(a,b=!1){return this.uri=a,""===this.uri?[]:await this.sync(b)}sort(a,b=!0){return b?Object.freeze(this.limit(0,this.total,!0).sort(a).map(a=>Object.freeze(a))):this.limit(0,this.total,!0).sort(a)}sortBy(a,b=!1){const c=[],e=[];let f;return this.indexes.has(a)||this.reindex(a),f=this.indexes.get(a),f.forEach((a,b)=>e.push(b)),d(e.sort(),a=>f.get(a).forEach(a=>c.push(this.get(a,b)))),b?c:this.list(...c)}async storage(...a){let b;try{const c=Object.keys(this.adapters).map(async b=>await this.cmd.apply(this,[b,...a]));0b?a[1]:f(a[1])):(c=this.limit(0,this.total,!0),b&&d(c,a=>Object.freeze(a))),b?Object.freeze(c):c}toObject(a,c=!0){const b=a?a.reduce((d,a)=>{const b=f(a[1]);return c&&Object.freeze(b),d[a[0]]=b,d},{}):q(this,c);return c?Object.freeze(b):b}transform(a,b){return"function"==typeof b?b(a):c(a)}async transmit(a,b,c,d=!1,f="post"){const h=g(this.uri,b?a:null);let e,i;if(this.patch){e=void 0===b?[{op:"remove",path:"/",value:a}]:void 0===c?[{op:"add",path:"/",value:b}]:d?[{op:"replace",path:"/",value:b}]:n(c,b,this.key);try{i=await this.request(h,{method:"patch",headers:{"content-type":"application/json-patch+json"},body:JSON.stringify(e,null,0)})}catch(c){if(405===c[1])this.patch=!1,i=await this.request(b?h:g(this.uri,a),{method:f,headers:{"content-type":"application/json"},body:JSON.stringify(b,null,0)});else throw c}}else i=await this.request(h,{method:f,headers:{"content-type":"application/json"},body:JSON.stringify(b,null,0)});return i}async unload(a="mongo",b=void 0){const c=void 0===b?this.id:b;let d;try{d=await this.cmd(a,"remove",b),this.log(`Unloaded ${c} from ${a} persistent storage`)}catch(b){throw this.log(`Error unloading ${c} from ${a} persistent storage: ${b.message||b.stack||b}`,"error"),b}return d}unregister(a){delete E[a]}values(){return this.data.values()}useWorker(a,b){let c;return this.worker?(c=new A(this.worker),c.onerror=a=>{b(a),c.terminate()},c.onmessage=b=>{a(JSON.parse(b.data)),c.terminate()}):b(new Error(D)),c}where(a,b=!1){const c=this.index.filter(b=>b in a);return 0{const c="string"==typeof a[b]?`'${a[b]}'`:a[b];return`Array.isArray(a['${b}']) ? a['${b}'].includes(${c}) : a['${b}'] === ${c}`}).join(") && (")});`),b):[]}}t.transform=c,t.version="4.3.5","undefined"==typeof exports?"function"==typeof define&&void 0!==define.amd?define(()=>t):a.haro=t:module.exports=t})("undefined"==typeof window?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 4e9988f..52174b3 100644 --- a/lib/haro.min.js.map +++ b/lib/haro.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["haro.js"],"names":["global","has","a","b","each","arr","fn","item","entries","cast","input","result","Map","forEach","value","key","Set","Array","from","isArray","Object","keys","map","i","blob","arg","Blob","type","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","push","iterate","obj","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","length","error","errorMsg","v","k","createPatch","ogdata","overwrite","op","path","s","Math","random","substring","setIndex","indice","lidx","set","add","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","webWorker","worker","URL","createObjectURL","functions","Function","batch","node","process","nextTick","Promise","fetch","require","Worker","json","webWorkerError","adapter","ev","cmd","postMessage","constructor","adapters","debounce","logging","patch","source","versioning","debounced","method","credentials","headers","accept","total","uri","versions","defineProperty","enumerable","reindex","args","lazyLoad","beforeBatch","del","all","onbatch","log","e","onerror","beforeClear","beforeDelete","beforeRequest","beforeSet","beforeSync","clear","onclear","Error","apply","crawl","retry","og","exec","ondelete","storage","then","success","message","stack","clearTimeout","setTimeout","transmit","err","dump","toArray","transform","first","second","handler","find","where","raw","list","reduce","ctx","other","offload","limit","offset","max","registry","slice","load","console","resolve","reject","useWorker","payload","onrequest","onset","onsync","override","datum","accumulator","next","register","indices","includes","request","cfg","toUpperCase","body","res","ok","status","_headers","pair","test","save","search","rgex","lset","values","setUri","sync","sortBy","deferreds","Allow","allow","toObject","unload","unregister","terminate","onmessage","predicate","version","exports","define","amd","haro","module","window"],"mappings":"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","file":"unknown","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2018\r\n * @license BSD-3-Clause\r\n * @version 4.3.4\r\n */\r\n\r\n\r\n(function (global) {\r\n\tconst node = typeof process !== \"undefined\" && typeof process.nextTick === \"function\",\r\n\t\tPromise = global.Promise,\r\n\t\tMap = global.Map,\r\n\t\tSet = global.Set,\r\n\t\tfetch = global.fetch || (node ? require(\"node-fetch\") : void 0),\r\n\t\tBlob = global.Blob,\r\n\t\tWorker = global.Worker || (node ? require(\"tiny-worker\") : void 0),\r\n\t\tr = [8, 9, \"a\", \"b\"],\r\n\t\tregex = {\r\n\t\t\tquerystring: /\\?.*/,\r\n\t\t\tendslash: /\\/$/,\r\n\t\t\tjson: /^application\\/json/\r\n\t\t},\r\n\t\twebWorker = typeof Worker !== \"undefined\",\r\n\t\twebWorkerError = \"Web Worker not supported\",\r\n\t\tadapter = {};\r\n\r\n\tfunction has (a, b) {\r\n\t\treturn b in a;\r\n\t}\r\n\r\n\tfunction each (arr, fn) {\r\n\t\tfor (const item of arr.entries()) {\r\n\t\t\tfn(item[1], item[0]);\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tfunction cast (input) {\r\n\t\tlet result;\r\n\r\n\t\tswitch (true) {\r\n\t\t\tcase input instanceof Map:\r\n\t\t\t\tresult = {};\r\n\t\t\t\tinput.forEach((value, key) => {\r\n\t\t\t\t\tresult[key] = cast(value);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase input instanceof Set:\r\n\t\t\t\tresult = Array.from(input);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Array.isArray(input):\r\n\t\t\t\tresult = new Set(input);\r\n\t\t\t\tbreak;\r\n\t\t\tcase input instanceof Object:\r\n\t\t\t\tresult = new Map(Object.keys(input).map(i => [i, cast(input[i])]));\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tresult = input;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction blob (arg) {\r\n\t\treturn new Blob([arg], {type: \"application/javascript\"});\r\n\t}\r\n\r\n\tfunction clone (arg) {\r\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\r\n\t}\r\n\r\n\tfunction concatURI (left, right) {\r\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\r\n\t}\r\n\r\n\tfunction keyIndex (key, data, delimiter, pattern) {\r\n\t\tlet result;\r\n\r\n\t\tif (key.indexOf(delimiter) > -1) {\r\n\t\t\tresult = key.split(delimiter).sort((a, b) => a.localeCompare(b)).map(i => data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase()).join(delimiter);\r\n\t\t} else {\r\n\t\t\tresult = data[key];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction delIndex (index, indexes, delimiter, key, data, pattern) {\r\n\t\tindex.forEach(i => {\r\n\t\t\tconst idx = indexes.get(i),\r\n\t\t\t\tvalue = keyIndex(i, data, delimiter, pattern);\r\n\r\n\t\t\tif (idx.has(value)) {\r\n\t\t\t\tconst o = idx.get(value);\r\n\r\n\t\t\t\to.delete(key);\r\n\r\n\t\t\t\tif (o.size === 0) {\r\n\t\t\t\t\tidx.delete(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction createIndexes (records, indexes, key, delimiter, pattern) {\r\n\t\tconst result = {};\r\n\r\n\t\teach(indexes, i => {\r\n\t\t\tresult[i] = {};\r\n\t\t});\r\n\r\n\t\teach(records, i => {\r\n\t\t\tconst lkey = i[key];\r\n\r\n\t\t\tif (lkey !== void 0) {\r\n\t\t\t\tindexes.forEach(index => {\r\n\t\t\t\t\tconst lindex = keyIndex(index, i, delimiter, pattern);\r\n\r\n\t\t\t\t\tif (!has(result[index], lindex)) {\r\n\t\t\t\t\t\tresult[index][lindex] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult[index][lindex].push(lkey);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction iterate (obj, fn) {\r\n\t\tif (obj instanceof Object) {\r\n\t\t\teach(Object.keys(obj), i => fn.call(obj, obj[i], i));\r\n\t\t} else {\r\n\t\t\teach(obj, fn);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction merge (a, b) {\r\n\t\tif (a instanceof Object && b instanceof Object) {\r\n\t\t\teach(Object.keys(b), i => {\r\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\ta[i] = b[i];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\t\ta = a.concat(b);\r\n\t\t} else {\r\n\t\t\ta = b;\r\n\t\t}\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\tfunction joinData (id, a, b, key, on, type = \"inner\") {\r\n\t\tconst result = [];\r\n\t\tlet errorMsg = \"More than one record found on \";\r\n\r\n\t\tlet error = false;\r\n\r\n\t\tfunction join (left, right, ids, include = false, reverse = false) {\r\n\t\t\tconst keys = Object.keys(right[0]),\r\n\t\t\t\tfn = !reverse ? (x, i) => x[on] === i[key] : (x, i) => x[key] === i[on];\r\n\r\n\t\t\teach(left, i => {\r\n\t\t\t\tconst comp = {},\r\n\t\t\t\t\tc = right.filter(x => fn(x, i));\r\n\r\n\t\t\t\tlet valid = true;\r\n\r\n\t\t\t\tif (c.length > 1) {\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t\terrorMsg += i[on];\r\n\t\t\t\t\tvalid = false;\r\n\t\t\t\t} else if (c.length === 1) {\r\n\t\t\t\t\teach([i, c[0]], (x, idx) => iterate(x, (v, k) => {\r\n\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\r\n\t\t\t\t\t}));\r\n\t\t\t\t} else if (include) {\r\n\t\t\t\t\titerate(i, (v, k) => {\r\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\teach(keys, k => {\r\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\r\n\t\t\t\t\tresult.push(comp);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn valid;\r\n\t\t\t}, true);\r\n\t\t}\r\n\r\n\t\tif (type === \"inner\") {\r\n\t\t\tjoin(a, b, id);\r\n\t\t}\r\n\r\n\t\tif (type === \"left\") {\r\n\t\t\tjoin(a, b, id, true);\r\n\t\t}\r\n\r\n\t\tif (type === \"right\") {\r\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\r\n\t\t}\r\n\r\n\t\treturn !error ? result : errorMsg;\r\n\t}\r\n\r\n\tfunction onmessage (ev) {\r\n\t\tconst data = JSON.parse(ev.data),\r\n\t\t\tcmd = data.cmd;\r\n\r\n\t\tlet result;\r\n\r\n\t\tif (cmd === \"index\") {\r\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\r\n\t\t}\r\n\r\n\t\tif (cmd === \"join\") {\r\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\r\n\t\t}\r\n\r\n\t\tpostMessage(JSON.stringify(result));\r\n\t}\r\n\r\n\tfunction createPatch (ogdata = {}, data = {}, key = \"\", overwrite = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tif (overwrite) {\r\n\t\t\titerate(ogdata, (v, k) => {\r\n\t\t\t\tif (k !== key && data[k] === void 0) {\r\n\t\t\t\t\tresult.push({op: \"remove\", path: \"/\" + k});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titerate(data, (v, k) => {\r\n\t\t\tif (k !== key && ogdata[k] === void 0) {\r\n\t\t\t\tresult.push({op: \"add\", path: \"/\" + k, value: v});\r\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\r\n\t\t\t\tresult.push({op: \"replace\", path: \"/\" + k, value: v});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction s () {\r\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\r\n\t}\r\n\r\n\tfunction setIndex (index, indexes, delimiter, key, data, indice, pattern) {\r\n\t\teach(!indice ? index : [indice], i => {\r\n\t\t\tconst lidx = keyIndex(i, data, delimiter, pattern);\r\n\t\t\tlet lindex;\r\n\r\n\t\t\tif (lidx !== void 0 && lidx !== null) {\r\n\t\t\t\tlindex = indexes.get(i);\r\n\r\n\t\t\t\tif (!lindex.has(lidx)) {\r\n\t\t\t\t\tlindex.set(lidx, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(lidx).add(key);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction toObjekt (arg, frozen = true) {\r\n\t\tconst result = {};\r\n\r\n\t\targ.forEach((value, key) => {\r\n\t\t\tconst obj = value;\r\n\r\n\t\t\tif (frozen) {\r\n\t\t\t\tObject.freeze(obj);\r\n\t\t\t}\r\n\r\n\t\t\tresult[clone(key)] = obj;\r\n\t\t});\r\n\r\n\t\tif (frozen) {\r\n\t\t\tObject.freeze(result);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction uuid () {\r\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\r\n\t}\r\n\r\n\tconst functions = [\r\n\t\tcast.toString(),\r\n\t\tclone.toString(),\r\n\t\tcreateIndexes.toString(),\r\n\t\teach.toString(),\r\n\t\thas.toString(),\r\n\t\titerate.toString(),\r\n\t\tjoinData.toString(),\r\n\t\tkeyIndex.toString(),\r\n\t\tsetIndex.toString(),\r\n\t\t(node === false ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"\r\n\t].join(\"\\n\");\r\n\r\n\tclass Haro {\r\n\t\tconstructor ({adapters = {}, config = {}, debounce = 0, delimiter = \"|\", id = uuid(), index = [], key = \"\", logging = true, patch = false, pattern = \"\\\\s*|\\\\t*\", source = \"\", versioning = false} = {}) {\r\n\t\t\tthis.adapters = adapters;\r\n\t\t\tthis.data = new Map();\r\n\t\t\tthis.debounce = debounce;\r\n\t\t\tthis.debounced = new Map();\r\n\t\t\tthis.delimiter = delimiter;\r\n\t\t\tthis.config = {\r\n\t\t\t\tmethod: \"get\",\r\n\t\t\t\tcredentials: \"include\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\taccept: \"application/json\",\r\n\t\t\t\t\t\"content-type\": \"application/json\"\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tthis.id = id;\r\n\t\t\tthis.index = index;\r\n\t\t\tthis.indexes = new Map();\r\n\t\t\tthis.key = key;\r\n\t\t\tthis.logging = logging;\r\n\t\t\tthis.patch = patch;\r\n\t\t\tthis.pattern = pattern;\r\n\t\t\tthis.source = source;\r\n\t\t\tthis.size = this.total = 0;\r\n\t\t\tthis.uri = \"\";\r\n\t\t\tthis.worker = null;\r\n\t\t\tthis.versions = new Map();\r\n\t\t\tthis.versioning = versioning;\r\n\r\n\t\t\tObject.defineProperty(this, \"registry\", {\r\n\t\t\t\tenumerable: true,\r\n\t\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t\t});\r\n\r\n\t\t\tif (Object.keys(config).length > 1) {\r\n\t\t\t\tthis.config = merge(this.config, config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.reindex();\r\n\t\t}\r\n\r\n\t\tasync batch (args, type = \"set\", lazyLoad = false) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tthis.beforeBatch(args, type);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst fn = type === \"del\" ? i => this.del(i, true, lazyLoad) : i => this.set(null, i, true, true, lazyLoad);\r\n\r\n\t\t\t\tresult = await Promise.all(args.map(fn));\r\n\t\t\t\tthis.onbatch(type, result);\r\n\t\t\t\tthis.log(`Batch successful on ${this.id}`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.onerror(\"batch\", e);\r\n\t\t\t\tthis.log(`Batch failure on ${this.id}`);\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tbeforeBatch () {}\r\n\r\n\t\tbeforeClear () {}\r\n\r\n\t\tbeforeDelete () {}\r\n\r\n\t\tbeforeRequest () {}\r\n\r\n\t\tbeforeSet () {}\r\n\r\n\t\tbeforeSync () {}\r\n\r\n\t\tclear () {\r\n\t\t\tthis.beforeClear();\r\n\t\t\tthis.size = this.total = 0;\r\n\t\t\tthis.data.clear();\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.versions.clear();\r\n\t\t\tthis.reindex().onclear();\r\n\t\t\tthis.log(`Cleared ${this.id}`);\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tasync cmd (type, ...args) {\r\n\t\t\tif (this.adapters[type] === void 0 || adapter[type] === void 0) {\r\n\t\t\t\tthrow new Error(`${type} not configured for persistent storage`);\r\n\t\t\t}\r\n\r\n\t\t\treturn await adapter[type].apply(this, [this, ...args]);\r\n\t\t}\r\n\r\n\t\tcrawl (arg) {\r\n\t\t\tlet result = clone(arg);\r\n\r\n\t\t\teach((this.source || \"\").split(\".\"), i => {\r\n\t\t\t\tresult = result[i];\r\n\t\t\t});\r\n\r\n\t\t\treturn result || arg;\r\n\t\t}\r\n\r\n\t\tdel (key, batch = false, lazyLoad = false, retry = false) {\r\n\t\t\tif (this.has(key) === false) {\r\n\t\t\t\tthrow new Error(\"Record not found\");\r\n\t\t\t}\r\n\r\n\t\t\tconst og = this.get(key, true);\r\n\r\n\t\t\treturn this.exec(async () => {\r\n\t\t\t\tthis.beforeDelete(key, batch, lazyLoad, retry);\r\n\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\r\n\t\t\t\tthis.data.delete(key);\r\n\t\t\t\t--this.total;\r\n\t\t\t\tthis.size = this.total;\r\n\t\t\t}, async () => {\r\n\t\t\t\tthis.ondelete(key, batch, retry, lazyLoad);\r\n\r\n\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\tthis.versions.delete(key);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!lazyLoad) {\r\n\t\t\t\t\tthis.storage(\"remove\", key).then(success => {\r\n\t\t\t\t\t\tif (success) {\r\n\t\t\t\t\t\t\tthis.log(`Deleted ${key} from persistent storage`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, e => this.log(`Error deleting ${key} from persistent storage: ${e.message || e.stack || e}`, \"error\"));\r\n\r\n\t\t\t\t\tif (!batch && !retry && this.uri) {\r\n\t\t\t\t\t\tif (this.debounced.has(key)) {\r\n\t\t\t\t\t\t\tclearTimeout(this.debounced.get(key));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.debounced.set(key, setTimeout(async () => {\r\n\t\t\t\t\t\t\tthis.debounced.delete(key);\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tawait this.transmit(key, null, og, false, \"delete\");\r\n\t\t\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\t\t\tthis.log(err.stack || err.message || err, \"error\");\r\n\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tawait this.set(key, og, true, true);\r\n\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this.debounce));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, err => {\r\n\t\t\t\tthis.onerror(\"delete\", err);\r\n\t\t\t\tthrow err;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tdump (type = \"records\") {\r\n\t\t\treturn type === \"records\" ? this.toArray(null, false) : this.transform(this.indexes);\r\n\t\t}\r\n\r\n\t\tentries () {\r\n\t\t\treturn this.data.entries();\r\n\t\t}\r\n\r\n\t\tasync exec (first, second, handler) {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst arg = await first();\r\n\t\t\t\tresult = await second(arg);\r\n\t\t\t} catch (err) {\r\n\t\t\t\thandler(err);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfind (where, raw = false) {\r\n\t\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\t\tvalue = keyIndex(key, where, this.delimiter, this.pattern),\r\n\t\t\t\tresult = [];\r\n\r\n\t\t\tif (this.indexes.has(key)) {\r\n\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(i => result.push(this.get(i, raw)));\r\n\t\t\t}\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tfilter (fn, raw = false) {\r\n\t\t\tconst result = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v) === true) {\r\n\t\t\t\t\ta.push(this.get(k, raw));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, []);\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tforEach (fn, ctx) {\r\n\t\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tget (key, raw = false) {\r\n\t\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\t\treturn result && !raw ? this.list(key, result) : result;\r\n\t\t}\r\n\r\n\t\thas (key, map) {\r\n\t\t\treturn (map || this.data).has(key);\r\n\t\t}\r\n\r\n\t\tasync join (other, on, type = \"inner\", where = []) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (other.total > 0) {\r\n\t\t\t\tif (where.length > 0) {\r\n\t\t\t\t\tresult = await this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on || this.key, type], \"join\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = await this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on || this.key, type], \"join\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof arg === \"string\") {\r\n\t\t\t\t\tthrow new Error(result);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult = [];\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tkeys () {\r\n\t\t\treturn this.data.keys();\r\n\t\t}\r\n\r\n\t\tlimit (offset = 0, max = 0, raw = false) {\r\n\t\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tlist (...args) {\r\n\t\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t\t}\r\n\r\n\t\tasync load (type = \"mongo\", key = void 0) {\r\n\t\t\tconst batch = key === void 0,\r\n\t\t\t\tid = !batch ? key : this.id;\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (batch) {\r\n\t\t\t\tthis.clear();\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst data = await this.cmd(type, \"get\", key);\r\n\r\n\t\t\t\tresult = batch ? this.batch(data, \"set\", true) : this.set(key, data, true, true, true);\r\n\t\t\t\tthis.log(`Loaded ${id} from ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error loading ${id} from ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tlog (arg = \"\", type = \"log\") {\r\n\t\t\tif (this.logging) {\r\n\t\t\t\tconsole[type](`haro: ${arg}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmap (fn, raw = false) {\r\n\t\t\tconst result = [];\r\n\r\n\t\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tasync offload (data, cmd = \"index\", index = this.index) {\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tif (this.worker) {\r\n\t\t\t\t\tconst obj = this.useWorker(resolve, reject);\r\n\t\t\t\t\tlet payload;\r\n\r\n\t\t\t\t\tif (cmd === \"index\") {\r\n\t\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\t\tcmd: cmd,\r\n\t\t\t\t\t\t\tindex: index,\r\n\t\t\t\t\t\t\trecords: data,\r\n\t\t\t\t\t\t\tkey: this.key,\r\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\r\n\t\t\t\t\t\t\tpattern: this.pattern\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if (cmd === \"join\") {\r\n\t\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\t\tcmd: cmd,\r\n\t\t\t\t\t\t\tids: data[0],\r\n\t\t\t\t\t\t\trecords: [data[1], data[2]],\r\n\t\t\t\t\t\t\tkey: data[3],\r\n\t\t\t\t\t\t\ton: data[4],\r\n\t\t\t\t\t\t\ttype: data[5]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error(webWorkerError));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tonbatch () {}\r\n\r\n\t\tonclear () {}\r\n\r\n\t\tondelete () {}\r\n\r\n\t\tonerror () {}\r\n\r\n\t\tonrequest (arg) {\r\n\t\t\treturn arg;\r\n\t\t}\r\n\r\n\t\tonset () {}\r\n\r\n\t\tonsync () {}\r\n\r\n\t\tasync override (data, type = \"records\", fn = void 0) {\r\n\t\t\tconst result = true;\r\n\r\n\t\t\tif (type === \"indexes\") {\r\n\t\t\t\tthis.indexes = this.transform(data, fn);\r\n\t\t\t} else if (type === \"records\") {\r\n\t\t\t\tconst key = this.key !== \"\" ? arg => arg[this.key] || uuid() : () => uuid();\r\n\t\t\t\tthis.indexes.clear();\r\n\t\t\t\tthis.data = new Map(data.map(datum => [key(datum), datum]));\r\n\t\t\t\tthis.size = this.total = this.data.size;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error(\"Invalid type\");\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\treduce (fn, accumulator, raw = false) {\r\n\t\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\t\tthis.forEach((v, k) => {\r\n\t\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t\t}, this);\r\n\r\n\t\t\treturn a;\r\n\t\t}\r\n\r\n\t\tregister (key, fn) {\r\n\t\t\tadapter[key] = fn;\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\treindex (index) {\r\n\t\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\t\tthis.index.push(index);\r\n\t\t\t}\r\n\r\n\t\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i, this.pattern)));\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tasync request (input, config = {}) {\r\n\t\t\treturn new Promise(async (resolve, reject) => {\r\n\t\t\t\tconst cfg = merge(clone(this.config), config),\r\n\t\t\t\t\tref = [input, cfg],\r\n\t\t\t\t\theaders = {};\r\n\r\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\r\n\r\n\t\t\t\tif (cfg.method === \"DELETE\") {\r\n\t\t\t\t\tdelete cfg.body;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.beforeRequest(...ref);\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await fetch(input, cfg),\r\n\t\t\t\t\t\tok = res.ok,\r\n\t\t\t\t\t\tstatus = res.status;\r\n\r\n\t\t\t\t\tif (res.headers._headers) {\r\n\t\t\t\t\t\teach(Object.keys(res.headers._headers), i => {\r\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor (const pair of res.headers.entries()) {\r\n\t\t\t\t\t\t\theaders[pair[0]] = pair[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst arg = await res[regex.json.test(headers[\"content-type\"] || \"\") ? \"json\" : \"text\"](),\r\n\t\t\t\t\t\tnext = ok ? resolve : reject;\r\n\r\n\t\t\t\t\tnext(this.list(this.onrequest(arg, status, headers), status, headers));\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treject(this.list(e.message, 0, {}));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tasync save (type = \"mongo\") {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tresult = await this.cmd(type, \"set\");\r\n\t\t\t\tthis.log(`Saved ${this.id} to ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error saving ${this.id} to ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tsearch (value, index, raw = false) {\r\n\t\t\tconst result = new Map(),\r\n\t\t\t\tfn = typeof value === \"function\",\r\n\t\t\t\trgex = value && typeof value.test === \"function\";\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\t\tif (idx) {\r\n\t\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\r\n\t\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\t\tif (!result.has(key) && this.has(key)) {\r\n\t\t\t\t\t\t\t\t\t\t\tresult.set(key, this.get(key, raw));\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t\t}\r\n\r\n\t\tasync set (key, data, batch = false, override = false, lazyLoad = false, retry = false) {\r\n\t\t\tlet x = clone(data),\r\n\t\t\t\tmethod, og;\r\n\r\n\t\t\treturn this.exec(async () => {\r\n\t\t\t\tif (key === void 0 || key === null) {\r\n\t\t\t\t\tkey = this.key && x[this.key] !== void 0 ? x[this.key] : uuid();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.beforeSet(key, data, batch, override, lazyLoad, retry);\r\n\r\n\t\t\t\tif (!this.data.has(key)) {\r\n\t\t\t\t\t++this.total;\r\n\t\t\t\t\tthis.size = this.total;\r\n\t\t\t\t\tmethod = \"post\";\r\n\r\n\t\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tog = this.get(key, true);\r\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\r\n\t\t\t\t\tmethod = \"put\";\r\n\r\n\t\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (override === false) {\r\n\t\t\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.data.set(key, x);\r\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\r\n\r\n\t\t\t\treturn this.get(key);\r\n\t\t\t}, async arg => {\r\n\t\t\t\tthis.onset(arg, batch, retry, lazyLoad);\r\n\r\n\t\t\t\tif (!lazyLoad) {\r\n\t\t\t\t\tthis.storage(\"set\", key, x).then(success => {\r\n\t\t\t\t\t\tif (success) {\r\n\t\t\t\t\t\t\tthis.log(`Saved ${key} to persistent storage`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, e => this.log(`Error saving ${key} to persistent storage: ${e.message || e.stack || e}`, \"error\"));\r\n\r\n\t\t\t\t\tif (!batch && !retry && this.uri) {\r\n\t\t\t\t\t\tif (this.debounced.has(key)) {\r\n\t\t\t\t\t\t\tclearTimeout(this.debounced.get(key));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.debounced.set(key, setTimeout(async () => {\r\n\t\t\t\t\t\t\tthis.debounced.delete(key);\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tawait this.transmit(key, x, og, override, method);\r\n\r\n\t\t\t\t\t\t\t\tif (og) {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\tawait this.set(key, og, batch, true, lazyLoad, true);\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\tawait this.del(key, true);\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\tthis.log(e.stack || e.message || e, \"error\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this.debounce));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn arg;\r\n\t\t\t}, err => {\r\n\t\t\t\tthis.onerror(\"set\", err);\r\n\t\t\t\tthrow err;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tasync setUri (uri, clear = false) {\r\n\t\t\tthis.uri = uri;\r\n\r\n\t\t\treturn this.uri !== \"\" ? await this.sync(clear) : [];\r\n\t\t}\r\n\r\n\t\tsort (fn, frozen = true) {\r\n\t\t\treturn frozen ? Object.freeze(this.limit(0, this.total, true).sort(fn).map(i => Object.freeze(i))) : this.limit(0, this.total, true).sort(fn);\r\n\t\t}\r\n\r\n\t\tsortBy (index, raw = false) {\r\n\t\t\tconst result = [],\r\n\t\t\t\tkeys = [];\r\n\r\n\t\t\tlet lindex;\r\n\r\n\t\t\tif (!this.indexes.has(index)) {\r\n\t\t\t\tthis.reindex(index);\r\n\t\t\t}\r\n\r\n\t\t\tlindex = this.indexes.get(index);\r\n\t\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tasync storage (...args) {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst deferreds = Object.keys(this.adapters).map(async i => await this.cmd.apply(this, [i, ...args]));\r\n\r\n\t\t\t\tif (deferreds.length > 0) {\r\n\t\t\t\t\tawait Promise.all(deferreds);\r\n\t\t\t\t\tresult = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = false;\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(e.stack || e.message || e, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tasync sync (clear = false) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tthis.beforeSync(this.uri, clear);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst arg = await this.request(this.uri),\r\n\t\t\t\t\tdata = this.source ? this.crawl(arg[0]) : arg[0];\r\n\r\n\t\t\t\tthis.patch = (arg[2].Allow || arg[2].allow || \"\").includes(\"PATCH\");\r\n\r\n\t\t\t\tif (clear) {\r\n\t\t\t\t\tthis.clear();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = await this.batch(data, \"set\");\r\n\t\t\t\tthis.onsync(result);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.onerror(\"sync\", e[0] || e);\r\n\t\t\t\tthrow e[0] || e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\ttoArray (data, frozen = true) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (data) {\r\n\t\t\t\tresult = data.map(i => frozen ? i[1] : clone(i[1]));\r\n\t\t\t} else {\r\n\t\t\t\tresult = this.limit(0, this.total, true);\r\n\r\n\t\t\t\tif (frozen) {\r\n\t\t\t\t\teach(result, i => Object.freeze(i));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn frozen ? Object.freeze(result) : result;\r\n\t\t}\r\n\r\n\t\ttoObject (data, frozen = true) {\r\n\t\t\tconst result = !data ? toObjekt(this, frozen) : data.reduce((a, b) => {\r\n\t\t\t\tconst obj = clone(b[1]);\r\n\r\n\t\t\t\tif (frozen) {\r\n\t\t\t\t\tObject.freeze(obj);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ta[b[0]] = obj;\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, {});\r\n\r\n\t\t\treturn frozen ? Object.freeze(result) : result;\r\n\t\t}\r\n\r\n\t\ttransform (input, fn) {\r\n\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\r\n\t\t}\r\n\r\n\t\tasync transmit (key, data, og, override = false, method = \"post\") {\r\n\t\t\tconst uri = concatURI(this.uri, data ? key : null);\r\n\r\n\t\t\tlet body, result;\r\n\r\n\t\t\tif (this.patch) {\r\n\t\t\t\tif (data === void 0) {\r\n\t\t\t\t\tbody = [{op: \"remove\", path: \"/\", value: key}];\r\n\t\t\t\t} else if (og === void 0) {\r\n\t\t\t\t\tbody = [{op: \"add\", path: \"/\", value: data}];\r\n\t\t\t\t} else if (override) {\r\n\t\t\t\t\tbody = [{op: \"replace\", path: \"/\", value: data}];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbody = createPatch(og, data, this.key);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tresult = await this.request(uri, {method: \"patch\", body: JSON.stringify(body, null, 0)});\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tif (e[1] === 405) {\r\n\t\t\t\t\t\tthis.patch = false;\r\n\t\t\t\t\t\tresult = await this.request(!data ? concatURI(this.uri, key) : uri, {\r\n\t\t\t\t\t\t\tmethod: method,\r\n\t\t\t\t\t\t\tbody: JSON.stringify(data, null, 0)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult = await this.request(uri, {method: method, body: JSON.stringify(data, null, 0)});\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tasync unload (type = \"mongo\", key = void 0) {\r\n\t\t\tconst id = key !== void 0 ? key : this.id;\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tresult = await this.cmd(type, \"remove\", key);\r\n\t\t\t\tthis.log(`Unloaded ${id} from ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error unloading ${id} from ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tunregister (key) {\r\n\t\t\tdelete adapter[key];\r\n\t\t}\r\n\r\n\t\tvalues () {\r\n\t\t\treturn this.data.values();\r\n\t\t}\r\n\r\n\t\tuseWorker (resolve, reject) {\r\n\t\t\tlet obj;\r\n\r\n\t\t\tif (this.worker) {\r\n\t\t\t\tobj = new Worker(this.worker);\r\n\r\n\t\t\t\tobj.onerror = err => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t\tobj.terminate();\r\n\t\t\t\t};\r\n\r\n\t\t\t\tobj.onmessage = ev => {\r\n\t\t\t\t\tresolve(JSON.parse(ev.data));\r\n\t\t\t\t\tobj.terminate();\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\treject(new Error(webWorkerError));\r\n\t\t\t}\r\n\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\twhere (predicate, raw = false) {\r\n\t\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\t\treturn keys.length > 0 ? this.filter(new Function(\"a\", `return (${keys.map(i => {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\treturn `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}).join(\") && (\")});`), raw) : [];\r\n\t\t}\r\n\t}\r\n\r\n\tfunction factory (data = null, config = {}) {\r\n\t\tconst obj = new Haro(config);\r\n\r\n\t\tif (webWorker) {\r\n\t\t\tobj.worker = node === false ? global.URL.createObjectURL(blob(functions)) : new Function(functions);\r\n\t\t}\r\n\r\n\t\tif (Array.isArray(data)) {\r\n\t\t\tobj.batch(data, \"set\");\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tfactory.transform = cast;\r\n\tfactory.version = \"4.3.4\";\r\n\r\n\t// Node, AMD & window supported\r\n\tif (typeof exports !== \"undefined\") {\r\n\t\tmodule.exports = factory;\r\n\t} else if (typeof define === \"function\" && define.amd !== void 0) {\r\n\t\tdefine(() => factory);\r\n\t} else {\r\n\t\tglobal.haro = factory;\r\n\t}\r\n}(typeof window !== \"undefined\" ? window : global));\r\n"]} \ No newline at end of file +{"version":3,"sources":["haro.js"],"names":["global","has","a","b","each","arr","fn","item","entries","cast","input","result","Map","forEach","value","key","Set","Array","from","isArray","Object","keys","map","i","blob","arg","Blob","type","clone","JSON","parse","stringify","concatURI","left","right","replace","regex","querystring","endslash","keyIndex","data","delimiter","pattern","indexOf","split","sort","localeCompare","toString","RegExp","toLowerCase","join","delIndex","index","indexes","idx","get","o","delete","size","createIndexes","records","lkey","lindex","push","iterate","obj","call","merge","concat","joinData","id","on","ids","include","reverse","x","comp","c","filter","valid","length","error","errorMsg","v","k","createPatch","ogdata","overwrite","op","path","s","Math","random","substring","setIndex","indice","lidx","set","add","toObjekt","frozen","freeze","uuid","substr","r","floor","factory","config","Haro","webWorker","worker","URL","createObjectURL","functions","Function","batch","node","process","nextTick","Promise","fetch","require","Worker","json","webWorkerError","adapter","ev","cmd","postMessage","constructor","adapters","debounce","logging","patch","source","versioning","debounced","method","credentials","headers","accept","total","uri","versions","defineProperty","enumerable","reindex","args","lazyLoad","beforeBatch","del","all","onbatch","log","e","onerror","beforeClear","beforeDelete","beforeRequest","beforeSet","beforeSync","clear","onclear","Error","apply","crawl","retry","og","exec","ondelete","storage","then","success","message","stack","clearTimeout","setTimeout","transmit","err","dump","toArray","transform","first","second","handler","find","where","raw","list","reduce","ctx","other","offload","limit","offset","max","registry","slice","load","console","resolve","reject","useWorker","payload","onrequest","onset","onsync","override","datum","accumulator","next","register","indices","includes","request","cfg","toUpperCase","body","res","ok","status","_headers","pair","test","save","search","rgex","lset","values","setUri","sync","sortBy","deferreds","Allow","allow","toObject","unload","unregister","terminate","onmessage","predicate","version","exports","define","amd","haro","module","window"],"mappings":"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","file":"unknown","sourcesContent":["/**\r\n * Harō is a modern immutable DataStore\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2018\r\n * @license BSD-3-Clause\r\n * @version 4.3.5\r\n */\r\n\r\n\r\n(function (global) {\r\n\tconst node = typeof process !== \"undefined\" && typeof process.nextTick === \"function\",\r\n\t\tPromise = global.Promise,\r\n\t\tMap = global.Map,\r\n\t\tSet = global.Set,\r\n\t\tfetch = global.fetch || (node ? require(\"node-fetch\") : void 0),\r\n\t\tBlob = global.Blob,\r\n\t\tWorker = global.Worker || (node ? require(\"tiny-worker\") : void 0),\r\n\t\tr = [8, 9, \"a\", \"b\"],\r\n\t\tregex = {\r\n\t\t\tquerystring: /\\?.*/,\r\n\t\t\tendslash: /\\/$/,\r\n\t\t\tjson: /^application\\/json/\r\n\t\t},\r\n\t\twebWorker = typeof Worker !== \"undefined\",\r\n\t\twebWorkerError = \"Web Worker not supported\",\r\n\t\tadapter = {};\r\n\r\n\tfunction has (a, b) {\r\n\t\treturn b in a;\r\n\t}\r\n\r\n\tfunction each (arr, fn) {\r\n\t\tfor (const item of arr.entries()) {\r\n\t\t\tfn(item[1], item[0]);\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tfunction cast (input) {\r\n\t\tlet result;\r\n\r\n\t\tswitch (true) {\r\n\t\t\tcase input instanceof Map:\r\n\t\t\t\tresult = {};\r\n\t\t\t\tinput.forEach((value, key) => {\r\n\t\t\t\t\tresult[key] = cast(value);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase input instanceof Set:\r\n\t\t\t\tresult = Array.from(input);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Array.isArray(input):\r\n\t\t\t\tresult = new Set(input);\r\n\t\t\t\tbreak;\r\n\t\t\tcase input instanceof Object:\r\n\t\t\t\tresult = new Map(Object.keys(input).map(i => [i, cast(input[i])]));\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tresult = input;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction blob (arg) {\r\n\t\treturn new Blob([arg], {type: \"application/javascript\"});\r\n\t}\r\n\r\n\tfunction clone (arg) {\r\n\t\treturn JSON.parse(JSON.stringify(arg, null, 0));\r\n\t}\r\n\r\n\tfunction concatURI (left, right) {\r\n\t\treturn left.replace(regex.querystring, \"\").replace(regex.endslash, \"\") + (right ? \"/\" + right : \"\");\r\n\t}\r\n\r\n\tfunction keyIndex (key, data, delimiter, pattern) {\r\n\t\tlet result;\r\n\r\n\t\tif (key.indexOf(delimiter) > -1) {\r\n\t\t\tresult = key.split(delimiter).sort((a, b) => a.localeCompare(b)).map(i => data[i].toString().replace(new RegExp(pattern, \"g\"), \"\").toLowerCase()).join(delimiter);\r\n\t\t} else {\r\n\t\t\tresult = data[key];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction delIndex (index, indexes, delimiter, key, data, pattern) {\r\n\t\tindex.forEach(i => {\r\n\t\t\tconst idx = indexes.get(i),\r\n\t\t\t\tvalue = keyIndex(i, data, delimiter, pattern);\r\n\r\n\t\t\tif (idx.has(value)) {\r\n\t\t\t\tconst o = idx.get(value);\r\n\r\n\t\t\t\to.delete(key);\r\n\r\n\t\t\t\tif (o.size === 0) {\r\n\t\t\t\t\tidx.delete(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction createIndexes (records, indexes, key, delimiter, pattern) {\r\n\t\tconst result = {};\r\n\r\n\t\teach(indexes, i => {\r\n\t\t\tresult[i] = {};\r\n\t\t});\r\n\r\n\t\teach(records, i => {\r\n\t\t\tconst lkey = i[key];\r\n\r\n\t\t\tif (lkey !== void 0) {\r\n\t\t\t\tindexes.forEach(index => {\r\n\t\t\t\t\tconst lindex = keyIndex(index, i, delimiter, pattern);\r\n\r\n\t\t\t\t\tif (!has(result[index], lindex)) {\r\n\t\t\t\t\t\tresult[index][lindex] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult[index][lindex].push(lkey);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction iterate (obj, fn) {\r\n\t\tif (obj instanceof Object) {\r\n\t\t\teach(Object.keys(obj), i => fn.call(obj, obj[i], i));\r\n\t\t} else {\r\n\t\t\teach(obj, fn);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction merge (a, b) {\r\n\t\tif (a instanceof Object && b instanceof Object) {\r\n\t\t\teach(Object.keys(b), i => {\r\n\t\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\ta[i] = b[i];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\t\ta = a.concat(b);\r\n\t\t} else {\r\n\t\t\ta = b;\r\n\t\t}\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\tfunction joinData (id, a, b, key, on, type = \"inner\") {\r\n\t\tconst result = [];\r\n\t\tlet errorMsg = \"More than one record found on \";\r\n\r\n\t\tlet error = false;\r\n\r\n\t\tfunction join (left, right, ids, include = false, reverse = false) {\r\n\t\t\tconst keys = Object.keys(right[0]),\r\n\t\t\t\tfn = !reverse ? (x, i) => x[on] === i[key] : (x, i) => x[key] === i[on];\r\n\r\n\t\t\teach(left, i => {\r\n\t\t\t\tconst comp = {},\r\n\t\t\t\t\tc = right.filter(x => fn(x, i));\r\n\r\n\t\t\t\tlet valid = true;\r\n\r\n\t\t\t\tif (c.length > 1) {\r\n\t\t\t\t\terror = true;\r\n\t\t\t\t\terrorMsg += i[on];\r\n\t\t\t\t\tvalid = false;\r\n\t\t\t\t} else if (c.length === 1) {\r\n\t\t\t\t\teach([i, c[0]], (x, idx) => iterate(x, (v, k) => {\r\n\t\t\t\t\t\tcomp[ids[idx] + \"_\" + k] = v;\r\n\t\t\t\t\t}));\r\n\t\t\t\t} else if (include) {\r\n\t\t\t\t\titerate(i, (v, k) => {\r\n\t\t\t\t\t\tcomp[ids[0] + \"_\" + k] = v;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\teach(keys, k => {\r\n\t\t\t\t\t\tcomp[ids[1] + \"_\" + k] = null;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (valid && Object.keys(comp).length > 0) {\r\n\t\t\t\t\tresult.push(comp);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn valid;\r\n\t\t\t}, true);\r\n\t\t}\r\n\r\n\t\tif (type === \"inner\") {\r\n\t\t\tjoin(a, b, id);\r\n\t\t}\r\n\r\n\t\tif (type === \"left\") {\r\n\t\t\tjoin(a, b, id, true);\r\n\t\t}\r\n\r\n\t\tif (type === \"right\") {\r\n\t\t\tjoin(b, a, clone(id).reverse(), true, true);\r\n\t\t}\r\n\r\n\t\treturn !error ? result : errorMsg;\r\n\t}\r\n\r\n\tfunction onmessage (ev) {\r\n\t\tconst data = JSON.parse(ev.data),\r\n\t\t\tcmd = data.cmd;\r\n\r\n\t\tlet result;\r\n\r\n\t\tif (cmd === \"index\") {\r\n\t\t\tresult = createIndexes(data.records, data.index, data.key, data.delimiter, data.pattern);\r\n\t\t}\r\n\r\n\t\tif (cmd === \"join\") {\r\n\t\t\tresult = joinData(data.ids, data.records[0], data.records[1], data.key, data.on, data.type);\r\n\t\t}\r\n\r\n\t\tpostMessage(JSON.stringify(result));\r\n\t}\r\n\r\n\tfunction createPatch (ogdata = {}, data = {}, key = \"\", overwrite = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tif (overwrite) {\r\n\t\t\titerate(ogdata, (v, k) => {\r\n\t\t\t\tif (k !== key && data[k] === void 0) {\r\n\t\t\t\t\tresult.push({op: \"remove\", path: \"/\" + k});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titerate(data, (v, k) => {\r\n\t\t\tif (k !== key && ogdata[k] === void 0) {\r\n\t\t\t\tresult.push({op: \"add\", path: \"/\" + k, value: v});\r\n\t\t\t} else if (JSON.stringify(ogdata[k]) !== JSON.stringify(v)) {\r\n\t\t\t\tresult.push({op: \"replace\", path: \"/\" + k, value: v});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction s () {\r\n\t\treturn ((Math.random() + 1) * 0x10000 | 0).toString(16).substring(1);\r\n\t}\r\n\r\n\tfunction setIndex (index, indexes, delimiter, key, data, indice, pattern) {\r\n\t\teach(!indice ? index : [indice], i => {\r\n\t\t\tconst lidx = keyIndex(i, data, delimiter, pattern);\r\n\t\t\tlet lindex;\r\n\r\n\t\t\tif (lidx !== void 0 && lidx !== null) {\r\n\t\t\t\tlindex = indexes.get(i);\r\n\r\n\t\t\t\tif (!lindex.has(lidx)) {\r\n\t\t\t\t\tlindex.set(lidx, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(lidx).add(key);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction toObjekt (arg, frozen = true) {\r\n\t\tconst result = {};\r\n\r\n\t\targ.forEach((value, key) => {\r\n\t\t\tconst obj = value;\r\n\r\n\t\t\tif (frozen) {\r\n\t\t\t\tObject.freeze(obj);\r\n\t\t\t}\r\n\r\n\t\t\tresult[clone(key)] = obj;\r\n\t\t});\r\n\r\n\t\tif (frozen) {\r\n\t\t\tObject.freeze(result);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction uuid () {\r\n\t\treturn s() + s() + \"-\" + s() + \"-4\" + s().substr(0, 3) + \"-\" + r[Math.floor(Math.random() * 4)] + s().substr(0, 3) + \"-\" + s() + s() + s();\r\n\t}\r\n\r\n\tconst functions = [\r\n\t\tcast.toString(),\r\n\t\tclone.toString(),\r\n\t\tcreateIndexes.toString(),\r\n\t\teach.toString(),\r\n\t\thas.toString(),\r\n\t\titerate.toString(),\r\n\t\tjoinData.toString(),\r\n\t\tkeyIndex.toString(),\r\n\t\tsetIndex.toString(),\r\n\t\t(node === false ? \"\" : \"self.\") + \"onmessage = \" + onmessage.toString() + \";\"\r\n\t].join(\"\\n\");\r\n\r\n\tclass Haro {\r\n\t\tconstructor ({adapters = {}, config = {}, debounce = 0, delimiter = \"|\", id = uuid(), index = [], key = \"\", logging = true, patch = false, pattern = \"\\\\s*|\\\\t*\", source = \"\", versioning = false} = {}) {\r\n\t\t\tthis.adapters = adapters;\r\n\t\t\tthis.data = new Map();\r\n\t\t\tthis.debounce = debounce;\r\n\t\t\tthis.debounced = new Map();\r\n\t\t\tthis.delimiter = delimiter;\r\n\t\t\tthis.config = {\r\n\t\t\t\tmethod: \"get\",\r\n\t\t\t\tcredentials: \"include\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\taccept: \"application/json\",\r\n\t\t\t\t\t\"content-type\": \"application/json\"\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tthis.id = id;\r\n\t\t\tthis.index = index;\r\n\t\t\tthis.indexes = new Map();\r\n\t\t\tthis.key = key;\r\n\t\t\tthis.logging = logging;\r\n\t\t\tthis.patch = patch;\r\n\t\t\tthis.pattern = pattern;\r\n\t\t\tthis.source = source;\r\n\t\t\tthis.size = this.total = 0;\r\n\t\t\tthis.uri = \"\";\r\n\t\t\tthis.worker = null;\r\n\t\t\tthis.versions = new Map();\r\n\t\t\tthis.versioning = versioning;\r\n\r\n\t\t\tObject.defineProperty(this, \"registry\", {\r\n\t\t\t\tenumerable: true,\r\n\t\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t\t});\r\n\r\n\t\t\tif (Object.keys(config).length > 1) {\r\n\t\t\t\tthis.config = merge(this.config, config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.reindex();\r\n\t\t}\r\n\r\n\t\tasync batch (args, type = \"set\", lazyLoad = false) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tthis.beforeBatch(args, type);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst fn = type === \"del\" ? i => this.del(i, true, lazyLoad) : i => this.set(null, i, true, true, lazyLoad);\r\n\r\n\t\t\t\tresult = await Promise.all(args.map(fn));\r\n\t\t\t\tthis.onbatch(type, result);\r\n\t\t\t\tthis.log(`Batch successful on ${this.id}`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.onerror(\"batch\", e);\r\n\t\t\t\tthis.log(`Batch failure on ${this.id}`);\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tbeforeBatch () {}\r\n\r\n\t\tbeforeClear () {}\r\n\r\n\t\tbeforeDelete () {}\r\n\r\n\t\tbeforeRequest () {}\r\n\r\n\t\tbeforeSet () {}\r\n\r\n\t\tbeforeSync () {}\r\n\r\n\t\tclear () {\r\n\t\t\tthis.beforeClear();\r\n\t\t\tthis.size = this.total = 0;\r\n\t\t\tthis.data.clear();\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.versions.clear();\r\n\t\t\tthis.reindex().onclear();\r\n\t\t\tthis.log(`Cleared ${this.id}`);\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tasync cmd (type, ...args) {\r\n\t\t\tif (this.adapters[type] === void 0 || adapter[type] === void 0) {\r\n\t\t\t\tthrow new Error(`${type} not configured for persistent storage`);\r\n\t\t\t}\r\n\r\n\t\t\treturn await adapter[type].apply(this, [this, ...args]);\r\n\t\t}\r\n\r\n\t\tcrawl (arg) {\r\n\t\t\tlet result = clone(arg);\r\n\r\n\t\t\teach((this.source || \"\").split(\".\"), i => {\r\n\t\t\t\tresult = result[i];\r\n\t\t\t});\r\n\r\n\t\t\treturn result || arg;\r\n\t\t}\r\n\r\n\t\tdel (key, batch = false, lazyLoad = false, retry = false) {\r\n\t\t\tif (this.has(key) === false) {\r\n\t\t\t\tthrow new Error(\"Record not found\");\r\n\t\t\t}\r\n\r\n\t\t\tconst og = this.get(key, true);\r\n\r\n\t\t\treturn this.exec(async () => {\r\n\t\t\t\tthis.beforeDelete(key, batch, lazyLoad, retry);\r\n\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\r\n\t\t\t\tthis.data.delete(key);\r\n\t\t\t\t--this.total;\r\n\t\t\t\tthis.size = this.total;\r\n\t\t\t}, async () => {\r\n\t\t\t\tthis.ondelete(key, batch, retry, lazyLoad);\r\n\r\n\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\tthis.versions.delete(key);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!lazyLoad) {\r\n\t\t\t\t\tthis.storage(\"remove\", key).then(success => {\r\n\t\t\t\t\t\tif (success) {\r\n\t\t\t\t\t\t\tthis.log(`Deleted ${key} from persistent storage`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, e => this.log(`Error deleting ${key} from persistent storage: ${e.message || e.stack || e}`, \"error\"));\r\n\r\n\t\t\t\t\tif (!batch && !retry && this.uri) {\r\n\t\t\t\t\t\tif (this.debounced.has(key)) {\r\n\t\t\t\t\t\t\tclearTimeout(this.debounced.get(key));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.debounced.set(key, setTimeout(async () => {\r\n\t\t\t\t\t\t\tthis.debounced.delete(key);\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tawait this.transmit(key, null, og, false, \"delete\");\r\n\t\t\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\t\t\tthis.log(err.stack || err.message || err, \"error\");\r\n\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tawait this.set(key, og, true, true);\r\n\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this.debounce));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, err => {\r\n\t\t\t\tthis.onerror(\"delete\", err);\r\n\t\t\t\tthrow err;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tdump (type = \"records\") {\r\n\t\t\treturn type === \"records\" ? this.toArray(null, false) : this.transform(this.indexes);\r\n\t\t}\r\n\r\n\t\tentries () {\r\n\t\t\treturn this.data.entries();\r\n\t\t}\r\n\r\n\t\tasync exec (first, second, handler) {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst arg = await first();\r\n\t\t\t\tresult = await second(arg);\r\n\t\t\t} catch (err) {\r\n\t\t\t\thandler(err);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfind (where, raw = false) {\r\n\t\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\t\tvalue = keyIndex(key, where, this.delimiter, this.pattern),\r\n\t\t\t\tresult = [];\r\n\r\n\t\t\tif (this.indexes.has(key)) {\r\n\t\t\t\t(this.indexes.get(key).get(value) || new Set()).forEach(i => result.push(this.get(i, raw)));\r\n\t\t\t}\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tfilter (fn, raw = false) {\r\n\t\t\tconst result = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v) === true) {\r\n\t\t\t\t\ta.push(this.get(k, raw));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, []);\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tforEach (fn, ctx) {\r\n\t\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tget (key, raw = false) {\r\n\t\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\t\treturn result && !raw ? this.list(key, result) : result;\r\n\t\t}\r\n\r\n\t\thas (key, map) {\r\n\t\t\treturn (map || this.data).has(key);\r\n\t\t}\r\n\r\n\t\tasync join (other, on, type = \"inner\", where = []) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (other.total > 0) {\r\n\t\t\t\tif (where.length > 0) {\r\n\t\t\t\t\tresult = await this.offload([[this.id, other.id], this.find(where[0], true), !where[1] ? other.toArray(null, true) : other.find(where[1], true), this.key, on || this.key, type], \"join\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = await this.offload([[this.id, other.id], this.toArray(null, true), other.toArray(null, true), this.key, on || this.key, type], \"join\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof arg === \"string\") {\r\n\t\t\t\t\tthrow new Error(result);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult = [];\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tkeys () {\r\n\t\t\treturn this.data.keys();\r\n\t\t}\r\n\r\n\t\tlimit (offset = 0, max = 0, raw = false) {\r\n\t\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tlist (...args) {\r\n\t\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t\t}\r\n\r\n\t\tasync load (type = \"mongo\", key = void 0) {\r\n\t\t\tconst batch = key === void 0,\r\n\t\t\t\tid = !batch ? key : this.id;\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (batch) {\r\n\t\t\t\tthis.clear();\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst data = await this.cmd(type, \"get\", key);\r\n\r\n\t\t\t\tresult = batch ? this.batch(data, \"set\", true) : this.set(key, data, true, true, true);\r\n\t\t\t\tthis.log(`Loaded ${id} from ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error loading ${id} from ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tlog (arg = \"\", type = \"log\") {\r\n\t\t\tif (this.logging) {\r\n\t\t\t\tconsole[type](`haro: ${arg}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmap (fn, raw = false) {\r\n\t\t\tconst result = [];\r\n\r\n\t\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tasync offload (data, cmd = \"index\", index = this.index) {\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tif (this.worker) {\r\n\t\t\t\t\tconst obj = this.useWorker(resolve, reject);\r\n\t\t\t\t\tlet payload;\r\n\r\n\t\t\t\t\tif (cmd === \"index\") {\r\n\t\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\t\tcmd: cmd,\r\n\t\t\t\t\t\t\tindex: index,\r\n\t\t\t\t\t\t\trecords: data,\r\n\t\t\t\t\t\t\tkey: this.key,\r\n\t\t\t\t\t\t\tdelimiter: this.delimiter,\r\n\t\t\t\t\t\t\tpattern: this.pattern\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if (cmd === \"join\") {\r\n\t\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\t\tcmd: cmd,\r\n\t\t\t\t\t\t\tids: data[0],\r\n\t\t\t\t\t\t\trecords: [data[1], data[2]],\r\n\t\t\t\t\t\t\tkey: data[3],\r\n\t\t\t\t\t\t\ton: data[4],\r\n\t\t\t\t\t\t\ttype: data[5]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobj.postMessage(JSON.stringify(payload, null, 0));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error(webWorkerError));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tonbatch () {}\r\n\r\n\t\tonclear () {}\r\n\r\n\t\tondelete () {}\r\n\r\n\t\tonerror () {}\r\n\r\n\t\tonrequest (arg) {\r\n\t\t\treturn arg;\r\n\t\t}\r\n\r\n\t\tonset () {}\r\n\r\n\t\tonsync () {}\r\n\r\n\t\tasync override (data, type = \"records\", fn = void 0) {\r\n\t\t\tconst result = true;\r\n\r\n\t\t\tif (type === \"indexes\") {\r\n\t\t\t\tthis.indexes = this.transform(data, fn);\r\n\t\t\t} else if (type === \"records\") {\r\n\t\t\t\tconst key = this.key !== \"\" ? arg => arg[this.key] || uuid() : () => uuid();\r\n\t\t\t\tthis.indexes.clear();\r\n\t\t\t\tthis.data = new Map(data.map(datum => [key(datum), datum]));\r\n\t\t\t\tthis.size = this.total = this.data.size;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error(\"Invalid type\");\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\treduce (fn, accumulator, raw = false) {\r\n\t\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\t\tthis.forEach((v, k) => {\r\n\t\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t\t}, this);\r\n\r\n\t\t\treturn a;\r\n\t\t}\r\n\r\n\t\tregister (key, fn) {\r\n\t\t\tadapter[key] = fn;\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\treindex (index) {\r\n\t\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\t\tthis.index.push(index);\r\n\t\t\t}\r\n\r\n\t\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i, this.pattern)));\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tasync request (input, config = {}) {\r\n\t\t\treturn new Promise(async (resolve, reject) => {\r\n\t\t\t\tconst cfg = merge(clone(this.config), config),\r\n\t\t\t\t\tref = [input, cfg],\r\n\t\t\t\t\theaders = {};\r\n\r\n\t\t\t\tcfg.method = cfg.method.toUpperCase();\r\n\r\n\t\t\t\tif (cfg.method === \"DELETE\") {\r\n\t\t\t\t\tdelete cfg.body;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.beforeRequest(...ref);\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await fetch(input, cfg),\r\n\t\t\t\t\t\tok = res.ok,\r\n\t\t\t\t\t\tstatus = res.status;\r\n\r\n\t\t\t\t\tif (res.headers._headers) {\r\n\t\t\t\t\t\teach(Object.keys(res.headers._headers), i => {\r\n\t\t\t\t\t\t\theaders[i] = res.headers._headers[i].join(\", \");\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor (const pair of res.headers.entries()) {\r\n\t\t\t\t\t\t\theaders[pair[0]] = pair[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst arg = await res[regex.json.test(headers[\"content-type\"] || \"\") ? \"json\" : \"text\"](),\r\n\t\t\t\t\t\tnext = ok ? resolve : reject;\r\n\r\n\t\t\t\t\tnext(this.list(this.onrequest(arg, status, headers), status, headers));\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treject(this.list(e.message, 0, {}));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tasync save (type = \"mongo\") {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tresult = await this.cmd(type, \"set\");\r\n\t\t\t\tthis.log(`Saved ${this.id} to ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error saving ${this.id} to ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tsearch (value, index, raw = false) {\r\n\t\t\tconst result = new Map(),\r\n\t\t\t\tfn = typeof value === \"function\",\r\n\t\t\t\trgex = value && typeof value.test === \"function\";\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\t\tif (idx) {\r\n\t\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(\", \") : lkey):\r\n\t\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\t\tif (!result.has(key) && this.has(key)) {\r\n\t\t\t\t\t\t\t\t\t\t\tresult.set(key, this.get(key, raw));\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tvoid 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t\t}\r\n\r\n\t\tasync set (key, data, batch = false, override = false, lazyLoad = false, retry = false) {\r\n\t\t\tlet x = clone(data),\r\n\t\t\t\tmethod, og;\r\n\r\n\t\t\treturn this.exec(async () => {\r\n\t\t\t\tif (key === void 0 || key === null) {\r\n\t\t\t\t\tkey = this.key && x[this.key] !== void 0 ? x[this.key] : uuid();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.beforeSet(key, data, batch, override, lazyLoad, retry);\r\n\r\n\t\t\t\tif (!this.data.has(key)) {\r\n\t\t\t\t\t++this.total;\r\n\t\t\t\t\tthis.size = this.total;\r\n\t\t\t\t\tmethod = \"post\";\r\n\r\n\t\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tog = this.get(key, true);\r\n\t\t\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og, this.pattern);\r\n\t\t\t\t\tmethod = \"put\";\r\n\r\n\t\t\t\t\tif (this.versioning) {\r\n\t\t\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (override === false) {\r\n\t\t\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.data.set(key, x);\r\n\t\t\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null, this.pattern);\r\n\r\n\t\t\t\treturn this.get(key);\r\n\t\t\t}, async arg => {\r\n\t\t\t\tthis.onset(arg, batch, retry, lazyLoad);\r\n\r\n\t\t\t\tif (!lazyLoad) {\r\n\t\t\t\t\tthis.storage(\"set\", key, x).then(success => {\r\n\t\t\t\t\t\tif (success) {\r\n\t\t\t\t\t\t\tthis.log(`Saved ${key} to persistent storage`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, e => this.log(`Error saving ${key} to persistent storage: ${e.message || e.stack || e}`, \"error\"));\r\n\r\n\t\t\t\t\tif (!batch && !retry && this.uri) {\r\n\t\t\t\t\t\tif (this.debounced.has(key)) {\r\n\t\t\t\t\t\t\tclearTimeout(this.debounced.get(key));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.debounced.set(key, setTimeout(async () => {\r\n\t\t\t\t\t\t\tthis.debounced.delete(key);\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tawait this.transmit(key, x, og, override, method);\r\n\r\n\t\t\t\t\t\t\t\tif (og) {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\tawait this.set(key, og, batch, true, lazyLoad, true);\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\tawait this.del(key, true);\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Reverted ${key}`);\r\n\t\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tthis.log(`Failed to revert ${key}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\tthis.log(e.stack || e.message || e, \"error\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this.debounce));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn arg;\r\n\t\t\t}, err => {\r\n\t\t\t\tthis.onerror(\"set\", err);\r\n\t\t\t\tthrow err;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tasync setUri (uri, clear = false) {\r\n\t\t\tthis.uri = uri;\r\n\r\n\t\t\treturn this.uri !== \"\" ? await this.sync(clear) : [];\r\n\t\t}\r\n\r\n\t\tsort (fn, frozen = true) {\r\n\t\t\treturn frozen ? Object.freeze(this.limit(0, this.total, true).sort(fn).map(i => Object.freeze(i))) : this.limit(0, this.total, true).sort(fn);\r\n\t\t}\r\n\r\n\t\tsortBy (index, raw = false) {\r\n\t\t\tconst result = [],\r\n\t\t\t\tkeys = [];\r\n\r\n\t\t\tlet lindex;\r\n\r\n\t\t\tif (!this.indexes.has(index)) {\r\n\t\t\t\tthis.reindex(index);\r\n\t\t\t}\r\n\r\n\t\t\tlindex = this.indexes.get(index);\r\n\t\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\t\treturn raw ? result : this.list(...result);\r\n\t\t}\r\n\r\n\t\tasync storage (...args) {\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst deferreds = Object.keys(this.adapters).map(async i => await this.cmd.apply(this, [i, ...args]));\r\n\r\n\t\t\t\tif (deferreds.length > 0) {\r\n\t\t\t\t\tawait Promise.all(deferreds);\r\n\t\t\t\t\tresult = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = false;\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(e.stack || e.message || e, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tasync sync (clear = false) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tthis.beforeSync(this.uri, clear);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst arg = await this.request(this.uri),\r\n\t\t\t\t\tdata = this.source ? this.crawl(arg[0]) : arg[0];\r\n\r\n\t\t\t\tthis.patch = (arg[2].Allow || arg[2].allow || \"\").includes(\"PATCH\");\r\n\r\n\t\t\t\tif (clear) {\r\n\t\t\t\t\tthis.clear();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = await this.batch(data, \"set\");\r\n\t\t\t\tthis.onsync(result);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.onerror(\"sync\", e[0] || e);\r\n\t\t\t\tthrow e[0] || e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\ttoArray (data, frozen = true) {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (data) {\r\n\t\t\t\tresult = data.map(i => frozen ? i[1] : clone(i[1]));\r\n\t\t\t} else {\r\n\t\t\t\tresult = this.limit(0, this.total, true);\r\n\r\n\t\t\t\tif (frozen) {\r\n\t\t\t\t\teach(result, i => Object.freeze(i));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn frozen ? Object.freeze(result) : result;\r\n\t\t}\r\n\r\n\t\ttoObject (data, frozen = true) {\r\n\t\t\tconst result = !data ? toObjekt(this, frozen) : data.reduce((a, b) => {\r\n\t\t\t\tconst obj = clone(b[1]);\r\n\r\n\t\t\t\tif (frozen) {\r\n\t\t\t\t\tObject.freeze(obj);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ta[b[0]] = obj;\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, {});\r\n\r\n\t\t\treturn frozen ? Object.freeze(result) : result;\r\n\t\t}\r\n\r\n\t\ttransform (input, fn) {\r\n\t\t\treturn typeof fn === \"function\" ? fn(input) : cast(input);\r\n\t\t}\r\n\r\n\t\tasync transmit (key, data, og, override = false, method = \"post\") {\r\n\t\t\tconst uri = concatURI(this.uri, data ? key : null);\r\n\r\n\t\t\tlet body, result;\r\n\r\n\t\t\tif (this.patch) {\r\n\t\t\t\tif (data === void 0) {\r\n\t\t\t\t\tbody = [{op: \"remove\", path: \"/\", value: key}];\r\n\t\t\t\t} else if (og === void 0) {\r\n\t\t\t\t\tbody = [{op: \"add\", path: \"/\", value: data}];\r\n\t\t\t\t} else if (override) {\r\n\t\t\t\t\tbody = [{op: \"replace\", path: \"/\", value: data}];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbody = createPatch(og, data, this.key);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tresult = await this.request(uri, {method: \"patch\", headers: {\"content-type\": \"application/json-patch+json\"}, body: JSON.stringify(body, null, 0)});\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tif (e[1] === 405) {\r\n\t\t\t\t\t\tthis.patch = false;\r\n\t\t\t\t\t\tresult = await this.request(!data ? concatURI(this.uri, key) : uri, {\r\n\t\t\t\t\t\t\tmethod: method,\r\n\t\t\t\t\t\t\theaders: {\"content-type\": \"application/json\"},\r\n\t\t\t\t\t\t\tbody: JSON.stringify(data, null, 0)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult = await this.request(uri, {method: method, headers: {\"content-type\": \"application/json\"}, body: JSON.stringify(data, null, 0)});\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tasync unload (type = \"mongo\", key = void 0) {\r\n\t\t\tconst id = key !== void 0 ? key : this.id;\r\n\t\t\tlet result;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tresult = await this.cmd(type, \"remove\", key);\r\n\t\t\t\tthis.log(`Unloaded ${id} from ${type} persistent storage`);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tthis.log(`Error unloading ${id} from ${type} persistent storage: ${e.message || e.stack || e}`, \"error\");\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tunregister (key) {\r\n\t\t\tdelete adapter[key];\r\n\t\t}\r\n\r\n\t\tvalues () {\r\n\t\t\treturn this.data.values();\r\n\t\t}\r\n\r\n\t\tuseWorker (resolve, reject) {\r\n\t\t\tlet obj;\r\n\r\n\t\t\tif (this.worker) {\r\n\t\t\t\tobj = new Worker(this.worker);\r\n\r\n\t\t\t\tobj.onerror = err => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t\tobj.terminate();\r\n\t\t\t\t};\r\n\r\n\t\t\t\tobj.onmessage = ev => {\r\n\t\t\t\t\tresolve(JSON.parse(ev.data));\r\n\t\t\t\t\tobj.terminate();\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\treject(new Error(webWorkerError));\r\n\t\t\t}\r\n\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\twhere (predicate, raw = false) {\r\n\t\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\t\treturn keys.length > 0 ? this.filter(new Function(\"a\", `return (${keys.map(i => {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\treturn `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}).join(\") && (\")});`), raw) : [];\r\n\t\t}\r\n\t}\r\n\r\n\tfunction factory (data = null, config = {}) {\r\n\t\tconst obj = new Haro(config);\r\n\r\n\t\tif (webWorker) {\r\n\t\t\tobj.worker = node === false ? global.URL.createObjectURL(blob(functions)) : new Function(functions);\r\n\t\t}\r\n\r\n\t\tif (Array.isArray(data)) {\r\n\t\t\tobj.batch(data, \"set\");\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t}\r\n\r\n\tfactory.transform = cast;\r\n\tfactory.version = \"4.3.5\";\r\n\r\n\t// Node, AMD & window supported\r\n\tif (typeof exports !== \"undefined\") {\r\n\t\tmodule.exports = factory;\r\n\t} else if (typeof define === \"function\" && define.amd !== void 0) {\r\n\t\tdefine(() => factory);\r\n\t} else {\r\n\t\tglobal.haro = factory;\r\n\t}\r\n}(typeof window !== \"undefined\" ? window : global));\r\n"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ceac2e4..eb17b08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "4.3.4", + "version": "4.3.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d31f2cc..2251379 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "4.3.4", + "version": "4.3.5", "description": "Harō is a modern immutable DataStore", "main": "lib/haro.js", "scripts": { diff --git a/src/haro.js b/src/haro.js index 8a7a29f..9bb27ac 100644 --- a/src/haro.js +++ b/src/haro.js @@ -680,12 +680,13 @@ } try { - result = await this.request(uri, {method: "patch", body: JSON.stringify(body, null, 0)}); + result = await this.request(uri, {method: "patch", headers: {"content-type": "application/json-patch+json"}, body: JSON.stringify(body, null, 0)}); } catch (e) { if (e[1] === 405) { this.patch = false; result = await this.request(!data ? concatURI(this.uri, key) : uri, { method: method, + headers: {"content-type": "application/json"}, body: JSON.stringify(data, null, 0) }); } else { @@ -693,7 +694,7 @@ } } } else { - result = await this.request(uri, {method: method, body: JSON.stringify(data, null, 0)}); + result = await this.request(uri, {method: method, headers: {"content-type": "application/json"}, body: JSON.stringify(data, null, 0)}); } return result;