stack-typed 2.4.5 → 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 (94) hide show
  1. package/README.md +6 -36
  2. package/dist/cjs/index.cjs +480 -100
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs-legacy/index.cjs +479 -99
  5. package/dist/cjs-legacy/index.cjs.map +1 -1
  6. package/dist/esm/index.mjs +480 -100
  7. package/dist/esm/index.mjs.map +1 -1
  8. package/dist/esm-legacy/index.mjs +479 -99
  9. package/dist/esm-legacy/index.mjs.map +1 -1
  10. package/dist/types/data-structures/base/index.d.ts +1 -0
  11. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  12. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  13. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  14. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
  26. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  27. package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
  28. package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
  29. package/dist/types/data-structures/heap/heap.d.ts +581 -99
  30. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  31. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  32. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
  33. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
  34. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
  35. package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
  36. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  37. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  38. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  39. package/dist/types/data-structures/queue/deque.d.ts +593 -71
  40. package/dist/types/data-structures/queue/queue.d.ts +463 -42
  41. package/dist/types/data-structures/stack/stack.d.ts +384 -32
  42. package/dist/types/data-structures/trie/trie.d.ts +470 -48
  43. package/dist/types/interfaces/graph.d.ts +1 -1
  44. package/dist/types/types/common.d.ts +2 -2
  45. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  46. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  47. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  48. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  49. package/dist/types/types/utils/validate-type.d.ts +4 -4
  50. package/dist/umd/stack-typed.js +477 -97
  51. package/dist/umd/stack-typed.js.map +1 -1
  52. package/dist/umd/stack-typed.min.js +1 -1
  53. package/dist/umd/stack-typed.min.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/data-structures/base/index.ts +1 -0
  56. package/src/data-structures/base/iterable-element-base.ts +4 -5
  57. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  58. package/src/data-structures/base/linear-base.ts +3 -3
  59. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  60. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  61. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  62. package/src/data-structures/binary-tree/bst.ts +840 -35
  63. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  64. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  65. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  66. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  67. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  68. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  69. package/src/data-structures/graph/abstract-graph.ts +4 -4
  70. package/src/data-structures/graph/directed-graph.ts +429 -47
  71. package/src/data-structures/graph/map-graph.ts +59 -1
  72. package/src/data-structures/graph/undirected-graph.ts +393 -59
  73. package/src/data-structures/hash/hash-map.ts +476 -92
  74. package/src/data-structures/heap/heap.ts +581 -99
  75. package/src/data-structures/heap/max-heap.ts +46 -0
  76. package/src/data-structures/heap/min-heap.ts +59 -0
  77. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  78. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  79. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  80. package/src/data-structures/matrix/matrix.ts +584 -12
  81. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  82. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  83. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  84. package/src/data-structures/queue/deque.ts +592 -70
  85. package/src/data-structures/queue/queue.ts +463 -42
  86. package/src/data-structures/stack/stack.ts +384 -32
  87. package/src/data-structures/trie/trie.ts +470 -48
  88. package/src/interfaces/graph.ts +1 -1
  89. package/src/types/common.ts +2 -2
  90. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  91. package/src/types/data-structures/heap/heap.ts +1 -0
  92. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  93. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  94. package/src/types/utils/validate-type.ts +4 -4
@@ -1,55 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/common/error.ts
5
- var ERR = {
6
- // Range / index
7
- indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
8
- invalidIndex: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Index must be an integer.`, "invalidIndex"),
9
- // Type / argument
10
- invalidArgument: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidArgument"),
11
- comparatorRequired: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Comparator is required for non-number/non-string/non-Date keys.`, "comparatorRequired"),
12
- invalidKey: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidKey"),
13
- notAFunction: /* @__PURE__ */ __name((name, ctx) => `${ctx ? ctx + ": " : ""}${name} must be a function.`, "notAFunction"),
14
- invalidEntry: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Each entry must be a [key, value] tuple.`, "invalidEntry"),
15
- invalidNaN: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}NaN is not a valid key.`, "invalidNaN"),
16
- invalidDate: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Invalid Date key.`, "invalidDate"),
17
- reduceEmpty: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Reduce of empty structure with no initial value.`, "reduceEmpty"),
18
- callbackReturnType: /* @__PURE__ */ __name((expected, got, ctx) => `${ctx ? ctx + ": " : ""}Callback must return ${expected}; got ${got}.`, "callbackReturnType"),
19
- // State / operation
20
- invalidOperation: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidOperation"),
21
- // Matrix
22
- matrixDimensionMismatch: /* @__PURE__ */ __name((op) => `Matrix: Dimensions must be compatible for ${op}.`, "matrixDimensionMismatch"),
23
- matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
24
- matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
25
- matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
26
- matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch")
27
- };
28
-
29
- // src/common/index.ts
30
- var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
31
- DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
32
- DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
33
- return DFSOperation2;
34
- })(DFSOperation || {});
35
- var Range = class {
36
- constructor(low, high, includeLow = true, includeHigh = true) {
37
- this.low = low;
38
- this.high = high;
39
- this.includeLow = includeLow;
40
- this.includeHigh = includeHigh;
41
- }
42
- static {
43
- __name(this, "Range");
44
- }
45
- // Determine whether a key is within the range
46
- isInRange(key, comparator) {
47
- const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
48
- const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
49
- return lowCheck && highCheck;
50
- }
51
- };
52
-
53
4
  // src/data-structures/base/iterable-element-base.ts
