@pawells/typescript-common 1.1.0 → 1.1.3
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.
- package/README.md +1 -118
- package/build/array/array-chunk.d.ts +10 -4
- package/build/array/array-chunk.d.ts.map +1 -1
- package/build/array/array-chunk.js +10 -4
- package/build/array/array-chunk.js.map +1 -1
- package/build/array/array-contains.d.ts +11 -3
- package/build/array/array-contains.d.ts.map +1 -1
- package/build/array/array-contains.js +11 -3
- package/build/array/array-contains.js.map +1 -1
- package/build/array/array-group-by.d.ts +14 -5
- package/build/array/array-group-by.d.ts.map +1 -1
- package/build/array/array-group-by.js +14 -5
- package/build/array/array-group-by.js.map +1 -1
- package/build/array/array-shuffle.d.ts +12 -3
- package/build/array/array-shuffle.d.ts.map +1 -1
- package/build/array/array-shuffle.js +12 -3
- package/build/array/array-shuffle.js.map +1 -1
- package/build/array/unique.d.ts +13 -3
- package/build/array/unique.d.ts.map +1 -1
- package/build/array/unique.js +13 -3
- package/build/array/unique.js.map +1 -1
- package/build/asserts/errors.d.ts +91 -7
- package/build/asserts/errors.d.ts.map +1 -1
- package/build/asserts/errors.js +91 -7
- package/build/asserts/errors.js.map +1 -1
- package/build/asserts/generic.d.ts +8 -4
- package/build/asserts/generic.d.ts.map +1 -1
- package/build/asserts/generic.js +8 -4
- package/build/asserts/generic.js.map +1 -1
- package/build/enum/enum-entries.d.ts +8 -3
- package/build/enum/enum-entries.d.ts.map +1 -1
- package/build/enum/enum-entries.js +8 -3
- package/build/enum/enum-entries.js.map +1 -1
- package/build/enum/enum-key-by-value.d.ts +10 -5
- package/build/enum/enum-key-by-value.d.ts.map +1 -1
- package/build/enum/enum-key-by-value.js +10 -5
- package/build/enum/enum-key-by-value.js.map +1 -1
- package/build/enum/enum-keys.d.ts +12 -3
- package/build/enum/enum-keys.d.ts.map +1 -1
- package/build/enum/enum-keys.js +12 -3
- package/build/enum/enum-keys.js.map +1 -1
- package/build/enum/enum-safe-value.d.ts +11 -6
- package/build/enum/enum-safe-value.d.ts.map +1 -1
- package/build/enum/enum-safe-value.js +11 -6
- package/build/enum/enum-safe-value.js.map +1 -1
- package/build/enum/validate-enum-value.d.ts +10 -5
- package/build/enum/validate-enum-value.d.ts.map +1 -1
- package/build/enum/validate-enum-value.js +10 -5
- package/build/enum/validate-enum-value.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/number/assert.d.ts +14 -14
- package/build/number/assert.d.ts.map +1 -1
- package/build/object/clone.d.ts +17 -6
- package/build/object/clone.d.ts.map +1 -1
- package/build/object/clone.js +17 -6
- package/build/object/clone.js.map +1 -1
- package/build/object/filter-cached.d.ts +15 -3
- package/build/object/filter-cached.d.ts.map +1 -1
- package/build/object/filter-cached.js +15 -3
- package/build/object/filter-cached.js.map +1 -1
- package/build/object/has-circular-reference.d.ts +12 -3
- package/build/object/has-circular-reference.d.ts.map +1 -1
- package/build/object/has-circular-reference.js +12 -3
- package/build/object/has-circular-reference.js.map +1 -1
- package/build/object/key-value-pairs.d.ts +11 -3
- package/build/object/key-value-pairs.d.ts.map +1 -1
- package/build/object/key-value-pairs.js +11 -3
- package/build/object/key-value-pairs.js.map +1 -1
- package/build/object/map-cached.d.ts +14 -3
- package/build/object/map-cached.d.ts.map +1 -1
- package/build/object/map-cached.js +14 -3
- package/build/object/map-cached.js.map +1 -1
- package/build/object/merge.d.ts +18 -7
- package/build/object/merge.d.ts.map +1 -1
- package/build/object/merge.js +18 -7
- package/build/object/merge.js.map +1 -1
- package/build/object/omit.d.ts +13 -4
- package/build/object/omit.d.ts.map +1 -1
- package/build/object/omit.js +13 -4
- package/build/object/omit.js.map +1 -1
- package/build/string/formatting.d.ts +10 -3
- package/build/string/formatting.d.ts.map +1 -1
- package/build/string/formatting.js +10 -3
- package/build/string/formatting.js.map +1 -1
- package/package.json +9 -5
- package/build/array/array.test.d.ts +0 -2
- package/build/array/array.test.d.ts.map +0 -1
- package/build/array/array.test.js +0 -347
- package/build/array/array.test.js.map +0 -1
- package/build/asserts/object.d.ts +0 -138
- package/build/asserts/object.d.ts.map +0 -1
- package/build/asserts/object.js +0 -204
- package/build/asserts/object.js.map +0 -1
- package/build/asserts/string.d.ts +0 -100
- package/build/asserts/string.d.ts.map +0 -1
- package/build/asserts/string.js +0 -185
- package/build/asserts/string.js.map +0 -1
- package/build/enum/enum.test.d.ts +0 -2
- package/build/enum/enum.test.d.ts.map +0 -1
- package/build/enum/enum.test.js +0 -122
- package/build/enum/enum.test.js.map +0 -1
- package/build/function/function.test.d.ts +0 -2
- package/build/function/function.test.d.ts.map +0 -1
- package/build/function/function.test.js +0 -158
- package/build/function/function.test.js.map +0 -1
- package/build/object/object.test.d.ts +0 -2
- package/build/object/object.test.d.ts.map +0 -1
- package/build/object/object.test.js +0 -432
- package/build/object/object.test.js.map +0 -1
- package/build/string/string.test.d.ts +0 -2
- package/build/string/string.test.d.ts.map +0 -1
- package/build/string/string.test.js +0 -321
- package/build/string/string.test.js.map +0 -1
- package/build/time/time.test.d.ts +0 -2
- package/build/time/time.test.d.ts.map +0 -1
- package/build/time/time.test.js +0 -211
- package/build/time/time.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pawells/typescript-common",
|
|
3
3
|
"displayName": "TypeScript Common Utilities",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.3",
|
|
5
5
|
"description": "Shared TypeScript utility library — array, object, string, time, and enum helpers. ESM-only, no runtime dependencies.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./build/index.js",
|
|
8
8
|
"scripts": {
|
|
9
|
-
"build": "tsc",
|
|
9
|
+
"build": "tsc --project tsconfig.build.json",
|
|
10
10
|
"start": "node build/index.js",
|
|
11
11
|
"dev": "tsc && node build/index.js",
|
|
12
12
|
"watch": "tsc --watch",
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"prepublishOnly": "npm run build",
|
|
20
20
|
"prepare": "husky"
|
|
21
21
|
},
|
|
22
|
-
"dependencies": {},
|
|
23
22
|
"devDependencies": {
|
|
24
23
|
"@eslint/js": "^10.0.1",
|
|
25
24
|
"@stylistic/eslint-plugin": "^5.9.0",
|
|
@@ -63,8 +62,13 @@
|
|
|
63
62
|
"engines": {
|
|
64
63
|
"node": ">=24.0.0"
|
|
65
64
|
},
|
|
65
|
+
"packageManager": "yarn@4.12.0",
|
|
66
66
|
"files": [
|
|
67
|
-
"build
|
|
67
|
+
"build/**/*.js",
|
|
68
|
+
"build/**/*.d.ts",
|
|
69
|
+
"build/**/*.js.map",
|
|
70
|
+
"build/**/*.d.ts.map",
|
|
71
|
+
"!build/**/*.test.*",
|
|
68
72
|
"README.md",
|
|
69
73
|
"LICENSE",
|
|
70
74
|
".env.example"
|
|
@@ -72,4 +76,4 @@
|
|
|
72
76
|
"publishConfig": {
|
|
73
77
|
"access": "public"
|
|
74
78
|
}
|
|
75
|
-
}
|
|
79
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array.test.d.ts","sourceRoot":"","sources":["../../src/array/array.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { ArrayChunk } from './array-chunk.js';
|
|
3
|
-
import { ArrayContains } from './array-contains.js';
|
|
4
|
-
import { ArrayFilter } from './array-filter.js';
|
|
5
|
-
import { ArrayGroupBy } from './array-group-by.js';
|
|
6
|
-
import { ArrayIntersection } from './array-intersection.js';
|
|
7
|
-
import { ArrayShuffle } from './array-shuffle.js';
|
|
8
|
-
import { Unique } from './unique.js';
|
|
9
|
-
import { ArrayDifference } from './array-difference.js';
|
|
10
|
-
import { ArrayFlatten } from './array-flatten.js';
|
|
11
|
-
import { ArrayCompact } from './array-compact.js';
|
|
12
|
-
import { ArrayPartition } from './array-partition.js';
|
|
13
|
-
import { ArrayZip } from './array-zip.js';
|
|
14
|
-
import { ArrayRange } from './array-range.js';
|
|
15
|
-
import { ArraySortBy } from './array-sort-by.js';
|
|
16
|
-
import { ArrayCountBy } from './array-count-by.js';
|
|
17
|
-
import { ArraySample } from './array-sample.js';
|
|
18
|
-
describe('ArrayChunk', () => {
|
|
19
|
-
it('splits an array into equal-size chunks', () => {
|
|
20
|
-
expect(ArrayChunk([1, 2, 3, 4], 2)).toEqual([[1, 2], [3, 4]]);
|
|
21
|
-
});
|
|
22
|
-
it('handles a remainder chunk', () => {
|
|
23
|
-
expect(ArrayChunk([1, 2, 3, 4, 5], 2)).toEqual([[1, 2], [3, 4], [5]]);
|
|
24
|
-
});
|
|
25
|
-
it('returns the whole array in one chunk when size >= length', () => {
|
|
26
|
-
expect(ArrayChunk([1, 2, 3], 10)).toEqual([[1, 2, 3]]);
|
|
27
|
-
});
|
|
28
|
-
it('returns empty array for empty input', () => {
|
|
29
|
-
expect(ArrayChunk([], 2)).toEqual([]);
|
|
30
|
-
});
|
|
31
|
-
it('returns empty array for size <= 0', () => {
|
|
32
|
-
expect(ArrayChunk([1, 2, 3], 0)).toEqual([]);
|
|
33
|
-
expect(ArrayChunk([1, 2, 3], -1)).toEqual([]);
|
|
34
|
-
});
|
|
35
|
-
it('returns empty array for null/undefined input', () => {
|
|
36
|
-
expect(ArrayChunk(null, 2)).toEqual([]);
|
|
37
|
-
});
|
|
38
|
-
it('handles chunk size of 1', () => {
|
|
39
|
-
expect(ArrayChunk([1, 2, 3], 1)).toEqual([[1], [2], [3]]);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe('ArrayContains', () => {
|
|
43
|
-
it('returns true when an element passes the predicate', () => {
|
|
44
|
-
expect(ArrayContains([1, 2, 3], (x) => x > 2)).toBe(true);
|
|
45
|
-
});
|
|
46
|
-
it('returns false when no element passes the predicate', () => {
|
|
47
|
-
expect(ArrayContains([1, 2, 3], (x) => x > 10)).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it('returns false for an empty array', () => {
|
|
50
|
-
expect(ArrayContains([], () => true)).toBe(false);
|
|
51
|
-
});
|
|
52
|
-
it('returns false for null/undefined input', () => {
|
|
53
|
-
expect(ArrayContains(null, () => true)).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
it('works with object arrays', () => {
|
|
56
|
-
const users = [{ name: 'Alice' }, { name: 'Bob' }];
|
|
57
|
-
expect(ArrayContains(users, (u) => u.name === 'Bob')).toBe(true);
|
|
58
|
-
expect(ArrayContains(users, (u) => u.name === 'Charlie')).toBe(false);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('ArrayFilter', () => {
|
|
62
|
-
it('filters using a predicate function', () => {
|
|
63
|
-
expect(ArrayFilter([1, 2, 3, 4], (n) => n > 2)).toEqual([3, 4]);
|
|
64
|
-
});
|
|
65
|
-
it('filters using object criteria', () => {
|
|
66
|
-
const users = [
|
|
67
|
-
{ name: 'Alice', age: 25 },
|
|
68
|
-
{ name: 'Bob', age: 30 },
|
|
69
|
-
];
|
|
70
|
-
expect(ArrayFilter(users, { age: 30 })).toEqual([{ name: 'Bob', age: 30 }]);
|
|
71
|
-
});
|
|
72
|
-
it('filters using nested property criteria', () => {
|
|
73
|
-
const data = [
|
|
74
|
-
{ user: { name: 'Alice', active: true } },
|
|
75
|
-
{ user: { name: 'Bob', active: false } },
|
|
76
|
-
];
|
|
77
|
-
expect(ArrayFilter(data, { 'user.name': 'Alice' })).toEqual([data[0]]);
|
|
78
|
-
});
|
|
79
|
-
it('filters using array property criteria', () => {
|
|
80
|
-
const posts = [
|
|
81
|
-
{ tags: ['js', 'web'] },
|
|
82
|
-
{ tags: ['ts', 'node'] },
|
|
83
|
-
];
|
|
84
|
-
expect(ArrayFilter(posts, { tags: 'js' })).toEqual([posts[0]]);
|
|
85
|
-
});
|
|
86
|
-
it('returns empty array when nothing matches', () => {
|
|
87
|
-
expect(ArrayFilter([1, 2, 3], (n) => n > 100)).toEqual([]);
|
|
88
|
-
});
|
|
89
|
-
it('returns all elements when everything matches', () => {
|
|
90
|
-
expect(ArrayFilter([1, 2, 3], (n) => n > 0)).toEqual([1, 2, 3]);
|
|
91
|
-
});
|
|
92
|
-
it('handles multiple criteria keys', () => {
|
|
93
|
-
const users = [
|
|
94
|
-
{ name: 'Alice', role: 'admin' },
|
|
95
|
-
{ name: 'Bob', role: 'user' },
|
|
96
|
-
{ name: 'Alice', role: 'user' },
|
|
97
|
-
];
|
|
98
|
-
expect(ArrayFilter(users, { name: 'Alice', role: 'admin' })).toEqual([users[0]]);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('ArrayGroupBy', () => {
|
|
102
|
-
it('groups by a string key', () => {
|
|
103
|
-
const items = [
|
|
104
|
-
{ category: 'fruit', name: 'apple' },
|
|
105
|
-
{ category: 'veggie', name: 'carrot' },
|
|
106
|
-
{ category: 'fruit', name: 'banana' },
|
|
107
|
-
];
|
|
108
|
-
const grouped = ArrayGroupBy(items, (item) => item.category);
|
|
109
|
-
expect(grouped['fruit']).toHaveLength(2);
|
|
110
|
-
expect(grouped['veggie']).toHaveLength(1);
|
|
111
|
-
});
|
|
112
|
-
it('returns an empty object for an empty array', () => {
|
|
113
|
-
expect(ArrayGroupBy([], (x) => x)).toEqual({});
|
|
114
|
-
});
|
|
115
|
-
it('returns empty object for null input', () => {
|
|
116
|
-
expect(ArrayGroupBy(null, (x) => x)).toEqual({});
|
|
117
|
-
});
|
|
118
|
-
it('groups numbers', () => {
|
|
119
|
-
const result = ArrayGroupBy([1, 2, 3, 4, 5, 6], (n) => (n % 2 === 0 ? 'even' : 'odd'));
|
|
120
|
-
expect(result['even']).toEqual([2, 4, 6]);
|
|
121
|
-
expect(result['odd']).toEqual([1, 3, 5]);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('ArrayIntersection', () => {
|
|
125
|
-
it('returns elements in both arrays', () => {
|
|
126
|
-
expect(ArrayIntersection([1, 2, 3], [2, 3, 4])).toEqual([2, 3]);
|
|
127
|
-
});
|
|
128
|
-
it('returns empty when there is no overlap', () => {
|
|
129
|
-
expect(ArrayIntersection([1, 2], [3, 4])).toEqual([]);
|
|
130
|
-
});
|
|
131
|
-
it('handles empty arrays', () => {
|
|
132
|
-
expect(ArrayIntersection([], [1, 2])).toEqual([]);
|
|
133
|
-
expect(ArrayIntersection([1, 2], [])).toEqual([]);
|
|
134
|
-
});
|
|
135
|
-
it('handles null inputs', () => {
|
|
136
|
-
expect(ArrayIntersection(null, [1, 2])).toEqual([]);
|
|
137
|
-
expect(ArrayIntersection([1, 2], null)).toEqual([]);
|
|
138
|
-
});
|
|
139
|
-
it('uses a custom comparator', () => {
|
|
140
|
-
const a = [{ id: 1 }, { id: 2 }];
|
|
141
|
-
const b = [{ id: 2 }, { id: 3 }];
|
|
142
|
-
const result = ArrayIntersection(a, b, (x, y) => x.id === y.id);
|
|
143
|
-
expect(result).toEqual([{ id: 2 }]);
|
|
144
|
-
});
|
|
145
|
-
it('handles duplicates using set deduplication', () => {
|
|
146
|
-
expect(ArrayIntersection([1, 1, 2], [1, 2, 2])).toEqual([1, 1, 2]);
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('ArrayShuffle', () => {
|
|
150
|
-
it('returns a new array with the same elements', () => {
|
|
151
|
-
const original = [1, 2, 3, 4, 5];
|
|
152
|
-
const shuffled = ArrayShuffle(original);
|
|
153
|
-
expect(shuffled).toHaveLength(original.length);
|
|
154
|
-
expect(shuffled.sort()).toEqual([...original].sort());
|
|
155
|
-
});
|
|
156
|
-
it('does not mutate the original array', () => {
|
|
157
|
-
const original = [1, 2, 3];
|
|
158
|
-
const copy = [...original];
|
|
159
|
-
ArrayShuffle(original);
|
|
160
|
-
expect(original).toEqual(copy);
|
|
161
|
-
});
|
|
162
|
-
it('returns empty array for null input', () => {
|
|
163
|
-
expect(ArrayShuffle(null)).toEqual([]);
|
|
164
|
-
});
|
|
165
|
-
it('handles single-element arrays', () => {
|
|
166
|
-
expect(ArrayShuffle([42])).toEqual([42]);
|
|
167
|
-
});
|
|
168
|
-
it('handles empty arrays', () => {
|
|
169
|
-
expect(ArrayShuffle([])).toEqual([]);
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
describe('Unique', () => {
|
|
173
|
-
it('removes duplicate primitives', () => {
|
|
174
|
-
expect(Unique([1, 2, 2, 3, 3, 3])).toEqual([1, 2, 3]);
|
|
175
|
-
});
|
|
176
|
-
it('removes duplicate strings', () => {
|
|
177
|
-
expect(Unique(['a', 'b', 'a', 'c'])).toEqual(['a', 'b', 'c']);
|
|
178
|
-
});
|
|
179
|
-
it('returns the same array when no duplicates', () => {
|
|
180
|
-
expect(Unique([1, 2, 3])).toEqual([1, 2, 3]);
|
|
181
|
-
});
|
|
182
|
-
it('returns empty array for empty input', () => {
|
|
183
|
-
expect(Unique([])).toEqual([]);
|
|
184
|
-
});
|
|
185
|
-
it('returns empty array for null input', () => {
|
|
186
|
-
expect(Unique(null)).toEqual([]);
|
|
187
|
-
});
|
|
188
|
-
it('uses reference equality for objects', () => {
|
|
189
|
-
const obj = { a: 1 };
|
|
190
|
-
expect(Unique([obj, obj])).toEqual([obj]);
|
|
191
|
-
expect(Unique([{ a: 1 }, { a: 1 }])).toHaveLength(2);
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
describe('ArrayDifference', () => {
|
|
195
|
-
it('returns elements in first array not in second', () => {
|
|
196
|
-
expect(ArrayDifference([1, 2, 3, 4], [2, 4])).toEqual([1, 3]);
|
|
197
|
-
});
|
|
198
|
-
it('returns a copy of array1 when array2 is empty', () => {
|
|
199
|
-
expect(ArrayDifference([1, 2, 3], [])).toEqual([1, 2, 3]);
|
|
200
|
-
});
|
|
201
|
-
it('returns empty when all elements are excluded', () => {
|
|
202
|
-
expect(ArrayDifference([1, 2], [1, 2, 3])).toEqual([]);
|
|
203
|
-
});
|
|
204
|
-
it('uses a custom comparator', () => {
|
|
205
|
-
const a = [{ id: 1 }, { id: 2 }];
|
|
206
|
-
const b = [{ id: 2 }];
|
|
207
|
-
expect(ArrayDifference(a, b, (x, y) => x.id === y.id)).toEqual([{ id: 1 }]);
|
|
208
|
-
});
|
|
209
|
-
it('returns empty for null input', () => {
|
|
210
|
-
expect(ArrayDifference(null, [1])).toEqual([]);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
describe('ArrayFlatten', () => {
|
|
214
|
-
it('flattens one level by default', () => {
|
|
215
|
-
expect(ArrayFlatten([1, [2, [3]]])).toEqual([1, 2, 3]);
|
|
216
|
-
});
|
|
217
|
-
it('flattens to a specified depth', () => {
|
|
218
|
-
expect(ArrayFlatten([1, [2, [3, [4]]]], 1)).toEqual([1, 2, [3, [4]]]);
|
|
219
|
-
});
|
|
220
|
-
it('handles already-flat arrays', () => {
|
|
221
|
-
expect(ArrayFlatten([1, 2, 3])).toEqual([1, 2, 3]);
|
|
222
|
-
});
|
|
223
|
-
it('returns empty for null input', () => {
|
|
224
|
-
expect(ArrayFlatten(null)).toEqual([]);
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
describe('ArrayCompact', () => {
|
|
228
|
-
it('removes null and undefined', () => {
|
|
229
|
-
expect(ArrayCompact([1, null, 2, undefined, 3])).toEqual([1, 2, 3]);
|
|
230
|
-
});
|
|
231
|
-
it('keeps falsy-but-defined values like 0 and empty string', () => {
|
|
232
|
-
expect(ArrayCompact([0, '', false, null, undefined])).toEqual([0, '', false]);
|
|
233
|
-
});
|
|
234
|
-
it('returns empty for null input', () => {
|
|
235
|
-
expect(ArrayCompact(null)).toEqual([]);
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
describe('ArrayPartition', () => {
|
|
239
|
-
it('splits into matches and non-matches', () => {
|
|
240
|
-
const [evens, odds] = ArrayPartition([1, 2, 3, 4, 5], (n) => n % 2 === 0);
|
|
241
|
-
expect(evens).toEqual([2, 4]);
|
|
242
|
-
expect(odds).toEqual([1, 3, 5]);
|
|
243
|
-
});
|
|
244
|
-
it('handles all matching', () => {
|
|
245
|
-
const [t, f] = ArrayPartition([2, 4], (n) => n % 2 === 0);
|
|
246
|
-
expect(t).toEqual([2, 4]);
|
|
247
|
-
expect(f).toEqual([]);
|
|
248
|
-
});
|
|
249
|
-
it('handles no matches', () => {
|
|
250
|
-
const [t, f] = ArrayPartition([1, 3], (n) => n % 2 === 0);
|
|
251
|
-
expect(t).toEqual([]);
|
|
252
|
-
expect(f).toEqual([1, 3]);
|
|
253
|
-
});
|
|
254
|
-
it('returns [[], []] for null input', () => {
|
|
255
|
-
expect(ArrayPartition(null, () => true)).toEqual([[], []]);
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
describe('ArrayZip', () => {
|
|
259
|
-
it('zips two arrays', () => {
|
|
260
|
-
expect(ArrayZip([1, 2, 3], ['a', 'b', 'c'])).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
|
|
261
|
-
});
|
|
262
|
-
it('stops at the shortest array', () => {
|
|
263
|
-
expect(ArrayZip([1, 2, 3], ['a', 'b'])).toEqual([[1, 'a'], [2, 'b']]);
|
|
264
|
-
});
|
|
265
|
-
it('zips three arrays', () => {
|
|
266
|
-
expect(ArrayZip([1, 2], ['a', 'b'], [true, false])).toEqual([[1, 'a', true], [2, 'b', false]]);
|
|
267
|
-
});
|
|
268
|
-
it('returns empty for no arguments', () => {
|
|
269
|
-
expect(ArrayZip()).toEqual([]);
|
|
270
|
-
});
|
|
271
|
-
});
|
|
272
|
-
describe('ArrayRange', () => {
|
|
273
|
-
it('generates ascending range', () => {
|
|
274
|
-
expect(ArrayRange(0, 5)).toEqual([0, 1, 2, 3, 4]);
|
|
275
|
-
});
|
|
276
|
-
it('generates range with step', () => {
|
|
277
|
-
expect(ArrayRange(0, 10, 2)).toEqual([0, 2, 4, 6, 8]);
|
|
278
|
-
});
|
|
279
|
-
it('generates descending range', () => {
|
|
280
|
-
expect(ArrayRange(5, 0, -1)).toEqual([5, 4, 3, 2, 1]);
|
|
281
|
-
});
|
|
282
|
-
it('returns empty for step of 0', () => {
|
|
283
|
-
expect(ArrayRange(0, 5, 0)).toEqual([]);
|
|
284
|
-
});
|
|
285
|
-
it('returns empty when start >= end for positive step', () => {
|
|
286
|
-
expect(ArrayRange(5, 5)).toEqual([]);
|
|
287
|
-
expect(ArrayRange(6, 5)).toEqual([]);
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
describe('ArraySortBy', () => {
|
|
291
|
-
it('sorts objects by a string key ascending', () => {
|
|
292
|
-
const result = ArraySortBy([{ name: 'Charlie' }, { name: 'Alice' }, { name: 'Bob' }], (u) => u.name);
|
|
293
|
-
expect(result.map((u) => u.name)).toEqual(['Alice', 'Bob', 'Charlie']);
|
|
294
|
-
});
|
|
295
|
-
it('sorts numbers descending', () => {
|
|
296
|
-
expect(ArraySortBy([3, 1, 4, 1, 5], (n) => n, 'desc')).toEqual([5, 4, 3, 1, 1]);
|
|
297
|
-
});
|
|
298
|
-
it('does not mutate the original', () => {
|
|
299
|
-
const original = [3, 1, 2];
|
|
300
|
-
const sorted = ArraySortBy(original, (n) => n);
|
|
301
|
-
expect(original).toEqual([3, 1, 2]);
|
|
302
|
-
expect(sorted).toEqual([1, 2, 3]);
|
|
303
|
-
});
|
|
304
|
-
it('returns empty for null input', () => {
|
|
305
|
-
expect(ArraySortBy(null, (_n) => 0)).toEqual([]);
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
describe('ArrayCountBy', () => {
|
|
309
|
-
it('counts by string key', () => {
|
|
310
|
-
const result = ArrayCountBy(['a', 'b', 'a', 'c', 'b', 'b'], (s) => s);
|
|
311
|
-
expect(result).toEqual({ a: 2, b: 3, c: 1 });
|
|
312
|
-
});
|
|
313
|
-
it('counts by computed key', () => {
|
|
314
|
-
const result = ArrayCountBy([1, 2, 3, 4, 5, 6], (n) => (n % 2 === 0 ? 'even' : 'odd'));
|
|
315
|
-
expect(result).toEqual({ even: 3, odd: 3 });
|
|
316
|
-
});
|
|
317
|
-
it('returns empty object for null input', () => {
|
|
318
|
-
expect(ArrayCountBy(null, (_n) => '')).toEqual({});
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
describe('ArraySample', () => {
|
|
322
|
-
it('returns a single element within the array', () => {
|
|
323
|
-
const arr = [1, 2, 3, 4, 5];
|
|
324
|
-
const result = ArraySample(arr);
|
|
325
|
-
expect(arr).toContain(result);
|
|
326
|
-
});
|
|
327
|
-
it('returns undefined for empty array', () => {
|
|
328
|
-
expect(ArraySample([])).toBeUndefined();
|
|
329
|
-
});
|
|
330
|
-
it('returns n elements', () => {
|
|
331
|
-
const arr = [1, 2, 3, 4, 5];
|
|
332
|
-
const result = ArraySample(arr, 3);
|
|
333
|
-
expect(result).toHaveLength(3);
|
|
334
|
-
result.forEach((v) => expect(arr).toContain(v));
|
|
335
|
-
});
|
|
336
|
-
it('returns no more than array length', () => {
|
|
337
|
-
expect(ArraySample([1, 2], 10)).toHaveLength(2);
|
|
338
|
-
});
|
|
339
|
-
it('returns no duplicates when sampling n', () => {
|
|
340
|
-
const result = ArraySample([1, 2, 3, 4, 5], 5);
|
|
341
|
-
expect(new Set(result).size).toBe(5);
|
|
342
|
-
});
|
|
343
|
-
it('returns empty array when n=0', () => {
|
|
344
|
-
expect(ArraySample([1, 2, 3], 0)).toEqual([]);
|
|
345
|
-
});
|
|
346
|
-
});
|
|
347
|
-
//# sourceMappingURL=array.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array.test.js","sourceRoot":"","sources":["../../src/array/array.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { IAssertException } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Error thrown when a value is not a valid object or fails an object assertion.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* throw new ObjectError('Value is not a valid object');
|
|
7
|
-
*/
|
|
8
|
-
export declare class ObjectError extends Error {
|
|
9
|
-
constructor(message?: string);
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Error thrown when an object is missing a required property or a property fails an assertion.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* throw new PropertyError('Object is missing required property');
|
|
16
|
-
*/
|
|
17
|
-
export declare class ObjectPropertyError extends Error {
|
|
18
|
-
constructor(message?: string);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Asserts that a value is a plain object (not null, not an array, not a function).
|
|
22
|
-
*
|
|
23
|
-
* This method validates that the provided value is an object type, excluding null,
|
|
24
|
-
* arrays, and functions which are technically objects in JavaScript but not plain
|
|
25
|
-
* objects. After this assertion, the value is typed as Record<string, unknown>
|
|
26
|
-
* for safe property access.
|
|
27
|
-
*
|
|
28
|
-
* @template TError - Custom error type to throw on failure
|
|
29
|
-
* @param value - The value to validate as an object
|
|
30
|
-
* @param exception - Optional exception configuration for custom error handling
|
|
31
|
-
* @throws {ObjectError} When value is not a plain object
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```typescript
|
|
35
|
-
* AssertObject({ name: "John" }); // ✓ Valid (plain object)
|
|
36
|
-
* AssertObject({}); // ✓ Valid (empty object)
|
|
37
|
-
* AssertObject(new Date()); // ✓ Valid (object instance)
|
|
38
|
-
* AssertObject([1, 2, 3]); // ✗ Throws ObjectError (array)
|
|
39
|
-
* AssertObject(null); // ✗ Throws ObjectError (null)
|
|
40
|
-
* AssertObject("string"); // ✗ Throws ObjectError (primitive)
|
|
41
|
-
* AssertObject(() => {}); // ✗ Throws ObjectError (function)
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function AssertObject(value: unknown, exception?: IAssertException): asserts value is Record<string, unknown>;
|
|
45
|
-
/**
|
|
46
|
-
* Asserts that an object has a specific property (inherited or own).
|
|
47
|
-
*
|
|
48
|
-
* This method validates that the specified property exists in the object,
|
|
49
|
-
* including properties from the prototype chain. Uses the 'in' operator
|
|
50
|
-
* for property detection. This is useful for checking if an object conforms
|
|
51
|
-
* to an expected interface or has required properties.
|
|
52
|
-
*
|
|
53
|
-
* @template T - The object type
|
|
54
|
-
* @template K - The property key type
|
|
55
|
-
* @template TError - Custom error type to throw on failure
|
|
56
|
-
* @param value - The object to check for the property
|
|
57
|
-
* @param property - The property key to check for
|
|
58
|
-
* @param exception - Optional exception configuration for custom error handling
|
|
59
|
-
* @throws {PropertyError} When object does not have the specified property
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```typescript
|
|
63
|
-
* const obj = { name: "John", age: 30 };
|
|
64
|
-
* AssertHasProperty(obj, "name"); // ✓ Valid (own property)
|
|
65
|
-
* AssertHasProperty(obj, "toString"); // ✓ Valid (inherited property)
|
|
66
|
-
* AssertHasProperty(obj, "invalid"); // ✗ Throws PropertyError
|
|
67
|
-
*
|
|
68
|
-
* // Type narrowing with property presence
|
|
69
|
-
* function processUser(obj: unknown) {
|
|
70
|
-
* AssertObject(obj);
|
|
71
|
-
* AssertHasProperty(obj, "name");
|
|
72
|
-
* // obj["name"] is now accessible safely
|
|
73
|
-
* }
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
export declare function AssertObjectHasProperty<T extends object, K extends PropertyKey>(value: T, property: K, exception?: IAssertException): void;
|
|
77
|
-
/**
|
|
78
|
-
* Asserts that an object has a specific own property (not inherited).
|
|
79
|
-
*
|
|
80
|
-
* This method validates that the specified property exists as an own property
|
|
81
|
-
* of the object, excluding properties from the prototype chain. Uses
|
|
82
|
-
* Object.prototype.hasOwnProperty.call() for reliable detection. This is useful
|
|
83
|
-
* when you need to ensure a property is directly defined on the object.
|
|
84
|
-
*
|
|
85
|
-
* @template T - The object type
|
|
86
|
-
* @template K - The property key type
|
|
87
|
-
* @template TError - Custom error type to throw on failure
|
|
88
|
-
* @param value - The object to check for the own property
|
|
89
|
-
* @param property - The property key to check for
|
|
90
|
-
* @param exception - Optional exception configuration for custom error handling
|
|
91
|
-
* @throws {PropertyError} When object does not have the specified own property
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* ```typescript
|
|
95
|
-
* const obj = { name: "John" };
|
|
96
|
-
* AssertHasOwnProperty(obj, "name"); // ✓ Valid (own property)
|
|
97
|
-
* AssertHasOwnProperty(obj, "toString"); // ✗ Throws (inherited property)
|
|
98
|
-
* AssertHasOwnProperty(obj, "invalid"); // ✗ Throws (doesn't exist)
|
|
99
|
-
*
|
|
100
|
-
* // Checking for data vs inherited methods
|
|
101
|
-
* function validateUserData(obj: object) {
|
|
102
|
-
* AssertHasOwnProperty(obj, "id"); // Must be own property
|
|
103
|
-
* AssertHasOwnProperty(obj, "name"); // Must be own property
|
|
104
|
-
* }
|
|
105
|
-
* ```
|
|
106
|
-
*/
|
|
107
|
-
export declare function AssertObjectHasOwnProperty<T extends object, K extends PropertyKey>(value: T, property: K, exception?: IAssertException): void;
|
|
108
|
-
/**
|
|
109
|
-
* Asserts that a specific property of an object is not null or undefined.
|
|
110
|
-
*
|
|
111
|
-
* This method validates that the specified property exists and has a non-nullish value.
|
|
112
|
-
* It combines property existence checking with null/undefined validation. Useful for
|
|
113
|
-
* validating that required object properties have been properly initialized.
|
|
114
|
-
*
|
|
115
|
-
* @template T - The object type
|
|
116
|
-
* @template K - The property key type (must be a key of T)
|
|
117
|
-
* @template TError - Custom error type to throw on failure
|
|
118
|
-
* @param value - The object to check
|
|
119
|
-
* @param property - The property key to validate for non-null value
|
|
120
|
-
* @param exception - Optional exception configuration for custom error handling
|
|
121
|
-
* @throws {PropertyError} When property is null, undefined, or doesn't exist
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* ```typescript
|
|
125
|
-
* const user = { id: 123, name: "John", email: null };
|
|
126
|
-
* AssertPropertyNotNull(user, "id"); // ✓ Valid (123 is not null/undefined)
|
|
127
|
-
* AssertPropertyNotNull(user, "name"); // ✓ Valid ("John" is not null/undefined)
|
|
128
|
-
* AssertPropertyNotNull(user, "email"); // ✗ Throws PropertyError (null)
|
|
129
|
-
*
|
|
130
|
-
* // Type narrowing for property values
|
|
131
|
-
* function processUser(user: { name?: string | null }) {
|
|
132
|
-
* AssertPropertyNotNull(user, "name");
|
|
133
|
-
* // user.name is now typed as string (null/undefined excluded)
|
|
134
|
-
* }
|
|
135
|
-
* ```
|
|
136
|
-
*/
|
|
137
|
-
export declare function AssertObjectPropertyNotNull<T extends object, K extends keyof T>(value: T, property: K, exception?: IAssertException): void;
|
|
138
|
-
//# sourceMappingURL=object.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/asserts/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM9C;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACzB,OAAO,CAAC,EAAE,MAAM;CAK5B;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBACjC,OAAO,CAAC,EAAE,MAAM;CAK5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,gBAAqB,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBvH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,gBAAqB,GAAG,IAAI,CAU9I;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,gBAAqB,GAAG,IAAI,CAUjJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,gBAAqB,GAAG,IAAI,CAW9I"}
|