ts-fortress 9.2.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/array/array.d.mts.map +1 -1
- package/dist/array/array.mjs +39 -40
- package/dist/array/array.mjs.map +1 -1
- package/dist/array/bounded-length-tuple.d.mts +20 -0
- package/dist/array/bounded-length-tuple.d.mts.map +1 -0
- package/dist/array/bounded-length-tuple.mjs +79 -0
- package/dist/array/bounded-length-tuple.mjs.map +1 -0
- package/dist/array/fixed-length-tuple.d.mts +8 -0
- package/dist/array/fixed-length-tuple.d.mts.map +1 -0
- package/dist/array/fixed-length-tuple.mjs +79 -0
- package/dist/array/fixed-length-tuple.mjs.map +1 -0
- package/dist/array/index.d.mts +5 -4
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +5 -4
- package/dist/array/index.mjs.map +1 -1
- package/dist/array/length-constrained-array.d.mts +82 -0
- package/dist/array/length-constrained-array.d.mts.map +1 -0
- package/dist/array/length-constrained-array.mjs +215 -0
- package/dist/array/length-constrained-array.mjs.map +1 -0
- package/dist/array/max-length-tuple.d.mts +12 -0
- package/dist/array/max-length-tuple.d.mts.map +1 -0
- package/dist/array/max-length-tuple.mjs +75 -0
- package/dist/array/max-length-tuple.mjs.map +1 -0
- package/dist/array/min-length-tuple.d.mts +12 -0
- package/dist/array/min-length-tuple.d.mts.map +1 -0
- package/dist/array/min-length-tuple.mjs +72 -0
- package/dist/array/min-length-tuple.mjs.map +1 -0
- package/dist/array/non-empty-array.d.mts.map +1 -1
- package/dist/array/non-empty-array.mjs +53 -54
- package/dist/array/non-empty-array.mjs.map +1 -1
- package/dist/array/tuple.d.mts +3 -3
- package/dist/array/tuple.d.mts.map +1 -1
- package/dist/array/tuple.mjs +69 -61
- package/dist/array/tuple.mjs.map +1 -1
- package/dist/brand/brand.d.mts.map +1 -1
- package/dist/brand/brand.mjs +41 -37
- package/dist/brand/brand.mjs.map +1 -1
- package/dist/brand/branded-number.d.mts.map +1 -1
- package/dist/brand/branded-number.mjs +10 -11
- package/dist/brand/branded-number.mjs.map +1 -1
- package/dist/brand/branded-string.d.mts.map +1 -1
- package/dist/brand/branded-string.mjs +10 -11
- package/dist/brand/branded-string.mjs.map +1 -1
- package/dist/compose/intersection.d.mts +7 -7
- package/dist/compose/intersection.d.mts.map +1 -1
- package/dist/compose/intersection.mjs +72 -81
- package/dist/compose/intersection.mjs.map +1 -1
- package/dist/compose/union.d.mts +6 -6
- package/dist/compose/union.d.mts.map +1 -1
- package/dist/compose/union.mjs +51 -55
- package/dist/compose/union.mjs.map +1 -1
- package/dist/entry-point.mjs +5 -4
- package/dist/entry-point.mjs.map +1 -1
- package/dist/enum/enum.mjs +38 -38
- package/dist/enum/enum.mjs.map +1 -1
- package/dist/enum/int-range.d.mts.map +1 -1
- package/dist/enum/int-range.mjs +40 -38
- package/dist/enum/int-range.mjs.map +1 -1
- package/dist/enum/uint-range.d.mts.map +1 -1
- package/dist/enum/uint-range.mjs +40 -38
- package/dist/enum/uint-range.mjs.map +1 -1
- package/dist/index.mjs +5 -4
- package/dist/index.mjs.map +1 -1
- package/dist/other-types/literal.d.mts.map +1 -1
- package/dist/other-types/literal.mjs +3 -7
- package/dist/other-types/literal.mjs.map +1 -1
- package/dist/other-types/map.d.mts +3 -3
- package/dist/other-types/map.d.mts.map +1 -1
- package/dist/other-types/map.mjs +72 -70
- package/dist/other-types/map.mjs.map +1 -1
- package/dist/other-types/recursion.d.mts.map +1 -1
- package/dist/other-types/recursion.mjs +61 -206
- package/dist/other-types/recursion.mjs.map +1 -1
- package/dist/other-types/refine.d.mts.map +1 -1
- package/dist/other-types/refine.mjs +20 -19
- package/dist/other-types/refine.mjs.map +1 -1
- package/dist/other-types/set.d.mts +3 -3
- package/dist/other-types/set.d.mts.map +1 -1
- package/dist/other-types/set.mjs +51 -50
- package/dist/other-types/set.mjs.map +1 -1
- package/dist/other-types/template-literal.d.mts.map +1 -1
- package/dist/other-types/template-literal.mjs +35 -109
- package/dist/other-types/template-literal.mjs.map +1 -1
- package/dist/other-types/unknown.d.mts.map +1 -1
- package/dist/other-types/unknown.mjs +10 -10
- package/dist/other-types/unknown.mjs.map +1 -1
- package/dist/predefined/brand/number/finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/finite-number.mjs +6 -6
- package/dist/predefined/brand/number/finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/int.d.mts.map +1 -1
- package/dist/predefined/brand/number/int.mjs +6 -6
- package/dist/predefined/brand/number/int.mjs.map +1 -1
- package/dist/predefined/brand/number/int16.d.mts.map +1 -1
- package/dist/predefined/brand/number/int16.mjs +18 -18
- package/dist/predefined/brand/number/int16.mjs.map +1 -1
- package/dist/predefined/brand/number/int32.d.mts.map +1 -1
- package/dist/predefined/brand/number/int32.mjs +14 -14
- package/dist/predefined/brand/number/int32.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/negative-finite-number.mjs +6 -6
- package/dist/predefined/brand/number/negative-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/negative-int.mjs +15 -15
- package/dist/predefined/brand/number/negative-int.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-safe-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/negative-safe-int.mjs +16 -16
- package/dist/predefined/brand/number/negative-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-negative-finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-negative-finite-number.mjs +6 -6
- package/dist/predefined/brand/number/non-negative-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-positive-finite-number.mjs +6 -6
- package/dist/predefined/brand/number/non-positive-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-positive-int.mjs +6 -6
- package/dist/predefined/brand/number/non-positive-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-safe-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-positive-safe-int.mjs +15 -15
- package/dist/predefined/brand/number/non-positive-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-zero-finite-number.mjs +6 -6
- package/dist/predefined/brand/number/non-zero-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-zero-int.mjs +6 -6
- package/dist/predefined/brand/number/non-zero-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-safe-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/non-zero-safe-int.mjs +6 -6
- package/dist/predefined/brand/number/non-zero-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-finite-number.d.mts.map +1 -1
- package/dist/predefined/brand/number/positive-finite-number.mjs +14 -14
- package/dist/predefined/brand/number/positive-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/positive-int.mjs +15 -15
- package/dist/predefined/brand/number/positive-int.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-safe-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/positive-safe-int.mjs +16 -16
- package/dist/predefined/brand/number/positive-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/safe-int.d.mts.map +1 -1
- package/dist/predefined/brand/number/safe-int.mjs +6 -6
- package/dist/predefined/brand/number/safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/safe-uint.d.mts.map +1 -1
- package/dist/predefined/brand/number/safe-uint.mjs +15 -15
- package/dist/predefined/brand/number/safe-uint.mjs.map +1 -1
- package/dist/predefined/brand/number/uint.d.mts.map +1 -1
- package/dist/predefined/brand/number/uint.mjs +14 -14
- package/dist/predefined/brand/number/uint.mjs.map +1 -1
- package/dist/predefined/brand/number/uint16.d.mts.map +1 -1
- package/dist/predefined/brand/number/uint16.mjs +18 -18
- package/dist/predefined/brand/number/uint16.mjs.map +1 -1
- package/dist/predefined/brand/number/uint32.d.mts.map +1 -1
- package/dist/predefined/brand/number/uint32.mjs +16 -16
- package/dist/predefined/brand/number/uint32.mjs.map +1 -1
- package/dist/predefined/brand/string/email.d.mts.map +1 -1
- package/dist/predefined/brand/string/email.mjs +11 -13
- package/dist/predefined/brand/string/email.mjs.map +1 -1
- package/dist/predefined/brand/string/iso-8601.d.mts.map +1 -1
- package/dist/predefined/brand/string/iso-8601.mjs +52 -66
- package/dist/predefined/brand/string/iso-8601.mjs.map +1 -1
- package/dist/predefined/brand/string/json-string.d.mts.map +1 -1
- package/dist/predefined/brand/string/json-string.mjs +12 -16
- package/dist/predefined/brand/string/json-string.mjs.map +1 -1
- package/dist/predefined/brand/string/non-empty-string.mjs +2 -5
- package/dist/predefined/brand/string/non-empty-string.mjs.map +1 -1
- package/dist/predefined/brand/string/uri.d.mts.map +1 -1
- package/dist/predefined/brand/string/uri.mjs +5 -10
- package/dist/predefined/brand/string/uri.mjs.map +1 -1
- package/dist/predefined/brand/string/uuid.d.mts.map +1 -1
- package/dist/predefined/brand/string/uuid.mjs +40 -51
- package/dist/predefined/brand/string/uuid.mjs.map +1 -1
- package/dist/predefined/int8.d.mts.map +1 -1
- package/dist/predefined/int8.mjs +3 -3
- package/dist/predefined/int8.mjs.map +1 -1
- package/dist/predefined/json.mjs +4 -1
- package/dist/predefined/json.mjs.map +1 -1
- package/dist/predefined/nullable.d.mts.map +1 -1
- package/dist/predefined/nullable.mjs.map +1 -1
- package/dist/predefined/uint8.d.mts.map +1 -1
- package/dist/predefined/uint8.mjs +3 -3
- package/dist/predefined/uint8.mjs.map +1 -1
- package/dist/primitives/bigint.mjs +85 -76
- package/dist/primitives/bigint.mjs.map +1 -1
- package/dist/primitives/boolean.d.mts.map +1 -1
- package/dist/primitives/boolean.mjs +1 -1
- package/dist/primitives/boolean.mjs.map +1 -1
- package/dist/primitives/null.mjs +3 -3
- package/dist/primitives/null.mjs.map +1 -1
- package/dist/primitives/number.mjs +99 -87
- package/dist/primitives/number.mjs.map +1 -1
- package/dist/primitives/string.d.mts +18 -16
- package/dist/primitives/string.d.mts.map +1 -1
- package/dist/primitives/string.mjs +81 -68
- package/dist/primitives/string.mjs.map +1 -1
- package/dist/primitives/symbol.d.mts.map +1 -1
- package/dist/primitives/symbol.mjs +3 -3
- package/dist/primitives/symbol.mjs.map +1 -1
- package/dist/primitives/undefined.mjs +3 -3
- package/dist/primitives/undefined.mjs.map +1 -1
- package/dist/record/at.mjs +30 -32
- package/dist/record/at.mjs.map +1 -1
- package/dist/record/key-value-record.d.mts +3 -3
- package/dist/record/key-value-record.d.mts.map +1 -1
- package/dist/record/key-value-record.mjs +77 -75
- package/dist/record/key-value-record.mjs.map +1 -1
- package/dist/record/keyof.d.mts.map +1 -1
- package/dist/record/keyof.mjs +25 -24
- package/dist/record/keyof.mjs.map +1 -1
- package/dist/record/merge-records.d.mts.map +1 -1
- package/dist/record/merge-records.mjs +39 -36
- package/dist/record/merge-records.mjs.map +1 -1
- package/dist/record/omit.d.mts.map +1 -1
- package/dist/record/omit.mjs +15 -14
- package/dist/record/omit.mjs.map +1 -1
- package/dist/record/optional.d.mts +5 -5
- package/dist/record/optional.d.mts.map +1 -1
- package/dist/record/optional.mjs +13 -46
- package/dist/record/optional.mjs.map +1 -1
- package/dist/record/partial.d.mts.map +1 -1
- package/dist/record/partial.mjs +24 -22
- package/dist/record/partial.mjs.map +1 -1
- package/dist/record/pick.d.mts.map +1 -1
- package/dist/record/pick.mjs +15 -14
- package/dist/record/pick.mjs.map +1 -1
- package/dist/record/record.d.mts +1 -1
- package/dist/record/record.d.mts.map +1 -1
- package/dist/record/record.mjs +121 -130
- package/dist/record/record.mjs.map +1 -1
- package/dist/record/required.d.mts.map +1 -1
- package/dist/record/required.mjs +29 -32
- package/dist/record/required.mjs.map +1 -1
- package/dist/record/valueof.d.mts.map +1 -1
- package/dist/record/valueof.mjs +21 -21
- package/dist/record/valueof.mjs.map +1 -1
- package/dist/type.d.mts +28 -4
- package/dist/type.d.mts.map +1 -1
- package/dist/type.mjs +56 -89
- package/dist/type.mjs.map +1 -1
- package/dist/utils/create-assert-fn.d.mts +1 -1
- package/dist/utils/create-assert-fn.d.mts.map +1 -1
- package/dist/utils/create-assert-fn.mjs +6 -5
- package/dist/utils/create-assert-fn.mjs.map +1 -1
- package/dist/utils/create-cast-fn.d.mts +1 -1
- package/dist/utils/create-cast-fn.d.mts.map +1 -1
- package/dist/utils/create-cast-fn.mjs +5 -6
- package/dist/utils/create-cast-fn.mjs.map +1 -1
- package/dist/utils/create-is-fn.d.mts +1 -1
- package/dist/utils/create-is-fn.d.mts.map +1 -1
- package/dist/utils/create-is-fn.mjs.map +1 -1
- package/dist/utils/create-primitive-type.d.mts.map +1 -1
- package/dist/utils/create-primitive-type.mjs +23 -21
- package/dist/utils/create-primitive-type.mjs.map +1 -1
- package/dist/utils/create-type.d.mts +3 -3
- package/dist/utils/create-type.d.mts.map +1 -1
- package/dist/utils/create-type.mjs +18 -12
- package/dist/utils/create-type.mjs.map +1 -1
- package/dist/utils/to-union-string.d.mts.map +1 -1
- package/dist/utils/to-union-string.mjs +3 -3
- package/dist/utils/to-union-string.mjs.map +1 -1
- package/dist/utils/validation-error.d.mts.map +1 -1
- package/dist/utils/validation-error.mjs +76 -92
- package/dist/utils/validation-error.mjs.map +1 -1
- package/package.json +15 -14
- package/src/array/{array-bounded-length.mts → bounded-length-tuple.mts} +22 -22
- package/src/array/{array-bounded-length.test.mts → bounded-length-tuple.test.mts} +20 -20
- package/src/array/{array-of-length.mts → fixed-length-tuple.mts} +11 -8
- package/src/array/{array-of-length.test.mts → fixed-length-tuple.test.mts} +8 -8
- package/src/array/index.mts +5 -4
- package/src/array/length-constrained-array.mts +514 -0
- package/src/array/length-constrained-array.test.mts +229 -0
- package/src/array/{array-at-most-length.mts → max-length-tuple.mts} +12 -9
- package/src/array/{array-at-most-length.test.mts → max-length-tuple.test.mts} +11 -11
- package/src/array/{array-at-least-length.mts → min-length-tuple.mts} +12 -9
- package/src/array/{array-at-least-length.test.mts → min-length-tuple.test.mts} +12 -15
- package/src/array/tuple.mts +15 -5
- package/src/compose/intersection.mts +11 -11
- package/src/compose/union.mts +7 -7
- package/src/other-types/map.mts +6 -6
- package/src/other-types/set.mts +4 -3
- package/src/primitives/bigint.mts +1 -1
- package/src/primitives/number.mts +1 -1
- package/src/primitives/string.mts +24 -29
- package/src/primitives/string.test.mts +27 -20
- package/src/record/at.mts +1 -1
- package/src/record/key-value-record.mts +3 -3
- package/src/record/merge-records.mts +1 -1
- package/src/record/optional.mts +5 -5
- package/src/record/required.mts +2 -3
- package/src/record/valueof.mts +3 -5
- package/src/type.mts +30 -4
- package/dist/array/array-at-least-length.d.mts +0 -12
- package/dist/array/array-at-least-length.d.mts.map +0 -1
- package/dist/array/array-at-least-length.mjs +0 -71
- package/dist/array/array-at-least-length.mjs.map +0 -1
- package/dist/array/array-at-most-length.d.mts +0 -12
- package/dist/array/array-at-most-length.d.mts.map +0 -1
- package/dist/array/array-at-most-length.mjs +0 -72
- package/dist/array/array-at-most-length.mjs.map +0 -1
- package/dist/array/array-bounded-length.d.mts +0 -20
- package/dist/array/array-bounded-length.d.mts.map +0 -1
- package/dist/array/array-bounded-length.mjs +0 -80
- package/dist/array/array-bounded-length.mjs.map +0 -1
- package/dist/array/array-of-length.d.mts +0 -8
- package/dist/array/array-of-length.d.mts.map +0 -1
- package/dist/array/array-of-length.mjs +0 -74
- package/dist/array/array-of-length.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1042,10 +1042,10 @@ type ValidationError = Readonly<{
|
|
|
1042
1042
|
- `t.array(elementType)` - Array validation
|
|
1043
1043
|
- `t.nonEmptyArray(elementType)` - Non-empty array validation
|
|
1044
1044
|
- `t.tuple([t1, t2, ..., tN])` - Fixed-length tuple validation
|
|
1045
|
-
- `t.
|
|
1046
|
-
- `t.
|
|
1047
|
-
- `t.
|
|
1048
|
-
- `t.
|
|
1045
|
+
- `t.fixedLengthTuple(size, elementType)` - Fixed-length array validation
|
|
1046
|
+
- `t.minLengthTuple(size, elementType)` - Array validation with a minimum length
|
|
1047
|
+
- `t.maxLengthTuple(size, elementType)` - Array validation with a maximum length
|
|
1048
|
+
- `t.boundedLengthTuple(min, max, elementType)` - Array validation with a length between `min` and `max` (inclusive)
|
|
1049
1049
|
|
|
1050
1050
|
### Objects
|
|
1051
1051
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.mts","sourceRoot":"","sources":["../../src/array/array.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAUxC,eAAO,MAAM,KAAK,GAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"array.d.mts","sourceRoot":"","sources":["../../src/array/array.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAUxC,eAAO,MAAM,KAAK,GAAI,CAAC,eACR,IAAI,CAAC,CAAC,CAAC,YACV,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;CAC5B,CAAC,CACH,KACA,IAAI,CAAC,SAAS,CAAC,EAAE,CAsDnB,CAAC"}
|
package/dist/array/array.mjs
CHANGED
|
@@ -5,47 +5,46 @@ import { createIsFn } from '../utils/create-is-fn.mjs';
|
|
|
5
5
|
import { createPrimitiveValidationError, prependIndexToValidationErrors } from '../utils/validation-error.mjs';
|
|
6
6
|
|
|
7
7
|
const array = (elementType, options) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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);
|
|
20
26
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
fill,
|
|
43
|
-
prune,
|
|
44
|
-
validate,
|
|
45
|
-
is: createIsFn(validate),
|
|
46
|
-
assertIs: createAssertFn(validate),
|
|
47
|
-
cast: createCastFn(validate),
|
|
48
|
-
};
|
|
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
|
+
};
|
|
49
48
|
};
|
|
50
49
|
|
|
51
50
|
export { array };
|
package/dist/array/array.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.mjs","sources":["../../src/array/array.mts"],"sourcesContent":[
|
|
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;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type BoundedLengthTuple, type MaxLengthTuple, type MinLengthTuple, type StructuralPrefixLength } from 'ts-type-forge';
|
|
2
|
+
import { type Type } from '../type.mjs';
|
|
3
|
+
export type { BoundedLengthTuple } from 'ts-type-forge';
|
|
4
|
+
export declare function boundedLengthTuple<A, Min extends StructuralPrefixLength, Max extends StructuralPrefixLength>(min: Min, max: Max, elementType: Type<A>, options?: Partial<Readonly<{
|
|
5
|
+
typeName: string;
|
|
6
|
+
defaultValue: BoundedLengthTuple<Min, Max, A>;
|
|
7
|
+
}>>): Type<BoundedLengthTuple<Min, Max, A>>;
|
|
8
|
+
export declare function boundedLengthTuple<A, Min extends StructuralPrefixLength>(min: Min, max: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
9
|
+
typeName: string;
|
|
10
|
+
defaultValue: MinLengthTuple<Min, A>;
|
|
11
|
+
}>>): Type<MinLengthTuple<Min, A>>;
|
|
12
|
+
export declare function boundedLengthTuple<A, Max extends StructuralPrefixLength>(min: number, max: Max, elementType: Type<A>, options?: Partial<Readonly<{
|
|
13
|
+
typeName: string;
|
|
14
|
+
defaultValue: MaxLengthTuple<Max, A>;
|
|
15
|
+
}>>): Type<MaxLengthTuple<Max, A>>;
|
|
16
|
+
export declare function boundedLengthTuple<A>(min: number, max: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
17
|
+
typeName: string;
|
|
18
|
+
defaultValue: readonly A[];
|
|
19
|
+
}>>): Type<readonly A[]>;
|
|
20
|
+
//# sourceMappingURL=bounded-length-tuple.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounded-length-tuple.d.mts","sourceRoot":"","sources":["../../src/array/bounded-length-tuple.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAUxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,kBAAkB,CAChC,CAAC,EACD,GAAG,SAAS,sBAAsB,EAClC,GAAG,SAAS,sBAAsB,EAElC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAC/C,CAAC,CACH,GACA,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAIzC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,SAAS,sBAAsB,EACtE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;CACtC,CAAC,CACH,GACA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAIhC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,SAAS,sBAAsB,EACtE,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;CACtC,CAAC,CACH,GACA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAGhC,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;CAC5B,CAAC,CACH,GACA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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';
|
|
6
|
+
|
|
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
|
+
}
|
|
37
|
+
}
|
|
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);
|
|
45
|
+
}
|
|
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
|
+
|
|
78
|
+
export { boundedLengthTuple };
|
|
79
|
+
//# sourceMappingURL=bounded-length-tuple.mjs.map
|
|
@@ -0,0 +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 A,\n Min extends StructuralPrefixLength,\n Max extends StructuralPrefixLength,\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<A, Min extends StructuralPrefixLength>(\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<A, Max extends StructuralPrefixLength>(\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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FixedLengthTuple, type StructuralPrefixLength } from 'ts-type-forge';
|
|
2
|
+
import { type Type } from '../type.mjs';
|
|
3
|
+
export type { FixedLengthTuple } from 'ts-type-forge';
|
|
4
|
+
export declare const fixedLengthTuple: <A, N extends StructuralPrefixLength>(size: N, elementType: Type<A>, options?: Partial<Readonly<{
|
|
5
|
+
typeName: string;
|
|
6
|
+
defaultValue: FixedLengthTuple<N, A>;
|
|
7
|
+
}>>) => Type<FixedLengthTuple<N, A>>;
|
|
8
|
+
//# sourceMappingURL=fixed-length-tuple.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed-length-tuple.d.mts","sourceRoot":"","sources":["../../src/array/fixed-length-tuple.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAUxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,SAAS,sBAAsB,QAC5D,CAAC,eACM,IAAI,CAAC,CAAC,CAAC,YACV,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACtC,CAAC,CACH,KACA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAoF7B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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 fixedLengthTuple = (size, elementType, options) => {
|
|
8
|
+
const typeName = options?.typeName ?? `FixedLengthTuple<${size}, ${elementType.typeName}>`;
|
|
9
|
+
const getDefaultValue = memoizeFunction(
|
|
10
|
+
() => options?.defaultValue ?? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
11
|
+
Arr.create(size, 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 (!Arr.isFixedLengthTuple(a, size)) {
|
|
25
|
+
return Result.err([
|
|
26
|
+
{
|
|
27
|
+
path: [],
|
|
28
|
+
actualValue: a,
|
|
29
|
+
expectedType: typeName,
|
|
30
|
+
typeName,
|
|
31
|
+
details: {
|
|
32
|
+
kind: "array-length",
|
|
33
|
+
expectedLength: size,
|
|
34
|
+
actualLength: a.length
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
const errors = Arr.generate(function* () {
|
|
40
|
+
for (const [index, el] of a.entries()) {
|
|
41
|
+
const res = elementType.validate(el);
|
|
42
|
+
if (Result.isErr(res)) {
|
|
43
|
+
yield* prependIndexToValidationErrors(res.value, index);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
if (Arr.isNonEmpty(errors)) {
|
|
48
|
+
return Result.err(errors);
|
|
49
|
+
}
|
|
50
|
+
return Result.ok(a);
|
|
51
|
+
};
|
|
52
|
+
const fill = (a) => !Arr.isArray(a) ? getDefaultValue() : (
|
|
53
|
+
// TODO: remove as
|
|
54
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
55
|
+
Arr.map(
|
|
56
|
+
Arr.seq(size),
|
|
57
|
+
(i) => elementType.fill(a[i])
|
|
58
|
+
)
|
|
59
|
+
);
|
|
60
|
+
const prune = (a) => (
|
|
61
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
62
|
+
Arr.map(a, (el) => elementType.prune(el))
|
|
63
|
+
);
|
|
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
|
+
|
|
78
|
+
export { fixedLengthTuple };
|
|
79
|
+
//# sourceMappingURL=fixed-length-tuple.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed-length-tuple.mjs","sources":["../../src/array/fixed-length-tuple.mts"],"sourcesContent":["import { Arr, memoizeFunction, Result } from 'ts-data-forge';\nimport {\n type FixedLengthTuple,\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 { FixedLengthTuple } from 'ts-type-forge';\n\nexport const fixedLengthTuple = <A, N extends StructuralPrefixLength>(\n size: N,\n elementType: Type<A>,\n options?: Partial<\n Readonly<{\n typeName: string;\n defaultValue: FixedLengthTuple<N, A>;\n }>\n >,\n): Type<FixedLengthTuple<N, A>> => {\n type T = FixedLengthTuple<N, A>;\n\n const typeName =\n options?.typeName ?? `FixedLengthTuple<${size}, ${elementType.typeName}>`;\n\n const getDefaultValue = memoizeFunction(\n (): T =>\n options?.defaultValue ??\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (Arr.create(size, elementType.defaultValue) as T),\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 (!Arr.isFixedLengthTuple(a, size)) {\n return Result.err([\n {\n path: [],\n actualValue: a,\n expectedType: typeName,\n typeName,\n details: {\n kind: 'array-length',\n expectedLength: size,\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 return Result.ok(a);\n };\n\n const fill: Type<T>['fill'] = (a) =>\n !Arr.isArray(a)\n ? getDefaultValue()\n : // TODO: remove as\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (Arr.map(\n Arr.seq(size),\n (i) => elementType.fill(a[i]) satisfies A,\n ) as T);\n\n const prune = (a: T): T =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Arr.map(a, (el) => elementType.prune(el)) as T;\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":";;;;;;AAiBO,MAAM,gBAAA,GAAmB,CAC9B,IAAA,EACA,WAAA,EACA,OAAA,KAMiC;AAGjC,EAAA,MAAM,WACJ,OAAA,EAAS,QAAA,IAAY,oBAAoB,IAAI,CAAA,EAAA,EAAK,YAAY,QAAQ,CAAA,CAAA,CAAA;AAExE,EAAA,MAAM,eAAA,GAAkB,eAAA;AAAA,IACtB,MACE,OAAA,EAAS,YAAA;AAAA,IAER,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,WAAA,CAAY,YAAY;AAAA,GAC9C;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,CAAC,GAAA,CAAI,kBAAA,CAAmB,CAAA,EAAG,IAAI,CAAA,EAAG;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,cAAA;AAAA,YACN,cAAA,EAAgB,IAAA;AAAA,YAChB,cAAc,CAAA,CAAE;AAAA;AAClB;AACF,OACD,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;AAEA,IAAA,OAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,IAAA,GAAwB,CAAC,CAAA,KAC7B,CAAC,IAAI,OAAA,CAAQ,CAAC,IACV,eAAA,EAAgB;AAAA;AAAA;AAAA,IAGf,GAAA,CAAI,GAAA;AAAA,MACH,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,MACZ,CAAC,CAAA,KAAM,WAAA,CAAY,IAAA,CAAK,CAAA,CAAE,CAAC,CAAC;AAAA;AAC9B,GAAA;AAEN,EAAA,MAAM,QAAQ,CAAC,CAAA;AAAA;AAAA,IAEb,GAAA,CAAI,IAAI,CAAA,EAAG,CAAC,OAAO,WAAA,CAAY,KAAA,CAAM,EAAE,CAAC;AAAA,GAAA;AAE1C,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,IAAA,EAAM,aAAa,QAAQ,CAAA;AAAA,IAC3B,QAAA,EAAU,eAAe,QAAQ;AAAA,GACnC;AACF;;;;"}
|
package/dist/array/index.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export * from './array-at-least-length.mjs';
|
|
2
|
-
export * from './array-at-most-length.mjs';
|
|
3
|
-
export * from './array-bounded-length.mjs';
|
|
4
|
-
export * from './array-of-length.mjs';
|
|
5
1
|
export * from './array.mjs';
|
|
2
|
+
export * from './bounded-length-tuple.mjs';
|
|
3
|
+
export * from './fixed-length-tuple.mjs';
|
|
4
|
+
export * from './length-constrained-array.mjs';
|
|
5
|
+
export * from './max-length-tuple.mjs';
|
|
6
|
+
export * from './min-length-tuple.mjs';
|
|
6
7
|
export * from './non-empty-array.mjs';
|
|
7
8
|
export * from './tuple.mjs';
|
|
8
9
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/array/index.mts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/array/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC"}
|
package/dist/array/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { arrayAtLeastLength } from './array-at-least-length.mjs';
|
|
2
|
-
export { arrayAtMostLength } from './array-at-most-length.mjs';
|
|
3
|
-
export { arrayBoundedLength } from './array-bounded-length.mjs';
|
|
4
|
-
export { arrayOfLength } from './array-of-length.mjs';
|
|
5
1
|
export { array } from './array.mjs';
|
|
2
|
+
export { boundedLengthTuple } from './bounded-length-tuple.mjs';
|
|
3
|
+
export { fixedLengthTuple } from './fixed-length-tuple.mjs';
|
|
4
|
+
export { boundedLengthArray, fixedLengthArray, maxLengthArray, minLengthArray } from './length-constrained-array.mjs';
|
|
5
|
+
export { maxLengthTuple } from './max-length-tuple.mjs';
|
|
6
|
+
export { minLengthTuple } from './min-length-tuple.mjs';
|
|
6
7
|
export { nonEmptyArray } from './non-empty-array.mjs';
|
|
7
8
|
export { tuple } from './tuple.mjs';
|
|
8
9
|
//# sourceMappingURL=index.mjs.map
|
package/dist/array/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type BoundedLengthArray, type FixedLengthArray, type MaxLengthArray, type MinLengthArray, type SupportedLength } from 'ts-type-forge';
|
|
2
|
+
import { type Type } from '../type.mjs';
|
|
3
|
+
export type { BoundedLengthArray, FixedLengthArray, MaxLengthArray, MinLengthArray, } from 'ts-type-forge';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a `Type` for a readonly array with exactly `size` elements, typed as
|
|
6
|
+
* the branded {@link FixedLengthArray} instead of the structural tuple type
|
|
7
|
+
* produced by `fixedLengthTuple`.
|
|
8
|
+
*
|
|
9
|
+
* Because the length constraint lives only in the brand, the element type is
|
|
10
|
+
* never expanded into tuple positions, which keeps type-checking cheap even
|
|
11
|
+
* when `A` is a large type. Prefer this over `fixedLengthTuple` when `A` is
|
|
12
|
+
* large; prefer `fixedLengthTuple` when positional element types or a literal
|
|
13
|
+
* `length` are needed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function fixedLengthArray<A, N extends SupportedLength>(size: N, elementType: Type<A>, options?: Partial<Readonly<{
|
|
16
|
+
typeName: string;
|
|
17
|
+
defaultValue: FixedLengthArray<N, A>;
|
|
18
|
+
}>>): Type<FixedLengthArray<N, A>>;
|
|
19
|
+
export declare function fixedLengthArray<A>(size: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
20
|
+
typeName: string;
|
|
21
|
+
defaultValue: readonly A[];
|
|
22
|
+
}>>): Type<readonly A[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a `Type` for a readonly array with at least `minLength` elements,
|
|
25
|
+
* typed as the branded {@link MinLengthArray} instead of the structural
|
|
26
|
+
* `readonly [A, ..., A, ...A[]]` type produced by `minLengthTuple`.
|
|
27
|
+
*
|
|
28
|
+
* Because the length constraint lives only in the brand, the element type is
|
|
29
|
+
* never expanded into tuple positions, which keeps type-checking cheap even
|
|
30
|
+
* when `A` is a large type.
|
|
31
|
+
*/
|
|
32
|
+
export declare function minLengthArray<A, N extends SupportedLength>(minLength: N, elementType: Type<A>, options?: Partial<Readonly<{
|
|
33
|
+
typeName: string;
|
|
34
|
+
defaultValue: MinLengthArray<N, A>;
|
|
35
|
+
}>>): Type<MinLengthArray<N, A>>;
|
|
36
|
+
export declare function minLengthArray<A>(minLength: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
37
|
+
typeName: string;
|
|
38
|
+
defaultValue: readonly A[];
|
|
39
|
+
}>>): Type<readonly A[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a `Type` for a readonly array with at most `maxLength` elements,
|
|
42
|
+
* typed as the branded {@link MaxLengthArray} instead of the union of tuple
|
|
43
|
+
* types produced by `maxLengthTuple`.
|
|
44
|
+
*
|
|
45
|
+
* Because the length constraint lives only in the brand, no union of tuples
|
|
46
|
+
* of the element type is ever constructed, which keeps type-checking cheap
|
|
47
|
+
* even when `A` is a large type.
|
|
48
|
+
*/
|
|
49
|
+
export declare function maxLengthArray<A, N extends SupportedLength>(maxLength: N, elementType: Type<A>, options?: Partial<Readonly<{
|
|
50
|
+
typeName: string;
|
|
51
|
+
defaultValue: MaxLengthArray<N, A>;
|
|
52
|
+
}>>): Type<MaxLengthArray<N, A>>;
|
|
53
|
+
export declare function maxLengthArray<A>(maxLength: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
54
|
+
typeName: string;
|
|
55
|
+
defaultValue: readonly A[];
|
|
56
|
+
}>>): Type<readonly A[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a `Type` for a readonly array whose length is within the inclusive
|
|
59
|
+
* range `[min, max]`, typed as the branded {@link BoundedLengthArray} instead
|
|
60
|
+
* of the union of tuple types produced by `boundedLengthTuple`.
|
|
61
|
+
*
|
|
62
|
+
* Because the length constraint lives only in the brand, no union of tuples
|
|
63
|
+
* of the element type is ever constructed, which keeps type-checking cheap
|
|
64
|
+
* even when `A` is a large type.
|
|
65
|
+
*/
|
|
66
|
+
export declare function boundedLengthArray<A, Min extends SupportedLength, Max extends SupportedLength>(min: Min, max: Max, elementType: Type<A>, options?: Partial<Readonly<{
|
|
67
|
+
typeName: string;
|
|
68
|
+
defaultValue: BoundedLengthArray<Min, Max, A>;
|
|
69
|
+
}>>): Type<BoundedLengthArray<Min, Max, A>>;
|
|
70
|
+
export declare function boundedLengthArray<A, Min extends SupportedLength>(min: Min, max: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
71
|
+
typeName: string;
|
|
72
|
+
defaultValue: MinLengthArray<Min, A>;
|
|
73
|
+
}>>): Type<MinLengthArray<Min, A>>;
|
|
74
|
+
export declare function boundedLengthArray<A, Max extends SupportedLength>(min: number, max: Max, elementType: Type<A>, options?: Partial<Readonly<{
|
|
75
|
+
typeName: string;
|
|
76
|
+
defaultValue: MaxLengthArray<Max, A>;
|
|
77
|
+
}>>): Type<MaxLengthArray<Max, A>>;
|
|
78
|
+
export declare function boundedLengthArray<A>(min: number, max: number, elementType: Type<A>, options?: Partial<Readonly<{
|
|
79
|
+
typeName: string;
|
|
80
|
+
defaultValue: readonly A[];
|
|
81
|
+
}>>): Type<readonly A[]>;
|
|
82
|
+
//# sourceMappingURL=length-constrained-array.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-constrained-array.d.mts","sourceRoot":"","sources":["../../src/array/length-constrained-array.mts"],"names":[],"mappings":"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"}
|