anyvali 0.3.1
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 +44 -0
- package/README.md +370 -0
- package/VERSION +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -0
- package/dist/format/validators.d.ts +2 -0
- package/dist/format/validators.d.ts.map +1 -0
- package/dist/format/validators.js +57 -0
- package/dist/format/validators.js.map +1 -0
- package/dist/forms/index.d.ts +57 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +586 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/dist/infer.d.ts +8 -0
- package/dist/infer.d.ts.map +1 -0
- package/dist/infer.js +2 -0
- package/dist/infer.js.map +1 -0
- package/dist/interchange/document.d.ts +5 -0
- package/dist/interchange/document.d.ts.map +1 -0
- package/dist/interchange/document.js +12 -0
- package/dist/interchange/document.js.map +1 -0
- package/dist/interchange/exporter.d.ts +7 -0
- package/dist/interchange/exporter.d.ts.map +1 -0
- package/dist/interchange/exporter.js +7 -0
- package/dist/interchange/exporter.js.map +1 -0
- package/dist/interchange/importer.d.ts +4 -0
- package/dist/interchange/importer.d.ts.map +1 -0
- package/dist/interchange/importer.js +229 -0
- package/dist/interchange/importer.js.map +1 -0
- package/dist/issue-codes.d.ts +19 -0
- package/dist/issue-codes.d.ts.map +1 -0
- package/dist/issue-codes.js +18 -0
- package/dist/issue-codes.js.map +1 -0
- package/dist/parse/coerce.d.ts +16 -0
- package/dist/parse/coerce.d.ts.map +1 -0
- package/dist/parse/coerce.js +115 -0
- package/dist/parse/coerce.js.map +1 -0
- package/dist/parse/defaults.d.ts +7 -0
- package/dist/parse/defaults.d.ts.map +1 -0
- package/dist/parse/defaults.js +12 -0
- package/dist/parse/defaults.js.map +1 -0
- package/dist/parse/parser.d.ts +11 -0
- package/dist/parse/parser.d.ts.map +1 -0
- package/dist/parse/parser.js +13 -0
- package/dist/parse/parser.js.map +1 -0
- package/dist/schemas/any.d.ts +7 -0
- package/dist/schemas/any.d.ts.map +1 -0
- package/dist/schemas/any.js +12 -0
- package/dist/schemas/any.js.map +1 -0
- package/dist/schemas/array.d.ts +13 -0
- package/dist/schemas/array.d.ts.map +1 -0
- package/dist/schemas/array.js +73 -0
- package/dist/schemas/array.js.map +1 -0
- package/dist/schemas/base.d.ts +37 -0
- package/dist/schemas/base.d.ts.map +1 -0
- package/dist/schemas/base.js +285 -0
- package/dist/schemas/base.js.map +1 -0
- package/dist/schemas/bool.d.ts +8 -0
- package/dist/schemas/bool.d.ts.map +1 -0
- package/dist/schemas/bool.js +27 -0
- package/dist/schemas/bool.js.map +1 -0
- package/dist/schemas/enum.d.ts +9 -0
- package/dist/schemas/enum.d.ts.map +1 -0
- package/dist/schemas/enum.js +31 -0
- package/dist/schemas/enum.js.map +1 -0
- package/dist/schemas/index.d.ts +21 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +21 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/int.d.ts +32 -0
- package/dist/schemas/int.d.ts.map +1 -0
- package/dist/schemas/int.js +108 -0
- package/dist/schemas/int.js.map +1 -0
- package/dist/schemas/intersection.d.ts +16 -0
- package/dist/schemas/intersection.d.ts.map +1 -0
- package/dist/schemas/intersection.js +58 -0
- package/dist/schemas/intersection.js.map +1 -0
- package/dist/schemas/literal.d.ts +11 -0
- package/dist/schemas/literal.d.ts.map +1 -0
- package/dist/schemas/literal.js +28 -0
- package/dist/schemas/literal.js.map +1 -0
- package/dist/schemas/never.d.ts +7 -0
- package/dist/schemas/never.d.ts.map +1 -0
- package/dist/schemas/never.js +19 -0
- package/dist/schemas/never.js.map +1 -0
- package/dist/schemas/null.d.ts +7 -0
- package/dist/schemas/null.d.ts.map +1 -0
- package/dist/schemas/null.js +24 -0
- package/dist/schemas/null.js.map +1 -0
- package/dist/schemas/nullable.d.ts +10 -0
- package/dist/schemas/nullable.d.ts.map +1 -0
- package/dist/schemas/nullable.js +29 -0
- package/dist/schemas/nullable.js.map +1 -0
- package/dist/schemas/number.d.ts +27 -0
- package/dist/schemas/number.d.ts.map +1 -0
- package/dist/schemas/number.js +134 -0
- package/dist/schemas/number.js.map +1 -0
- package/dist/schemas/object.d.ts +28 -0
- package/dist/schemas/object.d.ts.map +1 -0
- package/dist/schemas/object.js +153 -0
- package/dist/schemas/object.js.map +1 -0
- package/dist/schemas/optional.d.ts +11 -0
- package/dist/schemas/optional.d.ts.map +1 -0
- package/dist/schemas/optional.js +39 -0
- package/dist/schemas/optional.js.map +1 -0
- package/dist/schemas/record.d.ts +9 -0
- package/dist/schemas/record.d.ts.map +1 -0
- package/dist/schemas/record.js +45 -0
- package/dist/schemas/record.js.map +1 -0
- package/dist/schemas/ref.d.ts +10 -0
- package/dist/schemas/ref.d.ts.map +1 -0
- package/dist/schemas/ref.js +30 -0
- package/dist/schemas/ref.js.map +1 -0
- package/dist/schemas/string.d.ts +29 -0
- package/dist/schemas/string.d.ts.map +1 -0
- package/dist/schemas/string.js +181 -0
- package/dist/schemas/string.js.map +1 -0
- package/dist/schemas/tuple.d.ts +14 -0
- package/dist/schemas/tuple.d.ts.map +1 -0
- package/dist/schemas/tuple.js +59 -0
- package/dist/schemas/tuple.js.map +1 -0
- package/dist/schemas/union.d.ts +9 -0
- package/dist/schemas/union.d.ts.map +1 -0
- package/dist/schemas/union.js +45 -0
- package/dist/schemas/union.js.map +1 -0
- package/dist/schemas/unknown.d.ts +7 -0
- package/dist/schemas/unknown.d.ts.map +1 -0
- package/dist/schemas/unknown.js +12 -0
- package/dist/schemas/unknown.js.map +1 -0
- package/dist/types.d.ts +132 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +12 -0
- package/dist/util.js.map +1 -0
- package/package.json +41 -0
- package/sdk/js/CHANGELOG.md +13 -0
- package/src/errors.ts +17 -0
- package/src/format/validators.ts +71 -0
- package/src/forms/index.ts +789 -0
- package/src/index.ts +285 -0
- package/src/infer.ts +12 -0
- package/src/interchange/document.ts +18 -0
- package/src/interchange/exporter.ts +12 -0
- package/src/interchange/importer.ts +285 -0
- package/src/issue-codes.ts +19 -0
- package/src/parse/coerce.ts +133 -0
- package/src/parse/defaults.ts +15 -0
- package/src/parse/parser.ts +19 -0
- package/src/schemas/any.ts +14 -0
- package/src/schemas/array.ts +83 -0
- package/src/schemas/base.ts +322 -0
- package/src/schemas/bool.ts +30 -0
- package/src/schemas/enum.ts +37 -0
- package/src/schemas/index.ts +30 -0
- package/src/schemas/int.ts +129 -0
- package/src/schemas/intersection.ts +81 -0
- package/src/schemas/literal.ts +34 -0
- package/src/schemas/never.ts +21 -0
- package/src/schemas/null.ts +26 -0
- package/src/schemas/nullable.ts +36 -0
- package/src/schemas/number.ts +151 -0
- package/src/schemas/object.ts +203 -0
- package/src/schemas/optional.ts +49 -0
- package/src/schemas/record.ts +55 -0
- package/src/schemas/ref.ts +35 -0
- package/src/schemas/string.ts +192 -0
- package/src/schemas/tuple.ts +74 -0
- package/src/schemas/union.ts +53 -0
- package/src/schemas/unknown.ts +14 -0
- package/src/types.ts +239 -0
- package/src/util.ts +9 -0
- package/tests/conformance/runner.test.ts +28 -0
- package/tests/conformance/runner.ts +137 -0
- package/tests/forms.test.ts +146 -0
- package/tests/unit/coerce.test.ts +136 -0
- package/tests/unit/collections.test.ts +99 -0
- package/tests/unit/composition.test.ts +80 -0
- package/tests/unit/date-format.test.ts +18 -0
- package/tests/unit/default-mutation.test.ts +32 -0
- package/tests/unit/defaults.test.ts +49 -0
- package/tests/unit/errors.test.ts +53 -0
- package/tests/unit/export.test.ts +270 -0
- package/tests/unit/inference.test.ts +306 -0
- package/tests/unit/interchange.test.ts +191 -0
- package/tests/unit/number.test.ts +195 -0
- package/tests/unit/object.test.ts +208 -0
- package/tests/unit/parser.test.ts +151 -0
- package/tests/unit/primitives.test.ts +111 -0
- package/tests/unit/security-recursion.test.ts +105 -0
- package/tests/unit/security.test.ts +945 -0
- package/tests/unit/shared-ref-falsepos.test.ts +33 -0
- package/tests/unit/string-pattern-redos.test.ts +46 -0
- package/tests/unit/string.test.ts +147 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
export class IntersectionSchema extends BaseSchema {
|
|
3
|
+
_schemas;
|
|
4
|
+
constructor(schemas) {
|
|
5
|
+
super();
|
|
6
|
+
this._schemas = schemas;
|
|
7
|
+
}
|
|
8
|
+
_validate(input, ctx) {
|
|
9
|
+
let result = input;
|
|
10
|
+
let anyFailed = false;
|
|
11
|
+
for (const schema of this._schemas) {
|
|
12
|
+
const innerCtx = {
|
|
13
|
+
path: [...ctx.path],
|
|
14
|
+
issues: [],
|
|
15
|
+
// Propagate recursion depth and circular-reference tracking so the
|
|
16
|
+
// depth guard is not reset (and bypassed) at each intersection member.
|
|
17
|
+
definitions: ctx.definitions,
|
|
18
|
+
seen: ctx.seen,
|
|
19
|
+
depth: ctx.depth,
|
|
20
|
+
};
|
|
21
|
+
const validated = schema._runPipeline(input, innerCtx);
|
|
22
|
+
if (innerCtx.issues.length > 0) {
|
|
23
|
+
ctx.issues.push(...innerCtx.issues);
|
|
24
|
+
anyFailed = true;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Merge object results
|
|
28
|
+
if (typeof result === "object" &&
|
|
29
|
+
result !== null &&
|
|
30
|
+
typeof validated === "object" &&
|
|
31
|
+
validated !== null &&
|
|
32
|
+
!Array.isArray(result) &&
|
|
33
|
+
!Array.isArray(validated)) {
|
|
34
|
+
result = {
|
|
35
|
+
...result,
|
|
36
|
+
...validated,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
result = validated;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (anyFailed) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
_toNode() {
|
|
50
|
+
const node = {
|
|
51
|
+
kind: "intersection",
|
|
52
|
+
allOf: this._schemas.map((s) => s._toNode()),
|
|
53
|
+
};
|
|
54
|
+
this._addDefault(node);
|
|
55
|
+
return node;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=intersection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersection.js","sourceRoot":"","sources":["../../src/schemas/intersection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAYvC,MAAM,OAAO,kBAEX,SAAQ,UAGT;IACS,QAAQ,CAAI;IAEpB,YAAY,OAAe;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAY,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,MAAM,GAAY,KAAK,CAAC;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAiB;gBAC7B,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnB,MAAM,EAAE,EAAE;gBACV,mEAAmE;gBACnE,uEAAuE;gBACvE,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEvD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpC,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,IACE,OAAO,MAAM,KAAK,QAAQ;oBAC1B,MAAM,KAAK,IAAI;oBACf,OAAO,SAAS,KAAK,QAAQ;oBAC7B,SAAS,KAAK,IAAI;oBAClB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;oBACtB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EACzB,CAAC;oBACD,MAAM,GAAG;wBACP,GAAI,MAAkC;wBACtC,GAAI,SAAqC;qBAC1C,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,SAAS,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,cAAuB;YAC7B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7C,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAA6B,CAAC,CAAC;QAChD,OAAO,IAA6B,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
type LiteralValue = string | number | boolean | null;
|
|
4
|
+
export declare class LiteralSchema<T extends LiteralValue> extends BaseSchema<T, T> {
|
|
5
|
+
private _value;
|
|
6
|
+
constructor(value: T);
|
|
7
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
8
|
+
_toNode(): SchemaNode;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/schemas/literal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAErD,qBAAa,aAAa,CAAC,CAAC,SAAS,YAAY,CAAE,SAAQ,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAI;gBAEN,KAAK,EAAE,CAAC;IAKpB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAcrD,OAAO,IAAI,UAAU;CAKtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
export class LiteralSchema extends BaseSchema {
|
|
4
|
+
_value;
|
|
5
|
+
constructor(value) {
|
|
6
|
+
super();
|
|
7
|
+
this._value = value;
|
|
8
|
+
}
|
|
9
|
+
_validate(input, ctx) {
|
|
10
|
+
if (input !== this._value) {
|
|
11
|
+
ctx.issues.push({
|
|
12
|
+
code: ISSUE_CODES.INVALID_LITERAL,
|
|
13
|
+
message: `Expected literal ${String(this._value)}, received ${String(input)}`,
|
|
14
|
+
path: [...ctx.path],
|
|
15
|
+
expected: String(this._value),
|
|
16
|
+
received: String(input),
|
|
17
|
+
});
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return input;
|
|
21
|
+
}
|
|
22
|
+
_toNode() {
|
|
23
|
+
const node = { kind: "literal", value: this._value };
|
|
24
|
+
this._addDefault(node);
|
|
25
|
+
return node;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=literal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/schemas/literal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,OAAO,aAAsC,SAAQ,UAAgB;IACjE,MAAM,CAAI;IAElB,YAAY,KAAQ;QAClB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,WAAW,CAAC,eAAe;gBACjC,OAAO,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC7E,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;aACxB,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,IAA6B,CAAC,CAAC;QAChD,OAAO,IAA6B,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class NeverSchema extends BaseSchema<never, never> {
|
|
4
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
5
|
+
_toNode(): SchemaNode;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=never.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"never.d.ts","sourceRoot":"","sources":["../../src/schemas/never.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,qBAAa,WAAY,SAAQ,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IACvD,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAWrD,OAAO,IAAI,UAAU;CAGtB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
export class NeverSchema extends BaseSchema {
|
|
5
|
+
_validate(input, ctx) {
|
|
6
|
+
ctx.issues.push({
|
|
7
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
8
|
+
message: `Expected never (no value is valid)`,
|
|
9
|
+
path: [...ctx.path],
|
|
10
|
+
expected: "never",
|
|
11
|
+
received: describeType(input),
|
|
12
|
+
});
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
_toNode() {
|
|
16
|
+
return { kind: "never" };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=never.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"never.js","sourceRoot":"","sources":["../../src/schemas/never.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,WAAY,SAAQ,UAAwB;IACvD,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,WAAW,CAAC,YAAY;YAC9B,OAAO,EAAE,oCAAoC;YAC7C,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC;SAC9B,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,EAAE,OAAO,EAAgB,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class NullSchema extends BaseSchema<null, null> {
|
|
4
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
5
|
+
_toNode(): SchemaNode;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=null.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../src/schemas/null.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,qBAAa,UAAW,SAAQ,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;IACpD,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAcrD,OAAO,IAAI,UAAU;CAKtB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
export class NullSchema extends BaseSchema {
|
|
5
|
+
_validate(input, ctx) {
|
|
6
|
+
if (input !== null) {
|
|
7
|
+
ctx.issues.push({
|
|
8
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
9
|
+
message: `Expected null, received ${describeType(input)}`,
|
|
10
|
+
path: [...ctx.path],
|
|
11
|
+
expected: "null",
|
|
12
|
+
received: describeType(input),
|
|
13
|
+
});
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
_toNode() {
|
|
19
|
+
const node = { kind: "null" };
|
|
20
|
+
this._addDefault(node);
|
|
21
|
+
return node;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=null.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null.js","sourceRoot":"","sources":["../../src/schemas/null.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,UAAW,SAAQ,UAAsB;IACpD,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,2BAA2B,YAAY,CAAC,KAAK,CAAC,EAAE;gBACzD,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,MAAM,EAAgB,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class NullableSchema<T extends BaseSchema<any, any> = BaseSchema> extends BaseSchema<unknown, T["_output"] | null> {
|
|
4
|
+
/** @internal */ _inner: T;
|
|
5
|
+
constructor(inner: T);
|
|
6
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
7
|
+
_runPipeline(input: unknown, ctx: ParseContext): unknown;
|
|
8
|
+
_toNode(): SchemaNode;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=nullable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nullable.d.ts","sourceRoot":"","sources":["../../src/schemas/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,cAAc,CACzB,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAC3C,SAAQ,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAChD,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;gBAEf,KAAK,EAAE,CAAC;IAKpB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAOrD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAOxD,OAAO,IAAI,UAAU;CAQtB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
export class NullableSchema extends BaseSchema {
|
|
3
|
+
/** @internal */ _inner;
|
|
4
|
+
constructor(inner) {
|
|
5
|
+
super();
|
|
6
|
+
this._inner = inner;
|
|
7
|
+
}
|
|
8
|
+
_validate(input, ctx) {
|
|
9
|
+
if (input === null) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return this._inner._validate(input, ctx);
|
|
13
|
+
}
|
|
14
|
+
_runPipeline(input, ctx) {
|
|
15
|
+
if (input === null) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return this._inner._runPipeline(input, ctx);
|
|
19
|
+
}
|
|
20
|
+
_toNode() {
|
|
21
|
+
const node = {
|
|
22
|
+
kind: "nullable",
|
|
23
|
+
inner: this._inner._toNode(),
|
|
24
|
+
};
|
|
25
|
+
this._addDefault(node);
|
|
26
|
+
return node;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=nullable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nullable.js","sourceRoot":"","sources":["../../src/schemas/nullable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,cAEX,SAAQ,UAAwC;IAChD,gBAAgB,CAAC,MAAM,CAAI;IAE3B,YAAY,KAAQ;QAClB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,KAAc,EAAE,GAAiB;QAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,UAAmB;YACzB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;SAC7B,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAA6B,CAAC,CAAC;QAChD,OAAO,IAA6B,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode, SchemaKind } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class NumberSchema extends BaseSchema<number, number> {
|
|
4
|
+
protected _kind: SchemaKind;
|
|
5
|
+
protected _min?: number;
|
|
6
|
+
protected _max?: number;
|
|
7
|
+
protected _exclusiveMin?: number;
|
|
8
|
+
protected _exclusiveMax?: number;
|
|
9
|
+
protected _multipleOf?: number;
|
|
10
|
+
constructor(kind?: SchemaKind);
|
|
11
|
+
_getCoercionTarget(): string;
|
|
12
|
+
min(n: number): this;
|
|
13
|
+
max(n: number): this;
|
|
14
|
+
exclusiveMin(n: number): this;
|
|
15
|
+
exclusiveMax(n: number): this;
|
|
16
|
+
multipleOf(n: number): this;
|
|
17
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
18
|
+
protected _validateConstraints(val: number, ctx: ParseContext): void;
|
|
19
|
+
_toNode(): SchemaNode;
|
|
20
|
+
}
|
|
21
|
+
export declare class Float32Schema extends NumberSchema {
|
|
22
|
+
constructor();
|
|
23
|
+
}
|
|
24
|
+
export declare class Float64Schema extends NumberSchema {
|
|
25
|
+
constructor();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/schemas/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,qBAAa,YAAa,SAAQ,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1D,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;IAC5B,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEnB,IAAI,GAAE,UAAqB;IAKvC,kBAAkB,IAAI,MAAM;IAI5B,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMpB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMpB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAM7B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAM7B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAgBrD,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI;IA0DpE,OAAO,IAAI,UAAU;CAYtB;AAED,qBAAa,aAAc,SAAQ,YAAY;;CAI9C;AAED,qBAAa,aAAc,SAAQ,YAAY;;CAI9C"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
export class NumberSchema extends BaseSchema {
|
|
5
|
+
_kind;
|
|
6
|
+
_min;
|
|
7
|
+
_max;
|
|
8
|
+
_exclusiveMin;
|
|
9
|
+
_exclusiveMax;
|
|
10
|
+
_multipleOf;
|
|
11
|
+
constructor(kind = "number") {
|
|
12
|
+
super();
|
|
13
|
+
this._kind = kind;
|
|
14
|
+
}
|
|
15
|
+
_getCoercionTarget() {
|
|
16
|
+
return this._kind;
|
|
17
|
+
}
|
|
18
|
+
min(n) {
|
|
19
|
+
const clone = this._clone();
|
|
20
|
+
clone._min = n;
|
|
21
|
+
return clone;
|
|
22
|
+
}
|
|
23
|
+
max(n) {
|
|
24
|
+
const clone = this._clone();
|
|
25
|
+
clone._max = n;
|
|
26
|
+
return clone;
|
|
27
|
+
}
|
|
28
|
+
exclusiveMin(n) {
|
|
29
|
+
const clone = this._clone();
|
|
30
|
+
clone._exclusiveMin = n;
|
|
31
|
+
return clone;
|
|
32
|
+
}
|
|
33
|
+
exclusiveMax(n) {
|
|
34
|
+
const clone = this._clone();
|
|
35
|
+
clone._exclusiveMax = n;
|
|
36
|
+
return clone;
|
|
37
|
+
}
|
|
38
|
+
multipleOf(n) {
|
|
39
|
+
const clone = this._clone();
|
|
40
|
+
clone._multipleOf = n;
|
|
41
|
+
return clone;
|
|
42
|
+
}
|
|
43
|
+
_validate(input, ctx) {
|
|
44
|
+
if (typeof input !== "number" || !Number.isFinite(input)) {
|
|
45
|
+
ctx.issues.push({
|
|
46
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
47
|
+
message: `Expected ${this._kind}, received ${describeType(input)}`,
|
|
48
|
+
path: [...ctx.path],
|
|
49
|
+
expected: this._kind,
|
|
50
|
+
received: describeType(input),
|
|
51
|
+
});
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
this._validateConstraints(input, ctx);
|
|
55
|
+
return input;
|
|
56
|
+
}
|
|
57
|
+
_validateConstraints(val, ctx) {
|
|
58
|
+
if (this._min !== undefined && val < this._min) {
|
|
59
|
+
ctx.issues.push({
|
|
60
|
+
code: ISSUE_CODES.TOO_SMALL,
|
|
61
|
+
message: `Number must be >= ${this._min}`,
|
|
62
|
+
path: [...ctx.path],
|
|
63
|
+
expected: String(this._min),
|
|
64
|
+
received: String(val),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (this._max !== undefined && val > this._max) {
|
|
68
|
+
ctx.issues.push({
|
|
69
|
+
code: ISSUE_CODES.TOO_LARGE,
|
|
70
|
+
message: `Number must be <= ${this._max}`,
|
|
71
|
+
path: [...ctx.path],
|
|
72
|
+
expected: String(this._max),
|
|
73
|
+
received: String(val),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (this._exclusiveMin !== undefined && val <= this._exclusiveMin) {
|
|
77
|
+
ctx.issues.push({
|
|
78
|
+
code: ISSUE_CODES.TOO_SMALL,
|
|
79
|
+
message: `Number must be > ${this._exclusiveMin}`,
|
|
80
|
+
path: [...ctx.path],
|
|
81
|
+
expected: String(this._exclusiveMin),
|
|
82
|
+
received: String(val),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (this._exclusiveMax !== undefined && val >= this._exclusiveMax) {
|
|
86
|
+
ctx.issues.push({
|
|
87
|
+
code: ISSUE_CODES.TOO_LARGE,
|
|
88
|
+
message: `Number must be < ${this._exclusiveMax}`,
|
|
89
|
+
path: [...ctx.path],
|
|
90
|
+
expected: String(this._exclusiveMax),
|
|
91
|
+
received: String(val),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (this._multipleOf !== undefined) {
|
|
95
|
+
const remainder = val % this._multipleOf;
|
|
96
|
+
if (Math.abs(remainder) > 1e-10 &&
|
|
97
|
+
Math.abs(remainder - this._multipleOf) > 1e-10) {
|
|
98
|
+
ctx.issues.push({
|
|
99
|
+
code: ISSUE_CODES.INVALID_NUMBER,
|
|
100
|
+
message: `Number must be a multiple of ${this._multipleOf}`,
|
|
101
|
+
path: [...ctx.path],
|
|
102
|
+
expected: String(this._multipleOf),
|
|
103
|
+
received: String(val),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
_toNode() {
|
|
109
|
+
const node = { kind: this._kind };
|
|
110
|
+
if (this._min !== undefined)
|
|
111
|
+
node.min = this._min;
|
|
112
|
+
if (this._max !== undefined)
|
|
113
|
+
node.max = this._max;
|
|
114
|
+
if (this._exclusiveMin !== undefined)
|
|
115
|
+
node.exclusiveMin = this._exclusiveMin;
|
|
116
|
+
if (this._exclusiveMax !== undefined)
|
|
117
|
+
node.exclusiveMax = this._exclusiveMax;
|
|
118
|
+
if (this._multipleOf !== undefined)
|
|
119
|
+
node.multipleOf = this._multipleOf;
|
|
120
|
+
this._addDefault(node);
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export class Float32Schema extends NumberSchema {
|
|
125
|
+
constructor() {
|
|
126
|
+
super("float32");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export class Float64Schema extends NumberSchema {
|
|
130
|
+
constructor() {
|
|
131
|
+
super("float64");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/schemas/number.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode, UnknownKeyMode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
import type { OptionalSchema } from "./optional.js";
|
|
4
|
+
/** Flatten an intersection into a clean single-level type. */
|
|
5
|
+
type Prettify<T> = {
|
|
6
|
+
[K in keyof T]: T[K];
|
|
7
|
+
} & {};
|
|
8
|
+
/** Map a shape record to its inferred output type, separating required from optional fields. */
|
|
9
|
+
export type InferShape<T extends Record<string, BaseSchema<any, any>>> = Prettify<{
|
|
10
|
+
[K in keyof T as T[K] extends OptionalSchema<any> ? never : K]: T[K]["_output"];
|
|
11
|
+
} & {
|
|
12
|
+
[K in keyof T as T[K] extends OptionalSchema<any> ? K : never]?: T[K]["_output"];
|
|
13
|
+
}>;
|
|
14
|
+
export declare class ObjectSchema<TShape extends Record<string, BaseSchema<any, any>> = Record<string, BaseSchema>> extends BaseSchema<Record<string, unknown>, InferShape<TShape>> {
|
|
15
|
+
private _properties;
|
|
16
|
+
private _unknownKeys;
|
|
17
|
+
private _unknownKeysExplicit;
|
|
18
|
+
constructor(shape: TShape, options?: {
|
|
19
|
+
unknownKeys?: UnknownKeyMode;
|
|
20
|
+
});
|
|
21
|
+
unknownKeys(mode: UnknownKeyMode): ObjectSchema<TShape>;
|
|
22
|
+
private _effectiveUnknownKeys;
|
|
23
|
+
private _exportUnknownKeys;
|
|
24
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
25
|
+
_toNode(): SchemaNode;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/schemas/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,8DAA8D;AAC9D,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD,gGAAgG;AAChG,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAC5C,QAAQ,CACV;KACG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;CAChF,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,GAC7C,CAAC,GACD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;CAC7B,CACF,CAAC;AAOF,qBAAa,YAAY,CACvB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAC1D,MAAM,EACN,UAAU,CACX,CACD,SAAQ,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,oBAAoB,CAAU;gBAGpC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,cAAc,CAAA;KAAE;IAiB5C,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;IAOvD,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kBAAkB;IAI1B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IA+GrD,OAAO,IAAI,UAAU;CAoBtB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { BaseSchema, ABSENT } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
export class ObjectSchema extends BaseSchema {
|
|
5
|
+
_properties;
|
|
6
|
+
_unknownKeys;
|
|
7
|
+
_unknownKeysExplicit;
|
|
8
|
+
constructor(shape, options) {
|
|
9
|
+
super();
|
|
10
|
+
this._properties = new Map();
|
|
11
|
+
this._unknownKeys = options?.unknownKeys ?? "strip";
|
|
12
|
+
this._unknownKeysExplicit = options?.unknownKeys !== undefined;
|
|
13
|
+
for (const [key, schema] of Object.entries(shape)) {
|
|
14
|
+
// Check if the schema is an OptionalSchema wrapper
|
|
15
|
+
const isOptional = schema._isOptionalWrapper === true;
|
|
16
|
+
this._properties.set(key, {
|
|
17
|
+
schema,
|
|
18
|
+
required: !isOptional,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
unknownKeys(mode) {
|
|
23
|
+
const clone = this._clone();
|
|
24
|
+
clone._unknownKeys = mode;
|
|
25
|
+
clone._unknownKeysExplicit = true;
|
|
26
|
+
return clone;
|
|
27
|
+
}
|
|
28
|
+
_effectiveUnknownKeys() {
|
|
29
|
+
return this._unknownKeysExplicit ? this._unknownKeys : "strip";
|
|
30
|
+
}
|
|
31
|
+
_exportUnknownKeys() {
|
|
32
|
+
return this._unknownKeysExplicit ? this._unknownKeys : "strip";
|
|
33
|
+
}
|
|
34
|
+
_validate(input, ctx) {
|
|
35
|
+
if (typeof input !== "object" || input === null || Array.isArray(input)) {
|
|
36
|
+
ctx.issues.push({
|
|
37
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
38
|
+
message: `Expected object, received ${describeType(input)}`,
|
|
39
|
+
path: [...ctx.path],
|
|
40
|
+
expected: "object",
|
|
41
|
+
received: describeType(input),
|
|
42
|
+
});
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
// Circular reference detection
|
|
46
|
+
if (!ctx.seen)
|
|
47
|
+
ctx.seen = new WeakSet();
|
|
48
|
+
if (ctx.seen.has(input)) {
|
|
49
|
+
ctx.issues.push({
|
|
50
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
51
|
+
message: "Circular reference detected",
|
|
52
|
+
path: [...ctx.path],
|
|
53
|
+
expected: "object",
|
|
54
|
+
received: "circular",
|
|
55
|
+
});
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
ctx.seen.add(input);
|
|
59
|
+
const obj = input;
|
|
60
|
+
const result = Object.create(null);
|
|
61
|
+
const inputKeys = new Set(Object.keys(obj));
|
|
62
|
+
// Detect __proto__ via hasOwnProperty (Object.keys skips it)
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(obj, "__proto__")) {
|
|
64
|
+
inputKeys.add("__proto__");
|
|
65
|
+
}
|
|
66
|
+
// Validate declared properties
|
|
67
|
+
for (const [key, prop] of this._properties) {
|
|
68
|
+
ctx.path.push(key);
|
|
69
|
+
const hasKey = Object.prototype.hasOwnProperty.call(obj, key);
|
|
70
|
+
inputKeys.delete(key);
|
|
71
|
+
if (!hasKey) {
|
|
72
|
+
// Check if required
|
|
73
|
+
if (prop.required && prop.schema._defaultValue === ABSENT) {
|
|
74
|
+
const expectedKind = prop.schema._toNode().kind;
|
|
75
|
+
ctx.issues.push({
|
|
76
|
+
code: ISSUE_CODES.REQUIRED,
|
|
77
|
+
message: `Required property "${key}" is missing`,
|
|
78
|
+
path: [...ctx.path],
|
|
79
|
+
expected: expectedKind,
|
|
80
|
+
received: "undefined",
|
|
81
|
+
});
|
|
82
|
+
ctx.path.pop();
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const rawValue = hasKey ? obj[key] : undefined;
|
|
87
|
+
const val = prop.schema._runPipeline(rawValue, ctx);
|
|
88
|
+
// Only include in result if value is not undefined or it was explicitly present
|
|
89
|
+
if (val !== undefined || hasKey || prop.schema._defaultValue !== ABSENT) {
|
|
90
|
+
Object.defineProperty(result, key, {
|
|
91
|
+
value: val,
|
|
92
|
+
writable: true,
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: true,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
ctx.path.pop();
|
|
98
|
+
}
|
|
99
|
+
// Handle unknown keys
|
|
100
|
+
for (const key of inputKeys) {
|
|
101
|
+
switch (this._effectiveUnknownKeys()) {
|
|
102
|
+
case "reject":
|
|
103
|
+
ctx.issues.push({
|
|
104
|
+
code: ISSUE_CODES.UNKNOWN_KEY,
|
|
105
|
+
message: `Unknown key "${key}"`,
|
|
106
|
+
path: [...ctx.path, key],
|
|
107
|
+
expected: "undefined",
|
|
108
|
+
received: key,
|
|
109
|
+
});
|
|
110
|
+
break;
|
|
111
|
+
case "allow":
|
|
112
|
+
Object.defineProperty(result, key, {
|
|
113
|
+
value: obj[key],
|
|
114
|
+
writable: true,
|
|
115
|
+
enumerable: true,
|
|
116
|
+
configurable: true,
|
|
117
|
+
});
|
|
118
|
+
break;
|
|
119
|
+
case "strip":
|
|
120
|
+
// Just ignore it
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Remove from the ancestor set now that this subtree is fully processed.
|
|
125
|
+
// The guard tracks the current ancestor chain (true cycles), not every
|
|
126
|
+
// object ever seen — otherwise a shared/repeated non-circular reference in
|
|
127
|
+
// sibling positions would be falsely rejected as circular.
|
|
128
|
+
ctx.seen.delete(input);
|
|
129
|
+
// Restore normal prototype so result behaves like a standard object
|
|
130
|
+
// while preventing __proto__ pollution via Object.create(null) above
|
|
131
|
+
Object.setPrototypeOf(result, Object.prototype);
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
_toNode() {
|
|
135
|
+
const properties = {};
|
|
136
|
+
const required = [];
|
|
137
|
+
for (const [key, prop] of this._properties) {
|
|
138
|
+
properties[key] = prop.schema._toNode();
|
|
139
|
+
if (prop.required) {
|
|
140
|
+
required.push(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const node = {
|
|
144
|
+
kind: "object",
|
|
145
|
+
properties,
|
|
146
|
+
required,
|
|
147
|
+
unknownKeys: this._exportUnknownKeys(),
|
|
148
|
+
};
|
|
149
|
+
this._addDefault(node);
|
|
150
|
+
return node;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/schemas/object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class OptionalSchema<T extends BaseSchema<any, any> = BaseSchema> extends BaseSchema<unknown, T["_output"] | undefined> {
|
|
4
|
+
/** @internal */ _inner: T;
|
|
5
|
+
/** @internal */ _isOptionalWrapper: boolean;
|
|
6
|
+
constructor(inner: T);
|
|
7
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
8
|
+
_runPipeline(input: unknown, ctx: ParseContext): unknown;
|
|
9
|
+
_toNode(): SchemaNode;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=optional.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../src/schemas/optional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AAE/C,qBAAa,cAAc,CACzB,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAC3C,SAAQ,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACrD,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3B,gBAAgB,CAAC,kBAAkB,UAAQ;gBAE/B,KAAK,EAAE,CAAC;IAQpB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAOrD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAgBxD,OAAO,IAAI,UAAU;CAQtB"}
|