ts-data-forge 14.6.2 → 14.6.4

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 (182) hide show
  1. package/dist/array/impl/array-utils-creation.mjs +103 -103
  2. package/dist/array/impl/array-utils-element-access.mjs +46 -46
  3. package/dist/array/impl/array-utils-iterators.mjs +54 -54
  4. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +49 -49
  5. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +40 -40
  6. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +42 -42
  7. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +46 -46
  8. package/dist/array/impl/array-utils-modification.mjs +5 -5
  9. package/dist/array/impl/array-utils-reducing-value.mjs +11 -11
  10. package/dist/array/impl/array-utils-search.mjs +6 -6
  11. package/dist/array/impl/array-utils-set-op.mjs +116 -116
  12. package/dist/array/impl/array-utils-size.mjs +6 -6
  13. package/dist/array/impl/array-utils-slice-clamped.mjs +1 -1
  14. package/dist/array/impl/array-utils-slicing.mjs +56 -56
  15. package/dist/array/impl/array-utils-transformation.mjs +158 -158
  16. package/dist/array/impl/array-utils-validation.mjs +36 -36
  17. package/dist/collections/imap-mapped.mjs +195 -195
  18. package/dist/collections/imap.mjs +143 -143
  19. package/dist/collections/iset-mapped.mjs +320 -320
  20. package/dist/collections/iset.mjs +207 -207
  21. package/dist/collections/queue.mjs +130 -130
  22. package/dist/collections/stack.mjs +125 -125
  23. package/dist/expect-type.mjs +68 -68
  24. package/dist/functional/async-result/impl/async-result-flat-map.mjs +3 -3
  25. package/dist/functional/async-result/impl/async-result-map-err.mjs +2 -2
  26. package/dist/functional/async-result/impl/async-result-map.mjs +2 -2
  27. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +31 -31
  28. package/dist/functional/optional/impl/optional-expect-to-be.mjs +1 -1
  29. package/dist/functional/optional/impl/optional-filter.mjs +1 -1
  30. package/dist/functional/optional/impl/optional-flat-map.mjs +1 -1
  31. package/dist/functional/optional/impl/optional-from-nullable.mjs +24 -24
  32. package/dist/functional/optional/impl/optional-is-none.mjs +19 -19
  33. package/dist/functional/optional/impl/optional-is-optional.mjs +18 -18
  34. package/dist/functional/optional/impl/optional-is-some.mjs +20 -20
  35. package/dist/functional/optional/impl/optional-map.mjs +2 -2
  36. package/dist/functional/optional/impl/optional-match.mjs +2 -2
  37. package/dist/functional/optional/impl/optional-none.mjs +16 -16
  38. package/dist/functional/optional/impl/optional-or-else.mjs +1 -1
  39. package/dist/functional/optional/impl/optional-some.mjs +19 -19
  40. package/dist/functional/optional/impl/optional-to-nullable.mjs +26 -26
  41. package/dist/functional/optional/impl/optional-unwrap-or.mjs +1 -1
  42. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +28 -28
  43. package/dist/functional/optional/impl/optional-unwrap.mjs +1 -1
  44. package/dist/functional/optional/impl/optional-zip.mjs +32 -32
  45. package/dist/functional/optional/impl/tag.mjs +1 -1
  46. package/dist/functional/pipe.mjs +19 -19
  47. package/dist/functional/result/impl/result-err.mjs +25 -25
  48. package/dist/functional/result/impl/result-expect-to-be.mjs +2 -2
  49. package/dist/functional/result/impl/result-flat-map.mjs +4 -4
  50. package/dist/functional/result/impl/result-fold.mjs +4 -4
  51. package/dist/functional/result/impl/result-from-optional.mjs +2 -2
  52. package/dist/functional/result/impl/result-from-promise.mjs +34 -34
  53. package/dist/functional/result/impl/result-from-throwable.mjs +29 -29
  54. package/dist/functional/result/impl/result-is-err.mjs +19 -19
  55. package/dist/functional/result/impl/result-is-ok.mjs +19 -19
  56. package/dist/functional/result/impl/result-is-result.mjs +19 -19
  57. package/dist/functional/result/impl/result-map-err.mjs +4 -4
  58. package/dist/functional/result/impl/result-map.mjs +4 -4
  59. package/dist/functional/result/impl/result-match.mjs +3 -3
  60. package/dist/functional/result/impl/result-ok.mjs +25 -25
  61. package/dist/functional/result/impl/result-or-else.mjs +2 -2
  62. package/dist/functional/result/impl/result-safe-try.mjs +15 -15
  63. package/dist/functional/result/impl/result-safe-unwrap.mjs +33 -33
  64. package/dist/functional/result/impl/result-swap.mjs +20 -20
  65. package/dist/functional/result/impl/result-to-optional.mjs +27 -27
  66. package/dist/functional/result/impl/result-unwrap-err-or.mjs +2 -2
  67. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +31 -31
  68. package/dist/functional/result/impl/result-unwrap-err.mjs +30 -30
  69. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +2 -2
  70. package/dist/functional/result/impl/result-unwrap-ok.mjs +1 -1
  71. package/dist/functional/result/impl/result-unwrap-throw.mjs +31 -31
  72. package/dist/functional/result/impl/result-zip.mjs +29 -29
  73. package/dist/functional/result/impl/tag.mjs +1 -1
  74. package/dist/functional/ternary-result/impl/tag.mjs +2 -2
  75. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +13 -13
  76. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +4 -4
  77. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +4 -4
  78. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +18 -18
  79. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +17 -17
  80. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +17 -17
  81. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +19 -19
  82. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +19 -19
  83. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +18 -18
  84. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +2 -2
  85. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +3 -3
  86. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +4 -4
  87. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +14 -14
  88. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +19 -19
  89. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +19 -19
  90. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +17 -17
  91. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +1 -1
  92. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +20 -20
  93. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +18 -18
  94. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +17 -17
  95. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +16 -16
  96. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +31 -31
  97. package/dist/functional/ternary-result/impl/variant-name.mjs +1 -1
  98. package/dist/guard/has-key.mjs +41 -41
  99. package/dist/guard/is-non-empty-string.mjs +37 -37
  100. package/dist/guard/is-non-null-object.mjs +34 -34
  101. package/dist/guard/is-primitive.mjs +31 -31
  102. package/dist/guard/is-record.mjs +86 -86
  103. package/dist/guard/is-type.mjs +387 -387
  104. package/dist/guard/key-is-in.mjs +40 -40
  105. package/dist/iterator/range.mjs +1 -1
  106. package/dist/json/json.mjs +289 -289
  107. package/dist/number/branded-types/finite-number.mjs +116 -116
  108. package/dist/number/branded-types/int.mjs +223 -223
  109. package/dist/number/branded-types/int16.mjs +116 -116
  110. package/dist/number/branded-types/int32.mjs +116 -116
  111. package/dist/number/branded-types/negative-finite-number.mjs +126 -126
  112. package/dist/number/branded-types/negative-int.mjs +104 -104
  113. package/dist/number/branded-types/negative-safe-int.mjs +104 -104
  114. package/dist/number/branded-types/non-negative-finite-number.mjs +132 -132
  115. package/dist/number/branded-types/non-negative-int16.mjs +113 -113
  116. package/dist/number/branded-types/non-negative-int32.mjs +113 -113
  117. package/dist/number/branded-types/non-positive-finite-number.mjs +116 -116
  118. package/dist/number/branded-types/non-positive-int.mjs +97 -97
  119. package/dist/number/branded-types/non-positive-safe-int.mjs +98 -98
  120. package/dist/number/branded-types/non-zero-finite-number.mjs +112 -112
  121. package/dist/number/branded-types/non-zero-int.mjs +82 -82
  122. package/dist/number/branded-types/non-zero-int16.mjs +95 -95
  123. package/dist/number/branded-types/non-zero-int32.mjs +95 -95
  124. package/dist/number/branded-types/non-zero-safe-int.mjs +99 -99
  125. package/dist/number/branded-types/non-zero-uint16.mjs +95 -95
  126. package/dist/number/branded-types/non-zero-uint32.mjs +95 -95
  127. package/dist/number/branded-types/positive-finite-number.mjs +134 -134
  128. package/dist/number/branded-types/positive-int.mjs +237 -237
  129. package/dist/number/branded-types/positive-int16.mjs +110 -110
  130. package/dist/number/branded-types/positive-int32.mjs +110 -110
  131. package/dist/number/branded-types/positive-safe-int.mjs +268 -268
  132. package/dist/number/branded-types/positive-uint16.mjs +110 -110
  133. package/dist/number/branded-types/positive-uint32.mjs +110 -110
  134. package/dist/number/branded-types/safe-int.mjs +259 -259
  135. package/dist/number/branded-types/safe-uint.mjs +111 -111
  136. package/dist/number/branded-types/uint.mjs +225 -225
  137. package/dist/number/branded-types/uint16.mjs +108 -108
  138. package/dist/number/branded-types/uint32.mjs +108 -108
  139. package/dist/number/enum/int8.mjs +118 -118
  140. package/dist/number/enum/uint8.mjs +109 -109
  141. package/dist/number/num-arithmetic-types.mjs +1 -1
  142. package/dist/number/num.mjs +478 -478
  143. package/dist/number/refined-number-utils.mjs +170 -170
  144. package/dist/object/object.mjs +234 -234
  145. package/dist/others/cast-mutable.mjs +33 -33
  146. package/dist/others/cast-readonly.mjs +32 -32
  147. package/dist/others/debounce-function.mjs +13 -13
  148. package/dist/others/fast-deep-equal.mjs +14 -14
  149. package/dist/others/if-then.mjs +29 -29
  150. package/dist/others/tuple.mjs +50 -50
  151. package/dist/others/unknown-to-string.mjs +38 -38
  152. package/dist/promise/promise.mjs +47 -47
  153. package/dist/string/str.mjs +177 -177
  154. package/dist/types.mjs +1 -1
  155. package/package.json +6 -6
  156. package/src/guard/is-type.test.mts +2 -2
  157. package/src/number/branded-types/finite-number.test.mts +1 -1
  158. package/src/number/branded-types/int.test.mts +1 -1
  159. package/src/number/branded-types/int16.test.mts +1 -1
  160. package/src/number/branded-types/int32.test.mts +1 -1
  161. package/src/number/branded-types/non-negative-finite-number.test.mts +1 -1
  162. package/src/number/branded-types/non-negative-int16.test.mts +1 -1
  163. package/src/number/branded-types/non-negative-int32.test.mts +1 -1
  164. package/src/number/branded-types/non-zero-finite-number.test.mts +1 -1
  165. package/src/number/branded-types/non-zero-int.test.mts +1 -1
  166. package/src/number/branded-types/non-zero-int16.test.mts +1 -1
  167. package/src/number/branded-types/non-zero-int32.test.mts +1 -1
  168. package/src/number/branded-types/non-zero-safe-int.test.mts +1 -1
  169. package/src/number/branded-types/non-zero-uint16.test.mts +1 -1
  170. package/src/number/branded-types/non-zero-uint32.test.mts +1 -1
  171. package/src/number/branded-types/positive-finite-number.test.mts +1 -1
  172. package/src/number/branded-types/positive-int.test.mts +1 -1
  173. package/src/number/branded-types/positive-int16.test.mts +1 -1
  174. package/src/number/branded-types/positive-int32.test.mts +1 -1
  175. package/src/number/branded-types/positive-safe-int.test.mts +1 -1
  176. package/src/number/branded-types/positive-uint16.test.mts +1 -1
  177. package/src/number/branded-types/positive-uint32.test.mts +1 -1
  178. package/src/number/branded-types/safe-int.test.mts +1 -1
  179. package/src/number/branded-types/safe-uint.test.mts +1 -1
  180. package/src/number/branded-types/uint.test.mts +1 -1
  181. package/src/number/branded-types/uint16.test.mts +1 -1
  182. package/src/number/branded-types/uint32.test.mts +1 -1
