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,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file composite.ts
|
|
3
|
+
* @brief Composite guard builders.
|
|
4
|
+
*/
|
|
5
|
+
import { PresenceTag, SchemaTag } from "../kind/index.js";
|
|
6
|
+
import { BaseGuard } from "../guard/index.js";
|
|
7
|
+
import { isRecord, readGuardSchema } from "../internal/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* @brief array.
|
|
10
|
+
*/
|
|
11
|
+
export function array(item) {
|
|
12
|
+
return new BaseGuard({
|
|
13
|
+
tag: SchemaTag.Array,
|
|
14
|
+
item: readGuardSchema(item, "array item")
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @brief tuple.
|
|
19
|
+
*/
|
|
20
|
+
export function tuple(shape) {
|
|
21
|
+
const rawShape = shape;
|
|
22
|
+
if (!Array.isArray(rawShape)) {
|
|
23
|
+
throw new TypeError("tuple shape must be an array");
|
|
24
|
+
}
|
|
25
|
+
const items = new Array(shape.length);
|
|
26
|
+
for (let index = 0; index < shape.length; index += 1) {
|
|
27
|
+
const guard = shape[index];
|
|
28
|
+
items[index] = readGuardSchema(guard, `tuple item ${String(index)}`);
|
|
29
|
+
}
|
|
30
|
+
return new BaseGuard({
|
|
31
|
+
tag: SchemaTag.Tuple,
|
|
32
|
+
items
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @brief record.
|
|
37
|
+
*/
|
|
38
|
+
export function record(value) {
|
|
39
|
+
return new BaseGuard({
|
|
40
|
+
tag: SchemaTag.Record,
|
|
41
|
+
value: readGuardSchema(value, "record value")
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @brief union.
|
|
46
|
+
*/
|
|
47
|
+
export function union(...guards) {
|
|
48
|
+
if (guards.length === 0) {
|
|
49
|
+
throw new TypeError("union requires at least one guard");
|
|
50
|
+
}
|
|
51
|
+
const options = new Array(guards.length);
|
|
52
|
+
for (let index = 0; index < guards.length; index += 1) {
|
|
53
|
+
const guard = guards[index];
|
|
54
|
+
options[index] = readGuardSchema(guard, `union option ${String(index)}`);
|
|
55
|
+
}
|
|
56
|
+
return new BaseGuard({
|
|
57
|
+
tag: SchemaTag.Union,
|
|
58
|
+
options
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @brief intersect.
|
|
63
|
+
*/
|
|
64
|
+
export function intersect(left, right) {
|
|
65
|
+
return new BaseGuard({
|
|
66
|
+
tag: SchemaTag.Intersection,
|
|
67
|
+
left: readGuardSchema(left, "intersection left"),
|
|
68
|
+
right: readGuardSchema(right, "intersection right")
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @brief discriminated union.
|
|
73
|
+
*/
|
|
74
|
+
export function discriminatedUnion(key, cases) {
|
|
75
|
+
if (typeof key !== "string") {
|
|
76
|
+
throw new TypeError("discriminated union key must be a string");
|
|
77
|
+
}
|
|
78
|
+
if (!isRecord(cases)) {
|
|
79
|
+
throw new TypeError("discriminated union cases must be an object");
|
|
80
|
+
}
|
|
81
|
+
const entries = Object.entries(cases);
|
|
82
|
+
if (entries.length === 0) {
|
|
83
|
+
throw new TypeError("discriminated union requires at least one case");
|
|
84
|
+
}
|
|
85
|
+
const unionCases = new Array(entries.length);
|
|
86
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
87
|
+
const pair = entries[index];
|
|
88
|
+
if (pair === undefined) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const caseKey = pair[0];
|
|
92
|
+
const guard = pair[1];
|
|
93
|
+
unionCases[index] = {
|
|
94
|
+
literal: caseKey,
|
|
95
|
+
schema: readDiscriminatedUnionCaseSchema(guard, key, caseKey)
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return new BaseGuard({
|
|
99
|
+
tag: SchemaTag.DiscriminatedUnion,
|
|
100
|
+
key,
|
|
101
|
+
cases: unionCases
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* @brief read discriminated union case schema.
|
|
106
|
+
*/
|
|
107
|
+
function readDiscriminatedUnionCaseSchema(guard, key, literal) {
|
|
108
|
+
const schema = readGuardSchema(guard, `case ${literal}`);
|
|
109
|
+
if (!caseRequiresDiscriminant(schema, key, literal)) {
|
|
110
|
+
throw new TypeError(`case ${literal} must require literal discriminant ${key}`);
|
|
111
|
+
}
|
|
112
|
+
return schema;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @brief case requires discriminant.
|
|
116
|
+
*/
|
|
117
|
+
function caseRequiresDiscriminant(schema, key, literal) {
|
|
118
|
+
const objectSchema = unwrapCaseObjectSchema(schema);
|
|
119
|
+
if (objectSchema === undefined) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const entries = objectSchema.entries;
|
|
123
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
124
|
+
const entry = entries[index];
|
|
125
|
+
if (entry?.key !== key) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
return entry.presence === PresenceTag.Required &&
|
|
129
|
+
schemaRequiresLiteral(entry.schema, literal);
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @brief unwrap case object schema.
|
|
135
|
+
*/
|
|
136
|
+
function unwrapCaseObjectSchema(schema) {
|
|
137
|
+
switch (schema.tag) {
|
|
138
|
+
case SchemaTag.Object:
|
|
139
|
+
return schema;
|
|
140
|
+
case SchemaTag.Intersection:
|
|
141
|
+
return unwrapCaseObjectSchema(schema.left) ?? unwrapCaseObjectSchema(schema.right);
|
|
142
|
+
case SchemaTag.Brand:
|
|
143
|
+
case SchemaTag.Refine:
|
|
144
|
+
return unwrapCaseObjectSchema(schema.inner);
|
|
145
|
+
default:
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @brief schema requires literal.
|
|
151
|
+
*/
|
|
152
|
+
function schemaRequiresLiteral(schema, literal) {
|
|
153
|
+
switch (schema.tag) {
|
|
154
|
+
case SchemaTag.Literal:
|
|
155
|
+
return Object.is(schema.value, literal);
|
|
156
|
+
case SchemaTag.Intersection:
|
|
157
|
+
return schemaRequiresLiteral(schema.left, literal) ||
|
|
158
|
+
schemaRequiresLiteral(schema.right, literal);
|
|
159
|
+
case SchemaTag.Brand:
|
|
160
|
+
case SchemaTag.Refine:
|
|
161
|
+
return schemaRequiresLiteral(schema.inner, literal);
|
|
162
|
+
default:
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @brief Public builder module aggregation.
|
|
4
|
+
*/
|
|
5
|
+
export { array, discriminatedUnion, intersect, record, tuple, union } from "./composite.js";
|
|
6
|
+
export { lazy, nullable, optional, refine, undefinedable } from "./modifier.js";
|
|
7
|
+
export { ObjectGuard, extend, object, omit, partial, pick, strictObject, type InferObject, type MergeObjectShapes, type ObjectGuardMode, type ObjectShape, type OmitObjectShape, type PartialObjectShape, type PickObjectShape } from "./object/index.js";
|
|
8
|
+
export { bigintGuard, literal, neverGuard, symbolGuard, unknownGuard } from "./scalar.js";
|
|
9
|
+
export { t } from "./table.js";
|
|
10
|
+
export type { InferTuple, TupleShape } from "./types.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builders/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACN,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAC/B,YAAY,EACV,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @brief Public builder module aggregation.
|
|
4
|
+
*/
|
|
5
|
+
export { array, discriminatedUnion, intersect, record, tuple, union } from "./composite.js";
|
|
6
|
+
export { lazy, nullable, optional, refine, undefinedable } from "./modifier.js";
|
|
7
|
+
export { ObjectGuard, extend, object, omit, partial, pick, strictObject } from "./object/index.js";
|
|
8
|
+
export { bigintGuard, literal, neverGuard, symbolGuard, unknownGuard } from "./scalar.js";
|
|
9
|
+
export { t } from "./table.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file modifier.ts
|
|
3
|
+
* @brief Presence, lazy, and refinement guard builders.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseGuard, type Guard, type GuardPresence, type GuardValue, type Infer, type Presence } from "../guard/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* @brief optional.
|
|
8
|
+
*/
|
|
9
|
+
export declare function optional<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard>, "optional">;
|
|
10
|
+
/**
|
|
11
|
+
* @brief undefinedable.
|
|
12
|
+
*/
|
|
13
|
+
export declare function undefinedable<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard> | undefined, GuardPresence<TGuard>>;
|
|
14
|
+
/**
|
|
15
|
+
* @brief nullable.
|
|
16
|
+
*/
|
|
17
|
+
export declare function nullable<TGuard extends Guard<unknown, Presence>>(guard: TGuard): BaseGuard<GuardValue<TGuard> | null, GuardPresence<TGuard>>;
|
|
18
|
+
/**
|
|
19
|
+
* @brief lazy.
|
|
20
|
+
*/
|
|
21
|
+
export declare function lazy<TGuard extends Guard<unknown, Presence>>(get: () => TGuard): BaseGuard<Infer<TGuard>>;
|
|
22
|
+
/**
|
|
23
|
+
* @brief refine.
|
|
24
|
+
*/
|
|
25
|
+
export declare function refine<TGuard extends Guard<unknown, Presence>>(guard: TGuard, predicate: (value: Infer<TGuard>) => boolean, name: string): BaseGuard<GuardValue<TGuard>, GuardPresence<TGuard>>;
|
|
26
|
+
//# sourceMappingURL=modifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifier.d.ts","sourceRoot":"","sources":["../../src/builders/modifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,SAAS,EACT,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9D,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAK3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EACnE,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAKlE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9D,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAK7D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC1D,GAAG,EAAE,MAAM,MAAM,GAChB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAY1B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC5D,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAC5C,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CActD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file modifier.ts
|
|
3
|
+
* @brief Presence, lazy, and refinement guard builders.
|
|
4
|
+
*/
|
|
5
|
+
import { SchemaTag } from "../kind/index.js";
|
|
6
|
+
import { BaseGuard } from "../guard/index.js";
|
|
7
|
+
import { isStrictTrue, readGuardSchema } from "../internal/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* @brief optional.
|
|
10
|
+
*/
|
|
11
|
+
export function optional(guard) {
|
|
12
|
+
return new BaseGuard({
|
|
13
|
+
tag: SchemaTag.Optional,
|
|
14
|
+
inner: readGuardSchema(guard, "optional inner")
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @brief undefinedable.
|
|
19
|
+
*/
|
|
20
|
+
export function undefinedable(guard) {
|
|
21
|
+
return new BaseGuard({
|
|
22
|
+
tag: SchemaTag.Undefinedable,
|
|
23
|
+
inner: readGuardSchema(guard, "undefinedable inner")
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @brief nullable.
|
|
28
|
+
*/
|
|
29
|
+
export function nullable(guard) {
|
|
30
|
+
return new BaseGuard({
|
|
31
|
+
tag: SchemaTag.Nullable,
|
|
32
|
+
inner: readGuardSchema(guard, "nullable inner")
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @brief lazy.
|
|
37
|
+
*/
|
|
38
|
+
export function lazy(get) {
|
|
39
|
+
if (typeof get !== "function") {
|
|
40
|
+
throw new TypeError("lazy resolver must be a function");
|
|
41
|
+
}
|
|
42
|
+
let cached;
|
|
43
|
+
return new BaseGuard({
|
|
44
|
+
tag: SchemaTag.Lazy,
|
|
45
|
+
get: () => {
|
|
46
|
+
cached ??= readGuardSchema(get(), "lazy result");
|
|
47
|
+
return cached;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @brief refine.
|
|
53
|
+
*/
|
|
54
|
+
export function refine(guard, predicate, name) {
|
|
55
|
+
if (typeof predicate !== "function") {
|
|
56
|
+
throw new TypeError("refinement predicate must be a function");
|
|
57
|
+
}
|
|
58
|
+
if (typeof name !== "string") {
|
|
59
|
+
throw new TypeError("refinement name must be a string");
|
|
60
|
+
}
|
|
61
|
+
return new BaseGuard({
|
|
62
|
+
tag: SchemaTag.Refine,
|
|
63
|
+
inner: readGuardSchema(guard, "refine inner"),
|
|
64
|
+
predicate: (value) => isStrictTrue(predicate(value)),
|
|
65
|
+
name
|
|
66
|
+
});
|
|
67
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file guard.ts
|
|
3
|
+
* @brief Object guard class and object builder API.
|
|
4
|
+
*/
|
|
5
|
+
import type { ObjectSchema } from "../../schema/index.js";
|
|
6
|
+
import { ObjectModeTag } from "../../kind/index.js";
|
|
7
|
+
import { BaseGuard } from "../../guard/index.js";
|
|
8
|
+
import type { ObjectGuardMode, ObjectShape, InferObject, MergeObjectShapes, OmitObjectShape, PartialObjectShape, PickObjectShape, StringKeyOf } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* @brief Guard subclass with object-specific shape operations.
|
|
11
|
+
*
|
|
12
|
+
* @invariant Methods preserve the original object mode. Strict schemas stay
|
|
13
|
+
* strict after shape edits; passthrough schemas stay passthrough.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ObjectGuard<TShape extends ObjectShape, TMode extends ObjectGuardMode> extends BaseGuard<InferObject<TShape>> {
|
|
16
|
+
/**
|
|
17
|
+
* @brief constructor.
|
|
18
|
+
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
19
|
+
*/
|
|
20
|
+
constructor(schema: ObjectSchema);
|
|
21
|
+
/**
|
|
22
|
+
* @brief extend.
|
|
23
|
+
*/
|
|
24
|
+
extend<const TExtension extends ObjectShape>(extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
25
|
+
/**
|
|
26
|
+
* @brief pick.
|
|
27
|
+
*/
|
|
28
|
+
pick<const TKeys extends readonly StringKeyOf<TShape>[]>(keys: TKeys): ObjectGuard<PickObjectShape<TShape, TKeys[number]>, TMode>;
|
|
29
|
+
/**
|
|
30
|
+
* @brief omit.
|
|
31
|
+
*/
|
|
32
|
+
omit<const TKeys extends readonly StringKeyOf<TShape>[]>(keys: TKeys): ObjectGuard<OmitObjectShape<TShape, TKeys[number]>, TMode>;
|
|
33
|
+
/**
|
|
34
|
+
* @brief partial.
|
|
35
|
+
*/
|
|
36
|
+
partial(): ObjectGuard<PartialObjectShape<TShape>, TMode>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @brief object.
|
|
40
|
+
*/
|
|
41
|
+
export declare function object<const TShape extends ObjectShape>(shape: TShape): ObjectGuard<TShape, typeof ObjectModeTag.Passthrough>;
|
|
42
|
+
/**
|
|
43
|
+
* @brief strict object.
|
|
44
|
+
*/
|
|
45
|
+
export declare function strictObject<const TShape extends ObjectShape>(shape: TShape): ObjectGuard<TShape, typeof ObjectModeTag.Strict>;
|
|
46
|
+
/**
|
|
47
|
+
* @brief extend.
|
|
48
|
+
*/
|
|
49
|
+
export declare function extend<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TExtension extends ObjectShape>(guard: ObjectGuard<TShape, TMode>, extension: TExtension): ObjectGuard<MergeObjectShapes<TShape, TExtension>, TMode>;
|
|
50
|
+
/**
|
|
51
|
+
* @brief pick.
|
|
52
|
+
*/
|
|
53
|
+
export declare function pick<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TKeys extends readonly StringKeyOf<TShape>[]>(guard: ObjectGuard<TShape, TMode>, keys: TKeys): ObjectGuard<PickObjectShape<TShape, TKeys[number]>, TMode>;
|
|
54
|
+
/**
|
|
55
|
+
* @brief omit.
|
|
56
|
+
*/
|
|
57
|
+
export declare function omit<const TShape extends ObjectShape, TMode extends ObjectGuardMode, const TKeys extends readonly StringKeyOf<TShape>[]>(guard: ObjectGuard<TShape, TMode>, keys: TKeys): ObjectGuard<OmitObjectShape<TShape, TKeys[number]>, TMode>;
|
|
58
|
+
/**
|
|
59
|
+
* @brief partial.
|
|
60
|
+
*/
|
|
61
|
+
export declare function partial<const TShape extends ObjectShape, TMode extends ObjectGuardMode>(guard: ObjectGuard<TShape, TMode>): ObjectGuard<PartialObjectShape<TShape>, TMode>;
|
|
62
|
+
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/builders/object/guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file guard.ts
|
|
3
|
+
* @brief Object guard class and object builder API.
|
|
4
|
+
*/
|
|
5
|
+
import { ObjectModeTag } from "../../kind/index.js";
|
|
6
|
+
import { BaseGuard } from "../../guard/index.js";
|
|
7
|
+
import { mergeObjectSchemas, objectSchema, omitObjectSchema, partialObjectSchema, pickObjectSchema, readObjectConstructorSchema, readObjectKeySelection, readObjectMethodSchema } from "./schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* @brief Guard subclass with object-specific shape operations.
|
|
10
|
+
*
|
|
11
|
+
* @invariant Methods preserve the original object mode. Strict schemas stay
|
|
12
|
+
* strict after shape edits; passthrough schemas stay passthrough.
|
|
13
|
+
*/
|
|
14
|
+
export class ObjectGuard extends BaseGuard {
|
|
15
|
+
/**
|
|
16
|
+
* @brief constructor.
|
|
17
|
+
* @post The receiver is initialized according to the class invariant before it can be observed.
|
|
18
|
+
*/
|
|
19
|
+
constructor(schema) {
|
|
20
|
+
super(readObjectConstructorSchema(schema));
|
|
21
|
+
Object.freeze(this);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @brief extend.
|
|
25
|
+
*/
|
|
26
|
+
extend(extension) {
|
|
27
|
+
return extendObjectGuard(this, extension);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @brief pick.
|
|
31
|
+
*/
|
|
32
|
+
pick(keys) {
|
|
33
|
+
return pickObjectGuard(this, keys);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @brief omit.
|
|
37
|
+
*/
|
|
38
|
+
omit(keys) {
|
|
39
|
+
return omitObjectGuard(this, keys);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @brief partial.
|
|
43
|
+
*/
|
|
44
|
+
partial() {
|
|
45
|
+
return partialObjectGuard(this);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @brief object.
|
|
50
|
+
*/
|
|
51
|
+
export function object(shape) {
|
|
52
|
+
return new ObjectGuard(objectSchema(shape, ObjectModeTag.Passthrough));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @brief strict object.
|
|
56
|
+
*/
|
|
57
|
+
export function strictObject(shape) {
|
|
58
|
+
return new ObjectGuard(objectSchema(shape, ObjectModeTag.Strict));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @brief extend.
|
|
62
|
+
*/
|
|
63
|
+
export function extend(guard, extension) {
|
|
64
|
+
return extendObjectGuard(guard, extension);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @brief pick.
|
|
68
|
+
*/
|
|
69
|
+
export function pick(guard, keys) {
|
|
70
|
+
return pickObjectGuard(guard, keys);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @brief omit.
|
|
74
|
+
*/
|
|
75
|
+
export function omit(guard, keys) {
|
|
76
|
+
return omitObjectGuard(guard, keys);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @brief partial.
|
|
80
|
+
*/
|
|
81
|
+
export function partial(guard) {
|
|
82
|
+
return partialObjectGuard(guard);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @brief extend object guard.
|
|
86
|
+
*/
|
|
87
|
+
function extendObjectGuard(guard, extension) {
|
|
88
|
+
const schema = readObjectMethodSchema(guard, "object extend receiver");
|
|
89
|
+
return new ObjectGuard(mergeObjectSchemas(schema, objectSchema(extension, schema.mode)));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @brief pick object guard.
|
|
93
|
+
*/
|
|
94
|
+
function pickObjectGuard(guard, keys) {
|
|
95
|
+
const schema = readObjectMethodSchema(guard, "object pick receiver");
|
|
96
|
+
const selection = readObjectKeySelection(keys, schema, "pick keys");
|
|
97
|
+
return new ObjectGuard(pickObjectSchema(schema, selection));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @brief omit object guard.
|
|
101
|
+
*/
|
|
102
|
+
function omitObjectGuard(guard, keys) {
|
|
103
|
+
const schema = readObjectMethodSchema(guard, "object omit receiver");
|
|
104
|
+
const selection = readObjectKeySelection(keys, schema, "omit keys");
|
|
105
|
+
return new ObjectGuard(omitObjectSchema(schema, selection));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @brief partial object guard.
|
|
109
|
+
*/
|
|
110
|
+
function partialObjectGuard(guard) {
|
|
111
|
+
const schema = readObjectMethodSchema(guard, "object partial receiver");
|
|
112
|
+
return new ObjectGuard(partialObjectSchema(schema));
|
|
113
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @brief Public object builder aggregation.
|
|
4
|
+
*/
|
|
5
|
+
export { ObjectGuard, extend, object, omit, partial, pick, strictObject } from "./guard.js";
|
|
6
|
+
export type { InferObject, MergeObjectShapes, ObjectGuardMode, ObjectShape, OmitObjectShape, PartialObjectShape, PickObjectShape } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builders/object/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file schema.ts
|
|
3
|
+
* @brief Object schema construction and shape rewrites.
|
|
4
|
+
*/
|
|
5
|
+
import { ObjectModeTag } from "../../kind/index.js";
|
|
6
|
+
import type { ObjectEntry, ObjectSchema } from "../../schema/index.js";
|
|
7
|
+
import type { ObjectShape } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* @brief object schema.
|
|
10
|
+
*/
|
|
11
|
+
export declare function objectSchema(shape: ObjectShape, mode: ObjectModeTag): ObjectSchema;
|
|
12
|
+
/**
|
|
13
|
+
* @brief object schema from entries.
|
|
14
|
+
*/
|
|
15
|
+
export declare function objectSchemaFromEntries(sourceEntries: readonly ObjectEntry[], mode: ObjectModeTag): ObjectSchema;
|
|
16
|
+
/**
|
|
17
|
+
* @brief read object constructor schema.
|
|
18
|
+
*/
|
|
19
|
+
export declare function readObjectConstructorSchema(schema: unknown): ObjectSchema;
|
|
20
|
+
/**
|
|
21
|
+
* @brief read object method schema.
|
|
22
|
+
*/
|
|
23
|
+
export declare function readObjectMethodSchema(guard: unknown, label: string): ObjectSchema;
|
|
24
|
+
/**
|
|
25
|
+
* @brief merge object schemas.
|
|
26
|
+
*/
|
|
27
|
+
export declare function mergeObjectSchemas(base: ObjectSchema, extension: ObjectSchema): ObjectSchema;
|
|
28
|
+
/**
|
|
29
|
+
* @brief pick object schema.
|
|
30
|
+
*/
|
|
31
|
+
export declare function pickObjectSchema(schema: ObjectSchema, keys: readonly string[]): ObjectSchema;
|
|
32
|
+
/**
|
|
33
|
+
* @brief omit object schema.
|
|
34
|
+
*/
|
|
35
|
+
export declare function omitObjectSchema(schema: ObjectSchema, keys: readonly string[]): ObjectSchema;
|
|
36
|
+
/**
|
|
37
|
+
* @brief partial object schema.
|
|
38
|
+
*/
|
|
39
|
+
export declare function partialObjectSchema(schema: ObjectSchema): ObjectSchema;
|
|
40
|
+
/**
|
|
41
|
+
* @brief read object key selection.
|
|
42
|
+
*/
|
|
43
|
+
export declare function readObjectKeySelection(keys: unknown, schema: ObjectSchema, label: string): readonly string[];
|
|
44
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/builders/object/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EACV,WAAW,EAEX,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CAsBd;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,IAAI,EAAE,aAAa,GAClB,YAAY,CAuBd;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAKzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAMlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,YAAY,GACtB,YAAY,CAed;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,YAAY,CAad;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,YAAY,CASd;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAatE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,GACZ,SAAS,MAAM,EAAE,CAmBnB"}
|