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.
- package/README.md +4 -4
- package/dist/array/array.mjs +44 -49
- package/dist/array/array.mjs.map +1 -1
- package/dist/array/bounded-length-array.mjs +47 -50
- package/dist/array/bounded-length-array.mjs.map +1 -1
- package/dist/array/bounded-length-tuple.mjs +70 -75
- package/dist/array/bounded-length-tuple.mjs.map +1 -1
- package/dist/array/build-type.mjs +51 -40
- package/dist/array/build-type.mjs.map +1 -1
- package/dist/array/fixed-length-array.mjs +38 -43
- package/dist/array/fixed-length-array.mjs.map +1 -1
- package/dist/array/fixed-length-tuple.mjs +64 -75
- package/dist/array/fixed-length-tuple.mjs.map +1 -1
- package/dist/array/index.mjs +12 -12
- package/dist/array/index.mjs.map +1 -1
- package/dist/array/max-length-array.mjs +40 -46
- package/dist/array/max-length-array.mjs.map +1 -1
- package/dist/array/max-length-tuple.mjs +62 -71
- package/dist/array/max-length-tuple.mjs.map +1 -1
- package/dist/array/min-length-array.mjs +45 -48
- package/dist/array/min-length-array.mjs.map +1 -1
- package/dist/array/min-length-tuple.mjs +61 -68
- package/dist/array/min-length-tuple.mjs.map +1 -1
- package/dist/array/non-empty-array.mjs +51 -53
- package/dist/array/non-empty-array.mjs.map +1 -1
- package/dist/array/tuple.mjs +67 -72
- package/dist/array/tuple.mjs.map +1 -1
- package/dist/brand/brand.mjs +49 -51
- package/dist/brand/brand.mjs.map +1 -1
- package/dist/brand/branded-number.mjs +13 -18
- package/dist/brand/branded-number.mjs.map +1 -1
- package/dist/brand/branded-string.mjs +13 -18
- package/dist/brand/branded-string.mjs.map +1 -1
- package/dist/brand/index.mjs +4 -4
- package/dist/brand/index.mjs.map +1 -1
- package/dist/compose/index.mjs +3 -3
- package/dist/compose/index.mjs.map +1 -1
- package/dist/compose/intersection.mjs +91 -80
- package/dist/compose/intersection.mjs.map +1 -1
- package/dist/compose/union.mjs +157 -132
- package/dist/compose/union.mjs.map +1 -1
- package/dist/constraints/index.mjs +2 -2
- package/dist/constraints/index.mjs.map +1 -1
- package/dist/constraints/with-constraints.mjs +47 -30
- package/dist/constraints/with-constraints.mjs.map +1 -1
- package/dist/entry-point.mjs +13 -88
- package/dist/entry-point.mjs.map +1 -1
- package/dist/enum/enum.mjs +44 -51
- package/dist/enum/enum.mjs.map +1 -1
- package/dist/enum/index.mjs +6 -6
- package/dist/enum/index.mjs.map +1 -1
- package/dist/enum/int-range-inclusive.mjs +53 -57
- package/dist/enum/int-range-inclusive.mjs.map +1 -1
- package/dist/enum/int-range.mjs +53 -57
- package/dist/enum/int-range.mjs.map +1 -1
- package/dist/enum/uint-range-inclusive.mjs +53 -57
- package/dist/enum/uint-range-inclusive.mjs.map +1 -1
- package/dist/enum/uint-range.mjs +53 -57
- package/dist/enum/uint-range.mjs.map +1 -1
- package/dist/index.mjs +12 -88
- package/dist/index.mjs.map +1 -1
- package/dist/other-types/index.mjs +8 -8
- package/dist/other-types/index.mjs.map +1 -1
- package/dist/other-types/literal.mjs +11 -11
- package/dist/other-types/literal.mjs.map +1 -1
- package/dist/other-types/map.mjs +74 -82
- package/dist/other-types/map.mjs.map +1 -1
- package/dist/other-types/recursion.mjs +210 -71
- package/dist/other-types/recursion.mjs.map +1 -1
- package/dist/other-types/refine.mjs +31 -31
- package/dist/other-types/refine.mjs.map +1 -1
- package/dist/other-types/set.mjs +54 -58
- package/dist/other-types/set.mjs.map +1 -1
- package/dist/other-types/template-literal.mjs +111 -43
- package/dist/other-types/template-literal.mjs.map +1 -1
- package/dist/other-types/unknown.mjs +13 -18
- package/dist/other-types/unknown.mjs.map +1 -1
- package/dist/predefined/brand/index.mjs +3 -29
- package/dist/predefined/brand/index.mjs.map +1 -1
- package/dist/predefined/brand/number/finite-number.mjs +12 -17
- package/dist/predefined/brand/number/finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/index.mjs +23 -23
- package/dist/predefined/brand/number/index.mjs.map +1 -1
- package/dist/predefined/brand/number/int.mjs +12 -17
- package/dist/predefined/brand/number/int.mjs.map +1 -1
- package/dist/predefined/brand/number/int16.mjs +24 -29
- package/dist/predefined/brand/number/int16.mjs.map +1 -1
- package/dist/predefined/brand/number/int32.mjs +20 -25
- package/dist/predefined/brand/number/int32.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-finite-number.mjs +12 -17
- package/dist/predefined/brand/number/negative-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-int.mjs +21 -26
- package/dist/predefined/brand/number/negative-int.mjs.map +1 -1
- package/dist/predefined/brand/number/negative-safe-int.mjs +22 -27
- package/dist/predefined/brand/number/negative-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-negative-finite-number.mjs +12 -17
- package/dist/predefined/brand/number/non-negative-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-finite-number.mjs +12 -17
- package/dist/predefined/brand/number/non-positive-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-int.mjs +12 -17
- package/dist/predefined/brand/number/non-positive-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-positive-safe-int.mjs +21 -26
- package/dist/predefined/brand/number/non-positive-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-finite-number.mjs +12 -17
- package/dist/predefined/brand/number/non-zero-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-int.mjs +12 -17
- package/dist/predefined/brand/number/non-zero-int.mjs.map +1 -1
- package/dist/predefined/brand/number/non-zero-safe-int.mjs +12 -17
- package/dist/predefined/brand/number/non-zero-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-finite-number.mjs +20 -25
- package/dist/predefined/brand/number/positive-finite-number.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-int.mjs +21 -26
- package/dist/predefined/brand/number/positive-int.mjs.map +1 -1
- package/dist/predefined/brand/number/positive-safe-int.mjs +22 -27
- package/dist/predefined/brand/number/positive-safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/safe-int.mjs +12 -17
- package/dist/predefined/brand/number/safe-int.mjs.map +1 -1
- package/dist/predefined/brand/number/safe-uint.mjs +21 -26
- package/dist/predefined/brand/number/safe-uint.mjs.map +1 -1
- package/dist/predefined/brand/number/uint.mjs +20 -25
- package/dist/predefined/brand/number/uint.mjs.map +1 -1
- package/dist/predefined/brand/number/uint16.mjs +24 -29
- package/dist/predefined/brand/number/uint16.mjs.map +1 -1
- package/dist/predefined/brand/number/uint32.mjs +22 -27
- package/dist/predefined/brand/number/uint32.mjs.map +1 -1
- package/dist/predefined/brand/string/email.mjs +22 -21
- package/dist/predefined/brand/string/email.mjs.map +1 -1
- package/dist/predefined/brand/string/index.mjs +7 -7
- package/dist/predefined/brand/string/index.mjs.map +1 -1
- package/dist/predefined/brand/string/iso-8601.mjs +79 -64
- package/dist/predefined/brand/string/iso-8601.mjs.map +1 -1
- package/dist/predefined/brand/string/json-string.mjs +24 -20
- package/dist/predefined/brand/string/json-string.mjs.map +1 -1
- package/dist/predefined/brand/string/non-empty-string.mjs +12 -8
- package/dist/predefined/brand/string/non-empty-string.mjs.map +1 -1
- package/dist/predefined/brand/string/uri.mjs +18 -14
- package/dist/predefined/brand/string/uri.mjs.map +1 -1
- package/dist/predefined/brand/string/uuid.mjs +58 -53
- package/dist/predefined/brand/string/uuid.mjs.map +1 -1
- package/dist/predefined/index.mjs +6 -33
- package/dist/predefined/index.mjs.map +1 -1
- package/dist/predefined/int8.mjs +3 -9
- package/dist/predefined/int8.mjs.map +1 -1
- package/dist/predefined/json.mjs +23 -21
- package/dist/predefined/json.mjs.map +1 -1
- package/dist/predefined/nullable.mjs +4 -10
- package/dist/predefined/nullable.mjs.map +1 -1
- package/dist/predefined/uint8.mjs +3 -9
- package/dist/predefined/uint8.mjs.map +1 -1
- package/dist/primitives/bigint.mjs +121 -139
- package/dist/primitives/bigint.mjs.map +1 -1
- package/dist/primitives/boolean.mjs +3 -7
- package/dist/primitives/boolean.mjs.map +1 -1
- package/dist/primitives/index.mjs +8 -8
- package/dist/primitives/index.mjs.map +1 -1
- package/dist/primitives/null.mjs +6 -10
- package/dist/primitives/null.mjs.map +1 -1
- package/dist/primitives/number.mjs +151 -157
- package/dist/primitives/number.mjs.map +1 -1
- package/dist/primitives/string.mjs +96 -115
- package/dist/primitives/string.mjs.map +1 -1
- package/dist/primitives/symbol.mjs +6 -10
- package/dist/primitives/symbol.mjs.map +1 -1
- package/dist/primitives/undefined.mjs +6 -10
- package/dist/primitives/undefined.mjs.map +1 -1
- package/dist/record/at.mjs +46 -42
- package/dist/record/at.mjs.map +1 -1
- package/dist/record/index.mjs +12 -12
- package/dist/record/index.mjs.map +1 -1
- package/dist/record/key-value-record.mjs +77 -84
- package/dist/record/key-value-record.mjs.map +1 -1
- package/dist/record/keyof.mjs +41 -35
- package/dist/record/keyof.mjs.map +1 -1
- package/dist/record/merge-records.mjs +61 -48
- package/dist/record/merge-records.mjs.map +1 -1
- package/dist/record/omit.mjs +32 -21
- package/dist/record/omit.mjs.map +1 -1
- package/dist/record/optional.mjs +55 -25
- package/dist/record/optional.mjs.map +1 -1
- package/dist/record/partial.mjs +33 -29
- package/dist/record/partial.mjs.map +1 -1
- package/dist/record/pick.mjs +23 -21
- package/dist/record/pick.mjs.map +1 -1
- package/dist/record/record.mjs +141 -130
- package/dist/record/record.mjs.map +1 -1
- package/dist/record/required.mjs +39 -34
- package/dist/record/required.mjs.map +1 -1
- package/dist/record/valueof.mjs +36 -30
- package/dist/record/valueof.mjs.map +1 -1
- package/dist/type.mjs +103 -66
- package/dist/type.mjs.map +1 -1
- package/dist/utils/create-assert-fn.mjs +8 -12
- package/dist/utils/create-assert-fn.mjs.map +1 -1
- package/dist/utils/create-cast-fn.mjs +7 -9
- package/dist/utils/create-cast-fn.mjs.map +1 -1
- package/dist/utils/create-is-fn.mjs +2 -5
- package/dist/utils/create-is-fn.mjs.map +1 -1
- package/dist/utils/create-primitive-type.mjs +22 -27
- package/dist/utils/create-primitive-type.mjs.map +1 -1
- package/dist/utils/create-type.mjs +13 -22
- package/dist/utils/create-type.mjs.map +1 -1
- package/dist/utils/index.mjs +8 -8
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/to-union-string.mjs +4 -6
- package/dist/utils/to-union-string.mjs.map +1 -1
- package/dist/utils/validation-error.mjs +226 -171
- package/dist/utils/validation-error.mjs.map +1 -1
- package/package.json +7 -8
- package/src/record/omit.mts +1 -1
- package/src/record/partial.mts +1 -1
- package/src/record/pick.mts +1 -1
- package/src/record/required.mts +1 -1
- package/src/record/valueof.mts +1 -1
- 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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
512
|
+
'\nError: expected <number> type but <string> type value "not a number" was passed.',
|
|
513
513
|
),
|
|
514
514
|
);
|
|
515
515
|
}
|
package/dist/array/array.mjs
CHANGED
|
@@ -1,51 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createAssertFn } from '../utils/
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
51
|
-
|
|
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
|
package/dist/array/array.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.mjs","
|
|
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 {
|
|
2
|
-
import { createPrimitiveValidationError } from '../utils/
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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"],"
|
|
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 {
|
|
2
|
-
import { createAssertFn } from '../utils/
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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"],"
|
|
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/
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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"],"
|
|
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"}
|