@blackglory/structures 0.11.6 → 0.11.7

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 CHANGED
@@ -265,6 +265,54 @@ class TrieMap<K extends Iterable<T>, V, T = unknown> {
265
265
  }
266
266
  ```
267
267
 
268
+ ### StringTrieMap
269
+ ```ts
270
+ class StringTrieMap<T> {
271
+ get [Symbol.toStringTag](): string
272
+
273
+ keys(): IterableIterator<string>
274
+ values(): IterableIterator<T>
275
+ entries(): IterableIterator<[key: string, value: T]>
276
+
277
+ set(key: string, value: T): this
278
+ has(key: string): boolean
279
+ get(key: string): T | undefined
280
+ delete(key: string): boolean
281
+ }
282
+ ```
283
+
284
+ ### RadixTree
285
+ ```ts
286
+ class RadixTree<K extends Iterable<T>, V, T = unknown> {
287
+ get [Symbol.toStringTag](): string
288
+
289
+ entries(): IterableIterator<[key: T[], value: V]>
290
+ keys(): IterableIterator<T[]>
291
+ values(): IterableIterator<V>
292
+
293
+ set(key: K, value: V): this
294
+ has(key: K): boolean
295
+ get(key: K): V | undefined
296
+ delete(key: K): boolean
297
+ }
298
+ ```
299
+
300
+ ### StringRadixTree
301
+ ```ts
302
+ class StringRadixTree<T> {
303
+ get [Symbol.toStringTag](): string
304
+
305
+ keys(): IterableIterator<string>
306
+ values(): IterableIterator<T>
307
+ entries(): IterableIterator<[key: string, value: T]>
308
+
309
+ set(key: string, value: T): this
310
+ has(key: string): boolean
311
+ get(key: string): T | undefined
312
+ delete(key: string): boolean
313
+ }
314
+ ```
315
+
268
316
  ### SparseSet
269
317
  ```ts
