ts-fortress 2.2.1 → 2.2.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 +135 -0
- package/dist/array/array-of-length.d.mts.map +1 -1
- package/dist/array/array-of-length.mjs +8 -6
- package/dist/array/array-of-length.mjs.map +1 -1
- package/dist/array/array.d.mts.map +1 -1
- package/dist/array/array.mjs +8 -6
- package/dist/array/array.mjs.map +1 -1
- package/dist/array/non-empty-array.d.mts.map +1 -1
- package/dist/array/non-empty-array.mjs +8 -6
- package/dist/array/non-empty-array.mjs.map +1 -1
- package/dist/array/tuple.d.mts.map +1 -1
- package/dist/array/tuple.mjs +8 -6
- package/dist/array/tuple.mjs.map +1 -1
- package/dist/compose/intersection.d.mts.map +1 -1
- package/dist/compose/intersection.mjs +10 -10
- package/dist/compose/intersection.mjs.map +1 -1
- package/dist/compose/merge-records.d.mts.map +1 -1
- package/dist/compose/merge-records.mjs +10 -10
- package/dist/compose/merge-records.mjs.map +1 -1
- package/dist/compose/union.d.mts.map +1 -1
- package/dist/compose/union.mjs.map +1 -1
- package/dist/enum/enum.d.mts.map +1 -1
- package/dist/enum/enum.mjs.map +1 -1
- package/dist/enum/uint-range.d.mts.map +1 -1
- package/dist/enum/uint-range.mjs.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/record/key-value-record.d.mts.map +1 -1
- package/dist/record/key-value-record.mjs +21 -24
- package/dist/record/key-value-record.mjs.map +1 -1
- package/dist/record/omit.d.mts.map +1 -1
- package/dist/record/omit.mjs +3 -2
- package/dist/record/omit.mjs.map +1 -1
- package/dist/record/partial.d.mts.map +1 -1
- package/dist/record/partial.mjs +2 -2
- package/dist/record/partial.mjs.map +1 -1
- package/dist/record/pick.d.mts.map +1 -1
- package/dist/record/pick.mjs +2 -2
- package/dist/record/pick.mjs.map +1 -1
- package/dist/record/record.d.mts.map +1 -1
- package/dist/record/record.mjs +23 -21
- package/dist/record/record.mjs.map +1 -1
- package/dist/type.d.mts +1 -1
- package/dist/type.d.mts.map +1 -1
- package/dist/utils/create-assert-fn.mjs +1 -1
- package/dist/utils/create-cast-fn.mjs +1 -1
- package/dist/utils/create-primitive-type.mjs +1 -1
- package/dist/utils/index.d.mts +1 -0
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +1 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/validation-error.d.mts.map +1 -0
- package/dist/utils/validation-error.mjs.map +1 -0
- package/package.json +4 -2
- package/src/array/array-of-length.mts +12 -7
- package/src/array/array-of-length.test.mts +10 -1
- package/src/array/array.mts +12 -7
- package/src/array/array.test.mts +10 -1
- package/src/array/non-empty-array.mts +11 -7
- package/src/array/non-empty-array.test.mts +10 -1
- package/src/array/tuple.mts +11 -9
- package/src/array/tuple.test.mts +14 -1
- package/src/branded/brand.mts +2 -2
- package/src/branded/number/finite-number.test.mts +10 -1
- package/src/branded/number/int.test.mts +10 -1
- package/src/branded/number/int16.test.mts +10 -1
- package/src/branded/number/int32.test.mts +10 -1
- package/src/branded/number/non-negative-finite-number.test.mts +10 -1
- package/src/branded/number/non-zero-finite-number.test.mts +10 -1
- package/src/branded/number/non-zero-int.test.mts +10 -1
- package/src/branded/number/non-zero-safe-int.test.mts +10 -1
- package/src/branded/number/positive-finite-number.test.mts +10 -1
- package/src/branded/number/positive-int.test.mts +10 -1
- package/src/branded/number/positive-safe-int.test.mts +10 -1
- package/src/branded/number/safe-int.test.mts +10 -1
- package/src/branded/number/safe-uint.test.mts +10 -1
- package/src/branded/number/uint.test.mts +10 -1
- package/src/branded/number/uint16.test.mts +10 -1
- package/src/branded/number/uint32.test.mts +10 -1
- package/src/branded/simple-branded-number.test.mts +19 -1
- package/src/branded/simple-branded-string.test.mts +19 -1
- package/src/compose/intersection.mts +23 -19
- package/src/compose/intersection.test.mts +28 -1
- package/src/compose/merge-records.mts +22 -19
- package/src/compose/merge-records.test.mts +10 -1
- package/src/compose/union.mts +6 -2
- package/src/compose/union.test.mts +10 -1
- package/src/enum/enum.mts +6 -2
- package/src/enum/enum.test.mts +10 -1
- package/src/enum/uint-range.mts +6 -2
- package/src/enum/uint-range.test.mts +10 -1
- package/src/index.mts +0 -1
- package/src/primitives/bigint.test.mts +19 -1
- package/src/primitives/boolean.test.mts +28 -1
- package/src/primitives/null.test.mts +9 -0
- package/src/primitives/number.test.mts +18 -0
- package/src/primitives/string.test.mts +18 -0
- package/src/primitives/symbol.test.mts +10 -1
- package/src/primitives/undefined.test.mts +9 -0
- package/src/record/key-value-record.mts +34 -36
- package/src/record/key-value-record.test.mts +14 -1
- package/src/record/keyof.test.mts +10 -1
- package/src/record/omit.mts +8 -5
- package/src/record/omit.test.mts +46 -1
- package/src/record/partial.mts +7 -5
- package/src/record/partial.test.mts +71 -1
- package/src/record/pick.mts +7 -5
- package/src/record/pick.test.mts +46 -1
- package/src/record/record-allow-excess-properties.test.mts +28 -1
- package/src/record/record-strict-composition-simple.test.mts +38 -0
- package/src/record/record-strict-composition.test.mts +71 -0
- package/src/record/record.mts +30 -29
- package/src/record/record.test.mts +26 -1
- package/src/record/strict-record.test.mts +10 -1
- package/src/type.mts +1 -1
- package/src/utils/create-assert-fn.mts +1 -1
- package/src/utils/create-cast-fn.mts +1 -1
- package/src/utils/create-primitive-type.mts +1 -1
- package/src/utils/index.mts +1 -0
- package/dist/validation-error.d.mts.map +0 -1
- package/dist/validation-error.mjs.map +0 -1
- package/src/combination.test.mts +0 -544
- /package/dist/{validation-error.d.mts → utils/validation-error.d.mts} +0 -0
- /package/dist/{validation-error.mjs → utils/validation-error.mjs} +0 -0
- /package/src/{validation-error.mts → utils/validation-error.mts} +0 -0
- /package/src/{validation-error.test.mts → utils/validation-error.test.mts} +0 -0
package/dist/record/omit.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { Obj, isRecord, Result } from 'ts-data-forge';
|
|
|
2
2
|
import { createAssertFn } from '../utils/create-assert-fn.mjs';
|
|
3
3
|
import { createCastFn } from '../utils/create-cast-fn.mjs';
|
|
4
4
|
import { createIsFn } from '../utils/create-is-fn.mjs';
|
|
5
|
-
import { createPrimitiveValidationError } from '../validation-error.mjs';
|
|
5
|
+
import { createPrimitiveValidationError } from '../utils/validation-error.mjs';
|
|
6
6
|
|
|
7
7
|
/** Creates a record type with keys omitted. */
|
|
8
8
|
const omit = (recordType, keysToOmit, options) => {
|
|
@@ -25,7 +25,8 @@ const omit = (recordType, keysToOmit, options) => {
|
|
|
25
25
|
...a,
|
|
26
26
|
};
|
|
27
27
|
const baseValidationResult = recordType.validate(objectFilled);
|
|
28
|
-
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
29
|
+
return Result.map(baseValidationResult, () => a);
|
|
29
30
|
};
|
|
30
31
|
const fill = (a) => Obj.omit(recordType.fill(a), keysToOmit);
|
|
31
32
|
return {
|
package/dist/record/omit.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omit.mjs","sources":["../../src/record/omit.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"omit.mjs","sources":["../../src/record/omit.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AASA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAa,EACb,UAAsB,EACtB,OAIC,KAC6B;AAG9B,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;QACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;AAEzD,IAAA,MAAM,YAAY,GAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC;AAErE,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChB,OAAO,MAAM,CAAC,GAAG,CAAC;AAChB,gBAAA,8BAA8B,CAAC;AAC7B,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,YAAY,EAAE,QAAQ;AACtB,oBAAA,QAAQ,EAAE,cAAc;iBACzB,CAAC;AACH,aAAA,CAAC;;;AAIJ,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;AAC3C,YAAA,GAAG,CAAC;SACQ;QAEd,MAAM,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;;QAG9D,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAM,CAAC;AACvD,IAAA,CAAC;IAED,MAAM,IAAI,GAAoB,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IAE7E,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY;QACZ,IAAI;QACJ,QAAQ;AACR,QAAA,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partial.d.mts","sourceRoot":"","sources":["../../src/record/partial.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"partial.d.mts","sourceRoot":"","sources":["../../src/record/partial.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrD;;;GAGG;AACH,eAAO,MAAM,OAAO,GAClB,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EACnC,KAAK,CAAC,gBAAgB,SAAS,aAAa,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAEtE,YAAY,CAAC,EACb,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,WAAW,CAAC,CAAC,EAAE,gBAAgB,CAwEjC,CAAC;AAEF,KAAK,gBAAgB,CACnB,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EAC7B,gBAAgB,SAAS,aAAa,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAE5E,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,IAAI,GAC5C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAClB,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAElE,KAAK,WAAW,CACd,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EAC7B,gBAAgB,SAAS,aAAa,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAC1E,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC"}
|
package/dist/record/partial.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { Obj, isRecord, Result, ISet } from 'ts-data-forge';
|
|
|
2
2
|
import { createAssertFn } from '../utils/create-assert-fn.mjs';
|
|
3
3
|
import { createCastFn } from '../utils/create-cast-fn.mjs';
|
|
4
4
|
import { createIsFn } from '../utils/create-is-fn.mjs';
|
|
5
|
-
import { createPrimitiveValidationError } from '../validation-error.mjs';
|
|
5
|
+
import { createPrimitiveValidationError } from '../utils/validation-error.mjs';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Creates a Partial type. If keysToBeOptional is set, only those keys are
|
|
@@ -35,7 +35,7 @@ const partial = (recordType, options) => {
|
|
|
35
35
|
};
|
|
36
36
|
const validationResult = recordType.validate(objectFilled);
|
|
37
37
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
38
|
-
return Result.map(validationResult,
|
|
38
|
+
return Result.map(validationResult, () => a);
|
|
39
39
|
};
|
|
40
40
|
const fill = (a) => {
|
|
41
41
|
if (!isRecord(a)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partial.mjs","sources":["../../src/record/partial.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"partial.mjs","sources":["../../src/record/partial.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AASA;;;AAGG;MACU,OAAO,GAAG,CAIrB,UAAa,EACb,OAKC,KACmC;AAGpC,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,SAAC,OAAO,EAAE,gBAAgB,KAAK;AAC7B,cAAE,CAAA,QAAA,EAAW,UAAU,CAAC,QAAQ,CAAA,CAAA;AAChC,cAAE,CAAA,iBAAA,EAAoB,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;AAExF,IAAA,MAAM,gBAAgB,GACpB,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;AAGnE,IAAA,MAAM,YAAY,GAAM,GAAG,CAAC,IAAI,CAC9B,UAAU,CAAC,YAAY,EACvB,gBAAgB,CACZ;AAEN,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChB,OAAO,MAAM,CAAC,GAAG,CAAC;AAChB,gBAAA,8BAA8B,CAAC;AAC7B,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,YAAY,EAAE,QAAQ;AACtB,oBAAA,QAAQ,EAAE,cAAc;iBACzB,CAAC;AACH,aAAA,CAAC;;;AAIJ,QAAA,MAAM,YAAY,GAAG;;YAEnB,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,gBAAgB,CAAC;;AAEtD,YAAA,GAAG,CAAC;SACQ;QAEd,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;;QAG1D,OAAO,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAM,CAAC;AACnD,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAoB,CAAC,CAAC,KAAI;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAChB,YAAA,OAAO,YAAY;;AAGrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;QAG7C,OAAO,GAAG,CAAC,IAAI;;AAEb,QAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;AAElB,QAAA,gBAAgB,CAAC,MAAM,CACrB,CAAC,CAAC;;QAEA,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CACpB,CACc;AACnB,IAAA,CAAC;IAED,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY;QACZ,IAAI;QACJ,QAAQ;AACR,QAAA,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;AAeA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pick.d.mts","sourceRoot":"","sources":["../../src/record/pick.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pick.d.mts","sourceRoot":"","sources":["../../src/record/pick.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrD,8CAA8C;AAC9C,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EACnC,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,EAE9D,YAAY,CAAC,EACb,YAAY,UAAU,EACtB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,UAAU,CAAC,CAAC,EAAE,UAAU,CA4C1B,CAAC;AAEF,KAAK,UAAU,CACb,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EAC7B,UAAU,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/record/pick.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { Obj, isRecord, Result } from 'ts-data-forge';
|
|
|
2
2
|
import { createAssertFn } from '../utils/create-assert-fn.mjs';
|
|
3
3
|
import { createCastFn } from '../utils/create-cast-fn.mjs';
|
|
4
4
|
import { createIsFn } from '../utils/create-is-fn.mjs';
|
|
5
|
-
import { createPrimitiveValidationError } from '../validation-error.mjs';
|
|
5
|
+
import { createPrimitiveValidationError } from '../utils/validation-error.mjs';
|
|
6
6
|
|
|
7
7
|
/** Creates a record type with keys picked. */
|
|
8
8
|
const pick = (recordType, keysToPick, options) => {
|
|
@@ -26,7 +26,7 @@ const pick = (recordType, keysToPick, options) => {
|
|
|
26
26
|
};
|
|
27
27
|
const baseValidationResult = recordType.validate(objectFilled);
|
|
28
28
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
29
|
-
return Result.map(baseValidationResult,
|
|
29
|
+
return Result.map(baseValidationResult, () => a);
|
|
30
30
|
};
|
|
31
31
|
const fill = (a) => Obj.pick(recordType.fill(a), keysToPick);
|
|
32
32
|
return {
|
package/dist/record/pick.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pick.mjs","sources":["../../src/record/pick.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"pick.mjs","sources":["../../src/record/pick.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AASA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAa,EACb,UAAsB,EACtB,OAIC,KAC4B;AAG7B,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;QACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;AAEzD,IAAA,MAAM,YAAY,GAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAM;AAE1E,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChB,OAAO,MAAM,CAAC,GAAG,CAAC;AAChB,gBAAA,8BAA8B,CAAC;AAC7B,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,YAAY,EAAE,QAAQ;AACtB,oBAAA,QAAQ,EAAE,cAAc;iBACzB,CAAC;AACH,aAAA,CAAC;;;AAIJ,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;AAC3C,YAAA,GAAG,CAAC;SACQ;QAEd,MAAM,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;;QAG9D,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAM,CAAC;AACvD,IAAA,CAAC;IAED,MAAM,IAAI,GAAoB,CAAC,CAAC,KAC9B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAM;IAE/C,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY;QACZ,IAAI;QACJ,QAAQ;AACR,QAAA,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.mts","sourceRoot":"","sources":["../../src/record/record.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"record.d.mts","sourceRoot":"","sources":["../../src/record/record.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAWrD,eAAO,MAAM,MAAM,GAAI,KAAK,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAC1E,QAAQ,CAAC,EACT,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IAEjB,oBAAoB;IACpB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC,CACH,KACA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAuGzB,CAAC;AAEF,KAAK,eAAe,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAClE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE5C,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAC7C,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,KAAK,sBAAsB,CACzB,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAC/C,YAAY,SAAS,MAAM,CAAC,IAE5B,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,IAAI,GACpC,QAAQ,CAAC;SACN,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACxD,CAAC,GACF,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,SAAS,IAAI,GACxC,QAAQ,CACN,iBAAiB,CAAC;SACf,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACvC,CAAC,CACH,GACD,QAAQ,CACN,iBAAiB,CACf;SACG,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACvC,GAAG;SACD,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACxD,CACF,CACF,CAAC;IAEV,KAAK,gBAAgB,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;SACtE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YAAE,QAAQ,EAAE,IAAI,CAAA;SAAE,GAAG,CAAC,GAAG,KAAK;KAC5D,CAAC,MAAM,CAAC,CAAC,CAAC;;CACZ;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAErD,QAAQ,CAAC,EACT,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CACoC,CAAC"}
|
package/dist/record/record.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { tp, isRecord, Result } from 'ts-data-forge';
|
|
1
|
+
import { tp, isRecord, Result, Arr } from 'ts-data-forge';
|
|
2
2
|
import { createAssertFn } from '../utils/create-assert-fn.mjs';
|
|
3
3
|
import { createCastFn } from '../utils/create-cast-fn.mjs';
|
|
4
4
|
import { createIsFn } from '../utils/create-is-fn.mjs';
|
|
5
|
-
import { createPrimitiveValidationError, prependPathToValidationErrors } from '../validation-error.mjs';
|
|
5
|
+
import { createPrimitiveValidationError, prependPathToValidationErrors } from '../utils/validation-error.mjs';
|
|
6
6
|
|
|
7
7
|
const record = (source, options) => {
|
|
8
8
|
const sourceKeys = new Set(Object.keys(source));
|
|
@@ -24,26 +24,28 @@ const record = (source, options) => {
|
|
|
24
24
|
}),
|
|
25
25
|
]);
|
|
26
26
|
}
|
|
27
|
-
const defaultErrors =
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
27
|
+
const defaultErrors = Arr.generate(function* () {
|
|
28
|
+
for (const [k, valueType] of Object.entries(source)) {
|
|
29
|
+
if (!Object.hasOwn(a, k)) {
|
|
30
|
+
if (source[k]?.optional !== true) {
|
|
31
|
+
yield {
|
|
32
|
+
path: [k],
|
|
33
|
+
actualValue: a,
|
|
34
|
+
typeName: typeNameFilled,
|
|
35
|
+
expectedType: typeNameFilled,
|
|
36
|
+
message: `Missing required key "${k}"`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// The case where the key exists in the object
|
|
42
|
+
const v = a[k];
|
|
43
|
+
const res = valueType.validate(v);
|
|
44
|
+
if (Result.isErr(res)) {
|
|
45
|
+
yield* prependPathToValidationErrors(res.value, k);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
|
-
const v = a[k];
|
|
42
|
-
const res = valueType.validate(v);
|
|
43
|
-
if (Result.isErr(res)) {
|
|
44
|
-
return prependPathToValidationErrors(res.value, k);
|
|
45
|
-
}
|
|
46
|
-
return [];
|
|
47
49
|
});
|
|
48
50
|
// Check for excess properties if allowExcessProperties is false
|
|
49
51
|
if (!allowExcessProperties) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.mjs","sources":["../../src/record/record.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"record.mjs","sources":["../../src/record/record.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/type.d.mts
CHANGED
package/dist/type.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.mts","sourceRoot":"","sources":["../src/type.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"type.d.mts","sourceRoot":"","sources":["../src/type.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AAEhE,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,iBAAiB,CAC7C,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,CACvC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from 'ts-data-forge';
|
|
2
|
-
import { validationErrorsToMessages } from '
|
|
2
|
+
import { validationErrorsToMessages } from './validation-error.mjs';
|
|
3
3
|
|
|
4
4
|
const validationResultToString = (result) => `\n${validationErrorsToMessages(result).join(',\n')}`;
|
|
5
5
|
const createAssertFn = (validate) => (a) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from 'ts-data-forge';
|
|
2
|
-
import { validationErrorsToMessages } from '
|
|
2
|
+
import { validationErrorsToMessages } from './validation-error.mjs';
|
|
3
3
|
|
|
4
4
|
const validationResultToString = (result) => `\n${validationErrorsToMessages(result).join(',\n')}`;
|
|
5
5
|
const createCastFn = (validate) => (a) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Result } from 'ts-data-forge';
|
|
2
|
-
import { createPrimitiveValidationError } from '../validation-error.mjs';
|
|
3
2
|
import { createAssertFn } from './create-assert-fn.mjs';
|
|
4
3
|
import { createCastFn } from './create-cast-fn.mjs';
|
|
4
|
+
import { createPrimitiveValidationError } from './validation-error.mjs';
|
|
5
5
|
|
|
6
6
|
const createPrimitiveType = ({ typeName, defaultValue, is, }) => {
|
|
7
7
|
const validate = (a) => is(a)
|
package/dist/utils/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.mts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.mts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
package/dist/utils/index.mjs
CHANGED
|
@@ -3,4 +3,5 @@ export { createCastFn } from './create-cast-fn.mjs';
|
|
|
3
3
|
export { createIsFn } from './create-is-fn.mjs';
|
|
4
4
|
export { createPrimitiveType } from './create-primitive-type.mjs';
|
|
5
5
|
export { createType } from './create-type.mjs';
|
|
6
|
+
export { createPrimitiveValidationError, prependIndexToValidationErrors, prependPathToValidationErrors, validationErrorToMessage, validationErrorsToMessages } from './validation-error.mjs';
|
|
6
7
|
//# sourceMappingURL=index.mjs.map
|
package/dist/utils/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 @@
|
|
|
1
|
+
{"version":3,"file":"validation-error.d.mts","sourceRoot":"","sources":["../../src/utils/validation-error.mts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,iFAAiF;IACjF,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CACxD,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CACvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,eAAe,KAAG,MASjE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACrC,QAAQ,SAAS,eAAe,EAAE,KACjC,SAAS,MAAM,EAA0C,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,6BAA6B,GACxC,QAAQ,SAAS,eAAe,EAAE,EAClC,aAAa,MAAM,KAClB,SAAS,eAAe,EAItB,CAAC;AAEN;;GAEG;AACH,eAAO,MAAM,8BAA8B,GACzC,QAAQ,SAAS,eAAe,EAAE,EAClC,OAAO,MAAM,KACZ,SAAS,eAAe,EAC8B,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,0CAI5C,QAAQ,CAAC;IACV,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,KAAG,eAMH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-error.mjs","sources":["../../src/utils/validation-error.mts"],"sourcesContent":[null],"names":[],"mappings":"AAoBA;;AAEG;AACI,MAAM,wBAAwB,GAAG,CAAC,KAAsB,KAAY;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,IAAA,EAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,GAAG,EAAE;AAC1E,IAAA,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,WAAW;AAE9C,IAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;AAC/B,QAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA,EAAG,OAAO,EAAE;IACrC;IAEA,OAAO,CAAA,SAAA,EAAY,KAAK,CAAC,YAAY,GAAG,OAAO,CAAA,MAAA,EAAS,aAAa,CAAA,CAAE;AACzE;AAEA;;;AAGG;AACI,MAAM,0BAA0B,GAAG,CACxC,MAAkC,KACZ,MAAM,CAAC,GAAG,CAAC,wBAAwB;AAE3D;;AAEG;MACU,6BAA6B,GAAG,CAC3C,MAAkC,EAClC,WAAmB,KAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AACrB,IAAA,GAAG,KAAK;IACR,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;AACnC,CAAA,CAAC;AAEJ;;AAEG;MACU,8BAA8B,GAAG,CAC5C,MAAkC,EAClC,KAAa,KAEb,6BAA6B,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE;AAExD;;AAEG;AACI,MAAM,8BAA8B,GAAG,CAAC,EAC7C,WAAW,EACX,YAAY,EACZ,QAAQ,GAKR,MAAuB;AACvB,IAAA,IAAI,EAAE,EAAE;IACR,WAAW;IACX,YAAY;IACZ,QAAQ;AACR,IAAA,OAAO,EAAE,SAAS;AACnB,CAAA;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-fortress",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript"
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"eslint-plugin-unicorn": "60.0.0",
|
|
85
85
|
"eslint-plugin-vitest": "0.5.4",
|
|
86
86
|
"fast-glob": "^3.3.3",
|
|
87
|
+
"io-ts": "^2.2.22",
|
|
87
88
|
"markdownlint-cli2": "^0.18.1",
|
|
88
89
|
"prettier": "^3.6.2",
|
|
89
90
|
"prettier-plugin-organize-imports": "^4.2.0",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"typedoc-plugin-markdown": "^4.8.1",
|
|
98
99
|
"typescript": "^5.9.2",
|
|
99
100
|
"typescript-eslint": "^8.39.1",
|
|
100
|
-
"vitest": "^3.2.4"
|
|
101
|
+
"vitest": "^3.2.4",
|
|
102
|
+
"zod": "^4.0.17"
|
|
101
103
|
}
|
|
102
104
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Arr, Result } from 'ts-data-forge';
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
|
-
import { createAssertFn, createCastFn, createIsFn } from '../utils/index.mjs';
|
|
4
3
|
import {
|
|
4
|
+
createAssertFn,
|
|
5
|
+
createCastFn,
|
|
6
|
+
createIsFn,
|
|
5
7
|
createPrimitiveValidationError,
|
|
6
8
|
prependIndexToValidationErrors,
|
|
9
|
+
type ValidationError,
|
|
7
10
|
type ValidationErrorWithMessage,
|
|
8
|
-
} from '../
|
|
11
|
+
} from '../utils/index.mjs';
|
|
9
12
|
|
|
10
13
|
export const arrayOfLength = <A, N extends SmallUint>(
|
|
11
14
|
size: N,
|
|
@@ -49,11 +52,13 @@ export const arrayOfLength = <A, N extends SmallUint>(
|
|
|
49
52
|
]);
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
const errors =
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const errors: readonly ValidationError[] = Arr.generate(function* () {
|
|
56
|
+
for (const [index, el] of a.entries()) {
|
|
57
|
+
const res = elementType.validate(el);
|
|
58
|
+
if (Result.isErr(res)) {
|
|
59
|
+
yield* prependIndexToValidationErrors(res.value, index);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
57
62
|
});
|
|
58
63
|
|
|
59
64
|
if (errors.length > 0) {
|
|
@@ -4,7 +4,7 @@ import { type TypeOf } from '../type.mjs';
|
|
|
4
4
|
import {
|
|
5
5
|
type ValidationError,
|
|
6
6
|
validationErrorsToMessages,
|
|
7
|
-
} from '../
|
|
7
|
+
} from '../utils/index.mjs';
|
|
8
8
|
import { arrayOfLength } from './array-of-length.mjs';
|
|
9
9
|
|
|
10
10
|
describe('arrayOfLength', () => {
|
|
@@ -89,6 +89,15 @@ describe('arrayOfLength', () => {
|
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
91
|
|
|
92
|
+
test('validate returns input as-is for OK cases', () => {
|
|
93
|
+
const input = [5, 6, 7, 8];
|
|
94
|
+
const result = xs.validate(input);
|
|
95
|
+
expect(Result.isOk(result)).toBe(true);
|
|
96
|
+
if (Result.isOk(result)) {
|
|
97
|
+
expect(result.value).toBe(input); // ✅ same reference
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
92
101
|
test('falsy case 1', () => {
|
|
93
102
|
const ys: unknown = [];
|
|
94
103
|
|
package/src/array/array.mts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Arr, Result } from 'ts-data-forge';
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
|
-
import { createAssertFn, createCastFn, createIsFn } from '../utils/index.mjs';
|
|
4
3
|
import {
|
|
4
|
+
createAssertFn,
|
|
5
|
+
createCastFn,
|
|
6
|
+
createIsFn,
|
|
5
7
|
createPrimitiveValidationError,
|
|
6
8
|
prependIndexToValidationErrors,
|
|
7
|
-
|
|
9
|
+
type ValidationError,
|
|
10
|
+
} from '../utils/index.mjs';
|
|
8
11
|
|
|
9
12
|
export const array = <A,>(
|
|
10
13
|
elementType: Type<A>,
|
|
@@ -32,11 +35,13 @@ export const array = <A,>(
|
|
|
32
35
|
]);
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
const errors =
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const errors: readonly ValidationError[] = Arr.generate(function* () {
|
|
39
|
+
for (const [index, el] of a.entries()) {
|
|
40
|
+
const res = elementType.validate(el);
|
|
41
|
+
if (Result.isErr(res)) {
|
|
42
|
+
yield* prependIndexToValidationErrors(res.value, index);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
40
45
|
});
|
|
41
46
|
|
|
42
47
|
if (errors.length > 0) {
|
package/src/array/array.test.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { type TypeOf } from '../type.mjs';
|
|
|
4
4
|
import {
|
|
5
5
|
type ValidationError,
|
|
6
6
|
validationErrorsToMessages,
|
|
7
|
-
} from '../
|
|
7
|
+
} from '../utils/index.mjs';
|
|
8
8
|
import { array } from './array.mjs';
|
|
9
9
|
|
|
10
10
|
describe('array', () => {
|
|
@@ -108,6 +108,15 @@ describe('array', () => {
|
|
|
108
108
|
throw new Error('Expected validation to fail');
|
|
109
109
|
}
|
|
110
110
|
});
|
|
111
|
+
|
|
112
|
+
test('validate returns input as-is for OK cases', () => {
|
|
113
|
+
const input = [10, 20, 30];
|
|
114
|
+
const result = xs.validate(input);
|
|
115
|
+
expect(Result.isOk(result)).toBe(true);
|
|
116
|
+
if (Result.isOk(result)) {
|
|
117
|
+
expect(result.value).toBe(input); // ✅ same reference
|
|
118
|
+
}
|
|
119
|
+
});
|
|
111
120
|
});
|
|
112
121
|
|
|
113
122
|
describe('fill', () => {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Arr, Result } from 'ts-data-forge';
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
|
-
import { createAssertFn, createCastFn, createIsFn } from '../utils/index.mjs';
|
|
4
3
|
import {
|
|
4
|
+
createAssertFn,
|
|
5
|
+
createCastFn,
|
|
6
|
+
createIsFn,
|
|
5
7
|
createPrimitiveValidationError,
|
|
6
8
|
prependIndexToValidationErrors,
|
|
7
9
|
type ValidationError,
|
|
8
10
|
type ValidationErrorWithMessage,
|
|
9
|
-
} from '../
|
|
11
|
+
} from '../utils/index.mjs';
|
|
10
12
|
|
|
11
13
|
export const nonEmptyArray = <A,>(
|
|
12
14
|
elementType: Type<A>,
|
|
@@ -46,11 +48,13 @@ export const nonEmptyArray = <A,>(
|
|
|
46
48
|
]);
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
const errors: readonly ValidationError[] =
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
const errors: readonly ValidationError[] = Arr.generate(function* () {
|
|
52
|
+
for (const [index, el] of a.entries()) {
|
|
53
|
+
const res = elementType.validate(el);
|
|
54
|
+
if (Result.isErr(res)) {
|
|
55
|
+
yield* prependIndexToValidationErrors(res.value, index);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
54
58
|
});
|
|
55
59
|
|
|
56
60
|
if (errors.length > 0) {
|
|
@@ -4,7 +4,7 @@ import { type TypeOf } from '../type.mjs';
|
|
|
4
4
|
import {
|
|
5
5
|
type ValidationError,
|
|
6
6
|
validationErrorsToMessages,
|
|
7
|
-
} from '../
|
|
7
|
+
} from '../utils/index.mjs';
|
|
8
8
|
import { nonEmptyArray } from './non-empty-array.mjs';
|
|
9
9
|
|
|
10
10
|
describe('nonEmptyArray', () => {
|
|
@@ -89,6 +89,15 @@ describe('nonEmptyArray', () => {
|
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
91
|
|
|
92
|
+
test('validate returns input as-is for OK cases', () => {
|
|
93
|
+
const input = [1, 2, 3];
|
|
94
|
+
const result = xs.validate(input);
|
|
95
|
+
expect(Result.isOk(result)).toBe(true);
|
|
96
|
+
if (Result.isOk(result)) {
|
|
97
|
+
expect(result.value).toBe(input); // ✅ same reference
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
92
101
|
test('falsy case 1', () => {
|
|
93
102
|
const ys: unknown = [];
|
|
94
103
|
|
package/src/array/tuple.mts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Arr, Result } from 'ts-data-forge';
|
|
2
2
|
import { type Type, type TypeOf } from '../type.mjs';
|
|
3
|
-
import { createAssertFn, createCastFn, createIsFn } from '../utils/index.mjs';
|
|
4
3
|
import {
|
|
4
|
+
createAssertFn,
|
|
5
|
+
createCastFn,
|
|
6
|
+
createIsFn,
|
|
5
7
|
createPrimitiveValidationError,
|
|
6
8
|
prependIndexToValidationErrors,
|
|
7
9
|
type ValidationError,
|
|
8
10
|
type ValidationErrorWithMessage,
|
|
9
|
-
} from '../
|
|
11
|
+
} from '../utils/index.mjs';
|
|
10
12
|
|
|
11
13
|
type MapTuple<T extends readonly Type<unknown>[]> = {
|
|
12
14
|
readonly [K in keyof T]: TypeOf<T[K]>;
|
|
@@ -48,14 +50,14 @@ export const tuple = <const A extends readonly Type<unknown>[]>(
|
|
|
48
50
|
]);
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
const errors: readonly ValidationError[] = Arr.
|
|
52
|
-
([typeDef, el],
|
|
53
|
+
const errors: readonly ValidationError[] = Arr.generate(function* () {
|
|
54
|
+
for (const [index, [typeDef, el]] of Arr.zip(types, a).entries()) {
|
|
53
55
|
const res = typeDef.validate(el);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
);
|
|
56
|
+
if (Result.isErr(res)) {
|
|
57
|
+
yield* prependIndexToValidationErrors(res.value, index);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
59
61
|
|
|
60
62
|
if (errors.length > 0) {
|
|
61
63
|
return Result.err(errors);
|
package/src/array/tuple.test.mts
CHANGED
|
@@ -5,7 +5,7 @@ import { type TypeOf } from '../type.mjs';
|
|
|
5
5
|
import {
|
|
6
6
|
type ValidationError,
|
|
7
7
|
validationErrorsToMessages,
|
|
8
|
-
} from '../
|
|
8
|
+
} from '../utils/index.mjs';
|
|
9
9
|
import { tuple } from './tuple.mjs';
|
|
10
10
|
|
|
11
11
|
describe('tuple', () => {
|
|
@@ -158,6 +158,19 @@ describe('tuple', () => {
|
|
|
158
158
|
]);
|
|
159
159
|
}
|
|
160
160
|
});
|
|
161
|
+
|
|
162
|
+
test('validate returns input as-is for OK cases', () => {
|
|
163
|
+
const input = [{ x: 5, y: 10 }, 3, '2'];
|
|
164
|
+
const result = targetType.validate(input);
|
|
165
|
+
expect(Result.isOk(result)).toBe(true);
|
|
166
|
+
if (Result.isOk(result)) {
|
|
167
|
+
// Note: tuple validation may create new arrays for type safety
|
|
168
|
+
// so we check for structural equality rather than reference equality
|
|
169
|
+
expect(result.value).toStrictEqual(input);
|
|
170
|
+
// For tuples, the inner objects should maintain reference equality
|
|
171
|
+
expect(result.value[0]).toBe(input[0]); // ✅ same reference for nested objects
|
|
172
|
+
}
|
|
173
|
+
});
|
|
161
174
|
});
|
|
162
175
|
|
|
163
176
|
describe('fill', () => {
|
package/src/branded/brand.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { pipe, Result } from 'ts-data-forge';
|
|
2
2
|
import { type Type } from '../type.mjs';
|
|
3
|
-
import { createType } from '../utils/index.mjs';
|
|
4
3
|
import {
|
|
4
|
+
createType,
|
|
5
5
|
type ValidationError,
|
|
6
6
|
type ValidationErrorWithMessage,
|
|
7
|
-
} from '../
|
|
7
|
+
} from '../utils/index.mjs';
|
|
8
8
|
|
|
9
9
|
type ArrayToUnion<A extends readonly unknown[]> = A extends readonly []
|
|
10
10
|
? never
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { asFiniteNumber, expectType, Result } from 'ts-data-forge';
|
|
2
2
|
import { type TypeOf } from '../../type.mjs';
|
|
3
|
-
import { validationErrorsToMessages } from '../../
|
|
3
|
+
import { validationErrorsToMessages } from '../../utils/index.mjs';
|
|
4
4
|
import { finiteNumber } from './finite-number.mjs';
|
|
5
5
|
|
|
6
6
|
describe('finiteNumber', () => {
|
|
@@ -72,6 +72,15 @@ describe('finiteNumber', () => {
|
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
+
test('validate returns input as-is for OK cases', () => {
|
|
76
|
+
const input = 123.456;
|
|
77
|
+
const result = targetType.validate(input);
|
|
78
|
+
expect(Result.isOk(result)).toBe(true);
|
|
79
|
+
if (Result.isOk(result)) {
|
|
80
|
+
expect(result.value).toBe(input); // ✅ same reference
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
75
84
|
test('falsy case - infinity', () => {
|
|
76
85
|
const result = targetType.validate(Number.POSITIVE_INFINITY);
|
|
77
86
|
expect(Result.isErr(result)).toBe(true);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { asInt, expectType, Result } from 'ts-data-forge';
|
|
2
2
|
import { type TypeOf } from '../../type.mjs';
|
|
3
|
-
import { validationErrorsToMessages } from '../../
|
|
3
|
+
import { validationErrorsToMessages } from '../../utils/index.mjs';
|
|
4
4
|
import { int } from './int.mjs';
|
|
5
5
|
|
|
6
6
|
describe('int', () => {
|
|
@@ -102,6 +102,15 @@ describe('int', () => {
|
|
|
102
102
|
]);
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
|
+
|
|
106
|
+
test('validate returns input as-is for OK cases', () => {
|
|
107
|
+
const input = 123;
|
|
108
|
+
const result = targetType.validate(input);
|
|
109
|
+
expect(Result.isOk(result)).toBe(true);
|
|
110
|
+
if (Result.isOk(result)) {
|
|
111
|
+
expect(result.value).toBe(input); // ✅ same reference
|
|
112
|
+
}
|
|
113
|
+
});
|
|
105
114
|
});
|
|
106
115
|
|
|
107
116
|
describe('assertIs', () => {
|