typesea 0.2.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 +18 -0
- package/README.md +45 -11
- package/dist/aot/index.d.ts +1 -1
- package/dist/aot/index.d.ts.map +1 -1
- package/dist/aot/index.js +22 -3
- package/dist/builders/composite.d.ts +6 -3
- package/dist/builders/composite.d.ts.map +1 -1
- package/dist/builders/composite.js +22 -13
- package/dist/builders/index.d.ts +6 -5
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +5 -4
- package/dist/builders/modifier.d.ts +6 -0
- package/dist/builders/modifier.d.ts.map +1 -1
- package/dist/builders/modifier.js +14 -0
- package/dist/builders/object/guard.d.ts +54 -2
- package/dist/builders/object/guard.d.ts.map +1 -1
- package/dist/builders/object/guard.js +117 -7
- package/dist/builders/object/index.d.ts +2 -2
- package/dist/builders/object/index.d.ts.map +1 -1
- package/dist/builders/object/index.js +1 -1
- package/dist/builders/object/schema.d.ts +33 -2
- package/dist/builders/object/schema.d.ts.map +1 -1
- package/dist/builders/object/schema.js +198 -8
- package/dist/builders/object/types.d.ts +15 -0
- package/dist/builders/object/types.d.ts.map +1 -1
- 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 +20 -1
- package/dist/builders/scalar.d.ts.map +1 -1
- package/dist/builders/scalar.js +54 -1
- package/dist/builders/table.d.ts +31 -5
- package/dist/builders/table.d.ts.map +1 -1
- package/dist/builders/table.js +31 -5
- package/dist/builders/types.d.ts +6 -0
- package/dist/builders/types.d.ts.map +1 -1
- package/dist/compile/check-composite.d.ts +3 -1
- package/dist/compile/check-composite.d.ts.map +1 -1
- package/dist/compile/check-composite.js +143 -11
- package/dist/compile/check-scalar.d.ts +10 -0
- package/dist/compile/check-scalar.d.ts.map +1 -1
- package/dist/compile/check-scalar.js +138 -2
- package/dist/compile/check.d.ts.map +1 -1
- package/dist/compile/check.js +25 -3
- package/dist/compile/context.d.ts.map +1 -1
- package/dist/compile/context.js +2 -0
- 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.map +1 -1
- package/dist/compile/graph-predicate.js +389 -18
- package/dist/compile/guard.d.ts +2 -1
- package/dist/compile/guard.d.ts.map +1 -1
- package/dist/compile/guard.js +54 -8
- package/dist/compile/predicate.d.ts.map +1 -1
- package/dist/compile/predicate.js +156 -5
- package/dist/compile/runtime.d.ts +20 -1
- package/dist/compile/runtime.d.ts.map +1 -1
- package/dist/compile/runtime.js +31 -0
- package/dist/compile/source.d.ts.map +1 -1
- package/dist/compile/source.js +27 -3
- package/dist/compile/types.d.ts +2 -0
- package/dist/compile/types.d.ts.map +1 -1
- package/dist/decoder/index.d.ts +60 -0
- package/dist/decoder/index.d.ts.map +1 -1
- package/dist/decoder/index.js +164 -1
- package/dist/evaluate/check-composite.d.ts +52 -2
- package/dist/evaluate/check-composite.d.ts.map +1 -1
- package/dist/evaluate/check-composite.js +193 -6
- package/dist/evaluate/check-scalar.d.ts +9 -0
- package/dist/evaluate/check-scalar.d.ts.map +1 -1
- package/dist/evaluate/check-scalar.js +92 -3
- package/dist/evaluate/check.d.ts.map +1 -1
- package/dist/evaluate/check.js +19 -4
- package/dist/evaluate/shared.d.ts +19 -0
- package/dist/evaluate/shared.d.ts.map +1 -1
- package/dist/evaluate/shared.js +35 -0
- 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 +32 -2
- package/dist/guard/base.d.ts.map +1 -1
- package/dist/guard/base.js +74 -3
- 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/index.d.ts +2 -0
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +2 -0
- package/dist/guard/number.d.ts +60 -0
- package/dist/guard/number.d.ts.map +1 -1
- package/dist/guard/number.js +129 -0
- package/dist/guard/read.d.ts +53 -1
- package/dist/guard/read.d.ts.map +1 -1
- package/dist/guard/read.js +102 -0
- package/dist/guard/string.d.ts +82 -0
- package/dist/guard/string.d.ts.map +1 -1
- package/dist/guard/string.js +213 -0
- package/dist/guard/types.d.ts +18 -0
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/ir/builder.d.ts +3 -3
- package/dist/ir/builder.d.ts.map +1 -1
- package/dist/ir/builder.js +5 -2
- package/dist/ir/freeze.js +7 -0
- package/dist/ir/types.d.ts +4 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/validate.d.ts.map +1 -1
- package/dist/ir/validate.js +35 -1
- package/dist/issue/index.d.ts +1 -1
- package/dist/issue/index.d.ts.map +1 -1
- package/dist/issue/index.js +4 -0
- package/dist/json-schema/emit-composite.d.ts +6 -2
- package/dist/json-schema/emit-composite.d.ts.map +1 -1
- package/dist/json-schema/emit-composite.js +66 -12
- package/dist/json-schema/emit-scalar.d.ts.map +1 -1
- package/dist/json-schema/emit-scalar.js +54 -1
- package/dist/json-schema/emit.d.ts.map +1 -1
- package/dist/json-schema/emit.js +11 -2
- package/dist/json-schema/types.d.ts +7 -1
- package/dist/json-schema/types.d.ts.map +1 -1
- package/dist/kind/index.d.ts +25 -0
- package/dist/kind/index.d.ts.map +1 -1
- package/dist/kind/index.js +26 -3
- package/dist/lower/index.d.ts.map +1 -1
- package/dist/lower/index.js +52 -3
- package/dist/message/index.d.ts +18 -0
- package/dist/message/index.d.ts.map +1 -1
- package/dist/message/index.js +67 -0
- package/dist/optimize/domain.js +6 -2
- package/dist/optimize/map-node.d.ts.map +1 -1
- package/dist/optimize/map-node.js +3 -0
- package/dist/plan/cache.js +13 -1
- package/dist/plan/predicate.d.ts.map +1 -1
- package/dist/plan/predicate.js +33 -3
- package/dist/plan/schema-predicate.d.ts.map +1 -1
- package/dist/plan/schema-predicate.js +267 -8
- package/dist/schema/freeze.js +22 -0
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/types.d.ts +89 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +8 -1
- package/dist/schema/undefined.d.ts.map +1 -1
- package/dist/schema/undefined.js +5 -0
- package/dist/schema/validate.d.ts.map +1 -1
- package/dist/schema/validate.js +111 -4
- package/docs/api.md +71 -8
- package/docs/engine-notes.md +4 -0
- package/docs/index.html +1340 -722
- 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 +3 -2
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { t, array, bigintGuard, discriminatedUnion, extend, intersect, lazy, literal, nullable, neverGuard, object, omit, optional, partial, pick, record, refine, strictObject, symbolGuard, tuple, union, unknownGuard, undefinedable, ObjectGuard } from "./builders/index.js";
|
|
2
|
-
export { BaseGuard, NumberGuard, StringGuard, TypeSeaAssertionError } from "./guard/index.js";
|
|
1
|
+
export { t, array, bigintGuard, catchall, dateGuard, deepPartial, discriminatedUnion, enum, enumValues, extend, instanceOf, intersect, json, lazy, literal, map, merge, nullable, neverGuard, nullGuard, nullish, object, omit, optional, partial, passthrough, pick, property, record, refine, required, safeExtend, set, strict, strictObject, strip, symbolGuard, tuple, union, unknownGuard, undefinedGuard, undefinedable, voidGuard, ObjectGuard } from "./builders/index.js";
|
|
2
|
+
export { BaseGuard, ArrayGuard, DateGuard, NumberGuard, StringGuard, TypeSeaAssertionError } from "./guard/index.js";
|
|
3
3
|
export { CompiledBaseGuard, compile } from "./compile/index.js";
|
|
4
4
|
export { emitAotModule } from "./aot/index.js";
|
|
5
5
|
export { toAsyncTrpcParser, toFastifyRouteSchema, toFastifyValidatorCompiler, toReactHookFormResolver, toTrpcParser } from "./adapters/index.js";
|
|
6
6
|
export { BaseAsyncDecoder, asyncDecoder, asyncPipe, asyncRefine, asyncTransform, isAsyncDecoderValue } from "./async/index.js";
|
|
7
|
-
export { BaseDecoder, coerce, coerceBoolean, coerceNumber, coerceString, decoder, isDecoderValue, pipe, transform } from "./decoder/index.js";
|
|
7
|
+
export { BaseCodec, BaseDecoder, catchValue, codec, coerce, coerceBoolean, coerceNumber, coerceString, defaultValue, decoder, isCodecValue, isDecoderValue, pipe, prefault, transform } from "./decoder/index.js";
|
|
8
8
|
export { schemaToJsonSchema, toJsonSchema } from "./json-schema/index.js";
|
|
9
|
-
export { defineMessages, formatIssue, formatIssues, withMessages } from "./message/index.js";
|
|
9
|
+
export { defineMessages, flattenIssues, formatIssue, formatIssues, withMessages } from "./message/index.js";
|
|
10
10
|
export { optimizeGraph } from "./optimize/index.js";
|
package/dist/ir/builder.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* compiler, or public introspection boundaries.
|
|
6
6
|
*/
|
|
7
7
|
import { type ObjectModeTag } from "../kind/index.js";
|
|
8
|
-
import type { LiteralValue, Schema } from "../schema/index.js";
|
|
8
|
+
import type { ArrayCheck, LiteralValue, Schema } from "../schema/index.js";
|
|
9
9
|
import type { Graph, NodeId, ObjectShapeEntry, UnionDispatchMask } from "./types.js";
|
|
10
10
|
/**
|
|
11
11
|
* @brief Dense Sea-of-Nodes graph construction arena.
|
|
@@ -42,11 +42,11 @@ export declare class GraphBuilder {
|
|
|
42
42
|
hasOwn(object: NodeId, key: string): NodeId;
|
|
43
43
|
hasOwnData(object: NodeId, key: string): NodeId;
|
|
44
44
|
strictKeys(object: NodeId, keys: readonly string[]): NodeId;
|
|
45
|
-
arrayEvery(value: NodeId, item: Schema, itemGraph: Graph): NodeId;
|
|
45
|
+
arrayEvery(value: NodeId, item: Schema, checks: readonly ArrayCheck[], itemGraph: Graph): NodeId;
|
|
46
46
|
tupleItems(value: NodeId, items: readonly Schema[], itemGraphs: readonly Graph[]): NodeId;
|
|
47
47
|
recordEvery(value: NodeId, item: Schema, itemGraph: Graph): NodeId;
|
|
48
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): NodeId;
|
|
49
|
+
objectShape(value: NodeId, entries: readonly ObjectShapeEntry[], keys: readonly string[], mode: ObjectModeTag, catchall: Schema | undefined, catchallGraph: Graph | undefined): NodeId;
|
|
50
50
|
unionDispatch(value: NodeId, options: readonly Schema[], graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
|
|
51
51
|
primitiveUnion(value: NodeId, graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
|
|
52
52
|
schemaCheck(value: NodeId, schema: Schema): NodeId;
|
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;;;;;GAKG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/ir/builder.js
CHANGED
|
@@ -166,13 +166,14 @@ export class GraphBuilder {
|
|
|
166
166
|
keys
|
|
167
167
|
}));
|
|
168
168
|
}
|
|
169
|
-
arrayEvery(value, item, itemGraph) {
|
|
169
|
+
arrayEvery(value, item, checks, itemGraph) {
|
|
170
170
|
return this.push((id) => ({
|
|
171
171
|
id,
|
|
172
172
|
tag: NodeTag.ArrayEvery,
|
|
173
173
|
deps: [value],
|
|
174
174
|
value,
|
|
175
175
|
item,
|
|
176
|
+
checks,
|
|
176
177
|
itemGraph
|
|
177
178
|
}));
|
|
178
179
|
}
|
|
@@ -209,7 +210,7 @@ export class GraphBuilder {
|
|
|
209
210
|
lookup: makeDiscriminantLookup(literals)
|
|
210
211
|
}));
|
|
211
212
|
}
|
|
212
|
-
objectShape(value, entries, keys, mode) {
|
|
213
|
+
objectShape(value, entries, keys, mode, catchall, catchallGraph) {
|
|
213
214
|
return this.push((id) => ({
|
|
214
215
|
id,
|
|
215
216
|
tag: NodeTag.ObjectShape,
|
|
@@ -218,6 +219,8 @@ export class GraphBuilder {
|
|
|
218
219
|
entries,
|
|
219
220
|
keys,
|
|
220
221
|
mode,
|
|
222
|
+
catchall,
|
|
223
|
+
catchallGraph,
|
|
221
224
|
allRequired: objectShapeAllRequired(entries)
|
|
222
225
|
}));
|
|
223
226
|
}
|
package/dist/ir/freeze.js
CHANGED
|
@@ -38,6 +38,7 @@ function freezeGraphNode(node) {
|
|
|
38
38
|
break;
|
|
39
39
|
case NodeTag.ArrayEvery:
|
|
40
40
|
freezeSchema(node.item);
|
|
41
|
+
Object.freeze(node.checks);
|
|
41
42
|
freezeGraph(node.itemGraph);
|
|
42
43
|
break;
|
|
43
44
|
case NodeTag.TupleItems:
|
|
@@ -83,6 +84,12 @@ function freezeGraphNode(node) {
|
|
|
83
84
|
Object.freeze(entry);
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
if (node.catchall !== undefined) {
|
|
88
|
+
freezeSchema(node.catchall);
|
|
89
|
+
}
|
|
90
|
+
if (node.catchallGraph !== undefined) {
|
|
91
|
+
freezeGraph(node.catchallGraph);
|
|
92
|
+
}
|
|
86
93
|
Object.freeze(node.entries);
|
|
87
94
|
Object.freeze(node.keys);
|
|
88
95
|
break;
|
package/dist/ir/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* compiler, or public introspection boundaries.
|
|
6
6
|
*/
|
|
7
7
|
import { NodeTag, type ObjectModeTag, type PresenceTag } from "../kind/index.js";
|
|
8
|
-
import type { LiteralValue, Schema } from "../schema/index.js";
|
|
8
|
+
import type { ArrayCheck, LiteralValue, Schema } from "../schema/index.js";
|
|
9
9
|
/**
|
|
10
10
|
* @brief Dense index into Graph.nodes.
|
|
11
11
|
* @details Node ids are arena-local and may change after graph rewrites.
|
|
@@ -113,6 +113,7 @@ export interface ArrayEveryNode {
|
|
|
113
113
|
readonly deps: readonly [NodeId];
|
|
114
114
|
readonly value: NodeId;
|
|
115
115
|
readonly item: Schema;
|
|
116
|
+
readonly checks: readonly ArrayCheck[];
|
|
116
117
|
readonly itemGraph: Graph;
|
|
117
118
|
}
|
|
118
119
|
/**
|
|
@@ -182,6 +183,8 @@ export interface ObjectShapeNode {
|
|
|
182
183
|
readonly entries: readonly ObjectShapeEntry[];
|
|
183
184
|
readonly keys: readonly string[];
|
|
184
185
|
readonly mode: ObjectModeTag;
|
|
186
|
+
readonly catchall: Schema | undefined;
|
|
187
|
+
readonly catchallGraph: Graph | undefined;
|
|
185
188
|
readonly allRequired: boolean;
|
|
186
189
|
}
|
|
187
190
|
/**
|
package/dist/ir/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/ir/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/ir/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAE3D"}
|
package/dist/ir/validate.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @details Graph validation protects optimizer and compiler passes before they assume dense
|
|
5
5
|
* node ids and valid dependency edges.
|
|
6
6
|
*/
|
|
7
|
-
import { NodeTag, ObjectModeTag, PresenceTag } from "../kind/index.js";
|
|
7
|
+
import { ArrayCheckTag, NodeTag, ObjectModeTag, PresenceTag } from "../kind/index.js";
|
|
8
8
|
import { isLiteralValue, isSchemaValue } from "../schema/index.js";
|
|
9
9
|
import { isPlainRegExp } from "./regexp.js";
|
|
10
10
|
/**
|
|
@@ -150,6 +150,7 @@ function isGraphNodeValue(value, index, nodeCount, state) {
|
|
|
150
150
|
isSingleDepNode(value, deps, "object", nodeCount);
|
|
151
151
|
case NodeTag.ArrayEvery:
|
|
152
152
|
return isSchemaValue(readOwnDataProperty(value, "item")) &&
|
|
153
|
+
isArrayChecks(readOwnDataProperty(value, "checks")) &&
|
|
153
154
|
isGraphValueInner(readOwnDataProperty(value, "itemGraph"), state) &&
|
|
154
155
|
isSingleDepNode(value, deps, "value", nodeCount);
|
|
155
156
|
case NodeTag.TupleItems:
|
|
@@ -186,6 +187,35 @@ function isGraphNodeValue(value, index, nodeCount, state) {
|
|
|
186
187
|
return false;
|
|
187
188
|
}
|
|
188
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* @brief Validate array length metadata carried by ArrayEvery nodes.
|
|
192
|
+
* @param value Candidate check vector.
|
|
193
|
+
* @returns True when every entry is a supported non-negative integer bound.
|
|
194
|
+
*/
|
|
195
|
+
function isArrayChecks(value) {
|
|
196
|
+
if (!isUnknownArray(value)) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
200
|
+
const check = value[index];
|
|
201
|
+
if (!isRecord(check)) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
switch (readOwnDataProperty(check, "tag")) {
|
|
205
|
+
case ArrayCheckTag.Min:
|
|
206
|
+
case ArrayCheckTag.Max: {
|
|
207
|
+
const bound = readOwnDataProperty(check, "value");
|
|
208
|
+
if (typeof bound !== "number" || !Number.isInteger(bound) || bound < 0) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
default:
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
189
219
|
/**
|
|
190
220
|
* @brief Validate payloads for dependency-free nodes.
|
|
191
221
|
* @details Graph validation protects optimizer and compiler passes before they assume dense
|
|
@@ -384,11 +414,15 @@ function isObjectShapePayload(value, state) {
|
|
|
384
414
|
const entries = readOwnDataProperty(value, "entries");
|
|
385
415
|
const keys = readOwnDataProperty(value, "keys");
|
|
386
416
|
const mode = readOwnDataProperty(value, "mode");
|
|
417
|
+
const catchall = readOwnDataProperty(value, "catchall");
|
|
418
|
+
const catchallGraph = readOwnDataProperty(value, "catchallGraph");
|
|
387
419
|
const allRequired = readOwnDataProperty(value, "allRequired");
|
|
388
420
|
return isObjectShapeEntries(entries, state) &&
|
|
389
421
|
isStringArray(keys) &&
|
|
390
422
|
objectShapeEntriesMatchKeys(entries, keys) &&
|
|
391
423
|
isObjectModeTag(mode) &&
|
|
424
|
+
((catchall === undefined && catchallGraph === undefined) ||
|
|
425
|
+
(isSchemaValue(catchall) && isGraphValueInner(catchallGraph, state))) &&
|
|
392
426
|
typeof allRequired === "boolean" &&
|
|
393
427
|
allRequired === objectShapeAllRequired(entries);
|
|
394
428
|
}
|
package/dist/issue/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type PathSegment = string | number;
|
|
|
10
10
|
* @details Codes are stable machine-readable diagnostics shared by interpreters,
|
|
11
11
|
* compiled collectors, adapters, and message catalogs.
|
|
12
12
|
*/
|
|
13
|
-
export type IssueCode = "expected_string" | "expected_number" | "expected_bigint" | "expected_symbol" | "expected_boolean" | "expected_never" | "expected_literal" | "expected_array" | "expected_tuple" | "expected_tuple_length" | "expected_object" | "expected_record" | "expected_integer" | "expected_min_length" | "expected_max_length" | "expected_pattern" | "expected_gte" | "expected_lte" | "expected_required_key" | "expected_union" | "expected_discriminant" | "expected_refinement" | "expected_depth_limit" | "unrecognized_key";
|
|
13
|
+
export type IssueCode = "expected_string" | "expected_number" | "expected_date" | "expected_bigint" | "expected_symbol" | "expected_boolean" | "expected_never" | "expected_literal" | "expected_array" | "expected_map" | "expected_set" | "expected_instance" | "expected_tuple" | "expected_tuple_length" | "expected_object" | "expected_record" | "expected_integer" | "expected_min_length" | "expected_max_length" | "expected_pattern" | "expected_gte" | "expected_lte" | "expected_gt" | "expected_lt" | "expected_multiple_of" | "expected_required_key" | "expected_union" | "expected_discriminant" | "expected_refinement" | "expected_depth_limit" | "unrecognized_key";
|
|
14
14
|
/**
|
|
15
15
|
* @brief Immutable validation diagnostic.
|
|
16
16
|
* @details The message field is optional so hot boolean validation and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACf,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,uBAAuB,GACvB,gBAAgB,GAChB,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;AAUnE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC5B,KAAK,CAQP;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,KAAK,EAAE,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,KAAK,EAAE,CAQnE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,EAAE,CAS3E;AA6DD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACf,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,gBAAgB,GAChB,uBAAuB,GACvB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,aAAa,GACb,aAAa,GACb,sBAAsB,GACtB,uBAAuB,GACvB,gBAAgB,GAChB,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;AAUnE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC5B,KAAK,CAQP;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,KAAK,EAAE,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,KAAK,EAAE,CAQnE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,EAAE,CAS3E;AA6DD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAkCnE"}
|
package/dist/issue/index.js
CHANGED
|
@@ -143,6 +143,7 @@ export function isIssueCodeValue(value) {
|
|
|
143
143
|
switch (value) {
|
|
144
144
|
case "expected_string":
|
|
145
145
|
case "expected_number":
|
|
146
|
+
case "expected_date":
|
|
146
147
|
case "expected_bigint":
|
|
147
148
|
case "expected_symbol":
|
|
148
149
|
case "expected_boolean":
|
|
@@ -159,6 +160,9 @@ export function isIssueCodeValue(value) {
|
|
|
159
160
|
case "expected_pattern":
|
|
160
161
|
case "expected_gte":
|
|
161
162
|
case "expected_lte":
|
|
163
|
+
case "expected_gt":
|
|
164
|
+
case "expected_lt":
|
|
165
|
+
case "expected_multiple_of":
|
|
162
166
|
case "expected_required_key":
|
|
163
167
|
case "expected_union":
|
|
164
168
|
case "expected_discriminant":
|
|
@@ -14,13 +14,17 @@ import type { JsonSchema, JsonSchemaDialect, JsonSchemaExportIssue } from "./typ
|
|
|
14
14
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
15
15
|
* report a structured export issue.
|
|
16
16
|
*/
|
|
17
|
-
export declare function emitArray(
|
|
17
|
+
export declare function emitArray(schema: Extract<Schema, {
|
|
18
|
+
readonly tag: typeof SchemaTag.Array;
|
|
19
|
+
}>, path: PathSegment[], issues: JsonSchemaExportIssue[], emitChild: JsonSchemaEmitter, dialect: JsonSchemaDialect): JsonSchema | undefined;
|
|
18
20
|
/**
|
|
19
21
|
* @brief emit tuple.
|
|
20
22
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
21
23
|
* report a structured export issue.
|
|
22
24
|
*/
|
|
23
|
-
export declare function emitTuple(
|
|
25
|
+
export declare function emitTuple(schema: Extract<Schema, {
|
|
26
|
+
readonly tag: typeof SchemaTag.Tuple;
|
|
27
|
+
}>, path: PathSegment[], issues: JsonSchemaExportIssue[], emitChild: JsonSchemaEmitter, dialect: JsonSchemaDialect): JsonSchema | undefined;
|
|
24
28
|
/**
|
|
25
29
|
* @brief emit record.
|
|
26
30
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-composite.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit-composite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"emit-composite.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit-composite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIH,SAAS,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EACR,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EAExB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,SAAS,CACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC,KAAK,CAAA;CAAE,CAAC,EACjE,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,CAkCxB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC,KAAK,CAAA;CAAE,CAAC,EACjE,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,CAyDxB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,CAaxB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC,MAAM,CAAA;CAAE,CAAC,EAClE,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,CAgDxB"}
|
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
5
5
|
* report a structured export issue.
|
|
6
6
|
*/
|
|
7
|
-
import { ObjectModeTag, PresenceTag, SchemaTag } from "../kind/index.js";
|
|
7
|
+
import { ArrayCheckTag, ObjectModeTag, PresenceTag, SchemaTag } from "../kind/index.js";
|
|
8
8
|
import { pushJsonSchemaIssue } from "./issue.js";
|
|
9
9
|
/**
|
|
10
10
|
* @brief emit array.
|
|
11
11
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
12
12
|
* report a structured export issue.
|
|
13
13
|
*/
|
|
14
|
-
export function emitArray(
|
|
14
|
+
export function emitArray(schema, path, issues, emitChild, dialect) {
|
|
15
|
+
const item = schema.item;
|
|
15
16
|
path.push("items");
|
|
16
17
|
const emitted = emitChild(item, path, issues, dialect);
|
|
17
18
|
if (emitted === undefined) {
|
|
@@ -20,17 +21,38 @@ export function emitArray(item, path, issues, emitChild, dialect) {
|
|
|
20
21
|
return undefined;
|
|
21
22
|
}
|
|
22
23
|
path.pop();
|
|
23
|
-
|
|
24
|
+
const result = {
|
|
24
25
|
type: "array",
|
|
25
26
|
items: emitted
|
|
26
27
|
};
|
|
28
|
+
const checks = schema.checks;
|
|
29
|
+
for (let index = 0; index < checks.length; index += 1) {
|
|
30
|
+
const check = checks[index];
|
|
31
|
+
if (check === undefined) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
switch (check.tag) {
|
|
35
|
+
case ArrayCheckTag.Min:
|
|
36
|
+
result.minItems = result.minItems === undefined
|
|
37
|
+
? check.value
|
|
38
|
+
: Math.max(result.minItems, check.value);
|
|
39
|
+
break;
|
|
40
|
+
case ArrayCheckTag.Max:
|
|
41
|
+
result.maxItems = result.maxItems === undefined
|
|
42
|
+
? check.value
|
|
43
|
+
: Math.min(result.maxItems, check.value);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
27
48
|
}
|
|
28
49
|
/**
|
|
29
50
|
* @brief emit tuple.
|
|
30
51
|
* @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
|
|
31
52
|
* report a structured export issue.
|
|
32
53
|
*/
|
|
33
|
-
export function emitTuple(
|
|
54
|
+
export function emitTuple(schema, path, issues, emitChild, dialect) {
|
|
55
|
+
const items = schema.items;
|
|
34
56
|
const emitted = new Array(items.length);
|
|
35
57
|
let failed = false;
|
|
36
58
|
for (let index = 0; index < items.length; index += 1) {
|
|
@@ -52,21 +74,41 @@ export function emitTuple(items, path, issues, emitChild, dialect) {
|
|
|
52
74
|
if (failed) {
|
|
53
75
|
return undefined;
|
|
54
76
|
}
|
|
77
|
+
let restSchema;
|
|
78
|
+
if (schema.rest !== undefined) {
|
|
79
|
+
path.push("rest");
|
|
80
|
+
restSchema = emitChild(schema.rest, path, issues, dialect);
|
|
81
|
+
if (restSchema === undefined) {
|
|
82
|
+
pushJsonSchemaIssue(path, issues, "unsupported_child", "Tuple rest schema is unsupported");
|
|
83
|
+
path.pop();
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
path.pop();
|
|
87
|
+
}
|
|
55
88
|
if (dialect === "2020-12") {
|
|
56
|
-
|
|
89
|
+
const result = {
|
|
57
90
|
type: "array",
|
|
58
91
|
prefixItems: emitted,
|
|
59
|
-
minItems: items.length
|
|
60
|
-
maxItems: items.length
|
|
92
|
+
minItems: items.length
|
|
61
93
|
};
|
|
94
|
+
if (restSchema === undefined) {
|
|
95
|
+
result.maxItems = items.length;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
result.items = restSchema;
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
62
101
|
}
|
|
63
|
-
|
|
102
|
+
const result = {
|
|
64
103
|
type: "array",
|
|
65
104
|
items: emitted,
|
|
66
|
-
additionalItems: false,
|
|
67
|
-
minItems: items.length
|
|
68
|
-
maxItems: items.length
|
|
105
|
+
additionalItems: restSchema ?? false,
|
|
106
|
+
minItems: items.length
|
|
69
107
|
};
|
|
108
|
+
if (restSchema === undefined) {
|
|
109
|
+
result.maxItems = items.length;
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
70
112
|
}
|
|
71
113
|
/**
|
|
72
114
|
* @brief emit record.
|
|
@@ -119,10 +161,22 @@ export function emitObject(schema, path, issues, emitChild, dialect) {
|
|
|
119
161
|
if (failed) {
|
|
120
162
|
return undefined;
|
|
121
163
|
}
|
|
164
|
+
let additionalProperties = schema.mode !== ObjectModeTag.Strict;
|
|
165
|
+
if (schema.catchall !== undefined) {
|
|
166
|
+
path.push("additionalProperties");
|
|
167
|
+
const emittedCatchall = emitChild(schema.catchall, path, issues, dialect);
|
|
168
|
+
if (emittedCatchall === undefined) {
|
|
169
|
+
pushJsonSchemaIssue(path, issues, "unsupported_child", "Object catchall schema is unsupported");
|
|
170
|
+
path.pop();
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
path.pop();
|
|
174
|
+
additionalProperties = emittedCatchall;
|
|
175
|
+
}
|
|
122
176
|
const result = {
|
|
123
177
|
type: "object",
|
|
124
178
|
properties,
|
|
125
|
-
additionalProperties
|
|
179
|
+
additionalProperties
|
|
126
180
|
};
|
|
127
181
|
if (required.length !== 0) {
|
|
128
182
|
result.required = required;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-scalar.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit-scalar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEH,SAAS,EAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"emit-scalar.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit-scalar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEH,SAAS,EAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAMH,KAAK,YAAY,EACjB,KAAK,MAAM,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACR,UAAU,EACV,qBAAqB,EAExB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC,MAAM,CAAA;CAAE,CAAC,EAClE,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,GAChC,UAAU,CAiEZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,SAAS,CAAC,MAAM,CAAA;CAAE,CAAC,EAClE,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,GAChC,UAAU,GAAG,SAAS,CA8DxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,GAChC,UAAU,GAAG,SAAS,CAyBxB"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* report a structured export issue.
|
|
6
6
|
*/
|
|
7
7
|
import { NumberCheckTag, SchemaTag, StringCheckTag } from "../kind/index.js";
|
|
8
|
-
import { UUID_PATTERN } from "../schema/index.js";
|
|
8
|
+
import { IPV4_PATTERN, IPV6_PATTERN, ISO_DATETIME_PATTERN, ISO_DATE_PATTERN, UUID_PATTERN } from "../schema/index.js";
|
|
9
9
|
import { pushJsonSchemaIssue } from "./issue.js";
|
|
10
10
|
/**
|
|
11
11
|
* @brief Emit TypeSea string checks into JSON Schema string keywords.
|
|
@@ -49,6 +49,31 @@ export function emitString(schema, path, issues) {
|
|
|
49
49
|
result.format = "uuid";
|
|
50
50
|
patterns.push(UUID_PATTERN.source);
|
|
51
51
|
break;
|
|
52
|
+
case StringCheckTag.Email:
|
|
53
|
+
result.format = "email";
|
|
54
|
+
break;
|
|
55
|
+
case StringCheckTag.Url:
|
|
56
|
+
result.format = "uri";
|
|
57
|
+
break;
|
|
58
|
+
case StringCheckTag.IsoDate:
|
|
59
|
+
result.format = "date";
|
|
60
|
+
patterns.push(ISO_DATE_PATTERN.source);
|
|
61
|
+
break;
|
|
62
|
+
case StringCheckTag.IsoDateTime:
|
|
63
|
+
result.format = "date-time";
|
|
64
|
+
patterns.push(ISO_DATETIME_PATTERN.source);
|
|
65
|
+
break;
|
|
66
|
+
case StringCheckTag.Ulid:
|
|
67
|
+
patterns.push("^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$");
|
|
68
|
+
break;
|
|
69
|
+
case StringCheckTag.Ipv4:
|
|
70
|
+
result.format = "ipv4";
|
|
71
|
+
patterns.push(IPV4_PATTERN.source);
|
|
72
|
+
break;
|
|
73
|
+
case StringCheckTag.Ipv6:
|
|
74
|
+
result.format = "ipv6";
|
|
75
|
+
patterns.push(IPV6_PATTERN.source);
|
|
76
|
+
break;
|
|
52
77
|
}
|
|
53
78
|
}
|
|
54
79
|
appendStringPatterns(result, patterns);
|
|
@@ -97,6 +122,34 @@ export function emitNumber(schema, path, issues) {
|
|
|
97
122
|
: Math.min(result.maximum, check.value);
|
|
98
123
|
}
|
|
99
124
|
break;
|
|
125
|
+
case NumberCheckTag.Gt:
|
|
126
|
+
if (!Number.isFinite(check.value)) {
|
|
127
|
+
pushJsonSchemaIssue(path, issues, "unsupported_number_bound", "Number bounds must be finite");
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
result.exclusiveMinimum = result.exclusiveMinimum === undefined
|
|
131
|
+
? check.value
|
|
132
|
+
: Math.max(result.exclusiveMinimum, check.value);
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
135
|
+
case NumberCheckTag.Lt:
|
|
136
|
+
if (!Number.isFinite(check.value)) {
|
|
137
|
+
pushJsonSchemaIssue(path, issues, "unsupported_number_bound", "Number bounds must be finite");
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
result.exclusiveMaximum = result.exclusiveMaximum === undefined
|
|
141
|
+
? check.value
|
|
142
|
+
: Math.min(result.exclusiveMaximum, check.value);
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case NumberCheckTag.MultipleOf:
|
|
146
|
+
if (!Number.isFinite(check.value) || check.value <= 0) {
|
|
147
|
+
pushJsonSchemaIssue(path, issues, "unsupported_number_bound", "multipleOf must be positive and finite");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
result.multipleOf = result.multipleOf ?? check.value;
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
100
153
|
}
|
|
101
154
|
}
|
|
102
155
|
if (issues.length !== before) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmBjD,OAAO,KAAK,EACR,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACxB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/json-schema/emit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmBjD,OAAO,KAAK,EACR,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACxB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,OAAO,EAAE,iBAAiB,GAC3B,UAAU,GAAG,SAAS,CAyExB"}
|
package/dist/json-schema/emit.js
CHANGED
|
@@ -31,6 +31,9 @@ export function emitSchema(schema, path, issues, dialect) {
|
|
|
31
31
|
return emitString(schema, path, issues);
|
|
32
32
|
case SchemaTag.Number:
|
|
33
33
|
return emitNumber(schema, path, issues);
|
|
34
|
+
case SchemaTag.Date:
|
|
35
|
+
pushJsonSchemaIssue(path, issues, "unsupported_date", "JSON Schema cannot represent JavaScript Date objects");
|
|
36
|
+
return undefined;
|
|
34
37
|
case SchemaTag.BigInt:
|
|
35
38
|
pushJsonSchemaIssue(path, issues, "unsupported_bigint", "JSON Schema has no bigint type");
|
|
36
39
|
return undefined;
|
|
@@ -42,11 +45,17 @@ export function emitSchema(schema, path, issues, dialect) {
|
|
|
42
45
|
case SchemaTag.Literal:
|
|
43
46
|
return emitLiteral(schema.value, path, issues);
|
|
44
47
|
case SchemaTag.Array:
|
|
45
|
-
return emitArray(schema
|
|
48
|
+
return emitArray(schema, path, issues, emitSchema, dialect);
|
|
46
49
|
case SchemaTag.Tuple:
|
|
47
|
-
return emitTuple(schema
|
|
50
|
+
return emitTuple(schema, path, issues, emitSchema, dialect);
|
|
48
51
|
case SchemaTag.Record:
|
|
49
52
|
return emitRecord(schema.value, path, issues, emitSchema, dialect);
|
|
53
|
+
case SchemaTag.Map:
|
|
54
|
+
case SchemaTag.Set:
|
|
55
|
+
case SchemaTag.InstanceOf:
|
|
56
|
+
case SchemaTag.Property:
|
|
57
|
+
pushJsonSchemaIssue(path, issues, "unsupported_runtime_object", "JSON Schema cannot preserve this JavaScript runtime object contract");
|
|
58
|
+
return undefined;
|
|
50
59
|
case SchemaTag.Object:
|
|
51
60
|
return emitObject(schema, path, issues, emitSchema, dialect);
|
|
52
61
|
case SchemaTag.Union:
|
|
@@ -46,6 +46,9 @@ export interface JsonSchemaObject {
|
|
|
46
46
|
readonly maxLength?: number;
|
|
47
47
|
readonly minimum?: number;
|
|
48
48
|
readonly maximum?: number;
|
|
49
|
+
readonly exclusiveMinimum?: number;
|
|
50
|
+
readonly exclusiveMaximum?: number;
|
|
51
|
+
readonly multipleOf?: number;
|
|
49
52
|
readonly items?: JsonSchema | readonly JsonSchema[];
|
|
50
53
|
/**
|
|
51
54
|
* @brief Draft-07 tuple tail schema for values past fixed positions.
|
|
@@ -68,7 +71,7 @@ export interface JsonSchemaObject {
|
|
|
68
71
|
* @details Codes are stable machine-readable diagnostics. The human message may
|
|
69
72
|
* change, but adapter logic can branch on these strings.
|
|
70
73
|
*/
|
|
71
|
-
export type JsonSchemaExportCode = "unsupported_bigint" | "unsupported_symbol" | "unsupported_undefined" | "unsupported_number_literal" | "unsupported_number_bound" | "unsupported_regex_flags" | "unsupported_lazy" | "unsupported_refine" | "unsupported_decoder" | "unsupported_async_decoder" | "unsupported_child";
|
|
74
|
+
export type JsonSchemaExportCode = "unsupported_bigint" | "unsupported_symbol" | "unsupported_date" | "unsupported_runtime_object" | "unsupported_undefined" | "unsupported_number_literal" | "unsupported_number_bound" | "unsupported_regex_flags" | "unsupported_lazy" | "unsupported_refine" | "unsupported_decoder" | "unsupported_async_decoder" | "unsupported_child";
|
|
72
75
|
/**
|
|
73
76
|
* @brief Structured diagnostic produced when export would lose semantics.
|
|
74
77
|
* @details Paths point into the TypeSea schema tree, not the emitted JSON
|
|
@@ -109,6 +112,9 @@ export interface MutableJsonSchemaObject {
|
|
|
109
112
|
maxLength?: number;
|
|
110
113
|
minimum?: number;
|
|
111
114
|
maximum?: number;
|
|
115
|
+
exclusiveMinimum?: number;
|
|
116
|
+
exclusiveMaximum?: number;
|
|
117
|
+
multipleOf?: number;
|
|
112
118
|
items?: JsonSchema | readonly JsonSchema[];
|
|
113
119
|
/**
|
|
114
120
|
* @brief Draft-07 tuple tail schema for values past fixed positions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/json-schema/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/json-schema/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GACxB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AAEf;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACvB,UAAU,GACV,SAAS,CAAC;AAEhB;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAAC;IAEpD;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC1B,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,4BAA4B,GAC5B,uBAAuB,GACvB,4BAA4B,GAC5B,0BAA0B,GAC1B,yBAAyB,GACzB,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,2BAA2B,GAC3B,mBAAmB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;IAC1D,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAAC;IAE3C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC"}
|