270
318
  class SparseSet implements Iterable<number> {
@@ -11,6 +11,9 @@ export * from './lru-map';
11
11
  export * from './expirable-map';
12
12
  export * from './tlru-map';
13
13
  export * from './trie-map';
14
+ export * from './string-trie-map';
15
+ export { RadixTree } from './radix-tree';
16
+ export { StringRadixTree } from './string-radix-tree';
14
17
  export * from './sparse-set';
15
18
  export * from './sparse-map';
16
19
  export * from './typed-sparse-map';
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.DynamicTypedArray = void 0;
17
+ exports.DynamicTypedArray = exports.StringRadixTree = exports.RadixTree = void 0;
18
18
  __exportStar(require("./box"), exports);
19
19
  __exportStar(require("./cons"), exports);
20
20
  __exportStar(require("./array"), exports);
@@ -28,6 +28,11 @@ __exportStar(require("./lru-map"), exports);
28
28
  __exportStar(require("./expirable-map"), exports);
29
29
  __exportStar(require("./tlru-map"), exports);
30
30
  __exportStar(require("./trie-map"), exports);
31
+ __exportStar(require("./string-trie-map"), exports);
32
+ var radix_tree_1 = require("./radix-tree");
33
+ Object.defineProperty(exports, "RadixTree", { enumerable: true, get: function () { return radix_tree_1.RadixTree; } });
34
+ var string_radix_tree_1 = require("./string-radix-tree");
35
+ Object.defineProperty(exports, "StringRadixTree", { enumerable: true, get: function () { return string_radix_tree_1.StringRadixTree; } });
31
36
  __exportStar(require("./sparse-set"), exports);
32
37
  __exportStar(require("./sparse-map"), exports);
33
38
  __exportStar(require("./typed-sparse-map"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,4CAAyB;AACzB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB;AACzB,kDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,4CAAyB;AACzB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,oDAAiC;AACjC,2CAAwC;AAA/B,uGAAA,SAAS,OAAA;AAClB,yDAAqD;AAA5C,oHAAA,eAAe,OAAA;AACxB,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB;AACzB,kDAA+B"}
@@ -0,0 +1,17 @@
1
+ export declare class RadixTree<K extends Iterable<T>, V, T = unknown> {
2
+ private root;
3
+ get [Symbol.toStringTag](): string;
4
+ entries(): IterableIterator<[key: T[], value: V]>;
5
+ keys(): IterableIterator<T[]>;
6
+ values(): IterableIterator<V>;
7
+ set(key: K, value: V): this;
8
+ has(key: K): boolean;
9
+ get(key: K): V | undefined;
10
+ delete(key: K): boolean;
11
+ }
12
+ export declare function matchPrefix<T>(prefixes: Iterable<T[]>, path: T[]): T[] | undefined;
13
+ export declare function findCommonPrefix<T>(prefixes: Iterable<T[]>, path: T[]): {
14
+ prefix: T[];
15
+ commonPartLength: number;
16
+ } | undefined;
17
+ export declare function getCommonPrefix<T>(paths: T[][]): T[];
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommonPrefix = exports.findCommonPrefix = exports.matchPrefix = exports.RadixTree = void 0;
4
+ const iterable_operator_1 = require("iterable-operator");
5
+ const extra_utils_1 = require("extra-utils");
6
+ class TreeNode {
7
+ constructor(value) {
8
+ this.value = value;
9
+ this.children = new Map();
10
+ }
11
+ }
12
+ class RadixTree {
13
+ constructor() {
14
+ this.root = new TreeNode();
15
+ }
16
+ get [Symbol.toStringTag]() {
17
+ return this.constructor.name;
18
+ }
19
+ entries() {
20
+ return dfs(this.root, []);
21
+ function* dfs(node, path) {
22
+ for (const [prefix, childNode] of node.children) {
23
+ const newPath = [...path, ...prefix];
24
+ if ((0, extra_utils_1.isntUndefined)(childNode.value)) {
25
+ yield [newPath, childNode.value];
26
+ }
27
+ yield* dfs(childNode, newPath);
28
+ }
29
+ }
30
+ }
31
+ keys() {
32
+ return (0, iterable_operator_1.map)(this.entries(), ([key]) => key);
33
+ }
34
+ values() {
35
+ return (0, iterable_operator_1.map)(this.entries(), ([, value]) => value);
36
+ }
37
+ set(key, value) {
38
+ set((0, iterable_operator_1.toArray)(key), value, this.root);
39
+ return this;
40
+ function set(key, value, node) {
41
+ const commonPrefix = findCommonPrefix(node.children.keys(), key);
42
+ if ((0, extra_utils_1.isntUndefined)(commonPrefix)) {
43
+ const { prefix, commonPartLength } = commonPrefix;
44
+ if (prefix.length === commonPartLength) {
45
+ const prefixNode = node.children.get(prefix);
46
+ if (key.length === prefix.length) {
47
+ prefixNode.value = value;
48
+ }
49
+ else {
50
+ const newKey = key.slice(prefix.length);
51
+ set(newKey, value, prefixNode);
52
+ }
53
+ }
54
+ else {
55
+ const oldPrefixNode = node.children.get(prefix);
56
+ const commonPrefix = prefix.slice(0, commonPartLength);
57
+ const newPrefixNode = new TreeNode();
58
+ node.children.set(commonPrefix, newPrefixNode);
59
+ newPrefixNode.children.set(prefix.slice(commonPartLength), oldPrefixNode);
60
+ newPrefixNode.children.set(key.slice(commonPartLength), new TreeNode(value));
61
+ node.children.delete(prefix);
62
+ }
63
+ }
64
+ else {
65
+ node.children.set(key, new TreeNode(value));
66
+ }
67
+ }
68
+ }
69
+ has(key) {
70
+ return has((0, iterable_operator_1.toArray)(key), this.root);
71
+ function has(key, node) {
72
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
73
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
74
+ const restKey = key.slice(matchedPrefix.length);
75
+ if (restKey.length === 0) {
76
+ return true;
77
+ }
78
+ else {
79
+ return has(restKey, node.children.get(matchedPrefix));
80
+ }
81
+ }
82
+ else {
83
+ return false;
84
+ }
85
+ }
86
+ }
87
+ get(key) {
88
+ return get((0, iterable_operator_1.toArray)(key), this.root);
89
+ function get(key, node) {
90
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
91
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
92
+ const restKey = key.slice(matchedPrefix.length);
93
+ const nextNode = node.children.get(matchedPrefix);
94
+ if (restKey.length === 0) {
95
+ return nextNode.value;
96
+ }
97
+ else {
98
+ return get(restKey, nextNode);
99
+ }
100
+ }
101
+ else {
102
+ return undefined;
103
+ }
104
+ }
105
+ }
106
+ delete(key) {
107
+ return _delete((0, iterable_operator_1.toArray)(key), this.root);
108
+ function _delete(key, node) {
109
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
110
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
111
+ if (key.length === matchedPrefix.length) {
112
+ const targetNode = node.children.get(matchedPrefix);
113
+ if (targetNode.children.size === 0) {
114
+ node.children.delete(matchedPrefix);
115
+ }
116
+ else {
117
+ delete node.value;
118
+ if (targetNode.children.size === 1) {
119
+ const [key, value] = (0, iterable_operator_1.first)(targetNode.children.entries());
120
+ node.children.set([...matchedPrefix, ...key], value);
121
+ node.children.delete(matchedPrefix);
122
+ }
123
+ }
124
+ return true;
125
+ }
126
+ else {
127
+ const nextNode = node.children.get(matchedPrefix);
128
+ const nextKey = key.slice(matchedPrefix.length);
129
+ const deleted = _delete(nextKey, nextNode);
130
+ if (deleted) {
131
+ if (!('value' in nextNode)) {
132
+ switch (nextNode.children.size) {
133
+ case 0: {
134
+ node.children.delete(matchedPrefix);
135
+ break;
136
+ }
137
+ case 1: {
138
+ const [key, value] = (0, iterable_operator_1.first)(nextNode.children.entries());
139
+ node.children.set([...matchedPrefix, ...key], value);
140
+ node.children.delete(matchedPrefix);
141
+ break;
142
+ }
143
+ default: {
144
+ const entries = (0, iterable_operator_1.toArray)(nextNode.children.entries());
145
+ const keys = entries.map(([key]) => key);
146
+ const commonPrefix = getCommonPrefix(keys);
147
+ if (commonPrefix) {
148
+ const newPrefix = [...matchedPrefix, ...commonPrefix];
149
+ const childNode = new TreeNode();
150
+ for (const [key, value] of entries) {
151
+ childNode.children.set(key.slice(commonPrefix.length), value);
152
+ }
153
+ node.children.set(newPrefix, childNode);
154
+ node.children.delete(matchedPrefix);
155
+ }
156
+ }
157
+ }
158
+ }
159
+ return true;
160
+ }
161
+ else {
162
+ return false;
163
+ }
164
+ }
165
+ }
166
+ else {
167
+ return false;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ exports.RadixTree = RadixTree;
173
+ function matchPrefix(prefixes, path) {
174
+ return (0, iterable_operator_1.find)(prefixes, prefix => path[0] === prefix[0]);
175
+ }
176
+ exports.matchPrefix = matchPrefix;
177
+ function findCommonPrefix(prefixes, path) {
178
+ for (const prefix of prefixes) {
179
+ let commonPartLength = 0;
180
+ for (let i = 0; i < prefix.length; i++) {
181
+ if (path[i] === prefix[i]) {
182
+ commonPartLength++;
183
+ }
184
+ else {
185
+ if (commonPartLength > 0) {
186
+ return { prefix, commonPartLength };
187
+ }
188
+ }
189
+ }
190
+ if (commonPartLength > 0) {
191
+ return { prefix, commonPartLength };
192
+ }
193
+ }
194
+ }
195
+ exports.findCommonPrefix = findCommonPrefix;
196
+ function getCommonPrefix(paths) {
197
+ if (paths.length > 0) {
198
+ const commonPrefix = [];
199
+ loop: for (let elementIndex = 0, firstPathLength = paths[0].length; elementIndex < firstPathLength; elementIndex++) {
200
+ const element = paths[0][elementIndex];
201
+ for (let pathIndex = 1; pathIndex < paths.length; pathIndex++) {
202
+ const path = paths[pathIndex];
203
+ if (elementIndex < path.length) {
204
+ if (path[elementIndex] !== element) {
205
+ break loop;
206
+ }
207
+ }
208
+ else {
209
+ break loop;
210
+ }
211
+ }
212
+ commonPrefix.push(element);
213
+ }
214
+ return commonPrefix;
215
+ }
216
+ else {
217
+ return [];
218
+ }
219
+ }
220
+ exports.getCommonPrefix = getCommonPrefix;
221
+ //# sourceMappingURL=radix-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix-tree.js","sourceRoot":"","sources":["../../src/radix-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare class StringRadixTree<T> {
2
+ private root;
3
+ get [Symbol.toStringTag](): string;
4
+ entries(): IterableIterator<[key: string, value: T]>;
5
+ keys(): IterableIterator<string>;
6
+ values(): IterableIterator<T>;
7
+ set(key: string, value: T): this;
8
+ has(key: string): boolean;
9
+ get(key: string): T | undefined;
10
+ delete(key: string): boolean;
11
+ }
12
+ export declare function matchPrefix(prefixes: Iterable<string>, path: string): string | undefined;
13
+ export declare function findCommonPrefix(prefixes: Iterable<string>, path: string): {
14
+ prefix: string;
15
+ commonPartLength: number;
16
+ } | undefined;
17
+ export declare function getCommonPrefix(paths: string[]): string;
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommonPrefix = exports.findCommonPrefix = exports.matchPrefix = exports.StringRadixTree = void 0;
4
+ const iterable_operator_1 = require("iterable-operator");
5
+ const extra_utils_1 = require("extra-utils");
6
+ class TreeNode {
7
+ constructor(value) {
8
+ this.value = value;
9
+ this.children = new Map();
10
+ }
11
+ }
12
+ class StringRadixTree {
13
+ constructor() {
14
+ this.root = new TreeNode();
15
+ }
16
+ get [Symbol.toStringTag]() {
17
+ return this.constructor.name;
18
+ }
19
+ entries() {
20
+ return dfs(this.root, '');
21
+ function* dfs(node, path) {
22
+ for (const [prefix, childNode] of node.children) {
23
+ const newPath = path + prefix;
24
+ if ((0, extra_utils_1.isntUndefined)(childNode.value)) {
25
+ yield [newPath, childNode.value];
26
+ }
27
+ yield* dfs(childNode, newPath);
28
+ }
29
+ }
30
+ }
31
+ keys() {
32
+ return (0, iterable_operator_1.map)(this.entries(), ([key]) => key);
33
+ }
34
+ values() {
35
+ return (0, iterable_operator_1.map)(this.entries(), ([, value]) => value);
36
+ }
37
+ set(key, value) {
38
+ set(key, value, this.root);
39
+ return this;
40
+ function set(key, value, node) {
41
+ const commonPrefix = findCommonPrefix(node.children.keys(), key);
42
+ if ((0, extra_utils_1.isntUndefined)(commonPrefix)) {
43
+ const { prefix, commonPartLength } = commonPrefix;
44
+ if (prefix.length === commonPartLength) {
45
+ const prefixNode = node.children.get(prefix);
46
+ if (key.length === prefix.length) {
47
+ prefixNode.value = value;
48
+ }
49
+ else {
50
+ const newKey = key.slice(prefix.length);
51
+ set(newKey, value, prefixNode);
52
+ }
53
+ }
54
+ else {
55
+ const oldPrefixNode = node.children.get(prefix);
56
+ const commonPrefix = prefix.slice(0, commonPartLength);
57
+ const newPrefixNode = new TreeNode();
58
+ node.children.set(commonPrefix, newPrefixNode);
59
+ newPrefixNode.children.set(prefix.slice(commonPartLength), oldPrefixNode);
60
+ newPrefixNode.children.set(key.slice(commonPartLength), new TreeNode(value));
61
+ node.children.delete(prefix);
62
+ }
63
+ }
64
+ else {
65
+ node.children.set(key, new TreeNode(value));
66
+ }
67
+ }
68
+ }
69
+ has(key) {
70
+ return has(key, this.root);
71
+ function has(key, node) {
72
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
73
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
74
+ const restKey = key.slice(matchedPrefix.length);
75
+ if (restKey.length === 0) {
76
+ return true;
77
+ }
78
+ else {
79
+ return has(restKey, node.children.get(matchedPrefix));
80
+ }
81
+ }
82
+ else {
83
+ return false;
84
+ }
85
+ }
86
+ }
87
+ get(key) {
88
+ return get(key, this.root);
89
+ function get(key, node) {
90
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
91
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
92
+ const restKey = key.slice(matchedPrefix.length);
93
+ const nextNode = node.children.get(matchedPrefix);
94
+ if (restKey.length === 0) {
95
+ return nextNode.value;
96
+ }
97
+ else {
98
+ return get(restKey, nextNode);
99
+ }
100
+ }
101
+ else {
102
+ return undefined;
103
+ }
104
+ }
105
+ }
106
+ delete(key) {
107
+ return _delete(key, this.root);
108
+ function _delete(key, node) {
109
+ const matchedPrefix = matchPrefix(node.children.keys(), key);
110
+ if ((0, extra_utils_1.isntUndefined)(matchedPrefix)) {
111
+ if (key.length === matchedPrefix.length) {
112
+ const targetNode = node.children.get(matchedPrefix);
113
+ if (targetNode.children.size === 0) {
114
+ node.children.delete(matchedPrefix);
115
+ }
116
+ else {
117
+ delete node.value;
118
+ if (targetNode.children.size === 1) {
119
+ const [key, value] = (0, iterable_operator_1.first)(targetNode.children.entries());
120
+ node.children.set(matchedPrefix + key, value);
121
+ node.children.delete(matchedPrefix);
122
+ }
123
+ }
124
+ return true;
125
+ }
126
+ else {
127
+ const nextNode = node.children.get(matchedPrefix);
128
+ const nextKey = key.slice(matchedPrefix.length);
129
+ const deleted = _delete(nextKey, nextNode);
130
+ if (deleted) {
131
+ if (!('value' in nextNode)) {
132
+ switch (nextNode.children.size) {
133
+ case 0: {
134
+ node.children.delete(matchedPrefix);
135
+ break;
136
+ }
137
+ case 1: {
138
+ const [key, value] = (0, iterable_operator_1.first)(nextNode.children.entries());
139
+ node.children.set(matchedPrefix + key, value);
140
+ node.children.delete(matchedPrefix);
141
+ break;
142
+ }
143
+ default: {
144
+ const entries = (0, iterable_operator_1.toArray)(nextNode.children.entries());
145
+ const keys = entries.map(([key]) => key);
146
+ const commonPrefix = getCommonPrefix(keys);
147
+ if (commonPrefix) {
148
+ const newPrefix = matchedPrefix + commonPrefix;
149
+ const childNode = new TreeNode();
150
+ for (const [key, value] of entries) {
151
+ childNode.children.set(key.slice(commonPrefix.length), value);
152
+ }
153
+ node.children.set(newPrefix, childNode);
154
+ node.children.delete(matchedPrefix);
155
+ }
156
+ }
157
+ }
158
+ }
159
+ return true;
160
+ }
161
+ else {
162
+ return false;
163
+ }
164
+ }
165
+ }
166
+ else {
167
+ return false;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ exports.StringRadixTree = StringRadixTree;
173
+ function matchPrefix(prefixes, path) {
174
+ return (0, iterable_operator_1.find)(prefixes, prefix => path.startsWith(prefix));
175
+ }
176
+ exports.matchPrefix = matchPrefix;
177
+ function findCommonPrefix(prefixes, path) {
178
+ for (const prefix of prefixes) {
179
+ let commonPartLength = 0;
180
+ for (let i = 0; i < prefix.length; i++) {
181
+ if (path[i] === prefix[i]) {
182
+ commonPartLength++;
183
+ }
184
+ else {
185
+ if (commonPartLength > 0) {
186
+ return { prefix, commonPartLength };
187
+ }
188
+ }
189
+ }
190
+ if (commonPartLength > 0) {
191
+ return { prefix, commonPartLength };
192
+ }
193
+ }
194
+ }
195
+ exports.findCommonPrefix = findCommonPrefix;
196
+ function getCommonPrefix(paths) {
197
+ if (paths.length > 0) {
198
+ const commonPrefix = [];
199
+ loop: for (let charIndex = 0, firstPathLength = paths[0].length; charIndex < firstPathLength; charIndex++) {
200
+ const char = paths[0][charIndex];
201
+ for (let pathIndex = 1; pathIndex < paths.length; pathIndex++) {
202
+ const path = paths[pathIndex];
203
+ if (charIndex < path.length) {
204
+ if (path[charIndex] !== char) {
205
+ break loop;
206
+ }
207
+ }
208
+ else {
209
+ break loop;
210
+ }
211
+ }
212
+ commonPrefix.push(char);
213
+ }
214
+ return commonPrefix.join('');
215
+ }
216
+ else {
217
+ return '';
218
+ }
219
+ }
220
+ exports.getCommonPrefix = getCommonPrefix;
221
+ //# sourceMappingURL=string-radix-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-radix-tree.js","sourceRoot":"","sources":["../../src/string-radix-tree.ts"],"names":[],"mappings":";;;AAAA,yDAA6D;AAC7D,6CAA2C;AAE3C,MAAM,QAAQ;IAGZ,YAAmB,KAAS;QAAT,UAAK,GAAL,KAAK,CAAI;QAF5B,aAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAEV,CAAC;CACjC;AAED,MAAa,eAAe;IAA5B;QACU,SAAI,GAAG,IAAI,QAAQ,EAAK,CAAA;IAyLlC,CAAC;IAvLC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEzB,QAAQ,CAAC,CAAC,GAAG,CACX,IAAiB,EACjB,IAAY;YAEZ,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,CAAA;gBAC7B,IAAI,IAAA,2BAAa,EAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAClC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;iBACjC;gBAED,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;aAC/B;QACH,CAAC;IACH,CAAC;IAED,IAAI;QACF,OAAO,IAAA,uBAAG,EAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM;QACJ,OAAO,IAAA,uBAAG,EAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAClD,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;QAEX,SAAS,GAAG,CAAC,GAAW,EAAE,KAAQ,EAAE,IAAiB;YACnD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;YAChE,IAAI,IAAA,2BAAa,EAAC,YAAY,CAAC,EAAE;gBAC/B,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAAA;gBACjD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE;oBAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;oBAE7C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;wBAEhC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;qBACzB;yBAAM;wBAEL,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;wBACvC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;qBAC/B;iBACF;qBAAM;oBAGL,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;oBAChD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;oBACtD,MAAM,aAAa,GAAG,IAAI,QAAQ,EAAK,CAAA;oBACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;oBAC9C,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,CAAA;oBACzE,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,IAAI,QAAQ,CAAI,KAAK,CAAC,CAAC,CAAA;oBAC/E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;iBAC7B;aACF;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;aAC5C;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1B,SAAS,GAAG,CAAC,GAAW,EAAE,IAAiB;YACzC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5D,IAAI,IAAA,2BAAa,EAAC,aAAa,CAAC,EAAE;gBAChC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;gBAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,OAAO,IAAI,CAAA;iBACZ;qBAAM;oBACL,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,CAAA;iBACvD;aACF;iBAAM;gBACL,OAAO,KAAK,CAAA;aACb;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1B,SAAS,GAAG,CAAC,GAAW,EAAE,IAAiB;YACzC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5D,IAAI,IAAA,2BAAa,EAAC,aAAa,CAAC,EAAE;gBAChC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAA;gBAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,OAAO,QAAQ,CAAC,KAAK,CAAA;iBACtB;qBAAM;oBACL,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;iBAC9B;aACF;iBAAM;gBACL,OAAO,SAAS,CAAA;aACjB;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9B,SAAS,OAAO,CAAC,GAAW,EAAE,IAAiB;YAC7C,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5D,IAAI,IAAA,2BAAa,EAAC,aAAa,CAAC,EAAE;gBAChC,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE;oBAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAA;oBACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;wBAGlC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;qBACpC;yBAAM;wBAEL,OAAO,IAAI,CAAC,KAAK,CAAA;wBACjB,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;4BAGlC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAA,yBAAK,EAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAE,CAAA;4BAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;4BAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;yBACpC;qBACF;oBACD,OAAO,IAAI,CAAA;iBACZ;qBAAM;oBAEL,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAA;oBAClD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;oBAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;oBAC1C,IAAI,OAAO,EAAE;wBAEX,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE;4BAE1B,QAAQ,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;gCAC9B,KAAK,CAAC,CAAC,CAAC;oCAEN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;oCACnC,MAAK;iCACN;gCACD,KAAK,CAAC,CAAC,CAAC;oCAIN,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAA,yBAAK,EAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAE,CAAA;oCACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;oCAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;oCACnC,MAAK;iCACN;gCACD,OAAO,CAAC,CAAC;oCAIP,MAAM,OAAO,GAAG,IAAA,2BAAO,EAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;oCACpD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;oCACxC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;oCAC1C,IAAI,YAAY,EAAE;wCAChB,MAAM,SAAS,GAAG,aAAa,GAAG,YAAY,CAAA;wCAC9C,MAAM,SAAS,GAAG,IAAI,QAAQ,EAAK,CAAA;wCACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;4CAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAA;yCAC9D;wCACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;wCACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;qCACpC;iCACF;6BACF;yBACF;wBACD,OAAO,IAAI,CAAA;qBACZ;yBAAM;wBAEL,OAAO,KAAK,CAAA;qBACb;iBACF;aACF;iBAAM;gBACL,OAAO,KAAK,CAAA;aACb;QACH,CAAC;IACH,CAAC;CACF;AA1LD,0CA0LC;AAOD,SAAgB,WAAW,CAAC,QAA0B,EAAE,IAAY;IAClE,OAAO,IAAA,wBAAI,EAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1D,CAAC;AAFD,kCAEC;AAOD,SAAgB,gBAAgB,CAAC,QAA0B,EAAE,IAAY;IAIvE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;QAC7B,IAAI,gBAAgB,GAAG,CAAC,CAAA;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;gBACzB,gBAAgB,EAAE,CAAA;aACnB;iBAAM;gBACL,IAAI,gBAAgB,GAAG,CAAC,EAAE;oBACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;iBACpC;aACF;SACF;QACD,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;SACpC;KACF;AACH,CAAC;AAnBD,4CAmBC;AAKD,SAAgB,eAAe,CAAC,KAAe;IAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,YAAY,GAAa,EAAE,CAAA;QAEjC,IAAI,EAAE,KACJ,IAAI,SAAS,GAAG,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EACpD,SAAS,GAAG,eAAe,EAC3B,SAAS,EAAE,EACX;YACA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAChC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;gBAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;oBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;wBAC5B,MAAM,IAAI,CAAA;qBACX;iBACF;qBAAM;oBACL,MAAM,IAAI,CAAA;iBACX;aACF;YACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACxB;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KAC7B;SAAM;QACL,OAAO,EAAE,CAAA;KACV;AACH,CAAC;AA3BD,0CA2BC"}
@@ -0,0 +1,11 @@
1
+ export declare class StringTrieMap<T> {
2
+ private root;
3
+ get [Symbol.toStringTag](): string;
4
+ entries(): IterableIterator<[key: string, value: T]>;
5
+ keys(): IterableIterator<string>;
6
+ values(): IterableIterator<T>;
7
+ set(key: string, value: T): this;
8
+ has(key: string): boolean;
9
+ get(key: string): T | undefined;
10
+ delete(key: string): boolean;
11
+ }