ts-data-forge 4.1.0 → 5.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.
- package/dist/json/json.d.mts +9 -3
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +6 -0
- package/dist/json/json.mjs.map +1 -1
- package/package.json +13 -13
- package/src/array/impl/array-utils-creation.test.mts +187 -74
- package/src/array/impl/array-utils-element-access.test.mts +19 -3
- package/src/array/impl/array-utils-iterators.test.mts +44 -24
- package/src/array/impl/array-utils-modification.test.mts +36 -33
- package/src/array/impl/array-utils-reducing-value.test.mts +47 -16
- package/src/array/impl/array-utils-search.test.mts +42 -9
- package/src/array/impl/array-utils-set-op.test.mts +54 -26
- package/src/array/impl/array-utils-size.test.mts +1 -0
- package/src/array/impl/array-utils-slice-clamped.test.mts +20 -11
- package/src/array/impl/array-utils-slicing.test.mts +27 -21
- package/src/array/impl/array-utils-transformation.test.mts +140 -92
- package/src/array/impl/array-utils-validation.test.mts +58 -10
- package/src/array/impl/array.test.mts +5 -5
- package/src/collections/imap-mapped.test.mts +63 -18
- package/src/collections/imap.test.mts +74 -26
- package/src/collections/iset-mapped.test.mts +81 -30
- package/src/collections/iset.test.mts +168 -68
- package/src/collections/queue.test.mts +32 -1
- package/src/collections/stack.test.mts +22 -8
- package/src/functional/match.test.mts +1 -1
- package/src/functional/optional.test.mts +61 -4
- package/src/functional/pipe.test.mts +10 -1
- package/src/functional/result.test.mts +127 -4
- package/src/functional/ternary-result.test.mts +34 -18
- package/src/guard/is-non-empty-string.test.mts +5 -2
- package/src/guard/is-non-null-object.test.mts +3 -5
- package/src/guard/is-primitive.test.mts +5 -3
- package/src/guard/is-record.test.mts +1 -1
- package/src/guard/is-type.test.mts +35 -20
- package/src/guard/key-is-in.test.mts +1 -1
- package/src/iterator/range.test.mts +22 -16
- package/src/json/json.mts +9 -3
- package/src/json/json.test.mts +140 -64
- package/src/number/branded-types/finite-number.test.mts +3 -2
- package/src/number/branded-types/int.test.mts +4 -3
- package/src/number/branded-types/int16.test.mts +9 -3
- package/src/number/branded-types/int32.test.mts +9 -3
- package/src/number/branded-types/non-negative-finite-number.test.mts +6 -4
- package/src/number/branded-types/non-negative-int16.test.mts +8 -3
- package/src/number/branded-types/non-negative-int32.test.mts +8 -3
- package/src/number/branded-types/non-zero-finite-number.test.mts +6 -3
- package/src/number/branded-types/non-zero-int.test.mts +6 -3
- package/src/number/branded-types/non-zero-int16.test.mts +9 -3
- package/src/number/branded-types/non-zero-int32.test.mts +9 -3
- package/src/number/branded-types/non-zero-safe-int.test.mts +10 -3
- package/src/number/branded-types/non-zero-uint16.test.mts +8 -3
- package/src/number/branded-types/non-zero-uint32.test.mts +8 -3
- package/src/number/branded-types/positive-finite-number.test.mts +7 -3
- package/src/number/branded-types/positive-int.test.mts +5 -3
- package/src/number/branded-types/positive-int16.test.mts +8 -3
- package/src/number/branded-types/positive-int32.test.mts +8 -3
- package/src/number/branded-types/positive-safe-int.test.mts +8 -3
- package/src/number/branded-types/positive-uint16.test.mts +8 -3
- package/src/number/branded-types/positive-uint32.test.mts +8 -3
- package/src/number/branded-types/safe-int.test.mts +8 -2
- package/src/number/branded-types/safe-uint.test.mts +8 -3
- package/src/number/branded-types/uint.test.mts +5 -3
- package/src/number/branded-types/uint16.test.mts +8 -3
- package/src/number/branded-types/uint32.test.mts +8 -3
- package/src/number/enum/int8.test.mts +8 -3
- package/src/number/enum/uint8.test.mts +6 -3
- package/src/number/num.test.mts +16 -2
- package/src/object/object.test.mts +26 -13
- package/src/others/cast-mutable.test.mts +10 -8
- package/src/others/cast-readonly.test.mts +9 -5
- package/src/others/if-then.test.mts +4 -1
- package/src/others/map-nullable.test.mts +28 -1
- package/src/others/memoize-function.test.mts +20 -17
- package/src/others/tuple.test.mts +3 -2
- package/src/others/unknown-to-string.test.mts +15 -2
- package/src/promise/promise.test.mts +6 -1
|
@@ -28,7 +28,8 @@ describe('IMapMapped[Symbol.iterator]', () => {
|
|
|
28
28
|
fromKey,
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
assert.deepStrictEqual(
|
|
32
|
+
s0,
|
|
32
33
|
IMapMapped.create(
|
|
33
34
|
[
|
|
34
35
|
[{ v: 1 }, '1'],
|
|
@@ -49,6 +50,7 @@ describe('IMapMapped.create', () => {
|
|
|
49
50
|
testKeyToString,
|
|
50
51
|
stringToTestKey,
|
|
51
52
|
);
|
|
53
|
+
|
|
52
54
|
expect(map.size).toBe(0);
|
|
53
55
|
});
|
|
54
56
|
|
|
@@ -61,6 +63,7 @@ describe('IMapMapped.create', () => {
|
|
|
61
63
|
testKeyToString,
|
|
62
64
|
stringToTestKey,
|
|
63
65
|
);
|
|
66
|
+
|
|
64
67
|
expect(map.size).toBe(2);
|
|
65
68
|
expect(Optional.unwrap(map.get({ id: 1, type: 'user' }))).toBe('Alice');
|
|
66
69
|
expect(Optional.unwrap(map.get({ id: 2, type: 'admin' }))).toBe('Bob');
|
|
@@ -76,6 +79,7 @@ describe('IMapMapped.create', () => {
|
|
|
76
79
|
stringToTestKey,
|
|
77
80
|
);
|
|
78
81
|
const copy = IMapMapped.create(original, testKeyToString, stringToTestKey);
|
|
82
|
+
|
|
79
83
|
expect(copy.size).toBe(2);
|
|
80
84
|
expect(Optional.unwrap(copy.get({ id: 1, type: 'user' }))).toBe('Alice');
|
|
81
85
|
expect(Optional.unwrap(copy.get({ id: 2, type: 'admin' }))).toBe('Bob');
|
|
@@ -102,6 +106,7 @@ describe('IMapMapped.create', () => {
|
|
|
102
106
|
complexKeyToString,
|
|
103
107
|
stringToComplexKey,
|
|
104
108
|
);
|
|
109
|
+
|
|
105
110
|
expect(map.size).toBe(1);
|
|
106
111
|
expect(
|
|
107
112
|
Optional.unwrap(map.get({ nested: { id: 1 }, arr: [1, 2, 3] })),
|
|
@@ -127,6 +132,7 @@ describe('IMapMapped.equal', () => {
|
|
|
127
132
|
testKeyToString,
|
|
128
133
|
stringToTestKey,
|
|
129
134
|
);
|
|
135
|
+
|
|
130
136
|
// Test structural equality, not reference equality
|
|
131
137
|
expect(map1.size).toBe(map2.size);
|
|
132
138
|
expect(map1.has({ id: 1, type: 'user' })).toBe(true);
|
|
@@ -153,6 +159,7 @@ describe('IMapMapped.equal', () => {
|
|
|
153
159
|
testKeyToString,
|
|
154
160
|
stringToTestKey,
|
|
155
161
|
);
|
|
162
|
+
|
|
156
163
|
expect(IMapMapped.equal(map1, map2)).toBe(false);
|
|
157
164
|
});
|
|
158
165
|
|
|
@@ -173,6 +180,7 @@ describe('IMapMapped.equal', () => {
|
|
|
173
180
|
testKeyToString,
|
|
174
181
|
stringToTestKey,
|
|
175
182
|
);
|
|
183
|
+
|
|
176
184
|
expect(IMapMapped.equal(map1, map2)).toBe(false);
|
|
177
185
|
});
|
|
178
186
|
|
|
@@ -187,6 +195,7 @@ describe('IMapMapped.equal', () => {
|
|
|
187
195
|
testKeyToString,
|
|
188
196
|
stringToTestKey,
|
|
189
197
|
);
|
|
198
|
+
|
|
190
199
|
expect(IMapMapped.equal(map1, map2)).toBe(true);
|
|
191
200
|
});
|
|
192
201
|
});
|
|
@@ -221,6 +230,7 @@ describe('IMapMapped.has', () => {
|
|
|
221
230
|
|
|
222
231
|
expect(s0.has({ v: 3 })).toBe(true);
|
|
223
232
|
});
|
|
233
|
+
|
|
224
234
|
test('case 2', () => {
|
|
225
235
|
const s0 = IMapMapped.create(
|
|
226
236
|
[
|
|
@@ -234,6 +244,7 @@ describe('IMapMapped.has', () => {
|
|
|
234
244
|
|
|
235
245
|
expect(s0.has({ v: 4 })).toBe(false);
|
|
236
246
|
});
|
|
247
|
+
|
|
237
248
|
test('case 3', () => {
|
|
238
249
|
const s0 = IMapMapped.create<Readonly<{ v: number }>, string, number>(
|
|
239
250
|
[],
|
|
@@ -257,8 +268,9 @@ describe('IMapMapped.get', () => {
|
|
|
257
268
|
fromKey,
|
|
258
269
|
);
|
|
259
270
|
|
|
260
|
-
|
|
271
|
+
assert.deepStrictEqual(s0.get({ v: 3 }), Optional.some('3'));
|
|
261
272
|
});
|
|
273
|
+
|
|
262
274
|
test('case 2', () => {
|
|
263
275
|
const s0 = IMapMapped.create(
|
|
264
276
|
[
|
|
@@ -270,8 +282,9 @@ describe('IMapMapped.get', () => {
|
|
|
270
282
|
fromKey,
|
|
271
283
|
);
|
|
272
284
|
|
|
273
|
-
|
|
285
|
+
assert.deepStrictEqual(s0.get({ v: 4 }), Optional.none);
|
|
274
286
|
});
|
|
287
|
+
|
|
275
288
|
test('case 3', () => {
|
|
276
289
|
const s0 = IMapMapped.create<Readonly<{ v: number }>, string, number>(
|
|
277
290
|
[],
|
|
@@ -279,7 +292,7 @@ describe('IMapMapped.get', () => {
|
|
|
279
292
|
fromKey,
|
|
280
293
|
);
|
|
281
294
|
|
|
282
|
-
|
|
295
|
+
assert.deepStrictEqual(s0.get({ v: 3 }), Optional.none);
|
|
283
296
|
});
|
|
284
297
|
});
|
|
285
298
|
|
|
@@ -295,7 +308,8 @@ describe('IMapMapped.set', () => {
|
|
|
295
308
|
fromKey,
|
|
296
309
|
);
|
|
297
310
|
|
|
298
|
-
|
|
311
|
+
assert.deepStrictEqual(
|
|
312
|
+
s0.set({ v: 5 }, '5'),
|
|
299
313
|
IMapMapped.create(
|
|
300
314
|
[
|
|
301
315
|
[{ v: 1 }, '1'],
|
|
@@ -307,7 +321,8 @@ describe('IMapMapped.set', () => {
|
|
|
307
321
|
fromKey,
|
|
308
322
|
),
|
|
309
323
|
);
|
|
310
|
-
|
|
324
|
+
assert.deepStrictEqual(
|
|
325
|
+
s0,
|
|
311
326
|
IMapMapped.create(
|
|
312
327
|
[
|
|
313
328
|
[{ v: 1 }, '1'],
|
|
@@ -319,6 +334,7 @@ describe('IMapMapped.set', () => {
|
|
|
319
334
|
),
|
|
320
335
|
);
|
|
321
336
|
});
|
|
337
|
+
|
|
322
338
|
test('case 2', () => {
|
|
323
339
|
const s0 = IMapMapped.create(
|
|
324
340
|
[
|
|
@@ -330,7 +346,8 @@ describe('IMapMapped.set', () => {
|
|
|
330
346
|
fromKey,
|
|
331
347
|
);
|
|
332
348
|
|
|
333
|
-
|
|
349
|
+
assert.deepStrictEqual(
|
|
350
|
+
s0.set({ v: 3 }, '3'),
|
|
334
351
|
IMapMapped.create(
|
|
335
352
|
[
|
|
336
353
|
[{ v: 1 }, '1'],
|
|
@@ -341,7 +358,8 @@ describe('IMapMapped.set', () => {
|
|
|
341
358
|
fromKey,
|
|
342
359
|
),
|
|
343
360
|
);
|
|
344
|
-
|
|
361
|
+
assert.deepStrictEqual(
|
|
362
|
+
s0,
|
|
345
363
|
IMapMapped.create(
|
|
346
364
|
[
|
|
347
365
|
[{ v: 1 }, '1'],
|
|
@@ -353,13 +371,19 @@ describe('IMapMapped.set', () => {
|
|
|
353
371
|
),
|
|
354
372
|
);
|
|
355
373
|
});
|
|
374
|
+
|
|
356
375
|
test('case 3', () => {
|
|
357
|
-
const s0 = IMapMapped.create
|
|
376
|
+
const s0 = IMapMapped.create<Readonly<{ v: number }>, string, number>(
|
|
377
|
+
[],
|
|
378
|
+
toKey,
|
|
379
|
+
fromKey,
|
|
380
|
+
);
|
|
358
381
|
|
|
359
|
-
|
|
382
|
+
assert.deepStrictEqual(
|
|
383
|
+
s0.set({ v: 1 }, '1'),
|
|
360
384
|
IMapMapped.create([[{ v: 1 }, '1']], toKey, fromKey),
|
|
361
385
|
);
|
|
362
|
-
|
|
386
|
+
assert.deepStrictEqual(s0, IMapMapped.create([], toKey, fromKey));
|
|
363
387
|
});
|
|
364
388
|
});
|
|
365
389
|
|
|
@@ -373,6 +397,7 @@ describe('IMapMapped.update', () => {
|
|
|
373
397
|
const updated = map.update({ id: 1, type: 'user' }, (name) =>
|
|
374
398
|
name.toUpperCase(),
|
|
375
399
|
);
|
|
400
|
+
|
|
376
401
|
expect(Optional.unwrap(updated.get({ id: 1, type: 'user' }))).toBe('ALICE');
|
|
377
402
|
});
|
|
378
403
|
|
|
@@ -385,6 +410,7 @@ describe('IMapMapped.update', () => {
|
|
|
385
410
|
const updated = map.update({ id: 2, type: 'user' }, (name) =>
|
|
386
411
|
name.toUpperCase(),
|
|
387
412
|
);
|
|
413
|
+
|
|
388
414
|
expect(updated).toBe(map);
|
|
389
415
|
expect(Optional.isNone(updated.get({ id: 2, type: 'user' }))).toBe(true);
|
|
390
416
|
});
|
|
@@ -402,7 +428,8 @@ describe('IMapMapped.delete', () => {
|
|
|
402
428
|
fromKey,
|
|
403
429
|
);
|
|
404
430
|
|
|
405
|
-
|
|
431
|
+
assert.deepStrictEqual(
|
|
432
|
+
s0.delete({ v: 10 }),
|
|
406
433
|
IMapMapped.create(
|
|
407
434
|
[
|
|
408
435
|
[{ v: 1 }, '1'],
|
|
@@ -413,7 +440,8 @@ describe('IMapMapped.delete', () => {
|
|
|
413
440
|
fromKey,
|
|
414
441
|
),
|
|
415
442
|
);
|
|
416
|
-
|
|
443
|
+
assert.deepStrictEqual(
|
|
444
|
+
s0,
|
|
417
445
|
IMapMapped.create(
|
|
418
446
|
[
|
|
419
447
|
[{ v: 1 }, '1'],
|
|
@@ -425,6 +453,7 @@ describe('IMapMapped.delete', () => {
|
|
|
425
453
|
),
|
|
426
454
|
);
|
|
427
455
|
});
|
|
456
|
+
|
|
428
457
|
test('case 2', () => {
|
|
429
458
|
const s0 = IMapMapped.create(
|
|
430
459
|
[
|
|
@@ -436,7 +465,8 @@ describe('IMapMapped.delete', () => {
|
|
|
436
465
|
fromKey,
|
|
437
466
|
);
|
|
438
467
|
|
|
439
|
-
|
|
468
|
+
assert.deepStrictEqual(
|
|
469
|
+
s0.delete({ v: 3 }),
|
|
440
470
|
IMapMapped.create(
|
|
441
471
|
[
|
|
442
472
|
[{ v: 1 }, '1'],
|
|
@@ -446,7 +476,8 @@ describe('IMapMapped.delete', () => {
|
|
|
446
476
|
fromKey,
|
|
447
477
|
),
|
|
448
478
|
);
|
|
449
|
-
|
|
479
|
+
assert.deepStrictEqual(
|
|
480
|
+
s0,
|
|
450
481
|
IMapMapped.create(
|
|
451
482
|
[
|
|
452
483
|
[{ v: 1 }, '1'],
|
|
@@ -458,13 +489,15 @@ describe('IMapMapped.delete', () => {
|
|
|
458
489
|
),
|
|
459
490
|
);
|
|
460
491
|
});
|
|
492
|
+
|
|
461
493
|
test('case 3', () => {
|
|
462
494
|
const s0 = IMapMapped.create([], toKey, fromKey);
|
|
463
495
|
|
|
464
|
-
|
|
496
|
+
assert.deepStrictEqual(
|
|
497
|
+
s0.delete({ v: 1 }),
|
|
465
498
|
IMapMapped.create([], toKey, fromKey),
|
|
466
499
|
);
|
|
467
|
-
|
|
500
|
+
assert.deepStrictEqual(s0, IMapMapped.create([], toKey, fromKey));
|
|
468
501
|
});
|
|
469
502
|
|
|
470
503
|
test('should delete entry if it exists', () => {
|
|
@@ -494,6 +527,7 @@ describe('IMapMapped.every', () => {
|
|
|
494
527
|
testKeyToString,
|
|
495
528
|
stringToTestKey,
|
|
496
529
|
);
|
|
530
|
+
|
|
497
531
|
expect(map.every((value) => typeof value === 'string')).toBe(true);
|
|
498
532
|
});
|
|
499
533
|
|
|
@@ -506,6 +540,7 @@ describe('IMapMapped.every', () => {
|
|
|
506
540
|
testKeyToString,
|
|
507
541
|
stringToTestKey,
|
|
508
542
|
);
|
|
543
|
+
|
|
509
544
|
expect(map.every((value) => value.length > 5)).toBe(false);
|
|
510
545
|
});
|
|
511
546
|
|
|
@@ -515,6 +550,7 @@ describe('IMapMapped.every', () => {
|
|
|
515
550
|
testKeyToString,
|
|
516
551
|
stringToTestKey,
|
|
517
552
|
);
|
|
553
|
+
|
|
518
554
|
expect(map.every((value) => value.length > 0)).toBe(true);
|
|
519
555
|
});
|
|
520
556
|
});
|
|
@@ -529,6 +565,7 @@ describe('IMapMapped.some', () => {
|
|
|
529
565
|
testKeyToString,
|
|
530
566
|
stringToTestKey,
|
|
531
567
|
);
|
|
568
|
+
|
|
532
569
|
// eslint-disable-next-line unicorn/prefer-includes
|
|
533
570
|
expect(map.some((value) => value === 'Alice')).toBe(true);
|
|
534
571
|
});
|
|
@@ -542,6 +579,7 @@ describe('IMapMapped.some', () => {
|
|
|
542
579
|
testKeyToString,
|
|
543
580
|
stringToTestKey,
|
|
544
581
|
);
|
|
582
|
+
|
|
545
583
|
// eslint-disable-next-line unicorn/prefer-includes
|
|
546
584
|
expect(map.some((value) => value === 'Charlie')).toBe(false);
|
|
547
585
|
});
|
|
@@ -552,6 +590,7 @@ describe('IMapMapped.some', () => {
|
|
|
552
590
|
testKeyToString,
|
|
553
591
|
stringToTestKey,
|
|
554
592
|
);
|
|
593
|
+
|
|
555
594
|
expect(map.some((value) => value.length > 0)).toBe(false);
|
|
556
595
|
});
|
|
557
596
|
});
|
|
@@ -586,6 +625,7 @@ describe('IMapMapped.withMutations', () => {
|
|
|
586
625
|
stringToTestKey,
|
|
587
626
|
);
|
|
588
627
|
const updated = map.withMutations([]);
|
|
628
|
+
|
|
589
629
|
expect(updated.size).toBe(1);
|
|
590
630
|
expect(Optional.unwrap(updated.get({ id: 1, type: 'user' }))).toBe('Alice');
|
|
591
631
|
});
|
|
@@ -790,6 +830,7 @@ describe('IMapMapped.toKeysArray', () => {
|
|
|
790
830
|
stringToTestKey,
|
|
791
831
|
);
|
|
792
832
|
const keys = map.toKeysArray();
|
|
833
|
+
|
|
793
834
|
expect(keys).toHaveLength(2);
|
|
794
835
|
expect(keys).toContainEqual({ id: 1, type: 'user' });
|
|
795
836
|
expect(keys).toContainEqual({ id: 2, type: 'admin' });
|
|
@@ -807,6 +848,7 @@ describe('IMapMapped.toValuesArray', () => {
|
|
|
807
848
|
stringToTestKey,
|
|
808
849
|
);
|
|
809
850
|
const values = map.toValuesArray();
|
|
851
|
+
|
|
810
852
|
expect(values).toHaveLength(2);
|
|
811
853
|
expect(values).toContain('Alice');
|
|
812
854
|
expect(values).toContain('Bob');
|
|
@@ -824,6 +866,7 @@ describe('IMapMapped.toEntriesArray', () => {
|
|
|
824
866
|
stringToTestKey,
|
|
825
867
|
);
|
|
826
868
|
const entries = map.toEntriesArray();
|
|
869
|
+
|
|
827
870
|
expect(entries).toHaveLength(2);
|
|
828
871
|
expect(entries).toContainEqual([{ id: 1, type: 'user' }, 'Alice']);
|
|
829
872
|
expect(entries).toContainEqual([{ id: 2, type: 'admin' }, 'Bob']);
|
|
@@ -842,7 +885,8 @@ describe('IMapMapped.toArray', () => {
|
|
|
842
885
|
);
|
|
843
886
|
const entries = map.toArray();
|
|
844
887
|
const entriesArray = map.toEntriesArray();
|
|
845
|
-
|
|
888
|
+
|
|
889
|
+
assert.deepStrictEqual(entries, entriesArray);
|
|
846
890
|
});
|
|
847
891
|
});
|
|
848
892
|
|
|
@@ -857,6 +901,7 @@ describe('IMapMapped.toRawMap', () => {
|
|
|
857
901
|
stringToTestKey,
|
|
858
902
|
);
|
|
859
903
|
const rawMap = map.toRawMap();
|
|
904
|
+
|
|
860
905
|
expect(rawMap.size).toBe(2);
|
|
861
906
|
expect(rawMap.get('user_1')).toBe('Alice');
|
|
862
907
|
expect(rawMap.get('admin_2')).toBe('Bob');
|