ts-data-forge 6.4.0 → 6.6.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 (181) hide show
  1. package/README.md +5 -3
  2. package/dist/array/impl/array-utils-element-access.d.mts +5 -5
  3. package/dist/array/impl/array-utils-element-access.mjs +4 -4
  4. package/dist/array/impl/array-utils-iterators.d.mts +1 -1
  5. package/dist/array/impl/array-utils-iterators.mjs +1 -1
  6. package/dist/array/impl/array-utils-modification.d.mts +4 -4
  7. package/dist/array/impl/array-utils-reducing-value.d.mts +5 -5
  8. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
  9. package/dist/array/impl/array-utils-reducing-value.mjs +1 -0
  10. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  11. package/dist/array/impl/array-utils-search.d.mts +8 -8
  12. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  13. package/dist/array/impl/array-utils-set-op.mjs +3 -1
  14. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  15. package/dist/array/impl/array-utils-size.d.mts +1 -1
  16. package/dist/array/impl/array-utils-size.mjs +1 -1
  17. package/dist/array/impl/array-utils-slice-clamped.d.mts +1 -1
  18. package/dist/array/impl/array-utils-slicing.d.mts +3 -3
  19. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  20. package/dist/array/impl/array-utils-validation.d.mts +7 -7
  21. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  22. package/dist/array/impl/array-utils-validation.mjs +22 -12
  23. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  24. package/dist/collections/imap-mapped.d.mts +5 -12
  25. package/dist/collections/imap-mapped.d.mts.map +1 -1
  26. package/dist/collections/imap-mapped.mjs.map +1 -1
  27. package/dist/collections/imap.d.mts +24 -28
  28. package/dist/collections/imap.d.mts.map +1 -1
  29. package/dist/collections/imap.mjs +1 -1
  30. package/dist/collections/imap.mjs.map +1 -1
  31. package/dist/collections/iset-mapped.d.mts +8 -14
  32. package/dist/collections/iset-mapped.d.mts.map +1 -1
  33. package/dist/collections/iset-mapped.mjs.map +1 -1
  34. package/dist/collections/iset.d.mts +9 -23
  35. package/dist/collections/iset.d.mts.map +1 -1
  36. package/dist/collections/iset.mjs +1 -0
  37. package/dist/collections/iset.mjs.map +1 -1
  38. package/dist/entry-point.mjs +1 -0
  39. package/dist/entry-point.mjs.map +1 -1
  40. package/dist/functional/optional/impl/optional-is-optional.d.mts +1 -1
  41. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
  42. package/dist/functional/optional/impl/optional-is-optional.mjs +6 -5
  43. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  44. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
  45. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  46. package/dist/functional/optional/impl/optional-zip.d.mts +1 -1
  47. package/dist/functional/optional/impl/optional-zip.mjs +1 -1
  48. package/dist/functional/result/impl/result-err.d.mts.map +1 -1
  49. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  50. package/dist/functional/result/impl/result-is-result.d.mts +1 -1
  51. package/dist/functional/result/impl/result-is-result.mjs +1 -1
  52. package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
  53. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  54. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +1 -0
  55. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  56. package/dist/functional/result/impl/result-unwrap-throw.mjs +1 -0
  57. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  58. package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
  59. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  60. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts +1 -1
  61. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +1 -1
  62. package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
  63. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  64. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +1 -0
  65. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  66. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +1 -0
  67. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  68. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +1 -0
  69. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  70. package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
  71. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  72. package/dist/guard/has-key.d.mts +3 -1
  73. package/dist/guard/has-key.d.mts.map +1 -1
  74. package/dist/guard/has-key.mjs +6 -2
  75. package/dist/guard/has-key.mjs.map +1 -1
  76. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  77. package/dist/guard/is-non-null-object.mjs +3 -1
  78. package/dist/guard/is-non-null-object.mjs.map +1 -1
  79. package/dist/guard/is-record.d.mts +2 -2
  80. package/dist/guard/is-record.mjs +2 -2
  81. package/dist/guard/is-type.d.mts +15 -15
  82. package/dist/guard/is-type.mjs +15 -15
  83. package/dist/guard/key-is-in.d.mts.map +1 -1
  84. package/dist/guard/key-is-in.mjs +3 -1
  85. package/dist/guard/key-is-in.mjs.map +1 -1
  86. package/dist/index.mjs +1 -0
  87. package/dist/index.mjs.map +1 -1
  88. package/dist/json/json.d.mts +3 -3
  89. package/dist/json/json.mjs +4 -3
  90. package/dist/json/json.mjs.map +1 -1
  91. package/dist/number/branded-types/non-zero-safe-int.mjs +2 -2
  92. package/dist/number/branded-types/positive-safe-int.mjs +1 -1
  93. package/dist/number/branded-types/safe-int.mjs +2 -2
  94. package/dist/number/branded-types/safe-uint.mjs +1 -1
  95. package/dist/number/num.mjs +1 -1
  96. package/dist/object/object.d.mts +36 -8
  97. package/dist/object/object.d.mts.map +1 -1
  98. package/dist/object/object.mjs +28 -6
  99. package/dist/object/object.mjs.map +1 -1
  100. package/dist/others/fast-deep-equal.d.mts +8 -0
  101. package/dist/others/fast-deep-equal.d.mts.map +1 -0
  102. package/dist/others/fast-deep-equal.mjs +72 -0
  103. package/dist/others/fast-deep-equal.mjs.map +1 -0
  104. package/dist/others/index.d.mts +1 -0
  105. package/dist/others/index.d.mts.map +1 -1
  106. package/dist/others/index.mjs +1 -0
  107. package/dist/others/index.mjs.map +1 -1
  108. package/package.json +34 -29
  109. package/src/array/impl/array-utils-creation.test.mts +13 -10
  110. package/src/array/impl/array-utils-element-access.mts +5 -5
  111. package/src/array/impl/array-utils-element-access.test.mts +5 -5
  112. package/src/array/impl/array-utils-iterators.mts +1 -1
  113. package/src/array/impl/array-utils-iterators.test.mts +6 -6
  114. package/src/array/impl/array-utils-modification.mts +4 -4
  115. package/src/array/impl/array-utils-modification.test.mts +12 -12
  116. package/src/array/impl/array-utils-overload-type-error.test.mts +1 -1
  117. package/src/array/impl/array-utils-reducing-value.mts +6 -5
  118. package/src/array/impl/array-utils-reducing-value.test.mts +9 -9
  119. package/src/array/impl/array-utils-search.mts +8 -8
  120. package/src/array/impl/array-utils-search.test.mts +35 -35
  121. package/src/array/impl/array-utils-set-op.mts +1 -0
  122. package/src/array/impl/array-utils-set-op.test.mts +2 -2
  123. package/src/array/impl/array-utils-size.mts +1 -1
  124. package/src/array/impl/array-utils-size.test.mts +1 -1
  125. package/src/array/impl/array-utils-slice-clamped.mts +1 -1
  126. package/src/array/impl/array-utils-slice-clamped.test.mts +5 -5
  127. package/src/array/impl/array-utils-slicing.mts +3 -3
  128. package/src/array/impl/array-utils-slicing.test.mts +5 -5
  129. package/src/array/impl/array-utils-transformation.mts +1 -1
  130. package/src/array/impl/array-utils-transformation.test.mts +53 -53
  131. package/src/array/impl/array-utils-validation.mts +18 -10
  132. package/src/array/impl/array-utils-validation.test.mts +34 -29
  133. package/src/array/impl/array.test.mts +1 -1
  134. package/src/collections/imap-mapped.mts +4 -10
  135. package/src/collections/imap-mapped.test.mts +9 -9
  136. package/src/collections/imap.mts +24 -27
  137. package/src/collections/imap.test.mts +6 -6
  138. package/src/collections/iset-mapped.mts +12 -16
  139. package/src/collections/iset-mapped.test.mts +6 -6
  140. package/src/collections/iset.mts +14 -25
  141. package/src/collections/queue.test.mts +2 -1
  142. package/src/collections/stack.test.mts +3 -3
  143. package/src/functional/optional/impl/optional-is-optional.mts +6 -6
  144. package/src/functional/optional/impl/optional-some.mts +5 -4
  145. package/src/functional/optional/impl/optional-zip.mts +1 -1
  146. package/src/functional/result/impl/result-err.mts +5 -4
  147. package/src/functional/result/impl/result-is-result.mts +1 -1
  148. package/src/functional/result/impl/result-ok.mts +5 -4
  149. package/src/functional/result.test.mts +2 -2
  150. package/src/functional/ternary-result/impl/ternary-result-err.mts +5 -4
  151. package/src/functional/ternary-result/impl/ternary-result-is-ternary-result.mts +1 -1
  152. package/src/functional/ternary-result/impl/ternary-result-ok.mts +5 -4
  153. package/src/functional/ternary-result/impl/ternary-result-warn.mts +6 -5
  154. package/src/guard/has-key.mts +6 -2
  155. package/src/guard/is-error.test.mts +1 -1
  156. package/src/guard/is-non-empty-string.test.mts +1 -1
  157. package/src/guard/is-non-null-object.mts +1 -0
  158. package/src/guard/is-non-null-object.test.mts +4 -3
  159. package/src/guard/is-primitive.test.mts +1 -1
  160. package/src/guard/is-record.mts +2 -2
  161. package/src/guard/is-record.test.mts +2 -2
  162. package/src/guard/is-type.mts +15 -15
  163. package/src/guard/is-type.test.mts +2 -2
  164. package/src/guard/key-is-in.mts +3 -1
  165. package/src/json/json.mts +4 -3
  166. package/src/json/json.test.mts +20 -19
  167. package/src/number/branded-types/non-zero-safe-int.mts +2 -2
  168. package/src/number/branded-types/positive-safe-int.mts +1 -1
  169. package/src/number/branded-types/safe-int.mts +2 -2
  170. package/src/number/branded-types/safe-uint.mts +1 -1
  171. package/src/number/num.mts +1 -1
  172. package/src/object/object.mts +54 -8
  173. package/src/object/object.test.mts +70 -7
  174. package/src/others/cast-mutable.test.mts +3 -3
  175. package/src/others/cast-readonly.test.mts +10 -5
  176. package/src/others/fast-deep-equal.mts +98 -0
  177. package/src/others/fast-deep-equal.test.mts +771 -0
  178. package/src/others/index.mts +1 -0
  179. package/src/others/map-nullable.test.mts +8 -8
  180. package/src/others/memoize-function.test.mts +20 -8
  181. package/src/others/unknown-to-string.test.mts +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"json.mjs","sources":["../../src/json/json.mts"],"sourcesContent":[null],"names":["Result.ok","Result.err","Arr.uniq"],"mappings":"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"}
