linked-list-typed 2.4.3 → 2.4.5

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 (65) hide show
  1. package/dist/cjs/index.cjs +62 -36
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +62 -35
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +62 -37
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +62 -36
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/common/error.d.ts +23 -0
  10. package/dist/types/common/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/binary-tree/binary-tree.d.ts +15 -5
  13. package/dist/types/data-structures/binary-tree/bst.d.ts +1 -1
  14. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +7 -1
  15. package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -0
  16. package/dist/types/data-structures/graph/directed-graph.d.ts +3 -2
  17. package/dist/types/data-structures/graph/undirected-graph.d.ts +16 -2
  18. package/dist/types/data-structures/hash/hash-map.d.ts +2 -2
  19. package/dist/types/data-structures/heap/heap.d.ts +3 -7
  20. package/dist/types/data-structures/queue/deque.d.ts +41 -1
  21. package/dist/types/types/data-structures/binary-tree/avl-tree.d.ts +1 -1
  22. package/dist/types/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
  23. package/dist/types/types/data-structures/linked-list/doubly-linked-list.d.ts +1 -1
  24. package/dist/types/types/data-structures/linked-list/singly-linked-list.d.ts +1 -1
  25. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  26. package/dist/types/types/data-structures/queue/deque.d.ts +6 -0
  27. package/dist/types/types/data-structures/stack/stack.d.ts +1 -1
  28. package/dist/umd/linked-list-typed.js +60 -33
  29. package/dist/umd/linked-list-typed.js.map +1 -1
  30. package/dist/umd/linked-list-typed.min.js +1 -1
  31. package/dist/umd/linked-list-typed.min.js.map +1 -1
  32. package/package.json +2 -2
  33. package/src/common/error.ts +60 -0
  34. package/src/common/index.ts +2 -0
  35. package/src/data-structures/base/iterable-element-base.ts +5 -4
  36. package/src/data-structures/binary-tree/binary-indexed-tree.ts +6 -5
  37. package/src/data-structures/binary-tree/binary-tree.ts +121 -49
  38. package/src/data-structures/binary-tree/bst.ts +12 -4
  39. package/src/data-structures/binary-tree/red-black-tree.ts +20 -0
  40. package/src/data-structures/binary-tree/tree-map.ts +8 -7
  41. package/src/data-structures/binary-tree/tree-multi-map.ts +4 -4
  42. package/src/data-structures/binary-tree/tree-multi-set.ts +10 -9
  43. package/src/data-structures/binary-tree/tree-set.ts +7 -6
  44. package/src/data-structures/graph/abstract-graph.ts +124 -19
  45. package/src/data-structures/graph/directed-graph.ts +8 -4
  46. package/src/data-structures/graph/map-graph.ts +1 -1
  47. package/src/data-structures/graph/undirected-graph.ts +99 -4
  48. package/src/data-structures/hash/hash-map.ts +19 -6
  49. package/src/data-structures/heap/heap.ts +21 -17
  50. package/src/data-structures/heap/max-heap.ts +2 -3
  51. package/src/data-structures/linked-list/doubly-linked-list.ts +4 -4
  52. package/src/data-structures/linked-list/singly-linked-list.ts +15 -9
  53. package/src/data-structures/matrix/matrix.ts +9 -10
  54. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -3
  55. package/src/data-structures/queue/deque.ts +72 -4
  56. package/src/data-structures/stack/stack.ts +1 -1
  57. package/src/data-structures/trie/trie.ts +12 -6
  58. package/src/types/data-structures/binary-tree/avl-tree.ts +1 -1
  59. package/src/types/data-structures/binary-tree/red-black-tree.ts +1 -1
  60. package/src/types/data-structures/linked-list/doubly-linked-list.ts +1 -1
  61. package/src/types/data-structures/linked-list/singly-linked-list.ts +1 -1
  62. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -1
  63. package/src/types/data-structures/queue/deque.ts +7 -0
  64. package/src/types/data-structures/stack/stack.ts +1 -1
  65. package/src/utils/utils.ts +4 -2
