duo-map 0.0.2 β 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/README.md +16 -12
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -5
- package/dist/index.d.mts +40 -5
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/duo-map) [](https://npmcharts.com/compare/duo-map,token-types?start=1200&interval=30)
|
|
4
4
|
[](https://opensource.org/licenses/MIT) [](https://www.codacy.com/app/Borewit/duo-map?utm_source=github.com&utm_medium=referral&utm_content=Borewit/duo-map&utm_campaign=Badge_Grade)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
This package offers 2 containers:
|
|
8
|
+
|
|
9
|
+
- `DuoMap<K1, K2, V>`: A map with two keys.
|
|
10
|
+
- `TresMap<K1, K2, K3, V>`: A map with three keys.
|
|
7
11
|
|
|
8
12
|
For more awesome packages, check out [my homepageπ](https://baendlorel.github.io/?repoType=npm)
|
|
9
13
|
|
|
10
14
|
## Features
|
|
11
15
|
|
|
12
|
-
- ποΈ **Two keys, one lookup**: `get(key1, key2)` replaces the `map.get(a)?.get(b)` dance.
|
|
16
|
+
- ποΈ **Two/three keys, one lookup**: `duo.get(key1, key2)`/`tres.get(key1, key2, key3)` replaces the `map.get(a)?.get(b)`/`map.get(a)?.get(b)?.get(c)` dance.
|
|
13
17
|
- π² **Nested semantics**: entries are grouped by `key1`, but the API is flat.
|
|
14
18
|
- π§Ή **Self-cleaning**: deleting the last pair of a `key1` group removes the group itself.
|
|
15
19
|
- π€ **Lazy inserts**: `getOrInsertComputed` only computes when the pair is actually missing.
|
|
@@ -202,16 +206,16 @@ Keys are compared with **SameValueZero**, exactly like native `Map` β `NaN` ma
|
|
|
202
206
|
|
|
203
207
|
## Differences from native `Map`
|
|
204
208
|
|
|
205
|
-
| Feature | `Map`
|
|
206
|
-
| --------------------- |
|
|
207
|
-
| Keys per entry | 1
|
|
208
|
-
| Read / write | `(key)`
|
|
209
|
-
| Iteration yields | `[key, value]`
|
|
210
|
-
| `forEach` callback | `(value, key, map)`
|
|
211
|
-
| `keys()` / `values()` | iterators
|
|
212
|
-
| `getOrInsert` | proposal only
|
|
213
|
-
| Empty group cleanup | β
|
|
214
|
-
| `.size` | O(1)
|
|
209
|
+
| Feature | `Map` | `DuoMap` |
|
|
210
|
+
| --------------------- | ------------------- | ------------------------------------------- |
|
|
211
|
+
| Keys per entry | 1 | 2 |
|
|
212
|
+
| Read / write | `(key)` | `(key1, key2)` |
|
|
213
|
+
| Iteration yields | `[key, value]` | `[key1, key2, value]` |
|
|
214
|
+
| `forEach` callback | `(value, key, map)` | `(value, key1, key2)` |
|
|
215
|
+
| `keys()` / `values()` | iterators | plain arrays |
|
|
216
|
+
| `getOrInsert` | proposal only | shipped, with a lazy `getOrInsertComputed` |
|
|
217
|
+
| Empty group cleanup | β | `key1` group dropped with its last `delete` |
|
|
218
|
+
| `.size` | O(1) | O(number of `key1` groups) |
|
|
215
219
|
|
|
216
220
|
## License
|
|
217
221
|
|
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(){let e=[];
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","result","callback","entries","index"],"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\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(): [K1, K2][] {\n const result: [K1, K2][] = [];\n this.map.forEach((m, key1) => m.forEach((_, key2) => result.push([key1, key2])));\n return result;\n }\n\n values(): V[] {\n const result: V[] = [];\n this.map.forEach((m) => m.forEach((value) => result.push(value)));\n return result;\n }\n\n entries(): [K1, K2, V][] {\n const result: [K1, K2, V][] = [];\n this.map.forEach((m, key1) => m.forEach((value, key2) => result.push([key1, key2, value])));\n return result;\n }\n\n [Symbol.iterator](): Iterator<[K1, K2, V]> {\n const entries = this.entries();\n let index = 0;\n return {\n next(): IteratorResult<[K1, K2, V]> {\n if (index < entries.length) {\n return { value: entries[index++], done: false };\n } else {\n return { value: undefined as any, done: true };\n }\n },\n };\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,IAE/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,CAEA,OAAO,EAAU,EAAmB,CAClC,IAAMF,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAI,CAACD,EACH,MAAO,GAET,IAAMG,EAASH,EAAE,OAAOE,CAAI,EAI5B,OAHIF,EAAE,OAAS,GACb,KAAK,IAAI,OAAOC,CAAI,EAEfE,CACT,CAEA,OAAc,CACZ,KAAK,IAAI,MAAM,CACjB,CAEA,QAAQ,EAAwD,CAC9D,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAO,IAASI,EAASV,EAAOO,EAAMC,CAAI,CAAC,CAAC,CACvF,CAEA,MAAmB,CACjB,IAAMC,EAAqB,CAAC,EAE5B,OADA,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAG,IAASG,EAAO,KAAK,CAACF,EAAMC,CAAI,CAAC,CAAC,CAAC,EACxEC,CACT,CAEA,QAAc,CACZ,IAAMA,EAAc,CAAC,EAErB,OADA,KAAK,IAAI,QAAS,GAAMH,EAAE,QAAS,GAAUG,EAAO,KAAKT,CAAK,CAAC,CAAC,EACzDS,CACT,CAEA,SAAyB,CACvB,IAAMA,EAAwB,CAAC,EAE/B,OADA,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAO,IAASG,EAAO,KAAK,CAACF,EAAMC,EAAMR,CAAK,CAAC,CAAC,CAAC,EACnFS,CACT,CAEA,CAAC,OAAO,WAAmC,CACzC,IAAME,EAAU,KAAK,QAAQ,EACzBC,EAAQ,EACZ,MAAO,CACL,MAAoC,CAIhC,OAHEA,EAAQD,EAAQ,OACX,CAAE,MAAOA,EAAQ,KAAU,KAAM,EAAM,EAEvC,CAAE,MAAO,IAAA,GAAkB,KAAM,EAAK,CAEjD,CACF,CACF,CACF"}
|
|
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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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
//#region src/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a two-keyed map structure.
|
|
4
|
+
*
|
|
5
|
+
* @template K1 - The type of the first-level keys.
|
|
6
|
+
* @template K2 - The type of the second-level keys.
|
|
7
|
+
* @template V - The type of the values.
|
|
8
|
+
*/
|
|
2
9
|
declare class DuoMap<K1 = any, K2 = any, V = any> {
|
|
3
10
|
private map;
|
|
4
11
|
get size(): number;
|
|
@@ -7,14 +14,42 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
|
|
|
7
14
|
getOrInsert(key1: K1, key2: K2, value: V): V;
|
|
8
15
|
getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V;
|
|
9
16
|
has(key1: K1, key2: K2): boolean;
|
|
17
|
+
hasBy(key1: K1, key2?: K2): boolean;
|
|
10
18
|
delete(key1: K1, key2: K2): boolean;
|
|
19
|
+
deleteBy(key1: K1, key2?: K2): boolean;
|
|
11
20
|
clear(): void;
|
|
12
21
|
forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
|
|
13
|
-
keys(): [K1, K2]
|
|
14
|
-
values(): V
|
|
15
|
-
entries(): [K1, K2, V]
|
|
16
|
-
[Symbol.iterator]():
|
|
22
|
+
keys(key1?: K1): IterableIterator<[K1, K2]>;
|
|
23
|
+
values(key1?: K1): IterableIterator<V>;
|
|
24
|
+
entries(key1?: K1): IterableIterator<[K1, K2, V]>;
|
|
25
|
+
[Symbol.iterator](): IterableIterator<[K1, K2, V]>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a three-keyed map structure.
|
|
29
|
+
*
|
|
30
|
+
* @template K1 - The type of the first-level keys.
|
|
31
|
+
* @template K2 - The type of the second-level keys.
|
|
32
|
+
* @template K3 - The type of the third-level keys.
|
|
33
|
+
* @template V - The type of the values.
|
|
34
|
+
*/
|
|
35
|
+
declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
|
|
36
|
+
private map;
|
|
37
|
+
get size(): number;
|
|
38
|
+
set(key1: K1, key2: K2, key3: K3, value: V): this;
|
|
39
|
+
get(key1: K1, key2: K2, key3: K3): V | undefined;
|
|
40
|
+
getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V;
|
|
41
|
+
getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V;
|
|
42
|
+
has(key1: K1, key2: K2, key3: K3): boolean;
|
|
43
|
+
hasBy(key1: K1, key2?: K2, key3?: K3): boolean;
|
|
44
|
+
delete(key1: K1, key2: K2, key3: K3): boolean;
|
|
45
|
+
deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
|
|
46
|
+
clear(): void;
|
|
47
|
+
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]>;
|
|
51
|
+
[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]>;
|
|
17
52
|
}
|
|
18
53
|
//#endregion
|
|
19
|
-
export { DuoMap };
|
|
54
|
+
export { DuoMap, TresMap };
|
|
20
55
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
//#region src/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a two-keyed map structure.
|
|
4
|
+
*
|
|
5
|
+
* @template K1 - The type of the first-level keys.
|
|
6
|
+
* @template K2 - The type of the second-level keys.
|
|
7
|
+
* @template V - The type of the values.
|
|
8
|
+
*/
|
|
2
9
|
declare class DuoMap<K1 = any, K2 = any, V = any> {
|
|
3
10
|
private map;
|
|
4
11
|
get size(): number;
|
|
@@ -7,14 +14,42 @@ declare class DuoMap<K1 = any, K2 = any, V = any> {
|
|
|
7
14
|
getOrInsert(key1: K1, key2: K2, value: V): V;
|
|
8
15
|
getOrInsertComputed(key1: K1, key2: K2, compute: (key1: K1, key2: K2) => V): V;
|
|
9
16
|
has(key1: K1, key2: K2): boolean;
|
|
17
|
+
hasBy(key1: K1, key2?: K2): boolean;
|
|
10
18
|
delete(key1: K1, key2: K2): boolean;
|
|
19
|
+
deleteBy(key1: K1, key2?: K2): boolean;
|
|
11
20
|
clear(): void;
|
|
12
21
|
forEach(callback: (value: V, key1: K1, key2: K2) => void): void;
|
|
13
|
-
keys(): [K1, K2]
|
|
14
|
-
values(): V
|
|
15
|
-
entries(): [K1, K2, V]
|
|
16
|
-
[Symbol.iterator]():
|
|
22
|
+
keys(key1?: K1): IterableIterator<[K1, K2]>;
|
|
23
|
+
values(key1?: K1): IterableIterator<V>;
|
|
24
|
+
entries(key1?: K1): IterableIterator<[K1, K2, V]>;
|
|
25
|
+
[Symbol.iterator](): IterableIterator<[K1, K2, V]>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a three-keyed map structure.
|
|
29
|
+
*
|
|
30
|
+
* @template K1 - The type of the first-level keys.
|
|
31
|
+
* @template K2 - The type of the second-level keys.
|
|
32
|
+
* @template K3 - The type of the third-level keys.
|
|
33
|
+
* @template V - The type of the values.
|
|
34
|
+
*/
|
|
35
|
+
declare class TresMap<K1 = any, K2 = any, K3 = any, V = any> {
|
|
36
|
+
private map;
|
|
37
|
+
get size(): number;
|
|
38
|
+
set(key1: K1, key2: K2, key3: K3, value: V): this;
|
|
39
|
+
get(key1: K1, key2: K2, key3: K3): V | undefined;
|
|
40
|
+
getOrInsert(key1: K1, key2: K2, key3: K3, value: V): V;
|
|
41
|
+
getOrInsertComputed(key1: K1, key2: K2, key3: K3, compute: (key1: K1, key2: K2, key3: K3) => V): V;
|
|
42
|
+
has(key1: K1, key2: K2, key3: K3): boolean;
|
|
43
|
+
hasBy(key1: K1, key2?: K2, key3?: K3): boolean;
|
|
44
|
+
delete(key1: K1, key2: K2, key3: K3): boolean;
|
|
45
|
+
deleteBy(key1: K1, key2?: K2, key3?: K3): boolean;
|
|
46
|
+
clear(): void;
|
|
47
|
+
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]>;
|
|
51
|
+
[Symbol.iterator](): IterableIterator<[K1, K2, K3, V]>;
|
|
17
52
|
}
|
|
18
53
|
//#endregion
|
|
19
|
-
export { DuoMap };
|
|
54
|
+
export { DuoMap, TresMap };
|
|
20
55
|
//# sourceMappingURL=index.d.mts.map
|
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(){let e=[];
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["_getOrInsert","map","key","value","_getOrInsertComputed","compute","MapConstruct","DuoMap","count","m","key1","key2","result","callback","entries","index"],"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\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(): [K1, K2][] {\n const result: [K1, K2][] = [];\n this.map.forEach((m, key1) => m.forEach((_, key2) => result.push([key1, key2])));\n return result;\n }\n\n values(): V[] {\n const result: V[] = [];\n this.map.forEach((m) => m.forEach((value) => result.push(value)));\n return result;\n }\n\n entries(): [K1, K2, V][] {\n const result: [K1, K2, V][] = [];\n this.map.forEach((m, key1) => m.forEach((value, key2) => result.push([key1, key2, value])));\n return result;\n }\n\n [Symbol.iterator](): Iterator<[K1, K2, V]> {\n const entries = this.entries();\n let index = 0;\n return {\n next(): IteratorResult<[K1, K2, V]> {\n if (index < entries.length) {\n return { value: entries[index++], done: false };\n } else {\n return { value: undefined as any, done: true };\n }\n },\n };\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,IAE/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,CAEA,OAAO,EAAU,EAAmB,CAClC,IAAMF,EAAI,KAAK,IAAI,IAAIC,CAAI,EAC3B,GAAI,CAACD,EACH,MAAO,GAET,IAAMG,EAASH,EAAE,OAAOE,CAAI,EAI5B,OAHIF,EAAE,OAAS,GACb,KAAK,IAAI,OAAOC,CAAI,EAEfE,CACT,CAEA,OAAc,CACZ,KAAK,IAAI,MAAM,CACjB,CAEA,QAAQ,EAAwD,CAC9D,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAO,IAASI,EAASV,EAAOO,EAAMC,CAAI,CAAC,CAAC,CACvF,CAEA,MAAmB,CACjB,IAAMC,EAAqB,CAAC,EAE5B,OADA,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAG,IAASG,EAAO,KAAK,CAACF,EAAMC,CAAI,CAAC,CAAC,CAAC,EACxEC,CACT,CAEA,QAAc,CACZ,IAAMA,EAAc,CAAC,EAErB,OADA,KAAK,IAAI,QAAS,GAAMH,EAAE,QAAS,GAAUG,EAAO,KAAKT,CAAK,CAAC,CAAC,EACzDS,CACT,CAEA,SAAyB,CACvB,IAAMA,EAAwB,CAAC,EAE/B,OADA,KAAK,IAAI,SAAS,EAAG,IAASH,EAAE,SAAS,EAAO,IAASG,EAAO,KAAK,CAACF,EAAMC,EAAMR,CAAK,CAAC,CAAC,CAAC,EACnFS,CACT,CAEA,CAAC,OAAO,WAAmC,CACzC,IAAME,EAAU,KAAK,QAAQ,EACzBC,EAAQ,EACZ,MAAO,CACL,MAAoC,CAIhC,OAHEA,EAAQD,EAAQ,OACX,CAAE,MAAOA,EAAQ,KAAU,KAAM,EAAM,EAEvC,CAAE,MAAO,IAAA,GAAkB,KAAM,EAAK,CAEjD,CACF,CACF,CACF"}
|
|
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.0
|
|
3
|
+
"version": "0.2.0",
|
|
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
|
+
}
|