1
+ {"version":3,"file":"json.mjs","sources":["../../src/json/json.mts"],"sourcesContent":[null],"names":["Result.ok","Result.err","Arr.uniq"],"mappings":"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"}
@@ -4,9 +4,9 @@ const typeNameInMessage = 'a non-zero safe integer';
4
4
  const { MAX_VALUE, MIN_VALUE, abs, add, castType, clamp, div, is, max: max_, min: min_, mul, pow, randomNonZero: random, sub, } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
5
5
  integerOrSafeInteger: 'SafeInteger',
6
6
  nonZero: true,
7
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer
7
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer, ts-data-forge/prefer-as-int
8
8
  MIN_VALUE: Number.MIN_SAFE_INTEGER,
9
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
9
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer, ts-data-forge/prefer-as-int
10
10
  MAX_VALUE: Number.MAX_SAFE_INTEGER,
11
11
  typeNameInMessage,
12
12
  });
@@ -4,7 +4,7 @@ const typeNameInMessage = 'a positive safe integer';
4
4
  const { MAX_VALUE, MIN_VALUE, add, castType, clamp, div, is, max: max_, min: min_, mul, pow, random, sub, } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
5
5
  integerOrSafeInteger: 'SafeInteger',
6
6
  MIN_VALUE: 1,