@@ -3,6 +3,55 @@
3
3
  var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
5
 
6
+ // src/common/error.ts
7
+ var ERR = {
8
+ // Range / index
9
+ indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
10
+ invalidIndex: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Index must be an integer.`, "invalidIndex"),
11
+ // Type / argument
12
+ invalidArgument: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidArgument"),
13
+ comparatorRequired: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Comparator is required for non-number/non-string/non-Date keys.`, "comparatorRequired"),
14
+ invalidKey: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidKey"),
15
+ notAFunction: /* @__PURE__ */ __name((name, ctx) => `${ctx ? ctx + ": " : ""}${name} must be a function.`, "notAFunction"),
16
+ invalidEntry: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Each entry must be a [key, value] tuple.`, "invalidEntry"),
17
+ invalidNaN: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}NaN is not a valid key.`, "invalidNaN"),
18
+ invalidDate: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Invalid Date key.`, "invalidDate"),
19
+ reduceEmpty: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Reduce of empty structure with no initial value.`, "reduceEmpty"),
20
+ callbackReturnType: /* @__PURE__ */ __name((expected, got, ctx) => `${ctx ? ctx + ": " : ""}Callback must return ${expected}; got ${got}.`, "callbackReturnType"),
21
+ // State / operation
22
+ invalidOperation: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidOperation"),
23
+ // Matrix
24
+ matrixDimensionMismatch: /* @__PURE__ */ __name((op) => `Matrix: Dimensions must be compatible for ${op}.`, "matrixDimensionMismatch"),
25
+ matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
26
+ matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
27
+ matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
28
+ matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch")
29
+ };
30
+
31
+ // src/common/index.ts
32
+ var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
33
+ DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
34
+ DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
35
+ return DFSOperation2;
36
+ })(DFSOperation || {});
37
+ var Range = class {
38
+ constructor(low, high, includeLow = true, includeHigh = true) {
39
+ this.low = low;
40
+ this.high = high;
41
+ this.includeLow = includeLow;
42
+ this.includeHigh = includeHigh;
43
+ }
44
+ static {
45
+ __name(this, "Range");
46
+ }
47
+ // Determine whether a key is within the range
48
+ isInRange(key, comparator) {
49
+ const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
50
+ const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
51
+ return lowCheck && highCheck;
52
+ }
53
+ };
54
+
6
55
  // src/data-structures/base/iterable-element-base.ts