@@ -1,118 +1,118 @@
1
1
 
2
2
  import { range as rangeIterator } from '../../iterator/index.mjs';
3
- /**
4
- * Creates an array of zeros with the specified length.
5
- *
6
- * @example
7
- *
8
- * ```ts
9
- * const emptyZeros = Arr.zeros(0);
10
- *
11
- * const threeZeros = Arr.zeros(3);
12
- *
13
- * assert.deepStrictEqual(emptyZeros, []);
14
- *
15
- * assert.deepStrictEqual(threeZeros, [0, 0, 0]);
16
- * ```
17
- */
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
18
  export const zeros = (len) =>
19
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
19
+
20
20
  Array.from({ length: len }, () => 0);
21
- /**
22
- * Creates a sequence of consecutive integers from 0 to `len-1`.
23
- *
24
- * @example
25
- *
26
- * ```ts
27
- * const emptySeq = Arr.seq(0);
28
- *
29
- * const firstFive = Arr.seq(5);
30
- *
31
- * assert.deepStrictEqual(emptySeq, []);
32
- *
33
- * assert.deepStrictEqual(firstFive, [0, 1, 2, 3, 4]);
34
- * ```
35
- */
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
36
  export const seq = (len) =>
37
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
37
+
38
38
  Array.from({ length: len }, (_, i) => i);
