ts-fortress 12.1.0 → 12.1.2

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 (214) hide show
  1. package/README.md +4 -4
  2. package/dist/array/array.mjs +44 -49
  3. package/dist/array/array.mjs.map +1 -1
  4. package/dist/array/bounded-length-array.mjs +47 -50
  5. package/dist/array/bounded-length-array.mjs.map +1 -1
  6. package/dist/array/bounded-length-tuple.mjs +70 -75
  7. package/dist/array/bounded-length-tuple.mjs.map +1 -1
  8. package/dist/array/build-type.mjs +51 -40
  9. package/dist/array/build-type.mjs.map +1 -1
  10. package/dist/array/fixed-length-array.mjs +38 -43
  11. package/dist/array/fixed-length-array.mjs.map +1 -1
  12. package/dist/array/fixed-length-tuple.mjs +64 -75
  13. package/dist/array/fixed-length-tuple.mjs.map +1 -1
  14. package/dist/array/index.mjs +12 -12
  15. package/dist/array/index.mjs.map +1 -1
  16. package/dist/array/max-length-array.mjs +40 -46
  17. package/dist/array/max-length-array.mjs.map +1 -1
  18. package/dist/array/max-length-tuple.mjs +62 -71
  19. package/dist/array/max-length-tuple.mjs.map +1 -1
  20. package/dist/array/min-length-array.mjs +45 -48
  21. package/dist/array/min-length-array.mjs.map +1 -1
  22. package/dist/array/min-length-tuple.mjs +61 -68
  23. package/dist/array/min-length-tuple.mjs.map +1 -1
  24. package/dist/array/non-empty-array.mjs +51 -53
  25. package/dist/array/non-empty-array.mjs.map +1 -1
  26. package/dist/array/tuple.mjs +67 -72
  27. package/dist/array/tuple.mjs.map +1 -1
  28. package/dist/brand/brand.mjs +49 -51
  29. package/dist/brand/brand.mjs.map +1 -1
  30. package/dist/brand/branded-number.mjs +13 -18
  31. package/dist/brand/branded-number.mjs.map +1 -1
  32. package/dist/brand/branded-string.mjs +13 -18
  33. package/dist/brand/branded-string.mjs.map +1 -1
  34. package/dist/brand/index.mjs +4 -4
  35. package/dist/brand/index.mjs.map +1 -1
  36. package/dist/compose/index.mjs +3 -3
  37. package/dist/compose/index.mjs.map +1 -1
  38. package/dist/compose/intersection.mjs +91 -80
  39. package/dist/compose/intersection.mjs.map +1 -1
  40. package/dist/compose/union.mjs +157 -132
  41. package/dist/compose/union.mjs.map +1 -1
  42. package/dist/constraints/index.mjs +2 -2
  43. package/dist/constraints/index.mjs.map +1 -1
  44. package/dist/constraints/with-constraints.mjs +47 -30
  45. package/dist/constraints/with-constraints.mjs.map +1 -1
  46. package/dist/entry-point.mjs +13 -88
  47. package/dist/entry-point.mjs.map +1 -1
  48. package/dist/enum/enum.mjs +44 -51
  49. package/dist/enum/enum.mjs.map +1 -1
  50. package/dist/enum/index.mjs +6 -6
  51. package/dist/enum/index.mjs.map +1 -1
  52. package/dist/enum/int-range-inclusive.mjs +53 -57
  53. package/dist/enum/int-range-inclusive.mjs.map +1 -1
  54. package/dist/enum/int-range.mjs +53 -57
  55. package/dist/enum/int-range.mjs.map +1 -1
  56. package/dist/enum/uint-range-inclusive.mjs +53 -57
  57. package/dist/enum/uint-range-inclusive.mjs.map +1 -1
  58. package/dist/enum/uint-range.mjs +53 -57
  59. package/dist/enum/uint-range.mjs.map +1 -1
  60. package/dist/index.mjs +12 -88
  61. package/dist/index.mjs.map +1 -1
  62. package/dist/other-types/index.mjs +8 -8
  63. package/dist/other-types/index.mjs.map +1 -1
  64. package/dist/other-types/literal.mjs +11 -11
  65. package/dist/other-types/literal.mjs.map +1 -1
  66. package/dist/other-types/map.mjs +74 -82
  67. package/dist/other-types/map.mjs.map +1 -1
  68. package/dist/other-types/recursion.mjs +210 -71
  69. package/dist/other-types/recursion.mjs.map +1 -1
  70. package/dist/other-types/refine.mjs +31 -31
  71. package/dist/other-types/refine.mjs.map +1 -1
  72. package/dist/other-types/set.mjs +54 -58
  73. package/dist/other-types/set.mjs.map +1 -1
  74. package/dist/other-types/template-literal.mjs +111 -43
  75. package/dist/other-types/template-literal.mjs.map +1 -1
  76. package/dist/other-types/unknown.mjs +13 -18
  77. package/dist/other-types/unknown.mjs.map +1 -1
  78. package/dist/predefined/brand/index.mjs +3 -29
  79. package/dist/predefined/brand/index.mjs.map +1 -1
  80. package/dist/predefined/brand/number/finite-number.mjs +12 -17
  81. package/dist/predefined/brand/number/finite-number.mjs.map +1 -1
  82. package/dist/predefined/brand/number/index.mjs +23 -23
  83. package/dist/predefined/brand/number/index.mjs.map +1 -1
  84. package/dist/predefined/brand/number/int.mjs +12 -17
  85. package/dist/predefined/brand/number/int.mjs.map +1 -1
  86. package/dist/predefined/brand/number/int16.mjs +24 -29
  87. package/dist/predefined/brand/number/int16.mjs.map +1 -1
  88. package/dist/predefined/brand/number/int32.mjs +20 -25
  89. package/dist/predefined/brand/number/int32.mjs.map +1 -1
  90. package/dist/predefined/brand/number/negative-finite-number.mjs +12 -17
  91. package/dist/predefined/brand/number/negative-finite-number.mjs.map +1 -1
  92. package/dist/predefined/brand/number/negative-int.mjs +21 -26
  93. package/dist/predefined/brand/number/negative-int.mjs.map +1 -1
  94. package/dist/predefined/brand/number/negative-safe-int.mjs +22 -27
  95. package/dist/predefined/brand/number/negative-safe-int.mjs.map +1 -1
  96. package/dist/predefined/brand/number/non-negative-finite-number.mjs +12 -17
  97. package/dist/predefined/brand/number/non-negative-finite-number.mjs.map +1 -1
  98. package/dist/predefined/brand/number/non-positive-finite-number.mjs +12 -17
  99. package/dist/predefined/brand/number/non-positive-finite-number.mjs.map +1 -1
  100. package/dist/predefined/brand/number/non-positive-int.mjs +12 -17
  101. package/dist/predefined/brand/number/non-positive-int.mjs.map +1 -1
  102. package/dist/predefined/brand/number/non-positive-safe-int.mjs +21 -26
  103. package/dist/predefined/brand/number/non-positive-safe-int.mjs.map +1 -1
  104. package/dist/predefined/brand/number/non-zero-finite-number.mjs +12 -17
  105. package/dist/predefined/brand/number/non-zero-finite-number.mjs.map +1 -1
  106. package/dist/predefined/brand/number/non-zero-int.mjs +12 -17
  107. package/dist/predefined/brand/number/non-zero-int.mjs.map +1 -1
  108. package/dist/predefined/brand/number/non-zero-safe-int.mjs +12 -17
  109. package/dist/predefined/brand/number/non-zero-safe-int.mjs.map +1 -1
  110. package/dist/predefined/brand/number/positive-finite-number.mjs +20 -25
  111. package/dist/predefined/brand/number/positive-finite-number.mjs.map +1 -1
  112. package/dist/predefined/brand/number/positive-int.mjs +21 -26
  113. package/dist/predefined/brand/number/positive-int.mjs.map +1 -1
  114. package/dist/predefined/brand/number/positive-safe-int.mjs +22 -27
  115. package/dist/predefined/brand/number/positive-safe-int.mjs.map +1 -1
  116. package/dist/predefined/brand/number/safe-int.mjs +12 -17
  117. package/dist/predefined/brand/number/safe-int.mjs.map +1 -1
  118. package/dist/predefined/brand/number/safe-uint.mjs +21 -26
  119. package/dist/predefined/brand/number/safe-uint.mjs.map +1 -1
  120. package/dist/predefined/brand/number/uint.mjs +20 -25
  121. package/dist/predefined/brand/number/uint.mjs.map +1 -1
  122. package/dist/predefined/brand/number/uint16.mjs +24 -29
  123. package/dist/predefined/brand/number/uint16.mjs.map +1 -1
  124. package/dist/predefined/brand/number/uint32.mjs +22 -27
  125. package/dist/predefined/brand/number/uint32.mjs.map +1 -1
  126. package/dist/predefined/brand/string/email.mjs +22 -21
  127. package/dist/predefined/brand/string/email.mjs.map +1 -1
  128. package/dist/predefined/brand/string/index.mjs +7 -7
  129. package/dist/predefined/brand/string/index.mjs.map +1 -1
  130. package/dist/predefined/brand/string/iso-8601.mjs +79 -64
  131. package/dist/predefined/brand/string/iso-8601.mjs.map +1 -1
  132. package/dist/predefined/brand/string/json-string.mjs +24 -20
  133. package/dist/predefined/brand/string/json-string.mjs.map +1 -1
  134. package/dist/predefined/brand/string/non-empty-string.mjs +12 -8
  135. package/dist/predefined/brand/string/non-empty-string.mjs.map +1 -1
  136. package/dist/predefined/brand/string/uri.mjs +18 -14
  137. package/dist/predefined/brand/string/uri.mjs.map +1 -1
  138. package/dist/predefined/brand/string/uuid.mjs +58 -53
  139. package/dist/predefined/brand/string/uuid.mjs.map +1 -1
  140. package/dist/predefined/index.mjs +6 -33
  141. package/dist/predefined/index.mjs.map +1 -1
  142. package/dist/predefined/int8.mjs +3 -9
  143. package/dist/predefined/int8.mjs.map +1 -1
  144. package/dist/predefined/json.mjs +23 -21
  145. package/dist/predefined/json.mjs.map +1 -1
  146. package/dist/predefined/nullable.mjs +4 -10
  147. package/dist/predefined/nullable.mjs.map +1 -1
  148. package/dist/predefined/uint8.mjs +3 -9
  149. package/dist/predefined/uint8.mjs.map +1 -1
  150. package/dist/primitives/bigint.mjs +121 -139
  151. package/dist/primitives/bigint.mjs.map +1 -1
  152. package/dist/primitives/boolean.mjs +3 -7
  153. package/dist/primitives/boolean.mjs.map +1 -1
  154. package/dist/primitives/index.mjs +8 -8
  155. package/dist/primitives/index.mjs.map +1 -1
  156. package/dist/primitives/null.mjs +6 -10
  157. package/dist/primitives/null.mjs.map +1 -1
  158. package/dist/primitives/number.mjs +151 -157
  159. package/dist/primitives/number.mjs.map +1 -1
  160. package/dist/primitives/string.mjs +96 -115
  161. package/dist/primitives/string.mjs.map +1 -1
  162. package/dist/primitives/symbol.mjs +6 -10
  163. package/dist/primitives/symbol.mjs.map +1 -1
  164. package/dist/primitives/undefined.mjs +6 -10
  165. package/dist/primitives/undefined.mjs.map +1 -1
  166. package/dist/record/at.mjs +46 -42
  167. package/dist/record/at.mjs.map +1 -1
  168. package/dist/record/index.mjs +12 -12
  169. package/dist/record/index.mjs.map +1 -1
  170. package/dist/record/key-value-record.mjs +77 -84
  171. package/dist/record/key-value-record.mjs.map +1 -1
  172. package/dist/record/keyof.mjs +41 -35
  173. package/dist/record/keyof.mjs.map +1 -1
  174. package/dist/record/merge-records.mjs +61 -48
  175. package/dist/record/merge-records.mjs.map +1 -1
  176. package/dist/record/omit.mjs +32 -21
  177. package/dist/record/omit.mjs.map +1 -1
  178. package/dist/record/optional.mjs +55 -25
  179. package/dist/record/optional.mjs.map +1 -1
  180. package/dist/record/partial.mjs +33 -29
  181. package/dist/record/partial.mjs.map +1 -1
  182. package/dist/record/pick.mjs +23 -21
  183. package/dist/record/pick.mjs.map +1 -1
  184. package/dist/record/record.mjs +141 -130
  185. package/dist/record/record.mjs.map +1 -1
  186. package/dist/record/required.mjs +39 -34
  187. package/dist/record/required.mjs.map +1 -1
  188. package/dist/record/valueof.mjs +36 -30
  189. package/dist/record/valueof.mjs.map +1 -1
  190. package/dist/type.mjs +103 -66
  191. package/dist/type.mjs.map +1 -1
  192. package/dist/utils/create-assert-fn.mjs +8 -12
  193. package/dist/utils/create-assert-fn.mjs.map +1 -1
  194. package/dist/utils/create-cast-fn.mjs +7 -9
  195. package/dist/utils/create-cast-fn.mjs.map +1 -1
  196. package/dist/utils/create-is-fn.mjs +2 -5
  197. package/dist/utils/create-is-fn.mjs.map +1 -1
  198. package/dist/utils/create-primitive-type.mjs +22 -27
  199. package/dist/utils/create-primitive-type.mjs.map +1 -1
  200. package/dist/utils/create-type.mjs +13 -22
  201. package/dist/utils/create-type.mjs.map +1 -1
  202. package/dist/utils/index.mjs +8 -8
  203. package/dist/utils/index.mjs.map +1 -1
  204. package/dist/utils/to-union-string.mjs +4 -6
  205. package/dist/utils/to-union-string.mjs.map +1 -1
  206. package/dist/utils/validation-error.mjs +226 -171
  207. package/dist/utils/validation-error.mjs.map +1 -1
  208. package/package.json +7 -8
  209. package/src/record/omit.mts +1 -1
  210. package/src/record/partial.mts +1 -1
  211. package/src/record/pick.mts +1 -1
  212. package/src/record/required.mts +1 -1
  213. package/src/record/valueof.mts +1 -1
  214. package/src/type.mts +1 -1