7
56
  var IterableElementBase = class {
8
57
  static {
@@ -21,7 +70,7 @@ var IterableElementBase = class {
21
70
  if (options) {
22
71
  const { toElementFn } = options;
23
72
  if (typeof toElementFn === "function") this._toElementFn = toElementFn;
24
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
73
+ else if (toElementFn) throw new TypeError(ERR.notAFunction("toElementFn"));
25
74
  }
26
75
  }
27
76
  /**
@@ -184,7 +233,7 @@ var IterableElementBase = class {
184
233
  acc = initialValue;
185
234
  } else {
186
235
  const first = iter.next();
187
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
236
+ if (first.done) throw new TypeError(ERR.reduceEmpty());
188
237
  acc = first.value;
189
238
  index = 1;
190
239
  }
@@ -653,7 +702,7 @@ var SinglyLinkedList = class extends LinearLinkedBase {
653
702
  static {
654
703
  __name(this, "SinglyLinkedList");
655
704
  }
656
- _equals = Object.is;
705
+ _equals = /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals");
657
706
  /**
658
707
  * Create a SinglyLinkedList and optionally bulk-insert elements.
659
708
  * @remarks Time O(N), Space O(N)
@@ -757,8 +806,8 @@ var SinglyLinkedList = class extends LinearLinkedBase {
757
806
  return value2;
758
807
  }
759
808
  let current = this.head;
760
- while (current.next !== this.tail) current = current.next;
761
- const value = this.tail.value;
809
+ while (current.next && current.next !== this.tail) current = current.next;
810
+ const value = this.tail?.value;
762
811
  current.next = void 0;
763
812
  this._tail = current;
764
813
  this._length--;
@@ -846,8 +895,8 @@ var SinglyLinkedList = class extends LinearLinkedBase {
846
895
  at(index) {
847
896
  if (index < 0 || index >= this._length) return void 0;
848
897
  let current = this.head;
849
- for (let i = 0; i < index; i++) current = current.next;
850
- return current.value;
898
+ for (let i = 0; i < index && current; i++) current = current.next;
899
+ return current?.value;
851
900
  }
852
901
  /**
853
902
  * Type guard: check whether the input is a SinglyLinkedListNode.
@@ -867,7 +916,7 @@ var SinglyLinkedList = class extends LinearLinkedBase {
867
916
  getNodeAt(index) {
868
917
  if (index < 0 || index >= this._length) return void 0;
869
918
  let current = this.head;
870
- for (let i = 0; i < index; i++) current = current.next;
919
+ for (let i = 0; i < index && current; i++) current = current.next;
871
920
  return current;
872
921
  }
873
922
  /**
@@ -1376,7 +1425,7 @@ var DoublyLinkedList = class extends LinearLinkedBase {
1376
1425
  static {
1377
1426
  __name(this, "DoublyLinkedList");
1378
1427
  }
1379
- _equals = Object.is;
1428
+ _equals = /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals");
1380
1429
  /**
1381
1430
  * Create a DoublyLinkedList and optionally bulk-insert elements.
1382
1431
  * @remarks Time O(N), Space O(N)
@@ -1571,8 +1620,8 @@ var DoublyLinkedList = class extends LinearLinkedBase {
1571
1620
  at(index) {
1572
1621
  if (index < 0 || index >= this._length) return void 0;
1573
1622
  let current = this.head;
1574
- for (let i = 0; i < index; i++) current = current.next;
1575
- return current.value;
1623
+ for (let i = 0; i < index && current; i++) current = current.next;
1624
+ return current?.value;
1576
1625
  }
1577
1626
  /**
1578
1627
  * Get the node reference at a given index.
@@ -1583,7 +1632,7 @@ var DoublyLinkedList = class extends LinearLinkedBase {
1583
1632
  getNodeAt(index) {
1584
1633
  if (index < 0 || index >= this._length) return void 0;
1585
1634
  let current = this.head;
1586
- for (let i = 0; i < index; i++) current = current.next;
1635
+ for (let i = 0; i < index && current; i++) current = current.next;
1587
1636
  return current;
1588
1637
  }
1589
1638
  /**
@@ -2083,30 +2132,6 @@ var SkipList = class {
2083
2132
  return level;
2084
2133
  }
2085
2134
  };
2086
-
2087
- // src/common/index.ts
2088
- var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
2089
- DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
2090
- DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
2091
- return DFSOperation2;
2092
- })(DFSOperation || {});
2093
- var Range = class {
2094
- constructor(low, high, includeLow = true, includeHigh = true) {
2095
- this.low = low;
2096
- this.high = high;
2097
- this.includeLow = includeLow;
2098
- this.includeHigh = includeHigh;
2099
- }
2100
- static {
2101
- __name(this, "Range");
2102
- }
2103
- // Determine whether a key is within the range
2104
- isInRange(key, comparator) {
2105
- const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
2106
- const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
2107
- return lowCheck && highCheck;
2108
- }
2109
- };
2110
2135
  /**
2111
2136
  * data-structure-typed
2112
2137
  *
@@ -2118,6 +2143,7 @@ var Range = class {
2118
2143
  exports.DFSOperation = DFSOperation;
2119
2144
  exports.DoublyLinkedList = DoublyLinkedList;
2120
2145
  exports.DoublyLinkedListNode = DoublyLinkedListNode;
2146
+ exports.ERR = ERR;
2121
2147
  exports.Range = Range;
2122
2148
  exports.SinglyLinkedList = SinglyLinkedList;
2123
2149
  exports.SinglyLinkedListNode = SinglyLinkedListNode;