39
- /**
40
- * Creates a new array of the specified length, filled with the initial value.
41
- *
42
- * @example
43
- *
44
- * ```ts
45
- * const threeOnes = Arr.create(3, 1);
46
- *
47
- * const emptyStrings = Arr.create(0, 'Ada');
48
- *
49
- * assert.deepStrictEqual(threeOnes, [1, 1, 1]);
50
- *
51
- * assert.deepStrictEqual(emptyStrings, []);
52
- * ```
53
- */
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
54
  export const create = (len, init) =>
55
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
55
+
56
56
  Array.from({ length: Math.max(0, len) }, () => init);
57
- /**
58
- * Alias for `create`.
59
- *
60
- * @see {@link create}
61
- */
57
+
58
+
59
+
60
+
61
+
62
62
  export const newArray = create;
63
- /**
64
- * Generates an array from a generator function.
65
- *
66
- * @example
67
- *
68
- * ```ts
69
- * const numbers = Arr.generate(function* () {
70
- * yield 1;
71
- *
72
- * yield 2;
73
- *
74
- * yield 3;
75
- * });
76
- *
77
- * assert.deepStrictEqual(numbers, [1, 2, 3]);
78
- * ```
79
- */
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
80
  export const generate = (generatorFn) => Array.from(generatorFn());
