typesea 0.1.0 → 0.3.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/CHANGELOG.md +85 -6
- package/README.md +143 -28
- package/dist/adapters/index.d.ts +50 -8
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +169 -48
- package/dist/aot/index.d.ts +19 -3
- package/dist/aot/index.d.ts.map +1 -1
- package/dist/aot/index.js +115 -17
- package/dist/async/index.d.ts +28 -56
- package/dist/async/index.d.ts.map +1 -1
- package/dist/async/index.js +94 -37
- package/dist/builders/composite.d.ts +43 -9
- package/dist/builders/composite.d.ts.map +1 -1
- package/dist/builders/composite.js +100 -17
- package/dist/builders/index.d.ts +8 -5
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +7 -4
- package/dist/builders/modifier.d.ts +36 -5
- package/dist/builders/modifier.d.ts.map +1 -1
- package/dist/builders/modifier.js +52 -5
- package/dist/builders/object/guard.d.ts +72 -24
- package/dist/builders/object/guard.d.ts.map +1 -1
- package/dist/builders/object/guard.js +139 -29
- package/dist/builders/object/index.d.ts +4 -2
- package/dist/builders/object/index.d.ts.map +1 -1
- package/dist/builders/object/index.js +3 -1
- package/dist/builders/object/schema.d.ts +88 -11
- package/dist/builders/object/schema.d.ts.map +1 -1
- package/dist/builders/object/schema.js +290 -23
- package/dist/builders/object/types.d.ts +20 -31
- package/dist/builders/object/types.d.ts.map +1 -1
- package/dist/builders/object/types.js +2 -0
- package/dist/builders/runtime.d.ts +40 -0
- package/dist/builders/runtime.d.ts.map +1 -0
- package/dist/builders/runtime.js +150 -0
- package/dist/builders/scalar.d.ts +49 -9
- package/dist/builders/scalar.d.ts.map +1 -1
- package/dist/builders/scalar.js +87 -9
- package/dist/builders/table.d.ts +35 -5
- package/dist/builders/table.d.ts.map +1 -1
- package/dist/builders/table.js +35 -5
- package/dist/builders/types.d.ts +20 -4
- package/dist/builders/types.d.ts.map +1 -1
- package/dist/builders/types.js +2 -0
- package/dist/compile/check-composite.d.ts +25 -2
- package/dist/compile/check-composite.d.ts.map +1 -1
- package/dist/compile/check-composite.js +699 -27
- package/dist/compile/check-scalar.d.ts +88 -0
- package/dist/compile/check-scalar.d.ts.map +1 -1
- package/dist/compile/check-scalar.js +570 -3
- package/dist/compile/check.d.ts +12 -0
- package/dist/compile/check.d.ts.map +1 -1
- package/dist/compile/check.js +62 -3
- package/dist/compile/context.d.ts +47 -9
- package/dist/compile/context.d.ts.map +1 -1
- package/dist/compile/context.js +53 -8
- package/dist/compile/first.d.ts +26 -0
- package/dist/compile/first.d.ts.map +1 -0
- package/dist/compile/first.js +850 -0
- package/dist/compile/graph-predicate.d.ts +4 -2
- package/dist/compile/graph-predicate.d.ts.map +1 -1
- package/dist/compile/graph-predicate.js +2272 -165
- package/dist/compile/guard.d.ts +16 -24
- package/dist/compile/guard.d.ts.map +1 -1
- package/dist/compile/guard.js +202 -72
- package/dist/compile/index.d.ts +3 -1
- package/dist/compile/index.d.ts.map +1 -1
- package/dist/compile/index.js +2 -0
- package/dist/compile/issue.d.ts +110 -0
- package/dist/compile/issue.d.ts.map +1 -1
- package/dist/compile/issue.js +184 -1
- package/dist/compile/names.d.ts +12 -2
- package/dist/compile/names.d.ts.map +1 -1
- package/dist/compile/names.js +19 -3
- package/dist/compile/predicate.d.ts +24 -0
- package/dist/compile/predicate.d.ts.map +1 -1
- package/dist/compile/predicate.js +287 -10
- package/dist/compile/runtime.d.ts +100 -13
- package/dist/compile/runtime.d.ts.map +1 -1
- package/dist/compile/runtime.js +56 -6
- package/dist/compile/source.d.ts +10 -2
- package/dist/compile/source.d.ts.map +1 -1
- package/dist/compile/source.js +385 -26
- package/dist/compile/types.d.ts +22 -0
- package/dist/compile/types.d.ts.map +1 -1
- package/dist/compile/types.js +2 -0
- package/dist/decoder/index.d.ts +92 -46
- package/dist/decoder/index.d.ts.map +1 -1
- package/dist/decoder/index.js +266 -39
- package/dist/evaluate/check-composite.d.ts +111 -2
- package/dist/evaluate/check-composite.d.ts.map +1 -1
- package/dist/evaluate/check-composite.js +343 -8
- package/dist/evaluate/check-scalar.d.ts +25 -0
- package/dist/evaluate/check-scalar.d.ts.map +1 -1
- package/dist/evaluate/check-scalar.js +124 -3
- package/dist/evaluate/check.d.ts +7 -0
- package/dist/evaluate/check.d.ts.map +1 -1
- package/dist/evaluate/check.js +62 -4
- package/dist/evaluate/index.d.ts +2 -0
- package/dist/evaluate/index.d.ts.map +1 -1
- package/dist/evaluate/index.js +2 -0
- package/dist/evaluate/issue.d.ts +11 -1
- package/dist/evaluate/issue.d.ts.map +1 -1
- package/dist/evaluate/issue.js +15 -1
- package/dist/evaluate/predicate.d.ts +16 -5
- package/dist/evaluate/predicate.d.ts.map +1 -1
- package/dist/evaluate/predicate.js +20 -5
- package/dist/evaluate/shared.d.ts +78 -13
- package/dist/evaluate/shared.d.ts.map +1 -1
- package/dist/evaluate/shared.js +101 -8
- package/dist/evaluate/state.d.ts +35 -13
- package/dist/evaluate/state.d.ts.map +1 -1
- package/dist/evaluate/state.js +35 -2
- package/dist/guard/array.d.ts +48 -0
- package/dist/guard/array.d.ts.map +1 -0
- package/dist/guard/array.js +84 -0
- package/dist/guard/base.d.ts +111 -31
- package/dist/guard/base.d.ts.map +1 -1
- package/dist/guard/base.js +165 -32
- package/dist/guard/date.d.ts +34 -0
- package/dist/guard/date.d.ts.map +1 -0
- package/dist/guard/date.js +60 -0
- package/dist/guard/error.d.ts +10 -5
- package/dist/guard/error.d.ts.map +1 -1
- package/dist/guard/error.js +10 -5
- package/dist/guard/index.d.ts +4 -0
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +4 -0
- package/dist/guard/number.d.ts +86 -11
- package/dist/guard/number.d.ts.map +1 -1
- package/dist/guard/number.js +159 -11
- package/dist/guard/props.d.ts +27 -3
- package/dist/guard/props.d.ts.map +1 -1
- package/dist/guard/props.js +27 -3
- package/dist/guard/read.d.ts +115 -10
- package/dist/guard/read.d.ts.map +1 -1
- package/dist/guard/read.js +185 -10
- package/dist/guard/registry.d.ts +12 -2
- package/dist/guard/registry.d.ts.map +1 -1
- package/dist/guard/registry.js +15 -3
- package/dist/guard/string.d.ts +115 -13
- package/dist/guard/string.d.ts.map +1 -1
- package/dist/guard/string.js +250 -13
- package/dist/guard/types.d.ts +110 -40
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/guard/types.js +2 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/internal/index.d.ts +42 -6
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +51 -8
- package/dist/ir/builder.d.ts +17 -127
- package/dist/ir/builder.d.ts.map +1 -1
- package/dist/ir/builder.js +80 -137
- package/dist/ir/freeze.d.ts +4 -0
- package/dist/ir/freeze.d.ts.map +1 -1
- package/dist/ir/freeze.js +66 -0
- package/dist/ir/index.d.ts +3 -1
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js +2 -0
- package/dist/ir/regexp.d.ts +2 -0
- package/dist/ir/regexp.d.ts.map +1 -1
- package/dist/ir/regexp.js +2 -0
- package/dist/ir/types.d.ts +94 -56
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js +2 -0
- package/dist/ir/validate.d.ts +8 -1
- package/dist/ir/validate.d.ts.map +1 -1
- package/dist/ir/validate.js +511 -61
- package/dist/issue/index.d.ts +42 -10
- package/dist/issue/index.d.ts.map +1 -1
- package/dist/issue/index.js +65 -11
- package/dist/json-schema/emit-combinator.d.ts +44 -4
- package/dist/json-schema/emit-combinator.d.ts.map +1 -1
- package/dist/json-schema/emit-combinator.js +44 -4
- package/dist/json-schema/emit-composite.d.ts +16 -2
- package/dist/json-schema/emit-composite.d.ts.map +1 -1
- package/dist/json-schema/emit-composite.js +81 -13
- package/dist/json-schema/emit-scalar.d.ts +26 -3
- package/dist/json-schema/emit-scalar.d.ts.map +1 -1
- package/dist/json-schema/emit-scalar.js +124 -10
- package/dist/json-schema/emit-types.d.ts +11 -1
- package/dist/json-schema/emit-types.d.ts.map +1 -1
- package/dist/json-schema/emit-types.js +2 -0
- package/dist/json-schema/emit.d.ts +12 -1
- package/dist/json-schema/emit.d.ts.map +1 -1
- package/dist/json-schema/emit.js +23 -3
- package/dist/json-schema/freeze.d.ts +13 -2
- package/dist/json-schema/freeze.d.ts.map +1 -1
- package/dist/json-schema/freeze.js +41 -8
- package/dist/json-schema/index.d.ts +16 -2
- package/dist/json-schema/index.d.ts.map +1 -1
- package/dist/json-schema/index.js +23 -3
- package/dist/json-schema/issue.d.ts +4 -1
- package/dist/json-schema/issue.d.ts.map +1 -1
- package/dist/json-schema/issue.js +4 -1
- package/dist/json-schema/read.d.ts +24 -3
- package/dist/json-schema/read.d.ts.map +1 -1
- package/dist/json-schema/read.js +59 -12
- package/dist/json-schema/types.d.ts +45 -16
- package/dist/json-schema/types.d.ts.map +1 -1
- package/dist/json-schema/types.js +2 -0
- package/dist/kind/index.d.ts +40 -28
- package/dist/kind/index.d.ts.map +1 -1
- package/dist/kind/index.js +41 -13
- package/dist/lower/index.d.ts +6 -1
- package/dist/lower/index.d.ts.map +1 -1
- package/dist/lower/index.js +462 -46
- package/dist/message/index.d.ts +64 -10
- package/dist/message/index.d.ts.map +1 -1
- package/dist/message/index.js +155 -17
- package/dist/optimize/algebraic.d.ts +54 -0
- package/dist/optimize/algebraic.d.ts.map +1 -0
- package/dist/optimize/algebraic.js +314 -0
- package/dist/optimize/compact.d.ts +8 -1
- package/dist/optimize/compact.d.ts.map +1 -1
- package/dist/optimize/compact.js +13 -2
- package/dist/optimize/domain.d.ts +16 -0
- package/dist/optimize/domain.d.ts.map +1 -0
- package/dist/optimize/domain.js +619 -0
- package/dist/optimize/fold-boolean.d.ts +17 -2
- package/dist/optimize/fold-boolean.d.ts.map +1 -1
- package/dist/optimize/fold-boolean.js +59 -14
- package/dist/optimize/fold-common.d.ts +43 -8
- package/dist/optimize/fold-common.d.ts.map +1 -1
- package/dist/optimize/fold-common.js +37 -6
- package/dist/optimize/fold-constraints.d.ts +33 -0
- package/dist/optimize/fold-constraints.d.ts.map +1 -0
- package/dist/optimize/fold-constraints.js +484 -0
- package/dist/optimize/fold-scalar.d.ts +98 -13
- package/dist/optimize/fold-scalar.d.ts.map +1 -1
- package/dist/optimize/fold-scalar.js +98 -13
- package/dist/optimize/fold.d.ts +8 -1
- package/dist/optimize/fold.d.ts.map +1 -1
- package/dist/optimize/fold.js +22 -2
- package/dist/optimize/index.d.ts +9 -1
- package/dist/optimize/index.d.ts.map +1 -1
- package/dist/optimize/index.js +18 -3
- package/dist/optimize/map-node.d.ts +3 -1
- package/dist/optimize/map-node.d.ts.map +1 -1
- package/dist/optimize/map-node.js +48 -3
- package/dist/optimize/peephole.d.ts +16 -0
- package/dist/optimize/peephole.d.ts.map +1 -0
- package/dist/optimize/peephole.js +254 -0
- package/dist/optimize/remap.d.ts +2 -0
- package/dist/optimize/remap.d.ts.map +1 -1
- package/dist/optimize/remap.js +2 -0
- package/dist/optimize/rewrite.d.ts +13 -8
- package/dist/optimize/rewrite.d.ts.map +1 -1
- package/dist/optimize/rewrite.js +13 -8
- package/dist/plan/cache.d.ts +9 -3
- package/dist/plan/cache.d.ts.map +1 -1
- package/dist/plan/cache.js +34 -6
- package/dist/plan/index.d.ts +2 -0
- package/dist/plan/index.d.ts.map +1 -1
- package/dist/plan/index.js +2 -0
- package/dist/plan/predicate.d.ts +2 -0
- package/dist/plan/predicate.d.ts.map +1 -1
- package/dist/plan/predicate.js +298 -29
- package/dist/plan/schema-predicate.d.ts +6 -0
- package/dist/plan/schema-predicate.d.ts.map +1 -1
- package/dist/plan/schema-predicate.js +382 -19
- package/dist/plan/types.d.ts +2 -0
- package/dist/plan/types.d.ts.map +1 -1
- package/dist/plan/types.js +2 -0
- package/dist/result/index.d.ts +19 -5
- package/dist/result/index.d.ts.map +1 -1
- package/dist/result/index.js +10 -2
- package/dist/schema/common.d.ts +69 -6
- package/dist/schema/common.d.ts.map +1 -1
- package/dist/schema/common.js +104 -10
- package/dist/schema/freeze.d.ts +4 -0
- package/dist/schema/freeze.d.ts.map +1 -1
- package/dist/schema/freeze.js +40 -0
- package/dist/schema/index.d.ts +5 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -1
- package/dist/schema/lazy.d.ts +4 -0
- package/dist/schema/lazy.d.ts.map +1 -1
- package/dist/schema/lazy.js +4 -0
- package/dist/schema/literal.d.ts +7 -1
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +7 -1
- package/dist/schema/types.d.ts +109 -100
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +13 -2
- package/dist/schema/undefined.d.ts +17 -0
- package/dist/schema/undefined.d.ts.map +1 -0
- package/dist/schema/undefined.js +77 -0
- package/dist/schema/validate.d.ts +8 -1
- package/dist/schema/validate.d.ts.map +1 -1
- package/dist/schema/validate.js +255 -57
- package/docs/api.md +128 -8
- package/docs/assets/benchmark-headline.svg +163 -0
- package/docs/engine-notes.md +62 -15
- package/docs/index.html +1340 -702
- package/docs/ko/api.md +375 -0
- package/docs/ko/engine-notes.md +156 -0
- package/docs/ko/readme.md +378 -0
- package/package.json +66 -65
|
@@ -1,26 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file modifier.ts
|
|
3
3
|
* @brief Presence, lazy, and refinement guard builders.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
7
|
import { BaseGuard, type Guard, type GuardPresence, type GuardValue, type Infer, type Presence } from "../guard/index.js";
|
|
6
8
|
/**
|
|
7
|
-
* @brief optional.
|
|
9
|
+
* @brief Mark a guard optional for object shape construction.
|
|
10
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
11
|
+
* with stable metadata.
|
|
12
|
+
* @param guard Guard whose value type is preserved.
|
|
13
|
+
* @returns Fresh optional guard.
|
|
8
14
|
*/
|
|
9
15
|
export declare function optional<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard>, "optional">;
|
|
10
16
|
/**
|
|
11
|
-
* @brief
|
|
17
|
+
* @brief Allow explicit undefined as a value.
|
|
18
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
19
|
+
* with stable metadata.
|
|
20
|
+
* @param guard Guard to wrap.
|
|
21
|
+
* @returns Fresh undefinedable guard preserving original presence.
|
|
12
22
|
*/
|
|
13
23
|
export declare function undefinedable<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard> | undefined, GuardPresence<TGuard>>;
|
|
14
24
|
/**
|
|
15
|
-
* @brief
|
|
25
|
+
* @brief Allow explicit null as a value.
|
|
26
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
27
|
+
* with stable metadata.
|
|
28
|
+
* @param guard Guard to wrap.
|
|
29
|
+
* @returns Fresh nullable guard preserving original presence.
|
|
16
30
|
*/
|
|
17
31
|
export declare function nullable<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard> | null, GuardPresence<TGuard>>;
|
|
18
32
|
/**
|
|
19
|
-
* @brief
|
|
33
|
+
* @brief Allow null, undefined, and absent object keys.
|
|
34
|
+
* @param guard Guard to wrap.
|
|
35
|
+
* @returns Fresh optional guard whose value domain also includes null.
|
|
36
|
+
*/
|
|
37
|
+
export declare function nullish<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard> | null, "optional">;
|
|
38
|
+
/**
|
|
39
|
+
* @brief Resolve recursive schemas once and reuse the frozen schema handle.
|
|
40
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
41
|
+
* with stable metadata.
|
|
42
|
+
* @param get Resolver returning the recursive guard.
|
|
43
|
+
* @returns Fresh lazy guard.
|
|
44
|
+
* @throws TypeError when the resolver is not callable.
|
|
20
45
|
*/
|
|
21
46
|
export declare function lazy<TGuard extends Guard<unknown, Presence>>(get: () => TGuard): BaseGuard<Infer<TGuard>>;
|
|
22
47
|
/**
|
|
23
|
-
* @brief
|
|
48
|
+
* @brief Attach a boolean refinement while preserving TypeSea's strict true contract.
|
|
49
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
50
|
+
* with stable metadata.
|
|
51
|
+
* @param guard Guard that must pass before the predicate runs.
|
|
52
|
+
* @param predicate User predicate that must return the boolean literal true.
|
|
53
|
+
* @param name Diagnostic name for refinement failures.
|
|
54
|
+
* @returns Fresh refined guard.
|
|
24
55
|
*/
|
|
25
56
|
export declare function refine<TGuard extends Guard<unknown, Presence>>(guard: TGuard, predicate: (value: Infer<TGuard>) => boolean, name: string): BaseGuard<GuardValue<TGuard>, GuardPresence<TGuard>>;
|
|
26
57
|
//# sourceMappingURL=modifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modifier.d.ts","sourceRoot":"","sources":["../../src/builders/modifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"modifier.d.ts","sourceRoot":"","sources":["../../src/builders/modifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,SAAS,EACT,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,QAAQ,EAChB,MAAM,mBAAmB,CAAC;AAI3B;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC5D,KAAK,EAAE,MAAM,GACd,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAK3C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EACjE,KAAK,EAAE,MAAM,GACd,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAKlE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC5D,KAAK,EAAE,MAAM,GACd,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAK7D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC3D,KAAK,EAAE,MAAM,GACd,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAQlD;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EACxD,GAAG,EAAE,MAAM,MAAM,GAClB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAgB1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC1D,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAC5C,IAAI,EAAE,MAAM,GACb,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAkBtD"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file modifier.ts
|
|
3
3
|
* @brief Presence, lazy, and refinement guard builders.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
7
|
import { SchemaTag } from "../kind/index.js";
|
|
6
8
|
import { BaseGuard } from "../guard/index.js";
|
|
7
9
|
import { isStrictTrue, readGuardSchema } from "../internal/index.js";
|
|
8
10
|
/**
|
|
9
|
-
* @brief optional.
|
|
11
|
+
* @brief Mark a guard optional for object shape construction.
|
|
12
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
13
|
+
* with stable metadata.
|
|
14
|
+
* @param guard Guard whose value type is preserved.
|
|
15
|
+
* @returns Fresh optional guard.
|
|
10
16
|
*/
|
|
11
17
|
export function optional(guard) {
|
|
12
18
|
return new BaseGuard({
|
|
@@ -15,7 +21,11 @@ export function optional(guard) {
|
|
|
15
21
|
});
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
|
-
* @brief
|
|
24
|
+
* @brief Allow explicit undefined as a value.
|
|
25
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
26
|
+
* with stable metadata.
|
|
27
|
+
* @param guard Guard to wrap.
|
|
28
|
+
* @returns Fresh undefinedable guard preserving original presence.
|
|
19
29
|
*/
|
|
20
30
|
export function undefinedable(guard) {
|
|
21
31
|
return new BaseGuard({
|
|
@@ -24,7 +34,11 @@ export function undefinedable(guard) {
|
|
|
24
34
|
});
|
|
25
35
|
}
|
|
26
36
|
/**
|
|
27
|
-
* @brief
|
|
37
|
+
* @brief Allow explicit null as a value.
|
|
38
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
39
|
+
* with stable metadata.
|
|
40
|
+
* @param guard Guard to wrap.
|
|
41
|
+
* @returns Fresh nullable guard preserving original presence.
|
|
28
42
|
*/
|
|
29
43
|
export function nullable(guard) {
|
|
30
44
|
return new BaseGuard({
|
|
@@ -33,7 +47,26 @@ export function nullable(guard) {
|
|
|
33
47
|
});
|
|
34
48
|
}
|
|
35
49
|
/**
|
|
36
|
-
* @brief
|
|
50
|
+
* @brief Allow null, undefined, and absent object keys.
|
|
51
|
+
* @param guard Guard to wrap.
|
|
52
|
+
* @returns Fresh optional guard whose value domain also includes null.
|
|
53
|
+
*/
|
|
54
|
+
export function nullish(guard) {
|
|
55
|
+
return new BaseGuard({
|
|
56
|
+
tag: SchemaTag.Optional,
|
|
57
|
+
inner: {
|
|
58
|
+
tag: SchemaTag.Nullable,
|
|
59
|
+
inner: readGuardSchema(guard, "nullish inner")
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @brief Resolve recursive schemas once and reuse the frozen schema handle.
|
|
65
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
66
|
+
* with stable metadata.
|
|
67
|
+
* @param get Resolver returning the recursive guard.
|
|
68
|
+
* @returns Fresh lazy guard.
|
|
69
|
+
* @throws TypeError when the resolver is not callable.
|
|
37
70
|
*/
|
|
38
71
|
export function lazy(get) {
|
|
39
72
|
if (typeof get !== "function") {
|
|
@@ -43,13 +76,23 @@ export function lazy(get) {
|
|
|
43
76
|
return new BaseGuard({
|
|
44
77
|
tag: SchemaTag.Lazy,
|
|
45
78
|
get: () => {
|
|
79
|
+
/*
|
|
80
|
+
* Cache the resolved schema rather than the guard wrapper. This keeps
|
|
81
|
+
* recursive validation stable after the first successful resolution.
|
|
82
|
+
*/
|
|
46
83
|
cached ??= readGuardSchema(get(), "lazy result");
|
|
47
84
|
return cached;
|
|
48
85
|
}
|
|
49
86
|
});
|
|
50
87
|
}
|
|
51
88
|
/**
|
|
52
|
-
* @brief
|
|
89
|
+
* @brief Attach a boolean refinement while preserving TypeSea's strict true contract.
|
|
90
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
91
|
+
* with stable metadata.
|
|
92
|
+
* @param guard Guard that must pass before the predicate runs.
|
|
93
|
+
* @param predicate User predicate that must return the boolean literal true.
|
|
94
|
+
* @param name Diagnostic name for refinement failures.
|
|
95
|
+
* @returns Fresh refined guard.
|
|
53
96
|
*/
|
|
54
97
|
export function refine(guard, predicate, name) {
|
|
55
98
|
if (typeof predicate !== "function") {
|
|
@@ -61,6 +104,10 @@ export function refine(guard, predicate, name) {
|
|
|
61
104
|
return new BaseGuard({
|
|
62
105
|
tag: SchemaTag.Refine,
|
|
63
106
|
inner: readGuardSchema(guard, "refine inner"),
|
|
107
|
+
/*
|
|
108
|
+
* Truthy non-boolean values are rejected. This keeps refinement behavior
|
|
109
|
+
* identical between interpreted and compiled validation paths.
|
|
110
|
+
*/
|
|
64
111
|
predicate: (value) => isStrictTrue(predicate(value)),
|
|
65
112
|
name
|
|
66
113
|
});
|
|
@@ -1,62 +1,110 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file guard.ts
|
|
3
3
|
* @brief Object guard class and object builder API.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
7
|
import type { ObjectSchema } from "../../schema/index.js";
|
|
6
8
|
import { ObjectModeTag } from "../../kind/index.js";
|
|
7
|
-
import { BaseGuard } from "../../guard/index.js";
|
|
8
|
-
import type { ObjectGuardMode, ObjectShape, InferObject, MergeObjectShapes, OmitObjectShape, PartialObjectShape, PickObjectShape, StringKeyOf } from "./types.js";
|
|
9
|
+
import { BaseGuard, type Guard, type Presence } from "../../guard/index.js";
|
|
10
|
+
import type { ObjectGuardMode, ObjectShape, DeepPartialObjectShape, InferObject, MergeObjectShapes, ObjectKeyMask, OmitObjectShape, OmitObjectShapeByMask, PartialObjectShape, PickObjectShape, PickObjectShapeByMask, RequiredObjectShape, StringKeyOf } from "./types.js";
|
|
9
11
|
/**
|
|
10
12
|
* @brief Guard subclass with object-specific shape operations.
|
|
13
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
14
|
+
* with stable metadata.
|
|
11
15
|
*
|
|
12
16
|
* @invariant Methods preserve the original object mode. Strict schemas stay
|
|
13
17
|
* strict after shape edits; passthrough schemas stay passthrough.
|
|
14
18
|
*/
|
|
15
19
|
export declare class ObjectGuard<TShape extends ObjectShape, TMode extends ObjectGuardMode> extends BaseGuard<InferObject<TShape>> {
|
|
16
|
-
/**
|
|
17
|
-
* @brief constructor.
|
|
18
|
-
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
19
|
-
*/
|
|
20
20
|
constructor(schema: ObjectSchema);
|
|
21
|
-
/**
|
|
22
|
-
* @brief extend.
|
|
23
|
-
*/
|
|
24
21
|
extend<const TExtension extends ObjectShape>(extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/
|
|
22
|
+
safeExtend<const TExtension extends ObjectShape>(extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
23
|
+
merge<const TExtension extends ObjectShape, TExtensionMode extends ObjectGuardMode>(other: ObjectGuard<TExtension, TExtensionMode>): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
28
24
|
pick<const TKeys extends readonly StringKeyOf<TShape>[]>(keys: TKeys): ObjectGuard<PickObjectShape<TShape, TKeys[number]>, TMode>;
|
|
29
|
-
|
|
30
|
-
* @brief omit.
|
|
31
|
-
*/
|
|
25
|
+
pick<const TMask extends ObjectKeyMask<TShape>>(keys: TMask): ObjectGuard<PickObjectShapeByMask<TShape, TMask>, TMode>;
|
|
32
26
|
omit<const TKeys extends readonly StringKeyOf<TShape>[]>(keys: TKeys): ObjectGuard<OmitObjectShape<TShape, TKeys[number]>, TMode>;
|
|
33
|
-
|
|
34
|
-
* @brief partial.
|
|
35
|
-
*/
|
|
27
|
+
omit<const TMask extends ObjectKeyMask<TShape>>(keys: TMask): ObjectGuard<OmitObjectShapeByMask<TShape, TMask>, TMode>;
|
|
36
28
|
partial(): ObjectGuard<PartialObjectShape<TShape>, TMode>;
|
|
29
|
+
deepPartial(): ObjectGuard<DeepPartialObjectShape<TShape>, TMode>;
|
|
30
|
+
required(): ObjectGuard<RequiredObjectShape<TShape>, TMode>;
|
|
31
|
+
strict(): ObjectGuard<TShape, typeof ObjectModeTag.Strict>;
|
|
32
|
+
passthrough(): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
33
|
+
strip(): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
34
|
+
catchall(guard: Guard<unknown, Presence>): ObjectGuard<TShape, TMode>;
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
|
-
* @brief object.
|
|
37
|
+
* @brief Build an object guard that accepts unspecified enumerable keys.
|
|
38
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
39
|
+
* with stable metadata.
|
|
40
40
|
*/
|
|
41
41
|
export declare function object<const TShape extends ObjectShape>(shape: TShape): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
42
42
|
/**
|
|
43
|
-
* @brief
|
|
43
|
+
* @brief Build an object guard that rejects unspecified own keys.
|
|
44
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
45
|
+
* with stable metadata.
|
|
44
46
|
*/
|
|
45
47
|
export declare function strictObject<const TShape extends ObjectShape>(shape: TShape): ObjectGuard<TShape, typeof ObjectModeTag.Strict>;
|
|
46
48
|
/**
|
|
47
|
-
* @brief extend.
|
|
49
|
+
* @brief Execute extend.
|
|
50
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
48
51
|
*/
|
|
49
52
|
export declare function extend<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TExtension extends ObjectShape>(guard: ObjectGuard<TShape, TMode>, extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
50
53
|
/**
|
|
51
|
-
* @brief
|
|
54
|
+
* @brief Execute safe extend.
|
|
55
|
+
* @details Runtime construction follows the same hardened schema merge as
|
|
56
|
+
* extend. The method name gives callers a Zod-compatible, intention-revealing
|
|
57
|
+
* API for shape extension.
|
|
58
|
+
*/
|
|
59
|
+
export declare function safeExtend<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TExtension extends ObjectShape>(guard: ObjectGuard<TShape, TMode>, extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
60
|
+
/**
|
|
61
|
+
* @brief Execute object merge.
|
|
62
|
+
* @details The left object keeps its unknown-key mode. The right object supplies
|
|
63
|
+
* overriding fields and, when present, a catchall schema.
|
|
64
|
+
*/
|
|
65
|
+
export declare function merge<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TExtension extends ObjectShape, TExtensionMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>, other: ObjectGuard<TExtension, TExtensionMode>): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
66
|
+
/**
|
|
67
|
+
* @brief Execute pick.
|
|
68
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
52
69
|
*/
|
|
53
70
|
export declare function pick<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TKeys extends readonly StringKeyOf<TShape>[]>(guard: ObjectGuard<TShape, TMode>, keys: TKeys): ObjectGuard<PickObjectShape<TShape, TKeys[number]>, TMode>;
|
|
71
|
+
export declare function pick<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TMask extends ObjectKeyMask<TShape>>(guard: ObjectGuard<TShape, TMode>, keys: TMask): ObjectGuard<PickObjectShapeByMask<TShape, TMask>, TMode>;
|
|
54
72
|
/**
|
|
55
|
-
* @brief omit.
|
|
73
|
+
* @brief Execute omit.
|
|
74
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
56
75
|
*/
|
|
57
76
|
export declare function omit<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TKeys extends readonly StringKeyOf<TShape>[]>(guard: ObjectGuard<TShape, TMode>, keys: TKeys): ObjectGuard<OmitObjectShape<TShape, TKeys[number]>, TMode>;
|
|
77
|
+
export declare function omit<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TMask extends ObjectKeyMask<TShape>>(guard: ObjectGuard<TShape, TMode>, keys: TMask): ObjectGuard<OmitObjectShapeByMask<TShape, TMask>, TMode>;
|
|
58
78
|
/**
|
|
59
|
-
* @brief partial.
|
|
79
|
+
* @brief Execute partial.
|
|
80
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
60
81
|
*/
|
|
61
82
|
export declare function partial<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<PartialObjectShape<TShape>, TMode>;
|
|
83
|
+
/**
|
|
84
|
+
* @brief Execute deep partial.
|
|
85
|
+
*/
|
|
86
|
+
export declare function deepPartial<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<DeepPartialObjectShape<TShape>, TMode>;
|
|
87
|
+
/**
|
|
88
|
+
* @brief Execute required.
|
|
89
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
90
|
+
*/
|
|
91
|
+
export declare function required<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<RequiredObjectShape<TShape>, TMode>;
|
|
92
|
+
/**
|
|
93
|
+
* @brief Convert an object guard to strict unknown-key policy.
|
|
94
|
+
*/
|
|
95
|
+
export declare function strict<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<TShape, typeof ObjectModeTag.Strict>;
|
|
96
|
+
/**
|
|
97
|
+
* @brief Convert an object guard to passthrough unknown-key policy.
|
|
98
|
+
*/
|
|
99
|
+
export declare function passthrough<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
100
|
+
/**
|
|
101
|
+
* @brief Accept unknown keys without producing a stripped output copy.
|
|
102
|
+
* @details TypeSea guard validation returns the original value, so Zod-style
|
|
103
|
+
* strip has validation semantics equivalent to passthrough.
|
|
104
|
+
*/
|
|
105
|
+
export declare function strip<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
106
|
+
/**
|
|
107
|
+
* @brief Validate every undeclared own key with a catchall schema.
|
|
108
|
+
*/
|
|
109
|
+
export declare function catchall<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>, value: Guard<unknown, Presence>): ObjectGuard<TShape, TMode>;
|
|
62
110
|
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/builders/object/guard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/builders/object/guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACH,SAAS,EACT,KAAK,KAAK,EACV,KAAK,QAAQ,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACR,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACd,MAAM,YAAY,CAAC;AAgBpB;;;;;;;GAOG;AACH,qBAAa,WAAW,CACpB,MAAM,SAAS,WAAW,EAC1B,KAAK,SAAS,eAAe,CAC/B,SAAQ,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEjB,MAAM,EAAE,YAAY;IAKhC,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,WAAW,EAC9C,SAAS,EAAE,UAAU,GACtB,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAIrD,UAAU,CAAC,KAAK,CAAC,UAAU,SAAS,WAAW,EAClD,SAAS,EAAE,UAAU,GACtB,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAIrD,KAAK,CACR,KAAK,CAAC,UAAU,SAAS,WAAW,EACpC,cAAc,SAAS,eAAe,EAEtC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,cAAc,CAAC,GAC/C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAIrD,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAC1D,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAEtD,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EACjD,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAQpD,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAC1D,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAEtD,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EACjD,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAQpD,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAIzD,WAAW,IAAI,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAIjE,QAAQ,IAAI,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAI3D,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC;IAI1D,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC;IAIpE,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC;IAI9D,QAAQ,CACX,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,GAChC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;CAGhC;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,WAAW,EACnD,KAAK,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC,CAIvD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,WAAW,EACzD,KAAK,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAIlD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAClB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,UAAU,SAAS,WAAW,EAEpC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,SAAS,EAAE,UAAU,GACtB,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACtB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,UAAU,SAAS,WAAW,EAEpC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,SAAS,EAAE,UAAU,GACtB,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CACjB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,UAAU,SAAS,WAAW,EACpC,cAAc,SAAS,eAAe,EAEtC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,cAAc,CAAC,GAC/C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAE3D;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAChB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,KAAK,SAAS,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAElD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAE9D,wBAAgB,IAAI,CAChB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EAEzC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAY5D;;;GAGG;AACH,wBAAgB,IAAI,CAChB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,KAAK,SAAS,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAElD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAE9D,wBAAgB,IAAI,CAChB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAC7B,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EAEzC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE,KAAK,GACZ,WAAW,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAY5D;;;GAGG;AACH,wBAAgB,OAAO,CACnB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAEpD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACpB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAClB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAElD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CACjB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,WAAW,CAAC,MAAM,EAAE,OAAO,aAAa,CAAC,WAAW,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACpB,KAAK,CAAC,MAAM,SAAS,WAAW,EAChC,KAAK,SAAS,eAAe,EAE7B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,GAChC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAE5B"}
|
|
@@ -1,95 +1,174 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file guard.ts
|
|
3
3
|
* @brief Object guard class and object builder API.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
7
|
import { ObjectModeTag } from "../../kind/index.js";
|
|
6
8
|
import { BaseGuard } from "../../guard/index.js";
|
|
7
|
-
import {
|
|
9
|
+
import { readGuardSchema } from "../../internal/index.js";
|
|
10
|
+
import { deepPartialObjectSchema, mergeObjectSchemas, objectSchema, objectSchemaWithCatchall, objectSchemaWithMode, omitObjectSchema, partialObjectSchema, pickObjectSchema, readObjectConstructorSchema, readObjectKeySelection, readObjectMethodSchema, requiredObjectSchema } from "./schema.js";
|
|
8
11
|
/**
|
|
9
12
|
* @brief Guard subclass with object-specific shape operations.
|
|
13
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
14
|
+
* with stable metadata.
|
|
10
15
|
*
|
|
11
16
|
* @invariant Methods preserve the original object mode. Strict schemas stay
|
|
12
17
|
* strict after shape edits; passthrough schemas stay passthrough.
|
|
13
18
|
*/
|
|
14
19
|
export class ObjectGuard extends BaseGuard {
|
|
15
|
-
/**
|
|
16
|
-
* @brief constructor.
|
|
17
|
-
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
18
|
-
*/
|
|
19
20
|
constructor(schema) {
|
|
20
21
|
super(readObjectConstructorSchema(schema));
|
|
21
22
|
Object.freeze(this);
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
-
* @brief extend.
|
|
25
|
-
*/
|
|
26
24
|
extend(extension) {
|
|
27
25
|
return extendObjectGuard(this, extension);
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
safeExtend(extension) {
|
|
28
|
+
return extendObjectGuard(this, extension);
|
|
29
|
+
}
|
|
30
|
+
merge(other) {
|
|
31
|
+
return mergeObjectGuard(this, other);
|
|
32
|
+
}
|
|
32
33
|
pick(keys) {
|
|
33
34
|
return pickObjectGuard(this, keys);
|
|
34
35
|
}
|
|
35
|
-
/**
|
|
36
|
-
* @brief omit.
|
|
37
|
-
*/
|
|
38
36
|
omit(keys) {
|
|
39
37
|
return omitObjectGuard(this, keys);
|
|
40
38
|
}
|
|
41
|
-
/**
|
|
42
|
-
* @brief partial.
|
|
43
|
-
*/
|
|
44
39
|
partial() {
|
|
45
40
|
return partialObjectGuard(this);
|
|
46
41
|
}
|
|
42
|
+
deepPartial() {
|
|
43
|
+
return deepPartialObjectGuard(this);
|
|
44
|
+
}
|
|
45
|
+
required() {
|
|
46
|
+
return requiredObjectGuard(this);
|
|
47
|
+
}
|
|
48
|
+
strict() {
|
|
49
|
+
return objectModeGuard(this, ObjectModeTag.Strict);
|
|
50
|
+
}
|
|
51
|
+
passthrough() {
|
|
52
|
+
return objectModeGuard(this, ObjectModeTag.Passthrough);
|
|
53
|
+
}
|
|
54
|
+
strip() {
|
|
55
|
+
return objectModeGuard(this, ObjectModeTag.Passthrough);
|
|
56
|
+
}
|
|
57
|
+
catchall(guard) {
|
|
58
|
+
return catchallObjectGuard(this, guard);
|
|
59
|
+
}
|
|
47
60
|
}
|
|
48
61
|
/**
|
|
49
|
-
* @brief object.
|
|
62
|
+
* @brief Build an object guard that accepts unspecified enumerable keys.
|
|
63
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
64
|
+
* with stable metadata.
|
|
50
65
|
*/
|
|
51
66
|
export function object(shape) {
|
|
52
67
|
return new ObjectGuard(objectSchema(shape, ObjectModeTag.Passthrough));
|
|
53
68
|
}
|
|
54
69
|
/**
|
|
55
|
-
* @brief
|
|
70
|
+
* @brief Build an object guard that rejects unspecified own keys.
|
|
71
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
72
|
+
* with stable metadata.
|
|
56
73
|
*/
|
|
57
74
|
export function strictObject(shape) {
|
|
58
75
|
return new ObjectGuard(objectSchema(shape, ObjectModeTag.Strict));
|
|
59
76
|
}
|
|
60
77
|
/**
|
|
61
|
-
* @brief extend.
|
|
78
|
+
* @brief Execute extend.
|
|
79
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
62
80
|
*/
|
|
63
81
|
export function extend(guard, extension) {
|
|
64
82
|
return extendObjectGuard(guard, extension);
|
|
65
83
|
}
|
|
66
84
|
/**
|
|
67
|
-
* @brief
|
|
85
|
+
* @brief Execute safe extend.
|
|
86
|
+
* @details Runtime construction follows the same hardened schema merge as
|
|
87
|
+
* extend. The method name gives callers a Zod-compatible, intention-revealing
|
|
88
|
+
* API for shape extension.
|
|
68
89
|
*/
|
|
69
|
-
export function
|
|
70
|
-
return
|
|
90
|
+
export function safeExtend(guard, extension) {
|
|
91
|
+
return extendObjectGuard(guard, extension);
|
|
71
92
|
}
|
|
72
93
|
/**
|
|
73
|
-
* @brief
|
|
94
|
+
* @brief Execute object merge.
|
|
95
|
+
* @details The left object keeps its unknown-key mode. The right object supplies
|
|
96
|
+
* overriding fields and, when present, a catchall schema.
|
|
74
97
|
*/
|
|
98
|
+
export function merge(guard, other) {
|
|
99
|
+
return mergeObjectGuard(guard, other);
|
|
100
|
+
}
|
|
101
|
+
export function pick(guard, keys) {
|
|
102
|
+
return pickObjectGuard(guard, keys);
|
|
103
|
+
}
|
|
75
104
|
export function omit(guard, keys) {
|
|
76
105
|
return omitObjectGuard(guard, keys);
|
|
77
106
|
}
|
|
78
107
|
/**
|
|
79
|
-
* @brief partial.
|
|
108
|
+
* @brief Execute partial.
|
|
109
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
80
110
|
*/
|
|
81
111
|
export function partial(guard) {
|
|
82
112
|
return partialObjectGuard(guard);
|
|
83
113
|
}
|
|
84
114
|
/**
|
|
85
|
-
* @brief
|
|
115
|
+
* @brief Execute deep partial.
|
|
116
|
+
*/
|
|
117
|
+
export function deepPartial(guard) {
|
|
118
|
+
return deepPartialObjectGuard(guard);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @brief Execute required.
|
|
122
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
123
|
+
*/
|
|
124
|
+
export function required(guard) {
|
|
125
|
+
return requiredObjectGuard(guard);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* @brief Convert an object guard to strict unknown-key policy.
|
|
129
|
+
*/
|
|
130
|
+
export function strict(guard) {
|
|
131
|
+
return objectModeGuard(guard, ObjectModeTag.Strict);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @brief Convert an object guard to passthrough unknown-key policy.
|
|
135
|
+
*/
|
|
136
|
+
export function passthrough(guard) {
|
|
137
|
+
return objectModeGuard(guard, ObjectModeTag.Passthrough);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* @brief Accept unknown keys without producing a stripped output copy.
|
|
141
|
+
* @details TypeSea guard validation returns the original value, so Zod-style
|
|
142
|
+
* strip has validation semantics equivalent to passthrough.
|
|
143
|
+
*/
|
|
144
|
+
export function strip(guard) {
|
|
145
|
+
return objectModeGuard(guard, ObjectModeTag.Passthrough);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @brief Validate every undeclared own key with a catchall schema.
|
|
149
|
+
*/
|
|
150
|
+
export function catchall(guard, value) {
|
|
151
|
+
return catchallObjectGuard(guard, value);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* @brief Execute extend object guard.
|
|
155
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
86
156
|
*/
|
|
87
157
|
function extendObjectGuard(guard, extension) {
|
|
88
158
|
const schema = readObjectMethodSchema(guard, "object extend receiver");
|
|
89
159
|
return new ObjectGuard(mergeObjectSchemas(schema, objectSchema(extension, schema.mode)));
|
|
90
160
|
}
|
|
91
161
|
/**
|
|
92
|
-
* @brief
|
|
162
|
+
* @brief Execute merge object guard.
|
|
163
|
+
*/
|
|
164
|
+
function mergeObjectGuard(guard, other) {
|
|
165
|
+
const base = readObjectMethodSchema(guard, "object merge receiver");
|
|
166
|
+
const extension = readObjectMethodSchema(other, "object merge argument");
|
|
167
|
+
return new ObjectGuard(mergeObjectSchemas(base, extension));
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @brief Execute pick object guard.
|
|
171
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
93
172
|
*/
|
|
94
173
|
function pickObjectGuard(guard, keys) {
|
|
95
174
|
const schema = readObjectMethodSchema(guard, "object pick receiver");
|
|
@@ -97,7 +176,8 @@ function pickObjectGuard(guard, keys) {
|
|
|
97
176
|
return new ObjectGuard(pickObjectSchema(schema, selection));
|
|
98
177
|
}
|
|
99
178
|
/**
|
|
100
|
-
* @brief omit object guard.
|
|
179
|
+
* @brief Execute omit object guard.
|
|
180
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
101
181
|
*/
|
|
102
182
|
function omitObjectGuard(guard, keys) {
|
|
103
183
|
const schema = readObjectMethodSchema(guard, "object omit receiver");
|
|
@@ -105,9 +185,39 @@ function omitObjectGuard(guard, keys) {
|
|
|
105
185
|
return new ObjectGuard(omitObjectSchema(schema, selection));
|
|
106
186
|
}
|
|
107
187
|
/**
|
|
108
|
-
* @brief partial object guard.
|
|
188
|
+
* @brief Execute partial object guard.
|
|
189
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
109
190
|
*/
|
|
110
191
|
function partialObjectGuard(guard) {
|
|
111
192
|
const schema = readObjectMethodSchema(guard, "object partial receiver");
|
|
112
193
|
return new ObjectGuard(partialObjectSchema(schema));
|
|
113
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* @brief Execute deep partial object guard.
|
|
197
|
+
*/
|
|
198
|
+
function deepPartialObjectGuard(guard) {
|
|
199
|
+
const schema = readObjectMethodSchema(guard, "object deepPartial receiver");
|
|
200
|
+
return new ObjectGuard(deepPartialObjectSchema(schema));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* @brief Execute required object guard.
|
|
204
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
205
|
+
*/
|
|
206
|
+
function requiredObjectGuard(guard) {
|
|
207
|
+
const schema = readObjectMethodSchema(guard, "object required receiver");
|
|
208
|
+
return new ObjectGuard(requiredObjectSchema(schema));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @brief Execute object mode rewrite.
|
|
212
|
+
*/
|
|
213
|
+
function objectModeGuard(guard, mode) {
|
|
214
|
+
const schema = readObjectMethodSchema(guard, "object mode receiver");
|
|
215
|
+
return new ObjectGuard(objectSchemaWithMode(schema, mode));
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* @brief Execute object catchall rewrite.
|
|
219
|
+
*/
|
|
220
|
+
function catchallObjectGuard(guard, value) {
|
|
221
|
+
const schema = readObjectMethodSchema(guard, "object catchall receiver");
|
|
222
|
+
return new ObjectGuard(objectSchemaWithCatchall(schema, readGuardSchema(value, "object catchall schema")));
|
|
223
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file index.ts
|
|
3
3
|
* @brief Public object builder aggregation.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
|
-
export { ObjectGuard, extend, object, omit, partial, pick, strictObject } from "./guard.js";
|
|
6
|
-
export type { InferObject, MergeObjectShapes, ObjectGuardMode, ObjectShape, OmitObjectShape, PartialObjectShape, PickObjectShape } from "./types.js";
|
|
7
|
+
export { ObjectGuard, catchall, deepPartial, extend, merge, object, omit, partial, passthrough, pick, required, safeExtend, strict, strictObject, strip } from "./guard.js";
|
|
8
|
+
export type { DeepPartialObjectShape, DeepPartialValue, InferObject, MaskSelectedKeys, MergeObjectShapes, ObjectKeyMask, ObjectGuardMode, ObjectShape, OmitObjectShape, OmitObjectShapeByMask, PartialObjectShape, PickObjectShape, PickObjectShapeByMask, RequiredObjectShape } from "./types.js";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/object/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/object/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,WAAW,EACX,QAAQ,EACR,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,YAAY,EACZ,KAAK,EACR,MAAM,YAAY,CAAC;AACpB,YAAY,EACR,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,YAAY,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file index.ts
|
|
3
3
|
* @brief Public object builder aggregation.
|
|
4
|
+
* @details Builder helpers normalize user-facing fluent calls into immutable schema nodes
|
|
5
|
+
* with stable metadata.
|
|
4
6
|
*/
|
|
5
|
-
export { ObjectGuard, extend, object, omit, partial, pick, strictObject } from "./guard.js";
|
|
7
|
+
export { ObjectGuard, catchall, deepPartial, extend, merge, object, omit, partial, passthrough, pick, required, safeExtend, strict, strictObject, strip } from "./guard.js";
|