package/README.md CHANGED
@@ -162,9 +162,9 @@ assert.deepStrictEqual(
162
162
  result.value satisfies readonly t.ValidationError[],
163
163
  ),
164
164
  [
165
- `Error at age: missing required key "age".`,
166
- `Error at preferences.notifications: missing required key "notifications".`,
167
- `Error at tags: missing required key "tags".`,
165
+ 'Error at age: missing required key "age".',
166
+ 'Error at preferences.notifications: missing required key "notifications".',
167
+ 'Error at tags: missing required key "tags".',
168
168
  ],
169
169
  );
170
170
  ```
@@ -509,7 +509,7 @@ try {
509
509
  assert.deepStrictEqual(
510
510
  error,
511
511
  new Error(
512
- `\nError: expected <number> type but <string> type value "not a number" was passed.`,
512
+ '\nError: expected <number> type but <string> type value "not a number" was passed.',
513
513
  ),
514
514
  );
515
515
  }
@@ -1,51 +1,46 @@
1
- import { memoizeFunction, Arr, Result } from 'ts-data-forge';
2
- import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
- import { createCastFn } from '../utils/create-cast-fn.mjs';
4
- import { createIsFn } from '../utils/create-is-fn.mjs';
5
- import { createPrimitiveValidationError, prependIndexToValidationErrors } from '../utils/validation-error.mjs';
6
-
7
- const array = (elementType, options) => {
8
- const typeName = options?.typeName ?? `${elementType.typeName}[]`;
9
- const getDefaultValue = memoizeFunction(() => options?.defaultValue ?? []);
10
- const validate = (a) => {
11
- if (!Arr.isArray(a)) {
12
- return Result.err([
13
- createPrimitiveValidationError({
14
- actualValue: a,
15
- expectedType: "array",
16
- typeName,
17
- details: void 0
18
- })
19
- ]);
20
- }
21
- const errors = Arr.generate(function* () {
22
- for (const [index, el] of a.entries()) {
23
- const res = elementType.validate(el);
24
- if (Result.isErr(res)) {
25
- yield* prependIndexToValidationErrors(res.value, index);
1
+ import { Arr, memoizeFunction, Result } from 'ts-data-forge';
2
+ import { createAssertFn, createCastFn, createIsFn, createPrimitiveValidationError, prependIndexToValidationErrors, } from '../utils/index.mjs';
3
+ export const array = (elementType, options) => {
4
+ const typeName = options?.typeName ?? `${elementType.typeName}[]`;
5
+ const getDefaultValue = memoizeFunction(() => options?.defaultValue ?? []);
6
+ const validate = (a) => {
7
+ if (!Arr.isArray(a)) {
8
+ return Result.err([
9
+ createPrimitiveValidationError({
10
+ actualValue: a,
11
+ expectedType: 'array',
12
+ typeName,
13
+ details: undefined,
14
+ }),
15
+ ]);
16
+ }
17
+ const errors = Arr.generate(function* () {
18
+ for (const [index, el] of a.entries()) {
19
+ const res = elementType.validate(el);
20
+ if (Result.isErr(res)) {
21
+ yield* prependIndexToValidationErrors(res.value, index);
22
+ }
23
+ }
24
+ });
25
+ if (Arr.isNonEmpty(errors)) {
26
+ return Result.err(errors);
26
27
  }
27
- }
28
- });
29
- if (Arr.isNonEmpty(errors)) {
30
- return Result.err(errors);
31
- }
32
- return Result.ok(a);
33
- };
34
- const fill = (a) => !Arr.isArray(a) ? getDefaultValue() : a.map((e) => elementType.fill(e));
35
- const prune = (a) => a.map((e) => elementType.prune(e));
36
- return {
37
- typeName,
38
- get defaultValue() {
39
- return getDefaultValue();
40
- },
41
- fill,
42
- prune,
43
- validate,
44
- is: createIsFn(validate),
45
- assertIs: createAssertFn(validate),
46
- cast: createCastFn(validate)
47
- };
48
- };
49
28
 
50
- export { array };
51
- //# sourceMappingURL=array.mjs.map
29
+ return Result.ok(a);
30
+ };
31
+ const fill = (a) => !Arr.isArray(a) ? getDefaultValue() : a.map((e) => elementType.fill(e));
32
+ const prune = (a) => a.map((e) => elementType.prune(e));
33
+ return {
34
+ typeName,
35
+ get defaultValue() {
36
+ return getDefaultValue();
37
+ },
38
+ fill,
39
+ prune,
40
+ validate,
41
+ is: createIsFn(validate),
42
+ assertIs: createAssertFn(validate),
43
+ cast: createCastFn(validate),
44
+ };
45
+ };
46
+ //# sourceMappingURL=array.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.mjs","sources":["../../src/array/array.mts"],"sourcesContent":["import { Arr, memoizeFunction, Result } from 'ts-data-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n createPrimitiveValidationError,\n prependIndexToValidationErrors,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport const array = <A,>(\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: readonly A[];\n }>\n >,\n): Type<readonly A[]> => {\n type T = readonly A[];\n\n const typeName = options?.typeName ?? `${elementType.typeName}[]`;\n\n const getDefaultValue = memoizeFunction((): T => options?.defaultValue ?? []);\n\n const validate: Type<T>['validate'] = (a) => {\n if (!Arr.isArray(a)) {\n return Result.err([\n createPrimitiveValidationError({\n actualValue: a,\n expectedType: 'array',\n typeName,\n details: undefined,\n }),\n ]);\n }\n\n const errors: readonly ValidationError[] = Arr.generate(function* () {\n for (const [index, el] of a.entries()) {\n const res = elementType.validate(el);\n\n if (Result.isErr(res)) {\n yield* prependIndexToValidationErrors(res.value, index);\n }\n }\n });\n\n if (Arr.isNonEmpty(errors)) {\n return Result.err(errors);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as T);\n };\n\n const fill: Type<T>['fill'] = (a) =>\n !Arr.isArray(a) ? getDefaultValue() : a.map((e) => elementType.fill(e));\n\n const prune = (a: T): T => a.map((e) => elementType.prune(e));\n\n return {\n typeName,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune,\n validate,\n is: createIsFn(validate),\n assertIs: createAssertFn(validate),\n cast: createCastFn(validate),\n };\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,KAAA,GAAQ,CACnB,WAAA,EACA,OAAA,KAMuB;AAGvB,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,QAAA,IAAY,CAAA,EAAG,YAAY,QAAQ,CAAA,EAAA,CAAA;AAE7D,EAAA,MAAM,kBAAkB,eAAA,CAAgB,MAAS,OAAA,EAAS,YAAA,IAAgB,EAAE,CAAA;AAE5E,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG;AACnB,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB,8BAAA,CAA+B;AAAA,UAC7B,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,OAAA;AAAA,UACd,QAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV;AAAA,OACF,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAqC,GAAA,CAAI,QAAA,CAAS,aAAa;AACnE,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,EAAE,CAAA,IAAK,CAAA,CAAE,SAAQ,EAAG;AACrC,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA;AAEnC,QAAA,IAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACrB,UAAA,OAAO,8BAAA,CAA+B,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,QACxD;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,MAAA,OAAO,MAAA,CAAO,IAAI,MAAM,CAAA;AAAA,IAC1B;AAGA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,OAAwB,CAAC,CAAA,KAC7B,CAAC,GAAA,CAAI,QAAQ,CAAC,CAAA,GAAI,eAAA,EAAgB,GAAI,EAAE,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,IAAA,CAAK,CAAC,CAAC,CAAA;AAExE,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAY,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AAE5D,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAA,EAAI,WAAW,QAAQ,CAAA;AAAA,IACvB,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,IACjC,IAAA,EAAM,aAAa,QAAQ;AAAA,GAC7B;AACF;;"}
1
+ {"version":3,"file":"array.mjs","sourceRoot":"","sources":["../../src/array/array.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,8BAA8B,EAC9B,8BAA8B,GAE/B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,WAAoB,EACpB,OAKC,EACmB,EAAE;IAGtB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,GAAG,WAAW,CAAC,QAAQ,IAAI,CAAC;IAElE,MAAM,eAAe,GAAG,eAAe,CAAC,GAAM,EAAE,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAwB,CAAC,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC,GAAG,CAAC;gBAChB,8BAA8B,CAAC;oBAC7B,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,OAAO;oBACrB,QAAQ;oBACR,OAAO,EAAE,SAAS;iBACnB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAA+B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/D,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAErC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,oEAAoE;QACpE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAM,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,IAAI,GAAoB,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,OAAO;QACL,QAAQ;QACR,IAAI,YAAY;YACd,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;QACxB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;QAClC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B,CAAC;AACJ,CAAC,CAAC"}
@@ -1,54 +1,51 @@
1
- import { memoizeFunction, Arr, asUint32, Result } from 'ts-data-forge';
2
- import { createPrimitiveValidationError } from '../utils/validation-error.mjs';
1
+ import { Arr, asUint32, memoizeFunction, Result } from 'ts-data-forge';
2
+ import { createPrimitiveValidationError, } from '../utils/index.mjs';
3
3
  import { buildType, validateElements } from './build-type.mjs';
4
+ export function boundedLengthArray(min, max, elementType, options) {
5
+ const typeName = options?.typeName ??
6
+ `BoundedLengthArray<${min}, ${max}, ${elementType.typeName}>`;
7
+ const getDefaultValue = memoizeFunction(() => options?.defaultValue ??
4
8
 
5
- function boundedLengthArray(min, max, elementType, options) {
6
- const typeName = options?.typeName ?? `BoundedLengthArray<${min}, ${max}, ${elementType.typeName}>`;
7
- const getDefaultValue = memoizeFunction(
8
- () => options?.defaultValue ?? // An array of the minimum length is the shortest value within the range.
9
- Arr.create(asUint32(min), elementType.defaultValue)
10
- );
11
- const validate = (a) => {
12
- if (!Arr.isArray(a)) {
13
- return Result.err([
14
- createPrimitiveValidationError({
15
- actualValue: a,
16
- expectedType: "array",
17
- typeName,
18
- details: void 0
19
- })
20
- ]);
21
- }
22
- if (a.length < min || max < a.length) {
23
- return Result.err([
24
- {
25
- path: [],
26
- actualValue: a,
27
- expectedType: typeName,
28
- typeName,
29
- details: {
30
- kind: "array-range-length",
31
- minLength: min,
32
- maxLength: max,
33
- actualLength: a.length
34
- }
9
+ Arr.create(asUint32(min), elementType.defaultValue));
10
+ const validate = (a) => {
11
+ if (!Arr.isArray(a)) {
12
+ return Result.err([
13
+ createPrimitiveValidationError({
14
+ actualValue: a,
15
+ expectedType: 'array',
16
+ typeName,
17
+ details: undefined,
18
+ }),
19
+ ]);
20
+ }
21
+ if (a.length < min || max < a.length) {
22
+ return Result.err([
23
+ {
24
+ path: [],
25
+ actualValue: a,
26
+ expectedType: typeName,
27
+ typeName,
28
+ details: {
29
+ kind: 'array-range-length',
30
+ minLength: min,
31
+ maxLength: max,
32
+ actualLength: a.length,
33
+ },
34
+ },
35
+ ]);
36
+ }
37
+ return validateElements(a, elementType);
38
+ };
39
+ const fill = (a) => {
40
+ if (!Arr.isArray(a)) {
41
+ return getDefaultValue();
35
42
  }
36
- ]);
37
- }
38
- return validateElements(a, elementType);
39
- };
40
- const fill = (a) => {
41
- if (!Arr.isArray(a)) {
42
- return getDefaultValue();
43
- }
44
- const capped = Arr.take(a, asUint32(max));
45
- return capped.length >= min ? Arr.map(capped, (el) => elementType.fill(el)) : Arr.map(
46
- Arr.seq(asUint32(min)),
47
- (i) => elementType.fill(capped[i])
48
- );
49
- };
50
- return buildType({ typeName, getDefaultValue, validate, fill, elementType });
51
- }
52
43
 
53
- export { boundedLengthArray };
54
- //# sourceMappingURL=bounded-length-array.mjs.map
44
+ const capped = Arr.take(a, asUint32(max));
45
+ return capped.length >= min
46
+ ? Arr.map(capped, (el) => elementType.fill(el))
47
+ : Arr.map(Arr.seq(asUint32(min)), (i) => elementType.fill(capped[i]));
48
+ };
49
+ return buildType({ typeName, getDefaultValue, validate, fill, elementType });
50
+ }
51
+ //# sourceMappingURL=bounded-length-array.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bounded-length-array.mjs","sources":["../../src/array/bounded-length-array.mts"],"sourcesContent":["import { Arr, asUint32, memoizeFunction, Result } from 'ts-data-forge';\nimport {\n type BoundedLengthArray,\n type MaxLengthArray,\n type MinLengthArray,\n type SupportedLength,\n} from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createPrimitiveValidationError,\n type ValidationError,\n} from '../utils/index.mjs';\nimport { buildType, validateElements } from './build-type.mjs';\n\nexport type { BoundedLengthArray } from 'ts-type-forge';\n\n/**\n * Creates a `Type` for a readonly array whose length is within the inclusive\n * range `[min, max]`, typed as the branded {@link BoundedLengthArray} instead\n * of the union of tuple types produced by `boundedLengthTuple`.\n *\n * Because the length constraint lives only in the brand, no union of tuples\n * of the element type is ever constructed, which keeps type-checking cheap\n * even when `A` is a large type.\n */\nexport function boundedLengthArray<\n Min extends SupportedLength,\n Max extends SupportedLength,\n A,\n>(\n min: Min,\n max: Max,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: BoundedLengthArray<Min, Max, A>;\n }>\n >,\n): Type<BoundedLengthArray<Min, Max, A>>;\n\n// Only the lower bound is in `SupportedLength`, so the upper bound is dropped from\n// the result type and only the \"at least `min`\" guarantee is kept.\nexport function boundedLengthArray<Min extends SupportedLength, A>(\n min: Min,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: MinLengthArray<Min, A>;\n }>\n >,\n): Type<MinLengthArray<Min, A>>;\n\n// Only the upper bound is in `SupportedLength`, so the lower bound is dropped from\n// the result type and only the \"at most `max`\" guarantee is kept.\nexport function boundedLengthArray<Max extends SupportedLength, A>(\n min: number,\n max: Max,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: MaxLengthArray<Max, A>;\n }>\n >,\n): Type<MaxLengthArray<Max, A>>;\n\n// Neither bound is in `SupportedLength`, so the result length is left unconstrained.\nexport function boundedLengthArray<A>(\n min: number,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: readonly A[];\n }>\n >,\n): Type<readonly A[]>;\n\nexport function boundedLengthArray<A>(\n min: number,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: readonly A[];\n }>\n >,\n): Type<readonly A[]> {\n type T = readonly A[];\n\n const typeName =\n options?.typeName ??\n `BoundedLengthArray<${min}, ${max}, ${elementType.typeName}>`;\n\n const getDefaultValue = memoizeFunction(\n (): T =>\n options?.defaultValue ??\n // An array of the minimum length is the shortest value within the range.\n Arr.create(asUint32(min), elementType.defaultValue),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!Arr.isArray(a)) {\n return Result.err([\n createPrimitiveValidationError({\n actualValue: a,\n expectedType: 'array',\n typeName,\n details: undefined,\n }),\n ]);\n }\n\n if (a.length < min || max < a.length) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeName,\n typeName,\n details: {\n kind: 'array-range-length',\n minLength: min,\n maxLength: max,\n actualLength: a.length,\n },\n } satisfies ValidationError,\n ]);\n }\n\n return validateElements(a, elementType);\n };\n\n const fill: Type<T>['fill'] = (a) => {\n if (!Arr.isArray(a)) {\n return getDefaultValue();\n }\n\n // Trim down to at most `max`, then pad up to at least `min`.\n const capped = Arr.take(a, asUint32(max));\n\n return capped.length >= min\n ? Arr.map(capped, (el) => elementType.fill(el) satisfies A)\n : Arr.map(\n Arr.seq(asUint32(min)),\n (i) => elementType.fill(capped[i]) satisfies A,\n );\n };\n\n return buildType({ typeName, getDefaultValue, validate, fill, elementType });\n}\n"],"names":[],"mappings":";;;;AAkFO,SAAS,kBAAA,CACd,GAAA,EACA,GAAA,EACA,WAAA,EACA,OAAA,EAMoB;AAGpB,EAAA,MAAM,QAAA,GACJ,SAAS,QAAA,IACT,CAAA,mBAAA,EAAsB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,WAAA,CAAY,QAAQ,CAAA,CAAA,CAAA;AAE5D,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA,IACtB,MACE,OAAA,EAAS,YAAA;AAAA,IAET,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG,YAAY,YAAY;AAAA,GACtD;AAEA,EAAA,MAAM,QAAA,GAAgC,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG;AACnB,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB,8BAAA,CAA+B;AAAA,UAC7B,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,OAAA;AAAA,UACd,QAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV;AAAA,OACF,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAA,CAAE,MAAA,GAAS,GAAA,IAAO,GAAA,GAAM,EAAE,MAAA,EAAQ;AACpC,MAAA,OAAO,OAAO,GAAA,CAAI;AAAA,QAChB;AAAA,UACE,MAAM,EAAC;AAAA,UACP,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,QAAA;AAAA,UACd,QAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,oBAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,GAAA;AAAA,YACX,cAAc,CAAA,CAAE;AAAA;AAClB;AACF,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,gBAAA,CAAiB,GAAG,WAAW,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,IAAA,GAAwB,CAAC,CAAA,KAAM;AACnC,IAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG;AACnB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB;AAGA,IAAA,MAAM,SAAS,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,QAAA,CAAS,GAAG,CAAC,CAAA;AAExC,IAAA,OAAO,MAAA,CAAO,MAAA,IAAU,GAAA,GACpB,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,CAAC,EAAA,KAAO,WAAA,CAAY,IAAA,CAAK,EAAE,CAAa,IACxD,GAAA,CAAI,GAAA;AAAA,MACF,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MACrB,CAAC,CAAA,KAAM,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC;AAAA,KACnC;AAAA,EACN,CAAA;AAEA,EAAA,OAAO,UAAU,EAAE,QAAA,EAAU,iBAAiB,QAAA,EAAU,IAAA,EAAM,aAAa,CAAA;AAC7E;;"}
1
+ {"version":3,"file":"bounded-length-array.mjs","sourceRoot":"","sources":["../../src/array/bounded-length-array.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQvE,OAAO,EACL,8BAA8B,GAE/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAsE/D,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,GAAW,EACX,WAAoB,EACpB,OAKC;IAID,MAAM,QAAQ,GACZ,OAAO,EAAE,QAAQ;QACjB,sBAAsB,GAAG,KAAK,GAAG,KAAK,WAAW,CAAC,QAAQ,GAAG,CAAC;IAEhE,MAAM,eAAe,GAAG,eAAe,CACrC,GAAM,EAAE,CACN,OAAO,EAAE,YAAY;QACrB,yEAAyE;QACzE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CACtD,CAAC;IAEF,MAAM,QAAQ,GAAwB,CAAC,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC,GAAG,CAAC;gBAChB,8BAA8B,CAAC;oBAC7B,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,OAAO;oBACrB,QAAQ;oBACR,OAAO,EAAE,SAAS;iBACnB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,GAAG,CAAC;gBAChB;oBACE,IAAI,EAAE,EAAE;oBACR,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,QAAQ;oBACtB,QAAQ;oBACR,OAAO,EAAE;wBACP,IAAI,EAAE,oBAAoB;wBAC1B,SAAS,EAAE,GAAG;wBACd,SAAS,EAAE,GAAG;wBACd,YAAY,EAAE,CAAC,CAAC,MAAM;qBACvB;iBACwB;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAoB,CAAC,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,6DAA6D;QAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1C,OAAO,MAAM,CAAC,MAAM,IAAI,GAAG;YACzB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAa,CAAC;YAC3D,CAAC,CAAC,GAAG,CAAC,GAAG,CACL,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EACtB,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAa,CAC/C,CAAC;IACR,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/E,CAAC"}
@@ -1,79 +1,74 @@
1
- import { memoizeFunction, Arr, asUint32, Result } from 'ts-data-forge';
2
- import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
- import { createCastFn } from '../utils/create-cast-fn.mjs';
4
- import { createIsFn } from '../utils/create-is-fn.mjs';
5
- import { createPrimitiveValidationError, prependIndexToValidationErrors } from '../utils/validation-error.mjs';
1
+ import { Arr, asUint32, memoizeFunction, Result } from 'ts-data-forge';
2
+ import { createAssertFn, createCastFn, createIsFn, createPrimitiveValidationError, prependIndexToValidationErrors, } from '../utils/index.mjs';
3
+ export function boundedLengthTuple(min, max, elementType, options) {
4
+ const typeName = options?.typeName ??
5
+ `BoundedLengthTuple<${min}, ${max}, ${elementType.typeName}>`;
6
+ const getDefaultValue = memoizeFunction(() => options?.defaultValue ??
6
7
 
7
- function boundedLengthTuple(min, max, elementType, options) {
8
- const typeName = options?.typeName ?? `BoundedLengthTuple<${min}, ${max}, ${elementType.typeName}>`;
9
- const getDefaultValue = memoizeFunction(
10
- () => options?.defaultValue ?? // An array of the minimum length is the shortest value within the range.
11
- Arr.create(asUint32(min), elementType.defaultValue)
12
- );
13
- const validate = (a) => {
14
- if (!Arr.isArray(a)) {
15
- return Result.err([
16
- createPrimitiveValidationError({
17
- actualValue: a,
18
- expectedType: "array",
19
- typeName,
20
- details: void 0
21
- })
22
- ]);
23
- }
24
- if (a.length < min || max < a.length) {
25
- return Result.err([
26
- {
27
- path: [],
28
- actualValue: a,
29
- expectedType: typeName,
30
- typeName,
31
- details: {
32
- kind: "array-range-length",
33
- minLength: min,
34
- maxLength: max,
35
- actualLength: a.length
36
- }
8
+ Arr.create(asUint32(min), elementType.defaultValue));
9
+ const validate = (a) => {
10
+ if (!Arr.isArray(a)) {
11
+ return Result.err([
12
+ createPrimitiveValidationError({
13
+ actualValue: a,
14
+ expectedType: 'array',
15
+ typeName,
16
+ details: undefined,
17
+ }),
18
+ ]);
37
19
  }
38
- ]);
39
- }
40
- const errors = Arr.generate(function* () {
41
- for (const [index, el] of a.entries()) {
42
- const res = elementType.validate(el);
43
- if (Result.isErr(res)) {
44
- yield* prependIndexToValidationErrors(res.value, index);
20
+ if (a.length < min || max < a.length) {
21
+ return Result.err([
22
+ {
23
+ path: [],
24
+ actualValue: a,
25
+ expectedType: typeName,
26
+ typeName,
27
+ details: {
28
+ kind: 'array-range-length',
29
+ minLength: min,
30
+ maxLength: max,
31
+ actualLength: a.length,
32
+ },
33
+ },
34
+ ]);
35
+ }
36
+ const errors = Arr.generate(function* () {
37
+ for (const [index, el] of a.entries()) {
38
+ const res = elementType.validate(el);
39
+ if (Result.isErr(res)) {
40
+ yield* prependIndexToValidationErrors(res.value, index);
41
+ }
42
+ }
43
+ });
44
+ if (Arr.isNonEmpty(errors)) {
45
+ return Result.err(errors);
45
46
  }
46
- }
47
- });
48
- if (Arr.isNonEmpty(errors)) {
49
- return Result.err(errors);
50
- }
51
- return Result.ok(a);
52
- };
53
- const fill = (a) => {
54
- if (!Arr.isArray(a)) {
55
- return getDefaultValue();
56
- }
57
- const capped = Arr.take(a, asUint32(max));
58
- return capped.length >= min ? Arr.map(capped, (el) => elementType.fill(el)) : Arr.map(
59
- Arr.seq(asUint32(min)),
60
- (i) => elementType.fill(capped[i])
61
- );
62
- };
63
- const prune = (a) => a.map((el) => elementType.prune(el));
64
- return {
65
- typeName,
66
- get defaultValue() {
67
- return getDefaultValue();
68
- },
69
- fill,
70
- prune,
71
- validate,
72
- is: createIsFn(validate),
73
- cast: createCastFn(validate),
74
- assertIs: createAssertFn(validate)
75
- };
76
- }
77
47
 
78
- export { boundedLengthTuple };
79
- //# sourceMappingURL=bounded-length-tuple.mjs.map
48
+ return Result.ok(a);
49
+ };
50
+ const fill = (a) => {
51
+ if (!Arr.isArray(a)) {
52
+ return getDefaultValue();
53
+ }
54
+
55
+ const capped = Arr.take(a, asUint32(max));
56
+ return capped.length >= min
57
+ ? Arr.map(capped, (el) => elementType.fill(el))
58
+ : Arr.map(Arr.seq(asUint32(min)), (i) => elementType.fill(capped[i]));
59
+ };
60
+ const prune = (a) => a.map((el) => elementType.prune(el));
61
+ return {
62
+ typeName,
63
+ get defaultValue() {
64
+ return getDefaultValue();
65
+ },
66
+ fill,
67
+ prune,
68
+ validate,
69
+ is: createIsFn(validate),
70
+ cast: createCastFn(validate),
71
+ assertIs: createAssertFn(validate),
72
+ };
73
+ }
74
+ //# sourceMappingURL=bounded-length-tuple.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bounded-length-tuple.mjs","sources":["../../src/array/bounded-length-tuple.mts"],"sourcesContent":["import { Arr, asUint32, memoizeFunction, Result } from 'ts-data-forge';\nimport {\n type BoundedLengthTuple,\n type MaxLengthTuple,\n type MinLengthTuple,\n type StructuralPrefixLength,\n} from 'ts-type-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n createPrimitiveValidationError,\n prependIndexToValidationErrors,\n type ValidationError,\n} from '../utils/index.mjs';\n\nexport type { BoundedLengthTuple } from 'ts-type-forge';\n\nexport function boundedLengthTuple<\n Min extends StructuralPrefixLength,\n Max extends StructuralPrefixLength,\n A,\n>(\n min: Min,\n max: Max,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: BoundedLengthTuple<Min, Max, A>;\n }>\n >,\n): Type<BoundedLengthTuple<Min, Max, A>>;\n\n// Only the lower bound is in `StructuralPrefixLength` (`0..10`), so the upper bound is dropped from the\n// result type and only the \"at least `min`\" guarantee is kept.\nexport function boundedLengthTuple<Min extends StructuralPrefixLength, A>(\n min: Min,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: MinLengthTuple<Min, A>;\n }>\n >,\n): Type<MinLengthTuple<Min, A>>;\n\n// Only the upper bound is in `StructuralPrefixLength` (`0..10`), so the lower bound is dropped from the\n// result type and only the \"at most `max`\" guarantee is kept.\nexport function boundedLengthTuple<Max extends StructuralPrefixLength, A>(\n min: number,\n max: Max,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: MaxLengthTuple<Max, A>;\n }>\n >,\n): Type<MaxLengthTuple<Max, A>>;\n\n// Neither bound is in `StructuralPrefixLength` (`0..10`), so the result length is left unconstrained.\nexport function boundedLengthTuple<A>(\n min: number,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: readonly A[];\n }>\n >,\n): Type<readonly A[]>;\n\nexport function boundedLengthTuple<A>(\n min: number,\n max: number,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: readonly A[];\n }>\n >,\n): Type<readonly A[]> {\n type T = readonly A[];\n\n const typeName =\n options?.typeName ??\n `BoundedLengthTuple<${min}, ${max}, ${elementType.typeName}>`;\n\n const getDefaultValue = memoizeFunction(\n (): T =>\n options?.defaultValue ??\n // An array of the minimum length is the shortest value within the range.\n Arr.create(asUint32(min), elementType.defaultValue),\n );\n\n const validate: Type<T>['validate'] = (a) => {\n if (!Arr.isArray(a)) {\n return Result.err([\n createPrimitiveValidationError({\n actualValue: a,\n expectedType: 'array',\n typeName,\n details: undefined,\n }),\n ]);\n }\n\n if (a.length < min || max < a.length) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeName,\n typeName,\n details: {\n kind: 'array-range-length',\n minLength: min,\n maxLength: max,\n actualLength: a.length,\n },\n } satisfies ValidationError,\n ]);\n }\n\n const errors: readonly ValidationError[] = Arr.generate(function* () {\n for (const [index, el] of a.entries()) {\n const res = elementType.validate(el);\n\n if (Result.isErr(res)) {\n yield* prependIndexToValidationErrors(res.value, index);\n }\n }\n });\n\n if (Arr.isNonEmpty(errors)) {\n return Result.err(errors);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as unknown as T);\n };\n\n const fill: Type<T>['fill'] = (a) => {\n if (!Arr.isArray(a)) {\n return getDefaultValue();\n }\n\n // Trim down to at most `max`, then pad up to at least `min`.\n const capped = Arr.take(a, asUint32(max));\n\n return capped.length >= min\n ? Arr.map(capped, (el) => elementType.fill(el) satisfies A)\n : Arr.map(\n Arr.seq(asUint32(min)),\n (i) => elementType.fill(capped[i]) satisfies A,\n );\n };\n\n const prune = (a: T): T => a.map((el) => elementType.prune(el));\n\n return {\n typeName,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune,\n validate,\n is: createIsFn(validate),\n cast: createCastFn(validate),\n assertIs: createAssertFn(validate),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bounded-length-tuple.mjs","sourceRoot":"","sources":["../../src/array/bounded-length-tuple.mts"],"names":[],"mappings":"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"}
@@ -1,44 +1,55 @@
1
1
  import { Arr, Result } from 'ts-data-forge';
2
- import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
- import { createCastFn } from '../utils/create-cast-fn.mjs';
4
- import { createIsFn } from '../utils/create-is-fn.mjs';
5
- import { prependIndexToValidationErrors } from '../utils/validation-error.mjs';
6
-
7
- const validateElements = (a, elementType) => {
8
- const errors = Arr.generate(function* () {
9
- for (const [index, el] of a.entries()) {
10
- const res = elementType.validate(el);
11
- if (Result.isErr(res)) {
12
- yield* prependIndexToValidationErrors(res.value, index);
13
- }
2
+ import { createAssertFn, createCastFn, createIsFn, prependIndexToValidationErrors, } from '../utils/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+ export const validateElements = (a, elementType) => {
11
+ const errors = Arr.generate(function* () {
12
+ for (const [index, el] of a.entries()) {
13
+ const res = elementType.validate(el);
14
+ if (Result.isErr(res)) {
15
+ yield* prependIndexToValidationErrors(res.value, index);
16
+ }
17
+ }
18
+ });
19
+ if (Arr.isNonEmpty(errors)) {
20
+ return Result.err(errors);
14
21
  }
15
- });
16
- if (Arr.isNonEmpty(errors)) {
17
- return Result.err(errors);
18
- }
19
- return Result.ok(a);
20
- };
21
- const buildType = ({
22
- typeName,
23
- getDefaultValue,
24
- validate,
25
- fill,
26
- elementType
27
- }) => {
28
- const base = {
29
- typeName,
30
- get defaultValue() {
31
- return getDefaultValue();
32
- },
33
- fill,
34
- prune: (a) => a.map((el) => elementType.prune(el)),
35
- validate,
36
- is: createIsFn(validate),
37
- cast: createCastFn(validate),
38
- assertIs: createAssertFn(validate)
39
- };
40
- return base;
22
+
23
+ return Result.ok(a);
41
24
  };
42
25
 
43
- export { buildType, validateElements };
44
- //# sourceMappingURL=build-type.mjs.map
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ export const buildType = ({ typeName, getDefaultValue, validate, fill, elementType, }) => {
35
+ const base = {
36
+ typeName,
37
+ get defaultValue() {
38
+ return getDefaultValue();
39
+ },
40
+ fill,
41
+ prune: (a) => a.map((el) => elementType.prune(el)),
42
+ validate,
43
+ is: createIsFn(validate),
44
+ cast: createCastFn(validate),
45
+ assertIs: createAssertFn(validate),
46
+ };
47
+
48
+
49
+
50
+
51
+
52
+
53
+ return base;
54
+ };
55
+ //# sourceMappingURL=build-type.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-type.mjs","sources":["../../src/array/build-type.mts"],"sourcesContent":["import { Arr, Result } from 'ts-data-forge';\nimport { type Type } from '../type.mjs';\nimport {\n createAssertFn,\n createCastFn,\n createIsFn,\n prependIndexToValidationErrors,\n type ValidationError,\n} from '../utils/index.mjs';\n\n/**\n * Validates each element of `a` against `elementType`, collecting any element\n * errors with their index prepended. Shared by the length-constrained array\n * validators.\n *\n * @internal Not part of the public package API.\n */\nexport const validateElements = <A,>(\n a: readonly unknown[],\n elementType: Type<A>,\n): Result<readonly A[], readonly ValidationError[]> => {\n const errors: readonly ValidationError[] = Arr.generate(function* () {\n for (const [index, el] of a.entries()) {\n const res = elementType.validate(el);\n\n if (Result.isErr(res)) {\n yield* prependIndexToValidationErrors(res.value, index);\n }\n }\n });\n\n if (Arr.isNonEmpty(errors)) {\n return Result.err(errors);\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return Result.ok(a as readonly A[]);\n};\n\n/**\n * Assembles a structural `Type<readonly A[]>` from the length-specific pieces\n * (`typeName` / `getDefaultValue` / `validate` / `fill`). Shared internally by\n * the length-constrained array validators (`fixedLengthArray` etc.) and the\n * `nonEmptyArray` validator; their outer signatures narrow the structural\n * result to the branded array type.\n *\n * @internal Not part of the public package API.\n */\nexport const buildType = <Elm, T extends readonly Elm[] = readonly Elm[]>({\n typeName,\n getDefaultValue,\n validate,\n fill,\n elementType,\n}: Readonly<{\n typeName: string;\n getDefaultValue: () => readonly Elm[];\n validate: (a: unknown) => Result<readonly Elm[], readonly ValidationError[]>;\n fill: (a: unknown) => readonly Elm[];\n elementType: Type<Elm>;\n}>): Type<T> => {\n const base: Type<readonly Elm[]> = {\n typeName,\n get defaultValue() {\n return getDefaultValue();\n },\n fill,\n prune: (a) => a.map((el) => elementType.prune(el)),\n validate,\n is: createIsFn(validate),\n cast: createCastFn(validate),\n assertIs: createAssertFn(validate),\n } as const;\n\n // The branded output type `T` (e.g. `NonEmptyArray` / `FixedLengthArray`) is\n // a subtype of the structural `readonly Elm[]` the validator actually\n // produces. The brand is guaranteed by the caller's `validate` / `fill` but\n // cannot be proven structurally, so it is asserted here once, on behalf of\n // every length-constrained array validator, instead of at each call site.\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return base as Type<T>;\n};\n"],"names":[],"mappings":";;;;;;AAiBO,MAAM,gBAAA,GAAmB,CAC9B,CAAA,EACA,WAAA,KACqD;AACrD,EAAA,MAAM,MAAA,GAAqC,GAAA,CAAI,QAAA,CAAS,aAAa;AACnE,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,EAAE,CAAA,IAAK,CAAA,CAAE,SAAQ,EAAG;AACrC,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA;AAEnC,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACrB,QAAA,OAAO,8BAAA,CAA+B,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA,CAAO,IAAI,MAAM,CAAA;AAAA,EAC1B;AAGA,EAAA,OAAO,MAAA,CAAO,GAAG,CAAiB,CAAA;AACpC;AAWO,MAAM,YAAY,CAAiD;AAAA,EACxE,QAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAMgB;AACd,EAAA,MAAM,IAAA,GAA6B;AAAA,IACjC,QAAA;AAAA,IACA,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,eAAA,EAAgB;AAAA,IACzB,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,WAAA,CAAY,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,IACjD,QAAA;AAAA,IACA,EAAA,EAAI,WAAW,QAAQ,CAAA;AAAA,IACvB,IAAA,EAAM,aAAa,QAAQ,CAAA;AAAA,IAC3B,QAAA,EAAU,eAAe,QAAQ;AAAA,GACnC;AAQA,EAAA,OAAO,IAAA;AACT;;"}
1
+ {"version":3,"file":"build-type.mjs","sourceRoot":"","sources":["../../src/array/build-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,8BAA8B,GAE/B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,CAAqB,EACrB,WAAoB,EAC8B,EAAE;IACpD,MAAM,MAAM,GAA+B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/D,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAErC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,oEAAoE;IACpE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAiB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAiD,EACxE,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,IAAI,EACJ,WAAW,GAOX,EAAW,EAAE;IACb,MAAM,IAAI,GAAyB;QACjC,QAAQ;QACR,IAAI,YAAY;YACd,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI;QACJ,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,QAAQ;QACR,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;QACxB,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;QAC5B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;KAC1B,CAAC;IAEX,6EAA6E;IAC7E,sEAAsE;IACtE,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,oEAAoE;IACpE,OAAO,IAAe,CAAC;AACzB,CAAC,CAAC"}