7
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
7
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer, ts-data-forge/prefer-as-int
8
8
  MAX_VALUE: Number.MAX_SAFE_INTEGER,
9
9
  typeNameInMessage,
10
10
  });
@@ -3,9 +3,9 @@ import { TsDataForgeInternals } from '../refined-number-utils.mjs';
3
3
  const typeNameInMessage = 'a safe integer';
4
4
  const { MAX_VALUE, MIN_VALUE, abs, add, castType, clamp, div, is, max: max_, min: min_, mul, pow, random, sub, } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
5
5
  integerOrSafeInteger: 'SafeInteger',
6
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer
6
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-min-safe-integer, ts-data-forge/prefer-as-int
7
7
  MIN_VALUE: Number.MIN_SAFE_INTEGER,
8
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
8
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer, ts-data-forge/prefer-as-int
9
9
  MAX_VALUE: Number.MAX_SAFE_INTEGER,
10
10
  typeNameInMessage,
11
11
  });
@@ -4,7 +4,7 @@ const typeNameInMessage = 'a non-negative safe integer';
4
4
  const { MAX_VALUE, MIN_VALUE, add, castType, clamp, div, is, max: max_, min: min_, mul, pow, random, sub, } = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger({
5
5
  integerOrSafeInteger: 'SafeInteger',
6
6
  MIN_VALUE: 0,
7
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer
7
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, math/prefer-number-max-safe-integer, ts-data-forge/prefer-as-int
8
8
  MAX_VALUE: Number.MAX_SAFE_INTEGER,
9
9
  typeNameInMessage,
10
10
  });
@@ -282,7 +282,7 @@ var Num;
282
282
  * @param num - The number to round
283
283
  * @returns The rounded integer as an Int branded type
284
284
  */
285
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
285
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion, ts-data-forge/prefer-as-int
286
286
  Num.roundToInt = (num) => Math.trunc(num + 0.5);
