duo-map 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=(e,t,n)=>(e.has(t)||e.set(t,n),e.get(t)),t=(e,t,n)=>(e.has(t)||e.set(t,n(t)),e.get(t)),n=()=>/* @__PURE__ */ new Map;var r=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>e+=t.size),e}set(e,r,i){return t(this.map,e,n).set(r,i),this}get(e,t){return this.map.get(e)?.get(t)}getOrInsert(r,i,a){let o=t(this.map,r,n);return e(o,i,a)}getOrInsertComputed(e,r,i){let a=t(this.map,e,n);return t(a,r,()=>i(e,r))}has(e,t){return this.map.get(e)?.has(t)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:!1}delete(e,t){let n=this.map.get(e);if(!n)return!1;let r=n.delete(t);return n.size===0&&this.map.delete(e),r}deleteBy(...e){if(e.length===1){let t=e[0];return this.map.delete(t)}if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t);if(!r)return!1;let i=r.delete(n);return r.size===0&&this.map.delete(t),i}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let n of t.keys())yield[e,n];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.keys())yield[t,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())yield*e.values();else if(e.length===1){let t=e[0],n=this.map.get(t);n&&(yield*n.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,r];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)yield[t,e,r]}}*[Symbol.iterator](){yield*this.entries()}},i=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>t.forEach(t=>e+=t.size)),e}set(e,r,i,a){let o=t(this.map,e,n);return t(o,r,n).set(i,a),this}get(e,t,n){return this.map.get(e)?.get(t)?.get(n)}getOrInsert(r,i,a,o){let s=t(this.map,r,n),c=t(s,i,n);return e(c,a,o)}getOrInsertComputed(e,r,i,a){let o=t(this.map,e,n),s=t(o,r,n);return t(s,i,()=>a(e,r,i))}has(e,t,n){return this.map.get(e)?.get(t)?.has(n)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:e.length===3?this.map.get(e[0])?.get(e[1])?.has(e[2])??!1:!1}delete(e,t,n){let r=this.map.get(e);if(!r)return!1;let i=r.get(t);if(!i)return!1;let a=i.delete(n);return i.size===0&&(r.delete(t),r.size===0&&this.map.delete(e)),a}deleteBy(...e){if(e.length===1)return this.map.delete(e[0]);if(e.length===2){let t=this.map.get(e[0]);if(!t)return!1;let n=t.delete(e[1]);return t.size===0&&this.map.delete(e[0]),n}if(e.length===3){let t=this.map.get(e[0]);if(!t)return!1;let n=t.get(e[1]);if(!n)return!1;let r=n.delete(e[2]);return n.size===0&&(t.delete(e[1]),t.size===0&&this.map.delete(e[0])),r}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>t.forEach((t,i)=>e(t,n,r,i))))}*keys(){for(let[e,t]of this.map)for(let[n,r]of t)for(let t of r.keys())yield[e,n,t]}*values(){for(let e of this.map.values())for(let t of e.values())yield*t.values()}*entries(){for(let[e,t]of this.map)for(let[n,r]of t)for(let[t,i]of r)yield[e,n,t,i]}*[Symbol.iterator](){yield*this.entries()}};exports.DuoMap=r,exports.TresMap=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=(e,t,n)=>(e.has(t)||e.set(t,n),e.get(t)),t=(e,t,n)=>(e.has(t)||e.set(t,n(t)),e.get(t)),n=()=>/* @__PURE__ */ new Map;var r=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>e+=t.size),e}set(e,r,i){return t(this.map,e,n).set(r,i),this}get(e,t){return this.map.get(e)?.get(t)}getOrInsert(r,i,a){let o=t(this.map,r,n);return e(o,i,a)}getOrInsertComputed(e,r,i){let a=t(this.map,e,n);return t(a,r,()=>i(e,r))}has(e,t){return this.map.get(e)?.has(t)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:!1}delete(e,t){let n=this.map.get(e);if(!n)return!1;let r=n.delete(t);return n.size===0&&this.map.delete(e),r}deleteBy(...e){if(e.length===1){let t=e[0];return this.map.delete(t)}if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t);if(!r)return!1;let i=r.delete(n);return r.size===0&&this.map.delete(t),i}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}forEachBy(e,t){this.map.get(e)?.forEach((n,r)=>t(n,e,r))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let n of t.keys())yield[e,n];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.keys())yield[t,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())yield*e.values();else if(e.length===1){let t=e[0],n=this.map.get(t);n&&(yield*n.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,r];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)yield[t,e,r]}}*[Symbol.iterator](){yield*this.entries()}},i=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>t.forEach(t=>e+=t.size)),e}set(e,r,i,a){let o=t(this.map,e,n);return t(o,r,n).set(i,a),this}get(e,t,n){return this.map.get(e)?.get(t)?.get(n)}getOrInsert(r,i,a,o){let s=t(this.map,r,n),c=t(s,i,n);return e(c,a,o)}getOrInsertComputed(e,r,i,a){let o=t(this.map,e,n),s=t(o,r,n);return t(s,i,()=>a(e,r,i))}has(e,t,n){return this.map.get(e)?.get(t)?.has(n)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:e.length===3?this.map.get(e[0])?.get(e[1])?.has(e[2])??!1:!1}delete(e,t,n){let r=this.map.get(e);if(!r)return!1;let i=r.get(t);if(!i)return!1;let a=i.delete(n);return i.size===0&&(r.delete(t),r.size===0&&this.map.delete(e)),a}deleteBy(...e){if(e.length===1)return this.map.delete(e[0]);if(e.length===2){let t=this.map.get(e[0]);if(!t)return!1;let n=t.delete(e[1]);return t.size===0&&this.map.delete(e[0]),n}if(e.length===3){let t=this.map.get(e[0]);if(!t)return!1;let n=t.get(e[1]);if(!n)return!1;let r=n.delete(e[2]);return n.size===0&&(t.delete(e[1]),t.size===0&&this.map.delete(e[0])),r}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>t.forEach((t,i)=>e(t,n,r,i))))}forEachBy(...e){let t=e[e.length-1];if(typeof t!=`function`)throw TypeError(`TresMap.forEachBy: the last argument must be a function.`);if(e.length<2||e.length>3)throw TypeError(`TresMap.forEachBy: expected 1-2 keys and a callback, got ${e.length-1} keys.`);let n=e[0],r=this.map.get(n);if(!r)return;if(e.length===2){r.forEach((e,r)=>e.forEach((e,i)=>t(e,n,r,i)));return}let i=e[1];r.get(i)?.forEach((e,r)=>t(e,n,i,r))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)for(let t of r.keys())yield[e,n,t];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)for(let n of r.keys())yield[t,e,n]}else if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t)?.get(n);if(r)for(let e of r.keys())yield[t,n,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())for(let t of e.values())yield*t.values();else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.values())yield*e.values()}else if(e.length===2){let t=this.map.get(e[0])?.get(e[1]);t&&(yield*t.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)for(let[t,i]of r)yield[e,n,t,i];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)for(let[n,i]of r)yield[t,e,n,i]}else if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t)?.get(n);if(r)for(let[e,i]of r)yield[t,n,e,i]}}*[Symbol.iterator](){yield*this.entries()}};exports.DuoMap=r,exports.TresMap=i;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","args","result","callback","TresMap","m2","m1","key3"],"sources":["../../_shared/std/map.ts","../src/index.ts"],"sourcesContent":["// # Map\nexport const _getOrInsert = <K, V>(map: Map<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _getOrInsertComputed = <K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n\n// # WeakMap\nexport const _weakGetOrInsert = <K extends WeakKey, V>(map: WeakMap<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _weakGetOrInsertComputed = <K extends WeakKey, V>(\n map: WeakMap<K, V>,\n key: K,\n compute: (key: K) => V,\n): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n","import { _getOrInsertComputed, _getOrInsert } from '@shared/std/map.js';\n\nconst MapConstruct = () => new Map();\n\n/**\n * Creates a two-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template V - The type of the values.\n */\nexport class DuoMap<K1 = any, K2 = any, V = any> {\n private map = new Map<K1, Map<K2, V>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => (count += m.size));\n return count;\n }\n\n set(key1: K1, key2: K2, value: V): this {\n _getOrInsertComputed(this.map, key1, MapConstruct).set(key2, value);\n return this;\n }\n\n get(key1: K1, key2: K2): V | undefined {\n return this.map.get(key1)?.get(key2);\n }\n\n getOrInsert(key1: K1, key2: K2, value: V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsert(m, key2, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsertComputed(m, key2, () => compute(key1, key2));\n }\n\n has(key1: K1, key2: K2): boolean {\n return this.map.get(key1)?.has(key2) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2): boolean;\n hasBy(...args: any[]) {\n if (args.length === 1) {\n return this.map.has(args[0]);\n }\n if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2): boolean {\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n const key1 = args[0];\n return this.map.delete(key1);\n }\n if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.forEach((m, key1) => m.forEach((value, key2) => callback(value, key1, key2)));\n }\n\n keys(key1?: K1): IterableIterator<[K1, K2]>;\n *keys(...args: any[]): IterableIterator<[K1, K2]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n }\n\n values(key1?: K1): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n yield* m.values();\n }\n }\n }\n\n entries(key1?: K1): IterableIterator<[K1, K2, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, V]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, V]> {\n yield* this.entries();\n }\n}\n\n/**\n * Creates a three-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template K3 - The type of the third-level keys.\n * @template V - The type of the values.\n */\nexport class TresMap<K1 = any, K2 = any, K3 = any, V = any> {\n private map = new Map<K1, Map<K2, Map<K3, V>>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => m.forEach((m2) => (count += m2.size)));\n return count;\n }\n\n set(key1: K1, key2: K2, key3: K3, value: V): this {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n _getOrInsertComputed(m1, key2, MapConstruct).set(key3, value);\n return this;\n }\n\n get(key1: K1, key2: K2, key3: K3): V | undefined {\n return this.map.get(key1)?.get(key2)?.get(key3);\n }\n\n getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsert(m2, key3, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsertComputed(m2, key3, () => compute(key1, key2, key3));\n }\n\n has(key1: K1, key2: K2, key3: K3): boolean {\n return this.map.get(key1)?.get(key2)?.has(key3) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2, key3?: K3): boolean;\n hasBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.has(args[0]);\n } else if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n } else if (args.length === 3) {\n return this.map.get(args[0])?.get(args[1])?.has(args[2]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2, key3: K3): boolean {\n const m1 = this.map.get(key1);\n if (!m1) return false;\n const m2 = m1.get(key2);\n if (!m2) return false;\n const result = m2.delete(key3);\n if (m2.size === 0) {\n m1.delete(key2);\n if (m1.size === 0) {\n this.map.delete(key1);\n }\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.delete(args[0]);\n } else if (args.length === 2) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const result = m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n return result;\n } else if (args.length === 3) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const m2 = m1.get(args[1]);\n if (!m2) {\n return false;\n }\n const result = m2.delete(args[2]);\n if (m2.size === 0) {\n m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void {\n this.map.forEach((m, key1) =>\n m.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3))),\n );\n }\n\n *keys(): IterableIterator<[K1, K2, K3]> {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n }\n\n *values(): IterableIterator<V> {\n for (const m1 of this.map.values()) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n }\n\n *entries(): IterableIterator<[K1, K2, K3, V]> {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]> {\n yield* this.entries();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","args","result","callback","TresMap","m2","m1","key3"],"sources":["../../_shared/std/map.ts","../src/index.ts"],"sourcesContent":["// # Map\nexport const _getOrInsert = <K, V>(map: Map<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _getOrInsertComputed = <K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n\n// # WeakMap\nexport const _weakGetOrInsert = <K extends WeakKey, V>(map: WeakMap<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _weakGetOrInsertComputed = <K extends WeakKey, V>(\n map: WeakMap<K, V>,\n key: K,\n compute: (key: K) => V,\n): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n","import { _getOrInsertComputed, _getOrInsert } from '@shared/std/map.js';\n\nconst MapConstruct = () => new Map();\n\n/**\n * Creates a two-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template V - The type of the values.\n */\nexport class DuoMap<K1 = any, K2 = any, V = any> {\n private map = new Map<K1, Map<K2, V>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => (count += m.size));\n return count;\n }\n\n set(key1: K1, key2: K2, value: V): this {\n _getOrInsertComputed(this.map, key1, MapConstruct).set(key2, value);\n return this;\n }\n\n get(key1: K1, key2: K2): V | undefined {\n return this.map.get(key1)?.get(key2);\n }\n\n getOrInsert(key1: K1, key2: K2, value: V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsert(m, key2, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsertComputed(m, key2, () => compute(key1, key2));\n }\n\n has(key1: K1, key2: K2): boolean {\n return this.map.get(key1)?.has(key2) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2): boolean;\n hasBy(...args: any[]) {\n if (args.length === 1) {\n return this.map.has(args[0]);\n }\n if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2): boolean {\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n const key1 = args[0];\n return this.map.delete(key1);\n }\n if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.forEach((m, key1) => m.forEach((value, key2) => callback(value, key1, key2)));\n }\n\n /**\n * Visits the pairs under `key1`, or the single pair under `key1` and `key2`.\n *\n * @throws {TypeError} If the last argument is not a function, or the key count is out of range.\n */\n forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.get(key1)?.forEach((value, key2) => callback(value, key1, key2));\n }\n\n keys(key1?: K1): IterableIterator<[K1, K2]>;\n *keys(...args: any[]): IterableIterator<[K1, K2]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n }\n\n values(key1?: K1): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n yield* m.values();\n }\n }\n }\n\n entries(key1?: K1): IterableIterator<[K1, K2, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, V]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, V]> {\n yield* this.entries();\n }\n}\n\n/**\n * Creates a three-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template K3 - The type of the third-level keys.\n * @template V - The type of the values.\n */\nexport class TresMap<K1 = any, K2 = any, K3 = any, V = any> {\n private map = new Map<K1, Map<K2, Map<K3, V>>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => m.forEach((m2) => (count += m2.size)));\n return count;\n }\n\n set(key1: K1, key2: K2, key3: K3, value: V): this {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n _getOrInsertComputed(m1, key2, MapConstruct).set(key3, value);\n return this;\n }\n\n get(key1: K1, key2: K2, key3: K3): V | undefined {\n return this.map.get(key1)?.get(key2)?.get(key3);\n }\n\n getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsert(m2, key3, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsertComputed(m2, key3, () => compute(key1, key2, key3));\n }\n\n has(key1: K1, key2: K2, key3: K3): boolean {\n return this.map.get(key1)?.get(key2)?.has(key3) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2, key3?: K3): boolean;\n hasBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.has(args[0]);\n } else if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n } else if (args.length === 3) {\n return this.map.get(args[0])?.get(args[1])?.has(args[2]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2, key3: K3): boolean {\n const m1 = this.map.get(key1);\n if (!m1) return false;\n const m2 = m1.get(key2);\n if (!m2) return false;\n const result = m2.delete(key3);\n if (m2.size === 0) {\n m1.delete(key2);\n if (m1.size === 0) {\n this.map.delete(key1);\n }\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.delete(args[0]);\n } else if (args.length === 2) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const result = m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n return result;\n } else if (args.length === 3) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const m2 = m1.get(args[1]);\n if (!m2) {\n return false;\n }\n const result = m2.delete(args[2]);\n if (m2.size === 0) {\n m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void {\n this.map.forEach((m, key1) =>\n m.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3))),\n );\n }\n\n /**\n * Visits the pairs under `key1`, under `key1` and `key2`, or the single pair under all three keys.\n *\n * @throws {TypeError} If the last argument is not a function, or the key count is out of range.\n */\n forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;\n forEachBy(key1: K1, key2: K2, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;\n forEachBy(...args: any[]): void {\n const callback = args[args.length - 1];\n if (typeof callback !== 'function') {\n throw new TypeError('TresMap.forEachBy: the last argument must be a function.');\n }\n if (args.length < 2 || args.length > 3) {\n throw new TypeError(`TresMap.forEachBy: expected 1-2 keys and a callback, got ${args.length - 1} keys.`);\n }\n const key1 = args[0] as K1;\n const m1 = this.map.get(key1);\n if (!m1) {\n return;\n }\n if (args.length === 2) {\n m1.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3)));\n return;\n }\n\n const key2 = args[1] as K2;\n m1.get(key2)?.forEach((value, key3) => callback(value, key1, key2, key3));\n }\n\n keys(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3]>;\n *keys(...args: any[]): IterableIterator<[K1, K2, K3]> {\n if (args.length === 0) {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n } else if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m2 = this.map.get(key1)?.get(key2);\n if (m2) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n }\n\n values(key1?: K1, key2?: K2): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m1 of this.map.values()) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n } else if (args.length === 2) {\n const m2 = this.map.get(args[0])?.get(args[1]);\n if (m2) {\n yield* m2.values();\n }\n }\n }\n\n entries(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, K3, V]> {\n if (args.length === 0) {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n } else if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m2 = this.map.get(key1)?.get(key2);\n if (m2) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]> {\n yield* this.entries();\n }\n}\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -19,6 +19,12 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
19
19
  deleteBy(key1: K1, key2?: K2): boolean;
