data-structure-typed 2.5.0 → 2.5.2

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 (246) 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 +5 -1
  7. package/README.md +124 -29
  8. package/dist/cjs/binary-tree.cjs +26282 -0
  9. package/dist/cjs/graph.cjs +5422 -0
  10. package/dist/cjs/hash.cjs +1310 -0
  11. package/dist/cjs/heap.cjs +1602 -0
  12. package/dist/cjs/index.cjs +31257 -14673
  13. package/dist/cjs/linked-list.cjs +4576 -0
  14. package/dist/cjs/matrix.cjs +1080 -0
  15. package/dist/cjs/priority-queue.cjs +1376 -0
  16. package/dist/cjs/queue.cjs +4264 -0
  17. package/dist/cjs/stack.cjs +907 -0
  18. package/dist/cjs/trie.cjs +1223 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +26319 -0
  20. package/dist/cjs-legacy/graph.cjs +5420 -0
  21. package/dist/cjs-legacy/hash.cjs +1310 -0
  22. package/dist/cjs-legacy/heap.cjs +1599 -0
  23. package/dist/cjs-legacy/index.cjs +31268 -14679
  24. package/dist/cjs-legacy/linked-list.cjs +4582 -0
  25. package/dist/cjs-legacy/matrix.cjs +1083 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1374 -0
  27. package/dist/cjs-legacy/queue.cjs +4262 -0
  28. package/dist/cjs-legacy/stack.cjs +907 -0
  29. package/dist/cjs-legacy/trie.cjs +1222 -0
  30. package/dist/esm/binary-tree.mjs +26267 -0
  31. package/dist/esm/graph.mjs +5409 -0
  32. package/dist/esm/hash.mjs +1307 -0
  33. package/dist/esm/heap.mjs +1596 -0
  34. package/dist/esm/index.mjs +31254 -14674
  35. package/dist/esm/linked-list.mjs +4569 -0
  36. package/dist/esm/matrix.mjs +1076 -0
  37. package/dist/esm/priority-queue.mjs +1372 -0
  38. package/dist/esm/queue.mjs +4260 -0
  39. package/dist/esm/stack.mjs +905 -0
  40. package/dist/esm/trie.mjs +1220 -0
  41. package/dist/esm-legacy/binary-tree.mjs +26304 -0
  42. package/dist/esm-legacy/graph.mjs +5407 -0
  43. package/dist/esm-legacy/hash.mjs +1307 -0
  44. package/dist/esm-legacy/heap.mjs +1593 -0
  45. package/dist/esm-legacy/index.mjs +31265 -14680
  46. package/dist/esm-legacy/linked-list.mjs +4575 -0
  47. package/dist/esm-legacy/matrix.mjs +1079 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1370 -0
  49. package/dist/esm-legacy/queue.mjs +4258 -0
  50. package/dist/esm-legacy/stack.mjs +905 -0
  51. package/dist/esm-legacy/trie.mjs +1219 -0
  52. package/dist/types/common/error.d.ts +9 -0
  53. package/dist/types/common/index.d.ts +1 -1
  54. package/dist/types/data-structures/base/index.d.ts +1 -0
  55. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  56. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  57. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  58. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  59. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  60. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  61. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  62. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  63. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  64. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  65. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  66. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  67. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  68. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  70. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  71. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  72. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  73. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  74. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  75. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  76. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  77. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  78. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  79. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  80. package/dist/types/interfaces/graph.d.ts +1 -1
  81. package/dist/types/types/common.d.ts +2 -2
  82. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  83. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  84. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  85. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  86. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  87. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  88. package/dist/types/types/utils/validate-type.d.ts +4 -4
  89. package/dist/umd/data-structure-typed.js +31196 -14608
  90. package/dist/umd/data-structure-typed.min.js +11 -5
  91. package/docs-site-docusaurus/README.md +41 -0
  92. package/docs-site-docusaurus/docs/api/README.md +52 -0
  93. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6644 -0
  94. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  95. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  96. package/docs-site-docusaurus/docs/api/classes/BST.md +6293 -0
  97. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  98. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  99. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  100. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  101. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  102. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  103. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  104. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  105. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  106. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  107. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  108. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  109. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  110. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  111. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  112. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  113. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  116. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  117. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  118. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  119. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  120. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  121. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  122. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  123. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  124. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  125. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6888 -0
  126. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  127. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  128. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  129. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  130. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  131. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1389 -0
  132. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1591 -0
  133. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1246 -0
  134. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  135. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  136. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  137. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  138. package/docs-site-docusaurus/docs/guide/architecture.md +615 -0
  139. package/docs-site-docusaurus/docs/guide/concepts.md +451 -0
  140. package/docs-site-docusaurus/docs/guide/faq.md +180 -0
  141. package/docs-site-docusaurus/docs/guide/guides.md +597 -0
  142. package/docs-site-docusaurus/docs/guide/installation.md +62 -0
  143. package/docs-site-docusaurus/docs/guide/integrations.md +825 -0
  144. package/docs-site-docusaurus/docs/guide/overview.md +645 -0
  145. package/docs-site-docusaurus/docs/guide/performance.md +835 -0
  146. package/docs-site-docusaurus/docs/guide/quick-start.md +104 -0
  147. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  148. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  149. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  150. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  151. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  152. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  153. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  154. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  155. package/docs-site-docusaurus/package-lock.json +18667 -0
  156. package/docs-site-docusaurus/package.json +50 -0
  157. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  158. package/docs-site-docusaurus/sidebars.ts +23 -0
  159. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  160. package/docs-site-docusaurus/src/css/custom.css +96 -0
  161. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  162. package/docs-site-docusaurus/src/pages/index.tsx +120 -0
  163. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  164. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  165. package/docs-site-docusaurus/static/.nojekyll +0 -0
  166. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  167. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  168. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  169. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  170. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  171. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  172. package/docs-site-docusaurus/static/img/logo.png +0 -0
  173. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  174. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  175. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  176. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  177. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  178. package/docs-site-docusaurus/static/llms.txt +37 -0
  179. package/docs-site-docusaurus/static/robots.txt +4 -0
  180. package/docs-site-docusaurus/typedoc.json +23 -0
  181. package/llms.txt +37 -0
  182. package/package.json +159 -55
  183. package/src/common/error.ts +19 -1
  184. package/src/common/index.ts +1 -1
  185. package/src/data-structures/base/index.ts +1 -0
  186. package/src/data-structures/base/iterable-element-base.ts +3 -2
  187. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  188. package/src/data-structures/base/linear-base.ts +3 -3
  189. package/src/data-structures/binary-tree/avl-tree.ts +287 -0
  190. package/src/data-structures/binary-tree/binary-indexed-tree.ts +327 -5
  191. package/src/data-structures/binary-tree/binary-tree.ts +581 -6
  192. package/src/data-structures/binary-tree/bst.ts +922 -7
  193. package/src/data-structures/binary-tree/red-black-tree.ts +453 -0
  194. package/src/data-structures/binary-tree/segment-tree.ts +139 -2
  195. package/src/data-structures/binary-tree/tree-map.ts +3300 -495
  196. package/src/data-structures/binary-tree/tree-multi-map.ts +3384 -563
  197. package/src/data-structures/binary-tree/tree-multi-set.ts +2757 -493
  198. package/src/data-structures/binary-tree/tree-set.ts +3122 -440
  199. package/src/data-structures/graph/abstract-graph.ts +6 -6
  200. package/src/data-structures/graph/directed-graph.ts +230 -0
  201. package/src/data-structures/graph/undirected-graph.ts +207 -0
  202. package/src/data-structures/hash/hash-map.ts +270 -19
  203. package/src/data-structures/heap/heap.ts +326 -4
  204. package/src/data-structures/heap/max-heap.ts +2 -2
  205. package/src/data-structures/linked-list/doubly-linked-list.ts +394 -3
  206. package/src/data-structures/linked-list/singly-linked-list.ts +348 -3
  207. package/src/data-structures/linked-list/skip-linked-list.ts +421 -7
  208. package/src/data-structures/matrix/matrix.ts +194 -10
  209. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  210. package/src/data-structures/queue/deque.ts +350 -5
  211. package/src/data-structures/queue/queue.ts +276 -0
  212. package/src/data-structures/stack/stack.ts +230 -0
  213. package/src/data-structures/trie/trie.ts +283 -7
  214. package/src/interfaces/graph.ts +1 -1
  215. package/src/types/common.ts +2 -2
  216. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  217. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  218. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  219. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  220. package/src/types/data-structures/heap/heap.ts +1 -0
  221. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  222. package/src/types/utils/validate-type.ts +4 -4
  223. package/vercel.json +6 -0
  224. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  225. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  226. package/dist/leetcode/avl-tree.mjs +0 -2720
  227. package/dist/leetcode/binary-tree.mjs +0 -1594
  228. package/dist/leetcode/bst.mjs +0 -2398
  229. package/dist/leetcode/deque.mjs +0 -683
  230. package/dist/leetcode/directed-graph.mjs +0 -1733
  231. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  232. package/dist/leetcode/hash-map.mjs +0 -493
  233. package/dist/leetcode/heap.mjs +0 -542
  234. package/dist/leetcode/max-heap.mjs +0 -375
  235. package/dist/leetcode/max-priority-queue.mjs +0 -383
  236. package/dist/leetcode/min-heap.mjs +0 -363
  237. package/dist/leetcode/min-priority-queue.mjs +0 -371
  238. package/dist/leetcode/priority-queue.mjs +0 -363
  239. package/dist/leetcode/queue.mjs +0 -943
  240. package/dist/leetcode/red-black-tree.mjs +0 -2765
  241. package/dist/leetcode/singly-linked-list.mjs +0 -754
  242. package/dist/leetcode/stack.mjs +0 -217
  243. package/dist/leetcode/tree-counter.mjs +0 -3039
  244. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  245. package/dist/leetcode/trie.mjs +0 -413
  246. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -0,0 +1,151 @@
