@gabrielbryk/json-schema-to-zod 2.12.1 → 2.13.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/.github/RELEASE_SETUP.md +120 -0
- package/.github/TOOLING_GUIDE.md +169 -0
- package/.github/dependabot.yml +52 -0
- package/.github/workflows/ci.yml +33 -0
- package/.github/workflows/release.yml +12 -4
- package/.github/workflows/security.yml +40 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.lintstagedrc.json +3 -0
- package/.prettierrc +20 -0
- package/AGENTS.md +7 -0
- package/CHANGELOG.md +7 -4
- package/README.md +9 -9
- package/commitlint.config.js +24 -0
- package/createIndex.ts +4 -4
- package/dist/cli.js +3 -4
- package/dist/core/analyzeSchema.js +28 -5
- package/dist/core/emitZod.js +11 -4
- package/dist/generators/generateBundle.js +67 -92
- package/dist/parsers/parseAllOf.js +11 -12
- package/dist/parsers/parseAnyOf.js +2 -2
- package/dist/parsers/parseArray.js +38 -12
- package/dist/parsers/parseMultipleType.js +2 -2
- package/dist/parsers/parseNumber.js +44 -102
- package/dist/parsers/parseObject.js +136 -443
- package/dist/parsers/parseOneOf.js +57 -110
- package/dist/parsers/parseSchema.js +132 -55
- package/dist/parsers/parseSimpleDiscriminatedOneOf.js +2 -2
- package/dist/parsers/parseString.js +113 -253
- package/dist/types/Types.d.ts +22 -1
- package/dist/types/core/analyzeSchema.d.ts +1 -0
- package/dist/types/generators/generateBundle.d.ts +1 -1
- package/dist/utils/cliTools.js +1 -2
- package/dist/utils/esmEmitter.js +6 -2
- package/dist/utils/extractInlineObject.js +1 -3
- package/dist/utils/jsdocs.js +1 -4
- package/dist/utils/liftInlineObjects.js +76 -15
- package/dist/utils/resolveRef.js +35 -10
- package/dist/utils/schemaRepresentation.js +35 -66
- package/dist/zodToJsonSchema.js +1 -2
- package/docs/IMPROVEMENT-PLAN.md +30 -12
- package/docs/ZOD-V4-RECURSIVE-TYPE-LIMITATIONS.md +70 -25
- package/docs/proposals/allof-required-merging.md +10 -4
- package/docs/proposals/bundle-refactor.md +10 -4
- package/docs/proposals/discriminated-union-with-default.md +18 -14
- package/docs/proposals/inline-object-lifting.md +15 -5
- package/docs/proposals/ref-anchor-support.md +11 -0
- package/output.txt +67 -0
- package/package.json +18 -5
- package/scripts/generateWorkflowSchema.ts +5 -14
- package/scripts/regenerate_bundle.ts +25 -0
- package/tsc_output.txt +542 -0
- package/tsc_output_2.txt +489 -0
|
@@ -1,115 +1,57 @@
|
|
|
1
1
|
import { withMessage } from "../utils/withMessage.js";
|
|
2
2
|
export const parseNumber = (schema) => {
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
const formatMessage = schema.errorMessage?.format;
|
|
4
|
+
const formatParams = formatMessage ? `{ message: ${JSON.stringify(formatMessage)} }` : "";
|
|
5
|
+
const formatMap = {
|
|
6
|
+
int32: { expression: `z.int32(${formatParams})`, type: "z.ZodNumber" },
|
|
7
|
+
uint32: { expression: `z.uint32(${formatParams})`, type: "z.ZodNumber" },
|
|
8
|
+
float32: { expression: `z.float32(${formatParams})`, type: "z.ZodNumber" },
|
|
9
|
+
float64: { expression: `z.float64(${formatParams})`, type: "z.ZodNumber" },
|
|
10
|
+
safeint: { expression: `z.safeint(${formatParams})`, type: "z.ZodNumber" },
|
|
11
|
+
int64: { expression: `z.int64(${formatParams})`, type: "z.ZodBigInt" },
|
|
12
|
+
uint64: { expression: `z.uint64(${formatParams})`, type: "z.ZodBigInt" },
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
opener: ".int(",
|
|
20
|
-
closer: ")",
|
|
21
|
-
messagePrefix: "{ error: ",
|
|
22
|
-
messageCloser: " })",
|
|
23
|
-
}));
|
|
24
|
-
}
|
|
14
|
+
let r = schema.type === "integer" ? "z.int()" : "z.number()";
|
|
15
|
+
let zodType = schema.type === "integer" ? "z.ZodInt" : "z.ZodNumber";
|
|
16
|
+
if (schema.format && formatMap[schema.format]) {
|
|
17
|
+
const mapped = formatMap[schema.format];
|
|
18
|
+
r = mapped.expression;
|
|
19
|
+
zodType = mapped.type;
|
|
25
20
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
21
|
+
r += withMessage(schema, "multipleOf", ({ json }) => ({
|
|
22
|
+
opener: `.multipleOf(${json}`,
|
|
23
|
+
closer: ")",
|
|
24
|
+
messagePrefix: ", { message: ",
|
|
25
|
+
messageCloser: " })",
|
|
26
|
+
}));
|
|
27
|
+
const minimum = schema.minimum;
|
|
28
|
+
const maximum = schema.maximum;
|
|
29
|
+
const exclusiveMinimum = schema.exclusiveMinimum;
|
|
30
|
+
const exclusiveMaximum = schema.exclusiveMaximum;
|
|
31
|
+
const minMessage = schema.errorMessage?.minimum;
|
|
32
|
+
const maxMessage = schema.errorMessage?.maximum;
|
|
33
|
+
const exclMinMessage = schema.errorMessage?.exclusiveMinimum;
|
|
34
|
+
const exclMaxMessage = schema.errorMessage?.exclusiveMaximum;
|
|
35
|
+
if (typeof exclusiveMinimum === "number") {
|
|
36
|
+
r += `.gt(${exclusiveMinimum}${exclMinMessage ? `, { message: ${JSON.stringify(exclMinMessage)} }` : ""})`;
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (r.startsWith("z.number().int(")) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
opener: ".int(",
|
|
47
|
-
closer: ")",
|
|
48
|
-
messagePrefix: "{ error: ",
|
|
49
|
-
messageCloser: " })",
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
opener: `.multipleOf(${json}`,
|
|
54
|
-
closer: ")",
|
|
55
|
-
messagePrefix: ", { error: ",
|
|
56
|
-
messageCloser: " })",
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
if (typeof schema.minimum === "number") {
|
|
60
|
-
if (schema.exclusiveMinimum === true) {
|
|
61
|
-
r += withMessage(schema, "minimum", ({ json }) => ({
|
|
62
|
-
opener: `.gt(${json}`,
|
|
63
|
-
closer: ")",
|
|
64
|
-
messagePrefix: ", { error: ",
|
|
65
|
-
messageCloser: " })",
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
r += withMessage(schema, "minimum", ({ json }) => ({
|
|
70
|
-
opener: `.gte(${json}`,
|
|
71
|
-
closer: ")",
|
|
72
|
-
messagePrefix: ", { error: ",
|
|
73
|
-
messageCloser: " })",
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
38
|
+
else if (exclusiveMinimum === true && typeof minimum === "number") {
|
|
39
|
+
r += `.gt(${minimum}${exclMinMessage ? `, { message: ${JSON.stringify(exclMinMessage)} }` : ""})`;
|
|
76
40
|
}
|
|
77
|
-
else if (typeof
|
|
78
|
-
r +=
|
|
79
|
-
opener: `.gt(${json}`,
|
|
80
|
-
closer: ")",
|
|
81
|
-
messagePrefix: ", { error: ",
|
|
82
|
-
messageCloser: " })",
|
|
83
|
-
}));
|
|
41
|
+
else if (typeof minimum === "number") {
|
|
42
|
+
r += `.min(${minimum}${minMessage ? `, { message: ${JSON.stringify(minMessage)} }` : ""})`;
|
|
84
43
|
}
|
|
85
|
-
if (typeof
|
|
86
|
-
|
|
87
|
-
r += withMessage(schema, "maximum", ({ json }) => ({
|
|
88
|
-
opener: `.lt(${json}`,
|
|
89
|
-
closer: ")",
|
|
90
|
-
messagePrefix: ", { error: ",
|
|
91
|
-
messageCloser: " })",
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
r += withMessage(schema, "maximum", ({ json }) => ({
|
|
96
|
-
opener: `.lte(${json}`,
|
|
97
|
-
closer: ")",
|
|
98
|
-
messagePrefix: ", { error: ",
|
|
99
|
-
messageCloser: " })",
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
44
|
+
if (typeof exclusiveMaximum === "number") {
|
|
45
|
+
r += `.lt(${exclusiveMaximum}${exclMaxMessage ? `, { message: ${JSON.stringify(exclMaxMessage)} }` : ""})`;
|
|
102
46
|
}
|
|
103
|
-
else if (typeof
|
|
104
|
-
r +=
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
messageCloser: " })",
|
|
109
|
-
}));
|
|
47
|
+
else if (exclusiveMaximum === true && typeof maximum === "number") {
|
|
48
|
+
r += `.lt(${maximum}${exclMaxMessage ? `, { message: ${JSON.stringify(exclMaxMessage)} }` : ""})`;
|
|
49
|
+
}
|
|
50
|
+
else if (typeof maximum === "number") {
|
|
51
|
+
r += `.max(${maximum}${maxMessage ? `, { message: ${JSON.stringify(maxMessage)} }` : ""})`;
|
|
110
52
|
}
|
|
111
53
|
return {
|
|
112
54
|
expression: r,
|
|
113
|
-
type:
|
|
55
|
+
type: zodType,
|
|
114
56
|
};
|
|
115
57
|
};
|