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/internal/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file internal.ts
|
|
3
3
|
* @brief Private helpers shared across TypeSea translation units.
|
|
4
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
5
|
+
* module boundary.
|
|
4
6
|
*
|
|
5
7
|
* @invariant Values crossing a module boundary stay `unknown` until a local
|
|
6
8
|
* guard proves the shape needed by that module.
|
|
@@ -8,27 +10,61 @@
|
|
|
8
10
|
import type { Guard, Presence } from "../guard/index.js";
|
|
9
11
|
import { type Schema } from "../schema/index.js";
|
|
10
12
|
/**
|
|
11
|
-
* @brief
|
|
13
|
+
* @brief Read a guard schema after proving the receiver shape locally.
|
|
14
|
+
* @param guard Candidate guard-like value.
|
|
15
|
+
* @param label Message prefix for TypeError diagnostics.
|
|
16
|
+
* @returns Valid schema stored in an own data slot.
|
|
17
|
+
* @throws TypeError when the receiver is not structurally a TypeSea guard.
|
|
18
|
+
* @details This helper is used by builders that accept guard-like values rather
|
|
19
|
+
* than constructed guard instances. The schema field is read by descriptor so a
|
|
20
|
+
* forged prototype cannot supply or mutate the schema after admission.
|
|
12
21
|
*/
|
|
13
22
|
export declare function readGuardSchema(guard: unknown, label: string): Schema;
|
|
14
23
|
/**
|
|
15
|
-
* @brief
|
|
24
|
+
* @brief Check record.
|
|
25
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
16
26
|
*/
|
|
17
27
|
export declare function isRecord(value: unknown): value is Readonly<Record<string, unknown>>;
|
|
18
28
|
/**
|
|
19
|
-
* @brief
|
|
29
|
+
* @brief Accept an array before a caller performs local element validation.
|
|
30
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
31
|
+
* module boundary.
|
|
32
|
+
* @param value Candidate vector.
|
|
33
|
+
* @returns True when the value is an Array instance.
|
|
20
34
|
*/
|
|
21
35
|
export declare function isUnknownArray(value: unknown): value is readonly unknown[];
|
|
22
36
|
/**
|
|
23
|
-
* @brief
|
|
37
|
+
* @brief Linear membership for short builder-owned string vectors.
|
|
38
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
39
|
+
* module boundary.
|
|
40
|
+
* @param values Candidate set represented as an ordered vector.
|
|
41
|
+
* @param value String being searched.
|
|
42
|
+
* @returns True when the string is present.
|
|
24
43
|
*/
|
|
25
44
|
export declare function includesString(values: readonly string[], value: string): boolean;
|
|
26
45
|
/**
|
|
27
|
-
* @brief
|
|
46
|
+
* @brief Accept only the literal boolean success value from user predicates.
|
|
47
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
48
|
+
* module boundary.
|
|
49
|
+
* @param value Predicate return value.
|
|
50
|
+
* @returns True only for `true`.
|
|
28
51
|
*/
|
|
29
52
|
export declare function isStrictTrue(value: unknown): boolean;
|
|
30
53
|
/**
|
|
31
|
-
* @brief
|
|
54
|
+
* @brief Check whether a value structurally exposes a TypeSea schema.
|
|
55
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
56
|
+
* module boundary.
|
|
57
|
+
* @param value Candidate guard-like object.
|
|
58
|
+
* @returns True when a valid schema is stored directly on the object.
|
|
32
59
|
*/
|
|
33
60
|
export declare function isGuardValue(value: unknown): value is Guard<unknown, Presence>;
|
|
61
|
+
/**
|
|
62
|
+
* @brief Read one own data property without running getters.
|
|
63
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
64
|
+
* module boundary.
|
|
65
|
+
* @param value Object being normalized.
|
|
66
|
+
* @param key Field name or symbol.
|
|
67
|
+
* @returns Stored field value, or undefined when the own data slot is absent.
|
|
68
|
+
*/
|
|
69
|
+
export declare function readOwnDataProperty(value: object, key: PropertyKey): unknown;
|
|
34
70
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACd,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GACd,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAEnC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,GACjB,OAAO,CAOT"}
|
package/dist/internal/index.js
CHANGED
|
@@ -1,38 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file internal.ts
|
|
3
3
|
* @brief Private helpers shared across TypeSea translation units.
|
|
4
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
5
|
+
* module boundary.
|
|
4
6
|
*
|
|
5
7
|
* @invariant Values crossing a module boundary stay `unknown` until a local
|
|
6
8
|
* guard proves the shape needed by that module.
|
|
7
9
|
*/
|
|
8
10
|
import { isSchemaValue } from "../schema/index.js";
|
|
9
11
|
/**
|
|
10
|
-
* @brief
|
|
12
|
+
* @brief Read a guard schema after proving the receiver shape locally.
|
|
13
|
+
* @param guard Candidate guard-like value.
|
|
14
|
+
* @param label Message prefix for TypeError diagnostics.
|
|
15
|
+
* @returns Valid schema stored in an own data slot.
|
|
16
|
+
* @throws TypeError when the receiver is not structurally a TypeSea guard.
|
|
17
|
+
* @details This helper is used by builders that accept guard-like values rather
|
|
18
|
+
* than constructed guard instances. The schema field is read by descriptor so a
|
|
19
|
+
* forged prototype cannot supply or mutate the schema after admission.
|
|
11
20
|
*/
|
|
12
21
|
export function readGuardSchema(guard, label) {
|
|
13
22
|
if (!isRecord(guard)) {
|
|
14
23
|
throw new TypeError(`${label} must be a TypeSea guard`);
|
|
15
24
|
}
|
|
16
|
-
const schema = guard
|
|
25
|
+
const schema = readOwnDataProperty(guard, "schema");
|
|
17
26
|
if (!isSchemaValue(schema)) {
|
|
18
27
|
throw new TypeError(`${label} must contain a valid TypeSea schema`);
|
|
19
28
|
}
|
|
20
29
|
return schema;
|
|
21
30
|
}
|
|
22
31
|
/**
|
|
23
|
-
* @brief
|
|
32
|
+
* @brief Check record.
|
|
33
|
+
* @details This helper keeps a local invariant explicit at the module boundary.
|
|
24
34
|
*/
|
|
25
35
|
export function isRecord(value) {
|
|
26
36
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
27
37
|
}
|
|
28
38
|
/**
|
|
29
|
-
* @brief
|
|
39
|
+
* @brief Accept an array before a caller performs local element validation.
|
|
40
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
41
|
+
* module boundary.
|
|
42
|
+
* @param value Candidate vector.
|
|
43
|
+
* @returns True when the value is an Array instance.
|
|
30
44
|
*/
|
|
31
45
|
export function isUnknownArray(value) {
|
|
32
46
|
return Array.isArray(value);
|
|
33
47
|
}
|
|
34
48
|
/**
|
|
35
|
-
* @brief
|
|
49
|
+
* @brief Linear membership for short builder-owned string vectors.
|
|
50
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
51
|
+
* module boundary.
|
|
52
|
+
* @param values Candidate set represented as an ordered vector.
|
|
53
|
+
* @param value String being searched.
|
|
54
|
+
* @returns True when the string is present.
|
|
36
55
|
*/
|
|
37
56
|
export function includesString(values, value) {
|
|
38
57
|
for (let index = 0; index < values.length; index += 1) {
|
|
@@ -43,14 +62,38 @@ export function includesString(values, value) {
|
|
|
43
62
|
return false;
|
|
44
63
|
}
|
|
45
64
|
/**
|
|
46
|
-
* @brief
|
|
65
|
+
* @brief Accept only the literal boolean success value from user predicates.
|
|
66
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
67
|
+
* module boundary.
|
|
68
|
+
* @param value Predicate return value.
|
|
69
|
+
* @returns True only for `true`.
|
|
47
70
|
*/
|
|
48
71
|
export function isStrictTrue(value) {
|
|
49
72
|
return value === true;
|
|
50
73
|
}
|
|
51
74
|
/**
|
|
52
|
-
* @brief
|
|
75
|
+
* @brief Check whether a value structurally exposes a TypeSea schema.
|
|
76
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
77
|
+
* module boundary.
|
|
78
|
+
* @param value Candidate guard-like object.
|
|
79
|
+
* @returns True when a valid schema is stored directly on the object.
|
|
53
80
|
*/
|
|
54
81
|
export function isGuardValue(value) {
|
|
55
|
-
return isRecord(value) && isSchemaValue(value
|
|
82
|
+
return isRecord(value) && isSchemaValue(readOwnDataProperty(value, "schema"));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @brief Read one own data property without running getters.
|
|
86
|
+
* @details This declaration records the local invariant that callers rely on after this
|
|
87
|
+
* module boundary.
|
|
88
|
+
* @param value Object being normalized.
|
|
89
|
+
* @param key Field name or symbol.
|
|
90
|
+
* @returns Stored field value, or undefined when the own data slot is absent.
|
|
91
|
+
*/
|
|
92
|
+
export function readOwnDataProperty(value, key) {
|
|
93
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
94
|
+
if (descriptor === undefined ||
|
|
95
|
+
!Object.prototype.hasOwnProperty.call(descriptor, "value")) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
return descriptor.value;
|
|
56
99
|
}
|
package/dist/ir/builder.d.ts
CHANGED
|
@@ -1,173 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file builder.ts
|
|
3
3
|
* @brief Dense graph builder with structural node interning.
|
|
4
|
+
* @details IR helpers preserve Sea-of-Nodes invariants before graphs cross optimizer,
|
|
5
|
+
* compiler, or public introspection boundaries.
|
|
4
6
|
*/
|
|
5
|
-
import
|
|
6
|
-
import type {
|
|
7
|
+
import { type ObjectModeTag } from "../kind/index.js";
|
|
8
|
+
import type { ArrayCheck, LiteralValue, Schema } from "../schema/index.js";
|
|
9
|
+
import type { Graph, NodeId, ObjectShapeEntry, UnionDispatchMask } from "./types.js";
|
|
7
10
|
/**
|
|
8
|
-
* @brief graph
|
|
9
|
-
* @details
|
|
10
|
-
*
|
|
11
|
+
* @brief Dense Sea-of-Nodes graph construction arena.
|
|
12
|
+
* @details The builder interns pure scalar nodes so later optimization passes see
|
|
13
|
+
* one canonical id for equivalent predicates. Composite nodes are deliberately
|
|
14
|
+
* appended instead: their embedded child graphs and schema payloads are owned
|
|
15
|
+
* values, and pointer-level interning would make aliasing harder to audit.
|
|
11
16
|
*/
|
|
12
17
|
export declare class GraphBuilder {
|
|
13
18
|
private readonly nodes;
|
|
14
19
|
private readonly hash;
|
|
15
|
-
/**
|
|
16
|
-
* @brief constructor.
|
|
17
|
-
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
18
|
-
*/
|
|
19
20
|
constructor();
|
|
20
|
-
/**
|
|
21
|
-
* @brief start.
|
|
22
|
-
*/
|
|
23
21
|
start(): NodeId;
|
|
24
|
-
/**
|
|
25
|
-
* @brief param.
|
|
26
|
-
*/
|
|
27
22
|
param(name: string): NodeId;
|
|
28
|
-
/**
|
|
29
|
-
* @brief constant.
|
|
30
|
-
*/
|
|
31
23
|
constant(value: LiteralValue): NodeId;
|
|
32
|
-
/**
|
|
33
|
-
* @brief get prop.
|
|
34
|
-
*/
|
|
35
24
|
getProp(object: NodeId, key: string): NodeId;
|
|
36
|
-
/**
|
|
37
|
-
* @brief is string.
|
|
38
|
-
*/
|
|
39
25
|
isString(value: NodeId): NodeId;
|
|
40
|
-
/**
|
|
41
|
-
* @brief is number.
|
|
42
|
-
*/
|
|
43
26
|
isNumber(value: NodeId): NodeId;
|
|
44
|
-
/**
|
|
45
|
-
* @brief is boolean.
|
|
46
|
-
*/
|
|
47
27
|
isBoolean(value: NodeId): NodeId;
|
|
48
|
-
/**
|
|
49
|
-
* @brief is big int.
|
|
50
|
-
*/
|
|
51
28
|
isBigInt(value: NodeId): NodeId;
|
|
52
|
-
/**
|
|
53
|
-
* @brief is symbol.
|
|
54
|
-
*/
|
|
55
29
|
isSymbol(value: NodeId): NodeId;
|
|
56
|
-
/**
|
|
57
|
-
* @brief is object.
|
|
58
|
-
*/
|
|
59
30
|
isObject(value: NodeId): NodeId;
|
|
60
|
-
/**
|
|
61
|
-
* @brief is array.
|
|
62
|
-
*/
|
|
63
31
|
isArray(value: NodeId): NodeId;
|
|
64
|
-
/**
|
|
65
|
-
* @brief is undefined.
|
|
66
|
-
*/
|
|
67
32
|
isUndefined(value: NodeId): NodeId;
|
|
68
|
-
/**
|
|
69
|
-
* @brief is null.
|
|
70
|
-
*/
|
|
71
33
|
isNull(value: NodeId): NodeId;
|
|
72
|
-
/**
|
|
73
|
-
* @brief is integer.
|
|
74
|
-
*/
|
|
75
34
|
isInteger(value: NodeId): NodeId;
|
|
76
|
-
/**
|
|
77
|
-
* @brief not.
|
|
78
|
-
*/
|
|
79
35
|
not(value: NodeId): NodeId;
|
|
80
|
-
/**
|
|
81
|
-
* @brief equals.
|
|
82
|
-
*/
|
|
83
36
|
equals(left: NodeId, right: NodeId): NodeId;
|
|
84
|
-
/**
|
|
85
|
-
* @brief gte.
|
|
86
|
-
*/
|
|
87
37
|
gte(left: NodeId, right: NodeId): NodeId;
|
|
88
|
-
/**
|
|
89
|
-
* @brief lte.
|
|
90
|
-
*/
|
|
91
38
|
lte(left: NodeId, right: NodeId): NodeId;
|
|
92
|
-
/**
|
|
93
|
-
* @brief string min.
|
|
94
|
-
*/
|
|
95
39
|
stringMin(value: NodeId, bound: number): NodeId;
|
|
96
|
-
/**
|
|
97
|
-
* @brief string max.
|
|
98
|
-
*/
|
|
99
40
|
stringMax(value: NodeId, bound: number): NodeId;
|
|
100
|
-
/**
|
|
101
|
-
* @brief regex.
|
|
102
|
-
*/
|
|
103
41
|
regex(value: NodeId, regex: RegExp, name: string): NodeId;
|
|
104
|
-
/**
|
|
105
|
-
* @brief has own.
|
|
106
|
-
*/
|
|
107
42
|
hasOwn(object: NodeId, key: string): NodeId;
|
|
108
|
-
/**
|
|
109
|
-
* @brief has own data.
|
|
110
|
-
*/
|
|
111
43
|
hasOwnData(object: NodeId, key: string): NodeId;
|
|
112
|
-
/**
|
|
113
|
-
* @brief strict keys.
|
|
114
|
-
*/
|
|
115
44
|
strictKeys(object: NodeId, keys: readonly string[]): NodeId;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
tupleItems(value: NodeId, items: readonly Schema[]): NodeId;
|
|
124
|
-
/**
|
|
125
|
-
* @brief record every.
|
|
126
|
-
*/
|
|
127
|
-
recordEvery(value: NodeId, item: Schema): NodeId;
|
|
128
|
-
/**
|
|
129
|
-
* @brief discriminant dispatch.
|
|
130
|
-
*/
|
|
131
|
-
discriminantDispatch(value: NodeId, key: string, literals: readonly string[], schemas: readonly Schema[]): NodeId;
|
|
132
|
-
/**
|
|
133
|
-
* @brief schema check.
|
|
134
|
-
*/
|
|
45
|
+
arrayEvery(value: NodeId, item: Schema, checks: readonly ArrayCheck[], itemGraph: Graph): NodeId;
|
|
46
|
+
tupleItems(value: NodeId, items: readonly Schema[], itemGraphs: readonly Graph[]): NodeId;
|
|
47
|
+
recordEvery(value: NodeId, item: Schema, itemGraph: Graph): NodeId;
|
|
48
|
+
discriminantDispatch(value: NodeId, key: string, literals: readonly string[], schemas: readonly Schema[], graphs: readonly Graph[]): NodeId;
|
|
49
|
+
objectShape(value: NodeId, entries: readonly ObjectShapeEntry[], keys: readonly string[], mode: ObjectModeTag, catchall: Schema | undefined, catchallGraph: Graph | undefined): NodeId;
|
|
50
|
+
unionDispatch(value: NodeId, options: readonly Schema[], graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
|
|
51
|
+
primitiveUnion(value: NodeId, graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
|
|
135
52
|
schemaCheck(value: NodeId, schema: Schema): NodeId;
|
|
136
|
-
/**
|
|
137
|
-
* @brief and.
|
|
138
|
-
*/
|
|
139
53
|
and(values: readonly NodeId[]): NodeId;
|
|
140
|
-
/**
|
|
141
|
-
* @brief or.
|
|
142
|
-
*/
|
|
143
54
|
or(values: readonly NodeId[]): NodeId;
|
|
144
|
-
/**
|
|
145
|
-
* @brief ret.
|
|
146
|
-
*/
|
|
147
55
|
ret(control: NodeId, value: NodeId): NodeId;
|
|
148
|
-
/**
|
|
149
|
-
* @brief finish.
|
|
150
|
-
*/
|
|
151
56
|
finish(entry: NodeId, result: NodeId): Graph;
|
|
152
|
-
/**
|
|
153
|
-
* @brief unary.
|
|
154
|
-
*/
|
|
155
57
|
private unary;
|
|
156
|
-
/**
|
|
157
|
-
* @brief numeric.
|
|
158
|
-
*/
|
|
159
58
|
private numeric;
|
|
160
|
-
/**
|
|
161
|
-
* @brief string bound.
|
|
162
|
-
*/
|
|
163
59
|
private stringBound;
|
|
164
|
-
/**
|
|
165
|
-
* @brief intern.
|
|
166
|
-
*/
|
|
167
60
|
private intern;
|
|
168
|
-
/**
|
|
169
|
-
* @brief push.
|
|
170
|
-
*/
|
|
171
61
|
private push;
|
|
172
62
|
}
|
|
173
63
|
//# sourceMappingURL=builder.d.ts.map
|
package/dist/ir/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}
|