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
package/dist/aot/index.js
CHANGED
|
@@ -3,7 +3,13 @@ import { SchemaTag } from "../kind/index.js";
|
|
|
3
3
|
import { err, ok } from "../result/index.js";
|
|
4
4
|
import { freezeSchema, isSchemaValue } from "../schema/index.js";
|
|
5
5
|
/**
|
|
6
|
-
* @brief
|
|
6
|
+
* @brief Emit a standalone validator module for a guard schema.
|
|
7
|
+
* @param guard Guard whose schema is exported.
|
|
8
|
+
* @param options Optional function name and compile mode.
|
|
9
|
+
* @returns Result carrying source text, or closed issues for unsupported schema nodes.
|
|
10
|
+
* @details AOT output cannot close over runtime side tables. The schema is
|
|
11
|
+
* scanned before code emission so lazy, refine, and symbol-literal constructs
|
|
12
|
+
* fail as explicit issues instead of producing partially faithful source.
|
|
7
13
|
*/
|
|
8
14
|
export function emitAotModule(guard, options) {
|
|
9
15
|
const schema = readAotSchema(guard);
|
|
@@ -13,7 +19,7 @@ export function emitAotModule(guard, options) {
|
|
|
13
19
|
if (issues.length !== 0) {
|
|
14
20
|
return err(freezeAotIssues(issues));
|
|
15
21
|
}
|
|
16
|
-
const bundle = emitCompiledSourceBundle(schema, config.name);
|
|
22
|
+
const bundle = emitCompiledSourceBundle(schema, config.name, config.mode);
|
|
17
23
|
if (bundle.dynamicSchemas.length !== 0) {
|
|
18
24
|
return err(freezeAotIssues([
|
|
19
25
|
{
|
|
@@ -29,25 +35,36 @@ export function emitAotModule(guard, options) {
|
|
|
29
35
|
}));
|
|
30
36
|
}
|
|
31
37
|
/**
|
|
32
|
-
* @brief
|
|
38
|
+
* @brief Normalize the guard input used by AOT emission.
|
|
39
|
+
* @param guard Candidate guard-like value.
|
|
40
|
+
* @returns Frozen schema safe for source generation.
|
|
41
|
+
* @throws TypeError when the value is not a TypeSea guard.
|
|
42
|
+
* @details The schema slot is descriptor-read to reject forged prototypes before
|
|
43
|
+
* the generator traverses schema data.
|
|
33
44
|
*/
|
|
34
45
|
function readAotSchema(guard) {
|
|
35
46
|
if (!isRecord(guard)) {
|
|
36
47
|
throw new TypeError("AOT guard must be a TypeSea guard");
|
|
37
48
|
}
|
|
38
|
-
const schema = guard
|
|
49
|
+
const schema = readOwnDataProperty(guard, "schema");
|
|
39
50
|
if (!isSchemaValue(schema)) {
|
|
40
51
|
throw new TypeError("AOT guard must contain a valid TypeSea schema");
|
|
41
52
|
}
|
|
42
53
|
return freezeSchema(schema);
|
|
43
54
|
}
|
|
44
55
|
/**
|
|
45
|
-
* @brief
|
|
56
|
+
* @brief Normalize AOT compile options.
|
|
57
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
58
|
+
* over runtime side tables.
|
|
59
|
+
* @param options Optional user options object.
|
|
60
|
+
* @returns Complete options with defaults.
|
|
61
|
+
* @throws TypeError when option fields have unsupported types.
|
|
46
62
|
*/
|
|
47
63
|
function readOptions(options) {
|
|
48
64
|
if (options === undefined) {
|
|
49
65
|
return {
|
|
50
|
-
name: "typesea_aot"
|
|
66
|
+
name: "typesea_aot",
|
|
67
|
+
mode: "safe"
|
|
51
68
|
};
|
|
52
69
|
}
|
|
53
70
|
if (!isRecord(options)) {
|
|
@@ -56,18 +73,45 @@ function readOptions(options) {
|
|
|
56
73
|
const name = options.name;
|
|
57
74
|
if (name === undefined) {
|
|
58
75
|
return {
|
|
59
|
-
name: "typesea_aot"
|
|
76
|
+
name: "typesea_aot",
|
|
77
|
+
mode: readAotMode(options)
|
|
60
78
|
};
|
|
61
79
|
}
|
|
62
80
|
if (typeof name !== "string") {
|
|
63
81
|
throw new TypeError("AOT name must be a string");
|
|
64
82
|
}
|
|
65
83
|
return {
|
|
66
|
-
name
|
|
84
|
+
name,
|
|
85
|
+
mode: readAotMode(options)
|
|
67
86
|
};
|
|
68
87
|
}
|
|
69
88
|
/**
|
|
70
|
-
* @brief
|
|
89
|
+
* @brief Normalize the requested AOT compile mode.
|
|
90
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
91
|
+
* over runtime side tables.
|
|
92
|
+
* @param options Options object already accepted as a record.
|
|
93
|
+
* @returns Safe, unsafe, or unchecked codegen mode.
|
|
94
|
+
* @throws TypeError when the mode is outside the supported set.
|
|
95
|
+
*/
|
|
96
|
+
function readAotMode(options) {
|
|
97
|
+
const mode = options["mode"];
|
|
98
|
+
if (mode === undefined) {
|
|
99
|
+
return "safe";
|
|
100
|
+
}
|
|
101
|
+
if (mode === "safe" || mode === "unsafe" || mode === "unchecked") {
|
|
102
|
+
return mode;
|
|
103
|
+
}
|
|
104
|
+
throw new TypeError("AOT mode must be \"safe\", \"unsafe\", or \"unchecked\"");
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @brief Walk a schema tree and record constructs that AOT cannot preserve.
|
|
108
|
+
* @param schema Current schema node.
|
|
109
|
+
* @param path Diagnostic path to the current node.
|
|
110
|
+
* @param issues Mutable issue vector owned by the caller.
|
|
111
|
+
* @param seen Schema object set used to avoid repeated traversal.
|
|
112
|
+
* @details Runtime compilation can keep dynamic schemas in side tables; emitted
|
|
113
|
+
* modules cannot. This scan keeps the public API honest by refusing source that
|
|
114
|
+
* would silently weaken lazy, refine, or symbol literal semantics.
|
|
71
115
|
*/
|
|
72
116
|
function scanAotSchema(schema, path, issues, seen) {
|
|
73
117
|
if (seen.has(schema)) {
|
|
@@ -80,17 +124,32 @@ function scanAotSchema(schema, path, issues, seen) {
|
|
|
80
124
|
pushIssue(path, issues, "unsupported_aot_symbol_literal", "AOT modules cannot preserve symbol literal identity");
|
|
81
125
|
}
|
|
82
126
|
return;
|
|
127
|
+
case SchemaTag.Date:
|
|
128
|
+
pushIssue(path, issues, "unsupported_aot_date", "AOT modules cannot preserve JavaScript Date object validation yet");
|
|
129
|
+
return;
|
|
83
130
|
case SchemaTag.Array:
|
|
84
131
|
scanAotSchema(schema.item, path.concat("items"), issues, seen);
|
|
85
132
|
return;
|
|
86
133
|
case SchemaTag.Tuple:
|
|
87
134
|
scanSchemaArray(schema.items, path, issues, seen);
|
|
135
|
+
if (schema.rest !== undefined) {
|
|
136
|
+
scanAotSchema(schema.rest, path.concat("rest"), issues, seen);
|
|
137
|
+
}
|
|
88
138
|
return;
|
|
89
139
|
case SchemaTag.Record:
|
|
90
140
|
scanAotSchema(schema.value, path.concat("additionalProperties"), issues, seen);
|
|
91
141
|
return;
|
|
142
|
+
case SchemaTag.Map:
|
|
143
|
+
case SchemaTag.Set:
|
|
144
|
+
case SchemaTag.InstanceOf:
|
|
145
|
+
case SchemaTag.Property:
|
|
146
|
+
pushIssue(path, issues, "unsupported_aot_runtime_object", "AOT modules cannot preserve JavaScript runtime object contracts yet");
|
|
147
|
+
return;
|
|
92
148
|
case SchemaTag.Object:
|
|
93
149
|
scanObjectEntries(schema.entries, path, issues, seen);
|
|
150
|
+
if (schema.catchall !== undefined) {
|
|
151
|
+
scanAotSchema(schema.catchall, path.concat("additionalProperties"), issues, seen);
|
|
152
|
+
}
|
|
94
153
|
return;
|
|
95
154
|
case SchemaTag.Union:
|
|
96
155
|
scanSchemaArray(schema.options, path, issues, seen);
|
|
@@ -131,6 +190,8 @@ function scanAotSchema(schema, path, issues, seen) {
|
|
|
131
190
|
}
|
|
132
191
|
/**
|
|
133
192
|
* @brief scan schema array.
|
|
193
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
194
|
+
* over runtime side tables.
|
|
134
195
|
*/
|
|
135
196
|
function scanSchemaArray(schemas, path, issues, seen) {
|
|
136
197
|
for (let index = 0; index < schemas.length; index += 1) {
|
|
@@ -142,6 +203,8 @@ function scanSchemaArray(schemas, path, issues, seen) {
|
|
|
142
203
|
}
|
|
143
204
|
/**
|
|
144
205
|
* @brief scan object entries.
|
|
206
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
207
|
+
* over runtime side tables.
|
|
145
208
|
*/
|
|
146
209
|
function scanObjectEntries(entries, path, issues, seen) {
|
|
147
210
|
for (let index = 0; index < entries.length; index += 1) {
|
|
@@ -153,6 +216,8 @@ function scanObjectEntries(entries, path, issues, seen) {
|
|
|
153
216
|
}
|
|
154
217
|
/**
|
|
155
218
|
* @brief emit module source.
|
|
219
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
220
|
+
* over runtime side tables.
|
|
156
221
|
*/
|
|
157
222
|
function emitModuleSource(bundle) {
|
|
158
223
|
return [
|
|
@@ -166,20 +231,23 @@ function emitModuleSource(bundle) {
|
|
|
166
231
|
JSON.stringify(bundle.strings),
|
|
167
232
|
";const d=function(){return false;};",
|
|
168
233
|
"const m=function(){return;};",
|
|
234
|
+
"const mf=function(){return;};",
|
|
169
235
|
"const sk=function(v,ks){if(typeof v!==\"object\"||v===null||Array.isArray(v))return false;const ps=Reflect.ownKeys(v);for(let i=0;i<ps.length;i+=1){const key=ps[i];if(typeof key!==\"string\"||!ks.includes(key))return false;}return true;};",
|
|
170
|
-
"const __typesea=(function(l,r,k,u,d,m,sk){",
|
|
236
|
+
"const __typesea=(function(l,r,k,u,d,m,mf,sk){",
|
|
171
237
|
bundle.source,
|
|
172
|
-
"})(l,r,k,u,d,m,sk);",
|
|
173
|
-
"const freezeIssues=function(xs){if(xs.length===0)return Object.freeze([]);const out=new Array(xs.length);for(let i=0;i<xs.length;i+=1){const x=xs[i];const p=x.path.slice();Object.freeze(p);const y={path:p,code:x.code,expected:x.expected,actual:x.actual,message:x.message};Object.freeze(y);out[i]=y;}return Object.freeze(out);};",
|
|
238
|
+
"})(l,r,k,u,d,m,mf,sk);",
|
|
174
239
|
"export function is(value){return __typesea.is(value);}",
|
|
175
|
-
"export function check(value){
|
|
240
|
+
"export function check(value){return __typesea.result(value);}",
|
|
241
|
+
"export function checkFirst(value){return __typesea.first(value);}",
|
|
176
242
|
"export function assert(value){const result=check(value);if(!result.ok){const error=new Error(\"TypeSea assertion failed\");Object.defineProperty(error,\"issues\",{configurable:false,enumerable:true,value:result.error,writable:false});throw error;}}",
|
|
177
|
-
"export default Object.freeze({is,check,assert});",
|
|
243
|
+
"export default Object.freeze({is,check,checkFirst,assert});",
|
|
178
244
|
""
|
|
179
245
|
].join("");
|
|
180
246
|
}
|
|
181
247
|
/**
|
|
182
248
|
* @brief emit declaration source.
|
|
249
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
250
|
+
* over runtime side tables.
|
|
183
251
|
*/
|
|
184
252
|
function emitDeclarationSource() {
|
|
185
253
|
return [
|
|
@@ -195,10 +263,12 @@ function emitDeclarationSource() {
|
|
|
195
263
|
" | { readonly ok: false; readonly error: readonly AotIssue[] };",
|
|
196
264
|
"export declare function is(value: unknown): boolean;",
|
|
197
265
|
"export declare function check<TValue = unknown>(value: TValue): AotCheckResult<TValue>;",
|
|
266
|
+
"export declare function checkFirst<TValue = unknown>(value: TValue): AotCheckResult<TValue>;",
|
|
198
267
|
"export declare function assert(value: unknown): void;",
|
|
199
268
|
"declare const guard: {",
|
|
200
269
|
" readonly is: typeof is;",
|
|
201
270
|
" readonly check: typeof check;",
|
|
271
|
+
" readonly checkFirst: typeof checkFirst;",
|
|
202
272
|
" readonly assert: typeof assert;",
|
|
203
273
|
"};",
|
|
204
274
|
"export default guard;",
|
|
@@ -207,6 +277,8 @@ function emitDeclarationSource() {
|
|
|
207
277
|
}
|
|
208
278
|
/**
|
|
209
279
|
* @brief serialize literal array.
|
|
280
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
281
|
+
* over runtime side tables.
|
|
210
282
|
*/
|
|
211
283
|
function serializeLiteralArray(values) {
|
|
212
284
|
const parts = new Array(values.length);
|
|
@@ -220,6 +292,8 @@ function serializeLiteralArray(values) {
|
|
|
220
292
|
}
|
|
221
293
|
/**
|
|
222
294
|
* @brief serialize literal.
|
|
295
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
296
|
+
* over runtime side tables.
|
|
223
297
|
*/
|
|
224
298
|
function serializeLiteral(value) {
|
|
225
299
|
switch (typeof value) {
|
|
@@ -253,6 +327,8 @@ function serializeLiteral(value) {
|
|
|
253
327
|
}
|
|
254
328
|
/**
|
|
255
329
|
* @brief serialize reg exp array.
|
|
330
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
331
|
+
* over runtime side tables.
|
|
256
332
|
*/
|
|
257
333
|
function serializeRegExpArray(values) {
|
|
258
334
|
const parts = new Array(values.length);
|
|
@@ -265,7 +341,8 @@ function serializeRegExpArray(values) {
|
|
|
265
341
|
return `[${parts.join(",")}]`;
|
|
266
342
|
}
|
|
267
343
|
/**
|
|
268
|
-
* @brief push issue.
|
|
344
|
+
* @brief Execute push issue.
|
|
345
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
269
346
|
*/
|
|
270
347
|
function pushIssue(path, issues, code, message) {
|
|
271
348
|
issues.push({
|
|
@@ -275,7 +352,8 @@ function pushIssue(path, issues, code, message) {
|
|
|
275
352
|
});
|
|
276
353
|
}
|
|
277
354
|
/**
|
|
278
|
-
* @brief freeze aot issues.
|
|
355
|
+
* @brief Execute freeze aot issues.
|
|
356
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
279
357
|
*/
|
|
280
358
|
function freezeAotIssues(issues) {
|
|
281
359
|
for (let index = 0; index < issues.length; index += 1) {
|
|
@@ -288,8 +366,28 @@ function freezeAotIssues(issues) {
|
|
|
288
366
|
return Object.freeze(issues);
|
|
289
367
|
}
|
|
290
368
|
/**
|
|
291
|
-
* @brief
|
|
369
|
+
* @brief Accept option and guard records before local field reads.
|
|
370
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
371
|
+
* over runtime side tables.
|
|
372
|
+
* @param value Candidate object.
|
|
373
|
+
* @returns True for non-array objects.
|
|
292
374
|
*/
|
|
293
375
|
function isRecord(value) {
|
|
294
376
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
295
377
|
}
|
|
378
|
+
/**
|
|
379
|
+
* @brief Read one own data slot from an AOT input object.
|
|
380
|
+
* @details AOT helpers serialize only portable data because standalone modules cannot close
|
|
381
|
+
* over runtime side tables.
|
|
382
|
+
* @param value Object being normalized.
|
|
383
|
+
* @param key Field name or symbol.
|
|
384
|
+
* @returns Stored field value, or undefined when absent.
|
|
385
|
+
*/
|
|
386
|
+
function readOwnDataProperty(value, key) {
|
|
387
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
388
|
+
if (descriptor === undefined ||
|
|
389
|
+
!Object.prototype.hasOwnProperty.call(descriptor, "value")) {
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
return descriptor.value;
|
|
393
|
+
}
|
package/dist/async/index.d.ts
CHANGED
|
@@ -1,110 +1,82 @@
|
|
|
1
1
|
import { type DecodeSource, type Decoder, type InferDecoder } from "../decoder/index.js";
|
|
2
2
|
import type { Guard, Presence, RuntimeValue } from "../guard/index.js";
|
|
3
3
|
import { type CheckResult } from "../issue/index.js";
|
|
4
|
-
/**
|
|
5
|
-
* @brief async decode runner.
|
|
6
|
-
*/
|
|
7
4
|
type AsyncDecodeRunner<TValue> = (value: unknown) => Promise<CheckResult<TValue>>;
|
|
8
|
-
/**
|
|
9
|
-
* @brief async predicate.
|
|
10
|
-
*/
|
|
11
5
|
type AsyncPredicate<TValue> = (value: TValue) => boolean | Promise<boolean>;
|
|
12
|
-
/**
|
|
13
|
-
* @brief async mapper.
|
|
14
|
-
*/
|
|
15
6
|
type AsyncMapper<TValue, TNext> = (value: TValue) => TNext | Promise<TNext>;
|
|
16
7
|
/**
|
|
17
|
-
* @brief async decoder
|
|
8
|
+
* @brief Private runner slot for async decoder instances.
|
|
9
|
+
* @details Decoder helpers keep validation failures explicit in Result values while
|
|
10
|
+
* preserving the original input value.
|
|
18
11
|
*/
|
|
19
12
|
declare const AsyncDecoderRunSymbol: unique symbol;
|
|
20
|
-
/**
|
|
21
|
-
* @brief async decode source.
|
|
22
|
-
*/
|
|
23
13
|
export type AsyncDecodeSource = DecodeSource | AsyncDecoder<unknown>;
|
|
24
|
-
/**
|
|
25
|
-
* @brief infer async decoder.
|
|
26
|
-
*/
|
|
27
14
|
export type InferAsyncDecoder<TSource> = TSource extends AsyncDecoder<infer TValue> ? TValue : InferDecoder<TSource>;
|
|
28
15
|
/**
|
|
29
|
-
* @brief
|
|
16
|
+
* @brief Promise-returning decode pipeline.
|
|
17
|
+
* @details The API keeps validation failures in Result values; rejected
|
|
18
|
+
* promises are reserved for programmer errors thrown by user mappers.
|
|
30
19
|
*/
|
|
31
20
|
export interface AsyncDecoder<TValue> {
|
|
32
|
-
/**
|
|
33
|
-
* @brief decode async.
|
|
34
|
-
*/
|
|
35
21
|
decodeAsync(value: unknown): Promise<CheckResult<TValue>>;
|
|
36
|
-
/**
|
|
37
|
-
* @brief refine async.
|
|
38
|
-
*/
|
|
39
22
|
refineAsync(predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
|
|
40
|
-
/**
|
|
41
|
-
* @brief transform async.
|
|
42
|
-
*/
|
|
43
23
|
transformAsync<TNext>(mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
|
|
44
|
-
/**
|
|
45
|
-
* @brief pipe async.
|
|
46
|
-
*/
|
|
47
24
|
pipeAsync<TNext extends AsyncDecodeSource>(next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
|
|
48
25
|
}
|
|
49
26
|
/**
|
|
50
|
-
* @brief
|
|
51
|
-
* @details
|
|
52
|
-
*
|
|
27
|
+
* @brief Frozen wrapper around one async decode runner.
|
|
28
|
+
* @details Receiver validation mirrors BaseDecoder so detached method calls do
|
|
29
|
+
* not bypass TypeSea's object construction checks.
|
|
53
30
|
*/
|
|
54
31
|
export declare class BaseAsyncDecoder<TValue> implements AsyncDecoder<TValue> {
|
|
55
32
|
private readonly [AsyncDecoderRunSymbol];
|
|
56
|
-
/**
|
|
57
|
-
* @brief constructor.
|
|
58
|
-
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
59
|
-
*/
|
|
60
33
|
constructor(run: AsyncDecodeRunner<TValue>);
|
|
61
|
-
/**
|
|
62
|
-
* @brief decode async.
|
|
63
|
-
*/
|
|
64
34
|
decodeAsync(this: unknown, value: unknown): Promise<CheckResult<TValue>>;
|
|
65
|
-
/**
|
|
66
|
-
* @brief refine async.
|
|
67
|
-
*/
|
|
68
35
|
refineAsync(predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
|
|
69
|
-
/**
|
|
70
|
-
* @brief transform async.
|
|
71
|
-
*/
|
|
72
36
|
transformAsync<TNext>(mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
|
|
73
|
-
/**
|
|
74
|
-
* @brief pipe async.
|
|
75
|
-
*/
|
|
76
37
|
pipeAsync<TNext extends AsyncDecodeSource>(next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
|
|
77
38
|
}
|
|
78
39
|
/**
|
|
79
|
-
* @brief async decoder.
|
|
40
|
+
* @brief Wrap a guard, decoder, or async decoder as an async decoder pipeline.
|
|
41
|
+
* @details Decoder helpers keep validation failures explicit in Result values while
|
|
42
|
+
* preserving the original input value.
|
|
80
43
|
*/
|
|
81
44
|
export declare function asyncDecoder<TValue, TPresence extends Presence>(source: Guard<TValue, TPresence>): BaseAsyncDecoder<RuntimeValue<TValue, TPresence>>;
|
|
82
45
|
/**
|
|
83
|
-
* @brief async decoder.
|
|
46
|
+
* @brief Execute async decoder.
|
|
47
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
84
48
|
*/
|
|
85
49
|
export declare function asyncDecoder<TValue>(source: Decoder<TValue> | AsyncDecoder<TValue>): BaseAsyncDecoder<TValue>;
|
|
86
50
|
/**
|
|
87
|
-
* @brief async
|
|
51
|
+
* @brief Build an async decoder and append an async refinement.
|
|
52
|
+
* @details Decoder helpers keep validation failures explicit in Result values while
|
|
53
|
+
* preserving the original input value.
|
|
88
54
|
*/
|
|
89
55
|
export declare function asyncRefine<TValue, TPresence extends Presence>(source: Guard<TValue, TPresence>, predicate: AsyncPredicate<RuntimeValue<TValue, TPresence>>, name: string): BaseAsyncDecoder<RuntimeValue<TValue, TPresence>>;
|
|
90
56
|
/**
|
|
91
|
-
* @brief async refine.
|
|
57
|
+
* @brief Execute async refine.
|
|
58
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
92
59
|
*/
|
|
93
60
|
export declare function asyncRefine<TValue>(source: Decoder<TValue> | AsyncDecoder<TValue>, predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
|
|
94
61
|
/**
|
|
95
|
-
* @brief async
|
|
62
|
+
* @brief Build an async decoder and append an async mapper.
|
|
63
|
+
* @details Decoder helpers keep validation failures explicit in Result values while
|
|
64
|
+
* preserving the original input value.
|
|
96
65
|
*/
|
|
97
66
|
export declare function asyncTransform<TValue, TPresence extends Presence, TNext>(source: Guard<TValue, TPresence>, mapper: AsyncMapper<RuntimeValue<TValue, TPresence>, TNext>): BaseAsyncDecoder<TNext>;
|
|
98
67
|
/**
|
|
99
|
-
* @brief async transform.
|
|
68
|
+
* @brief Execute async transform.
|
|
69
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
100
70
|
*/
|
|
101
71
|
export declare function asyncTransform<TValue, TNext>(source: Decoder<TValue> | AsyncDecoder<TValue>, mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
|
|
102
72
|
/**
|
|
103
|
-
* @brief async pipe.
|
|
73
|
+
* @brief Execute async pipe.
|
|
74
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
104
75
|
*/
|
|
105
76
|
export declare function asyncPipe<TNext extends AsyncDecodeSource>(source: AsyncDecodeSource, next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
|
|
106
77
|
/**
|
|
107
|
-
* @brief
|
|
78
|
+
* @brief Check async decoder value.
|
|
79
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
108
80
|
*/
|
|
109
81
|
export declare function isAsyncDecoderValue(value: unknown): value is AsyncDecoder<unknown>;
|
|
110
82
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"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"}
|