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,54 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
3
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
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 _Range {
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
+ // Determine whether a key is within the range
45
+ isInRange(key, comparator) {
46
+ const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
47
+ const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
48
+ return lowCheck && highCheck;
49
+ }
50
+ };
51
+ __name(_Range, "Range");
52
+ var Range = _Range;
53
+
6
54
  // src/data-structures/base/iterable-element-base.ts
7
55
  var _IterableElementBase = class _IterableElementBase {
8
56
  /**
@@ -25,7 +73,7 @@ var _IterableElementBase = class _IterableElementBase {
25
73
  if (options) {
26
74
  const { toElementFn } = options;
27
75
  if (typeof toElementFn === "function") this._toElementFn = toElementFn;
28
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
76
+ else if (toElementFn) throw new TypeError(ERR.notAFunction("toElementFn"));
29
77
  }
30
78
  }
31
79
  /**
@@ -181,7 +229,7 @@ var _IterableElementBase = class _IterableElementBase {
181
229
  acc = initialValue;
182
230
  } else {
183
231
  const first = iter.next();
184
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
232
+ if (first.done) throw new TypeError(ERR.reduceEmpty());
185
233
  acc = first.value;
186
234
  index = 1;
187
235
  }
@@ -654,7 +702,7 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
654
702
  */
655
703
  constructor(elements = [], options) {
656
704
  super(options);
657
- __publicField(this, "_equals", Object.is);
705
+ __publicField(this, "_equals", /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals"));
658
706
  __publicField(this, "_head");
659
707
  __publicField(this, "_tail");
660
708
  __publicField(this, "_length", 0);
@@ -742,6 +790,7 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
742
790
  * @returns Removed element or undefined.
743
791
  */
744
792
  pop() {
793
+ var _a;
745
794
  if (!this.head) return void 0;
746
795
  if (this.head === this.tail) {
747
796
  const value2 = this.head.value;
@@ -751,8 +800,8 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
751
800
  return value2;
752
801
  }
753
802
  let current = this.head;
754
- while (current.next !== this.tail) current = current.next;
755
- const value = this.tail.value;
803
+ while (current.next && current.next !== this.tail) current = current.next;
804
+ const value = (_a = this.tail) == null ? void 0 : _a.value;
756
805
  current.next = void 0;
757
806
  this._tail = current;
758
807
  this._length--;
@@ -840,8 +889,8 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
840
889
  at(index) {
841
890
  if (index < 0 || index >= this._length) return void 0;
842
891
  let current = this.head;
843
- for (let i = 0; i < index; i++) current = current.next;
844
- return current.value;
892
+ for (let i = 0; i < index && current; i++) current = current.next;
893
+ return current == null ? void 0 : current.value;
845
894
  }
846
895
  /**
847
896
  * Type guard: check whether the input is a SinglyLinkedListNode.
@@ -861,7 +910,7 @@ var _SinglyLinkedList = class _SinglyLinkedList extends LinearLinkedBase {
861
910
  getNodeAt(index) {
862
911
  if (index < 0 || index >= this._length) return void 0;
863
912
  let current = this.head;
864
- for (let i = 0; i < index; i++) current = current.next;
913
+ for (let i = 0; i < index && current; i++) current = current.next;
865
914
  return current;
866
915
  }
867
916
  /**
@@ -1377,7 +1426,7 @@ var _DoublyLinkedList = class _DoublyLinkedList extends LinearLinkedBase {
1377
1426
  */
1378
1427
  constructor(elements = [], options) {
1379
1428
  super(options);
1380
- __publicField(this, "_equals", Object.is);
1429
+ __publicField(this, "_equals", /* @__PURE__ */ __name((a, b) => Object.is(a, b), "_equals"));
1381
1430
  __publicField(this, "_head");
1382
1431
  __publicField(this, "_tail");
1383
1432
  __publicField(this, "_length", 0);
@@ -1565,8 +1614,8 @@ var _DoublyLinkedList = class _DoublyLinkedList extends LinearLinkedBase {
1565
1614
  at(index) {
1566
1615
  if (index < 0 || index >= this._length) return void 0;
1567
1616
  let current = this.head;
1568
- for (let i = 0; i < index; i++) current = current.next;
1569
- return current.value;
1617
+ for (let i = 0; i < index && current; i++) current = current.next;
1618
+ return current == null ? void 0 : current.value;
1570
1619
  }
1571
1620
  /**
1572
1621
  * Get the node reference at a given index.
@@ -1577,7 +1626,7 @@ var _DoublyLinkedList = class _DoublyLinkedList extends LinearLinkedBase {
1577
1626
  getNodeAt(index) {
1578
1627
  if (index < 0 || index >= this._length) return void 0;
1579
1628
  let current = this.head;
1580
- for (let i = 0; i < index; i++) current = current.next;
1629
+ for (let i = 0; i < index && current; i++) current = current.next;
1581
1630
  return current;
1582
1631
  }
1583
1632
  /**
@@ -2077,29 +2126,6 @@ var _SkipList = class _SkipList {
2077
2126
  };
2078
2127
  __name(_SkipList, "SkipList");
2079
2128
  var SkipList = _SkipList;
2080
-
2081
- // src/common/index.ts
2082
- var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
2083
- DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
2084
- DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
2085
- return DFSOperation2;
2086
- })(DFSOperation || {});
2087
- var _Range = class _Range {
2088
- constructor(low, high, includeLow = true, includeHigh = true) {
2089
- this.low = low;
2090
- this.high = high;
2091
- this.includeLow = includeLow;
2092
- this.includeHigh = includeHigh;
2093
- }
2094
- // Determine whether a key is within the range
2095
- isInRange(key, comparator) {
2096
- const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
2097
- const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
2098
- return lowCheck && highCheck;
2099
- }
2100
- };
2101
- __name(_Range, "Range");
2102
- var Range = _Range;
2103
2129
  /**
2104
2130
  * data-structure-typed
2105
2131
  *
@@ -2108,6 +2134,6 @@ var Range = _Range;
2108
2134
  * @license MIT License
2109
2135
  */
2110
2136
 
2111
- export { DFSOperation, DoublyLinkedList, DoublyLinkedListNode, Range, SinglyLinkedList, SinglyLinkedListNode, SkipList, SkipListNode };
2137
+ export { DFSOperation, DoublyLinkedList, DoublyLinkedListNode, ERR, Range, SinglyLinkedList, SinglyLinkedListNode, SkipList, SkipListNode };
2112
2138
  //# sourceMappingURL=index.mjs.map
2113
2139
  //# sourceMappingURL=index.mjs.map