duo-map 0.1.0 → 0.2.0

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}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}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}*keys(){for(let[e,t]of this.map)for(let n of t.keys())yield[e,n]}*values(){for(let e of this.map.values())yield*e.values()}*entries(){for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,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}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}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)))}*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;
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","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 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 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(): IterableIterator<[K1, K2]> {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n\n *values(): IterableIterator<V> {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n }\n\n *entries(): IterableIterator<[K1, K2, V]> {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\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 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 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 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":"mEACA,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,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,CAEA,CAAC,MAAuC,CACtC,IAAK,GAAM,CAACR,EAAMO,KAAO,KAAK,IAC5B,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,IAAMC,KAAQF,EAAG,KAAK,EACzB,KAAM,CAACN,EAAMC,EAAMO,CAAI,CAI/B,CAEA,CAAC,QAA8B,CAC7B,IAAK,IAAMD,KAAM,KAAK,IAAI,OAAO,EAC/B,IAAK,IAAMD,KAAMC,EAAG,OAAO,EACzB,MAAOD,EAAG,OAAO,CAGvB,CAEA,CAAC,SAA6C,CAC5C,IAAK,GAAM,CAACN,EAAMO,KAAO,KAAK,IAC5B,IAAK,GAAM,CAACN,EAAMK,KAAOC,EACvB,IAAK,GAAM,CAACC,EAAMf,KAAUa,EAC1B,KAAM,CAACN,EAAMC,EAAMO,EAAMf,CAAK,CAItC,CAEA,EAAE,OAAO,WAA+C,CACtD,MAAO,KAAK,QAAQ,CACtB,CACF"}
package/dist/index.d.cts CHANGED
@@ -14,12 +14,14 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
14
14
  getOrInsert(key1: K1, key2: K2, value: V): V;
15
15
  getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V;
16
16
  has(key1: K1, key2: K2): boolean;
17
+ hasBy(key1: K1, key2?: K2): boolean;
17
18
  delete(key1: K1, key2: K2): boolean;
19
+ deleteBy(key1: K1, key2?: K2): boolean;
18
20
  clear(): void;
19
21
  forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
20
- keys(): IterableIterator<[K1, K2]>;
21
- values(): IterableIterator<V>;
22
- entries(): IterableIterator<[K1, K2, V]>;
22
+ keys(key1?: K1): IterableIterator<[K1, K2]>;
23
+ values(key1?: K1): IterableIterator<V>;
24
+ entries(key1?: K1): IterableIterator<[K1, K2, V]>;
23
25
  [Symbol.iterator](): IterableIterator<[K1, K2, V]>;
24
26
  }
25
27
  /**
@@ -38,7 +40,9 @@ declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
38
40
  getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V;
39
41
  getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V;
40
42
  has(key1: K1, key2: K2, key3: K3): boolean;
43
+ hasBy(key1: K1, key2?: K2, key3?: K3): boolean;
41
44
  delete(key1: K1, key2: K2, key3: K3): boolean;
45
+ deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
42
46
  clear(): void;
43
47
  forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
44
48
  keys(): IterableIterator<[K1, K2, K3]>;
package/dist/index.d.mts CHANGED
@@ -14,12 +14,14 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
14
14
  getOrInsert(key1: K1, key2: K2, value: V): V;
15
15
  getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V;
16
16
  has(key1: K1, key2: K2): boolean;
17
+ hasBy(key1: K1, key2?: K2): boolean;
17
18
  delete(key1: K1, key2: K2): boolean;
19
+ deleteBy(key1: K1, key2?: K2): boolean;
18
20
  clear(): void;
19
21
  forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
20
- keys(): IterableIterator<[K1, K2]>;
21
- values(): IterableIterator<V>;
22
- entries(): IterableIterator<[K1, K2, V]>;
22
+ keys(key1?: K1): IterableIterator<[K1, K2]>;
23
+ values(key1?: K1): IterableIterator<V>;
24
+ entries(key1?: K1): IterableIterator<[K1, K2, V]>;
23
25
  [Symbol.iterator](): IterableIterator<[K1, K2, V]>;
24
26
  }
25
27
  /**
@@ -38,7 +40,9 @@ declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
38
40
  getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V;
39
41
  getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V;
40
42
  has(key1: K1, key2: K2, key3: K3): boolean;
43
+ hasBy(key1: K1, key2?: K2, key3?: K3): boolean;
41
44
  delete(key1: K1, key2: K2, key3: K3): boolean;
45
+ deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
42
46
  clear(): void;
43
47
  forEach(callback: (value: V, key1: K1, key2: K2, key3: K3) => void): void;
44
48
  keys(): IterableIterator<[K1, K2, K3]>;
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}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}clear(){this.map.clear()}forEach(e){this.map.forEach((t,n)=>t.forEach((t,r)=>e(t,n,r)))}*keys(){for(let[e,t]of this.map)for(let n of t.keys())yield[e,n]}*values(){for(let e of this.map.values())yield*e.values()}*entries(){for(let[e,t]of this.map)for(let[n,r]of t)yield[e,n,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}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}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)))}*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};
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","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 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 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(): IterableIterator<[K1, K2]> {\n for (const [key1, m] of this.map) {\n for (const key2 of m.keys()) {\n yield [key1, key2];\n }\n }\n }\n\n *values(): IterableIterator<V> {\n for (const m of this.map.values()) {\n yield* m.values();\n }\n }\n\n *entries(): IterableIterator<[K1, K2, V]> {\n for (const [key1, m] of this.map) {\n for (const [key2, value] of m) {\n yield [key1, key2, value];\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 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 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 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "duo-map",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "author": {
5
5
  "name": "KasukabeTsumugi",
6
6
  "email": "futami16237@gmail.com"