1
+ ---
2
+ title: TreeMap and TreeSet in JavaScript — The Missing Collections
3
+ description: JavaScript doesn't have TreeMap or TreeSet. Here's how to get sorted maps, ordered sets, floor/ceiling lookups, and range queries in TypeScript/JavaScript.
4
+ keywords: [treemap javascript, treeset javascript, sorted map typescript, ordered set javascript, java treemap equivalent, sorted collection]
5
+ sidebar_label: TreeMap / TreeSet
6
+ ---
7
+
8
+ # TreeMap and TreeSet in JavaScript
9
+
10
+ Java has `TreeMap` and `TreeSet`. C++ has `std::map` and `std::set`. Python has `SortedDict` and `SortedSet`. JavaScript has... nothing built-in for sorted collections.
11
+
12
+ `Map` and `Set` in JavaScript are **hash-based** — they don't maintain sorted order and don't support range queries, floor/ceiling, or ordered iteration by key.
13
+
14
+ ## The Problem
15
+
16
+ ```typescript
17
+ // ❌ Native Map — no sorted iteration, no range queries
18
+ const map = new Map<number, string>();
19
+ map.set(3, 'c');
20
+ map.set(1, 'a');
21
+ map.set(2, 'b');
22
+ [...map.keys()]; // [3, 1, 2] — insertion order, NOT sorted
23
+
24
+ // ❌ To find "largest key ≤ 2.5" you'd need to sort all keys first
25
+ const keys = [...map.keys()].sort((a, b) => a - b);
26
+ // Then binary search... every time. O(n log n).
27
+ ```
28
+
29
+ ## The Solution
30
+
31
+ ```typescript
32
+ import { TreeMap } from 'data-structure-typed';
33
+
34
+ const map = new TreeMap<number, string>();
35
+ map.set(3, 'c');
36
+ map.set(1, 'a');
37
+ map.set(2, 'b');
38
+
39
+ // ✅ Sorted iteration
40
+ [...map.keys()]; // [1, 2, 3]
41
+
42
+ // ✅ NavigableMap operations — O(log n)
43
+ map.floor(2.5); // [2, 'b'] — largest key ≤ 2.5
44
+ map.ceiling(1.5); // [2, 'b'] — smallest key ≥ 1.5
45
+ map.higher(2); // [3, 'c'] — smallest key > 2
46
+ map.lower(2); // [1, 'a'] — largest key < 2
47
+
48
+ // ✅ Range queries
49
+ map.rangeSearch([1, 2]); // [[1, 'a'], [2, 'b']]
50
+ ```
51
+
52
+ ## TreeSet — Sorted Set
53
+
54
+ ```typescript
55
+ import { TreeSet } from 'data-structure-typed';
56
+
57
+ const set = new TreeSet<number>([5, 3, 8, 1, 4]);
58
+
59
+ [...set]; // [1, 3, 4, 5, 8] — always sorted
60
+
61
+ set.floor(4.5); // 4
62
+ set.ceiling(3.5); // 4
63
+ set.higher(5); // 8
64
+ set.lower(3); // 1
65
+
66
+ // First and last
67
+ set.first(); // 1
68
+ set.last(); // 8
69
+ ```
70
+
71
+ ## Order-Statistic Operations
72
+
73
+ Need to know "what's the 3rd element?" or "what rank is this key?"
74
+
75
+ ```typescript
76
+ import { TreeMap } from 'data-structure-typed';
77
+
78
+ const scores = new TreeMap<number, string>(
79
+ [[100, 'Alice'], [250, 'Bob'], [180, 'Charlie']],
80
+ { enableOrderStatistic: true }
81
+ );
82
+
83
+ scores.getByRank(0); // [100, 'Alice'] — first in tree order
84
+ scores.getByRank(2); // [250, 'Bob'] — third in tree order
85
+ scores.getRank(180); // 1 — Charlie is at position 1
86
+ scores.rangeByRank(0, 1); // [[100, 'Alice'], [180, 'Charlie']]
87
+ ```
88
+
89
+ ## Map vs TreeMap — When to Use Which
90
+
91
+ | Feature | Map | TreeMap |
92
+ |---------|-----|---------|
93
+ | Sorted iteration | ❌ | ✅ |
94
+ | floor / ceiling | ❌ | ✅ |
95
+ | Range queries | ❌ | ✅ |
96
+ | getRank / getByRank | ❌ | ✅ |
97
+ | Insert / lookup | O(1) avg | O(log n) |
98
+ | Memory | Lower | Higher |
99
+
100
+ **Use Map** when you only need key-value lookup and don't care about order.
101
+
102
+ **Use TreeMap** when you need sorted keys, range queries, floor/ceiling, or rank operations.
103
+
104
+ ## Real-World Use Cases
105
+
106
+ ### Price book (financial trading)
107
+ ```typescript
108
+ const orderBook = new TreeMap<number, number>(); // price → quantity
109
+ orderBook.set(100.5, 200);
110
+ orderBook.set(101.0, 150);
111
+ orderBook.set(99.5, 300);
112
+
113
+ // Best bid (highest price)
114
+ orderBook.last(); // [101.0, 150]
115
+ // All orders between $100 and $101
116
+ orderBook.rangeSearch([100, 101]); // [[100.5, 200], [101.0, 150]]
117
+ ```
118
+
119
+ ### Time-series data
120
+ ```typescript
121
+ const events = new TreeMap<number, string>(); // timestamp → event
122
+ events.set(1000, 'start');
123
+ events.set(2000, 'checkpoint');
124
+ events.set(3000, 'end');
125
+
126
+ // What happened at or before t=2500?
127
+ events.floor(2500); // [2000, 'checkpoint']
128
+ ```
129
+
130
+ ### Leaderboard
131
+ ```typescript
132
+ const leaderboard = new TreeMap<number, string>(
133
+ [[100, 'Alice'], [250, 'Bob'], [180, 'Charlie']],
134
+ { comparator: (a, b) => b - a, enableOrderStatistic: true }
135
+ );
136
+
137
+ // Top 3
138
+ leaderboard.rangeByRank(0, 2);
139
+ // [[250, 'Bob'], [180, 'Charlie'], [100, 'Alice']]
140
+ ```
141
+
142
+ ## Complexity
143
+
144
+ | Operation | TreeMap | Sorted Array | Native Map |
145
+ |-----------|---------|-------------|------------|
146
+ | Insert | O(log n) | O(n) | O(1) avg |
147
+ | Delete | O(log n) | O(n) | O(1) avg |
148
+ | Lookup | O(log n) | O(log n) | O(1) avg |
149
+ | Floor/Ceiling | O(log n) | O(log n) | ❌ |
150
+ | Sorted iteration | O(n) | O(n) | ❌ |
151
+ | Range query | O(log n + k) | O(log n + k) | ❌ |
@@ -0,0 +1,159 @@
1
+ import {themes as prismThemes} from 'prism-react-renderer';
2
+ import type {Config} from '@docusaurus/types';
3
+ import type * as Preset from '@docusaurus/preset-classic';
4
+
5
+ const config: Config = {
6
+ title: 'data-structure-typed',
7
+ tagline: 'Advanced JavaScript/TypeScript data structures that feel like arrays.',
8
+ favicon: 'img/favicon.png',
9
+ url: 'https://data-structure-typed-docs.vercel.app',
10
+ baseUrl: '/',
11
+ organizationName: 'zrwusa',
12
+ projectName: 'data-structure-typed',
13
+ onBrokenLinks: 'warn',
14
+ onBrokenMarkdownLinks: 'warn',
15
+
16
+ markdown: {
17
+ format: 'md',
18
+ },
19
+
20
+ i18n: {
21
+ defaultLocale: 'en',
22
+ locales: ['en'],
23
+ },
24
+
25
+ headTags: [
26
+ {
27
+ tagName: 'meta',
28
+ attributes: {
29
+ name: 'algolia-site-verification',
30
+ content: '3BBF0EECA7FC2D22',
31
+ },
32
+ },
33
+ {
34
+ tagName: 'meta',
35
+ attributes: {
36
+ name: 'google-site-verification',
37
+ content: 'w6GgmRPPZZtNCDgG46ooge-oljMn_cm4-FCaRHoSYrQ',
38
+ },
39
+ },
40
+ {
41
+ tagName: 'meta',
42
+ attributes: {
43
+ name: 'keywords',
44
+ content: 'data structures, TypeScript, JavaScript, RedBlackTree, HashMap, Trie, Heap, PriorityQueue, Deque, Graph, BST, AVL Tree, zero-dependency, tree-shaking',
45
+ },
46
+ },
47
+ {
48
+ tagName: 'script',
49
+ attributes: {
50
+ type: 'application/ld+json',
51
+ },
52
+ innerHTML: JSON.stringify({
53
+ '@context': 'https://schema.org',
54
+ '@type': 'SoftwareSourceCode',
55
+ name: 'data-structure-typed',
56
+ description: 'Production-ready TypeScript data structures library — Heap, Priority Queue, TreeMap, TreeSet, Red-Black Tree, Trie, Graph, Deque, SkipList. Zero dependencies, type-safe, with getRank/getByRank/rangeByRank support.',
57
+ url: 'https://data-structure-typed-docs.vercel.app',
58
+ codeRepository: 'https://github.com/zrwusa/data-structure-typed',
59
+ programmingLanguage: ['TypeScript', 'JavaScript'],
60
+ license: 'https://opensource.org/licenses/MIT',
61
+ author: {
62
+ '@type': 'Person',
63
+ name: 'Pablo Zeng',
64
+ url: 'https://github.com/zrwusa',
65
+ },
66
+ }),
67
+ },
68
+ ],
69
+
70
+ plugins: [],
71
+
72
+ presets: [
73
+ [
74
+ 'classic',
75
+ {
76
+ docs: {
77
+ sidebarPath: './sidebars.ts',
78
+ editUrl: 'https://github.com/zrwusa/data-structure-typed/edit/main/docs-site-docusaurus/',
79
+ remarkPlugins: [],
80
+ rehypePlugins: [],
81
+ },
82
+ theme: {
83
+ customCss: './src/css/custom.css',
84
+ },
85
+ } satisfies Preset.Options,
86
+ ],
87
+ ],
88
+
89
+ themeConfig: {
90
+ image: 'img/og-image.png',
91
+ metadata: [
92
+ {name: 'og:image:width', content: '1200'},
93
+ {name: 'og:image:height', content: '630'},
94
+ ],
95
+ navbar: {
96
+ title: 'data-structure-typed',
97
+ logo: {
98
+ alt: 'data-structure-typed logo',
99
+ src: 'img/logo.png',
100
+ width: 32,
101
+ height: 32,
102
+ },
103
+ items: [
104
+ {type: 'docSidebar', sidebarId: 'guideSidebar', position: 'left', label: 'Guide'},
105
+ {to: '/docs/api/', label: 'API', position: 'left'},
106
+ {
107
+ href: 'https://github.com/zrwusa/data-structure-typed',
108
+ label: 'GitHub',
109
+ position: 'right',
110
+ },
111
+ {
112
+ href: 'https://www.npmjs.com/package/data-structure-typed',
113
+ label: 'npm',
114
+ position: 'right',
115
+ },
116
+ ],
117
+ },
118
+ footer: {
119
+ style: 'dark',
120
+ links: [
121
+ {
122
+ title: 'Docs',
123
+ items: [
124
+ {label: 'Installation', to: '/docs/guide/installation'},
125
+ {label: 'Quick Start', to: '/docs/guide/quick-start'},
126
+ {label: 'API Reference', to: '/docs/api/'},
127
+ ],
128
+ },
129
+ {
130
+ title: 'More',
131
+ items: [
132
+ {label: 'GitHub', href: 'https://github.com/zrwusa/data-structure-typed'},
133
+ {label: 'npm', href: 'https://www.npmjs.com/package/data-structure-typed'},
134
+ {label: 'Changelog', href: 'https://github.com/zrwusa/data-structure-typed/blob/main/CHANGELOG.md'},
135
+ ],
136
+ },
137
+ ],
138
+ copyright: `Copyright © ${new Date().getFullYear()} Pablo Zeng. Built with Docusaurus.`,
139
+ },
140
+ prism: {
141
+ theme: prismThemes.github,
142
+ darkTheme: prismThemes.dracula,
143
+ },
144
+ algolia: {
145
+ appId: '2CK3V43PRR',
146
+ apiKey: 'ab7ce559e3114987b4f26430427409ae',
147
+ indexName: 'data-structure-typed-docs-crawler',
148
+ contextualSearch: false,
149
+ searchPagePath: 'search',
150
+ searchParameters: {
151
+ hitsPerPage: 30,
152
+ distinct: false,
153
+ },
154
+ maxResultsPerGroup: 20,
155
+ },
156
+ } satisfies Preset.ThemeConfig,
157
+ };
158
+
159
+ export default config;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Fix TypeScript generics <T> in TypeDoc markdown for MDX compatibility.
3
+ * Converts bare < > in non-fenced-code, non-backtick content to HTML entities.
4
+ */
5
+ import { readFileSync, writeFileSync, readdirSync, statSync } from 'fs';
6
+ import { join } from 'path';
7
+
8
+ function walk(dir) {
9
+ const results = [];
10
+ for (const f of readdirSync(dir)) {
11
+ const full = join(dir, f);
12
+ if (statSync(full).isDirectory()) results.push(...walk(full));
13
+ else if (full.endsWith('.md')) results.push(full);
14
+ }
15
+ return results;
16
+ }
17
+
18
+ function fixFile(content) {
19
+ // Split into fenced code blocks vs non-code sections
20
+ // Use a state machine that properly tracks ``` fences
21
+ const result = [];
22
+ const lines = content.split('\n');
23
+ let inFence = false;
24
+ let fenceChar = '';
25
+ let changed = false;
26
+
27
+ for (const line of lines) {
28
+ const trimmed = line.trim();
29
+ // Detect fence start/end
30
+ const fenceMatch = trimmed.match(/^(`{3,}|~{3,})/);
31
+ if (fenceMatch) {
32
+ if (!inFence) {
33
+ inFence = true;
34
+ fenceChar = fenceMatch[1][0];
35
+ } else if (trimmed.startsWith(fenceChar.repeat(3))) {
36
+ inFence = false;
37
+ }
38
+ result.push(line);
39
+ continue;
40
+ }
41
+
42
+ if (inFence) {
43
+ result.push(line);
44
+ continue;
45
+ }
46
+
47
+ // Outside code blocks: escape generics outside of inline backticks
48
+ const parts = line.split(/(`[^`]*`)/);
49
+ const newParts = parts.map((part, i) => {
50
+ if (i % 2 !== 0) return part; // inside backtick
51
+ // Escape < ... > that look like TypeScript generics
52
+ return part.replace(/<([A-Za-z][^>]*)>/g, (m, inner) => {
53
+ changed = true;
54
+ return `&lt;${inner}&gt;`;
55
+ });
56
+ });
57
+ result.push(newParts.join(''));
58
+ }
59
+
60
+ return { content: result.join('\n'), changed };
61
+ }
62
+
63
+ const files = walk('docs/api');
64
+ let count = 0;
65
+
66
+ for (const f of files) {
67
+ const original = readFileSync(f, 'utf8');
68
+ const { content, changed } = fixFile(original);
69
+ if (changed) {
70
+ writeFileSync(f, content);
71
+ count++;
72
+ }
73
+ }
74
+
75
+ console.log(`✅ Fixed generics in ${count}/${files.length} files`);