data-structure-typed 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +3 -1
  7. package/README.md +63 -26
  8. package/dist/cjs/binary-tree.cjs +23698 -0
  9. package/dist/cjs/graph.cjs +5236 -0
  10. package/dist/cjs/hash.cjs +1262 -0
  11. package/dist/cjs/heap.cjs +1540 -0
  12. package/dist/cjs/index.cjs +28244 -14795
  13. package/dist/cjs/linked-list.cjs +4370 -0
  14. package/dist/cjs/matrix.cjs +1042 -0
  15. package/dist/cjs/priority-queue.cjs +1314 -0
  16. package/dist/cjs/queue.cjs +4090 -0
  17. package/dist/cjs/stack.cjs +861 -0
  18. package/dist/cjs/trie.cjs +1173 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +23730 -0
  20. package/dist/cjs-legacy/graph.cjs +5234 -0
  21. package/dist/cjs-legacy/hash.cjs +1262 -0
  22. package/dist/cjs-legacy/heap.cjs +1537 -0
  23. package/dist/cjs-legacy/index.cjs +28239 -14790
  24. package/dist/cjs-legacy/linked-list.cjs +4376 -0
  25. package/dist/cjs-legacy/matrix.cjs +1045 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1312 -0
  27. package/dist/cjs-legacy/queue.cjs +4088 -0
  28. package/dist/cjs-legacy/stack.cjs +861 -0
  29. package/dist/cjs-legacy/trie.cjs +1172 -0
  30. package/dist/esm/binary-tree.mjs +23683 -0
  31. package/dist/esm/graph.mjs +5223 -0
  32. package/dist/esm/hash.mjs +1259 -0
  33. package/dist/esm/heap.mjs +1534 -0
  34. package/dist/esm/index.mjs +28242 -14796
  35. package/dist/esm/linked-list.mjs +4363 -0
  36. package/dist/esm/matrix.mjs +1038 -0
  37. package/dist/esm/priority-queue.mjs +1310 -0
  38. package/dist/esm/queue.mjs +4086 -0
  39. package/dist/esm/stack.mjs +859 -0
  40. package/dist/esm/trie.mjs +1170 -0
  41. package/dist/esm-legacy/binary-tree.mjs +23715 -0
  42. package/dist/esm-legacy/graph.mjs +5221 -0
  43. package/dist/esm-legacy/hash.mjs +1259 -0
  44. package/dist/esm-legacy/heap.mjs +1531 -0
  45. package/dist/esm-legacy/index.mjs +28237 -14791
  46. package/dist/esm-legacy/linked-list.mjs +4369 -0
  47. package/dist/esm-legacy/matrix.mjs +1041 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1308 -0
  49. package/dist/esm-legacy/queue.mjs +4084 -0
  50. package/dist/esm-legacy/stack.mjs +859 -0
  51. package/dist/esm-legacy/trie.mjs +1169 -0
  52. package/dist/types/data-structures/base/index.d.ts +1 -0
  53. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  54. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  55. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +240 -0
  56. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +280 -0
  57. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +502 -2
  58. package/dist/types/data-structures/binary-tree/bst.d.ts +481 -1
  59. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +380 -0
  60. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +120 -1
  61. package/dist/types/data-structures/binary-tree/tree-map.d.ts +2764 -384
  62. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2753 -353
  63. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2241 -321
  64. package/dist/types/data-structures/binary-tree/tree-set.d.ts +2554 -274
  65. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  66. package/dist/types/data-structures/graph/directed-graph.d.ts +200 -0
  67. package/dist/types/data-structures/graph/undirected-graph.d.ts +180 -0
  68. package/dist/types/data-structures/hash/hash-map.d.ts +230 -10
  69. package/dist/types/data-structures/heap/heap.d.ts +280 -0
  70. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +343 -3
  71. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +303 -3
  72. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +362 -2
  73. package/dist/types/data-structures/matrix/matrix.d.ts +160 -0
  74. package/dist/types/data-structures/queue/deque.d.ts +304 -4
  75. package/dist/types/data-structures/queue/queue.d.ts +240 -0
  76. package/dist/types/data-structures/stack/stack.d.ts +200 -0
  77. package/dist/types/data-structures/trie/trie.d.ts +244 -4
  78. package/dist/types/interfaces/graph.d.ts +1 -1
  79. package/dist/types/types/common.d.ts +2 -2
  80. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  81. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  82. package/dist/types/types/utils/validate-type.d.ts +4 -4
  83. package/dist/umd/data-structure-typed.js +28022 -14573
  84. package/dist/umd/data-structure-typed.min.js +9 -3
  85. package/docs-site-docusaurus/README.md +41 -0
  86. package/docs-site-docusaurus/docs/api/README.md +52 -0
  87. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  88. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  89. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  90. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  91. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  92. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  93. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  94. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  95. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  96. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  97. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  98. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  99. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  100. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  101. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  102. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  103. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  104. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  105. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  106. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  107. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  108. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  109. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  110. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  111. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  112. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  113. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  114. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  115. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  116. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  117. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  118. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  119. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  120. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  121. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  122. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  123. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  124. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  125. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  126. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  127. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  128. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  129. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  130. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  131. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  132. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  133. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  134. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  135. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  136. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  137. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  138. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  139. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  140. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  141. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  142. package/docs-site-docusaurus/package-lock.json +18667 -0
  143. package/docs-site-docusaurus/package.json +50 -0
  144. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  145. package/docs-site-docusaurus/sidebars.ts +23 -0
  146. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  147. package/docs-site-docusaurus/src/css/custom.css +96 -0
  148. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  149. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  150. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  151. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  152. package/docs-site-docusaurus/static/.nojekyll +0 -0
  153. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  154. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  155. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  156. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  157. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  158. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  159. package/docs-site-docusaurus/static/img/logo.png +0 -0
  160. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  161. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  162. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  163. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  164. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  165. package/docs-site-docusaurus/static/robots.txt +4 -0
  166. package/docs-site-docusaurus/typedoc.json +23 -0
  167. package/package.json +106 -10
  168. package/src/data-structures/base/index.ts +1 -0
  169. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  170. package/src/data-structures/base/linear-base.ts +3 -3
  171. package/src/data-structures/binary-tree/avl-tree.ts +240 -0
  172. package/src/data-structures/binary-tree/binary-indexed-tree.ts +281 -1
  173. package/src/data-structures/binary-tree/binary-tree.ts +502 -2
  174. package/src/data-structures/binary-tree/bst.ts +481 -1
  175. package/src/data-structures/binary-tree/red-black-tree.ts +380 -0
  176. package/src/data-structures/binary-tree/segment-tree.ts +121 -2
  177. package/src/data-structures/binary-tree/tree-map.ts +2862 -482
  178. package/src/data-structures/binary-tree/tree-multi-map.ts +2963 -563
  179. package/src/data-structures/binary-tree/tree-multi-set.ts +2399 -479
  180. package/src/data-structures/binary-tree/tree-set.ts +2685 -405
  181. package/src/data-structures/graph/abstract-graph.ts +4 -4
  182. package/src/data-structures/graph/directed-graph.ts +200 -0
  183. package/src/data-structures/graph/undirected-graph.ts +180 -0
  184. package/src/data-structures/hash/hash-map.ts +235 -15
  185. package/src/data-structures/heap/heap.ts +280 -0
  186. package/src/data-structures/linked-list/doubly-linked-list.ts +343 -3
  187. package/src/data-structures/linked-list/singly-linked-list.ts +303 -3
  188. package/src/data-structures/linked-list/skip-linked-list.ts +362 -2
  189. package/src/data-structures/matrix/matrix.ts +161 -1
  190. package/src/data-structures/queue/deque.ts +305 -5
  191. package/src/data-structures/queue/queue.ts +240 -0
  192. package/src/data-structures/stack/stack.ts +200 -0
  193. package/src/data-structures/trie/trie.ts +245 -5
  194. package/src/interfaces/graph.ts +1 -1
  195. package/src/types/common.ts +2 -2
  196. package/src/types/data-structures/heap/heap.ts +1 -0
  197. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  198. package/src/types/utils/validate-type.ts +4 -4
  199. package/vercel.json +6 -0
  200. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  201. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  202. package/dist/leetcode/avl-tree.mjs +0 -2720
  203. package/dist/leetcode/binary-tree.mjs +0 -1594
  204. package/dist/leetcode/bst.mjs +0 -2398
  205. package/dist/leetcode/deque.mjs +0 -683
  206. package/dist/leetcode/directed-graph.mjs +0 -1733
  207. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  208. package/dist/leetcode/hash-map.mjs +0 -493
  209. package/dist/leetcode/heap.mjs +0 -542
  210. package/dist/leetcode/max-heap.mjs +0 -375
  211. package/dist/leetcode/max-priority-queue.mjs +0 -383
  212. package/dist/leetcode/min-heap.mjs +0 -363
  213. package/dist/leetcode/min-priority-queue.mjs +0 -371
  214. package/dist/leetcode/priority-queue.mjs +0 -363
  215. package/dist/leetcode/queue.mjs +0 -943
  216. package/dist/leetcode/red-black-tree.mjs +0 -2765
  217. package/dist/leetcode/singly-linked-list.mjs +0 -754
  218. package/dist/leetcode/stack.mjs +0 -217
  219. package/dist/leetcode/tree-counter.mjs +0 -3039
  220. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  221. package/dist/leetcode/trie.mjs +0 -413
  222. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -1,413 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var TrieNode = class {
103
- static {
104
- __name(this, "TrieNode");
105
- }
106
- constructor(key) {
107
- this._key = key;
108
- this._isEnd = false;
109
- this._children = new Map();
110
- }
111
- _key;
112
- get key() {
113
- return this._key;
114
- }
115
- set key(value) {
116
- this._key = value;
117
- }
118
- _children;
119
- get children() {
120
- return this._children;
121
- }
122
- set children(value) {
123
- this._children = value;
124
- }
125
- _isEnd;
126
- get isEnd() {
127
- return this._isEnd;
128
- }
129
- set isEnd(value) {
130
- this._isEnd = value;
131
- }
132
- };
133
- var Trie = class extends IterableElementBase {
134
- static {
135
- __name(this, "Trie");
136
- }
137
- constructor(words = [], options) {
138
- super(options);
139
- if (options) {
140
- const { caseSensitive } = options;
141
- if (caseSensitive !== void 0) this._caseSensitive = caseSensitive;
142
- }
143
- if (words) {
144
- this.addMany(words);
145
- }
146
- }
147
- _size = 0;
148
- get size() {
149
- return this._size;
150
- }
151
- _caseSensitive = true;
152
- get caseSensitive() {
153
- return this._caseSensitive;
154
- }
155
- _root = new TrieNode("");
156
- get root() {
157
- return this._root;
158
- }
159
- get _total() {
160
- return this._size;
161
- }
162
- add(word) {
163
- word = this._caseProcess(word);
164
- let cur = this.root;
165
- let isNewWord = false;
166
- for (const c of word) {
167
- let nodeC = cur.children.get(c);
168
- if (!nodeC) {
169
- nodeC = new TrieNode(c);
170
- cur.children.set(c, nodeC);
171
- }
172
- cur = nodeC;
173
- }
174
- if (!cur.isEnd) {
175
- isNewWord = true;
176
- cur.isEnd = true;
177
- this._size++;
178
- }
179
- return isNewWord;
180
- }
181
- addMany(words) {
182
- const ans = [];
183
- for (const word of words) {
184
- if (this.toElementFn) {
185
- ans.push(this.add(this.toElementFn(word)));
186
- } else {
187
- ans.push(this.add(word));
188
- }
189
- }
190
- return ans;
191
- }
192
- has(word) {
193
- word = this._caseProcess(word);
194
- let cur = this.root;
195
- for (const c of word) {
196
- const nodeC = cur.children.get(c);
197
- if (!nodeC) return false;
198
- cur = nodeC;
199
- }
200
- return cur.isEnd;
201
- }
202
- isEmpty() {
203
- return this._size === 0;
204
- }
205
- clear() {
206
- this._size = 0;
207
- this._root = new TrieNode("");
208
- }
209
- delete(word) {
210
- word = this._caseProcess(word);
211
- let isDeleted = false;
212
- const dfs = __name((cur, i) => {
213
- const char = word[i];
214
- const child = cur.children.get(char);
215
- if (child) {
216
- if (i === word.length - 1) {
217
- if (child.isEnd) {
218
- if (child.children.size > 0) {
219
- child.isEnd = false;
220
- } else {
221
- cur.children.delete(char);
222
- }
223
- isDeleted = true;
224
- return true;
225
- }
226
- return false;
227
- }
228
- const res = dfs(child, i + 1);
229
- if (res && !cur.isEnd && child.children.size === 0) {
230
- cur.children.delete(char);
231
- return true;
232
- }
233
- return false;
234
- }
235
- return false;
236
- }, "dfs");
237
- dfs(this.root, 0);
238
- if (isDeleted) {
239
- this._size--;
240
- }
241
- return isDeleted;
242
- }
243
- getHeight() {
244
- const startNode = this.root;
245
- let maxDepth = 0;
246
- if (startNode) {
247
- const bfs = __name((node, level) => {
248
- if (level > maxDepth) {
249
- maxDepth = level;
250
- }
251
- const { children } = node;
252
- if (children) {
253
- for (const child of children.entries()) {
254
- bfs(child[1], level + 1);
255
- }
256
- }
257
- }, "bfs");
258
- bfs(startNode, 0);
259
- }
260
- return maxDepth;
261
- }
262
- hasPurePrefix(input) {
263
- input = this._caseProcess(input);
264
- let cur = this.root;
265
- for (const c of input) {
266
- const nodeC = cur.children.get(c);
267
- if (!nodeC) return false;
268
- cur = nodeC;
269
- }
270
- return !cur.isEnd;
271
- }
272
- hasPrefix(input) {
273
- input = this._caseProcess(input);
274
- let cur = this.root;
275
- for (const c of input) {
276
- const nodeC = cur.children.get(c);
277
- if (!nodeC) return false;
278
- cur = nodeC;
279
- }
280
- return true;
281
- }
282
- hasCommonPrefix(input) {
283
- input = this._caseProcess(input);
284
- let commonPre = "";
285
- const dfs = __name((cur) => {
286
- commonPre += cur.key;
287
- if (commonPre === input) return;
288
- if (cur.isEnd) return;
289
- if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
290
- else return;
291
- }, "dfs");
292
- dfs(this.root);
293
- return commonPre === input;
294
- }
295
- getLongestCommonPrefix() {
296
- let commonPre = "";
297
- const dfs = __name((cur) => {
298
- commonPre += cur.key;
299
- if (cur.isEnd) return;
300
- if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
301
- else return;
302
- }, "dfs");
303
- dfs(this.root);
304
- return commonPre;
305
- }
306
- getWords(prefix = "", max = Number.MAX_SAFE_INTEGER, isAllWhenEmptyPrefix = false) {
307
- prefix = this._caseProcess(prefix);
308
- const words = [];
309
- let found = 0;
310
- function dfs(node, word) {
311
- for (const char of node.children.keys()) {
312
- const charNode = node.children.get(char);
313
- if (charNode !== void 0) {
314
- dfs(charNode, word.concat(char));
315
- }
316
- }
317
- if (node.isEnd) {
318
- if (found > max - 1) return;
319
- words.push(word);
320
- found++;
321
- }
322
- }
323
- __name(dfs, "dfs");
324
- let startNode = this.root;
325
- if (prefix) {
326
- for (const c of prefix) {
327
- const nodeC = startNode.children.get(c);
328
- if (nodeC) {
329
- startNode = nodeC;
330
- } else {
331
- return [];
332
- }
333
- }
334
- }
335
- if (isAllWhenEmptyPrefix || startNode !== this.root) dfs(startNode, prefix);
336
- return words;
337
- }
338
- clone() {
339
- const next = this._createInstance();
340
- for (const x of this) next.add(x);
341
- return next;
342
- }
343
- filter(predicate, thisArg) {
344
- const results = this._createInstance();
345
- let index = 0;
346
- for (const word of this) {
347
- if (predicate.call(thisArg, word, index, this)) {
348
- results.add(word);
349
- }
350
- index++;
351
- }
352
- return results;
353
- }
354
- map(callback, options, thisArg) {
355
- const newTrie = this._createLike([], options);
356
- let i = 0;
357
- for (const x of this) {
358
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
359
- if (typeof v !== "string") {
360
- throw new TypeError(`Trie.map callback must return string; got ${typeof v}`);
361
- }
362
- newTrie.add(v);
363
- }
364
- return newTrie;
365
- }
366
- mapSame(callback, thisArg) {
367
- const next = this._createInstance();
368
- let i = 0;
369
- for (const key of this) {
370
- const mapped = thisArg === void 0 ? callback(key, i++, this) : callback.call(thisArg, key, i++, this);
371
- next.add(mapped);
372
- }
373
- return next;
374
- }
375
- _createInstance(options) {
376
- const Ctor = this.constructor;
377
- const next = new Ctor([], {
378
- toElementFn: this.toElementFn,
379
- caseSensitive: this.caseSensitive,
380
- ...options ?? {}
381
- });
382
- return next;
383
- }
384
- _createLike(elements = [], options) {
385
- const Ctor = this.constructor;
386
- return new Ctor(elements, options);
387
- }
388
- _spawnLike(options) {
389
- return this._createLike([], options);
390
- }
391
- *_getIterator() {
392
- function* _dfs(node, path) {
393
- if (node.isEnd) {
394
- yield path;
395
- }
396
- for (const [char, childNode] of node.children) {
397
- yield* _dfs(childNode, path + char);
398
- }
399
- }
400
- __name(_dfs, "_dfs");
401
- yield* _dfs(this.root, "");
402
- }
403
- _caseProcess(str) {
404
- if (!this._caseSensitive) {
405
- str = str.toLowerCase();
406
- }
407
- return str;
408
- }
409
- };
410
- export {
411
- Trie,
412
- TrieNode
413
- };