287
287
  /**
288
288
  * Creates a reusable rounding function with a fixed precision.
@@ -16,20 +16,20 @@ export declare namespace Obj {
16
16
  * @example
17
17
  *
18
18
  * ```ts
19
- * const obj1 = { name: 'Alice', age: 30 };
19
+ * const obj1 = { name: 'Alice', age: 30 } as const;
20
20
  *
21
- * const obj2 = { name: 'Alice', age: 30 };
21
+ * const obj2 = { name: 'Alice', age: 30 } as const;
22
22
  *
23
- * const obj3 = { name: 'Alice', age: 31 };
23
+ * const obj3 = { name: 'Alice', age: 31 } as const;
24
24
  *
25
25
  * assert.isTrue(Obj.shallowEq(obj1, obj2));
26
26
  *
27
27
  * assert.isFalse(Obj.shallowEq(obj1, obj3));
28
28
  *
29
29
  * // Custom equality function
30
- * const obj4 = { value: 1 };
30
+ * const obj4 = { value: 1 } as const;
31
31
  *
32
- * const obj5 = { value: 1.00001 };
32
+ * const obj5 = { value: 1.00001 } as const;
33
33
  *
34
34
  * const closeEnough = (a: unknown, b: unknown): boolean => {
35
35
  * if (typeof a === 'number' && typeof b === 'number') {
@@ -67,7 +67,7 @@ export declare namespace Obj {
67
67
  * email: 'bob@example.com',
68
68
  * password: 'secret',
69
69
  * role: 'admin',
70
- * };
70
+ * } as const;
71
71
  *
72
72
  * // Direct usage
73
73
  * const publicInfo = Obj.pick(user, ['id', 'name', 'role']);
@@ -113,7 +113,7 @@ export declare namespace Obj {
113
113
  * email: 'charlie@example.com',
114
114
  * password: 'secret123',
115
115
  * internalNote: 'VIP customer',
116
- * };
116
+ * } as const;
117
117
  *
118
118
  * // Direct usage - remove sensitive fields
119
119
  * const safeUser = Obj.omit(user, ['password', 'internalNote']);
@@ -176,7 +176,7 @@ export declare namespace Obj {
176
176
  * const dynamicEntries: readonly (readonly ['x' | 'y', number])[] = [
177
177
  * ['x', 10],
178
178
  * ['y', 20],
179
- * ];
179
+ * ] as const;
180
180
  *
181
181
  * const obj2 = Obj.fromEntries(dynamicEntries);
182
182
  *
@@ -211,7 +211,35 @@ export declare namespace Obj {
211
211
  type ValuesOfEntries<Entries extends readonly (readonly [PropertyKey, unknown])[]> = ValuesOfEntriesImpl<never, Entries, RecursionLimit>;
212
212
  type ValuesOfEntriesImpl<K, Entries extends readonly (readonly [PropertyKey, unknown])[], RemainingNumRecursions extends number> = TypeEq<RemainingNumRecursions, 0> extends true ? K : TypeEq<Entries['length'], 0> extends true ? K : ValuesOfEntriesImpl<K | Entries[0][1], List.Tail<Entries>, Decrement<RemainingNumRecursions>>;
213
213
  type PartialIfKeyIsUnion<K, T> = IsUnion<K> extends true ? Partial<T> : T;
214
+ /** Merges two object types where keys in B override keys in A. */
215
+ type MergeTwo<A extends UnknownRecord, B extends UnknownRecord> = Readonly<{
216
+ [K in keyof A | keyof B]: K extends keyof B ? B[K] : K extends keyof A ? A[K] : never;
217
+ }>;
218
+ /** Sequentially merges a tuple of object types from left to right. */
219
+ type MergeAll<Records extends readonly UnknownRecord[], Acc extends UnknownRecord = {}> = Records extends readonly [
220
+ infer First extends UnknownRecord,
221
+ ...infer Rest extends readonly UnknownRecord[]
222
+ ] ? MergeAll<Rest, MergeTwo<Acc, First>> : Acc;
214
223
  }
224
+ /**
225
+ * Merges multiple records into a single record using `Object.assign`.
226
+ * Later records override properties from earlier records with the same key.
227
+ *
228
+ * @example
229
+ *
230
+ * ```ts
231
+ * const a = { a: 0, b: 0 } as const;
232
+ * const b = { b: 1, c: 0 } as const;
233
+ *
234
+ * const result = Obj.merge(a, b);
235
+ *
236
+ * assert.deepStrictEqual(result, { a: 0, b: 1, c: 0 });
237
+ * ```
238
+ *
239
+ * @param records - The records to merge
240
+ * @returns A new record with all properties merged
241
+ */
242
+ export const merge: <const Records extends readonly UnknownRecord[]>(...records: Records) => TsDataForgeInternals.MergeAll<Records>;
215
243
  export {};
216
244
  }
217
245
  //# sourceMappingURL=object.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.mts","sourceRoot":"","sources":["../../src/object/object.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object.d.mts","sourceRoot":"","sources":["../../src/object/object.mts"],"names":[],"mappings":"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"}
@@ -17,20 +17,20 @@ var Obj;
17
17
  * @example
18
18
  *
