typescript-dsa-stl 1.0.0

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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +108 -0
  3. package/dist/algorithms/array.d.ts +26 -0
  4. package/dist/algorithms/array.d.ts.map +1 -0
  5. package/dist/algorithms/array.js +126 -0
  6. package/dist/algorithms/array.js.map +1 -0
  7. package/dist/algorithms/index.d.ts +2 -0
  8. package/dist/algorithms/index.d.ts.map +1 -0
  9. package/dist/algorithms/index.js +2 -0
  10. package/dist/algorithms/index.js.map +1 -0
  11. package/dist/collections/List.d.ts +38 -0
  12. package/dist/collections/List.d.ts.map +1 -0
  13. package/dist/collections/List.js +160 -0
  14. package/dist/collections/List.js.map +1 -0
  15. package/dist/collections/Queue.d.ts +20 -0
  16. package/dist/collections/Queue.d.ts.map +1 -0
  17. package/dist/collections/Queue.js +81 -0
  18. package/dist/collections/Queue.js.map +1 -0
  19. package/dist/collections/Stack.d.ts +13 -0
  20. package/dist/collections/Stack.d.ts.map +1 -0
  21. package/dist/collections/Stack.js +34 -0
  22. package/dist/collections/Stack.js.map +1 -0
  23. package/dist/collections/Vector.d.ts +28 -0
  24. package/dist/collections/Vector.d.ts.map +1 -0
  25. package/dist/collections/Vector.js +113 -0
  26. package/dist/collections/Vector.js.map +1 -0
  27. package/dist/collections/index.d.ts +5 -0
  28. package/dist/collections/index.d.ts.map +1 -0
  29. package/dist/collections/index.js +5 -0
  30. package/dist/collections/index.js.map +1 -0
  31. package/dist/index.d.ts +13 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +12 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/types/index.d.ts +16 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +13 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/dist/utils/index.d.ts +10 -0
  40. package/dist/utils/index.d.ts.map +1 -0
  41. package/dist/utils/index.js +25 -0
  42. package/dist/utils/index.js.map +1 -0
  43. package/package.json +77 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # TypeScript_DSA