81
- /**
82
- * Generates an array from an async generator function.
83
- *
84
- * @example
85
- *
86
- * ```ts
87
- * const values = await Arr.generateAsync(async function* () {
88
- * yield 'Ada';
89
- *
90
- * await Promise.resolve();
91
- *
92
- * yield 'Lovelace';
93
- * });
94
- *
95
- * assert.deepStrictEqual(values, ['Ada', 'Lovelace']);
96
- * ```
97
- */
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
98
  export const generateAsync = (generatorFn) => Array.fromAsync(generatorFn());
99
- /**
100
- * Creates a shallow copy of an array.
101
- *
102
- * @example
103
- *
104
- * ```ts
105
- * const original = [{ id: 1 }, { id: 2 }] as const;
106
- *
107
- * const cloned = Arr.copy(original);
108
- *
109
- * assert.deepStrictEqual(cloned, original);
110
- *
111
- * assert.notStrictEqual(cloned, original);
112
- * ```
113
- */
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
114
  export const copy = (array) =>
115
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
115
+
116
116
  array.slice();
117
117
 
118
118
 
@@ -9,56 +9,56 @@ export function at(...args) {
9
9
  }
10
10
  const atImpl = (array, index) => pipe(index < 0 ? array.length + index : index).map((normalizedIndex) => normalizedIndex < 0 || normalizedIndex >= array.length
11
11
  ? Optional.none
12
- : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
12
+ :
13
13
  Optional.some(array[normalizedIndex])).value;
14
- /**
15
- * Returns the first element of an array as an Optional.
16
- *
17
- * @example
18
- *
19
- * ```ts
20
- * const users = [{ id: 1 }, { id: 2 }] as const;
21
- *
22
- * const empty: readonly Readonly<{ id: number }>[] = [] as const;
23
- *
24
- * const first = Arr.head(users);
25
- *
26
- * const none = Arr.head(empty);
27
- *
28
- * assert.deepStrictEqual(first, Optional.some({ id: 1 }));
29
- *
30
- * assert.deepStrictEqual(none, Optional.none);
31
- * ```
32
- */
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
33
  export const head = (array) =>