54
5
  var IterableElementBase = class {
55
6
  static {
@@ -68,7 +19,7 @@ var IterableElementBase = class {
68
19
  if (options) {
69
20
  const { toElementFn } = options;
70
21
  if (typeof toElementFn === "function") this._toElementFn = toElementFn;
71
- else if (toElementFn) throw new TypeError(ERR.notAFunction("toElementFn"));
22
+ else if (toElementFn) throw new TypeError("toElementFn must be a function type");
72
23
  }
73
24
  }
74
25
  /**
@@ -231,7 +182,7 @@ var IterableElementBase = class {
231
182
  acc = initialValue;
232
183
  } else {
233
184
  const first = iter.next();
234
- if (first.done) throw new TypeError(ERR.reduceEmpty());
185
+ if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
235
186
  acc = first.value;
236
187
  index = 1;
237
188
  }
@@ -300,10 +251,44 @@ var Stack = class extends IterableElementBase {
300
251
  return this._elements;
301
252
  }
302
253
  /**
303
- * Get the number of stored elements.
304
- * @remarks Time O(1), Space O(1)
305
- * @returns Current size.
306
- */
254
+ * Get the number of stored elements.
255
+ * @remarks Time O(1), Space O(1)
256
+ * @returns Current size.
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+ * @example
288
+ * // Get number of elements
289
+ * const stack = new Stack<number>([1, 2, 3]);
290
+ * console.log(stack.size); // 3;
291
+ */
307
292
  get size() {
308
293
  return this.elements.length;
309
294
  }
@@ -321,36 +306,207 @@ var Stack = class extends IterableElementBase {
321
306
  return new this(elements, options);
322
307
  }
323
308
  /**
324
- * Check whether the stack is empty.
325
- * @remarks Time O(1), Space O(1)
326
- * @returns True if size is 0.
327
- */
309
+ * Check whether the stack is empty.
310
+ * @remarks Time O(1), Space O(1)
311
+ * @returns True if size is 0.
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+ * @example
345
+ * // Check if stack has elements
346
+ * const stack = new Stack<number>();
347
+ * console.log(stack.isEmpty()); // true;
348
+ * stack.push(1);
349
+ * console.log(stack.isEmpty()); // false;
350
+ */
328
351
  isEmpty() {
329
352
  return this.elements.length === 0;
330
353
  }
331
354
  /**
332
- * Get the top element without removing it.
333
- * @remarks Time O(1), Space O(1)
334
- * @returns Top element or undefined.
335
- */
355
+ * Get the top element without removing it.
356
+ * @remarks Time O(1), Space O(1)
357
+ * @returns Top element or undefined.
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+ * @example
391
+ * // View the top element without removing it
392
+ * const stack = new Stack<string>(['a', 'b', 'c']);
393
+ * console.log(stack.peek()); // 'c';
394
+ * console.log(stack.size); // 3;
395
+ */
336
396
  peek() {
337
397
  return this.isEmpty() ? void 0 : this.elements[this.elements.length - 1];
338
398
  }
339
399
  /**
340
- * Push one element onto the top.
341
- * @remarks Time O(1), Space O(1)
342
- * @param element - Element to push.
343
- * @returns True when pushed.
344
- */
400
+ * Push one element onto the top.
401
+ * @remarks Time O(1), Space O(1)
402
+ * @param element - Element to push.
403
+ * @returns True when pushed.
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+ * @example
437
+ * // basic Stack creation and push operation
438
+ * // Create a simple Stack with initial values
439
+ * const stack = new Stack([1, 2, 3, 4, 5]);
440
+ *
441
+ * // Verify the stack maintains insertion order (LIFO will be shown in pop)
442
+ * console.log([...stack]); // [1, 2, 3, 4, 5];
443
+ *
444
+ * // Check length
445
+ * console.log(stack.size); // 5;
446
+ *
447
+ * // Push a new element to the top
448
+ * stack.push(6);
449
+ * console.log(stack.size); // 6;
450
+ */
345
451
  push(element) {
346
452
  this.elements.push(element);
347
453
  return true;
348
454
  }
349
455
  /**
350
- * Pop and return the top element.
351
- * @remarks Time O(1), Space O(1)
352
- * @returns Removed element or undefined.
353
- */
456
+ * Pop and return the top element.
457
+ * @remarks Time O(1), Space O(1)
458
+ * @returns Removed element or undefined.
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+ * @example
492
+ * // Stack pop operation (LIFO - Last In First Out)
493
+ * const stack = new Stack<number>([10, 20, 30, 40, 50]);
494
+ *
495
+ * // Peek at the top element without removing
496
+ * const top = stack.peek();
497
+ * console.log(top); // 50;
498
+ *
499
+ * // Pop removes from the top (LIFO order)
500
+ * const popped = stack.pop();
501
+ * console.log(popped); // 50;
502
+ *
503
+ * // Next pop gets the previous element
504
+ * const next = stack.pop();
505
+ * console.log(next); // 40;
506
+ *
507
+ * // Verify length decreased
508
+ * console.log(stack.size); // 3;
509
+ */
354
510
  pop() {
355
511
  return this.isEmpty() ? void 0 : this.elements.pop();
356
512
  }
@@ -369,11 +525,45 @@ var Stack = class extends IterableElementBase {
369
525
  return ans;
370
526
  }
371
527
  /**
372
- * Delete the first occurrence of a specific element.
373
- * @remarks Time O(N), Space O(1)
374
- * @param element - Element to remove (using the configured equality).
375
- * @returns True if an element was removed.
376
- */
528
+ * Delete the first occurrence of a specific element.
529
+ * @remarks Time O(N), Space O(1)
530
+ * @param element - Element to remove (using the configured equality).
531
+ * @returns True if an element was removed.
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+ * @example
562
+ * // Remove element
563
+ * const stack = new Stack<number>([1, 2, 3]);
564
+ * stack.delete(2);
565
+ * console.log(stack.toArray()); // [1, 3];
566
+ */
377
567
  delete(element) {
378
568
  const idx = this._indexOfByEquals(element);
379
569
  return this.deleteAt(idx);
@@ -405,30 +595,137 @@ var Stack = class extends IterableElementBase {
405
595
  return false;
406
596
  }
407
597
  /**
408
- * Remove all elements and reset storage.
409
- * @remarks Time O(1), Space O(1)
410
- * @returns void
411
- */
598
+ * Remove all elements and reset storage.
599
+ * @remarks Time O(1), Space O(1)
600
+ * @returns void
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+ * @example
632
+ * // Remove all elements
633
+ * const stack = new Stack<number>([1, 2, 3]);
634
+ * stack.clear();
635
+ * console.log(stack.isEmpty()); // true;
636
+ */
412
637
  clear() {
413
638
  this._elements = [];
414
639
  }
415
640
  /**
416
- * Deep clone this stack.
417
- * @remarks Time O(N), Space O(N)
418
- * @returns A new stack with the same content.
419
- */
641
+ * Deep clone this stack.
642
+ * @remarks Time O(N), Space O(N)
643
+ * @returns A new stack with the same content.
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+ * @example
675
+ * // Create independent copy
676
+ * const stack = new Stack<number>([1, 2, 3]);
677
+ * const copy = stack.clone();
678
+ * copy.pop();
679
+ * console.log(stack.size); // 3;
680
+ * console.log(copy.size); // 2;
681
+ */
420
682
  clone() {
421
683
  const out = this._createInstance({ toElementFn: this.toElementFn });
422
684
  for (const v of this) out.push(v);
423
685
  return out;
424
686
  }
425
687
  /**
426
- * Filter elements into a new stack of the same class.
427
- * @remarks Time O(N), Space O(N)
428
- * @param predicate - Predicate (value, index, stack) → boolean to keep value.
429
- * @param [thisArg] - Value for `this` inside the predicate.
430
- * @returns A new stack with kept values.
431
- */
688
+ * Filter elements into a new stack of the same class.
689
+ * @remarks Time O(N), Space O(N)
690
+ * @param predicate - Predicate (value, index, stack) → boolean to keep value.
691
+ * @param [thisArg] - Value for `this` inside the predicate.
692
+ * @returns A new stack with kept values.
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+ * @example
724
+ * // Filter elements
725
+ * const stack = new Stack<number>([1, 2, 3, 4, 5]);
726
+ * const evens = stack.filter(x => x % 2 === 0);
727
+ * console.log(evens.toArray()); // [2, 4];
728
+ */
432
729
  filter(predicate, thisArg) {
433
730
  const out = this._createInstance({ toElementFn: this.toElementFn });
434
731
  let index = 0;
@@ -455,15 +752,49 @@ var Stack = class extends IterableElementBase {
455
752
  return out;
456
753
  }
457
754
  /**
458
- * Map values into a new stack (possibly different element type).
459
- * @remarks Time O(N), Space O(N)
460
- * @template EM
461
- * @template RM
462
- * @param callback - Mapping function (value, index, stack) → newElement.
463
- * @param [options] - Options for the output stack (e.g., toElementFn).
464
- * @param [thisArg] - Value for `this` inside the callback.
465
- * @returns A new Stack with mapped elements.
466
- */
755
+ * Map values into a new stack (possibly different element type).
756
+ * @remarks Time O(N), Space O(N)
757
+ * @template EM
758
+ * @template RM
759
+ * @param callback - Mapping function (value, index, stack) → newElement.
760
+ * @param [options] - Options for the output stack (e.g., toElementFn).
761
+ * @param [thisArg] - Value for `this` inside the callback.
762
+ * @returns A new Stack with mapped elements.
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+ * @example
793
+ * // Transform elements
794
+ * const stack = new Stack<number>([1, 2, 3]);
795
+ * const doubled = stack.map(x => x * 2);
796
+ * console.log(doubled.toArray()); // [2, 4, 6];
797
+ */
467
798
  map(callback, options, thisArg) {
468
799
  const out = this._createLike([], { ...options ?? {} });
469
800
  let index = 0;
@@ -525,6 +856,55 @@ var Stack = class extends IterableElementBase {
525
856
  for (let i = 0; i < this.elements.length; i++) yield this.elements[i];
526
857
  }
527
858
  };
859
+
860
+ // src/common/error.ts
861
+ var ERR = {
862
+ // Range / index
863
+ indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
864
+ invalidIndex: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Index must be an integer.`, "invalidIndex"),
865
+ // Type / argument
866
+ invalidArgument: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidArgument"),
867
+ comparatorRequired: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Comparator is required for non-number/non-string/non-Date keys.`, "comparatorRequired"),
868
+ invalidKey: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidKey"),
869
+ notAFunction: /* @__PURE__ */ __name((name, ctx) => `${ctx ? ctx + ": " : ""}${name} must be a function.`, "notAFunction"),
870
+ invalidEntry: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Each entry must be a [key, value] tuple.`, "invalidEntry"),
871
+ invalidNaN: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}NaN is not a valid key.`, "invalidNaN"),
872
+ invalidDate: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Invalid Date key.`, "invalidDate"),
873
+ reduceEmpty: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Reduce of empty structure with no initial value.`, "reduceEmpty"),
874
+ callbackReturnType: /* @__PURE__ */ __name((expected, got, ctx) => `${ctx ? ctx + ": " : ""}Callback must return ${expected}; got ${got}.`, "callbackReturnType"),
875
+ // State / operation
876
+ invalidOperation: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidOperation"),
877
+ // Matrix
878
+ matrixDimensionMismatch: /* @__PURE__ */ __name((op) => `Matrix: Dimensions must be compatible for ${op}.`, "matrixDimensionMismatch"),
879
+ matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
880
+ matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
881
+ matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
882
+ matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch")
883
+ };
884
+
885
+ // src/common/index.ts
886
+ var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
887
+ DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
888
+ DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
889
+ return DFSOperation2;
890
+ })(DFSOperation || {});
891
+ var Range = class {
892
+ constructor(low, high, includeLow = true, includeHigh = true) {
893
+ this.low = low;
894
+ this.high = high;
895
+ this.includeLow = includeLow;
896
+ this.includeHigh = includeHigh;
897
+ }
898
+ static {
899
+ __name(this, "Range");
900
+ }
901
+ // Determine whether a key is within the range
902
+ isInRange(key, comparator) {
903
+ const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
904
+ const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
905
+ return lowCheck && highCheck;
906
+ }
907
+ };
528
908
  /**
529
909
  * data-structure-typed
530
910
  *