20
20
  clear(): void;
21
21
  forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
22
+ /**
23
+ * Visits the pairs under `key1`, or the single pair under `key1` and `key2`.
24
+ *
25
+ * @throws {TypeError} If the last argument is not a function, or the key count is out of range.
26
+ */
27
+ forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2) => void): void;
22
28
  keys(key1?: K1): IterableIterator<[K1, K2]>;
23
29
  values(key1?: K1): IterableIterator<V>;
24
30
  entries(key1?: K1): IterableIterator<[K1, K2, V]>;
@@ -45,9 +51,16 @@ declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
45
51
  deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
46
52
  clear(): void;
47
53
  forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
48
- keys(): IterableIterator<[K1, K2, K3]>;
49
- values(): IterableIterator<V>;
50
- entries(): IterableIterator<[K1, K2, K3, V]>;
54
+ /**
55
+ * Visits the pairs under `key1`, under `key1` and `key2`, or the single pair under all three keys.
56
+ *
57
+ * @throws {TypeError} If the last argument is not a function, or the key count is out of range.
58
+ */
59
+ forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
60
+ forEachBy(key1: K1, key2: K2, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
61
+ keys(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3]>;
62
+ values(key1?: K1, key2?: K2): IterableIterator<V>;
63
+ entries(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3, V]>;
51
64
  [Symbol.iterator](): IterableIterator<[K1, K2, K3, V]>;
52
65
  }