19
19
  * ```ts
20
- * const obj1 = { name: 'Alice', age: 30 };
20
+ * const obj1 = { name: 'Alice', age: 30 } as const;
21
21
  *
22
- * const obj2 = { name: 'Alice', age: 30 };
22
+ * const obj2 = { name: 'Alice', age: 30 } as const;
23
23
  *
24
- * const obj3 = { name: 'Alice', age: 31 };
24
+ * const obj3 = { name: 'Alice', age: 31 } as const;
25
25
  *
26
26
  * assert.isTrue(Obj.shallowEq(obj1, obj2));
27
27
  *
28
28
  * assert.isFalse(Obj.shallowEq(obj1, obj3));
29
29
  *
30
30
  * // Custom equality function
31
- * const obj4 = { value: 1 };
31
+ * const obj4 = { value: 1 } as const;
32
32
  *
33
- * const obj5 = { value: 1.00001 };
33
+ * const obj5 = { value: 1.00001 } as const;
34
34
  *
35
35
  * const closeEnough = (a: unknown, b: unknown): boolean => {
36
36
  * if (typeof a === 'number' && typeof b === 'number') {
@@ -53,6 +53,7 @@ var Obj;
53
53
  Obj.shallowEq = (a, b, eq = Object.is) => {
54
54
  const aEntries = Object.entries(a);
55
55
  const bEntries = Object.entries(b);
56
+ // eslint-disable-next-line ts-data-forge/prefer-arr-is-array-of-length
56
57
  if (aEntries.length !== bEntries.length)
57
58
  return false;
58
59
  return aEntries.every(([k, v]) => eq(b[k], v));
@@ -127,7 +128,7 @@ var Obj;
127
128
  * const dynamicEntries: readonly (readonly ['x' | 'y', number])[] = [
128
129
  * ['x', 10],
129
130
  * ['y', 20],
130
- * ];
131
+ * ] as const;
131
132
  *
132
133
  * const obj2 = Obj.fromEntries(dynamicEntries);
133
134
  *
@@ -141,6 +142,27 @@ var Obj;
141
142
  Obj.fromEntries = (entries) =>
142
143
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
143
144
  Object.fromEntries(entries);
145
+ /**
146
+ * Merges multiple records into a single record using `Object.assign`.
147
+ * Later records override properties from earlier records with the same key.
148
+ *
149
+ * @example
150
+ *
151
+ * ```ts
152
+ * const a = { a: 0, b: 0 } as const;
153
+ * const b = { b: 1, c: 0 } as const;
154
+ *
155
+ * const result = Obj.merge(a, b);
156
+ *
157
+ * assert.deepStrictEqual(result, { a: 0, b: 1, c: 0 });
158
+ * ```
159
+ *
160
+ * @param records - The records to merge
161
+ * @returns A new record with all properties merged
162
+ */
163
+ Obj.merge = (...records) =>
164
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
165
+ Object.fromEntries(records.flatMap((r) => Object.entries(r)));
144
166
  })(Obj || (Obj = {}));
145
167
 
146
168
  export { Obj };
@@ -1 +1 @@
1
- {"version":3,"file":"object.mjs","sources":["../../src/object/object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;AAOG;AACG,IAAW;AAAjB,CAAA,UAAiB,GAAG,EAAA;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;IACU,GAAA,CAAA,SAAS,GAAG,CACvB,CAAgB,EAChB,CAAgB,EAChB,EAAA,GAA0C,MAAM,CAAC,EAAE,KACxC;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAElC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAErD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,IAAA,CAAC;IAyDD,SAAgB,IAAI,CAIlB,GAAG,IAA8D,EAAA;AAIjE,QAAA,QAAQ,IAAI,CAAC,MAAM;YACjB,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;AAE3B,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAU,IAAI,CAAC;gBAEtC;;AAEE,gBAAA,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAClD;YAEd;YAEA,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;gBAEnB,OAAO,CAAC,MAAS,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;YAC1C;;IAEJ;AA5BgB,IAAA,GAAA,CAAA,IAAI,OA4BnB;IAyDD,SAAgB,IAAI,CAIlB,GAAG,IAEwC,EAAA;AAI3C,QAAA,QAAQ,IAAI,CAAC,MAAM;YACjB,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;AAE3B,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAU,IAAI,CAAC;gBAEtC;;AAEE,gBAAA,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnD;YAEd;YAEA,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;gBAEnB,OAAO,CAA2B,MAAU,KAAI;;oBAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAA6B,CAGxD;AAED,oBAAA,OAAO,MAAM;AACf,gBAAA,CAAC;YACH;;IAEJ;AAtCgB,IAAA,GAAA,CAAA,IAAI,OAsCnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;AACU,IAAA,GAAA,CAAA,WAAW,GAAG,CAGzB,OAAgB;;AAWhB,IAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAU;AA4ExC,CAAC,EApXgB,GAAG,KAAH,GAAG,GAAA,EAAA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"object.mjs","sources":["../../src/object/object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;AAOG;AACG,IAAW;AAAjB,CAAA,UAAiB,GAAG,EAAA;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;IACU,GAAA,CAAA,SAAS,GAAG,CACvB,CAAgB,EAChB,CAAgB,EAChB,EAAA,GAA0C,MAAM,CAAC,EAAE,KACxC;QACX,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;;AAGlC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAErD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,IAAA,CAAC;IAyDD,SAAgB,IAAI,CAIlB,GAAG,IAA8D,EAAA;AAIjE,QAAA,QAAQ,IAAI,CAAC,MAAM;YACjB,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;AAE3B,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAU,IAAI,CAAC;gBAEtC;;AAEE,gBAAA,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAClD;YAEd;YAEA,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;gBAEnB,OAAO,CAAC,MAAS,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;YAC1C;;IAEJ;AA5BgB,IAAA,GAAA,CAAA,IAAI,OA4BnB;IAyDD,SAAgB,IAAI,CAIlB,GAAG,IAEwC,EAAA;AAI3C,QAAA,QAAQ,IAAI,CAAC,MAAM;YACjB,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;AAE3B,gBAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAU,IAAI,CAAC;gBAEtC;;AAEE,gBAAA,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnD;YAEd;YAEA,KAAK,CAAC,EAAE;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;gBAEnB,OAAO,CAA2B,MAAU,KAAI;;oBAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAA6B,CAGxD;AAED,oBAAA,OAAO,MAAM;AACf,gBAAA,CAAC;YACH;;IAEJ;AAtCgB,IAAA,GAAA,CAAA,IAAI,OAsCnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;AACU,IAAA,GAAA,CAAA,WAAW,GAAG,CAGzB,OAAgB;;AAWhB,IAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAU;AAkGtC;;;;;;;;;;;;;;;;;AAiBG;AACU,IAAA,GAAA,CAAA,KAAK,GAAG,CACnB,GAAG,OAAgB;;IAGnB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAU;AAC1E,CAAC,EAlagB,GAAG,KAAH,GAAG,GAAA,EAAA,CAAA,CAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The fastest deep equal with ES6 Map, Set and Typed arrays support.
3
+ * Checks equality of Date and RegExp objects by value.
4
+ *
5
+ * Forked from https://github.com/epoberezkin/fast-deep-equal/blob/v3.1.3/src/index.jst
6
+ */
7
+ export declare const fastDeepEqual: <T>(a: T, b: T) => boolean;
8
+ //# sourceMappingURL=fast-deep-equal.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-deep-equal.d.mts","sourceRoot":"","sources":["../../src/others/fast-deep-equal.mts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAG,GAAG,CAAC,EAAE,GAAG,CAAC,KAAG,OAqF9C,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { isMap, isSet, isTypedArray, isRegExp } from '@sindresorhus/is';
2
+ import { hasKey } from '../guard/has-key.mjs';
3
+ import { isRecord } from '../guard/is-record.mjs';
4
+
5
+ /* eslint-disable ts-data-forge/prefer-arr-is-array-of-length */
6
+ /* eslint-disable ts-data-forge/prefer-arr-is-array */
7
+ /**
8
+ * The fastest deep equal with ES6 Map, Set and Typed arrays support.
9
+ * Checks equality of Date and RegExp objects by value.
10
+ *
11
+ * Forked from https://github.com/epoberezkin/fast-deep-equal/blob/v3.1.3/src/index.jst
12
+ */
13
+ const fastDeepEqual = (a, b) => {
14
+ if (a === b) {
15
+ return true;
16
+ }
17
+ if (typeof a !== typeof b) {
18
+ return false;
19
+ }
20
+ if (isRecord(a)) {
21
+ if (!isRecord(b)) {
22
+ return false;
23
+ }
24
+ if (a.constructor !== b.constructor) {
25
+ return false;
26
+ }
27
+ if (Array.isArray(a)) {
28
+ return (Array.isArray(b) &&
29
+ a.length === b.length &&
30
+ a.every((ai, index) => fastDeepEqual(ai, b[index])));
31
+ }
32
+ if (isMap(a)) {
33
+ return (isMap(b) &&
34
+ a.size === b.size &&
35
+ Array.from(a.entries()).every(([key, value]) => b.has(key) && fastDeepEqual(value, b.get(key))));
36
+ }
37
+ if (isSet(a)) {
38
+ return (isSet(b) &&
39
+ a.size === b.size &&
40
+ Array.from(a.entries()).every(([value]) => b.has(value)));
41
+ }
42
+ if (isTypedArray(a)) {
43
+ return (isTypedArray(b) &&
44
+ a.length === b.length &&
45
+ a.every((value, index) => value === b[index]));
46
+ }
47
+ if (isRegExp(a)) {
48
+ return isRegExp(b) && a.source === b.source && a.flags === b.flags;
49
+ }
50
+ if (a.valueOf !== Object.prototype.valueOf) {
51
+ return a.valueOf() === b.valueOf();
52
+ }
53
+ if (a.toString !== Object.prototype.toString) {
54
+ return a.toString() === b.toString();
55
+ }
56
+ const aKeys = Object.keys(a);
57
+ const bKeys = Object.keys(b);
58
+ return (aKeys.length === bKeys.length &&
59
+ aKeys.every((key) => hasKey(b, key) &&
60
+ // React-specific: avoid traversing React elements' _owner.
61
+ // _owner contains circular references
62
+ // and is not needed when comparing the actual elements (and not their owners)
63
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
64
+ !(key === '_owner' && a['$$typeof']) &&
65
+ fastDeepEqual(a[key], b[key])));
66
+ }
67
+ // true if both NaN, false otherwise
68
+ return Number.isNaN(a) && Number.isNaN(b);
69
+ };
70
+
71
+ export { fastDeepEqual };
72
+ //# sourceMappingURL=fast-deep-equal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-deep-equal.mjs","sources":["../../src/others/fast-deep-equal.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export * from './cast-mutable.mjs';
2
2
  export * from './cast-readonly.mjs';
3
3
  export * from './debounce-function.mjs';
4
+ export * from './fast-deep-equal.mjs';
4
5
  export * from './if-then.mjs';
5
6
  export * from './map-nullable.mjs';
6
7
  export * from './memoize-function.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/others/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/others/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { castDeepMutable, castMutable } from './cast-mutable.mjs';
2
2
  export { castDeepReadonly, castReadonly } from './cast-readonly.mjs';
3
3
  export { debounce } from './debounce-function.mjs';
4
+ export { fastDeepEqual } from './fast-deep-equal.mjs';
4
5
  export { ifThen } from './if-then.mjs';
5
6
  export { mapNullable } from './map-nullable.mjs';
6
7
  export { memoizeFunction } from './memoize-function.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-data-forge",
3
- "version": "6.4.0",
3
+ "version": "6.6.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript",
@@ -41,8 +41,12 @@
41
41
  "check-all": "tsx ./scripts/cmd/check-all.mts",
42
42
  "clean": "pnpm run /clean:.*/",
43
43
  "clean:logs": "npx rimraf ./*.log",
44
- "codemod": "run-s codemod:all fmt",
45
- "codemod:all": "convert-to-readonly '{src,scripts,samples,test}/**/*.{mts,tsx}'",
44
+ "codemod": "run-s codemod:uncommitted:as-const fmt codemod:uncommitted:readonly fmt",
45
+ "codemod:full": "run-s codemod:full:as-const fmt codemod:full:readonly fmt",
46
+ "codemod:full:as-const": "append-as-const '{src,scripts,samples,test}/**/*.{mts,tsx}'",
47
+ "codemod:full:readonly": "convert-to-readonly '{src,scripts,samples,test}/**/*.{mts,tsx}'",
48
+ "codemod:uncommitted:as-const": "append-as-const --uncommitted '{src,scripts,samples,test}/**/*.{mts,tsx}'",
49
+ "codemod:uncommitted:readonly": "convert-to-readonly --uncommitted '{src,scripts,samples,test}/**/*.{mts,tsx}'",
46
50
  "cspell": "cspell \"**\" --gitignore --gitignore-root ./ --no-progress",
47
51
  "doc": "tsx ./scripts/cmd/gen-docs.mts",
48
52
  "doc:embed": "tsx ./scripts/cmd/embed-examples.mts",
@@ -84,7 +88,7 @@
84
88
  "devDependencies": {
85
89
  "@emotion/react": "11.14.0",
86
90
  "@emotion/styled": "11.14.1",
87
- "@mui/material": "7.3.7",
91
+ "@mui/material": "7.3.9",
88
92
  "@rollup/plugin-replace": "6.0.3",
89
93
  "@rollup/plugin-strip": "3.0.4",
90
94
  "@rollup/plugin-typescript": "12.3.0",
@@ -92,45 +96,46 @@
92
96
  "@semantic-release/commit-analyzer": "13.0.1",
93
97
  "@semantic-release/exec": "7.1.0",
94
98
  "@semantic-release/git": "10.0.1",
95
- "@semantic-release/github": "12.0.2",
96
- "@semantic-release/npm": "13.1.3",
99
+ "@semantic-release/github": "12.0.6",
100
+ "@semantic-release/npm": "13.1.5",
97
101
  "@semantic-release/release-notes-generator": "14.1.0",
98
- "@types/node": "25.0.10",
99
- "@types/react": "19.2.9",
100
- "@vitest/browser-playwright": "4.0.17",
101
- "@vitest/coverage-v8": "4.0.17",
102
- "@vitest/ui": "4.0.17",
103
- "conventional-changelog-conventionalcommits": "9.1.0",
104
- "cspell": "9.6.2",
105
- "dedent": "^1.7.1",
106
- "eslint": "9.39.2",
107
- "eslint-config-typed": "4.6.0",
108
- "github-settings-as-code": "1.0.11",
109
- "immer": "11.1.3",
102
+ "@types/node": "25.4.0",
103
+ "@types/react": "19.2.14",
104
+ "@vitest/browser-playwright": "4.0.18",
105
+ "@vitest/coverage-v8": "4.0.18",
106
+ "@vitest/ui": "4.0.18",
107
+ "conventional-changelog-conventionalcommits": "9.3.0",
108
+ "cspell": "9.7.0",
109
+ "dedent": "^1.7.2",
110
+ "eslint": "9.39.3",
111
+ "eslint-config-typed": "4.7.4",
112
+ "github-settings-as-code": "1.2.0",
113
+ "immer": "11.1.4",
110
114
  "jiti": "2.6.1",
111
115
  "markdownlint": "0.40.0",
112
- "markdownlint-cli2": "0.20.0",
116
+ "markdownlint-cli2": "0.21.0",
113
117
  "npm-run-all2": "8.0.4",
114
- "playwright": "1.58.0",
118
+ "playwright": "1.58.2",
115
119
  "prettier": "3.8.1",
116
120
  "prettier-plugin-organize-imports": "4.3.0",
117
- "prettier-plugin-packagejson": "3.0.0",
118
- "rollup": "4.57.0",
119
- "semantic-release": "25.0.2",
120
- "ts-codemod-lib": "^1.1.3",
121
- "ts-repo-utils": "8.1.0",
121
+ "prettier-plugin-packagejson": "3.0.2",
122
+ "react": "^19.2.4",
123
+ "rollup": "4.59.0",
124
+ "semantic-release": "25.0.3",
125
+ "ts-codemod-lib": "^2.1.1",
126
+ "ts-repo-utils": "9.0.0",
122
127
  "tslib": "2.8.1",
123
128
  "tsx": "4.21.0",
124
- "typedoc": "0.28.16",
125
- "typedoc-github-theme": "0.3.1",
129
+ "typedoc": "0.28.17",
130
+ "typedoc-github-theme": "0.4.0",
126
131
  "typescript": "5.9.3",
127
132
  "vite": "7.3.1",
128
- "vitest": "4.0.17"
133
+ "vitest": "4.0.18"
129
134
  },
130
135
  "peerDependencies": {
131
136
  "typescript": ">=4.8"
132
137
  },
133
- "packageManager": "pnpm@10.28.2",
138
+ "packageManager": "pnpm@10.32.1",
134
139
  "engines": {
135
140
  "node": ">=20.11.0",
136
141
  "pnpm": ">=8.0.0"
@@ -137,14 +137,15 @@ describe('Arr creations', () => {
137
137
  });
138
138
 
139
139
  test('fixed length with object (shallow copy)', () => {
140
- const obj = { id: 1 };
140
+ const obj = { id: 1 } as const;
141
141
 
142
142
  const result = create(2, obj);
143
143
 
144
144
  // transformer-ignore-next-line
145
- expectType<typeof result, readonly [{ id: number }, { id: number }]>(
146
- '~=',
147
- );
145
+ expectType<
146
+ typeof result,
147
+ readonly [Readonly<{ id: 1 }>, Readonly<{ id: 1 }>]
148
+ >('~=');
148
149
 
149
150
  assert.deepStrictEqual(result, [obj, obj]);
150
151
 
@@ -182,7 +183,7 @@ describe('Arr creations', () => {
182
183
  });
183
184
 
184
185
  test('should create array with object values', () => {
185
- const obj = { a: 1 };
186
+ const obj = { a: 1 } as const;
186
187
 
187
188
  const result = create(2, obj);
188
189
 
@@ -222,16 +223,19 @@ describe('Arr creations', () => {
222
223
  });
223
224
 
224
225
  test('should create a shallow copy of an array of objects', () => {
225
- const obj1 = { id: 1 };
226
+ const obj1 = { id: 1 } as const;
226
227
 
227
- const obj2 = { id: 2 };
228
+ const obj2 = { id: 2 } as const;
228
229
 
229
230
  const original = [obj1, obj2] as const;
230
231
 
231
232
  const copied = copy(original);
232
233
 
233
234
  // transformer-ignore-next-line
234
- expectType<typeof copied, readonly [{ id: number }, { id: number }]>('=');
235
+ expectType<
236
+ typeof copied,
237
+ readonly [Readonly<{ id: 1 }>, Readonly<{ id: 2 }>]
238
+ >('=');
235
239
 
236
240
  assert.deepStrictEqual(copied, original);
237
241
 
@@ -766,8 +770,7 @@ describe('Arr creations', () => {
766
770
 
767
771
  test('should handle async generator with delays', async () => {
768
772
  const result = await generateAsync<number>(async function* () {
769
- // eslint-disable-next-line functional/no-let
770
- for (let i = 0; i < 3; i++) {
773
+ for (const i of range(0, 3)) {
771
774
  // eslint-disable-next-line no-await-in-loop
772
775
  await new Promise<void>((resolve) => {
773
776
  setTimeout(resolve, 0);
@@ -6,7 +6,7 @@ import { Optional, pipe } from '../../functional/index.mjs';
6
6
  * @example
7
7
  *
8
8
  * ```ts