34
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
34
+
35
35
  (array.length === 0 ? Optional.none : Optional.some(array.at(0)));
36
- /**
37
- * Returns the last element of an array as an Optional.
38
- *
39
- * @example
40
- *
41
- * ```ts
42
- * const queue = ['first', 'second'] as const;
43
- *
44
- * const emptyQueue: readonly string[] = [] as const;
45
- *
46
- * const lastValue = Arr.last(queue);
47
- *
48
- * const none = Arr.last(emptyQueue);
49
- *
50
- * assert.deepStrictEqual(lastValue, Optional.some('second'));
51
- *
52
- * assert.deepStrictEqual(none, Optional.none);
53
- * ```
54
- */
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
55
  export const last = (array) =>
56
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
56
+
57
57
  (array.length === 0 ? Optional.none : Optional.some(array.at(-1)));
58
- /**
59
- * Alias for `head`.
60
- *
61
- * @see {@link head}
62
- */
58
+
59
+
60
+
61
+
62
+
63
63
  export const first = head;
64
64
  //# sourceMappingURL=array-utils-element-access.mjs.map
@@ -1,72 +1,72 @@
1
1
  import { asUint32 } from '../../number/index.mjs';
2
- /**
3
- * Returns an iterator of `[index, value]` pairs for an array.
4
- *
5
- * @example
6
- *
7
- * ```ts
8
- * const tags = ['alpha', 'beta', 'gamma'] as const;
9
- *
10
- * const entryList = Array.from(
11
- * Arr.entries(tags),
12
- * ([index, tag]) => [Number(index), tag] as const,
13
- * );
14
- *
15
- * assert.deepStrictEqual(
16
- * entryList,
17
- * Array.from([
18
- * [0, 'alpha'],
19
- * [1, 'beta'],
20
- * [2, 'gamma'],
21
- * ]),
22
- * );
23
- * ```
24
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
25
  export const entries = function* (array) {
26
26
  for (const [index, value] of array.entries()) {
27
27
  yield [asUint32(index), value];
28
28
  }
29
29
  };
30
- /**
31
- * Returns an iterator of values for an array.
32
- *
33
- * @example
34
- *
35
- * ```ts
36
- * const players = ['Ada', 'Grace', 'Alan'] as readonly string[];
37
- *
38
- * const valueList = Array.from(Arr.values(players));
39
- *
40
- * assert.deepStrictEqual(valueList, players);
41
- * ```
42
- */
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
43
  export const values = function* (array) {
44
44
  for (const value of array) {
45
45
  yield value;
46
46
  }
47
47
  };
48
- /**
49
- * Returns an iterator of indices for an array.
50
- *
51
- * @example
52
- *
53
- * ```ts
54
- * const items = ['zero', 'one', 'two'] as const;
55
- *
56
- * const indexList = Array.from(Arr.indices(items));
57
- *
58
- * assert.deepStrictEqual(indexList, [0, 1, 2]);
59
- * ```
60
- */
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
61
  export const indices = function* (array) {
62
62
  for (const key of array.keys()) {
63
63
  yield asUint32(key);
64
64
  }
65
65
  };
66
- /**
67
- * Alias for `indices`.
68
- *
69
- * @see {@link indices}
70
- */
66
+
67
+
68
+
69
+
70
+
71
71
  export const keys = indices;
72
72
  //# sourceMappingURL=array-utils-iterators.mjs.map
@@ -59,61 +59,61 @@ const asBoundedLengthArrayImpl = (minLength, maxLength, xs) => {
59
59
  }
60
60
  return xs;
61
61
  };