2
+
3
+ STL-style **data structures and algorithms** for TypeScript: Vector, Stack, Queue, List, and algorithms (sort, binarySearch, lowerBound, min, max, etc.). Publishable npm package.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install typescript-dsa-stl
9
+ ```
10
+
11
+ ## Quick start
12
+
13
+ ```ts
14
+ import {
15
+ Vector,
16
+ Stack,
17
+ Queue,
18
+ List,
19
+ sort,
20
+ find,
21
+ binarySearch,
22
+ min,
23
+ max,
24
+ clamp,
25
+ range,
26
+ } from 'typescript-dsa-stl';
27
+
28
+ // Collections
29
+ const vec = new Vector<number>([1, 2, 3]);
30
+ vec.push(4);
31
+ console.log(vec.back()); // 4
32
+
33
+ const stack = new Stack<string>();
34
+ stack.push('a');
35
+ stack.push('b');
36
+ console.log(stack.top()); // 'b'
37
+
38
+ const queue = new Queue<number>();
39
+ queue.enqueue(1);
40
+ queue.enqueue(2);
41
+ console.log(queue.front()); // 1
42
+
43
+ const list = new List<number>();
44
+ list.pushBack(10);
45
+ const node = list.pushBack(20);
46
+ list.insertBefore(node, 15);
47
+ console.log(list.toArray()); // [10, 15, 20]
48
+
49
+ // Algorithms (work on arrays and iterables)
50
+ const arr = [3, 1, 4, 1, 5];
51
+ sort(arr); // [1, 1, 3, 4, 5]
52
+ find(arr, (n) => n > 3); // 4
53
+ min(arr); // 1
54
+ max(arr); // 5
55
+
56
+ const sorted = [1, 2, 4, 4, 5];
57
+ binarySearch(sorted, 4); // 2
58
+ lowerBound(sorted, 4); // 2
59
+ upperBound(sorted, 4); // 4
60
+
61
+ // Utils
62
+ clamp(42, 0, 10); // 10
63
+ range(0, 5); // [0, 1, 2, 3, 4]
64
+ ```
65
+
66
+ ## API overview
67
+
68
+ | Module | Exports |
69
+ |--------|--------|
70
+ | **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode` |
71
+ | **Algorithms** | `sort`, `find`, `findIndex`, `transform`, `filter`, `reduce`, `reverse`, `unique`, `binarySearch`, `lowerBound`, `upperBound`, `min`, `max`, `partition` |
72
+ | **Utils** | `clamp`, `range`, `noop`, `identity`, `swap` |
73
+ | **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray` |
74
+
75
+ ### Subpath imports (tree-shaking)
76
+
77
+ ```ts
78
+ import { Vector, Stack } from 'typescript-dsa-stl/collections';
79
+ import { sort, binarySearch } from 'typescript-dsa-stl/algorithms';
80
+ import { clamp, range } from 'typescript-dsa-stl/utils';
81
+ import type { Comparator } from 'typescript-dsa-stl/types';
82
+ ```
83
+
84
+ ## Data structures
85
+
86
+ | Structure | Access | Insert end | Insert middle | Remove end | Remove middle |
87
+ |-----------|--------|------------|---------------|------------|---------------|
88
+ | **Vector** | O(1) | O(1)* | O(n) | O(1) | O(n) |
89
+ | **Stack** | — | O(1) | — | O(1) | — |
90
+ | **Queue** | — | O(1)* | — | O(1)* | — |
91
+ | **List** | O(n) | O(1) | O(1)** | O(1) | O(1)** |
92
+
93
+ \* Amortized. \** At a known node.
94
+
95
+ ## Publish this package to npm
96
+
97
+ 1. **Set repo URLs** in `package.json`: replace `your-username` in `repository`, `homepage`, and `bugs` with your GitHub username (and repo name if different).
98
+ 2. **Build**: `npm run build`
99
+ 3. **Login**: `npm login`
100
+ 4. **Publish**: `npm publish` (use `npm publish --access public` if you use a scoped name like `@yourusername/typescript-dsa-stl`)
101
+
102
+ ## Scripts
103
+
104
+ - `npm run build` — compile TypeScript to `dist/` (runs automatically before `npm publish` via `prepublishOnly`)
105
+
106
+ ## License
107
+
108
+ MIT
@@ -0,0 +1,26 @@
1
+ /**
2
+ * STL-like algorithms. Work on arrays and any IterableLike (Vector, List, etc.).
3
+ * Uses a single copy to array when source is not already an array.
4
+ */
5
+ import type { Comparator, Predicate, Reducer, UnaryFn } from '../types/index.js';
6
+ export declare function sort<T>(source: Iterable<T> | T[], compare?: Comparator<T>): T[];
7
+ export declare function find<T>(source: Iterable<T> | T[], predicate: Predicate<T>): T | undefined;
8
+ export declare function findIndex<T>(source: Iterable<T> | T[], predicate: Predicate<T>): number;
9
+ export declare function transform<T, U>(source: Iterable<T> | T[], fn: UnaryFn<T, U>): U[];
10
+ export declare function filter<T>(source: Iterable<T> | T[], predicate: Predicate<T>): T[];
11
+ export declare function reduce<T, U>(source: Iterable<T> | T[], fn: Reducer<T, U>, initial: U): U;
12
+ export declare function reverse<T>(source: Iterable<T> | T[]): T[];
13
+ export declare function unique<T>(source: Iterable<T> | T[]): T[];
14
+ /** Binary search in sorted range. Returns index of first match or -1. O(log n). */
15
+ export declare function binarySearch<T>(source: Iterable<T> | T[], value: T, compare?: Comparator<T>): number;
16
+ /** First index where arr[i] >= value (sorted). O(log n). */
17
+ export declare function lowerBound<T>(source: Iterable<T> | T[], value: T, compare?: Comparator<T>): number;
18
+ /** First index where arr[i] > value (sorted). O(log n). */
19
+ export declare function upperBound<T>(source: Iterable<T> | T[], value: T, compare?: Comparator<T>): number;
20
+ /** Minimum element. O(n). */
21
+ export declare function min<T>(source: Iterable<T> | T[], compare?: Comparator<T>): T | undefined;
22
+ /** Maximum element. O(n). */
23
+ export declare function max<T>(source: Iterable<T> | T[], compare?: Comparator<T>): T | undefined;
24
+ /** Partition range by predicate. Returns index of first element where predicate is false. Mutates array. */
25
+ export declare function partition<T>(arr: T[], predicate: Predicate<T>, start?: number, end?: number): number;
26
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/algorithms/array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { toArray } from '../types/index.js';
2
+ function defaultCompare(a, b) {
3
+ return a < b ? -1 : a > b ? 1 : 0;
4
+ }
5
+ export function sort(source, compare) {
6
+ const arr = toArray(source);
7
+ const out = [...arr];
8
+ out.sort(compare ?? defaultCompare);
9
+ return out;
10
+ }
11
+ export function find(source, predicate) {
12
+ for (const x of toArray(source)) {
13
+ if (predicate(x))
14
+ return x;
15
+ }
16
+ return undefined;
17
+ }
18
+ export function findIndex(source, predicate) {
19
+ const arr = toArray(source);
20
+ return arr.findIndex(predicate);
21
+ }
22
+ export function transform(source, fn) {
23
+ const arr = toArray(source);
24
+ return arr.map(fn);
25
+ }
26
+ export function filter(source, predicate) {
27
+ const arr = toArray(source);
28
+ return arr.filter(predicate);
29
+ }
30
+ export function reduce(source, fn, initial) {
31
+ const arr = toArray(source);
32
+ return arr.reduce(fn, initial);
33
+ }
34
+ export function reverse(source) {
35
+ const arr = toArray(source);
36
+ return [...arr].reverse();
37
+ }
38
+ export function unique(source) {
39
+ return [...new Set(toArray(source))];
40
+ }
41
+ /** Binary search in sorted range. Returns index of first match or -1. O(log n). */
42
+ export function binarySearch(source, value, compare) {
43
+ const arr = toArray(source);
44
+ const cmp = compare ?? defaultCompare;
45
+ let lo = 0;
46
+ let hi = arr.length;
47
+ while (lo < hi) {
48
+ const mid = (lo + hi) >>> 1;
49
+ const c = cmp(arr[mid], value);
50
+ if (c < 0)
51
+ lo = mid + 1;
52
+ else if (c > 0)
53
+ hi = mid;
54
+ else
55
+ return mid;
56
+ }
57
+ return -1;
58
+ }
59
+ /** First index where arr[i] >= value (sorted). O(log n). */
60
+ export function lowerBound(source, value, compare) {
61
+ const arr = toArray(source);
62
+ const cmp = compare ?? defaultCompare;
63
+ let lo = 0;
64
+ let hi = arr.length;
65
+ while (lo < hi) {
66
+ const mid = (lo + hi) >>> 1;
67
+ if (cmp(arr[mid], value) < 0)
68
+ lo = mid + 1;
69
+ else
70
+ hi = mid;
71
+ }
72
+ return lo;
73
+ }
74
+ /** First index where arr[i] > value (sorted). O(log n). */
75
+ export function upperBound(source, value, compare) {
76
+ const arr = toArray(source);
77
+ const cmp = compare ?? defaultCompare;
78
+ let lo = 0;
79
+ let hi = arr.length;
80
+ while (lo < hi) {
81
+ const mid = (lo + hi) >>> 1;
82
+ if (cmp(arr[mid], value) <= 0)
83
+ lo = mid + 1;
84
+ else
85
+ hi = mid;
86
+ }
87
+ return lo;
88
+ }
89
+ /** Minimum element. O(n). */
90
+ export function min(source, compare) {
91
+ const arr = toArray(source);
92
+ if (arr.length === 0)
93
+ return undefined;
94
+ const cmp = compare ?? defaultCompare;
95
+ let best = arr[0];
96
+ for (let i = 1; i < arr.length; i++) {
97
+ if (cmp(arr[i], best) < 0)
98
+ best = arr[i];
99
+ }
100
+ return best;
101
+ }
102
+ /** Maximum element. O(n). */
103
+ export function max(source, compare) {
104
+ const arr = toArray(source);
105
+ if (arr.length === 0)
106
+ return undefined;
107
+ const cmp = compare ?? defaultCompare;
108
+ let best = arr[0];
109
+ for (let i = 1; i < arr.length; i++) {
110
+ if (cmp(arr[i], best) > 0)
111
+ best = arr[i];
112
+ }
113
+ return best;
114
+ }
115
+ /** Partition range by predicate. Returns index of first element where predicate is false. Mutates array. */
116
+ export function partition(arr, predicate, start = 0, end = arr.length) {
117
+ let i = start;
118
+ for (let j = start; j < end; j++) {
119
+ if (predicate(arr[j])) {
120
+ [arr[i], arr[j]] = [arr[j], arr[i]];
121
+ i++;
122
+ }
123
+ }
124
+ return i;
125
+ }
126
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/algorithms/array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './array.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './array.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Doubly linked list. O(1) insert/erase at a known node; O(n) index access.
3
+ * Use when you need frequent insertions/deletions in the middle without reallocation.
4
+ */
5
+ export declare class ListNode<T> {
6
+ value: T;
7
+ next: ListNode<T> | null;
8
+ prev: ListNode<T> | null;
9
+ constructor(value: T);
10
+ }
11
+ export declare class List<T> {
12
+ private _head;
13
+ private _tail;
14
+ private _length;
15
+ get size(): number;
16
+ get empty(): boolean;
17
+ front(): T;
18
+ back(): T;
19
+ pushBack(value: T): ListNode<T>;
20
+ pushFront(value: T): ListNode<T>;
21
+ popBack(): T | undefined;
22
+ popFront(): T | undefined;
23
+ /** Insert value before the given node. Returns the new node. */
24
+ insertBefore(node: ListNode<T>, value: T): ListNode<T>;
25
+ /** Insert value after the given node. Returns the new node. */
26
+ insertAfter(node: ListNode<T>, value: T): ListNode<T>;
27
+ /** Remove the node. Returns the removed value. */
28
+ erase(node: ListNode<T>): T;
29
+ at(index: number): T;
30
+ clear(): void;
31
+ [Symbol.iterator](): Iterator<T>;
32
+ toArray(): T[];
33
+ /** Return the first node (for iteration by hand). */
34
+ get headNode(): ListNode<T> | null;
35
+ /** Return the last node. */
36
+ get tailNode(): ListNode<T> | null;
37
+ }
38
+ //# sourceMappingURL=List.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/collections/List.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,QAAQ,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAChC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;gBAEpB,KAAK,EAAE,CAAC;CAGrB;AAED,qBAAa,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAa;IAE5B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,KAAK,IAAI,CAAC;IAKV,IAAI,IAAI,CAAC;IAKT,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAa/B,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAahC,OAAO,IAAI,CAAC,GAAG,SAAS;IAUxB,QAAQ,IAAI,CAAC,GAAG,SAAS;IAUzB,gEAAgE;IAChE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAWtD,+DAA+D;IAC/D,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAWrD,kDAAkD;IAClD,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAS3B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC;IASpB,KAAK,IAAI,IAAI;IAKb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAYhC,OAAO,IAAI,CAAC,EAAE;IAId,qDAAqD;IACrD,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAEjC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAEjC;CACF"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Doubly linked list. O(1) insert/erase at a known node; O(n) index access.
3
+ * Use when you need frequent insertions/deletions in the middle without reallocation.
4
+ */
5
+ export class ListNode {
6
+ constructor(value) {
7
+ this.next = null;
8
+ this.prev = null;
9
+ this.value = value;
10
+ }
11
+ }
12
+ export class List {
13
+ constructor() {
14
+ this._head = null;
15
+ this._tail = null;
16
+ this._length = 0;
17
+ }
18
+ get size() {
19
+ return this._length;
20
+ }
21
+ get empty() {
22
+ return this._length === 0;
23
+ }
24
+ front() {
25
+ if (!this._head)
26
+ throw new RangeError('List is empty');
27
+ return this._head.value;
28
+ }
29
+ back() {
30
+ if (!this._tail)
31
+ throw new RangeError('List is empty');
32
+ return this._tail.value;
33
+ }
34
+ pushBack(value) {
35
+ const node = new ListNode(value);
36
+ if (!this._tail) {
37
+ this._head = this._tail = node;
38
+ }
39
+ else {
40
+ this._tail.next = node;
41
+ node.prev = this._tail;
42
+ this._tail = node;
43
+ }
44
+ this._length++;
45
+ return node;
46
+ }
47
+ pushFront(value) {
48
+ const node = new ListNode(value);
49
+ if (!this._head) {
50
+ this._head = this._tail = node;
51
+ }
52
+ else {
53
+ this._head.prev = node;
54
+ node.next = this._head;
55
+ this._head = node;
56
+ }
57
+ this._length++;
58
+ return node;
59
+ }
60
+ popBack() {
61
+ if (!this._tail)
62
+ return undefined;
63
+ const v = this._tail.value;
64
+ this._tail = this._tail.prev;
65
+ if (this._tail)
66
+ this._tail.next = null;
67
+ else
68
+ this._head = null;
69
+ this._length--;
70
+ return v;
71
+ }
72
+ popFront() {
73
+ if (!this._head)
74
+ return undefined;
75
+ const v = this._head.value;
76
+ this._head = this._head.next;
77
+ if (this._head)
78
+ this._head.prev = null;
79
+ else
80
+ this._tail = null;
81
+ this._length--;
82
+ return v;
83
+ }
84
+ /** Insert value before the given node. Returns the new node. */
85
+ insertBefore(node, value) {
86
+ const n = new ListNode(value);
87
+ n.prev = node.prev;
88
+ n.next = node;
89
+ if (node.prev)
90
+ node.prev.next = n;
91
+ else
92
+ this._head = n;
93
+ node.prev = n;
94
+ this._length++;
95
+ return n;
96
+ }
97
+ /** Insert value after the given node. Returns the new node. */
98
+ insertAfter(node, value) {
99
+ const n = new ListNode(value);
100
+ n.next = node.next;
101
+ n.prev = node;
102
+ if (node.next)
103
+ node.next.prev = n;
104
+ else
105
+ this._tail = n;
106
+ node.next = n;
107
+ this._length++;
108
+ return n;
109
+ }
110
+ /** Remove the node. Returns the removed value. */
111
+ erase(node) {
112
+ if (node.prev)
113
+ node.prev.next = node.next;
114
+ else
115
+ this._head = node.next;
116
+ if (node.next)
117
+ node.next.prev = node.prev;
118
+ else
119
+ this._tail = node.prev;
120
+ this._length--;
121
+ return node.value;
122
+ }
123
+ at(index) {
124
+ if (index < 0 || index >= this._length) {
125
+ throw new RangeError(`List index ${index} out of range (size ${this._length})`);
126
+ }
127
+ let cur = this._head;
128
+ for (let i = 0; i < index; i++)
129
+ cur = cur.next;
130
+ return cur.value;
131
+ }
132
+ clear() {
133
+ this._head = this._tail = null;
134
+ this._length = 0;
135
+ }
136
+ [Symbol.iterator]() {
137
+ let cur = this._head;
138
+ return {
139
+ next() {
140
+ if (!cur)
141
+ return { done: true, value: undefined };
142
+ const value = cur.value;
143
+ cur = cur.next;
144
+ return { done: false, value };
145
+ },
146
+ };
147
+ }
148
+ toArray() {
149
+ return [...this];
150
+ }
151
+ /** Return the first node (for iteration by hand). */
152
+ get headNode() {
153
+ return this._head;
154
+ }
155
+ /** Return the last node. */
156
+ get tailNode() {
157
+ return this._tail;
158
+ }
159
+ }
160
+ //# sourceMappingURL=List.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../src/collections/List.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * FIFO queue. Amortized O(1) enqueue/dequeue using a circular buffer.
3
+ */
4
+ export declare class Queue<T> {
5
+ private _buf;
6
+ private _head;
7
+ private _size;
8
+ constructor(initialCapacity?: number);
9
+ get size(): number;
10
+ get empty(): boolean;
11
+ private grow;
12
+ enqueue(value: T): void;
13
+ dequeue(): T | undefined;
14
+ front(): T;
15
+ back(): T;
16
+ clear(): void;
17
+ [Symbol.iterator](): Iterator<T>;
18
+ toArray(): T[];
19
+ }
20
+ //# sourceMappingURL=Queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../src/collections/Queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAa;gBAEd,eAAe,SAAK;IAIhC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAMvB,OAAO,IAAI,CAAC,GAAG,SAAS;IAUxB,KAAK,IAAI,CAAC;IAKV,IAAI,IAAI,CAAC;IAKT,KAAK,IAAI,IAAI;IAMb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAgBhC,OAAO,IAAI,CAAC,EAAE;CAQf"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * FIFO queue. Amortized O(1) enqueue/dequeue using a circular buffer.
3
+ */
4
+ export class Queue {
5
+ constructor(initialCapacity = 16) {
6
+ this._head = 0;
7
+ this._size = 0;
8
+ this._buf = new Array(Math.max(4, initialCapacity));
9
+ }
10
+ get size() {
11
+ return this._size;
12
+ }
13
+ get empty() {
14
+ return this._size === 0;
15
+ }
16
+ grow() {
17
+ const cap = this._buf.length;
18
+ const next = new Array(cap * 2);
19
+ for (let i = 0; i < this._size; i++) {
20
+ next[i] = this._buf[(this._head + i) % cap];
21
+ }
22
+ this._buf = next;
23
+ this._head = 0;
24
+ }
25
+ enqueue(value) {
26
+ if (this._size === this._buf.length)
27
+ this.grow();
28
+ this._buf[(this._head + this._size) % this._buf.length] = value;
29
+ this._size++;
30
+ }
31
+ dequeue() {
32
+ if (this._size === 0)
33
+ return undefined;
34
+ const cap = this._buf.length;
35
+ const value = this._buf[this._head];
36
+ this._buf[this._head] = undefined;
37
+ this._head = (this._head + 1) % cap;
38
+ this._size--;
39
+ return value;
40
+ }
41
+ front() {
42
+ if (this._size === 0)
43
+ throw new RangeError('Queue is empty');
44
+ return this._buf[this._head];
45
+ }
46
+ back() {
47
+ if (this._size === 0)
48
+ throw new RangeError('Queue is empty');
49
+ return this._buf[(this._head + this._size - 1) % this._buf.length];
50
+ }
51
+ clear() {
52
+ this._buf = new Array(this._buf.length);
53
+ this._head = 0;
54
+ this._size = 0;
55
+ }
56
+ [Symbol.iterator]() {
57
+ const buf = this._buf;
58
+ const cap = buf.length;
59
+ const head = this._head;
60
+ const size = this._size;
61
+ let i = 0;
62
+ return {
63
+ next() {
64
+ if (i >= size)
65
+ return { done: true, value: undefined };
66
+ const value = buf[(head + i) % cap];
67
+ i++;
68
+ return { done: false, value };
69
+ },
70
+ };
71
+ }
72
+ toArray() {
73
+ const out = [];
74
+ const cap = this._buf.length;
75
+ for (let i = 0; i < this._size; i++) {
76
+ out.push(this._buf[(this._head + i) % cap]);
77
+ }
78
+ return out;
79
+ }
80
+ }
81
+ //# sourceMappingURL=Queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/collections/Queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class Stack<T> {
2
+ private _vec;
3
+ constructor(initial?: T[] | number);
4
+ get size(): number;
5
+ get empty(): boolean;
6
+ push(value: T): void;
7
+ pop(): T | undefined;
8
+ top(): T;
9
+ clear(): void;
10
+ [Symbol.iterator](): Iterator<T>;
11
+ toArray(): T[];
12
+ }
13
+ //# sourceMappingURL=Stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/collections/Stack.ts"],"names":[],"mappings":"AAKA,qBAAa,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,CAAY;gBAEZ,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM;IAIlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAIpB,GAAG,IAAI,CAAC,GAAG,SAAS;IAIpB,GAAG,IAAI,CAAC;IAIR,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,OAAO,IAAI,CAAC,EAAE;CAGf"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * LIFO stack. O(1) push/pop. Backed by a Vector.
3
+ */
4
+ import { Vector } from './Vector.js';
5
+ export class Stack {
6
+ constructor(initial) {
7
+ this._vec = new Vector(initial);
8
+ }
9
+ get size() {
10
+ return this._vec.size;
11
+ }
12
+ get empty() {
13
+ return this._vec.empty;
14
+ }
15
+ push(value) {
16
+ this._vec.push(value);
17
+ }
18
+ pop() {
19
+ return this._vec.pop();
20
+ }
21
+ top() {
22
+ return this._vec.back();
23
+ }
24
+ clear() {
25
+ this._vec.clear();
26
+ }
27
+ [Symbol.iterator]() {
28
+ return this._vec[Symbol.iterator]();
29
+ }
30
+ toArray() {
31
+ return this._vec.toArray();
32
+ }
33
+ }
34
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/collections/Stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,KAAK;IAGhB,YAAY,OAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,KAAQ;QACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * STL-like dynamic array. Amortized O(1) push/pop, O(1) index access.
3
+ * Uses a single backing array with optional capacity reserve to reduce reallocations.
4
+ */
5
+ export declare class Vector<T> {
6
+ private _data;
7
+ private _length;
8
+ constructor(initial?: T[] | number);
9
+ get size(): number;
10
+ get empty(): boolean;
11
+ /** Current backing array length (capacity). */
12
+ get capacity(): number;
13
+ /** Ensure capacity at least `n`. Avoids repeated reallocation when pushing. */
14
+ reserve(n: number): void;
15
+ /** Shrink backing array to fit current size. */
16
+ shrinkToFit(): void;
17
+ private ensureCapacity;
18
+ at(index: number): T;
19
+ set(index: number, value: T): void;
20
+ push(value: T): number;
21
+ pop(): T | undefined;
22
+ front(): T;
23
+ back(): T;
24
+ clear(): void;
25
+ [Symbol.iterator](): Iterator<T>;
26
+ toArray(): T[];
27
+ }
28
+ //# sourceMappingURL=Vector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vector.d.ts","sourceRoot":"","sources":["../../src/collections/Vector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM;IAelC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,+CAA+C;IAC/C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,+EAA+E;IAC/E,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOxB,gDAAgD;IAChD,WAAW,IAAI,IAAI;IAOnB,OAAO,CAAC,cAAc;IAQtB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC;IAOpB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAOlC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAMtB,GAAG,IAAI,CAAC,GAAG,SAAS;IAOpB,KAAK,IAAI,CAAC;IAKV,IAAI,IAAI,CAAC;IAKT,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAYhC,OAAO,IAAI,CAAC,EAAE;CAKf"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * STL-like dynamic array. Amortized O(1) push/pop, O(1) index access.
3
+ * Uses a single backing array with optional capacity reserve to reduce reallocations.
4
+ */
5
+ export class Vector {
6
+ constructor(initial) {
7
+ if (initial === undefined) {
8
+ this._data = [];
9
+ this._length = 0;
10
+ return;
11
+ }
12
+ if (typeof initial === 'number') {
13
+ this._data = new Array(Math.max(0, initial));
14
+ this._length = initial;
15
+ return;
16
+ }
17
+ this._data = [...initial];
18
+ this._length = this._data.length;
19
+ }
20
+ get size() {
21
+ return this._length;
22
+ }
23
+ get empty() {
24
+ return this._length === 0;
25
+ }
26
+ /** Current backing array length (capacity). */
27
+ get capacity() {
28
+ return this._data.length;
29
+ }
30
+ /** Ensure capacity at least `n`. Avoids repeated reallocation when pushing. */
31
+ reserve(n) {
32
+ if (n <= this._data.length)
33
+ return;
34
+ const next = new Array(n);
35
+ for (let i = 0; i < this._length; i++)
36
+ next[i] = this._data[i];
37
+ this._data = next;
38
+ }
39
+ /** Shrink backing array to fit current size. */
40
+ shrinkToFit() {
41
+ if (this._length === this._data.length)
42
+ return;
43
+ const next = new Array(this._length);
44
+ for (let i = 0; i < this._length; i++)
45
+ next[i] = this._data[i];
46
+ this._data = next;
47
+ }
48
+ ensureCapacity() {
49
+ if (this._length < this._data.length)
50
+ return;
51
+ const cap = this._data.length === 0 ? 4 : this._data.length * 2;
52
+ const next = new Array(cap);
53
+ for (let i = 0; i < this._length; i++)
54
+ next[i] = this._data[i];
55
+ this._data = next;
56
+ }
57
+ at(index) {
58
+ if (index < 0 || index >= this._length) {
59
+ throw new RangeError(`Vector index ${index} out of range (size ${this._length})`);
60
+ }
61
+ return this._data[index];
62
+ }
63
+ set(index, value) {
64
+ if (index < 0 || index >= this._length) {
65
+ throw new RangeError(`Vector index ${index} out of range (size ${this._length})`);
66
+ }
67
+ this._data[index] = value;
68
+ }
69
+ push(value) {
70
+ this.ensureCapacity();
71
+ this._data[this._length++] = value;
72
+ return this._length;
73
+ }
74
+ pop() {
75
+ if (this._length === 0)
76
+ return undefined;
77
+ const v = this._data[--this._length];
78
+ this._data[this._length] = undefined;
79
+ return v;
80
+ }
81
+ front() {
82
+ if (this._length === 0)
83
+ throw new RangeError('Vector is empty');
84
+ return this._data[0];
85
+ }
86
+ back() {
87
+ if (this._length === 0)
88
+ throw new RangeError('Vector is empty');
89
+ return this._data[this._length - 1];
90
+ }
91
+ clear() {
92
+ this._length = 0;
93
+ }
94
+ [Symbol.iterator]() {
95
+ let i = 0;
96
+ const data = this._data;
97
+ const len = this._length;
98
+ return {
99
+ next() {
100
+ if (i >= len)
101
+ return { done: true, value: undefined };
102
+ return { done: false, value: data[i++] };
103
+ },
104
+ };
105
+ }
106
+ toArray() {
107
+ const out = [];
108
+ for (let i = 0; i < this._length; i++)
109
+ out.push(this._data[i]);
110
+ return out;
111
+ }
112
+ }
113
+ //# sourceMappingURL=Vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vector.js","sourceRoot":"","sources":["../../src/collections/Vector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { Vector } from './Vector.js';
2
+ export { Stack } from './Stack.js';
3
+ export { Queue } from './Queue.js';
4
+ export { List, ListNode } from './List.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { Vector } from './Vector.js';
2
+ export { Stack } from './Stack.js';
3
+ export { Queue } from './Queue.js';
4
+ export { List, ListNode } from './List.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TypeScript SDK — use like C++ STL.
3
+ * Clone the repo and import from this package.
4
+ *
5
+ * @example
6
+ * import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
7
+ */
8
+ export { Vector, Stack, Queue, List, ListNode } from './collections/index.js';
9
+ export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
10
+ export { clamp, range, noop, identity, swap } from './utils/index.js';
11
+ export type { Comparator, Predicate, UnaryFn, Reducer, IterableLike } from './types/index.js';
12
+ export { toArray } from './types/index.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * TypeScript SDK — use like C++ STL.
3
+ * Clone the repo and import from this package.
4
+ *
5
+ * @example
6
+ * import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
7
+ */
8
+ export { Vector, Stack, Queue, List, ListNode } from './collections/index.js';
9
+ export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
10
+ export { clamp, range, noop, identity, swap } from './utils/index.js';
11
+ export { toArray } from './types/index.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared types for the SDK. STL-like comparator and predicate conventions.
3
+ */
4
+ /** Compare two values: negative if a < b, zero if a === b, positive if a > b. */
5
+ export type Comparator<T> = (a: T, b: T) => number;
6
+ /** Predicate for find, filter, partition, etc. */
7
+ export type Predicate<T> = (x: T) => boolean;
8
+ /** Unary transform (map). */
9
+ export type UnaryFn<T, U> = (x: T) => U;
10
+ /** Reducer (accumulator, value) => new accumulator. */
11
+ export type Reducer<T, U> = (acc: U, x: T) => U;
12
+ /** Any value that can be iterated (array, Vector, Set, Map keys, etc.). */
13
+ export type IterableLike<T> = Iterable<T> | ArrayLike<T>;
14
+ /** Convert IterableLike to array (single copy). Used internally by algorithms. */
15
+ export declare function toArray<T>(source: IterableLike<T>): T[];
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iFAAiF;AACjF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEnD,kDAAkD;AAClD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE7C,6BAA6B;AAC7B,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAExC,uDAAuD;AACvD,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEhD,2EAA2E;AAC3E,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEzD,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAMvD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared types for the SDK. STL-like comparator and predicate conventions.
3
+ */
4
+ /** Convert IterableLike to array (single copy). Used internally by algorithms. */
5
+ export function toArray(source) {
6
+ if (Array.isArray(source))
7
+ return source;
8
+ if (typeof source[Symbol.iterator] === 'function') {
9
+ return [...source];
10
+ }
11
+ return Array.from(source);
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAI,MAAuB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,OAAQ,MAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,OAAO,CAAC,GAAI,MAAsB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Common utilities exposed by the SDK.
3
+ */
4
+ export declare function clamp(value: number, min: number, max: number): number;
5
+ export declare function range(start: number, end: number, step?: number): number[];
6
+ export declare function noop(): void;
7
+ export declare function identity<T>(x: T): T;
8
+ /** Swap two elements in an array. O(1). */
9
+ export declare function swap<T>(arr: T[], i: number, j: number): void;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,MAAM,EAAE,CAMpE;AAED,wBAAgB,IAAI,IAAI,IAAI,CAAG;AAE/B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAEnC;AAED,2CAA2C;AAC3C,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAK5D"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Common utilities exposed by the SDK.
3
+ */
4
+ export function clamp(value, min, max) {
5
+ return Math.min(Math.max(value, min), max);
6
+ }
7
+ export function range(start, end, step = 1) {
8
+ const out = [];
9
+ for (let i = start; step > 0 ? i < end : i > end; i += step) {
10
+ out.push(i);
11
+ }
12
+ return out;
13
+ }
14
+ export function noop() { }
15
+ export function identity(x) {
16
+ return x;
17
+ }
18
+ /** Swap two elements in an array. O(1). */
19
+ export function swap(arr, i, j) {
20
+ if (i < 0 || i >= arr.length || j < 0 || j >= arr.length) {
21
+ throw new RangeError('swap: index out of range');
22
+ }
23
+ [arr[i], arr[j]] = [arr[j], arr[i]];
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,IAAI,GAAG,CAAC;IACxD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,IAAI,KAAU,CAAC;AAE/B,MAAM,UAAU,QAAQ,CAAI,CAAI;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,IAAI,CAAI,GAAQ,EAAE,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IACD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "typescript-dsa-stl",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript_DSA — STL-like data structures and algorithms. Vector, Stack, Queue, List, sort, binarySearch, and more.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./collections": {
17
+ "types": "./dist/collections/index.d.ts",
18
+ "import": "./dist/collections/index.js",
19
+ "default": "./dist/collections/index.js"
20
+ },
21
+ "./algorithms": {
22
+ "types": "./dist/algorithms/index.d.ts",
23
+ "import": "./dist/algorithms/index.js",
24
+ "default": "./dist/algorithms/index.js"
25
+ },
26
+ "./utils": {
27
+ "types": "./dist/utils/index.d.ts",
28
+ "import": "./dist/utils/index.js",
29
+ "default": "./dist/utils/index.js"
30
+ },
31
+ "./types": {
32
+ "types": "./dist/types/index.d.ts",
33
+ "import": "./dist/types/index.js",
34
+ "default": "./dist/types/index.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "scripts": {
43
+ "build": "tsc",
44
+ "prepublishOnly": "npm run build"
45
+ },
46
+ "keywords": [
47
+ "typescript-dsa-stl",
48
+ "TypeScript_DSA",
49
+ "dsa",
50
+ "data-structures",
51
+ "algorithms",
52
+ "typescript",
53
+ "sdk",
54
+ "stl",
55
+ "vector",
56
+ "stack",
57
+ "queue",
58
+ "list",
59
+ "collections"
60
+ ],
61
+ "author": "",
62
+ "license": "MIT",
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "https://github.com/SajidAbdullah729/TypeScript_DSA.git"
66
+ },
67
+ "homepage": "https://github.com/SajidAbdullah729/TypeScript_DSA#readme",
68
+ "bugs": {
69
+ "url": "https://github.com/SajidAbdullah729/TypeScript_DSA/issues"
70
+ },
71
+ "engines": {
72
+ "node": ">=18"
73
+ },
74
+ "devDependencies": {
75
+ "typescript": "^5.3.0"
76
+ }
77
+ }