53
66
  //#endregion
package/dist/index.d.mts CHANGED
@@ -19,6 +19,12 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
19
19
  deleteBy(key1: K1, key2?: K2): boolean;
20
20
  clear(): void;
21
21
  forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
22
+ /**
23
+ * Visits the pairs under `key1`, or the single pair under `key1` and `key2`.
24
+ *
25
+ * @throws {TypeError} If the last argument is not a function, or the key count is out of range.
26
+ */
27
+ forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2) => void): void;
22
28
  keys(key1?: K1): IterableIterator<[K1, K2]>;
23
29
  values(key1?: K1): IterableIterator<V>;
24
30
  entries(key1?: K1): IterableIterator<[K1, K2, V]>;
@@ -45,9 +51,16 @@ declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
45
51
  deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
46
52
  clear(): void;
47
53
  forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
48
- keys(): IterableIterator<[K1, K2, K3]>;
49
- values(): IterableIterator<V>;
50
- entries(): IterableIterator<[K1, K2, K3, V]>;
54
+ /**
55
+ * Visits the pairs under `key1`, under `key1` and `key2`, or the single pair under all three keys.
56
+ *
57
+ * @throws {TypeError} If the last argument is not a function, or the key count is out of range.
58
+ */
59
+ forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
60
+ forEachBy(key1: K1, key2: K2, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
61
+ keys(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3]>;
62
+ values(key1?: K1, key2?: K2): IterableIterator<V>;
63
+ entries(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3, V]>;
51
64
  [Symbol.iterator](): IterableIterator<[K1, K2, K3, V]>;
52
65
  }
