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.
Files changed (76) hide show
  1. package/dist/json/json.d.mts +9 -3
  2. package/dist/json/json.d.mts.map +1 -1
  3. package/dist/json/json.mjs +6 -0
  4. package/dist/json/json.mjs.map +1 -1
  5. package/package.json +13 -13
  6. package/src/array/impl/array-utils-creation.test.mts +187 -74
  7. package/src/array/impl/array-utils-element-access.test.mts +19 -3
  8. package/src/array/impl/array-utils-iterators.test.mts +44 -24
  9. package/src/array/impl/array-utils-modification.test.mts +36 -33
  10. package/src/array/impl/array-utils-reducing-value.test.mts +47 -16
  11. package/src/array/impl/array-utils-search.test.mts +42 -9
  12. package/src/array/impl/array-utils-set-op.test.mts +54 -26
  13. package/src/array/impl/array-utils-size.test.mts +1 -0
  14. package/src/array/impl/array-utils-slice-clamped.test.mts +20 -11
  15. package/src/array/impl/array-utils-slicing.test.mts +27 -21
  16. package/src/array/impl/array-utils-transformation.test.mts +140 -92
  17. package/src/array/impl/array-utils-validation.test.mts +58 -10
  18. package/src/array/impl/array.test.mts +5 -5
  19. package/src/collections/imap-mapped.test.mts +63 -18
  20. package/src/collections/imap.test.mts +74 -26
  21. package/src/collections/iset-mapped.test.mts +81 -30
  22. package/src/collections/iset.test.mts +168 -68
  23. package/src/collections/queue.test.mts +32 -1
  24. package/src/collections/stack.test.mts +22 -8
  25. package/src/functional/match.test.mts +1 -1
  26. package/src/functional/optional.test.mts +61 -4
  27. package/src/functional/pipe.test.mts +10 -1
  28. package/src/functional/result.test.mts +127 -4
  29. package/src/functional/ternary-result.test.mts +34 -18
  30. package/src/guard/is-non-empty-string.test.mts +5 -2
  31. package/src/guard/is-non-null-object.test.mts +3 -5
  32. package/src/guard/is-primitive.test.mts +5 -3
  33. package/src/guard/is-record.test.mts +1 -1
  34. package/src/guard/is-type.test.mts +35 -20
  35. package/src/guard/key-is-in.test.mts +1 -1
  36. package/src/iterator/range.test.mts +22 -16
  37. package/src/json/json.mts +9 -3
  38. package/src/json/json.test.mts +140 -64
  39. package/src/number/branded-types/finite-number.test.mts +3 -2
  40. package/src/number/branded-types/int.test.mts +4 -3
  41. package/src/number/branded-types/int16.test.mts +9 -3
  42. package/src/number/branded-types/int32.test.mts +9 -3
  43. package/src/number/branded-types/non-negative-finite-number.test.mts +6 -4
  44. package/src/number/branded-types/non-negative-int16.test.mts +8 -3
  45. package/src/number/branded-types/non-negative-int32.test.mts +8 -3
  46. package/src/number/branded-types/non-zero-finite-number.test.mts +6 -3
  47. package/src/number/branded-types/non-zero-int.test.mts +6 -3
  48. package/src/number/branded-types/non-zero-int16.test.mts +9 -3
  49. package/src/number/branded-types/non-zero-int32.test.mts +9 -3
  50. package/src/number/branded-types/non-zero-safe-int.test.mts +10 -3
  51. package/src/number/branded-types/non-zero-uint16.test.mts +8 -3
  52. package/src/number/branded-types/non-zero-uint32.test.mts +8 -3
  53. package/src/number/branded-types/positive-finite-number.test.mts +7 -3
  54. package/src/number/branded-types/positive-int.test.mts +5 -3
  55. package/src/number/branded-types/positive-int16.test.mts +8 -3
  56. package/src/number/branded-types/positive-int32.test.mts +8 -3
  57. package/src/number/branded-types/positive-safe-int.test.mts +8 -3
  58. package/src/number/branded-types/positive-uint16.test.mts +8 -3
  59. package/src/number/branded-types/positive-uint32.test.mts +8 -3
  60. package/src/number/branded-types/safe-int.test.mts +8 -2
  61. package/src/number/branded-types/safe-uint.test.mts +8 -3
  62. package/src/number/branded-types/uint.test.mts +5 -3
  63. package/src/number/branded-types/uint16.test.mts +8 -3
  64. package/src/number/branded-types/uint32.test.mts +8 -3
  65. package/src/number/enum/int8.test.mts +8 -3
  66. package/src/number/enum/uint8.test.mts +6 -3
  67. package/src/number/num.test.mts +16 -2
  68. package/src/object/object.test.mts +26 -13
  69. package/src/others/cast-mutable.test.mts +10 -8
  70. package/src/others/cast-readonly.test.mts +9 -5
  71. package/src/others/if-then.test.mts +4 -1
  72. package/src/others/map-nullable.test.mts +28 -1
  73. package/src/others/memoize-function.test.mts +20 -17
  74. package/src/others/tuple.test.mts +3 -2
  75. package/src/others/unknown-to-string.test.mts +15 -2
  76. package/src/promise/promise.test.mts +6 -1
@@ -28,7 +28,8 @@ describe('IMapMapped[Symbol.iterator]', () => {
28
28
  fromKey,
29
29
  );
30
30
 
31
- expect(s0).toStrictEqual(
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
- expect(s0.get({ v: 3 })).toStrictEqual(Optional.some('3'));
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
- expect(s0.get({ v: 4 })).toStrictEqual(Optional.none);
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
- expect(s0.get({ v: 3 })).toStrictEqual(Optional.none);
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
- expect(s0.set({ v: 5 }, '5')).toStrictEqual(
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
- expect(s0).toStrictEqual(
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
- expect(s0.set({ v: 3 }, '3')).toStrictEqual(
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
- expect(s0).toStrictEqual(
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([], toKey, fromKey);
376
+ const s0 = IMapMapped.create<Readonly<{ v: number }>, string, number>(
377
+ [],
378
+ toKey,
379
+ fromKey,
380
+ );
358
381
 
359
- expect(s0.set({ v: 1 }, '1')).toStrictEqual(
382
+ assert.deepStrictEqual(
383
+ s0.set({ v: 1 }, '1'),
360
384
  IMapMapped.create([[{ v: 1 }, '1']], toKey, fromKey),
361
385
  );
362
- expect(s0).toStrictEqual(IMapMapped.create([], toKey, fromKey));
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
- expect(s0.delete({ v: 10 })).toStrictEqual(
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
- expect(s0).toStrictEqual(
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
- expect(s0.delete({ v: 3 })).toStrictEqual(
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
- expect(s0).toStrictEqual(
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
- expect(s0.delete({ v: 1 })).toStrictEqual(
496
+ assert.deepStrictEqual(
497
+ s0.delete({ v: 1 }),
465
498
  IMapMapped.create([], toKey, fromKey),
466
499
  );
467
- expect(s0).toStrictEqual(IMapMapped.create([], toKey, fromKey));
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
- expect(entries).toStrictEqual(entriesArray);
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');