typesea 0.1.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 +9 -0
- package/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/adapters/index.d.ts +152 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +396 -0
- package/dist/aot/index.d.ts +33 -0
- package/dist/aot/index.d.ts.map +1 -0
- package/dist/aot/index.js +295 -0
- package/dist/async/index.d.ts +111 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/index.js +221 -0
- package/dist/builders/composite.d.ts +31 -0
- package/dist/builders/composite.d.ts.map +1 -0
- package/dist/builders/composite.js +165 -0
- package/dist/builders/index.d.ts +11 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/index.js +9 -0
- package/dist/builders/modifier.d.ts +26 -0
- package/dist/builders/modifier.d.ts.map +1 -0
- package/dist/builders/modifier.js +67 -0
- package/dist/builders/object/guard.d.ts +62 -0
- package/dist/builders/object/guard.d.ts.map +1 -0
- package/dist/builders/object/guard.js +113 -0
- package/dist/builders/object/index.d.ts +7 -0
- package/dist/builders/object/index.d.ts.map +1 -0
- package/dist/builders/object/index.js +5 -0
- package/dist/builders/object/schema.d.ts +44 -0
- package/dist/builders/object/schema.d.ts.map +1 -0
- package/dist/builders/object/schema.js +257 -0
- package/dist/builders/object/types.d.ts +63 -0
- package/dist/builders/object/types.d.ts.map +1 -0
- package/dist/builders/object/types.js +5 -0
- package/dist/builders/scalar.d.ts +39 -0
- package/dist/builders/scalar.d.ts.map +1 -0
- package/dist/builders/scalar.js +63 -0
- package/dist/builders/table.d.ts +53 -0
- package/dist/builders/table.d.ts.map +1 -0
- package/dist/builders/table.js +48 -0
- package/dist/builders/types.d.ts +26 -0
- package/dist/builders/types.d.ts.map +1 -0
- package/dist/builders/types.js +5 -0
- package/dist/compile/check-composite.d.ts +34 -0
- package/dist/compile/check-composite.d.ts.map +1 -0
- package/dist/compile/check-composite.js +117 -0
- package/dist/compile/check-scalar.d.ts +24 -0
- package/dist/compile/check-scalar.d.ts.map +1 -0
- package/dist/compile/check-scalar.js +73 -0
- package/dist/compile/check.d.ts +15 -0
- package/dist/compile/check.d.ts.map +1 -0
- package/dist/compile/check.js +98 -0
- package/dist/compile/context.d.ts +35 -0
- package/dist/compile/context.d.ts.map +1 -0
- package/dist/compile/context.js +72 -0
- package/dist/compile/graph-predicate.d.ts +19 -0
- package/dist/compile/graph-predicate.d.ts.map +1 -0
- package/dist/compile/graph-predicate.js +460 -0
- package/dist/compile/guard.d.ts +41 -0
- package/dist/compile/guard.d.ts.map +1 -0
- package/dist/compile/guard.js +180 -0
- package/dist/compile/index.d.ts +8 -0
- package/dist/compile/index.d.ts.map +1 -0
- package/dist/compile/index.js +6 -0
- package/dist/compile/issue.d.ts +18 -0
- package/dist/compile/issue.d.ts.map +1 -0
- package/dist/compile/issue.js +28 -0
- package/dist/compile/names.d.ts +16 -0
- package/dist/compile/names.d.ts.map +1 -0
- package/dist/compile/names.js +82 -0
- package/dist/compile/predicate.d.ts +23 -0
- package/dist/compile/predicate.d.ts.map +1 -0
- package/dist/compile/predicate.js +317 -0
- package/dist/compile/runtime.d.ts +55 -0
- package/dist/compile/runtime.d.ts.map +1 -0
- package/dist/compile/runtime.js +63 -0
- package/dist/compile/source.d.ts +11 -0
- package/dist/compile/source.d.ts.map +1 -0
- package/dist/compile/source.js +51 -0
- package/dist/compile/types.d.ts +52 -0
- package/dist/compile/types.d.ts.map +1 -0
- package/dist/compile/types.js +5 -0
- package/dist/decoder/index.d.ts +106 -0
- package/dist/decoder/index.d.ts.map +1 -0
- package/dist/decoder/index.js +262 -0
- package/dist/evaluate/check-composite.d.ts +39 -0
- package/dist/evaluate/check-composite.d.ts.map +1 -0
- package/dist/evaluate/check-composite.js +184 -0
- package/dist/evaluate/check-scalar.d.ts +20 -0
- package/dist/evaluate/check-scalar.d.ts.map +1 -0
- package/dist/evaluate/check-scalar.js +81 -0
- package/dist/evaluate/check.d.ts +11 -0
- package/dist/evaluate/check.d.ts.map +1 -0
- package/dist/evaluate/check.js +126 -0
- package/dist/evaluate/index.d.ts +7 -0
- package/dist/evaluate/index.d.ts.map +1 -0
- package/dist/evaluate/index.js +6 -0
- package/dist/evaluate/issue.d.ts +10 -0
- package/dist/evaluate/issue.d.ts.map +1 -0
- package/dist/evaluate/issue.js +11 -0
- package/dist/evaluate/predicate.d.ts +26 -0
- package/dist/evaluate/predicate.d.ts.map +1 -0
- package/dist/evaluate/predicate.js +37 -0
- package/dist/evaluate/shared.d.ts +59 -0
- package/dist/evaluate/shared.d.ts.map +1 -0
- package/dist/evaluate/shared.js +96 -0
- package/dist/evaluate/state.d.ts +65 -0
- package/dist/evaluate/state.d.ts.map +1 -0
- package/dist/evaluate/state.js +66 -0
- package/dist/guard/base.d.ts +72 -0
- package/dist/guard/base.d.ts.map +1 -0
- package/dist/guard/base.js +136 -0
- package/dist/guard/error.d.ts +19 -0
- package/dist/guard/error.d.ts.map +1 -0
- package/dist/guard/error.js +22 -0
- package/dist/guard/index.d.ts +10 -0
- package/dist/guard/index.d.ts.map +1 -0
- package/dist/guard/index.js +8 -0
- package/dist/guard/number.d.ts +32 -0
- package/dist/guard/number.d.ts.map +1 -0
- package/dist/guard/number.js +71 -0
- package/dist/guard/props.d.ts +18 -0
- package/dist/guard/props.d.ts.map +1 -0
- package/dist/guard/props.js +35 -0
- package/dist/guard/read.d.ts +42 -0
- package/dist/guard/read.d.ts.map +1 -0
- package/dist/guard/read.js +114 -0
- package/dist/guard/registry.d.ts +15 -0
- package/dist/guard/registry.d.ts.map +1 -0
- package/dist/guard/registry.js +21 -0
- package/dist/guard/string.d.ts +36 -0
- package/dist/guard/string.d.ts.map +1 -0
- package/dist/guard/string.js +95 -0
- package/dist/guard/types.d.ts +103 -0
- package/dist/guard/types.d.ts.map +1 -0
- package/dist/guard/types.js +5 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/internal/index.d.ts +34 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +56 -0
- package/dist/ir/builder.d.ts +173 -0
- package/dist/ir/builder.d.ts.map +1 -0
- package/dist/ir/builder.js +481 -0
- package/dist/ir/freeze.d.ts +10 -0
- package/dist/ir/freeze.d.ts.map +1 -0
- package/dist/ir/freeze.js +102 -0
- package/dist/ir/index.d.ts +9 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +7 -0
- package/dist/ir/regexp.d.ts +6 -0
- package/dist/ir/regexp.d.ts.map +1 -0
- package/dist/ir/regexp.js +12 -0
- package/dist/ir/types.d.ts +215 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +5 -0
- package/dist/ir/validate.d.ts +10 -0
- package/dist/ir/validate.d.ts.map +1 -0
- package/dist/ir/validate.js +271 -0
- package/dist/issue/index.d.ts +44 -0
- package/dist/issue/index.d.ts.map +1 -0
- package/dist/issue/index.js +152 -0
- package/dist/json-schema/emit-combinator.d.ts +28 -0
- package/dist/json-schema/emit-combinator.d.ts.map +1 -0
- package/dist/json-schema/emit-combinator.js +96 -0
- package/dist/json-schema/emit-composite.d.ts +28 -0
- package/dist/json-schema/emit-composite.d.ts.map +1 -0
- package/dist/json-schema/emit-composite.js +127 -0
- package/dist/json-schema/emit-scalar.d.ts +25 -0
- package/dist/json-schema/emit-scalar.d.ts.map +1 -0
- package/dist/json-schema/emit-scalar.js +104 -0
- package/dist/json-schema/emit-types.d.ts +12 -0
- package/dist/json-schema/emit-types.d.ts.map +1 -0
- package/dist/json-schema/emit-types.js +5 -0
- package/dist/json-schema/emit.d.ts +12 -0
- package/dist/json-schema/emit.d.ts.map +1 -0
- package/dist/json-schema/emit.js +62 -0
- package/dist/json-schema/freeze.d.ts +14 -0
- package/dist/json-schema/freeze.d.ts.map +1 -0
- package/dist/json-schema/freeze.js +114 -0
- package/dist/json-schema/index.d.ts +20 -0
- package/dist/json-schema/index.d.ts.map +1 -0
- package/dist/json-schema/index.js +76 -0
- package/dist/json-schema/issue.d.ts +11 -0
- package/dist/json-schema/issue.d.ts.map +1 -0
- package/dist/json-schema/issue.js +14 -0
- package/dist/json-schema/read.d.ts +29 -0
- package/dist/json-schema/read.d.ts.map +1 -0
- package/dist/json-schema/read.js +87 -0
- package/dist/json-schema/types.d.ts +106 -0
- package/dist/json-schema/types.d.ts.map +1 -0
- package/dist/json-schema/types.js +5 -0
- package/dist/kind/index.d.ts +119 -0
- package/dist/kind/index.d.ts.map +1 -0
- package/dist/kind/index.js +94 -0
- package/dist/lower/index.d.ts +7 -0
- package/dist/lower/index.d.ts.map +1 -0
- package/dist/lower/index.js +199 -0
- package/dist/message/index.d.ts +51 -0
- package/dist/message/index.d.ts.map +1 -0
- package/dist/message/index.js +269 -0
- package/dist/optimize/compact.d.ts +10 -0
- package/dist/optimize/compact.d.ts.map +1 -0
- package/dist/optimize/compact.js +60 -0
- package/dist/optimize/fold-boolean.d.ts +15 -0
- package/dist/optimize/fold-boolean.d.ts.map +1 -0
- package/dist/optimize/fold-boolean.js +75 -0
- package/dist/optimize/fold-common.d.ts +45 -0
- package/dist/optimize/fold-common.d.ts.map +1 -0
- package/dist/optimize/fold-common.js +71 -0
- package/dist/optimize/fold-scalar.d.ts +59 -0
- package/dist/optimize/fold-scalar.d.ts.map +1 -0
- package/dist/optimize/fold-scalar.js +174 -0
- package/dist/optimize/fold.d.ts +10 -0
- package/dist/optimize/fold.d.ts.map +1 -0
- package/dist/optimize/fold.js +103 -0
- package/dist/optimize/index.d.ts +10 -0
- package/dist/optimize/index.d.ts.map +1 -0
- package/dist/optimize/index.js +23 -0
- package/dist/optimize/map-node.d.ts +21 -0
- package/dist/optimize/map-node.d.ts.map +1 -0
- package/dist/optimize/map-node.js +222 -0
- package/dist/optimize/remap.d.ts +30 -0
- package/dist/optimize/remap.d.ts.map +1 -0
- package/dist/optimize/remap.js +46 -0
- package/dist/optimize/rewrite.d.ts +22 -0
- package/dist/optimize/rewrite.d.ts.map +1 -0
- package/dist/optimize/rewrite.js +34 -0
- package/dist/plan/cache.d.ts +20 -0
- package/dist/plan/cache.d.ts.map +1 -0
- package/dist/plan/cache.js +122 -0
- package/dist/plan/index.d.ts +8 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +6 -0
- package/dist/plan/predicate.d.ts +27 -0
- package/dist/plan/predicate.d.ts.map +1 -0
- package/dist/plan/predicate.js +415 -0
- package/dist/plan/schema-predicate.d.ts +15 -0
- package/dist/plan/schema-predicate.d.ts.map +1 -0
- package/dist/plan/schema-predicate.js +277 -0
- package/dist/plan/types.d.ts +18 -0
- package/dist/plan/types.d.ts.map +1 -0
- package/dist/plan/types.js +5 -0
- package/dist/result/index.d.ts +27 -0
- package/dist/result/index.d.ts.map +1 -0
- package/dist/result/index.js +20 -0
- package/dist/schema/common.d.ts +30 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +102 -0
- package/dist/schema/freeze.d.ts +10 -0
- package/dist/schema/freeze.d.ts.map +1 -0
- package/dist/schema/freeze.js +163 -0
- package/dist/schema/index.d.ts +11 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +9 -0
- package/dist/schema/lazy.d.ts +10 -0
- package/dist/schema/lazy.d.ts.map +1 -0
- package/dist/schema/lazy.js +25 -0
- package/dist/schema/literal.d.ts +10 -0
- package/dist/schema/literal.d.ts.map +1 -0
- package/dist/schema/literal.js +17 -0
- package/dist/schema/types.d.ts +243 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +9 -0
- package/dist/schema/validate.d.ts +10 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +268 -0
- package/docs/api.md +301 -0
- package/docs/engine-notes.md +153 -0
- package/docs/index.html +1242 -0
- package/package.json +68 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file builder.ts
|
|
3
|
+
* @brief Dense graph builder with structural node interning.
|
|
4
|
+
*/
|
|
5
|
+
import type { LiteralValue, Schema } from "../schema/index.js";
|
|
6
|
+
import type { Graph, NodeId } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* @brief graph builder.
|
|
9
|
+
* @details Owns its state directly; methods expose receiver checks and explicit result flow.
|
|
10
|
+
* @invariant Construction leaves the instance in a fully usable state before it escapes.
|
|
11
|
+
*/
|
|
12
|
+
export declare class GraphBuilder {
|
|
13
|
+
private readonly nodes;
|
|
14
|
+
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
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* @brief start.
|
|
22
|
+
*/
|
|
23
|
+
start(): NodeId;
|
|
24
|
+
/**
|
|
25
|
+
* @brief param.
|
|
26
|
+
*/
|
|
27
|
+
param(name: string): NodeId;
|
|
28
|
+
/**
|
|
29
|
+
* @brief constant.
|
|
30
|
+
*/
|
|
31
|
+
constant(value: LiteralValue): NodeId;
|
|
32
|
+
/**
|
|
33
|
+
* @brief get prop.
|
|
34
|
+
*/
|
|
35
|
+
getProp(object: NodeId, key: string): NodeId;
|
|
36
|
+
/**
|
|
37
|
+
* @brief is string.
|
|
38
|
+
*/
|
|
39
|
+
isString(value: NodeId): NodeId;
|
|
40
|
+
/**
|
|
41
|
+
* @brief is number.
|
|
42
|
+
*/
|
|
43
|
+
isNumber(value: NodeId): NodeId;
|
|
44
|
+
/**
|
|
45
|
+
* @brief is boolean.
|
|
46
|
+
*/
|
|
47
|
+
isBoolean(value: NodeId): NodeId;
|
|
48
|
+
/**
|
|
49
|
+
* @brief is big int.
|
|
50
|
+
*/
|
|
51
|
+
isBigInt(value: NodeId): NodeId;
|
|
52
|
+
/**
|
|
53
|
+
* @brief is symbol.
|
|
54
|
+
*/
|
|
55
|
+
isSymbol(value: NodeId): NodeId;
|
|
56
|
+
/**
|
|
57
|
+
* @brief is object.
|
|
58
|
+
*/
|
|
59
|
+
isObject(value: NodeId): NodeId;
|
|
60
|
+
/**
|
|
61
|
+
* @brief is array.
|
|
62
|
+
*/
|
|
63
|
+
isArray(value: NodeId): NodeId;
|
|
64
|
+
/**
|
|
65
|
+
* @brief is undefined.
|
|
66
|
+
*/
|
|
67
|
+
isUndefined(value: NodeId): NodeId;
|
|
68
|
+
/**
|
|
69
|
+
* @brief is null.
|
|
70
|
+
*/
|
|
71
|
+
isNull(value: NodeId): NodeId;
|
|
72
|
+
/**
|
|
73
|
+
* @brief is integer.
|
|
74
|
+
*/
|
|
75
|
+
isInteger(value: NodeId): NodeId;
|
|
76
|
+
/**
|
|
77
|
+
* @brief not.
|
|
78
|
+
*/
|
|
79
|
+
not(value: NodeId): NodeId;
|
|
80
|
+
/**
|
|
81
|
+
* @brief equals.
|
|
82
|
+
*/
|
|
83
|
+
equals(left: NodeId, right: NodeId): NodeId;
|
|
84
|
+
/**
|
|
85
|
+
* @brief gte.
|
|
86
|
+
*/
|
|
87
|
+
gte(left: NodeId, right: NodeId): NodeId;
|
|
88
|
+
/**
|
|
89
|
+
* @brief lte.
|
|
90
|
+
*/
|
|
91
|
+
lte(left: NodeId, right: NodeId): NodeId;
|
|
92
|
+
/**
|
|
93
|
+
* @brief string min.
|
|
94
|
+
*/
|
|
95
|
+
stringMin(value: NodeId, bound: number): NodeId;
|
|
96
|
+
/**
|
|
97
|
+
* @brief string max.
|
|
98
|
+
*/
|
|
99
|
+
stringMax(value: NodeId, bound: number): NodeId;
|
|
100
|
+
/**
|
|
101
|
+
* @brief regex.
|
|
102
|
+
*/
|
|
103
|
+
regex(value: NodeId, regex: RegExp, name: string): NodeId;
|
|
104
|
+
/**
|
|
105
|
+
* @brief has own.
|
|
106
|
+
*/
|
|
107
|
+
hasOwn(object: NodeId, key: string): NodeId;
|
|
108
|
+
/**
|
|
109
|
+
* @brief has own data.
|
|
110
|
+
*/
|
|
111
|
+
hasOwnData(object: NodeId, key: string): NodeId;
|
|
112
|
+
/**
|
|
113
|
+
* @brief strict keys.
|
|
114
|
+
*/
|
|
115
|
+
strictKeys(object: NodeId, keys: readonly string[]): NodeId;
|
|
116
|
+
/**
|
|
117
|
+
* @brief array every.
|
|
118
|
+
*/
|
|
119
|
+
arrayEvery(value: NodeId, item: Schema): NodeId;
|
|
120
|
+
/**
|
|
121
|
+
* @brief tuple items.
|
|
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
|
+
*/
|
|
135
|
+
schemaCheck(value: NodeId, schema: Schema): NodeId;
|
|
136
|
+
/**
|
|
137
|
+
* @brief and.
|
|
138
|
+
*/
|
|
139
|
+
and(values: readonly NodeId[]): NodeId;
|
|
140
|
+
/**
|
|
141
|
+
* @brief or.
|
|
142
|
+
*/
|
|
143
|
+
or(values: readonly NodeId[]): NodeId;
|
|
144
|
+
/**
|
|
145
|
+
* @brief ret.
|
|
146
|
+
*/
|
|
147
|
+
ret(control: NodeId, value: NodeId): NodeId;
|
|
148
|
+
/**
|
|
149
|
+
* @brief finish.
|
|
150
|
+
*/
|
|
151
|
+
finish(entry: NodeId, result: NodeId): Graph;
|
|
152
|
+
/**
|
|
153
|
+
* @brief unary.
|
|
154
|
+
*/
|
|
155
|
+
private unary;
|
|
156
|
+
/**
|
|
157
|
+
* @brief numeric.
|
|
158
|
+
*/
|
|
159
|
+
private numeric;
|
|
160
|
+
/**
|
|
161
|
+
* @brief string bound.
|
|
162
|
+
*/
|
|
163
|
+
private stringBound;
|
|
164
|
+
/**
|
|
165
|
+
* @brief intern.
|
|
166
|
+
*/
|
|
167
|
+
private intern;
|
|
168
|
+
/**
|
|
169
|
+
* @brief push.
|
|
170
|
+
*/
|
|
171
|
+
private push;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file builder.ts
|
|
3
|
+
* @brief Dense graph builder with structural node interning.
|
|
4
|
+
*/
|
|
5
|
+
import { NodeTag } from "../kind/index.js";
|
|
6
|
+
import { freezeGraph } from "./freeze.js";
|
|
7
|
+
import { isPlainRegExp } from "./regexp.js";
|
|
8
|
+
/**
|
|
9
|
+
* @brief graph builder.
|
|
10
|
+
* @details Owns its state directly; methods expose receiver checks and explicit result flow.
|
|
11
|
+
* @invariant Construction leaves the instance in a fully usable state before it escapes.
|
|
12
|
+
*/
|
|
13
|
+
export class GraphBuilder {
|
|
14
|
+
nodes;
|
|
15
|
+
hash;
|
|
16
|
+
/**
|
|
17
|
+
* @brief constructor.
|
|
18
|
+
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
19
|
+
*/
|
|
20
|
+
constructor() {
|
|
21
|
+
this.nodes = [];
|
|
22
|
+
this.hash = new Map();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @brief start.
|
|
26
|
+
*/
|
|
27
|
+
start() {
|
|
28
|
+
return this.intern("start", (id) => ({
|
|
29
|
+
id,
|
|
30
|
+
tag: NodeTag.Start,
|
|
31
|
+
deps: []
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @brief param.
|
|
36
|
+
*/
|
|
37
|
+
param(name) {
|
|
38
|
+
return this.intern(`param:${name}`, (id) => ({
|
|
39
|
+
id,
|
|
40
|
+
tag: NodeTag.Param,
|
|
41
|
+
deps: [],
|
|
42
|
+
name
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @brief constant.
|
|
47
|
+
*/
|
|
48
|
+
constant(value) {
|
|
49
|
+
if (typeof value === "symbol") {
|
|
50
|
+
return this.push((id) => ({
|
|
51
|
+
id,
|
|
52
|
+
tag: NodeTag.Const,
|
|
53
|
+
deps: [],
|
|
54
|
+
value
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
const key = `const:${literalKey(value)}`;
|
|
58
|
+
return this.intern(key, (id) => ({
|
|
59
|
+
id,
|
|
60
|
+
tag: NodeTag.Const,
|
|
61
|
+
deps: [],
|
|
62
|
+
value
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @brief get prop.
|
|
67
|
+
*/
|
|
68
|
+
getProp(object, key) {
|
|
69
|
+
const hashKey = `getProp:${String(object)}:${key}`;
|
|
70
|
+
return this.intern(hashKey, (id) => ({
|
|
71
|
+
id,
|
|
72
|
+
tag: NodeTag.GetProp,
|
|
73
|
+
deps: [object],
|
|
74
|
+
object,
|
|
75
|
+
key
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @brief is string.
|
|
80
|
+
*/
|
|
81
|
+
isString(value) {
|
|
82
|
+
return this.unary(NodeTag.IsString, value);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @brief is number.
|
|
86
|
+
*/
|
|
87
|
+
isNumber(value) {
|
|
88
|
+
return this.unary(NodeTag.IsNumber, value);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @brief is boolean.
|
|
92
|
+
*/
|
|
93
|
+
isBoolean(value) {
|
|
94
|
+
return this.unary(NodeTag.IsBoolean, value);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @brief is big int.
|
|
98
|
+
*/
|
|
99
|
+
isBigInt(value) {
|
|
100
|
+
return this.unary(NodeTag.IsBigInt, value);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @brief is symbol.
|
|
104
|
+
*/
|
|
105
|
+
isSymbol(value) {
|
|
106
|
+
return this.unary(NodeTag.IsSymbol, value);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @brief is object.
|
|
110
|
+
*/
|
|
111
|
+
isObject(value) {
|
|
112
|
+
return this.unary(NodeTag.IsObject, value);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @brief is array.
|
|
116
|
+
*/
|
|
117
|
+
isArray(value) {
|
|
118
|
+
return this.unary(NodeTag.IsArray, value);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @brief is undefined.
|
|
122
|
+
*/
|
|
123
|
+
isUndefined(value) {
|
|
124
|
+
return this.unary(NodeTag.IsUndefined, value);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @brief is null.
|
|
128
|
+
*/
|
|
129
|
+
isNull(value) {
|
|
130
|
+
return this.unary(NodeTag.IsNull, value);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @brief is integer.
|
|
134
|
+
*/
|
|
135
|
+
isInteger(value) {
|
|
136
|
+
return this.unary(NodeTag.IsInteger, value);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* @brief not.
|
|
140
|
+
*/
|
|
141
|
+
not(value) {
|
|
142
|
+
return this.unary(NodeTag.Not, value);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @brief equals.
|
|
146
|
+
*/
|
|
147
|
+
equals(left, right) {
|
|
148
|
+
const key = `eq:${String(left)}:${String(right)}`;
|
|
149
|
+
return this.intern(key, (id) => ({
|
|
150
|
+
id,
|
|
151
|
+
tag: NodeTag.Equals,
|
|
152
|
+
deps: [left, right],
|
|
153
|
+
left,
|
|
154
|
+
right
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* @brief gte.
|
|
159
|
+
*/
|
|
160
|
+
gte(left, right) {
|
|
161
|
+
return this.numeric(NodeTag.Gte, left, right);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* @brief lte.
|
|
165
|
+
*/
|
|
166
|
+
lte(left, right) {
|
|
167
|
+
return this.numeric(NodeTag.Lte, left, right);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @brief string min.
|
|
171
|
+
*/
|
|
172
|
+
stringMin(value, bound) {
|
|
173
|
+
return this.stringBound(NodeTag.StringMin, value, bound);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @brief string max.
|
|
177
|
+
*/
|
|
178
|
+
stringMax(value, bound) {
|
|
179
|
+
return this.stringBound(NodeTag.StringMax, value, bound);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* @brief regex.
|
|
183
|
+
*/
|
|
184
|
+
regex(value, regex, name) {
|
|
185
|
+
if (!isPlainRegExp(regex)) {
|
|
186
|
+
throw new TypeError("regex node must use a plain RegExp");
|
|
187
|
+
}
|
|
188
|
+
if (typeof name !== "string") {
|
|
189
|
+
throw new TypeError("regex node name must be a string");
|
|
190
|
+
}
|
|
191
|
+
const key = makeRegexInternKey(value, regex.source, regex.flags, name);
|
|
192
|
+
return this.intern(key, (id) => ({
|
|
193
|
+
id,
|
|
194
|
+
tag: NodeTag.Regex,
|
|
195
|
+
deps: [value],
|
|
196
|
+
value,
|
|
197
|
+
regex,
|
|
198
|
+
name
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* @brief has own.
|
|
203
|
+
*/
|
|
204
|
+
hasOwn(object, key) {
|
|
205
|
+
const hashKey = `hasOwn:${String(object)}:${key}`;
|
|
206
|
+
return this.intern(hashKey, (id) => ({
|
|
207
|
+
id,
|
|
208
|
+
tag: NodeTag.HasOwn,
|
|
209
|
+
deps: [object],
|
|
210
|
+
object,
|
|
211
|
+
key
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* @brief has own data.
|
|
216
|
+
*/
|
|
217
|
+
hasOwnData(object, key) {
|
|
218
|
+
const hashKey = `hasOwnData:${String(object)}:${key}`;
|
|
219
|
+
return this.intern(hashKey, (id) => ({
|
|
220
|
+
id,
|
|
221
|
+
tag: NodeTag.HasOwnData,
|
|
222
|
+
deps: [object],
|
|
223
|
+
object,
|
|
224
|
+
key
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* @brief strict keys.
|
|
229
|
+
*/
|
|
230
|
+
strictKeys(object, keys) {
|
|
231
|
+
const hashKey = `strictKeys:${String(object)}:${JSON.stringify(keys)}`;
|
|
232
|
+
return this.intern(hashKey, (id) => ({
|
|
233
|
+
id,
|
|
234
|
+
tag: NodeTag.StrictKeys,
|
|
235
|
+
deps: [object],
|
|
236
|
+
object,
|
|
237
|
+
keys
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* @brief array every.
|
|
242
|
+
*/
|
|
243
|
+
arrayEvery(value, item) {
|
|
244
|
+
return this.push((id) => ({
|
|
245
|
+
id,
|
|
246
|
+
tag: NodeTag.ArrayEvery,
|
|
247
|
+
deps: [value],
|
|
248
|
+
value,
|
|
249
|
+
item
|
|
250
|
+
}));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* @brief tuple items.
|
|
254
|
+
*/
|
|
255
|
+
tupleItems(value, items) {
|
|
256
|
+
return this.push((id) => ({
|
|
257
|
+
id,
|
|
258
|
+
tag: NodeTag.TupleItems,
|
|
259
|
+
deps: [value],
|
|
260
|
+
value,
|
|
261
|
+
items
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* @brief record every.
|
|
266
|
+
*/
|
|
267
|
+
recordEvery(value, item) {
|
|
268
|
+
return this.push((id) => ({
|
|
269
|
+
id,
|
|
270
|
+
tag: NodeTag.RecordEvery,
|
|
271
|
+
deps: [value],
|
|
272
|
+
value,
|
|
273
|
+
item
|
|
274
|
+
}));
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* @brief discriminant dispatch.
|
|
278
|
+
*/
|
|
279
|
+
discriminantDispatch(value, key, literals, schemas) {
|
|
280
|
+
return this.push((id) => ({
|
|
281
|
+
id,
|
|
282
|
+
tag: NodeTag.DiscriminantDispatch,
|
|
283
|
+
deps: [value],
|
|
284
|
+
value,
|
|
285
|
+
key,
|
|
286
|
+
literals,
|
|
287
|
+
schemas,
|
|
288
|
+
lookup: makeDiscriminantLookup(literals)
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* @brief schema check.
|
|
293
|
+
*/
|
|
294
|
+
schemaCheck(value, schema) {
|
|
295
|
+
return this.push((id) => ({
|
|
296
|
+
id,
|
|
297
|
+
tag: NodeTag.SchemaCheck,
|
|
298
|
+
deps: [value],
|
|
299
|
+
value,
|
|
300
|
+
schema
|
|
301
|
+
}));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* @brief and.
|
|
305
|
+
*/
|
|
306
|
+
and(values) {
|
|
307
|
+
const first = values[0];
|
|
308
|
+
if (first === undefined) {
|
|
309
|
+
return this.constant(true);
|
|
310
|
+
}
|
|
311
|
+
if (values.length === 1) {
|
|
312
|
+
return first;
|
|
313
|
+
}
|
|
314
|
+
const key = `and:${values.join(",")}`;
|
|
315
|
+
return this.intern(key, (id) => ({
|
|
316
|
+
id,
|
|
317
|
+
tag: NodeTag.And,
|
|
318
|
+
deps: values,
|
|
319
|
+
values
|
|
320
|
+
}));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* @brief or.
|
|
324
|
+
*/
|
|
325
|
+
or(values) {
|
|
326
|
+
const first = values[0];
|
|
327
|
+
if (first === undefined) {
|
|
328
|
+
return this.constant(false);
|
|
329
|
+
}
|
|
330
|
+
if (values.length === 1) {
|
|
331
|
+
return first;
|
|
332
|
+
}
|
|
333
|
+
const key = `or:${values.join(",")}`;
|
|
334
|
+
return this.intern(key, (id) => ({
|
|
335
|
+
id,
|
|
336
|
+
tag: NodeTag.Or,
|
|
337
|
+
deps: values,
|
|
338
|
+
values
|
|
339
|
+
}));
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* @brief ret.
|
|
343
|
+
*/
|
|
344
|
+
ret(control, value) {
|
|
345
|
+
return this.push((id) => ({
|
|
346
|
+
id,
|
|
347
|
+
tag: NodeTag.Return,
|
|
348
|
+
deps: [control, value],
|
|
349
|
+
control,
|
|
350
|
+
value
|
|
351
|
+
}));
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* @brief finish.
|
|
355
|
+
*/
|
|
356
|
+
finish(entry, result) {
|
|
357
|
+
return freezeGraph({
|
|
358
|
+
nodes: this.nodes.slice(),
|
|
359
|
+
entry,
|
|
360
|
+
result
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* @brief unary.
|
|
365
|
+
*/
|
|
366
|
+
unary(tag, value) {
|
|
367
|
+
const key = `unary:${String(tag)}:${String(value)}`;
|
|
368
|
+
return this.intern(key, (id) => ({
|
|
369
|
+
id,
|
|
370
|
+
tag,
|
|
371
|
+
deps: [value],
|
|
372
|
+
value
|
|
373
|
+
}));
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* @brief numeric.
|
|
377
|
+
*/
|
|
378
|
+
numeric(tag, left, right) {
|
|
379
|
+
const key = `numeric:${String(tag)}:${String(left)}:${String(right)}`;
|
|
380
|
+
return this.intern(key, (id) => ({
|
|
381
|
+
id,
|
|
382
|
+
tag,
|
|
383
|
+
deps: [left, right],
|
|
384
|
+
left,
|
|
385
|
+
right
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* @brief string bound.
|
|
390
|
+
*/
|
|
391
|
+
stringBound(tag, value, bound) {
|
|
392
|
+
const key = `stringBound:${String(tag)}:${String(value)}:${String(bound)}`;
|
|
393
|
+
return this.intern(key, (id) => ({
|
|
394
|
+
id,
|
|
395
|
+
tag,
|
|
396
|
+
deps: [value],
|
|
397
|
+
value,
|
|
398
|
+
bound
|
|
399
|
+
}));
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* @brief intern.
|
|
403
|
+
*/
|
|
404
|
+
intern(key, make) {
|
|
405
|
+
const cached = this.hash.get(key);
|
|
406
|
+
if (cached !== undefined) {
|
|
407
|
+
return cached;
|
|
408
|
+
}
|
|
409
|
+
const id = this.nodes.length;
|
|
410
|
+
const node = make(id);
|
|
411
|
+
this.nodes.push(node);
|
|
412
|
+
this.hash.set(key, id);
|
|
413
|
+
return id;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* @brief push.
|
|
417
|
+
*/
|
|
418
|
+
push(make) {
|
|
419
|
+
const id = this.nodes.length;
|
|
420
|
+
const node = make(id);
|
|
421
|
+
this.nodes.push(node);
|
|
422
|
+
return id;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* @brief make regex intern key.
|
|
427
|
+
* @details Encodes each string segment with its byte-length-independent character length before concatenation.
|
|
428
|
+
* @returns Collision-resistant intern key for one regex predicate identity.
|
|
429
|
+
*/
|
|
430
|
+
function makeRegexInternKey(value, source, flags, name) {
|
|
431
|
+
return `regex:${String(value)}:${lengthPrefixed(source)}${lengthPrefixed(flags)}${lengthPrefixed(name)}`;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* @brief length prefixed.
|
|
435
|
+
* @details Preserves string tuple boundaries without allocating wrapper arrays or nested maps.
|
|
436
|
+
* @returns Encoded string segment suitable for intern table keys.
|
|
437
|
+
*/
|
|
438
|
+
function lengthPrefixed(value) {
|
|
439
|
+
return `${String(value.length)}:${value};`;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* @brief literal key.
|
|
443
|
+
*/
|
|
444
|
+
function literalKey(value) {
|
|
445
|
+
if (value === null) {
|
|
446
|
+
return "null";
|
|
447
|
+
}
|
|
448
|
+
const valueType = typeof value;
|
|
449
|
+
if (valueType === "string") {
|
|
450
|
+
return `string:${String(value)}`;
|
|
451
|
+
}
|
|
452
|
+
if (valueType === "number") {
|
|
453
|
+
if (Object.is(value, -0)) {
|
|
454
|
+
return "number:-0";
|
|
455
|
+
}
|
|
456
|
+
if (Number.isNaN(value)) {
|
|
457
|
+
return "number:nan";
|
|
458
|
+
}
|
|
459
|
+
return `number:${String(value)}`;
|
|
460
|
+
}
|
|
461
|
+
if (valueType === "bigint") {
|
|
462
|
+
return `bigint:${String(value)}`;
|
|
463
|
+
}
|
|
464
|
+
if (valueType === "boolean") {
|
|
465
|
+
return `boolean:${String(value)}`;
|
|
466
|
+
}
|
|
467
|
+
return "undefined";
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* @brief make discriminant lookup.
|
|
471
|
+
*/
|
|
472
|
+
function makeDiscriminantLookup(literals) {
|
|
473
|
+
const lookup = Object.create(null);
|
|
474
|
+
for (let index = 0; index < literals.length; index += 1) {
|
|
475
|
+
const literal = literals[index];
|
|
476
|
+
if (literal !== undefined) {
|
|
477
|
+
lookup[literal] = index;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return Object.freeze(lookup);
|
|
481
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/ir/freeze.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAwB,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAS/C"}
|