53
66
  //#endregion
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=(e,t,n)=>(e.has(t)||e.set(t,n),e.get(t)),t=(e,t,n)=>(e.has(t)||e.set(t,n(t)),e.get(t)),n=()=>/* @__PURE__ */ new Map;var r=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>e+=t.size),e}set(e,r,i){return t(this.map,e,n).set(r,i),this}get(e,t){return this.map.get(e)?.get(t)}getOrInsert(r,i,a){let o=t(this.map,r,n);return e(o,i,a)}getOrInsertComputed(e,r,i){let a=t(this.map,e,n);return t(a,r,()=>i(e,r))}has(e,t){return this.map.get(e)?.has(t)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:!1}delete(e,t){let n=this.map.get(e);if(!n)return!1;let r=n.delete(t);return n.size===0&&this.map.delete(e),r}deleteBy(...e){if(e.length===1){let t=e[0];return this.map.delete(t)}if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t);if(!r)return!1;let i=r.delete(n);return r.size===0&&this.map.delete(t),i}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let n of t.keys())yield[e,n];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.keys())yield[t,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())yield*e.values();else if(e.length===1){let t=e[0],n=this.map.get(t);n&&(yield*n.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,r];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)yield[t,e,r]}}*[Symbol.iterator](){yield*this.entries()}},i=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>t.forEach(t=>e+=t.size)),e}set(e,r,i,a){let o=t(this.map,e,n);return t(o,r,n).set(i,a),this}get(e,t,n){return this.map.get(e)?.get(t)?.get(n)}getOrInsert(r,i,a,o){let s=t(this.map,r,n),c=t(s,i,n);return e(c,a,o)}getOrInsertComputed(e,r,i,a){let o=t(this.map,e,n),s=t(o,r,n);return t(s,i,()=>a(e,r,i))}has(e,t,n){return this.map.get(e)?.get(t)?.has(n)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:e.length===3?this.map.get(e[0])?.get(e[1])?.has(e[2])??!1:!1}delete(e,t,n){let r=this.map.get(e);if(!r)return!1;let i=r.get(t);if(!i)return!1;let a=i.delete(n);return i.size===0&&(r.delete(t),r.size===0&&this.map.delete(e)),a}deleteBy(...e){if(e.length===1)return this.map.delete(e[0]);if(e.length===2){let t=this.map.get(e[0]);if(!t)return!1;let n=t.delete(e[1]);return t.size===0&&this.map.delete(e[0]),n}if(e.length===3){let t=this.map.get(e[0]);if(!t)return!1;let n=t.get(e[1]);if(!n)return!1;let r=n.delete(e[2]);return n.size===0&&(t.delete(e[1]),t.size===0&&this.map.delete(e[0])),r}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>t.forEach((t,i)=>e(t,n,r,i))))}*keys(){for(let[e,t]of this.map)for(let[n,r]of t)for(let t of r.keys())yield[e,n,t]}*values(){for(let e of this.map.values())for(let t of e.values())yield*t.values()}*entries(){for(let[e,t]of this.map)for(let[n,r]of t)for(let[t,i]of r)yield[e,n,t,i]}*[Symbol.iterator](){yield*this.entries()}};export{r as DuoMap,i as TresMap};
1
+ const e=(e,t,n)=>(e.has(t)||e.set(t,n),e.get(t)),t=(e,t,n)=>(e.has(t)||e.set(t,n(t)),e.get(t)),n=()=>/* @__PURE__ */ new Map;var r=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>e+=t.size),e}set(e,r,i){return t(this.map,e,n).set(r,i),this}get(e,t){return this.map.get(e)?.get(t)}getOrInsert(r,i,a){let o=t(this.map,r,n);return e(o,i,a)}getOrInsertComputed(e,r,i){let a=t(this.map,e,n);return t(a,r,()=>i(e,r))}has(e,t){return this.map.get(e)?.has(t)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:!1}delete(e,t){let n=this.map.get(e);if(!n)return!1;let r=n.delete(t);return n.size===0&&this.map.delete(e),r}deleteBy(...e){if(e.length===1){let t=e[0];return this.map.delete(t)}if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t);if(!r)return!1;let i=r.delete(n);return r.size===0&&this.map.delete(t),i}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}forEachBy(e,t){this.map.get(e)?.forEach((n,r)=>t(n,e,r))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let n of t.keys())yield[e,n];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.keys())yield[t,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())yield*e.values();else if(e.length===1){let t=e[0],n=this.map.get(t);n&&(yield*n.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,r];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)yield[t,e,r]}}*[Symbol.iterator](){yield*this.entries()}},i=class{map=/* @__PURE__ */ new Map;get size(){let e=0;return this.map.forEach(t=>t.forEach(t=>e+=t.size)),e}set(e,r,i,a){let o=t(this.map,e,n);return t(o,r,n).set(i,a),this}get(e,t,n){return this.map.get(e)?.get(t)?.get(n)}getOrInsert(r,i,a,o){let s=t(this.map,r,n),c=t(s,i,n);return e(c,a,o)}getOrInsertComputed(e,r,i,a){let o=t(this.map,e,n),s=t(o,r,n);return t(s,i,()=>a(e,r,i))}has(e,t,n){return this.map.get(e)?.get(t)?.has(n)??!1}hasBy(...e){return e.length===1?this.map.has(e[0]):e.length===2?this.map.get(e[0])?.has(e[1])??!1:e.length===3?this.map.get(e[0])?.get(e[1])?.has(e[2])??!1:!1}delete(e,t,n){let r=this.map.get(e);if(!r)return!1;let i=r.get(t);if(!i)return!1;let a=i.delete(n);return i.size===0&&(r.delete(t),r.size===0&&this.map.delete(e)),a}deleteBy(...e){if(e.length===1)return this.map.delete(e[0]);if(e.length===2){let t=this.map.get(e[0]);if(!t)return!1;let n=t.delete(e[1]);return t.size===0&&this.map.delete(e[0]),n}if(e.length===3){let t=this.map.get(e[0]);if(!t)return!1;let n=t.get(e[1]);if(!n)return!1;let r=n.delete(e[2]);return n.size===0&&(t.delete(e[1]),t.size===0&&this.map.delete(e[0])),r}return!1}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>t.forEach((t,i)=>e(t,n,r,i))))}forEachBy(...e){let t=e[e.length-1];if(typeof t!=`function`)throw TypeError(`TresMap.forEachBy: the last argument must be a function.`);if(e.length<2||e.length>3)throw TypeError(`TresMap.forEachBy: expected 1-2 keys and a callback, got ${e.length-1} keys.`);let n=e[0],r=this.map.get(n);if(!r)return;if(e.length===2){r.forEach((e,r)=>e.forEach((e,i)=>t(e,n,r,i)));return}let i=e[1];r.get(i)?.forEach((e,r)=>t(e,n,i,r))}*keys(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)for(let t of r.keys())yield[e,n,t];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)for(let n of r.keys())yield[t,e,n]}else if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t)?.get(n);if(r)for(let e of r.keys())yield[t,n,e]}}*values(...e){if(e.length===0)for(let e of this.map.values())for(let t of e.values())yield*t.values();else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let e of n.values())yield*e.values()}else if(e.length===2){let t=this.map.get(e[0])?.get(e[1]);t&&(yield*t.values())}}*entries(...e){if(e.length===0)for(let[e,t]of this.map)for(let[n,r]of t)for(let[t,i]of r)yield[e,n,t,i];else if(e.length===1){let t=e[0],n=this.map.get(t);if(n)for(let[e,r]of n)for(let[n,i]of r)yield[t,e,n,i]}else if(e.length===2){let t=e[0],n=e[1],r=this.map.get(t)?.get(n);if(r)for(let[e,i]of r)yield[t,n,e,i]}}*[Symbol.iterator](){yield*this.entries()}};export{r as DuoMap,i as TresMap};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","args","result","callback","TresMap","m2","m1","key3"],"sources":["../../_shared/std/map.ts","../src/index.ts"],"sourcesContent":["// # Map\nexport const _getOrInsert = <K, V>(map: Map<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _getOrInsertComputed = <K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n\n// # WeakMap\nexport const _weakGetOrInsert = <K extends WeakKey, V>(map: WeakMap<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _weakGetOrInsertComputed = <K extends WeakKey, V>(\n map: WeakMap<K, V>,\n key: K,\n compute: (key: K) => V,\n): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n","import { _getOrInsertComputed, _getOrInsert } from '@shared/std/map.js';\n\nconst MapConstruct = () => new Map();\n\n/**\n * Creates a two-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template V - The type of the values.\n */\nexport class DuoMap<K1 = any, K2 = any, V = any> {\n private map = new Map<K1, Map<K2, V>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => (count += m.size));\n return count;\n }\n\n set(key1: K1, key2: K2, value: V): this {\n _getOrInsertComputed(this.map, key1, MapConstruct).set(key2, value);\n return this;\n }\n\n get(key1: K1, key2: K2): V | undefined {\n return this.map.get(key1)?.get(key2);\n }\n\n getOrInsert(key1: K1, key2: K2, value: V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsert(m, key2, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsertComputed(m, key2, () => compute(key1, key2));\n }\n\n has(key1: K1, key2: K2): boolean {\n return this.map.get(key1)?.has(key2) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2): boolean;\n hasBy(...args: any[]) {\n if (args.length === 1) {\n return this.map.has(args[0]);\n }\n if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2): boolean {\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n const key1 = args[0];\n return this.map.delete(key1);\n }\n if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.forEach((m, key1) => m.forEach((value, key2) => callback(value, key1, key2)));\n }\n\n keys(key1?: K1): IterableIterator<[K1, K2]>;\n *keys(...args: any[]): IterableIterator<[K1, K2]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n }\n\n values(key1?: K1): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n yield* m.values();\n }\n }\n }\n\n entries(key1?: K1): IterableIterator<[K1, K2, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, V]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, V]> {\n yield* this.entries();\n }\n}\n\n/**\n * Creates a three-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template K3 - The type of the third-level keys.\n * @template V - The type of the values.\n */\nexport class TresMap<K1 = any, K2 = any, K3 = any, V = any> {\n private map = new Map<K1, Map<K2, Map<K3, V>>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => m.forEach((m2) => (count += m2.size)));\n return count;\n }\n\n set(key1: K1, key2: K2, key3: K3, value: V): this {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n _getOrInsertComputed(m1, key2, MapConstruct).set(key3, value);\n return this;\n }\n\n get(key1: K1, key2: K2, key3: K3): V | undefined {\n return this.map.get(key1)?.get(key2)?.get(key3);\n }\n\n getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsert(m2, key3, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsertComputed(m2, key3, () => compute(key1, key2, key3));\n }\n\n has(key1: K1, key2: K2, key3: K3): boolean {\n return this.map.get(key1)?.get(key2)?.has(key3) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2, key3?: K3): boolean;\n hasBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.has(args[0]);\n } else if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n } else if (args.length === 3) {\n return this.map.get(args[0])?.get(args[1])?.has(args[2]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2, key3: K3): boolean {\n const m1 = this.map.get(key1);\n if (!m1) return false;\n const m2 = m1.get(key2);\n if (!m2) return false;\n const result = m2.delete(key3);\n if (m2.size === 0) {\n m1.delete(key2);\n if (m1.size === 0) {\n this.map.delete(key1);\n }\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.delete(args[0]);\n } else if (args.length === 2) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const result = m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n return result;\n } else if (args.length === 3) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const m2 = m1.get(args[1]);\n if (!m2) {\n return false;\n }\n const result = m2.delete(args[2]);\n if (m2.size === 0) {\n m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void {\n this.map.forEach((m, key1) =>\n m.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3))),\n );\n }\n\n *keys(): IterableIterator<[K1, K2, K3]> {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n }\n\n *values(): IterableIterator<V> {\n for (const m1 of this.map.values()) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n }\n\n *entries(): IterableIterator<[K1, K2, K3, V]> {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]> {\n yield* this.entries();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","args","result","callback","TresMap","m2","m1","key3"],"sources":["../../_shared/std/map.ts","../src/index.ts"],"sourcesContent":["// # Map\nexport const _getOrInsert = <K, V>(map: Map<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _getOrInsertComputed = <K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n\n// # WeakMap\nexport const _weakGetOrInsert = <K extends WeakKey, V>(map: WeakMap<K, V>, key: K, value: V): V => {\n if (!map.has(key)) {\n map.set(key, value);\n }\n return map.get(key)!;\n};\n\nexport const _weakGetOrInsertComputed = <K extends WeakKey, V>(\n map: WeakMap<K, V>,\n key: K,\n compute: (key: K) => V,\n): V => {\n if (!map.has(key)) {\n map.set(key, compute(key));\n }\n return map.get(key)!;\n};\n","import { _getOrInsertComputed, _getOrInsert } from '@shared/std/map.js';\n\nconst MapConstruct = () => new Map();\n\n/**\n * Creates a two-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template V - The type of the values.\n */\nexport class DuoMap<K1 = any, K2 = any, V = any> {\n private map = new Map<K1, Map<K2, V>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => (count += m.size));\n return count;\n }\n\n set(key1: K1, key2: K2, value: V): this {\n _getOrInsertComputed(this.map, key1, MapConstruct).set(key2, value);\n return this;\n }\n\n get(key1: K1, key2: K2): V | undefined {\n return this.map.get(key1)?.get(key2);\n }\n\n getOrInsert(key1: K1, key2: K2, value: V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsert(m, key2, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V {\n const m = _getOrInsertComputed(this.map, key1, MapConstruct);\n return _getOrInsertComputed(m, key2, () => compute(key1, key2));\n }\n\n has(key1: K1, key2: K2): boolean {\n return this.map.get(key1)?.has(key2) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2): boolean;\n hasBy(...args: any[]) {\n if (args.length === 1) {\n return this.map.has(args[0]);\n }\n if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2): boolean {\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n const key1 = args[0];\n return this.map.delete(key1);\n }\n if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m = this.map.get(key1);\n if (!m) {\n return false;\n }\n const result = m.delete(key2);\n if (m.size === 0) {\n this.map.delete(key1);\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.forEach((m, key1) => m.forEach((value, key2) => callback(value, key1, key2)));\n }\n\n /**\n * Visits the pairs under `key1`, or the single pair under `key1` and `key2`.\n *\n * @throws {TypeError} If the last argument is not a function, or the key count is out of range.\n */\n forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2) => void): void {\n this.map.get(key1)?.forEach((value, key2) => callback(value, key1, key2));\n }\n\n keys(key1?: K1): IterableIterator<[K1, K2]>;\n *keys(...args: any[]): IterableIterator<[K1, K2]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n }\n\n values(key1?: K1): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n yield* m.values();\n }\n }\n }\n\n entries(key1?: K1): IterableIterator<[K1, K2, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, V]> {\n if (args.length === 0) {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m = this.map.get(key1);\n if (m) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, V]> {\n yield* this.entries();\n }\n}\n\n/**\n * Creates a three-keyed map structure.\n *\n * @template K1 - The type of the first-level keys.\n * @template K2 - The type of the second-level keys.\n * @template K3 - The type of the third-level keys.\n * @template V - The type of the values.\n */\nexport class TresMap<K1 = any, K2 = any, K3 = any, V = any> {\n private map = new Map<K1, Map<K2, Map<K3, V>>>();\n\n get size(): number {\n let count = 0;\n this.map.forEach((m) => m.forEach((m2) => (count += m2.size)));\n return count;\n }\n\n set(key1: K1, key2: K2, key3: K3, value: V): this {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n _getOrInsertComputed(m1, key2, MapConstruct).set(key3, value);\n return this;\n }\n\n get(key1: K1, key2: K2, key3: K3): V | undefined {\n return this.map.get(key1)?.get(key2)?.get(key3);\n }\n\n getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsert(m2, key3, value);\n }\n\n getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V {\n const m1 = _getOrInsertComputed(this.map, key1, MapConstruct);\n const m2 = _getOrInsertComputed(m1, key2, MapConstruct);\n return _getOrInsertComputed(m2, key3, () => compute(key1, key2, key3));\n }\n\n has(key1: K1, key2: K2, key3: K3): boolean {\n return this.map.get(key1)?.get(key2)?.has(key3) ?? false;\n }\n\n hasBy(key1: K1, key2?: K2, key3?: K3): boolean;\n hasBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.has(args[0]);\n } else if (args.length === 2) {\n return this.map.get(args[0])?.has(args[1]) ?? false;\n } else if (args.length === 3) {\n return this.map.get(args[0])?.get(args[1])?.has(args[2]) ?? false;\n }\n return false;\n }\n\n delete(key1: K1, key2: K2, key3: K3): boolean {\n const m1 = this.map.get(key1);\n if (!m1) return false;\n const m2 = m1.get(key2);\n if (!m2) return false;\n const result = m2.delete(key3);\n if (m2.size === 0) {\n m1.delete(key2);\n if (m1.size === 0) {\n this.map.delete(key1);\n }\n }\n return result;\n }\n\n deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;\n deleteBy(...args: any[]): boolean {\n if (args.length === 1) {\n return this.map.delete(args[0]);\n } else if (args.length === 2) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const result = m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n return result;\n } else if (args.length === 3) {\n const m1 = this.map.get(args[0]);\n if (!m1) {\n return false;\n }\n const m2 = m1.get(args[1]);\n if (!m2) {\n return false;\n }\n const result = m2.delete(args[2]);\n if (m2.size === 0) {\n m1.delete(args[1]);\n if (m1.size === 0) {\n this.map.delete(args[0]);\n }\n }\n return result;\n }\n return false;\n }\n\n clear(): void {\n this.map.clear();\n }\n\n forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void {\n this.map.forEach((m, key1) =>\n m.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3))),\n );\n }\n\n /**\n * Visits the pairs under `key1`, under `key1` and `key2`, or the single pair under all three keys.\n *\n * @throws {TypeError} If the last argument is not a function, or the key count is out of range.\n */\n forEachBy(key1: K1, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;\n forEachBy(key1: K1, key2: K2, callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;\n forEachBy(...args: any[]): void {\n const callback = args[args.length - 1];\n if (typeof callback !== 'function') {\n throw new TypeError('TresMap.forEachBy: the last argument must be a function.');\n }\n if (args.length < 2 || args.length > 3) {\n throw new TypeError(`TresMap.forEachBy: expected 1-2 keys and a callback, got ${args.length - 1} keys.`);\n }\n const key1 = args[0] as K1;\n const m1 = this.map.get(key1);\n if (!m1) {\n return;\n }\n if (args.length === 2) {\n m1.forEach((m2, key2) => m2.forEach((value, key3) => callback(value, key1, key2, key3)));\n return;\n }\n\n const key2 = args[1] as K2;\n m1.get(key2)?.forEach((value, key3) => callback(value, key1, key2, key3));\n }\n\n keys(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3]>;\n *keys(...args: any[]): IterableIterator<[K1, K2, K3]> {\n if (args.length === 0) {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const [key2, m2] of m1) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n } else if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m2 = this.map.get(key1)?.get(key2);\n if (m2) {\n for (const key3 of m2.keys()) {\n yield [key1, key2, key3];\n }\n }\n }\n }\n\n values(key1?: K1, key2?: K2): IterableIterator<V>;\n *values(...args: any[]): IterableIterator<V> {\n if (args.length === 0) {\n for (const m1 of this.map.values()) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const m2 of m1.values()) {\n yield* m2.values();\n }\n }\n } else if (args.length === 2) {\n const m2 = this.map.get(args[0])?.get(args[1]);\n if (m2) {\n yield* m2.values();\n }\n }\n }\n\n entries(key1?: K1, key2?: K2): IterableIterator<[K1, K2, K3, V]>;\n *entries(...args: any[]): IterableIterator<[K1, K2, K3, V]> {\n if (args.length === 0) {\n for (const [key1, m1] of this.map) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n } else if (args.length === 1) {\n const key1 = args[0];\n const m1 = this.map.get(key1);\n if (m1) {\n for (const [key2, m2] of m1) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n } else if (args.length === 2) {\n const key1 = args[0];\n const key2 = args[1];\n const m2 = this.map.get(key1)?.get(key2);\n if (m2) {\n for (const [key3, value] of m2) {\n yield [key1, key2, key3, value];\n }\n }\n }\n }\n\n *[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]> {\n yield* this.entries();\n }\n}\n"],"mappings":"AACA,MAAaA,GAAsB,EAAgB,EAAQ,KACpDC,EAAI,IAAIC,CAAG,GACdD,EAAI,IAAIC,EAAKC,CAAK,EAEbF,EAAI,IAAIC,CAAG,GAGPE,GAA8B,EAAgB,EAAQ,KAC5DH,EAAI,IAAIC,CAAG,GACdD,EAAI,IAAIC,EAAKG,EAAQH,CAAG,CAAC,EAEpBD,EAAI,IAAIC,CAAG,GCVdI,sBAAqB,IAAI,IAS/B,IAAaC,EAAb,KAAiD,CAC/C,oBAAc,IAAI,IAElB,IAAI,MAAe,CACjB,IAAIC,EAAQ,EAEZ,OADA,KAAK,IAAI,QAAS,GAAO,GAASC,EAAE,IAAK,EAClCD,CACT,CAEA,IAAI,EAAU,EAAU,EAAgB,CAEtC,OADAJ,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,CAAC,CAAC,IAAIK,EAAMR,CAAK,EAC3D,IACT,CAEA,IAAI,EAAU,EAAyB,CACrC,OAAO,KAAK,IAAI,IAAIO,CAAI,CAAC,EAAE,IAAIC,CAAI,CACrC,CAEA,YAAY,EAAU,EAAU,EAAa,CAC3C,IAAMF,EAAIL,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,EAC3D,OAAON,EAAaS,EAAGE,EAAMR,CAAK,CACpC,CAEA,oBAAoB,EAAU,EAAU,EAAuC,CAC7E,IAAMM,EAAIL,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,EAC3D,OAAOF,EAAqBK,EAAGE,MAAYN,EAAQK,EAAMC,CAAI,CAAC,CAChE,CAEA,IAAI,EAAU,EAAmB,CAC/B,OAAO,KAAK,IAAI,IAAID,CAAI,CAAC,EAAE,IAAIC,CAAI,GAAK,EAC1C,CAGA,MAAM,GAAGC,EAAa,CAOpB,OANIA,EAAK,SAAW,EACX,KAAK,IAAI,IAAIA,EAAK,EAAE,EAEzBA,EAAK,SAAW,EACX,KAAK,IAAI,IAAIA,EAAK,EAAE,CAAC,EAAE,IAAIA,EAAK,EAAE,GAAK,GAEzC,EACT,CAEA,OAAO,EAAU,EAAmB,CAClC,IAAMH,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAI,CAACD,EACH,MAAO,GAET,IAAMI,EAASJ,EAAE,OAAOE,CAAI,EAI5B,OAHIF,EAAE,OAAS,GACb,KAAK,IAAI,OAAOC,CAAI,EAEfG,CACT,CAGA,SAAS,GAAGD,EAAsB,CAChC,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMF,EAAOE,EAAK,GAClB,OAAO,KAAK,IAAI,OAAOF,CAAI,CAC7B,CACA,GAAIE,EAAK,SAAW,EAAG,CACrB,IAAMF,EAAOE,EAAK,GACZD,EAAOC,EAAK,GACZH,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAI,CAACD,EACH,MAAO,GAET,IAAMI,EAASJ,EAAE,OAAOE,CAAI,EAI5B,OAHIF,EAAE,OAAS,GACb,KAAK,IAAI,OAAOC,CAAI,EAEfG,CACT,CACA,MAAO,EACT,CAEA,OAAc,CACZ,KAAK,IAAI,MAAM,CACjB,CAEA,QAAQ,EAAwD,CAC9D,KAAK,IAAI,SAAS,EAAG,IAASJ,EAAE,SAAS,EAAO,IAASK,EAASX,EAAOO,EAAMC,CAAI,CAAC,CAAC,CACvF,CAOA,UAAU,EAAU,EAAwD,CAC1E,KAAK,IAAI,IAAID,CAAI,CAAC,EAAE,SAAS,EAAO,IAASI,EAASX,EAAOO,EAAMC,CAAI,CAAC,CAC1E,CAGA,CAAC,KAAK,GAAGC,EAAyC,CAChD,GAAIA,EAAK,SAAW,EAClB,IAAK,GAAM,CAACF,EAAMD,KAAM,KAAK,IAC3B,IAAK,IAAME,KAAQF,EAAE,KAAK,EACxB,KAAM,CAACC,EAAMC,CAAI,OAGhB,GAAIC,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZH,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAID,EACF,IAAK,IAAME,KAAQF,EAAE,KAAK,EACxB,KAAM,CAACC,EAAMC,CAAI,CAGvB,CACF,CAGA,CAAC,OAAO,GAAGC,EAAkC,CAC3C,GAAIA,EAAK,SAAW,EAClB,IAAK,IAAMH,KAAK,KAAK,IAAI,OAAO,EAC9B,MAAOA,EAAE,OAAO,OAEb,GAAIG,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZH,EAAI,KAAK,IAAI,IAAIC,CAAI,EACvBD,IACF,MAAOA,EAAE,OAAO,EAEpB,CACF,CAGA,CAAC,QAAQ,GAAGG,EAA4C,CACtD,GAAIA,EAAK,SAAW,EAClB,IAAK,GAAM,CAACF,EAAMD,KAAM,KAAK,IAC3B,IAAK,GAAM,CAACE,EAAMR,KAAUM,EAC1B,KAAM,CAACC,EAAMC,EAAMR,CAAK,OAGvB,GAAIS,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZH,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAID,EACF,IAAK,GAAM,CAACE,EAAMR,KAAUM,EAC1B,KAAM,CAACC,EAAMC,EAAMR,CAAK,CAG9B,CACF,CAEA,EAAE,OAAO,WAA2C,CAClD,MAAO,KAAK,QAAQ,CACtB,CACF,EAUaY,EAAb,KAA4D,CAC1D,oBAAc,IAAI,IAElB,IAAI,MAAe,CACjB,IAAIP,EAAQ,EAEZ,OADA,KAAK,IAAI,QAAS,GAAMC,EAAE,QAAS,GAAQ,GAASO,EAAG,IAAK,CAAC,EACtDR,CACT,CAEA,IAAI,EAAU,EAAU,EAAU,EAAgB,CAChD,IAAMS,EAAKb,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,EAE5D,OADAF,EAAqBa,EAAIN,EAAML,CAAY,CAAC,CAAC,IAAIY,EAAMf,CAAK,EACrD,IACT,CAEA,IAAI,EAAU,EAAU,EAAyB,CAC/C,OAAO,KAAK,IAAI,IAAIO,CAAI,CAAC,EAAE,IAAIC,CAAI,CAAC,EAAE,IAAIO,CAAI,CAChD,CAEA,YAAY,EAAU,EAAU,EAAU,EAAa,CACrD,IAAMD,EAAKb,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,EACtDU,EAAKZ,EAAqBa,EAAIN,EAAML,CAAY,EACtD,OAAON,EAAagB,EAAIE,EAAMf,CAAK,CACrC,CAEA,oBAAoB,EAAU,EAAU,EAAU,EAAiD,CACjG,IAAMc,EAAKb,EAAqB,KAAK,IAAKM,EAAMJ,CAAY,EACtDU,EAAKZ,EAAqBa,EAAIN,EAAML,CAAY,EACtD,OAAOF,EAAqBY,EAAIE,MAAYb,EAAQK,EAAMC,EAAMO,CAAI,CAAC,CACvE,CAEA,IAAI,EAAU,EAAU,EAAmB,CACzC,OAAO,KAAK,IAAI,IAAIR,CAAI,CAAC,EAAE,IAAIC,CAAI,CAAC,EAAE,IAAIO,CAAI,GAAK,EACrD,CAGA,MAAM,GAAGN,EAAsB,CAQ7B,OAPIA,EAAK,SAAW,EACX,KAAK,IAAI,IAAIA,EAAK,EAAE,EAClBA,EAAK,SAAW,EAClB,KAAK,IAAI,IAAIA,EAAK,EAAE,CAAC,EAAE,IAAIA,EAAK,EAAE,GAAK,GACrCA,EAAK,SAAW,EAClB,KAAK,IAAI,IAAIA,EAAK,EAAE,CAAC,EAAE,IAAIA,EAAK,EAAE,CAAC,EAAE,IAAIA,EAAK,EAAE,GAAK,GAEvD,EACT,CAEA,OAAO,EAAU,EAAU,EAAmB,CAC5C,IAAMK,EAAK,KAAK,IAAI,IAAIP,CAAI,EAC5B,GAAI,CAACO,EAAI,MAAO,GAChB,IAAMD,EAAKC,EAAG,IAAIN,CAAI,EACtB,GAAI,CAACK,EAAI,MAAO,GAChB,IAAMH,EAASG,EAAG,OAAOE,CAAI,EAO7B,OANIF,EAAG,OAAS,IACdC,EAAG,OAAON,CAAI,EACVM,EAAG,OAAS,GACd,KAAK,IAAI,OAAOP,CAAI,GAGjBG,CACT,CAGA,SAAS,GAAGD,EAAsB,CAChC,GAAIA,EAAK,SAAW,EAClB,OAAO,KAAK,IAAI,OAAOA,EAAK,EAAE,EACzB,GAAIA,EAAK,SAAW,EAAG,CAC5B,IAAMK,EAAK,KAAK,IAAI,IAAIL,EAAK,EAAE,EAC/B,GAAI,CAACK,EACH,MAAO,GAET,IAAMJ,EAASI,EAAG,OAAOL,EAAK,EAAE,EAIhC,OAHIK,EAAG,OAAS,GACd,KAAK,IAAI,OAAOL,EAAK,EAAE,EAElBC,CACT,CAAO,GAAID,EAAK,SAAW,EAAG,CAC5B,IAAMK,EAAK,KAAK,IAAI,IAAIL,EAAK,EAAE,EAC/B,GAAI,CAACK,EACH,MAAO,GAET,IAAMD,EAAKC,EAAG,IAAIL,EAAK,EAAE,EACzB,GAAI,CAACI,EACH,MAAO,GAET,IAAMH,EAASG,EAAG,OAAOJ,EAAK,EAAE,EAOhC,OANII,EAAG,OAAS,IACdC,EAAG,OAAOL,EAAK,EAAE,EACbK,EAAG,OAAS,GACd,KAAK,IAAI,OAAOL,EAAK,EAAE,GAGpBC,CACT,CACA,MAAO,EACT,CAEA,OAAc,CACZ,KAAK,IAAI,MAAM,CACjB,CAEA,QAAQ,EAAkE,CACxE,KAAK,IAAI,SAAS,EAAG,IACnBJ,EAAE,SAAS,EAAI,IAASO,EAAG,SAAS,EAAO,IAASF,EAASX,EAAOO,EAAMC,EAAMO,CAAI,CAAC,CAAC,CACxF,CACF,CASA,UAAU,GAAGN,EAAmB,CAC9B,IAAME,EAAWF,EAAKA,EAAK,OAAS,GACpC,GAAI,OAAOE,GAAa,WACtB,MAAU,UAAU,0DAA0D,EAEhF,GAAIF,EAAK,OAAS,GAAKA,EAAK,OAAS,EACnC,MAAU,UAAU,4DAA4DA,EAAK,OAAS,EAAE,OAAO,EAEzG,IAAMF,EAAOE,EAAK,GACZK,EAAK,KAAK,IAAI,IAAIP,CAAI,EAC5B,GAAI,CAACO,EACH,OAEF,GAAIL,EAAK,SAAW,EAAG,CACrBK,EAAG,SAAS,EAAI,IAASD,EAAG,SAAS,EAAO,IAASF,EAASX,EAAOO,EAAMC,EAAMO,CAAI,CAAC,CAAC,EACvF,MACF,CAEA,IAAMP,EAAOC,EAAK,GAClBK,EAAG,IAAIN,CAAI,CAAC,EAAE,SAAS,EAAO,IAASG,EAASX,EAAOO,EAAMC,EAAMO,CAAI,CAAC,CAC1E,CAGA,CAAC,KAAK,GAAGN,EAA6C,CACpD,GAAIA,EAAK,SAAW,EAClB,IAAK,GAAM,CAACF,EAAMO,KAAO,KAAK,IAC5B,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,IAAMC,KAAQF,EAAG,KAAK,EACzB,KAAM,CAACN,EAAMC,EAAMO,CAAI,OAIxB,GAAIN,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZK,EAAK,KAAK,IAAI,IAAIP,CAAI,EAC5B,GAAIO,EACF,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,IAAMC,KAAQF,EAAG,KAAK,EACzB,KAAM,CAACN,EAAMC,EAAMO,CAAI,CAI/B,MAAO,GAAIN,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZD,EAAOC,EAAK,GACZI,EAAK,KAAK,IAAI,IAAIN,CAAI,CAAC,EAAE,IAAIC,CAAI,EACvC,GAAIK,EACF,IAAK,IAAME,KAAQF,EAAG,KAAK,EACzB,KAAM,CAACN,EAAMC,EAAMO,CAAI,CAG7B,CACF,CAGA,CAAC,OAAO,GAAGN,EAAkC,CAC3C,GAAIA,EAAK,SAAW,EAClB,IAAK,IAAMK,KAAM,KAAK,IAAI,OAAO,EAC/B,IAAK,IAAMD,KAAMC,EAAG,OAAO,EACzB,MAAOD,EAAG,OAAO,OAGhB,GAAIJ,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZK,EAAK,KAAK,IAAI,IAAIP,CAAI,EAC5B,GAAIO,EACF,IAAK,IAAMD,KAAMC,EAAG,OAAO,EACzB,MAAOD,EAAG,OAAO,CAGvB,MAAO,GAAIJ,EAAK,SAAW,EAAG,CAC5B,IAAMI,EAAK,KAAK,IAAI,IAAIJ,EAAK,EAAE,CAAC,EAAE,IAAIA,EAAK,EAAE,EACzCI,IACF,MAAOA,EAAG,OAAO,EAErB,CACF,CAGA,CAAC,QAAQ,GAAGJ,EAAgD,CAC1D,GAAIA,EAAK,SAAW,EAClB,IAAK,GAAM,CAACF,EAAMO,KAAO,KAAK,IAC5B,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,GAAM,CAACC,EAAMf,KAAUa,EAC1B,KAAM,CAACN,EAAMC,EAAMO,EAAMf,CAAK,OAI/B,GAAIS,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZK,EAAK,KAAK,IAAI,IAAIP,CAAI,EAC5B,GAAIO,EACF,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,GAAM,CAACC,EAAMf,KAAUa,EAC1B,KAAM,CAACN,EAAMC,EAAMO,EAAMf,CAAK,CAItC,MAAO,GAAIS,EAAK,SAAW,EAAG,CAC5B,IAAMF,EAAOE,EAAK,GACZD,EAAOC,EAAK,GACZI,EAAK,KAAK,IAAI,IAAIN,CAAI,CAAC,EAAE,IAAIC,CAAI,EACvC,GAAIK,EACF,IAAK,GAAM,CAACE,EAAMf,KAAUa,EAC1B,KAAM,CAACN,EAAMC,EAAMO,EAAMf,CAAK,CAGpC,CACF,CAEA,EAAE,OAAO,WAA+C,CACtD,MAAO,KAAK,QAAQ,CACtB,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "duo-map",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "author": {
5
5
  "name": "KasukabeTsumugi",
6
6
  "email": "futami16237@gmail.com"
@@ -46,4 +46,4 @@
46
46
  },
47
47
  "homepage": "https://github.com/baendlorel/tsumugi-lib/tree/main/packages/duo-map#readme",
48
48
  "devDependencies": {}
49
- }
49
+ }