9
- * const letters: readonly string[] = ['a', 'b', 'c'];
9
+ * const letters: readonly string[] = ['a', 'b', 'c'] as const;
10
10
  *
11
11
  * const two = Arr.at(letters, 1);
12
12
  *
@@ -64,9 +64,9 @@ export function at<E>(
64
64
  * @example
65
65
  *
66
66
  * ```ts
67
- * const users = [{ id: 1 }, { id: 2 }];
67
+ * const users = [{ id: 1 }, { id: 2 }] as const;
68
68
  *
69
- * const empty: readonly Readonly<{ id: number }>[] = [];
69
+ * const empty: readonly Readonly<{ id: number }>[] = [] as const;
70
70
  *
71
71
  * const first = Arr.head(users);
72
72
  *
@@ -95,9 +95,9 @@ export const head = <const Ar extends readonly unknown[]>(
95
95
  * @example
96
96
  *
97
97
  * ```ts
98
- * const queue = ['first', 'second'];
98
+ * const queue = ['first', 'second'] as const;
99
99
  *
100
- * const emptyQueue: readonly string[] = [];
100
+ * const emptyQueue: readonly string[] = [] as const;
101
101
  *
102
102
  * const lastValue = Arr.last(queue);
103
103
  *
@@ -6,7 +6,7 @@ import { at, head, last } from './array-utils-element-access.mjs';
6
6
  describe('Arr element access', () => {
7
7
  describe(at, () => {
8
8
  test('should handle very large positive indices', () => {
9
- const array = [1, 2, 3];
9
+ const array = [1, 2, 3] as readonly number[];
10
10
 
11
11
  const result = at(array, asUint32(1000));
12
12
 
@@ -14,7 +14,7 @@ describe('Arr element access', () => {
14
14
  });
15
15
 
16
16
  test('should handle very large negative indices', () => {
17
- const array = [1, 2, 3];
17
+ const array = [1, 2, 3] as readonly number[];
18
18
 
19
19
  const result = at(array, asInt32(-1000));
20
20
 
@@ -22,7 +22,7 @@ describe('Arr element access', () => {
22
22
  });
23
23
 
24
24
  test('should work with valid indices', () => {
25
- const array = [10, 20, 30];
25
+ const array = [10, 20, 30] as const;
26
26
 
27
27
  const result = at(array, 1);
28
28
 
@@ -62,7 +62,7 @@ describe('Arr element access', () => {
62
62
  });
63
63
 
64
64
  test('case 2', () => {
65
- const xs: MutableNonEmptyArray<number> = [1, 2, 3];
65
+ const xs: MutableNonEmptyArray<number> = [1, 2, 3] as const;
66
66
 
67
67
  const h = head(xs);
68
68
 
@@ -132,7 +132,7 @@ describe('Arr element access', () => {
132
132
  });
133
133
 
134
134
  test('case 2', () => {
135
- const xs: MutableNonEmptyArray<number> = [1, 2, 3];
135
+ const xs: MutableNonEmptyArray<number> = [1, 2, 3] as const;
136
136
 
137
137
  const l = last(xs);
138
138
 
@@ -37,7 +37,7 @@ export const entries = function* <E>(
37
37
  * @example
38
38
  *
39
39
  * ```ts
40
- * const players = ['Ada', 'Grace', 'Alan'];
40
+ * const players = ['Ada', 'Grace', 'Alan'] as readonly string[];
41
41
  *
42
42
  * const valueList = Array.from(Arr.values(players));
43
43
  *