data-structure-typed 2.5.1 → 2.5.3

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 (184) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/MIGRATION.md +169 -0
  3. package/README.md +135 -23
  4. package/README_CN.md +551 -143
  5. package/SPECIFICATION.md +20 -14
  6. package/SPECIFICATION.zh-CN.md +20 -14
  7. package/dist/cjs/binary-tree.cjs +6460 -1591
  8. package/dist/cjs/graph.cjs +440 -20
  9. package/dist/cjs/hash.cjs +125 -22
  10. package/dist/cjs/heap.cjs +196 -47
  11. package/dist/cjs/index.cjs +8486 -2429
  12. package/dist/cjs/linked-list.cjs +456 -31
  13. package/dist/cjs/matrix.cjs +79 -9
  14. package/dist/cjs/priority-queue.cjs +193 -44
  15. package/dist/cjs/queue.cjs +391 -2
  16. package/dist/cjs/stack.cjs +92 -6
  17. package/dist/cjs/trie.cjs +122 -28
  18. package/dist/cjs-legacy/binary-tree.cjs +6484 -1612
  19. package/dist/cjs-legacy/graph.cjs +440 -20
  20. package/dist/cjs-legacy/hash.cjs +125 -22
  21. package/dist/cjs-legacy/heap.cjs +196 -47
  22. package/dist/cjs-legacy/index.cjs +8654 -2594
  23. package/dist/cjs-legacy/linked-list.cjs +456 -31
  24. package/dist/cjs-legacy/matrix.cjs +79 -9
  25. package/dist/cjs-legacy/priority-queue.cjs +193 -44
  26. package/dist/cjs-legacy/queue.cjs +391 -2
  27. package/dist/cjs-legacy/stack.cjs +92 -6
  28. package/dist/cjs-legacy/trie.cjs +122 -28
  29. package/dist/esm/binary-tree.mjs +6460 -1591
  30. package/dist/esm/graph.mjs +440 -20
  31. package/dist/esm/hash.mjs +125 -22
  32. package/dist/esm/heap.mjs +196 -47
  33. package/dist/esm/index.mjs +8486 -2430
  34. package/dist/esm/linked-list.mjs +456 -31
  35. package/dist/esm/matrix.mjs +79 -9
  36. package/dist/esm/priority-queue.mjs +193 -44
  37. package/dist/esm/queue.mjs +391 -2
  38. package/dist/esm/stack.mjs +92 -6
  39. package/dist/esm/trie.mjs +122 -28
  40. package/dist/esm-legacy/binary-tree.mjs +6484 -1612
  41. package/dist/esm-legacy/graph.mjs +440 -20
  42. package/dist/esm-legacy/hash.mjs +125 -22
  43. package/dist/esm-legacy/heap.mjs +196 -47
  44. package/dist/esm-legacy/index.mjs +8654 -2595
  45. package/dist/esm-legacy/linked-list.mjs +456 -31
  46. package/dist/esm-legacy/matrix.mjs +79 -9
  47. package/dist/esm-legacy/priority-queue.mjs +193 -44
  48. package/dist/esm-legacy/queue.mjs +391 -2
  49. package/dist/esm-legacy/stack.mjs +92 -6
  50. package/dist/esm-legacy/trie.mjs +122 -28
  51. package/dist/types/common/error.d.ts +9 -0
  52. package/dist/types/common/index.d.ts +1 -1
  53. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -2
  54. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +112 -0
  55. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +214 -13
  56. package/dist/types/data-structures/binary-tree/bst.d.ts +294 -3
  57. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +155 -8
  58. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +48 -0
  59. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1370 -323
  60. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1329 -316
  61. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +1116 -295
  62. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1330 -326
  63. package/dist/types/data-structures/graph/directed-graph.d.ts +80 -0
  64. package/dist/types/data-structures/graph/undirected-graph.d.ts +72 -0
  65. package/dist/types/data-structures/hash/hash-map.d.ts +95 -6
  66. package/dist/types/data-structures/heap/heap.d.ts +154 -12
  67. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +143 -0
  68. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -1
  69. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +144 -0
  70. package/dist/types/data-structures/matrix/matrix.d.ts +64 -0
  71. package/dist/types/data-structures/queue/deque.d.ts +142 -0
  72. package/dist/types/data-structures/queue/queue.d.ts +109 -0
  73. package/dist/types/data-structures/stack/stack.d.ts +82 -2
  74. package/dist/types/data-structures/trie/trie.d.ts +96 -0
  75. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  76. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  77. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  78. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  79. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  80. package/dist/umd/data-structure-typed.js +8623 -2564
  81. package/dist/umd/data-structure-typed.min.js +5 -5
  82. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +696 -194
  83. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
  84. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +71 -71
  85. package/docs-site-docusaurus/docs/api/classes/BST.md +639 -189
  86. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
  87. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
  88. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +148 -160
  89. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  90. package/docs-site-docusaurus/docs/api/classes/Deque.md +105 -91
  91. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +82 -82
  92. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +104 -74
  93. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
  94. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
  95. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  96. package/docs-site-docusaurus/docs/api/classes/HashMap.md +51 -51
  97. package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
  98. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
  99. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +33 -33
  100. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +50 -50
  101. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +55 -55
  102. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +55 -55
  103. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
  104. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +78 -78
  105. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +82 -82
  106. package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
  107. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
  108. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
  109. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
  110. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
  111. package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
  112. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
  113. package/docs-site-docusaurus/docs/api/classes/Queue.md +112 -60
  114. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +708 -206
  115. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
  116. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +79 -79
  117. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
  118. package/docs-site-docusaurus/docs/api/classes/SkipList.md +44 -44
  119. package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
  120. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +236 -33
  121. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +162 -46
  122. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +232 -32
  123. package/docs-site-docusaurus/docs/api/classes/Trie.md +47 -47
  124. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  125. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +81 -81
  126. package/docs-site-docusaurus/docs/guide/architecture.md +75 -5
  127. package/docs-site-docusaurus/docs/guide/concepts.md +53 -3
  128. package/docs-site-docusaurus/docs/guide/faq.md +233 -0
  129. package/docs-site-docusaurus/docs/guide/guides.md +43 -58
  130. package/docs-site-docusaurus/docs/guide/installation.md +2 -0
  131. package/docs-site-docusaurus/docs/guide/integrations.md +75 -176
  132. package/docs-site-docusaurus/docs/guide/overview.md +132 -11
  133. package/docs-site-docusaurus/docs/guide/performance.md +2 -0
  134. package/docs-site-docusaurus/docs/guide/quick-start.md +31 -0
  135. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  136. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  137. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  138. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  139. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  140. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  141. package/docs-site-docusaurus/docusaurus.config.ts +1 -1
  142. package/docs-site-docusaurus/src/pages/index.tsx +55 -2
  143. package/docs-site-docusaurus/static/llms.txt +37 -0
  144. package/docs-site-docusaurus/typedoc.json +1 -0
  145. package/llms.txt +37 -0
  146. package/package.json +65 -56
  147. package/src/common/error.ts +19 -1
  148. package/src/common/index.ts +1 -1
  149. package/src/data-structures/base/iterable-element-base.ts +3 -2
  150. package/src/data-structures/binary-tree/avl-tree.ts +99 -5
  151. package/src/data-structures/binary-tree/binary-indexed-tree.ts +102 -4
  152. package/src/data-structures/binary-tree/binary-tree.ts +239 -78
  153. package/src/data-structures/binary-tree/bst.ts +542 -13
  154. package/src/data-structures/binary-tree/red-black-tree.ts +155 -15
  155. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  156. package/src/data-structures/binary-tree/tree-map.ts +1223 -261
  157. package/src/data-structures/binary-tree/tree-multi-map.ts +939 -30
  158. package/src/data-structures/binary-tree/tree-multi-set.ts +746 -10
  159. package/src/data-structures/binary-tree/tree-set.ts +1018 -99
  160. package/src/data-structures/graph/abstract-graph.ts +2 -2
  161. package/src/data-structures/graph/directed-graph.ts +71 -1
  162. package/src/data-structures/graph/undirected-graph.ts +64 -1
  163. package/src/data-structures/hash/hash-map.ts +102 -16
  164. package/src/data-structures/heap/heap.ts +153 -23
  165. package/src/data-structures/heap/max-heap.ts +2 -2
  166. package/src/data-structures/linked-list/doubly-linked-list.ts +139 -0
  167. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  168. package/src/data-structures/linked-list/skip-linked-list.ts +131 -5
  169. package/src/data-structures/matrix/matrix.ts +65 -9
  170. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  171. package/src/data-structures/queue/deque.ts +130 -0
  172. package/src/data-structures/queue/queue.ts +109 -0
  173. package/src/data-structures/stack/stack.ts +75 -5
  174. package/src/data-structures/trie/trie.ts +86 -2
  175. package/src/interfaces/binary-tree.ts +1 -9
  176. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  177. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  178. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  179. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  180. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
  181. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
  182. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
  183. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
  184. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