62
- /**
63
- * Casts an array to `FixedLengthArray<0, E>` after checking that it is empty.
64
- *
65
- * `Arr.isEmpty` narrows to that same type, so this is its cast counterpart —
66
- * the length-0 specialization of {@link asFixedLengthArray}. Use this instead
67
- * of writing `xs as unknown as FixedLengthArray<0, E>`: the length is verified
68
- * at runtime, and the original array type is preserved via intersection.
69
- *
70
- * @example
71
- *
72
- * ```ts
73
- * const nothing = Arr.asEmptyArray([]);
74
- *
75
- * const atMost5: MaxLengthArray<5, never> = nothing; // OK (0 <= 5)
76
- *
77
- * // Arr.asEmptyArray([1]); // throws TypeError
78
- * ```
79
- *
80
- * @template Xs - The input array type (tuple types are preserved).
81
- * @param xs - The array to cast.
82
- * @returns `xs` typed as `FixedLengthArray<0, Xs[number]> & Xs`.
83
- * @throws {TypeError} If `xs` is not empty.
84
- */
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
85
  export const asEmptyArray = (xs) => {
86
86
  if (!isFixedLengthArray(0, xs)) {
87
87
  throw new TypeError(`Expected an empty array, got an array of length ${xs.length}`);
88
88
  }
89
89
  return xs;
90
90
  };
91
- /**
92
- * Casts an array to `NonEmptyArray<E>` after checking that it has at least one
93
- * element.
94
- *
95
- * `NonEmptyArray<E>` is an alias of `MinLengthArray<1, E>`, so this is the
96
- * length-1 specialization of {@link asMinLengthArray}. Use this instead of
97
- * writing `xs as unknown as NonEmptyArray<E>`: the length is verified at
98
- * runtime, and the original array type (e.g. tuple types) is preserved via
99
- * intersection, so the result also benefits from the structural tuple prefix
100
- * (`xs[0]` without `undefined` under `noUncheckedIndexedAccess`).
101
- *
102
- * @example
103
- *
104
- * ```ts
105
- * const history = Arr.asNonEmptyArray([0, 1, 2, 3]);
106
- *
107
- * const first: number = history[0]; // OK — no `undefined`
108
- *
109
- * // Arr.asNonEmptyArray([]); // throws TypeError
110
- * ```
111
- *
112
- * @template Xs - The input array type (tuple types are preserved).
113
- * @param xs - The array to cast.
114
- * @returns `xs` typed as `NonEmptyArray<Xs[number]> & Xs`.
115
- * @throws {TypeError} If `xs` is empty.
116
- */
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
117
  export const asNonEmptyArray = (xs) => {
118
118
  if (!isMinLengthArray(1, xs)) {
119
119
  throw new TypeError('Expected a non-empty array, got an empty array');
@@ -34,46 +34,46 @@ export function isFixedLengthArray(...args) {
34
34
  }
35
35
  }
36
36
  const hasFixedLength = (length, xs) => xs.length === length;
37
- /**
38
- * Type guard that checks if an array is empty.
39
- *
40
- * @example
41
- *
42
- * ```ts
43
- * const emptyNumbers: readonly number[] = [] as const;
44
- *
45
- * const words = ['Ada', 'Lovelace'] as const;
46
- *
47
- * assert.isTrue(Arr.isEmpty(emptyNumbers));
48
- *
49
- * assert.isFalse(Arr.isEmpty(words));
50
- *
51
- * if (Arr.isEmpty(emptyNumbers)) {
52
- * // `isEmpty` narrows to the branded `FixedLengthArray<0, number>`, so the
53
- * // expected value is annotated with the unbranded type.
54
- * assert.deepStrictEqual<readonly number[]>(emptyNumbers, []);
55
- * }
56
- * ```
57
- */
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
58
  export const isEmpty = (array) => array.length === 0;
59
- /**
60
- * Type guard that checks if an array is non-empty.
61
- *
62
- * @example
63
- *
64
- * ```ts
65
- * const users: readonly Readonly<{ id: number }>[] = [{ id: 1 }] as const;
66
- *
67
- * const emptyUsers: readonly Readonly<{ id: number }>[] = [] as const;
68
- *
69
- * assert.isTrue(Arr.isNonEmpty(users));
70
- *
71
- * assert.isFalse(Arr.isNonEmpty(emptyUsers));
72
- *
73
- * if (Arr.isNonEmpty(users)) {
74
- * assert.deepStrictEqual(users[0], { id: 1 });
75
- * }
76
- * ```
77
- */
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
78
  export const isNonEmpty = (array) => array.length > 0;
79
79
  //# sourceMappingURL=array-utils-length-bounded-array-guard.mjs.map