From 88aacb28070c43fec012852181318975411bcfac Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Tue, 11 Jun 2024 22:45:28 -0400 Subject: [PATCH] Removing a reference error for node <=16 --- dist/haro.cjs | 6 ++---- dist/haro.js | 6 ++---- dist/haro.min.js | 4 ++-- dist/haro.min.js.map | 2 +- dist/haro.umd.js | 6 ++---- dist/haro.umd.min.js | 4 ++-- dist/haro.umd.min.js.map | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/utils.js | 4 +--- 10 files changed, 16 insertions(+), 24 deletions(-) diff --git a/dist/haro.cjs b/dist/haro.cjs index f071cd4..acdb0a1 100644 --- a/dist/haro.cjs +++ b/dist/haro.cjs @@ -3,7 +3,7 @@ * * @copyright 2024 Jason Mulligan * @license BSD-3-Clause - * @version 15.0.0 + * @version 15.0.1 */ 'use strict'; @@ -36,12 +36,10 @@ const INT_16 = 16; const r = [INT_8, INT_9, STRING_A, STRING_B]; /* istanbul ignore next */ -function shallowClone (arg) { +function clone (arg) { return JSON.parse(JSON.stringify(arg, null, INT_0)); } -const clone = structuredClone ?? shallowClone; - function each (arr = [], fn) { for (const [idx, value] of arr.entries()) { fn(value, idx); diff --git a/dist/haro.js b/dist/haro.js index d0d5ef3..2a6b190 100644 --- a/dist/haro.js +++ b/dist/haro.js @@ -3,7 +3,7 @@ * * @copyright 2024 Jason Mulligan * @license BSD-3-Clause - * @version 15.0.0 + * @version 15.0.1 */ const STRING_COMMA = ","; const STRING_EMPTY = ""; @@ -32,12 +32,10 @@ const INT_16 = 16;/* istanbul ignore next */ const r = [INT_8, INT_9, STRING_A, STRING_B]; /* istanbul ignore next */ -function shallowClone (arg) { +function clone (arg) { return JSON.parse(JSON.stringify(arg, null, INT_0)); } -const clone = structuredClone ?? shallowClone; - function each (arr = [], fn) { for (const [idx, value] of arr.entries()) { fn(value, idx); diff --git a/dist/haro.min.js b/dist/haro.min.js index d342d67..d29982e 100644 --- a/dist/haro.min.js +++ b/dist/haro.min.js @@ -1,5 +1,5 @@ /*! 2024 Jason Mulligan - @version 15.0.0 + @version 15.0.1 */ -const e="",t="|",r="function",s="records",i=0,n=1,a=16,h=[8,9,"a","b"];const o=structuredClone??function(e){return JSON.parse(JSON.stringify(e,null,i))};function c(e=[],t){for(const[r,s]of e.entries())t(s,r);return e}function d(r=e,s=t,n={}){return r.split(s).reduce(((e,t,r)=>{const a=[];return(Array.isArray(n[t])?n[t]:[n[t]]).forEach((t=>r===i?a.push(t):e.forEach((e=>a.push(`${e}${s}${t}`))))),a}),[])}function l(e,t,r,s,n){e.forEach((e=>{const a=t.get(e);c(e.includes(r)?d(e,r,n):Array.isArray(n[e])?n[e]:[n[e]],(e=>{if(a.has(e)){const t=a.get(e);t.delete(s),t.size===i&&a.delete(e)}}))}))}function u(e,t){return e instanceof Object&&t instanceof Object?c(Object.keys(t),(r=>{e[r]instanceof Object&&t[r]instanceof Object?e[r]=u(e[r],t[r]):Array.isArray(e[r])&&Array.isArray(t[r])?e[r]=e[r].concat(t[r]):e[r]=t[r]})):e=Array.isArray(e)&&Array.isArray(t)?e.concat(t):t,e}function f(){return(65536*(Math.random()+n)|i).toString(a).substring(n)}function y(e,t,r,s,i,n){c(null===n?e:[n],(e=>{const n=t.get(e);e.includes(r)?c(d(e,r,i),(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)})):c(Array.isArray(i[e])?i[e]:[i[e]],(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)}))}))}const p="object"==typeof crypto?crypto.randomUUID.bind(crypto):function(){return`${f()}${f()}-${f()}-4${f().slice(i,3)}-${h[Math.floor(4*Math.random())]}${f().slice(i,3)}-${f()}${f()}${f()}`};class m{constructor({delimiter:r=t,id:s=p(),index:i=[],key:n=e,versioning:a=!1}={}){return this.data=new Map,this.delimiter=r,this.id=s,this.index=i,this.indexes=new Map,this.key=n,this.versions=new Map,this.versioning=a,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),Object.defineProperty(this,"size",{enumerable:!0,get:()=>this.data.size}),this.reindex()}batch(e,t="set"){const r="del"===t?e=>this.del(e,!0):e=>this.set(null,e,!0,!0);return this.onbatch(this.beforeBatch(e,t).map(r),t)}beforeBatch(e){return e}beforeClear(){}beforeDelete(){}beforeSet(){}clear(){return this.beforeClear(),this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this}del(e,t=!1){if(!1===this.has(e))throw new Error("Record not found");const r=this.get(e,!0);this.beforeDelete(e,t),l(this.index,this.indexes,this.delimiter,e,r),this.data.delete(e),this.ondelete(e,t),this.versioning&&this.versions.delete(e)}dump(e=s){let t;return t=e===s?Array.from(this.entries()):Array.from(this.indexes).map((e=>(e[1]=Array.from(e[1]).map((e=>(e[1]=Array.from(e[1]),e))),e))),t}entries(){return this.data.entries()}find(e={},t=!1){const r=Object.keys(e).sort(((e,t)=>e.localeCompare(t))).join(this.delimiter),s=this.indexes.get(r)||new Map;let i=[];if(s.size>0){const n=d(r,this.delimiter,e);i=Array.from(n.reduce(((e,t)=>(s.has(t)&&s.get(t).forEach((t=>e.add(t))),e)),new Set)).map((e=>this.get(e,t)))}return t?i:this.list(...i)}filter(e=(()=>{}),t=!1){const r=t?(e,t)=>t:(e,t)=>Object.freeze([e,Object.freeze(t)]),s=this.reduce(((t,s,i,n)=>(e.call(n,s)&&t.push(r(i,s)),t)),[]);return t?s:Object.freeze(s)}forEach(e,t){return this.data.forEach(((t,r)=>e(o(t),o(r))),t||this.data),this}get(e,t=!1){const r=o(this.data.get(e)||null);return t?r:this.list(e,r)}has(e){return this.data.has(e)}keys(){return this.data.keys()}limit(e=i,t=i,r=!1){const s=this.registry.slice(e,e+t).map((e=>this.get(e,r)));return r?s:this.list(...s)}list(...e){return Object.freeze(e.map((e=>Object.freeze(e))))}map(e,t=!1){const r=[];return this.forEach(((t,s)=>r.push(e(t,s)))),t?r:this.list(...r)}onbatch(e){return e}onclear(){}ondelete(){}onoverride(){}onset(){}override(e,t=s){if("indexes"===t)this.indexes=new Map(e.map((e=>[e[0],new Map(e[1].map((e=>[e[0],new Set(e[1])])))])));else{if(t!==s)throw new Error("Invalid type");this.indexes.clear(),this.data=new Map(e)}return this.onoverride(t),!0}reduce(e,t,r=!1){let s=t||this.data.keys().next().value;return this.forEach(((t,i)=>{s=e(s,t,i,this,r)}),this),s}reindex(e){const t=e?[e]:this.index;return e&&!1===this.index.includes(e)&&this.index.push(e),c(t,(e=>this.indexes.set(e,new Map))),this.forEach(((e,r)=>c(t,(t=>y(this.index,this.indexes,this.delimiter,r,e,t))))),this}search(e,t,s=!1){const i=new Map,n=typeof e===r,a=e&&typeof e.test===r;return e&&c(t?Array.isArray(t)?t:[t]:this.index,(t=>{let r=this.indexes.get(t);r&&r.forEach(((r,h)=>{switch(!0){case n&&e(h,t):case a&&e.test(Array.isArray(h)?h.join(","):h):case h===e:r.forEach((e=>{!1===i.has(e)&&this.has(e)&&i.set(e,this.get(e,s))}))}}))})),s?Array.from(i.values()):this.list(...Array.from(i.values()))}set(e=null,t={},r=!1,s=!1){let i=o(t);if(null===e&&(this.key in i?e=i[this.key]:i[this.key]=e=p()),this.beforeSet(e,i,r,s),!1===this.has(e))this.versioning&&this.versions.set(e,new Set);else{let t=this.get(e,!0);l(this.index,this.indexes,this.delimiter,e,t),this.versioning&&this.versions.get(e).add(Object.freeze(o(t))),!1===s&&(i=u(o(t),i))}this.data.set(e,i),y(this.index,this.indexes,this.delimiter,e,i,null);let n=this.get(e);return this.onset(n,r),n}sort(e,t=!0){return t?Object.freeze(this.limit(i,this.data.size,!0).sort(e).map((e=>Object.freeze(e)))):this.limit(i,this.data.size,!0).sort(e)}sortBy(t=e,r=!1){if(t===e)throw new Error("Invalid field");const s=[],i=[];!1===this.indexes.has(t)&&this.reindex(t);const n=this.indexes.get(t);return n.forEach(((e,t)=>i.push(t))),c(i.sort(),(e=>n.get(e).forEach((e=>s.push(this.get(e,r)))))),r?s:this.list(...s)}toArray(e=!0){const t=Array.from(this.data.values());return e&&(c(t,(e=>Object.freeze(e))),Object.freeze(t)),t}values(){return this.data.values()}where(e={},t=!1,r="||"){const s=this.index.filter((t=>t in e));return s.length>i?this.filter(new Function("a",`return (${s.map((t=>{let s;if(Array.isArray(e[t]))s=`Array.isArray(a['${t}']) ? ${e[t].map((e=>`a['${t}'].includes(${"string"==typeof e?`'${e}'`:e})`)).join(` ${r} `)} : (${e[t].map((e=>`a['${t}'] === ${"string"==typeof e?`'${e}'`:e}`)).join(` ${r} `)})`;else if(e[t]instanceof RegExp)s=`Array.isArray(a['${t}']) ? a['${t}'].filter(i => ${e[t]}.test(a['${t}'])).length > 0 : ${e[t]}.test(a['${t}'])`;else{const r="string"==typeof e[t]?`'${e[t]}'`:e[t];s=`Array.isArray(a['${t}']) ? a['${t}'].includes(${r}) : a['${t}'] === ${r}`}return s})).join(") && (")});`),t):[]}}function g(e=null,t={}){const r=new m(t);return Array.isArray(e)&&r.batch(e,"set"),r}export{m as Haro,g as haro};//# sourceMappingURL=haro.min.js.map +const e="",t="|",r="function",s="records",i=0,n=1,a=16,h=[8,9,"a","b"];function o(e){return JSON.parse(JSON.stringify(e,null,i))}function c(e=[],t){for(const[r,s]of e.entries())t(s,r);return e}function d(r=e,s=t,n={}){return r.split(s).reduce(((e,t,r)=>{const a=[];return(Array.isArray(n[t])?n[t]:[n[t]]).forEach((t=>r===i?a.push(t):e.forEach((e=>a.push(`${e}${s}${t}`))))),a}),[])}function l(e,t,r,s,n){e.forEach((e=>{const a=t.get(e);c(e.includes(r)?d(e,r,n):Array.isArray(n[e])?n[e]:[n[e]],(e=>{if(a.has(e)){const t=a.get(e);t.delete(s),t.size===i&&a.delete(e)}}))}))}function f(e,t){return e instanceof Object&&t instanceof Object?c(Object.keys(t),(r=>{e[r]instanceof Object&&t[r]instanceof Object?e[r]=f(e[r],t[r]):Array.isArray(e[r])&&Array.isArray(t[r])?e[r]=e[r].concat(t[r]):e[r]=t[r]})):e=Array.isArray(e)&&Array.isArray(t)?e.concat(t):t,e}function u(){return(65536*(Math.random()+n)|i).toString(a).substring(n)}function y(e,t,r,s,i,n){c(null===n?e:[n],(e=>{const n=t.get(e);e.includes(r)?c(d(e,r,i),(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)})):c(Array.isArray(i[e])?i[e]:[i[e]],(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)}))}))}const p="object"==typeof crypto?crypto.randomUUID.bind(crypto):function(){return`${u()}${u()}-${u()}-4${u().slice(i,3)}-${h[Math.floor(4*Math.random())]}${u().slice(i,3)}-${u()}${u()}${u()}`};class m{constructor({delimiter:r=t,id:s=p(),index:i=[],key:n=e,versioning:a=!1}={}){return this.data=new Map,this.delimiter=r,this.id=s,this.index=i,this.indexes=new Map,this.key=n,this.versions=new Map,this.versioning=a,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),Object.defineProperty(this,"size",{enumerable:!0,get:()=>this.data.size}),this.reindex()}batch(e,t="set"){const r="del"===t?e=>this.del(e,!0):e=>this.set(null,e,!0,!0);return this.onbatch(this.beforeBatch(e,t).map(r),t)}beforeBatch(e){return e}beforeClear(){}beforeDelete(){}beforeSet(){}clear(){return this.beforeClear(),this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this}del(e,t=!1){if(!1===this.has(e))throw new Error("Record not found");const r=this.get(e,!0);this.beforeDelete(e,t),l(this.index,this.indexes,this.delimiter,e,r),this.data.delete(e),this.ondelete(e,t),this.versioning&&this.versions.delete(e)}dump(e=s){let t;return t=e===s?Array.from(this.entries()):Array.from(this.indexes).map((e=>(e[1]=Array.from(e[1]).map((e=>(e[1]=Array.from(e[1]),e))),e))),t}entries(){return this.data.entries()}find(e={},t=!1){const r=Object.keys(e).sort(((e,t)=>e.localeCompare(t))).join(this.delimiter),s=this.indexes.get(r)||new Map;let i=[];if(s.size>0){const n=d(r,this.delimiter,e);i=Array.from(n.reduce(((e,t)=>(s.has(t)&&s.get(t).forEach((t=>e.add(t))),e)),new Set)).map((e=>this.get(e,t)))}return t?i:this.list(...i)}filter(e=(()=>{}),t=!1){const r=t?(e,t)=>t:(e,t)=>Object.freeze([e,Object.freeze(t)]),s=this.reduce(((t,s,i,n)=>(e.call(n,s)&&t.push(r(i,s)),t)),[]);return t?s:Object.freeze(s)}forEach(e,t){return this.data.forEach(((t,r)=>e(o(t),o(r))),t||this.data),this}get(e,t=!1){const r=o(this.data.get(e)||null);return t?r:this.list(e,r)}has(e){return this.data.has(e)}keys(){return this.data.keys()}limit(e=i,t=i,r=!1){const s=this.registry.slice(e,e+t).map((e=>this.get(e,r)));return r?s:this.list(...s)}list(...e){return Object.freeze(e.map((e=>Object.freeze(e))))}map(e,t=!1){const r=[];return this.forEach(((t,s)=>r.push(e(t,s)))),t?r:this.list(...r)}onbatch(e){return e}onclear(){}ondelete(){}onoverride(){}onset(){}override(e,t=s){if("indexes"===t)this.indexes=new Map(e.map((e=>[e[0],new Map(e[1].map((e=>[e[0],new Set(e[1])])))])));else{if(t!==s)throw new Error("Invalid type");this.indexes.clear(),this.data=new Map(e)}return this.onoverride(t),!0}reduce(e,t,r=!1){let s=t||this.data.keys().next().value;return this.forEach(((t,i)=>{s=e(s,t,i,this,r)}),this),s}reindex(e){const t=e?[e]:this.index;return e&&!1===this.index.includes(e)&&this.index.push(e),c(t,(e=>this.indexes.set(e,new Map))),this.forEach(((e,r)=>c(t,(t=>y(this.index,this.indexes,this.delimiter,r,e,t))))),this}search(e,t,s=!1){const i=new Map,n=typeof e===r,a=e&&typeof e.test===r;return e&&c(t?Array.isArray(t)?t:[t]:this.index,(t=>{let r=this.indexes.get(t);r&&r.forEach(((r,h)=>{switch(!0){case n&&e(h,t):case a&&e.test(Array.isArray(h)?h.join(","):h):case h===e:r.forEach((e=>{!1===i.has(e)&&this.has(e)&&i.set(e,this.get(e,s))}))}}))})),s?Array.from(i.values()):this.list(...Array.from(i.values()))}set(e=null,t={},r=!1,s=!1){let i=o(t);if(null===e&&(this.key in i?e=i[this.key]:i[this.key]=e=p()),this.beforeSet(e,i,r,s),!1===this.has(e))this.versioning&&this.versions.set(e,new Set);else{let t=this.get(e,!0);l(this.index,this.indexes,this.delimiter,e,t),this.versioning&&this.versions.get(e).add(Object.freeze(o(t))),!1===s&&(i=f(o(t),i))}this.data.set(e,i),y(this.index,this.indexes,this.delimiter,e,i,null);let n=this.get(e);return this.onset(n,r),n}sort(e,t=!0){return t?Object.freeze(this.limit(i,this.data.size,!0).sort(e).map((e=>Object.freeze(e)))):this.limit(i,this.data.size,!0).sort(e)}sortBy(t=e,r=!1){if(t===e)throw new Error("Invalid field");const s=[],i=[];!1===this.indexes.has(t)&&this.reindex(t);const n=this.indexes.get(t);return n.forEach(((e,t)=>i.push(t))),c(i.sort(),(e=>n.get(e).forEach((e=>s.push(this.get(e,r)))))),r?s:this.list(...s)}toArray(e=!0){const t=Array.from(this.data.values());return e&&(c(t,(e=>Object.freeze(e))),Object.freeze(t)),t}values(){return this.data.values()}where(e={},t=!1,r="||"){const s=this.index.filter((t=>t in e));return s.length>i?this.filter(new Function("a",`return (${s.map((t=>{let s;if(Array.isArray(e[t]))s=`Array.isArray(a['${t}']) ? ${e[t].map((e=>`a['${t}'].includes(${"string"==typeof e?`'${e}'`:e})`)).join(` ${r} `)} : (${e[t].map((e=>`a['${t}'] === ${"string"==typeof e?`'${e}'`:e}`)).join(` ${r} `)})`;else if(e[t]instanceof RegExp)s=`Array.isArray(a['${t}']) ? a['${t}'].filter(i => ${e[t]}.test(a['${t}'])).length > 0 : ${e[t]}.test(a['${t}'])`;else{const r="string"==typeof e[t]?`'${e[t]}'`:e[t];s=`Array.isArray(a['${t}']) ? a['${t}'].includes(${r}) : a['${t}'] === ${r}`}return s})).join(") && (")});`),t):[]}}function g(e=null,t={}){const r=new m(t);return Array.isArray(e)&&r.batch(e,"set"),r}export{m as Haro,g as haro};//# sourceMappingURL=haro.min.js.map diff --git a/dist/haro.min.js.map b/dist/haro.min.js.map index 1c2e397..3564f74 100644 --- a/dist/haro.min.js.map +++ b/dist/haro.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.min.js","sources":["../src/constants.js","../src/utils.js","../src/haro.js"],"sourcesContent":["export const STRING_COMMA = \",\";\r\nexport const STRING_EMPTY = \"\";\r\nexport const STRING_PIPE = \"|\";\r\nexport const STRING_DOUBLE_PIPE = \"||\";\r\nexport const STRING_A = \"a\";\r\nexport const STRING_B = \"b\";\r\nexport const STRING_DEL = \"del\";\r\nexport const STRING_FUNCTION = \"function\";\r\nexport const STRING_INDEXES = \"indexes\";\r\nexport const STRING_INVALID_FIELD = \"Invalid field\";\r\nexport const STRING_INVALID_TYPE = \"Invalid type\";\r\nexport const STRING_OBJECT = \"object\";\r\nexport const STRING_RECORD_NOT_FOUND = \"Record not found\";\r\nexport const STRING_RECORDS = \"records\";\r\nexport const STRING_REGISTRY = \"registry\";\r\nexport const STRING_SET = \"set\";\r\nexport const STRING_SIZE = \"size\";\r\nexport const INT_0 = 0;\r\nexport const INT_1 = 1;\r\nexport const INT_3 = 3;\r\nexport const INT_4 = 4;\r\nexport const INT_8 = 8;\r\nexport const INT_9 = 9;\r\nexport const INT_16 = 16;","import {\r\n\tINT_0,\r\n\tINT_1,\r\n\tINT_16,\r\n\tINT_3,\r\n\tINT_4,\r\n\tINT_8,\r\n\tINT_9,\r\n\tSTRING_A,\r\n\tSTRING_B,\r\n\tSTRING_EMPTY,\r\n\tSTRING_OBJECT,\r\n\tSTRING_PIPE\r\n} from \"./constants.js\";\r\n\r\n/* istanbul ignore next */\r\nconst r = [INT_8, INT_9, STRING_A, STRING_B];\r\n\r\n/* istanbul ignore next */\r\nexport function shallowClone (arg) {\r\n\treturn JSON.parse(JSON.stringify(arg, null, INT_0));\r\n}\r\n\r\nexport const clone = structuredClone ?? shallowClone;\r\n\r\nexport function each (arr = [], fn) {\r\n\tfor (const [idx, value] of arr.entries()) {\r\n\t\tfn(value, idx);\r\n\t}\r\n\r\n\treturn arr;\r\n}\r\n\r\nexport function indexKeys (arg = STRING_EMPTY, delimiter = STRING_PIPE, data = {}) {\r\n\treturn arg.split(delimiter).reduce((a, li, lidx) => {\r\n\t\tconst result = [];\r\n\r\n\t\t(Array.isArray(data[li]) ? data[li] : [data[li]]).forEach(lli => lidx === INT_0 ? result.push(lli) : a.forEach(x => result.push(`${x}${delimiter}${lli}`)));\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n}\r\n\r\nexport function delIndex (index, indexes, delimiter, key, data) {\r\n\tindex.forEach(i => {\r\n\t\tconst idx = indexes.get(i);\r\n\r\n\t\teach(i.includes(delimiter) ? indexKeys(i, delimiter, data) : Array.isArray(data[i]) ? data[i] : [data[i]], value => {\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 === INT_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\r\nexport function merge (a, b) {\r\n\tif (a instanceof Object && b instanceof Object) {\r\n\t\teach(Object.keys(b), i => {\r\n\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t} else {\r\n\t\t\t\ta[i] = b[i];\r\n\t\t\t}\r\n\t\t});\r\n\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\ta = a.concat(b);\r\n\t} else {\r\n\t\ta = b;\r\n\t}\r\n\r\n\treturn a;\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function s () {\r\n\treturn ((Math.random() + INT_1) * 0x10000 | INT_0).toString(INT_16).substring(INT_1);\r\n}\r\n\r\nexport function setIndex (index, indexes, delimiter, key, data, indice) {\r\n\teach(indice === null ? index : [indice], i => {\r\n\t\tconst lindex = indexes.get(i);\r\n\r\n\t\tif (i.includes(delimiter)) {\r\n\t\t\teach(indexKeys(i, delimiter, data), c => {\r\n\t\t\t\tif (lindex.has(c) === false) {\r\n\t\t\t\t\tlindex.set(c, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(c).add(key);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teach(Array.isArray(data[i]) ? data[i] : [data[i]], d => {\r\n\t\t\t\tif (lindex.has(d) === false) {\r\n\t\t\t\t\tlindex.set(d, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(d).add(key);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/* istanbul ignore next */\r\nfunction customUUID () {\r\n\treturn `${s()}${s()}-${s()}-4${s().slice(INT_0, INT_3)}-${r[Math.floor(Math.random() * INT_4)]}${s().slice(INT_0, INT_3)}-${s()}${s()}${s()}`;\r\n}\r\n\r\nexport const uuid = typeof crypto === STRING_OBJECT ? crypto.randomUUID.bind(crypto) : customUUID;\r\n","import {clone, delIndex, each, indexKeys, merge, setIndex, uuid} from \"./utils.js\";\r\nimport {\r\n\tINT_0,\r\n\tSTRING_A,\r\n\tSTRING_COMMA,\r\n\tSTRING_DEL,\r\n\tSTRING_DOUBLE_PIPE,\r\n\tSTRING_EMPTY,\r\n\tSTRING_FUNCTION,\r\n\tSTRING_INDEXES,\r\n\tSTRING_INVALID_FIELD,\r\n\tSTRING_INVALID_TYPE,\r\n\tSTRING_PIPE,\r\n\tSTRING_RECORD_NOT_FOUND,\r\n\tSTRING_RECORDS,\r\n\tSTRING_REGISTRY,\r\n\tSTRING_SET,\r\n\tSTRING_SIZE\r\n} from \"./constants.js\";\r\n\r\nexport class Haro {\r\n\tconstructor ({delimiter = STRING_PIPE, id = uuid(), index = [], key = STRING_EMPTY, versioning = false} = {}) {\r\n\t\tthis.data = new Map();\r\n\t\tthis.delimiter = delimiter;\r\n\t\tthis.id = id;\r\n\t\tthis.index = index;\r\n\t\tthis.indexes = new Map();\r\n\t\tthis.key = key;\r\n\t\tthis.versions = new Map();\r\n\t\tthis.versioning = versioning;\r\n\r\n\t\tObject.defineProperty(this, STRING_REGISTRY, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t});\r\n\r\n\t\tObject.defineProperty(this, STRING_SIZE, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => this.data.size\r\n\t\t});\r\n\r\n\t\treturn this.reindex();\r\n\t}\r\n\r\n\tbatch (args, type = STRING_SET) {\r\n\t\tconst fn = type === STRING_DEL ? i => this.del(i, true) : i => this.set(null, i, true, true);\r\n\r\n\t\treturn this.onbatch(this.beforeBatch(args, type).map(fn), type);\r\n\t}\r\n\r\n\tbeforeBatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tbeforeClear () {\r\n\t}\r\n\r\n\tbeforeDelete () {\r\n\t}\r\n\r\n\tbeforeSet () {\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.beforeClear();\r\n\t\tthis.data.clear();\r\n\t\tthis.indexes.clear();\r\n\t\tthis.versions.clear();\r\n\t\tthis.reindex().onclear();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdel (key, batch = false) {\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tthrow new Error(STRING_RECORD_NOT_FOUND);\r\n\t\t}\r\n\r\n\t\tconst og = this.get(key, true);\r\n\r\n\t\tthis.beforeDelete(key, batch);\r\n\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\t\tthis.data.delete(key);\r\n\t\tthis.ondelete(key, batch);\r\n\r\n\t\tif (this.versioning) {\r\n\t\t\tthis.versions.delete(key);\r\n\t\t}\r\n\t}\r\n\r\n\tdump (type = STRING_RECORDS) {\r\n\t\tlet result;\r\n\r\n\t\tif (type === STRING_RECORDS) {\r\n\t\t\tresult = Array.from(this.entries());\r\n\t\t} else {\r\n\t\t\tresult = Array.from(this.indexes).map(i => {\r\n\t\t\t\ti[1] = Array.from(i[1]).map(ii => {\r\n\t\t\t\t\tii[1] = Array.from(ii[1]);\r\n\r\n\t\t\t\t\treturn ii;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn i;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tentries () {\r\n\t\treturn this.data.entries();\r\n\t}\r\n\r\n\tfind (where = {}, raw = false) {\r\n\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\tindex = this.indexes.get(key) || new Map();\r\n\t\tlet result = [];\r\n\r\n\t\tif (index.size > 0) {\r\n\t\t\tconst keys = indexKeys(key, this.delimiter, where);\r\n\r\n\t\t\tresult = Array.from(keys.reduce((a, v) => {\r\n\t\t\t\tif (index.has(v)) {\r\n\t\t\t\t\tindex.get(v).forEach(k => a.add(k));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, new Set())).map(i => this.get(i, raw));\r\n\t\t}\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tfilter (fn = () => void 0, raw = false) {\r\n\t\tconst x = raw ? (k, v) => v : (k, v) => Object.freeze([k, Object.freeze(v)]),\r\n\t\t\tresult = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v)) {\r\n\t\t\t\t\ta.push(x(k, v));\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\treturn raw ? result : Object.freeze(result);\r\n\t}\r\n\r\n\tforEach (fn, ctx) {\r\n\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key, raw = false) {\r\n\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\treturn raw ? result : this.list(key, result);\r\n\t}\r\n\r\n\thas (key) {\r\n\t\treturn this.data.has(key);\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn this.data.keys();\r\n\t}\r\n\r\n\tlimit (offset = INT_0, max = INT_0, raw = false) {\r\n\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tlist (...args) {\r\n\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t}\r\n\r\n\tmap (fn, raw = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tonbatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tonclear () {\r\n\t}\r\n\r\n\tondelete () {\r\n\t}\r\n\r\n\tonoverride () {\r\n\t}\r\n\r\n\tonset () {\r\n\t}\r\n\r\n\toverride (data, type = STRING_RECORDS) {\r\n\t\tconst result = true;\r\n\r\n\t\tif (type === STRING_INDEXES) {\r\n\t\t\tthis.indexes = new Map(data.map(i => [i[0], new Map(i[1].map(ii => [ii[0], new Set(ii[1])]))]));\r\n\t\t} else if (type === STRING_RECORDS) {\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.data = new Map(data);\r\n\t\t} else {\r\n\t\t\tthrow new Error(STRING_INVALID_TYPE);\r\n\t\t}\r\n\r\n\t\tthis.onoverride(type);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\treduce (fn, accumulator, raw = false) {\r\n\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\tthis.forEach((v, k) => {\r\n\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t}, this);\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\treindex (index) {\r\n\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\tthis.index.push(index);\r\n\t\t}\r\n\r\n\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i)));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsearch (value, index, raw = false) {\r\n\t\tconst result = new Map(),\r\n\t\t\tfn = typeof value === STRING_FUNCTION,\r\n\t\t\trgex = value && typeof value.test === STRING_FUNCTION;\r\n\r\n\t\tif (value) {\r\n\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\tif (idx) {\r\n\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(STRING_COMMA) : lkey):\r\n\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\tif (result.has(key) === false && this.has(key)) {\r\n\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}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tvoid 0;\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\t\t}\r\n\r\n\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t}\r\n\r\n\tset (key = null, data = {}, batch = false, override = false) {\r\n\t\tlet x = clone(data);\r\n\r\n\t\tif (key === null) {\r\n\t\t\tif (this.key in x) {\r\n\t\t\t\tkey = x[this.key];\r\n\t\t\t} else {\r\n\t\t\t\tx[this.key] = key = uuid();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.beforeSet(key, x, batch, override);\r\n\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlet og = this.get(key, true);\r\n\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t}\r\n\r\n\t\t\tif (override === false) {\r\n\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.data.set(key, x);\r\n\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null);\r\n\t\tlet result = this.get(key);\r\n\t\tthis.onset(result, batch);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsort (fn, frozen = true) {\r\n\t\treturn frozen ? Object.freeze(this.limit(INT_0, this.data.size, true).sort(fn).map(i => Object.freeze(i))) : this.limit(INT_0, this.data.size, true).sort(fn);\r\n\t}\r\n\r\n\tsortBy (index = STRING_EMPTY, raw = false) {\r\n\t\tif (index === STRING_EMPTY) {\r\n\t\t\tthrow new Error(STRING_INVALID_FIELD)\r\n\t\t}\r\n\r\n\t\tconst result = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\tif (this.indexes.has(index) === false) {\r\n\t\t\tthis.reindex(index);\r\n\t\t}\r\n\r\n\t\tconst lindex = this.indexes.get(index);\r\n\r\n\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\ttoArray (frozen = true) {\r\n\t\tconst result = Array.from(this.data.values());\r\n\r\n\t\tif (frozen) {\r\n\t\t\teach(result, i => Object.freeze(i));\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\tvalues () {\r\n\t\treturn this.data.values();\r\n\t}\r\n\r\n\twhere (predicate = {}, raw = false, op = STRING_DOUBLE_PIPE) {\r\n\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\treturn keys.length > INT_0 ? this.filter(new Function(STRING_A, `return (${keys.map(i => {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (Array.isArray(predicate[i])) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? ${predicate[i].map(arg => `a['${i}'].includes(${typeof arg === \"string\" ? `'${arg}'` : arg})`).join(` ${op} `)} : (${predicate[i].map(arg => `a['${i}'] === ${typeof arg === \"string\" ? `'${arg}'` : arg}`).join(` ${op} `)})`;\r\n\t\t\t} else if (predicate[i] instanceof RegExp) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].filter(i => ${predicate[i]}.test(a['${i}'])).length > 0 : ${predicate[i]}.test(a['${i}'])`;\r\n\t\t\t} else {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}).join(\") && (\")});`), raw) : [];\r\n\t}\r\n}\r\n\r\nexport function haro (data = null, config = {}) {\r\n\tconst obj = new Haro(config);\r\n\r\n\tif (Array.isArray(data)) {\r\n\t\tobj.batch(data, STRING_SET);\r\n\t}\r\n\r\n\treturn obj;\r\n}\r\n"],"names":["STRING_EMPTY","STRING_PIPE","STRING_FUNCTION","STRING_RECORDS","INT_0","INT_1","INT_16","r","clone","structuredClone","arg","JSON","parse","stringify","each","arr","fn","idx","value","entries","indexKeys","delimiter","data","split","reduce","a","li","lidx","result","Array","isArray","forEach","lli","push","x","delIndex","index","indexes","key","i","get","includes","has","o","delete","size","merge","b","Object","keys","concat","s","Math","random","toString","substring","setIndex","indice","lindex","c","set","Set","add","d","uuid","crypto","randomUUID","bind","slice","floor","Haro","constructor","id","versioning","this","Map","versions","defineProperty","enumerable","from","reindex","batch","args","type","del","onbatch","beforeBatch","map","beforeClear","beforeDelete","beforeSet","clear","onclear","Error","og","ondelete","dump","ii","find","where","raw","sort","localeCompare","join","v","k","list","filter","freeze","ctx","call","limit","offset","max","registry","onoverride","onset","override","accumulator","next","indices","search","rgex","test","lset","lkey","values","frozen","sortBy","toArray","predicate","op","length","Function","RegExp","haro","config","obj"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"haro.min.js","sources":["../src/constants.js","../src/utils.js","../src/haro.js"],"sourcesContent":["export const STRING_COMMA = \",\";\r\nexport const STRING_EMPTY = \"\";\r\nexport const STRING_PIPE = \"|\";\r\nexport const STRING_DOUBLE_PIPE = \"||\";\r\nexport const STRING_A = \"a\";\r\nexport const STRING_B = \"b\";\r\nexport const STRING_DEL = \"del\";\r\nexport const STRING_FUNCTION = \"function\";\r\nexport const STRING_INDEXES = \"indexes\";\r\nexport const STRING_INVALID_FIELD = \"Invalid field\";\r\nexport const STRING_INVALID_TYPE = \"Invalid type\";\r\nexport const STRING_OBJECT = \"object\";\r\nexport const STRING_RECORD_NOT_FOUND = \"Record not found\";\r\nexport const STRING_RECORDS = \"records\";\r\nexport const STRING_REGISTRY = \"registry\";\r\nexport const STRING_SET = \"set\";\r\nexport const STRING_SIZE = \"size\";\r\nexport const INT_0 = 0;\r\nexport const INT_1 = 1;\r\nexport const INT_3 = 3;\r\nexport const INT_4 = 4;\r\nexport const INT_8 = 8;\r\nexport const INT_9 = 9;\r\nexport const INT_16 = 16;","import {\r\n\tINT_0,\r\n\tINT_1,\r\n\tINT_16,\r\n\tINT_3,\r\n\tINT_4,\r\n\tINT_8,\r\n\tINT_9,\r\n\tSTRING_A,\r\n\tSTRING_B,\r\n\tSTRING_EMPTY,\r\n\tSTRING_OBJECT,\r\n\tSTRING_PIPE\r\n} from \"./constants.js\";\r\n\r\n/* istanbul ignore next */\r\nconst r = [INT_8, INT_9, STRING_A, STRING_B];\r\n\r\n/* istanbul ignore next */\r\nexport function clone (arg) {\r\n\treturn JSON.parse(JSON.stringify(arg, null, INT_0));\r\n}\r\n\r\nexport function each (arr = [], fn) {\r\n\tfor (const [idx, value] of arr.entries()) {\r\n\t\tfn(value, idx);\r\n\t}\r\n\r\n\treturn arr;\r\n}\r\n\r\nexport function indexKeys (arg = STRING_EMPTY, delimiter = STRING_PIPE, data = {}) {\r\n\treturn arg.split(delimiter).reduce((a, li, lidx) => {\r\n\t\tconst result = [];\r\n\r\n\t\t(Array.isArray(data[li]) ? data[li] : [data[li]]).forEach(lli => lidx === INT_0 ? result.push(lli) : a.forEach(x => result.push(`${x}${delimiter}${lli}`)));\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n}\r\n\r\nexport function delIndex (index, indexes, delimiter, key, data) {\r\n\tindex.forEach(i => {\r\n\t\tconst idx = indexes.get(i);\r\n\r\n\t\teach(i.includes(delimiter) ? indexKeys(i, delimiter, data) : Array.isArray(data[i]) ? data[i] : [data[i]], value => {\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 === INT_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\r\nexport function merge (a, b) {\r\n\tif (a instanceof Object && b instanceof Object) {\r\n\t\teach(Object.keys(b), i => {\r\n\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t} else {\r\n\t\t\t\ta[i] = b[i];\r\n\t\t\t}\r\n\t\t});\r\n\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\ta = a.concat(b);\r\n\t} else {\r\n\t\ta = b;\r\n\t}\r\n\r\n\treturn a;\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function s () {\r\n\treturn ((Math.random() + INT_1) * 0x10000 | INT_0).toString(INT_16).substring(INT_1);\r\n}\r\n\r\nexport function setIndex (index, indexes, delimiter, key, data, indice) {\r\n\teach(indice === null ? index : [indice], i => {\r\n\t\tconst lindex = indexes.get(i);\r\n\r\n\t\tif (i.includes(delimiter)) {\r\n\t\t\teach(indexKeys(i, delimiter, data), c => {\r\n\t\t\t\tif (lindex.has(c) === false) {\r\n\t\t\t\t\tlindex.set(c, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(c).add(key);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teach(Array.isArray(data[i]) ? data[i] : [data[i]], d => {\r\n\t\t\t\tif (lindex.has(d) === false) {\r\n\t\t\t\t\tlindex.set(d, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(d).add(key);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/* istanbul ignore next */\r\nfunction customUUID () {\r\n\treturn `${s()}${s()}-${s()}-4${s().slice(INT_0, INT_3)}-${r[Math.floor(Math.random() * INT_4)]}${s().slice(INT_0, INT_3)}-${s()}${s()}${s()}`;\r\n}\r\n\r\nexport const uuid = typeof crypto === STRING_OBJECT ? crypto.randomUUID.bind(crypto) : customUUID;\r\n","import {clone, delIndex, each, indexKeys, merge, setIndex, uuid} from \"./utils.js\";\r\nimport {\r\n\tINT_0,\r\n\tSTRING_A,\r\n\tSTRING_COMMA,\r\n\tSTRING_DEL,\r\n\tSTRING_DOUBLE_PIPE,\r\n\tSTRING_EMPTY,\r\n\tSTRING_FUNCTION,\r\n\tSTRING_INDEXES,\r\n\tSTRING_INVALID_FIELD,\r\n\tSTRING_INVALID_TYPE,\r\n\tSTRING_PIPE,\r\n\tSTRING_RECORD_NOT_FOUND,\r\n\tSTRING_RECORDS,\r\n\tSTRING_REGISTRY,\r\n\tSTRING_SET,\r\n\tSTRING_SIZE\r\n} from \"./constants.js\";\r\n\r\nexport class Haro {\r\n\tconstructor ({delimiter = STRING_PIPE, id = uuid(), index = [], key = STRING_EMPTY, versioning = false} = {}) {\r\n\t\tthis.data = new Map();\r\n\t\tthis.delimiter = delimiter;\r\n\t\tthis.id = id;\r\n\t\tthis.index = index;\r\n\t\tthis.indexes = new Map();\r\n\t\tthis.key = key;\r\n\t\tthis.versions = new Map();\r\n\t\tthis.versioning = versioning;\r\n\r\n\t\tObject.defineProperty(this, STRING_REGISTRY, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t});\r\n\r\n\t\tObject.defineProperty(this, STRING_SIZE, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => this.data.size\r\n\t\t});\r\n\r\n\t\treturn this.reindex();\r\n\t}\r\n\r\n\tbatch (args, type = STRING_SET) {\r\n\t\tconst fn = type === STRING_DEL ? i => this.del(i, true) : i => this.set(null, i, true, true);\r\n\r\n\t\treturn this.onbatch(this.beforeBatch(args, type).map(fn), type);\r\n\t}\r\n\r\n\tbeforeBatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tbeforeClear () {\r\n\t}\r\n\r\n\tbeforeDelete () {\r\n\t}\r\n\r\n\tbeforeSet () {\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.beforeClear();\r\n\t\tthis.data.clear();\r\n\t\tthis.indexes.clear();\r\n\t\tthis.versions.clear();\r\n\t\tthis.reindex().onclear();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdel (key, batch = false) {\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tthrow new Error(STRING_RECORD_NOT_FOUND);\r\n\t\t}\r\n\r\n\t\tconst og = this.get(key, true);\r\n\r\n\t\tthis.beforeDelete(key, batch);\r\n\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\t\tthis.data.delete(key);\r\n\t\tthis.ondelete(key, batch);\r\n\r\n\t\tif (this.versioning) {\r\n\t\t\tthis.versions.delete(key);\r\n\t\t}\r\n\t}\r\n\r\n\tdump (type = STRING_RECORDS) {\r\n\t\tlet result;\r\n\r\n\t\tif (type === STRING_RECORDS) {\r\n\t\t\tresult = Array.from(this.entries());\r\n\t\t} else {\r\n\t\t\tresult = Array.from(this.indexes).map(i => {\r\n\t\t\t\ti[1] = Array.from(i[1]).map(ii => {\r\n\t\t\t\t\tii[1] = Array.from(ii[1]);\r\n\r\n\t\t\t\t\treturn ii;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn i;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tentries () {\r\n\t\treturn this.data.entries();\r\n\t}\r\n\r\n\tfind (where = {}, raw = false) {\r\n\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\tindex = this.indexes.get(key) || new Map();\r\n\t\tlet result = [];\r\n\r\n\t\tif (index.size > 0) {\r\n\t\t\tconst keys = indexKeys(key, this.delimiter, where);\r\n\r\n\t\t\tresult = Array.from(keys.reduce((a, v) => {\r\n\t\t\t\tif (index.has(v)) {\r\n\t\t\t\t\tindex.get(v).forEach(k => a.add(k));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, new Set())).map(i => this.get(i, raw));\r\n\t\t}\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tfilter (fn = () => void 0, raw = false) {\r\n\t\tconst x = raw ? (k, v) => v : (k, v) => Object.freeze([k, Object.freeze(v)]),\r\n\t\t\tresult = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v)) {\r\n\t\t\t\t\ta.push(x(k, v));\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\treturn raw ? result : Object.freeze(result);\r\n\t}\r\n\r\n\tforEach (fn, ctx) {\r\n\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key, raw = false) {\r\n\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\treturn raw ? result : this.list(key, result);\r\n\t}\r\n\r\n\thas (key) {\r\n\t\treturn this.data.has(key);\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn this.data.keys();\r\n\t}\r\n\r\n\tlimit (offset = INT_0, max = INT_0, raw = false) {\r\n\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tlist (...args) {\r\n\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t}\r\n\r\n\tmap (fn, raw = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tonbatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tonclear () {\r\n\t}\r\n\r\n\tondelete () {\r\n\t}\r\n\r\n\tonoverride () {\r\n\t}\r\n\r\n\tonset () {\r\n\t}\r\n\r\n\toverride (data, type = STRING_RECORDS) {\r\n\t\tconst result = true;\r\n\r\n\t\tif (type === STRING_INDEXES) {\r\n\t\t\tthis.indexes = new Map(data.map(i => [i[0], new Map(i[1].map(ii => [ii[0], new Set(ii[1])]))]));\r\n\t\t} else if (type === STRING_RECORDS) {\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.data = new Map(data);\r\n\t\t} else {\r\n\t\t\tthrow new Error(STRING_INVALID_TYPE);\r\n\t\t}\r\n\r\n\t\tthis.onoverride(type);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\treduce (fn, accumulator, raw = false) {\r\n\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\tthis.forEach((v, k) => {\r\n\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t}, this);\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\treindex (index) {\r\n\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\tthis.index.push(index);\r\n\t\t}\r\n\r\n\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i)));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsearch (value, index, raw = false) {\r\n\t\tconst result = new Map(),\r\n\t\t\tfn = typeof value === STRING_FUNCTION,\r\n\t\t\trgex = value && typeof value.test === STRING_FUNCTION;\r\n\r\n\t\tif (value) {\r\n\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\tif (idx) {\r\n\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(STRING_COMMA) : lkey):\r\n\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\tif (result.has(key) === false && this.has(key)) {\r\n\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}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tvoid 0;\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\t\t}\r\n\r\n\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t}\r\n\r\n\tset (key = null, data = {}, batch = false, override = false) {\r\n\t\tlet x = clone(data);\r\n\r\n\t\tif (key === null) {\r\n\t\t\tif (this.key in x) {\r\n\t\t\t\tkey = x[this.key];\r\n\t\t\t} else {\r\n\t\t\t\tx[this.key] = key = uuid();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.beforeSet(key, x, batch, override);\r\n\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlet og = this.get(key, true);\r\n\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t}\r\n\r\n\t\t\tif (override === false) {\r\n\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.data.set(key, x);\r\n\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null);\r\n\t\tlet result = this.get(key);\r\n\t\tthis.onset(result, batch);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsort (fn, frozen = true) {\r\n\t\treturn frozen ? Object.freeze(this.limit(INT_0, this.data.size, true).sort(fn).map(i => Object.freeze(i))) : this.limit(INT_0, this.data.size, true).sort(fn);\r\n\t}\r\n\r\n\tsortBy (index = STRING_EMPTY, raw = false) {\r\n\t\tif (index === STRING_EMPTY) {\r\n\t\t\tthrow new Error(STRING_INVALID_FIELD)\r\n\t\t}\r\n\r\n\t\tconst result = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\tif (this.indexes.has(index) === false) {\r\n\t\t\tthis.reindex(index);\r\n\t\t}\r\n\r\n\t\tconst lindex = this.indexes.get(index);\r\n\r\n\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\ttoArray (frozen = true) {\r\n\t\tconst result = Array.from(this.data.values());\r\n\r\n\t\tif (frozen) {\r\n\t\t\teach(result, i => Object.freeze(i));\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\tvalues () {\r\n\t\treturn this.data.values();\r\n\t}\r\n\r\n\twhere (predicate = {}, raw = false, op = STRING_DOUBLE_PIPE) {\r\n\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\treturn keys.length > INT_0 ? this.filter(new Function(STRING_A, `return (${keys.map(i => {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (Array.isArray(predicate[i])) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? ${predicate[i].map(arg => `a['${i}'].includes(${typeof arg === \"string\" ? `'${arg}'` : arg})`).join(` ${op} `)} : (${predicate[i].map(arg => `a['${i}'] === ${typeof arg === \"string\" ? `'${arg}'` : arg}`).join(` ${op} `)})`;\r\n\t\t\t} else if (predicate[i] instanceof RegExp) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].filter(i => ${predicate[i]}.test(a['${i}'])).length > 0 : ${predicate[i]}.test(a['${i}'])`;\r\n\t\t\t} else {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}).join(\") && (\")});`), raw) : [];\r\n\t}\r\n}\r\n\r\nexport function haro (data = null, config = {}) {\r\n\tconst obj = new Haro(config);\r\n\r\n\tif (Array.isArray(data)) {\r\n\t\tobj.batch(data, STRING_SET);\r\n\t}\r\n\r\n\treturn obj;\r\n}\r\n"],"names":["STRING_EMPTY","STRING_PIPE","STRING_FUNCTION","STRING_RECORDS","INT_0","INT_1","INT_16","r","clone","arg","JSON","parse","stringify","each","arr","fn","idx","value","entries","indexKeys","delimiter","data","split","reduce","a","li","lidx","result","Array","isArray","forEach","lli","push","x","delIndex","index","indexes","key","i","get","includes","has","o","delete","size","merge","b","Object","keys","concat","s","Math","random","toString","substring","setIndex","indice","lindex","c","set","Set","add","d","uuid","crypto","randomUUID","bind","slice","floor","Haro","constructor","id","versioning","this","Map","versions","defineProperty","enumerable","from","reindex","batch","args","type","del","onbatch","beforeBatch","map","beforeClear","beforeDelete","beforeSet","clear","onclear","Error","og","ondelete","dump","ii","find","where","raw","sort","localeCompare","join","v","k","list","filter","freeze","ctx","call","limit","offset","max","registry","onoverride","onset","override","accumulator","next","indices","search","rgex","test","lset","lkey","values","frozen","sortBy","toArray","predicate","op","length","Function","RegExp","haro","config","obj"],"mappings":"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"} \ No newline at end of file diff --git a/dist/haro.umd.js b/dist/haro.umd.js index 1e2423d..a7dabdf 100644 --- a/dist/haro.umd.js +++ b/dist/haro.umd.js @@ -3,7 +3,7 @@ * * @copyright 2024 Jason Mulligan * @license BSD-3-Clause - * @version 15.0.0 + * @version 15.0.1 */ (function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f(g.lru={}));})(this,(function(exports){'use strict';const STRING_COMMA = ","; const STRING_EMPTY = ""; @@ -32,12 +32,10 @@ const INT_16 = 16;/* istanbul ignore next */ const r = [INT_8, INT_9, STRING_A, STRING_B]; /* istanbul ignore next */ -function shallowClone (arg) { +function clone (arg) { return JSON.parse(JSON.stringify(arg, null, INT_0)); } -const clone = structuredClone ?? shallowClone; - function each (arr = [], fn) { for (const [idx, value] of arr.entries()) { fn(value, idx); diff --git a/dist/haro.umd.min.js b/dist/haro.umd.min.js index cc2233d..563c7aa 100644 --- a/dist/haro.umd.min.js +++ b/dist/haro.umd.min.js @@ -1,5 +1,5 @@ /*! 2024 Jason Mulligan - @version 15.0.0 + @version 15.0.1 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lru={})}(this,(function(e){"use strict";const t="",r="|",s="function",i="records",n=0,a=1,h=16,o=[8,9,"a","b"];const c=structuredClone??function(e){return JSON.parse(JSON.stringify(e,null,n))};function d(e=[],t){for(const[r,s]of e.entries())t(s,r);return e}function l(e=t,s=r,i={}){return e.split(s).reduce(((e,t,r)=>{const a=[];return(Array.isArray(i[t])?i[t]:[i[t]]).forEach((t=>r===n?a.push(t):e.forEach((e=>a.push(`${e}${s}${t}`))))),a}),[])}function f(e,t,r,s,i){e.forEach((e=>{const a=t.get(e);d(e.includes(r)?l(e,r,i):Array.isArray(i[e])?i[e]:[i[e]],(e=>{if(a.has(e)){const t=a.get(e);t.delete(s),t.size===n&&a.delete(e)}}))}))}function u(e,t){return e instanceof Object&&t instanceof Object?d(Object.keys(t),(r=>{e[r]instanceof Object&&t[r]instanceof Object?e[r]=u(e[r],t[r]):Array.isArray(e[r])&&Array.isArray(t[r])?e[r]=e[r].concat(t[r]):e[r]=t[r]})):e=Array.isArray(e)&&Array.isArray(t)?e.concat(t):t,e}function y(){return(65536*(Math.random()+a)|n).toString(h).substring(a)}function p(e,t,r,s,i,n){d(null===n?e:[n],(e=>{const n=t.get(e);e.includes(r)?d(l(e,r,i),(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)})):d(Array.isArray(i[e])?i[e]:[i[e]],(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)}))}))}const m="object"==typeof crypto?crypto.randomUUID.bind(crypto):function(){return`${y()}${y()}-${y()}-4${y().slice(n,3)}-${o[Math.floor(4*Math.random())]}${y().slice(n,3)}-${y()}${y()}${y()}`};class g{constructor({delimiter:e=r,id:s=m(),index:i=[],key:n=t,versioning:a=!1}={}){return this.data=new Map,this.delimiter=e,this.id=s,this.index=i,this.indexes=new Map,this.key=n,this.versions=new Map,this.versioning=a,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),Object.defineProperty(this,"size",{enumerable:!0,get:()=>this.data.size}),this.reindex()}batch(e,t="set"){const r="del"===t?e=>this.del(e,!0):e=>this.set(null,e,!0,!0);return this.onbatch(this.beforeBatch(e,t).map(r),t)}beforeBatch(e){return e}beforeClear(){}beforeDelete(){}beforeSet(){}clear(){return this.beforeClear(),this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this}del(e,t=!1){if(!1===this.has(e))throw new Error("Record not found");const r=this.get(e,!0);this.beforeDelete(e,t),f(this.index,this.indexes,this.delimiter,e,r),this.data.delete(e),this.ondelete(e,t),this.versioning&&this.versions.delete(e)}dump(e=i){let t;return t=e===i?Array.from(this.entries()):Array.from(this.indexes).map((e=>(e[1]=Array.from(e[1]).map((e=>(e[1]=Array.from(e[1]),e))),e))),t}entries(){return this.data.entries()}find(e={},t=!1){const r=Object.keys(e).sort(((e,t)=>e.localeCompare(t))).join(this.delimiter),s=this.indexes.get(r)||new Map;let i=[];if(s.size>0){const n=l(r,this.delimiter,e);i=Array.from(n.reduce(((e,t)=>(s.has(t)&&s.get(t).forEach((t=>e.add(t))),e)),new Set)).map((e=>this.get(e,t)))}return t?i:this.list(...i)}filter(e=(()=>{}),t=!1){const r=t?(e,t)=>t:(e,t)=>Object.freeze([e,Object.freeze(t)]),s=this.reduce(((t,s,i,n)=>(e.call(n,s)&&t.push(r(i,s)),t)),[]);return t?s:Object.freeze(s)}forEach(e,t){return this.data.forEach(((t,r)=>e(c(t),c(r))),t||this.data),this}get(e,t=!1){const r=c(this.data.get(e)||null);return t?r:this.list(e,r)}has(e){return this.data.has(e)}keys(){return this.data.keys()}limit(e=n,t=n,r=!1){const s=this.registry.slice(e,e+t).map((e=>this.get(e,r)));return r?s:this.list(...s)}list(...e){return Object.freeze(e.map((e=>Object.freeze(e))))}map(e,t=!1){const r=[];return this.forEach(((t,s)=>r.push(e(t,s)))),t?r:this.list(...r)}onbatch(e){return e}onclear(){}ondelete(){}onoverride(){}onset(){}override(e,t=i){if("indexes"===t)this.indexes=new Map(e.map((e=>[e[0],new Map(e[1].map((e=>[e[0],new Set(e[1])])))])));else{if(t!==i)throw new Error("Invalid type");this.indexes.clear(),this.data=new Map(e)}return this.onoverride(t),!0}reduce(e,t,r=!1){let s=t||this.data.keys().next().value;return this.forEach(((t,i)=>{s=e(s,t,i,this,r)}),this),s}reindex(e){const t=e?[e]:this.index;return e&&!1===this.index.includes(e)&&this.index.push(e),d(t,(e=>this.indexes.set(e,new Map))),this.forEach(((e,r)=>d(t,(t=>p(this.index,this.indexes,this.delimiter,r,e,t))))),this}search(e,t,r=!1){const i=new Map,n=typeof e===s,a=e&&typeof e.test===s;return e&&d(t?Array.isArray(t)?t:[t]:this.index,(t=>{let s=this.indexes.get(t);s&&s.forEach(((s,h)=>{switch(!0){case n&&e(h,t):case a&&e.test(Array.isArray(h)?h.join(","):h):case h===e:s.forEach((e=>{!1===i.has(e)&&this.has(e)&&i.set(e,this.get(e,r))}))}}))})),r?Array.from(i.values()):this.list(...Array.from(i.values()))}set(e=null,t={},r=!1,s=!1){let i=c(t);if(null===e&&(this.key in i?e=i[this.key]:i[this.key]=e=m()),this.beforeSet(e,i,r,s),!1===this.has(e))this.versioning&&this.versions.set(e,new Set);else{let t=this.get(e,!0);f(this.index,this.indexes,this.delimiter,e,t),this.versioning&&this.versions.get(e).add(Object.freeze(c(t))),!1===s&&(i=u(c(t),i))}this.data.set(e,i),p(this.index,this.indexes,this.delimiter,e,i,null);let n=this.get(e);return this.onset(n,r),n}sort(e,t=!0){return t?Object.freeze(this.limit(n,this.data.size,!0).sort(e).map((e=>Object.freeze(e)))):this.limit(n,this.data.size,!0).sort(e)}sortBy(e=t,r=!1){if(e===t)throw new Error("Invalid field");const s=[],i=[];!1===this.indexes.has(e)&&this.reindex(e);const n=this.indexes.get(e);return n.forEach(((e,t)=>i.push(t))),d(i.sort(),(e=>n.get(e).forEach((e=>s.push(this.get(e,r)))))),r?s:this.list(...s)}toArray(e=!0){const t=Array.from(this.data.values());return e&&(d(t,(e=>Object.freeze(e))),Object.freeze(t)),t}values(){return this.data.values()}where(e={},t=!1,r="||"){const s=this.index.filter((t=>t in e));return s.length>n?this.filter(new Function("a",`return (${s.map((t=>{let s;if(Array.isArray(e[t]))s=`Array.isArray(a['${t}']) ? ${e[t].map((e=>`a['${t}'].includes(${"string"==typeof e?`'${e}'`:e})`)).join(` ${r} `)} : (${e[t].map((e=>`a['${t}'] === ${"string"==typeof e?`'${e}'`:e}`)).join(` ${r} `)})`;else if(e[t]instanceof RegExp)s=`Array.isArray(a['${t}']) ? a['${t}'].filter(i => ${e[t]}.test(a['${t}'])).length > 0 : ${e[t]}.test(a['${t}'])`;else{const r="string"==typeof e[t]?`'${e[t]}'`:e[t];s=`Array.isArray(a['${t}']) ? a['${t}'].includes(${r}) : a['${t}'] === ${r}`}return s})).join(") && (")});`),t):[]}}e.Haro=g,e.haro=function(e=null,t={}){const r=new g(t);return Array.isArray(e)&&r.batch(e,"set"),r}}));//# sourceMappingURL=haro.umd.min.js.map +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lru={})}(this,(function(e){"use strict";const t="",r="|",s="function",i="records",n=0,a=1,h=16,o=[8,9,"a","b"];function c(e){return JSON.parse(JSON.stringify(e,null,n))}function d(e=[],t){for(const[r,s]of e.entries())t(s,r);return e}function l(e=t,s=r,i={}){return e.split(s).reduce(((e,t,r)=>{const a=[];return(Array.isArray(i[t])?i[t]:[i[t]]).forEach((t=>r===n?a.push(t):e.forEach((e=>a.push(`${e}${s}${t}`))))),a}),[])}function f(e,t,r,s,i){e.forEach((e=>{const a=t.get(e);d(e.includes(r)?l(e,r,i):Array.isArray(i[e])?i[e]:[i[e]],(e=>{if(a.has(e)){const t=a.get(e);t.delete(s),t.size===n&&a.delete(e)}}))}))}function u(e,t){return e instanceof Object&&t instanceof Object?d(Object.keys(t),(r=>{e[r]instanceof Object&&t[r]instanceof Object?e[r]=u(e[r],t[r]):Array.isArray(e[r])&&Array.isArray(t[r])?e[r]=e[r].concat(t[r]):e[r]=t[r]})):e=Array.isArray(e)&&Array.isArray(t)?e.concat(t):t,e}function y(){return(65536*(Math.random()+a)|n).toString(h).substring(a)}function p(e,t,r,s,i,n){d(null===n?e:[n],(e=>{const n=t.get(e);e.includes(r)?d(l(e,r,i),(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)})):d(Array.isArray(i[e])?i[e]:[i[e]],(e=>{!1===n.has(e)&&n.set(e,new Set),n.get(e).add(s)}))}))}const m="object"==typeof crypto?crypto.randomUUID.bind(crypto):function(){return`${y()}${y()}-${y()}-4${y().slice(n,3)}-${o[Math.floor(4*Math.random())]}${y().slice(n,3)}-${y()}${y()}${y()}`};class g{constructor({delimiter:e=r,id:s=m(),index:i=[],key:n=t,versioning:a=!1}={}){return this.data=new Map,this.delimiter=e,this.id=s,this.index=i,this.indexes=new Map,this.key=n,this.versions=new Map,this.versioning=a,Object.defineProperty(this,"registry",{enumerable:!0,get:()=>Array.from(this.data.keys())}),Object.defineProperty(this,"size",{enumerable:!0,get:()=>this.data.size}),this.reindex()}batch(e,t="set"){const r="del"===t?e=>this.del(e,!0):e=>this.set(null,e,!0,!0);return this.onbatch(this.beforeBatch(e,t).map(r),t)}beforeBatch(e){return e}beforeClear(){}beforeDelete(){}beforeSet(){}clear(){return this.beforeClear(),this.data.clear(),this.indexes.clear(),this.versions.clear(),this.reindex().onclear(),this}del(e,t=!1){if(!1===this.has(e))throw new Error("Record not found");const r=this.get(e,!0);this.beforeDelete(e,t),f(this.index,this.indexes,this.delimiter,e,r),this.data.delete(e),this.ondelete(e,t),this.versioning&&this.versions.delete(e)}dump(e=i){let t;return t=e===i?Array.from(this.entries()):Array.from(this.indexes).map((e=>(e[1]=Array.from(e[1]).map((e=>(e[1]=Array.from(e[1]),e))),e))),t}entries(){return this.data.entries()}find(e={},t=!1){const r=Object.keys(e).sort(((e,t)=>e.localeCompare(t))).join(this.delimiter),s=this.indexes.get(r)||new Map;let i=[];if(s.size>0){const n=l(r,this.delimiter,e);i=Array.from(n.reduce(((e,t)=>(s.has(t)&&s.get(t).forEach((t=>e.add(t))),e)),new Set)).map((e=>this.get(e,t)))}return t?i:this.list(...i)}filter(e=(()=>{}),t=!1){const r=t?(e,t)=>t:(e,t)=>Object.freeze([e,Object.freeze(t)]),s=this.reduce(((t,s,i,n)=>(e.call(n,s)&&t.push(r(i,s)),t)),[]);return t?s:Object.freeze(s)}forEach(e,t){return this.data.forEach(((t,r)=>e(c(t),c(r))),t||this.data),this}get(e,t=!1){const r=c(this.data.get(e)||null);return t?r:this.list(e,r)}has(e){return this.data.has(e)}keys(){return this.data.keys()}limit(e=n,t=n,r=!1){const s=this.registry.slice(e,e+t).map((e=>this.get(e,r)));return r?s:this.list(...s)}list(...e){return Object.freeze(e.map((e=>Object.freeze(e))))}map(e,t=!1){const r=[];return this.forEach(((t,s)=>r.push(e(t,s)))),t?r:this.list(...r)}onbatch(e){return e}onclear(){}ondelete(){}onoverride(){}onset(){}override(e,t=i){if("indexes"===t)this.indexes=new Map(e.map((e=>[e[0],new Map(e[1].map((e=>[e[0],new Set(e[1])])))])));else{if(t!==i)throw new Error("Invalid type");this.indexes.clear(),this.data=new Map(e)}return this.onoverride(t),!0}reduce(e,t,r=!1){let s=t||this.data.keys().next().value;return this.forEach(((t,i)=>{s=e(s,t,i,this,r)}),this),s}reindex(e){const t=e?[e]:this.index;return e&&!1===this.index.includes(e)&&this.index.push(e),d(t,(e=>this.indexes.set(e,new Map))),this.forEach(((e,r)=>d(t,(t=>p(this.index,this.indexes,this.delimiter,r,e,t))))),this}search(e,t,r=!1){const i=new Map,n=typeof e===s,a=e&&typeof e.test===s;return e&&d(t?Array.isArray(t)?t:[t]:this.index,(t=>{let s=this.indexes.get(t);s&&s.forEach(((s,h)=>{switch(!0){case n&&e(h,t):case a&&e.test(Array.isArray(h)?h.join(","):h):case h===e:s.forEach((e=>{!1===i.has(e)&&this.has(e)&&i.set(e,this.get(e,r))}))}}))})),r?Array.from(i.values()):this.list(...Array.from(i.values()))}set(e=null,t={},r=!1,s=!1){let i=c(t);if(null===e&&(this.key in i?e=i[this.key]:i[this.key]=e=m()),this.beforeSet(e,i,r,s),!1===this.has(e))this.versioning&&this.versions.set(e,new Set);else{let t=this.get(e,!0);f(this.index,this.indexes,this.delimiter,e,t),this.versioning&&this.versions.get(e).add(Object.freeze(c(t))),!1===s&&(i=u(c(t),i))}this.data.set(e,i),p(this.index,this.indexes,this.delimiter,e,i,null);let n=this.get(e);return this.onset(n,r),n}sort(e,t=!0){return t?Object.freeze(this.limit(n,this.data.size,!0).sort(e).map((e=>Object.freeze(e)))):this.limit(n,this.data.size,!0).sort(e)}sortBy(e=t,r=!1){if(e===t)throw new Error("Invalid field");const s=[],i=[];!1===this.indexes.has(e)&&this.reindex(e);const n=this.indexes.get(e);return n.forEach(((e,t)=>i.push(t))),d(i.sort(),(e=>n.get(e).forEach((e=>s.push(this.get(e,r)))))),r?s:this.list(...s)}toArray(e=!0){const t=Array.from(this.data.values());return e&&(d(t,(e=>Object.freeze(e))),Object.freeze(t)),t}values(){return this.data.values()}where(e={},t=!1,r="||"){const s=this.index.filter((t=>t in e));return s.length>n?this.filter(new Function("a",`return (${s.map((t=>{let s;if(Array.isArray(e[t]))s=`Array.isArray(a['${t}']) ? ${e[t].map((e=>`a['${t}'].includes(${"string"==typeof e?`'${e}'`:e})`)).join(` ${r} `)} : (${e[t].map((e=>`a['${t}'] === ${"string"==typeof e?`'${e}'`:e}`)).join(` ${r} `)})`;else if(e[t]instanceof RegExp)s=`Array.isArray(a['${t}']) ? a['${t}'].filter(i => ${e[t]}.test(a['${t}'])).length > 0 : ${e[t]}.test(a['${t}'])`;else{const r="string"==typeof e[t]?`'${e[t]}'`:e[t];s=`Array.isArray(a['${t}']) ? a['${t}'].includes(${r}) : a['${t}'] === ${r}`}return s})).join(") && (")});`),t):[]}}e.Haro=g,e.haro=function(e=null,t={}){const r=new g(t);return Array.isArray(e)&&r.batch(e,"set"),r}}));//# sourceMappingURL=haro.umd.min.js.map diff --git a/dist/haro.umd.min.js.map b/dist/haro.umd.min.js.map index d2f6695..cb5b37f 100644 --- a/dist/haro.umd.min.js.map +++ b/dist/haro.umd.min.js.map @@ -1 +1 @@ -{"version":3,"file":"haro.umd.min.js","sources":["../src/constants.js","../src/utils.js","../src/haro.js"],"sourcesContent":["export const STRING_COMMA = \",\";\r\nexport const STRING_EMPTY = \"\";\r\nexport const STRING_PIPE = \"|\";\r\nexport const STRING_DOUBLE_PIPE = \"||\";\r\nexport const STRING_A = \"a\";\r\nexport const STRING_B = \"b\";\r\nexport const STRING_DEL = \"del\";\r\nexport const STRING_FUNCTION = \"function\";\r\nexport const STRING_INDEXES = \"indexes\";\r\nexport const STRING_INVALID_FIELD = \"Invalid field\";\r\nexport const STRING_INVALID_TYPE = \"Invalid type\";\r\nexport const STRING_OBJECT = \"object\";\r\nexport const STRING_RECORD_NOT_FOUND = \"Record not found\";\r\nexport const STRING_RECORDS = \"records\";\r\nexport const STRING_REGISTRY = \"registry\";\r\nexport const STRING_SET = \"set\";\r\nexport const STRING_SIZE = \"size\";\r\nexport const INT_0 = 0;\r\nexport const INT_1 = 1;\r\nexport const INT_3 = 3;\r\nexport const INT_4 = 4;\r\nexport const INT_8 = 8;\r\nexport const INT_9 = 9;\r\nexport const INT_16 = 16;","import {\r\n\tINT_0,\r\n\tINT_1,\r\n\tINT_16,\r\n\tINT_3,\r\n\tINT_4,\r\n\tINT_8,\r\n\tINT_9,\r\n\tSTRING_A,\r\n\tSTRING_B,\r\n\tSTRING_EMPTY,\r\n\tSTRING_OBJECT,\r\n\tSTRING_PIPE\r\n} from \"./constants.js\";\r\n\r\n/* istanbul ignore next */\r\nconst r = [INT_8, INT_9, STRING_A, STRING_B];\r\n\r\n/* istanbul ignore next */\r\nexport function shallowClone (arg) {\r\n\treturn JSON.parse(JSON.stringify(arg, null, INT_0));\r\n}\r\n\r\nexport const clone = structuredClone ?? shallowClone;\r\n\r\nexport function each (arr = [], fn) {\r\n\tfor (const [idx, value] of arr.entries()) {\r\n\t\tfn(value, idx);\r\n\t}\r\n\r\n\treturn arr;\r\n}\r\n\r\nexport function indexKeys (arg = STRING_EMPTY, delimiter = STRING_PIPE, data = {}) {\r\n\treturn arg.split(delimiter).reduce((a, li, lidx) => {\r\n\t\tconst result = [];\r\n\r\n\t\t(Array.isArray(data[li]) ? data[li] : [data[li]]).forEach(lli => lidx === INT_0 ? result.push(lli) : a.forEach(x => result.push(`${x}${delimiter}${lli}`)));\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n}\r\n\r\nexport function delIndex (index, indexes, delimiter, key, data) {\r\n\tindex.forEach(i => {\r\n\t\tconst idx = indexes.get(i);\r\n\r\n\t\teach(i.includes(delimiter) ? indexKeys(i, delimiter, data) : Array.isArray(data[i]) ? data[i] : [data[i]], value => {\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 === INT_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\r\nexport function merge (a, b) {\r\n\tif (a instanceof Object && b instanceof Object) {\r\n\t\teach(Object.keys(b), i => {\r\n\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t} else {\r\n\t\t\t\ta[i] = b[i];\r\n\t\t\t}\r\n\t\t});\r\n\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\ta = a.concat(b);\r\n\t} else {\r\n\t\ta = b;\r\n\t}\r\n\r\n\treturn a;\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function s () {\r\n\treturn ((Math.random() + INT_1) * 0x10000 | INT_0).toString(INT_16).substring(INT_1);\r\n}\r\n\r\nexport function setIndex (index, indexes, delimiter, key, data, indice) {\r\n\teach(indice === null ? index : [indice], i => {\r\n\t\tconst lindex = indexes.get(i);\r\n\r\n\t\tif (i.includes(delimiter)) {\r\n\t\t\teach(indexKeys(i, delimiter, data), c => {\r\n\t\t\t\tif (lindex.has(c) === false) {\r\n\t\t\t\t\tlindex.set(c, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(c).add(key);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teach(Array.isArray(data[i]) ? data[i] : [data[i]], d => {\r\n\t\t\t\tif (lindex.has(d) === false) {\r\n\t\t\t\t\tlindex.set(d, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(d).add(key);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/* istanbul ignore next */\r\nfunction customUUID () {\r\n\treturn `${s()}${s()}-${s()}-4${s().slice(INT_0, INT_3)}-${r[Math.floor(Math.random() * INT_4)]}${s().slice(INT_0, INT_3)}-${s()}${s()}${s()}`;\r\n}\r\n\r\nexport const uuid = typeof crypto === STRING_OBJECT ? crypto.randomUUID.bind(crypto) : customUUID;\r\n","import {clone, delIndex, each, indexKeys, merge, setIndex, uuid} from \"./utils.js\";\r\nimport {\r\n\tINT_0,\r\n\tSTRING_A,\r\n\tSTRING_COMMA,\r\n\tSTRING_DEL,\r\n\tSTRING_DOUBLE_PIPE,\r\n\tSTRING_EMPTY,\r\n\tSTRING_FUNCTION,\r\n\tSTRING_INDEXES,\r\n\tSTRING_INVALID_FIELD,\r\n\tSTRING_INVALID_TYPE,\r\n\tSTRING_PIPE,\r\n\tSTRING_RECORD_NOT_FOUND,\r\n\tSTRING_RECORDS,\r\n\tSTRING_REGISTRY,\r\n\tSTRING_SET,\r\n\tSTRING_SIZE\r\n} from \"./constants.js\";\r\n\r\nexport class Haro {\r\n\tconstructor ({delimiter = STRING_PIPE, id = uuid(), index = [], key = STRING_EMPTY, versioning = false} = {}) {\r\n\t\tthis.data = new Map();\r\n\t\tthis.delimiter = delimiter;\r\n\t\tthis.id = id;\r\n\t\tthis.index = index;\r\n\t\tthis.indexes = new Map();\r\n\t\tthis.key = key;\r\n\t\tthis.versions = new Map();\r\n\t\tthis.versioning = versioning;\r\n\r\n\t\tObject.defineProperty(this, STRING_REGISTRY, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t});\r\n\r\n\t\tObject.defineProperty(this, STRING_SIZE, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => this.data.size\r\n\t\t});\r\n\r\n\t\treturn this.reindex();\r\n\t}\r\n\r\n\tbatch (args, type = STRING_SET) {\r\n\t\tconst fn = type === STRING_DEL ? i => this.del(i, true) : i => this.set(null, i, true, true);\r\n\r\n\t\treturn this.onbatch(this.beforeBatch(args, type).map(fn), type);\r\n\t}\r\n\r\n\tbeforeBatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tbeforeClear () {\r\n\t}\r\n\r\n\tbeforeDelete () {\r\n\t}\r\n\r\n\tbeforeSet () {\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.beforeClear();\r\n\t\tthis.data.clear();\r\n\t\tthis.indexes.clear();\r\n\t\tthis.versions.clear();\r\n\t\tthis.reindex().onclear();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdel (key, batch = false) {\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tthrow new Error(STRING_RECORD_NOT_FOUND);\r\n\t\t}\r\n\r\n\t\tconst og = this.get(key, true);\r\n\r\n\t\tthis.beforeDelete(key, batch);\r\n\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\t\tthis.data.delete(key);\r\n\t\tthis.ondelete(key, batch);\r\n\r\n\t\tif (this.versioning) {\r\n\t\t\tthis.versions.delete(key);\r\n\t\t}\r\n\t}\r\n\r\n\tdump (type = STRING_RECORDS) {\r\n\t\tlet result;\r\n\r\n\t\tif (type === STRING_RECORDS) {\r\n\t\t\tresult = Array.from(this.entries());\r\n\t\t} else {\r\n\t\t\tresult = Array.from(this.indexes).map(i => {\r\n\t\t\t\ti[1] = Array.from(i[1]).map(ii => {\r\n\t\t\t\t\tii[1] = Array.from(ii[1]);\r\n\r\n\t\t\t\t\treturn ii;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn i;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tentries () {\r\n\t\treturn this.data.entries();\r\n\t}\r\n\r\n\tfind (where = {}, raw = false) {\r\n\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\tindex = this.indexes.get(key) || new Map();\r\n\t\tlet result = [];\r\n\r\n\t\tif (index.size > 0) {\r\n\t\t\tconst keys = indexKeys(key, this.delimiter, where);\r\n\r\n\t\t\tresult = Array.from(keys.reduce((a, v) => {\r\n\t\t\t\tif (index.has(v)) {\r\n\t\t\t\t\tindex.get(v).forEach(k => a.add(k));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, new Set())).map(i => this.get(i, raw));\r\n\t\t}\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tfilter (fn = () => void 0, raw = false) {\r\n\t\tconst x = raw ? (k, v) => v : (k, v) => Object.freeze([k, Object.freeze(v)]),\r\n\t\t\tresult = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v)) {\r\n\t\t\t\t\ta.push(x(k, v));\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\treturn raw ? result : Object.freeze(result);\r\n\t}\r\n\r\n\tforEach (fn, ctx) {\r\n\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key, raw = false) {\r\n\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\treturn raw ? result : this.list(key, result);\r\n\t}\r\n\r\n\thas (key) {\r\n\t\treturn this.data.has(key);\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn this.data.keys();\r\n\t}\r\n\r\n\tlimit (offset = INT_0, max = INT_0, raw = false) {\r\n\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tlist (...args) {\r\n\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t}\r\n\r\n\tmap (fn, raw = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tonbatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tonclear () {\r\n\t}\r\n\r\n\tondelete () {\r\n\t}\r\n\r\n\tonoverride () {\r\n\t}\r\n\r\n\tonset () {\r\n\t}\r\n\r\n\toverride (data, type = STRING_RECORDS) {\r\n\t\tconst result = true;\r\n\r\n\t\tif (type === STRING_INDEXES) {\r\n\t\t\tthis.indexes = new Map(data.map(i => [i[0], new Map(i[1].map(ii => [ii[0], new Set(ii[1])]))]));\r\n\t\t} else if (type === STRING_RECORDS) {\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.data = new Map(data);\r\n\t\t} else {\r\n\t\t\tthrow new Error(STRING_INVALID_TYPE);\r\n\t\t}\r\n\r\n\t\tthis.onoverride(type);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\treduce (fn, accumulator, raw = false) {\r\n\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\tthis.forEach((v, k) => {\r\n\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t}, this);\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\treindex (index) {\r\n\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\tthis.index.push(index);\r\n\t\t}\r\n\r\n\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i)));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsearch (value, index, raw = false) {\r\n\t\tconst result = new Map(),\r\n\t\t\tfn = typeof value === STRING_FUNCTION,\r\n\t\t\trgex = value && typeof value.test === STRING_FUNCTION;\r\n\r\n\t\tif (value) {\r\n\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\tif (idx) {\r\n\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(STRING_COMMA) : lkey):\r\n\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\tif (result.has(key) === false && this.has(key)) {\r\n\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}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tvoid 0;\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\t\t}\r\n\r\n\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t}\r\n\r\n\tset (key = null, data = {}, batch = false, override = false) {\r\n\t\tlet x = clone(data);\r\n\r\n\t\tif (key === null) {\r\n\t\t\tif (this.key in x) {\r\n\t\t\t\tkey = x[this.key];\r\n\t\t\t} else {\r\n\t\t\t\tx[this.key] = key = uuid();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.beforeSet(key, x, batch, override);\r\n\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlet og = this.get(key, true);\r\n\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t}\r\n\r\n\t\t\tif (override === false) {\r\n\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.data.set(key, x);\r\n\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null);\r\n\t\tlet result = this.get(key);\r\n\t\tthis.onset(result, batch);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsort (fn, frozen = true) {\r\n\t\treturn frozen ? Object.freeze(this.limit(INT_0, this.data.size, true).sort(fn).map(i => Object.freeze(i))) : this.limit(INT_0, this.data.size, true).sort(fn);\r\n\t}\r\n\r\n\tsortBy (index = STRING_EMPTY, raw = false) {\r\n\t\tif (index === STRING_EMPTY) {\r\n\t\t\tthrow new Error(STRING_INVALID_FIELD)\r\n\t\t}\r\n\r\n\t\tconst result = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\tif (this.indexes.has(index) === false) {\r\n\t\t\tthis.reindex(index);\r\n\t\t}\r\n\r\n\t\tconst lindex = this.indexes.get(index);\r\n\r\n\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\ttoArray (frozen = true) {\r\n\t\tconst result = Array.from(this.data.values());\r\n\r\n\t\tif (frozen) {\r\n\t\t\teach(result, i => Object.freeze(i));\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\tvalues () {\r\n\t\treturn this.data.values();\r\n\t}\r\n\r\n\twhere (predicate = {}, raw = false, op = STRING_DOUBLE_PIPE) {\r\n\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\treturn keys.length > INT_0 ? this.filter(new Function(STRING_A, `return (${keys.map(i => {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (Array.isArray(predicate[i])) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? ${predicate[i].map(arg => `a['${i}'].includes(${typeof arg === \"string\" ? `'${arg}'` : arg})`).join(` ${op} `)} : (${predicate[i].map(arg => `a['${i}'] === ${typeof arg === \"string\" ? `'${arg}'` : arg}`).join(` ${op} `)})`;\r\n\t\t\t} else if (predicate[i] instanceof RegExp) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].filter(i => ${predicate[i]}.test(a['${i}'])).length > 0 : ${predicate[i]}.test(a['${i}'])`;\r\n\t\t\t} else {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}).join(\") && (\")});`), raw) : [];\r\n\t}\r\n}\r\n\r\nexport function haro (data = null, config = {}) {\r\n\tconst obj = new Haro(config);\r\n\r\n\tif (Array.isArray(data)) {\r\n\t\tobj.batch(data, STRING_SET);\r\n\t}\r\n\r\n\treturn obj;\r\n}\r\n"],"names":["STRING_EMPTY","STRING_PIPE","STRING_FUNCTION","STRING_RECORDS","INT_0","INT_1","INT_16","r","clone","structuredClone","arg","JSON","parse","stringify","each","arr","fn","idx","value","entries","indexKeys","delimiter","data","split","reduce","a","li","lidx","result","Array","isArray","forEach","lli","push","x","delIndex","index","indexes","key","i","get","includes","has","o","delete","size","merge","b","Object","keys","concat","s","Math","random","toString","substring","setIndex","indice","lindex","c","set","Set","add","d","uuid","crypto","randomUUID","bind","slice","floor","Haro","constructor","id","versioning","this","Map","versions","defineProperty","enumerable","from","reindex","batch","args","type","del","onbatch","beforeBatch","map","beforeClear","beforeDelete","beforeSet","clear","onclear","Error","og","ondelete","dump","ii","find","where","raw","sort","localeCompare","join","v","k","list","filter","freeze","ctx","call","limit","offset","max","registry","onoverride","onset","override","accumulator","next","indices","search","rgex","test","lset","lkey","values","frozen","sortBy","toArray","predicate","op","length","Function","RegExp","exports","haro","config","obj"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"haro.umd.min.js","sources":["../src/constants.js","../src/utils.js","../src/haro.js"],"sourcesContent":["export const STRING_COMMA = \",\";\r\nexport const STRING_EMPTY = \"\";\r\nexport const STRING_PIPE = \"|\";\r\nexport const STRING_DOUBLE_PIPE = \"||\";\r\nexport const STRING_A = \"a\";\r\nexport const STRING_B = \"b\";\r\nexport const STRING_DEL = \"del\";\r\nexport const STRING_FUNCTION = \"function\";\r\nexport const STRING_INDEXES = \"indexes\";\r\nexport const STRING_INVALID_FIELD = \"Invalid field\";\r\nexport const STRING_INVALID_TYPE = \"Invalid type\";\r\nexport const STRING_OBJECT = \"object\";\r\nexport const STRING_RECORD_NOT_FOUND = \"Record not found\";\r\nexport const STRING_RECORDS = \"records\";\r\nexport const STRING_REGISTRY = \"registry\";\r\nexport const STRING_SET = \"set\";\r\nexport const STRING_SIZE = \"size\";\r\nexport const INT_0 = 0;\r\nexport const INT_1 = 1;\r\nexport const INT_3 = 3;\r\nexport const INT_4 = 4;\r\nexport const INT_8 = 8;\r\nexport const INT_9 = 9;\r\nexport const INT_16 = 16;","import {\r\n\tINT_0,\r\n\tINT_1,\r\n\tINT_16,\r\n\tINT_3,\r\n\tINT_4,\r\n\tINT_8,\r\n\tINT_9,\r\n\tSTRING_A,\r\n\tSTRING_B,\r\n\tSTRING_EMPTY,\r\n\tSTRING_OBJECT,\r\n\tSTRING_PIPE\r\n} from \"./constants.js\";\r\n\r\n/* istanbul ignore next */\r\nconst r = [INT_8, INT_9, STRING_A, STRING_B];\r\n\r\n/* istanbul ignore next */\r\nexport function clone (arg) {\r\n\treturn JSON.parse(JSON.stringify(arg, null, INT_0));\r\n}\r\n\r\nexport function each (arr = [], fn) {\r\n\tfor (const [idx, value] of arr.entries()) {\r\n\t\tfn(value, idx);\r\n\t}\r\n\r\n\treturn arr;\r\n}\r\n\r\nexport function indexKeys (arg = STRING_EMPTY, delimiter = STRING_PIPE, data = {}) {\r\n\treturn arg.split(delimiter).reduce((a, li, lidx) => {\r\n\t\tconst result = [];\r\n\r\n\t\t(Array.isArray(data[li]) ? data[li] : [data[li]]).forEach(lli => lidx === INT_0 ? result.push(lli) : a.forEach(x => result.push(`${x}${delimiter}${lli}`)));\r\n\r\n\t\treturn result;\r\n\t}, []);\r\n}\r\n\r\nexport function delIndex (index, indexes, delimiter, key, data) {\r\n\tindex.forEach(i => {\r\n\t\tconst idx = indexes.get(i);\r\n\r\n\t\teach(i.includes(delimiter) ? indexKeys(i, delimiter, data) : Array.isArray(data[i]) ? data[i] : [data[i]], value => {\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 === INT_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\r\nexport function merge (a, b) {\r\n\tif (a instanceof Object && b instanceof Object) {\r\n\t\teach(Object.keys(b), i => {\r\n\t\t\tif (a[i] instanceof Object && b[i] instanceof Object) {\r\n\t\t\t\ta[i] = merge(a[i], b[i]);\r\n\t\t\t} else if (Array.isArray(a[i]) && Array.isArray(b[i])) {\r\n\t\t\t\ta[i] = a[i].concat(b[i]);\r\n\t\t\t} else {\r\n\t\t\t\ta[i] = b[i];\r\n\t\t\t}\r\n\t\t});\r\n\t} else if (Array.isArray(a) && Array.isArray(b)) {\r\n\t\ta = a.concat(b);\r\n\t} else {\r\n\t\ta = b;\r\n\t}\r\n\r\n\treturn a;\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function s () {\r\n\treturn ((Math.random() + INT_1) * 0x10000 | INT_0).toString(INT_16).substring(INT_1);\r\n}\r\n\r\nexport function setIndex (index, indexes, delimiter, key, data, indice) {\r\n\teach(indice === null ? index : [indice], i => {\r\n\t\tconst lindex = indexes.get(i);\r\n\r\n\t\tif (i.includes(delimiter)) {\r\n\t\t\teach(indexKeys(i, delimiter, data), c => {\r\n\t\t\t\tif (lindex.has(c) === false) {\r\n\t\t\t\t\tlindex.set(c, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(c).add(key);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teach(Array.isArray(data[i]) ? data[i] : [data[i]], d => {\r\n\t\t\t\tif (lindex.has(d) === false) {\r\n\t\t\t\t\tlindex.set(d, new Set());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlindex.get(d).add(key);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/* istanbul ignore next */\r\nfunction customUUID () {\r\n\treturn `${s()}${s()}-${s()}-4${s().slice(INT_0, INT_3)}-${r[Math.floor(Math.random() * INT_4)]}${s().slice(INT_0, INT_3)}-${s()}${s()}${s()}`;\r\n}\r\n\r\nexport const uuid = typeof crypto === STRING_OBJECT ? crypto.randomUUID.bind(crypto) : customUUID;\r\n","import {clone, delIndex, each, indexKeys, merge, setIndex, uuid} from \"./utils.js\";\r\nimport {\r\n\tINT_0,\r\n\tSTRING_A,\r\n\tSTRING_COMMA,\r\n\tSTRING_DEL,\r\n\tSTRING_DOUBLE_PIPE,\r\n\tSTRING_EMPTY,\r\n\tSTRING_FUNCTION,\r\n\tSTRING_INDEXES,\r\n\tSTRING_INVALID_FIELD,\r\n\tSTRING_INVALID_TYPE,\r\n\tSTRING_PIPE,\r\n\tSTRING_RECORD_NOT_FOUND,\r\n\tSTRING_RECORDS,\r\n\tSTRING_REGISTRY,\r\n\tSTRING_SET,\r\n\tSTRING_SIZE\r\n} from \"./constants.js\";\r\n\r\nexport class Haro {\r\n\tconstructor ({delimiter = STRING_PIPE, id = uuid(), index = [], key = STRING_EMPTY, versioning = false} = {}) {\r\n\t\tthis.data = new Map();\r\n\t\tthis.delimiter = delimiter;\r\n\t\tthis.id = id;\r\n\t\tthis.index = index;\r\n\t\tthis.indexes = new Map();\r\n\t\tthis.key = key;\r\n\t\tthis.versions = new Map();\r\n\t\tthis.versioning = versioning;\r\n\r\n\t\tObject.defineProperty(this, STRING_REGISTRY, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => Array.from(this.data.keys())\r\n\t\t});\r\n\r\n\t\tObject.defineProperty(this, STRING_SIZE, {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: () => this.data.size\r\n\t\t});\r\n\r\n\t\treturn this.reindex();\r\n\t}\r\n\r\n\tbatch (args, type = STRING_SET) {\r\n\t\tconst fn = type === STRING_DEL ? i => this.del(i, true) : i => this.set(null, i, true, true);\r\n\r\n\t\treturn this.onbatch(this.beforeBatch(args, type).map(fn), type);\r\n\t}\r\n\r\n\tbeforeBatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tbeforeClear () {\r\n\t}\r\n\r\n\tbeforeDelete () {\r\n\t}\r\n\r\n\tbeforeSet () {\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.beforeClear();\r\n\t\tthis.data.clear();\r\n\t\tthis.indexes.clear();\r\n\t\tthis.versions.clear();\r\n\t\tthis.reindex().onclear();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdel (key, batch = false) {\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tthrow new Error(STRING_RECORD_NOT_FOUND);\r\n\t\t}\r\n\r\n\t\tconst og = this.get(key, true);\r\n\r\n\t\tthis.beforeDelete(key, batch);\r\n\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\t\tthis.data.delete(key);\r\n\t\tthis.ondelete(key, batch);\r\n\r\n\t\tif (this.versioning) {\r\n\t\t\tthis.versions.delete(key);\r\n\t\t}\r\n\t}\r\n\r\n\tdump (type = STRING_RECORDS) {\r\n\t\tlet result;\r\n\r\n\t\tif (type === STRING_RECORDS) {\r\n\t\t\tresult = Array.from(this.entries());\r\n\t\t} else {\r\n\t\t\tresult = Array.from(this.indexes).map(i => {\r\n\t\t\t\ti[1] = Array.from(i[1]).map(ii => {\r\n\t\t\t\t\tii[1] = Array.from(ii[1]);\r\n\r\n\t\t\t\t\treturn ii;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn i;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tentries () {\r\n\t\treturn this.data.entries();\r\n\t}\r\n\r\n\tfind (where = {}, raw = false) {\r\n\t\tconst key = Object.keys(where).sort((a, b) => a.localeCompare(b)).join(this.delimiter),\r\n\t\t\tindex = this.indexes.get(key) || new Map();\r\n\t\tlet result = [];\r\n\r\n\t\tif (index.size > 0) {\r\n\t\t\tconst keys = indexKeys(key, this.delimiter, where);\r\n\r\n\t\t\tresult = Array.from(keys.reduce((a, v) => {\r\n\t\t\t\tif (index.has(v)) {\r\n\t\t\t\t\tindex.get(v).forEach(k => a.add(k));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn a;\r\n\t\t\t}, new Set())).map(i => this.get(i, raw));\r\n\t\t}\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tfilter (fn = () => void 0, raw = false) {\r\n\t\tconst x = raw ? (k, v) => v : (k, v) => Object.freeze([k, Object.freeze(v)]),\r\n\t\t\tresult = this.reduce((a, v, k, ctx) => {\r\n\t\t\t\tif (fn.call(ctx, v)) {\r\n\t\t\t\t\ta.push(x(k, v));\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\treturn raw ? result : Object.freeze(result);\r\n\t}\r\n\r\n\tforEach (fn, ctx) {\r\n\t\tthis.data.forEach((value, key) => fn(clone(value), clone(key)), ctx || this.data);\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key, raw = false) {\r\n\t\tconst result = clone(this.data.get(key) || null);\r\n\r\n\t\treturn raw ? result : this.list(key, result);\r\n\t}\r\n\r\n\thas (key) {\r\n\t\treturn this.data.has(key);\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn this.data.keys();\r\n\t}\r\n\r\n\tlimit (offset = INT_0, max = INT_0, raw = false) {\r\n\t\tconst result = this.registry.slice(offset, offset + max).map(i => this.get(i, raw));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tlist (...args) {\r\n\t\treturn Object.freeze(args.map(i => Object.freeze(i)));\r\n\t}\r\n\r\n\tmap (fn, raw = false) {\r\n\t\tconst result = [];\r\n\r\n\t\tthis.forEach((value, key) => result.push(fn(value, key)));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\tonbatch (arg) {\r\n\t\treturn arg;\r\n\t}\r\n\r\n\tonclear () {\r\n\t}\r\n\r\n\tondelete () {\r\n\t}\r\n\r\n\tonoverride () {\r\n\t}\r\n\r\n\tonset () {\r\n\t}\r\n\r\n\toverride (data, type = STRING_RECORDS) {\r\n\t\tconst result = true;\r\n\r\n\t\tif (type === STRING_INDEXES) {\r\n\t\t\tthis.indexes = new Map(data.map(i => [i[0], new Map(i[1].map(ii => [ii[0], new Set(ii[1])]))]));\r\n\t\t} else if (type === STRING_RECORDS) {\r\n\t\t\tthis.indexes.clear();\r\n\t\t\tthis.data = new Map(data);\r\n\t\t} else {\r\n\t\t\tthrow new Error(STRING_INVALID_TYPE);\r\n\t\t}\r\n\r\n\t\tthis.onoverride(type);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\treduce (fn, accumulator, raw = false) {\r\n\t\tlet a = accumulator || this.data.keys().next().value;\r\n\r\n\t\tthis.forEach((v, k) => {\r\n\t\t\ta = fn(a, v, k, this, raw);\r\n\t\t}, this);\r\n\r\n\t\treturn a;\r\n\t}\r\n\r\n\treindex (index) {\r\n\t\tconst indices = index ? [index] : this.index;\r\n\r\n\t\tif (index && this.index.includes(index) === false) {\r\n\t\t\tthis.index.push(index);\r\n\t\t}\r\n\r\n\t\teach(indices, i => this.indexes.set(i, new Map()));\r\n\t\tthis.forEach((data, key) => each(indices, i => setIndex(this.index, this.indexes, this.delimiter, key, data, i)));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsearch (value, index, raw = false) {\r\n\t\tconst result = new Map(),\r\n\t\t\tfn = typeof value === STRING_FUNCTION,\r\n\t\t\trgex = value && typeof value.test === STRING_FUNCTION;\r\n\r\n\t\tif (value) {\r\n\t\t\teach(index ? Array.isArray(index) ? index : [index] : this.index, i => {\r\n\t\t\t\tlet idx = this.indexes.get(i);\r\n\r\n\t\t\t\tif (idx) {\r\n\t\t\t\t\tidx.forEach((lset, lkey) => {\r\n\t\t\t\t\t\tswitch (true) {\r\n\t\t\t\t\t\t\tcase fn && value(lkey, i):\r\n\t\t\t\t\t\t\tcase rgex && value.test(Array.isArray(lkey) ? lkey.join(STRING_COMMA) : lkey):\r\n\t\t\t\t\t\t\tcase lkey === value:\r\n\t\t\t\t\t\t\t\tlset.forEach(key => {\r\n\t\t\t\t\t\t\t\t\tif (result.has(key) === false && this.has(key)) {\r\n\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}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tvoid 0;\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\t\t}\r\n\r\n\t\treturn raw ? Array.from(result.values()) : this.list(...Array.from(result.values()));\r\n\t}\r\n\r\n\tset (key = null, data = {}, batch = false, override = false) {\r\n\t\tlet x = clone(data);\r\n\r\n\t\tif (key === null) {\r\n\t\t\tif (this.key in x) {\r\n\t\t\t\tkey = x[this.key];\r\n\t\t\t} else {\r\n\t\t\t\tx[this.key] = key = uuid();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.beforeSet(key, x, batch, override);\r\n\r\n\t\tif (this.has(key) === false) {\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.set(key, new Set());\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlet og = this.get(key, true);\r\n\t\t\tdelIndex(this.index, this.indexes, this.delimiter, key, og);\r\n\r\n\t\t\tif (this.versioning) {\r\n\t\t\t\tthis.versions.get(key).add(Object.freeze(clone(og)));\r\n\t\t\t}\r\n\r\n\t\t\tif (override === false) {\r\n\t\t\t\tx = merge(clone(og), x);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.data.set(key, x);\r\n\t\tsetIndex(this.index, this.indexes, this.delimiter, key, x, null);\r\n\t\tlet result = this.get(key);\r\n\t\tthis.onset(result, batch);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsort (fn, frozen = true) {\r\n\t\treturn frozen ? Object.freeze(this.limit(INT_0, this.data.size, true).sort(fn).map(i => Object.freeze(i))) : this.limit(INT_0, this.data.size, true).sort(fn);\r\n\t}\r\n\r\n\tsortBy (index = STRING_EMPTY, raw = false) {\r\n\t\tif (index === STRING_EMPTY) {\r\n\t\t\tthrow new Error(STRING_INVALID_FIELD)\r\n\t\t}\r\n\r\n\t\tconst result = [],\r\n\t\t\tkeys = [];\r\n\r\n\t\tif (this.indexes.has(index) === false) {\r\n\t\t\tthis.reindex(index);\r\n\t\t}\r\n\r\n\t\tconst lindex = this.indexes.get(index);\r\n\r\n\t\tlindex.forEach((idx, key) => keys.push(key));\r\n\t\teach(keys.sort(), i => lindex.get(i).forEach(key => result.push(this.get(key, raw))));\r\n\r\n\t\treturn raw ? result : this.list(...result);\r\n\t}\r\n\r\n\ttoArray (frozen = true) {\r\n\t\tconst result = Array.from(this.data.values());\r\n\r\n\t\tif (frozen) {\r\n\t\t\teach(result, i => Object.freeze(i));\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\tvalues () {\r\n\t\treturn this.data.values();\r\n\t}\r\n\r\n\twhere (predicate = {}, raw = false, op = STRING_DOUBLE_PIPE) {\r\n\t\tconst keys = this.index.filter(i => i in predicate);\r\n\r\n\t\treturn keys.length > INT_0 ? this.filter(new Function(STRING_A, `return (${keys.map(i => {\r\n\t\t\tlet result;\r\n\r\n\t\t\tif (Array.isArray(predicate[i])) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? ${predicate[i].map(arg => `a['${i}'].includes(${typeof arg === \"string\" ? `'${arg}'` : arg})`).join(` ${op} `)} : (${predicate[i].map(arg => `a['${i}'] === ${typeof arg === \"string\" ? `'${arg}'` : arg}`).join(` ${op} `)})`;\r\n\t\t\t} else if (predicate[i] instanceof RegExp) {\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].filter(i => ${predicate[i]}.test(a['${i}'])).length > 0 : ${predicate[i]}.test(a['${i}'])`;\r\n\t\t\t} else {\r\n\t\t\t\tconst arg = typeof predicate[i] === \"string\" ? `'${predicate[i]}'` : predicate[i];\r\n\r\n\t\t\t\tresult = `Array.isArray(a['${i}']) ? a['${i}'].includes(${arg}) : a['${i}'] === ${arg}`;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}).join(\") && (\")});`), raw) : [];\r\n\t}\r\n}\r\n\r\nexport function haro (data = null, config = {}) {\r\n\tconst obj = new Haro(config);\r\n\r\n\tif (Array.isArray(data)) {\r\n\t\tobj.batch(data, STRING_SET);\r\n\t}\r\n\r\n\treturn obj;\r\n}\r\n"],"names":["STRING_EMPTY","STRING_PIPE","STRING_FUNCTION","STRING_RECORDS","INT_0","INT_1","INT_16","r","clone","arg","JSON","parse","stringify","each","arr","fn","idx","value","entries","indexKeys","delimiter","data","split","reduce","a","li","lidx","result","Array","isArray","forEach","lli","push","x","delIndex","index","indexes","key","i","get","includes","has","o","delete","size","merge","b","Object","keys","concat","s","Math","random","toString","substring","setIndex","indice","lindex","c","set","Set","add","d","uuid","crypto","randomUUID","bind","slice","floor","Haro","constructor","id","versioning","this","Map","versions","defineProperty","enumerable","from","reindex","batch","args","type","del","onbatch","beforeBatch","map","beforeClear","beforeDelete","beforeSet","clear","onclear","Error","og","ondelete","dump","ii","find","where","raw","sort","localeCompare","join","v","k","list","filter","freeze","ctx","call","limit","offset","max","registry","onoverride","onset","override","accumulator","next","indices","search","rgex","test","lset","lkey","values","frozen","sortBy","toArray","predicate","op","length","Function","RegExp","exports","haro","config","obj"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a71c3e5..0da10f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "haro", - "version": "15.0.0", + "version": "15.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "haro", - "version": "15.0.0", + "version": "15.0.1", "license": "BSD-3-Clause", "devDependencies": { "@eslint/js": "^9.4.0", diff --git a/package.json b/package.json index ca8ff64..d430111 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haro", - "version": "15.0.0", + "version": "15.0.1", "description": "Haro is a modern immutable DataStore", "type": "module", "types": "types/haro.d.ts", diff --git a/src/utils.js b/src/utils.js index ecadccf..b3ef162 100644 --- a/src/utils.js +++ b/src/utils.js @@ -17,12 +17,10 @@ import { const r = [INT_8, INT_9, STRING_A, STRING_B]; /* istanbul ignore next */ -export function shallowClone (arg) { +export function clone (arg) { return JSON.parse(JSON.stringify(arg, null, INT_0)); } -export const clone = structuredClone ?? shallowClone; - export function each (arr = [], fn) { for (const [idx, value] of arr.entries()) { fn(value, idx);