@@ -184,18 +184,11 @@ var _IterableEntryBase = class _IterableEntryBase {
184
184
  __name(_IterableEntryBase, "IterableEntryBase");
185
185
  var IterableEntryBase = _IterableEntryBase;
186
186
 
187
- // src/utils/utils.ts
188
- var rangeCheck = /* @__PURE__ */ __name((index, min, max, message) => {
189
- if (index < min || index > max) {
190
- throw new RangeError(message != null ? message : `Index ${index} is out of range [${min}, ${max}].`);
191
- }
192
- }, "rangeCheck");
193
- var isWeakKey = /* @__PURE__ */ __name((input) => {
194
- const inputType = typeof input;
195
- return inputType === "object" && input !== null || inputType === "function";
196
- }, "isWeakKey");
197
-
198
187
  // src/common/error.ts
188
+ function raise(ErrorClass, message) {
189
+ throw new ErrorClass(message);
190
+ }
191
+ __name(raise, "raise");
199
192
  var ERR = {
200
193
  // Range / index
201
194
  indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
@@ -217,9 +210,22 @@ var ERR = {
217
210
  matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
218
211
  matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
219
212
  matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
220
- matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch")
213
+ matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch"),
214
+ // Order statistic
215
+ orderStatisticNotEnabled: /* @__PURE__ */ __name((method, ctx) => `${ctx ? ctx + ": " : ""}${method}() requires enableOrderStatistic: true.`, "orderStatisticNotEnabled")
221
216
  };
222
217
 
218
+ // src/utils/utils.ts
219
+ var rangeCheck = /* @__PURE__ */ __name((index, min, max, message) => {
220
+ if (index < min || index > max) {
221
+ throw new RangeError(message != null ? message : `Index ${index} is out of range [${min}, ${max}].`);
222
+ }
223
+ }, "rangeCheck");
224
+ var isWeakKey = /* @__PURE__ */ __name((input) => {
225
+ const inputType = typeof input;
226
+ return inputType === "object" && input !== null || inputType === "function";
227
+ }, "isWeakKey");
228
+
223
229
  // src/data-structures/hash/hash-map.ts
224
230
  var _HashMap = class _HashMap extends IterableEntryBase {
225
231
  /**
@@ -307,6 +313,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
307
313
 
308
314
 
309
315
 
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
310
324
 
311
325
 
312
326
 
@@ -348,6 +362,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
348
362
 
349
363
 
350
364
 
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
351
373
 
352
374
 
353
375
 
@@ -427,6 +449,22 @@ var _HashMap = class _HashMap extends IterableEntryBase {
427
449
 
428
450
 
429
451
 
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
430
468
 
431
469
 
432
470
 
@@ -472,7 +510,7 @@ var _HashMap = class _HashMap extends IterableEntryBase {
472
510
  if (this.store[strKey] === void 0) this._size++;
473
511
  this._store[strKey] = { key, value };
474
512
  }
475
- return true;
513
+ return this;
476
514
  }
477
515
  /**
478
516
  * Insert many entries from an iterable.
@@ -499,6 +537,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
499
537
 
500
538
 
501
539
 
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
502
548
 
503
549
 
504
550
 
@@ -520,7 +566,11 @@ var _HashMap = class _HashMap extends IterableEntryBase {
520
566
  let key, value;
521
567
  if (this.isEntry(rawEle)) [key, value] = rawEle;
522
568
  else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
523
- if (key !== void 0 && value !== void 0) results.push(this.set(key, value));
569
+ if (key !== void 0 && value !== void 0) {
570
+ const sizeBefore = this._size;
571
+ this.set(key, value);
572
+ results.push(sizeBefore < this._size);
573
+ }
524
574
  }
525
575
  return results;
526
576
  }
@@ -551,6 +601,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
551
601
 
552
602
 
553
603
 
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
554
612
 
555
613
 
556
614
 
@@ -615,6 +673,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
615
673
 
616
674
 
617
675
 
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
618
684
 
619
685
 
620
686
 
@@ -663,6 +729,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
663
729
 
664
730
 
665
731
 
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
666
740
 
667
741
 
668
742
 
@@ -729,6 +803,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
729
803
 
730
804
 
731
805
 
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
732
814
 
733
815
 
734
816
 
@@ -778,6 +860,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
778
860
 
779
861
 
780
862
 
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
781
871
 
782
872
 
783
873
 
@@ -829,6 +919,14 @@ var _HashMap = class _HashMap extends IterableEntryBase {
829
919
 
830
920
 
831
921
 
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
832
930
 
833
931
 
834
932
 
@@ -938,9 +1036,7 @@ var _LinkedHashMap = class _LinkedHashMap extends IterableEntryBase {
938
1036
  if (this.isEntry(rawElement)) {
939
1037
  return rawElement;
940
1038
  }
941
- throw new TypeError(
942
- ERR.invalidArgument("If elements do not adhere to [key, value], provide options.toEntryFn to transform raw records.", "HashMap")
943
- );
1039
+ raise(TypeError, ERR.invalidArgument("If elements do not adhere to [key, value], provide options.toEntryFn to transform raw records.", "HashMap"));
944
1040
  }, "_toEntryFn"));
945
1041
  __publicField(this, "_size", 0);
946
1042
  this._sentinel = {};
@@ -1044,7 +1140,7 @@ var _LinkedHashMap = class _LinkedHashMap extends IterableEntryBase {
1044
1140
  * @remarks Time O(1), Space O(1)
1045
1141
  * @param key - Key.
1046
1142
  * @param [value] - Value.
1047
- * @returns True when the operation succeeds.
1143
+ * @returns This map (for chaining).
1048
1144
  */
1049
1145
  set(key, value) {
1050
1146
  let node;
@@ -1079,7 +1175,7 @@ var _LinkedHashMap = class _LinkedHashMap extends IterableEntryBase {
1079
1175
  this._sentinel.prev = node;
1080
1176
  this._size++;
1081
1177
  }
1082
- return true;
1178
+ return this;
1083
1179
  }
1084
1180
  setMany(entryOrRawElements) {
1085
1181
  const results = [];
@@ -1087,7 +1183,11 @@ var _LinkedHashMap = class _LinkedHashMap extends IterableEntryBase {
1087
1183
  let key, value;
1088
1184
  if (this.isEntry(rawEle)) [key, value] = rawEle;
1089
1185
  else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
1090
- if (key !== void 0 && value !== void 0) results.push(this.set(key, value));
1186
+ if (key !== void 0 && value !== void 0) {
1187
+ const sizeBefore = this._size;
1188
+ this.set(key, value);
1189
+ results.push(sizeBefore < this._size);
1190
+ }
1091
1191
  }
1092
1192
  return results;
1093
1193
  }
@@ -1165,13 +1265,16 @@ var _LinkedHashMap = class _LinkedHashMap extends IterableEntryBase {
1165
1265
  * Delete the entry at a given index.
1166
1266
  * @remarks Time O(N), Space O(1)
1167
1267
  * @param index - Zero-based index.
1168
- * @returns True if removed.
1268
+ * @returns The removed entry [key, value].
1269
+ * @throws {RangeError} If index is out of bounds.
1169
1270
  */
1170
1271
  deleteAt(index) {
1171
1272
  rangeCheck(index, 0, this._size - 1);
1172
1273
  let node = this.head;
1173
1274
  while (index--) node = node.next;
1174
- return this._deleteNode(node);
1275
+ const entry = [node.key, node.value];
1276
+ this._deleteNode(node);
1277
+ return entry;
1175
1278
  }
1176
1279
  isEmpty() {
1177
1280
  return this._size === 0;