@rexeus/typeweaver-zod-to-ts 0.10.3 → 0.10.5
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/README.md +2 -2
- package/dist/index.cjs +44 -16
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +45 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,7 +49,7 @@ The library provides complete TypeScript type generation for the following Zod s
|
|
|
49
49
|
- **Objects**: `z.object()` with nested properties and optional fields
|
|
50
50
|
- **Unions**: `z.union()`
|
|
51
51
|
- **Intersections**: `z.intersection()`
|
|
52
|
-
- **Modifiers**: `z.optional()`, `z.nullable()`
|
|
52
|
+
- **Modifiers**: `z.optional()`, `z.nullable()`, `z.default()`
|
|
53
53
|
- **Special types**: `z.unknown()`, `z.any()`, `z.void()`, `z.never()`, `z.null()`, `z.undefined()`
|
|
54
54
|
- **Async types**: `z.promise()`
|
|
55
55
|
|
|
@@ -58,7 +58,7 @@ The library provides complete TypeScript type generation for the following Zod s
|
|
|
58
58
|
The following Zod types are not yet implemented and will fall back to `unknown` type:
|
|
59
59
|
|
|
60
60
|
- **Advanced types**: `z.lazy()`, `z.templateLiteral()`, `z.custom()`, `z.transform()`, `z.pipe()`
|
|
61
|
-
- **Modifiers**: `z.
|
|
61
|
+
- **Modifiers**: `z.nonoptional()`, `z.readonly()`, `z.catch()`
|
|
62
62
|
- **Special types**: `z.nan()`, `z.file()`, `z.success()`
|
|
63
63
|
|
|
64
64
|
> **Note**: When encountering unsupported Zod types, the library gracefully falls back to
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let typescript = require("typescript");
|
|
3
3
|
let zod_v4_core = require("zod/v4/core");
|
|
4
|
+
//#region src/errors/EmptyZodLiteralError.ts
|
|
5
|
+
var EmptyZodLiteralError = class extends Error {
|
|
6
|
+
name = "EmptyZodLiteralError";
|
|
7
|
+
constructor() {
|
|
8
|
+
super("ZodLiteral must contain at least one literal value.");
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/errors/UnsupportedLiteralValueError.ts
|
|
13
|
+
var UnsupportedLiteralValueError = class extends Error {
|
|
14
|
+
name = "UnsupportedLiteralValueError";
|
|
15
|
+
constructor(valueType) {
|
|
16
|
+
super(`Unsupported Zod literal value type: ${valueType}.`);
|
|
17
|
+
this.valueType = valueType;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
4
21
|
//#region src/tsTypeGenerator.ts
|
|
5
22
|
function fromZod(zodType) {
|
|
6
23
|
if (zodType instanceof zod_v4_core.$ZodString) return fromZodString(zodType);
|
|
@@ -90,8 +107,7 @@ function fromZodObject(zodObject) {
|
|
|
90
107
|
const members = Object.entries(zodObject._zod.def.shape).map(([key, nextZodNode]) => {
|
|
91
108
|
const type = fromZod(nextZodNode);
|
|
92
109
|
if (!nextZodNode._zod?.def) console.warn(`Zod node for key "${key}" does not have a _zod.def property. This may indicate an issue with the Zod schema.`, { key });
|
|
93
|
-
const
|
|
94
|
-
const isOptional = nextZodNodeTypeName === "optional";
|
|
110
|
+
const isOptional = nextZodNode._zod?.optout === "optional";
|
|
95
111
|
return typescript.factory.createPropertySignature(void 0, createTsAstPropertyKey(key), isOptional ? typescript.factory.createToken(typescript.SyntaxKind.QuestionToken) : void 0, type);
|
|
96
112
|
});
|
|
97
113
|
return typescript.factory.createTypeLiteralNode(members);
|
|
@@ -107,6 +123,8 @@ function fromZodIntersection(zodIntersection) {
|
|
|
107
123
|
}
|
|
108
124
|
function fromZodTuple(zodTuple) {
|
|
109
125
|
const elements = zodTuple._zod.def.items.map(fromZod);
|
|
126
|
+
const { rest } = zodTuple._zod.def;
|
|
127
|
+
if (rest) elements.push(typescript.factory.createRestTypeNode(typescript.factory.createArrayTypeNode(fromZod(rest))));
|
|
110
128
|
return typescript.factory.createTupleTypeNode(elements);
|
|
111
129
|
}
|
|
112
130
|
function fromZodRecord(zodRecord) {
|
|
@@ -124,22 +142,29 @@ function fromZodSet(zodSet) {
|
|
|
124
142
|
return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("Set"), [innerType]);
|
|
125
143
|
}
|
|
126
144
|
function fromZodLiteral(zodLiteral) {
|
|
127
|
-
if (zodLiteral._zod.def.values.length === 0) throw new
|
|
128
|
-
const
|
|
145
|
+
if (zodLiteral._zod.def.values.length === 0) throw new EmptyZodLiteralError();
|
|
146
|
+
const types = zodLiteral._zod.def.values.map(fromLiteralValue);
|
|
147
|
+
const [type] = types;
|
|
148
|
+
if (types.length === 1 && type) return type;
|
|
149
|
+
return typescript.factory.createUnionTypeNode(types);
|
|
150
|
+
}
|
|
151
|
+
function fromLiteralValue(value) {
|
|
129
152
|
if (typeof value === "string") return typescript.factory.createLiteralTypeNode(typescript.factory.createStringLiteral(value));
|
|
130
153
|
if (typeof value === "number") return typescript.factory.createLiteralTypeNode(typescript.factory.createNumericLiteral(value));
|
|
131
154
|
if (typeof value === "boolean") return typescript.factory.createLiteralTypeNode(value ? typescript.factory.createTrue() : typescript.factory.createFalse());
|
|
132
|
-
if (typeof value === "bigint") return typescript.factory.createLiteralTypeNode(typescript.factory.createBigIntLiteral(value.toString()));
|
|
155
|
+
if (typeof value === "bigint") return typescript.factory.createLiteralTypeNode(typescript.factory.createBigIntLiteral(`${value.toString()}n`));
|
|
133
156
|
if (value === null) return typescript.factory.createLiteralTypeNode(typescript.factory.createNull());
|
|
134
157
|
if (value === void 0) return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UndefinedKeyword);
|
|
135
|
-
throw new
|
|
158
|
+
throw new UnsupportedLiteralValueError(typeof value);
|
|
136
159
|
}
|
|
137
160
|
function fromZodEnum(zodEnum) {
|
|
138
|
-
const types =
|
|
139
|
-
return typescript.factory.createLiteralTypeNode(typescript.factory.createStringLiteral(key));
|
|
140
|
-
});
|
|
161
|
+
const types = getZodEnumValues(zodEnum._zod.def.entries).map(fromLiteralValue);
|
|
141
162
|
return typescript.factory.createUnionTypeNode(types);
|
|
142
163
|
}
|
|
164
|
+
function getZodEnumValues(entries) {
|
|
165
|
+
const numericValues = Object.values(entries).filter((value) => typeof value === "number");
|
|
166
|
+
return Object.entries(entries).filter(([key]) => !numericValues.includes(Number(key))).map(([, value]) => value);
|
|
167
|
+
}
|
|
143
168
|
function fromZodPromise(zodPromise) {
|
|
144
169
|
const innerType = fromZod(zodPromise._zod.def.innerType);
|
|
145
170
|
return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("Promise"), [innerType]);
|
|
@@ -152,13 +177,16 @@ function fromZodOptional(zodOptional) {
|
|
|
152
177
|
return typescript.factory.createUnionTypeNode([innerType, typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UndefinedKeyword)]);
|
|
153
178
|
}
|
|
154
179
|
function fromZodDefault(zodDefault) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
180
|
+
return withoutUndefined(fromZod(zodDefault._zod.def.innerType));
|
|
181
|
+
}
|
|
182
|
+
function withoutUndefined(type) {
|
|
183
|
+
if ((0, typescript.isParenthesizedTypeNode)(type)) return withoutUndefined(type.type);
|
|
184
|
+
if (!(0, typescript.isUnionTypeNode)(type)) return type;
|
|
185
|
+
const types = type.types.map(withoutUndefined).flatMap((nextType) => (0, typescript.isUnionTypeNode)(nextType) ? Array.from(nextType.types) : [nextType]).filter((nextType) => nextType.kind !== typescript.SyntaxKind.UndefinedKeyword);
|
|
186
|
+
const [singleType] = types;
|
|
187
|
+
if (types.length === 0) return type;
|
|
188
|
+
if (types.length === 1 && singleType) return singleType;
|
|
189
|
+
return typescript.factory.createUnionTypeNode(types);
|
|
162
190
|
}
|
|
163
191
|
function fromZodTemplateLiteral(_zodTemplateLiteral) {
|
|
164
192
|
return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBAuDgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBC9C5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBAuDgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBC9C5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
|
-
import { EmitHint, ScriptKind, ScriptTarget, SyntaxKind, createPrinter, createSourceFile, factory } from "typescript";
|
|
1
|
+
import { EmitHint, ScriptKind, ScriptTarget, SyntaxKind, createPrinter, createSourceFile, factory, isParenthesizedTypeNode, isUnionTypeNode } from "typescript";
|
|
2
2
|
import { $ZodAny, $ZodArray, $ZodBigInt, $ZodBoolean, $ZodCatch, $ZodCustom, $ZodDate, $ZodDefault, $ZodEnum, $ZodFile, $ZodIntersection, $ZodLazy, $ZodLiteral, $ZodMap, $ZodNaN, $ZodNever, $ZodNonOptional, $ZodNull, $ZodNullable, $ZodNumber, $ZodObject, $ZodOptional, $ZodPipe, $ZodPromise, $ZodReadonly, $ZodRecord, $ZodSet, $ZodString, $ZodSuccess, $ZodSymbol, $ZodTemplateLiteral, $ZodTransform, $ZodTuple, $ZodUndefined, $ZodUnion, $ZodUnknown, $ZodVoid } from "zod/v4/core";
|
|
3
|
+
//#region src/errors/EmptyZodLiteralError.ts
|
|
4
|
+
var EmptyZodLiteralError = class extends Error {
|
|
5
|
+
name = "EmptyZodLiteralError";
|
|
6
|
+
constructor() {
|
|
7
|
+
super("ZodLiteral must contain at least one literal value.");
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/errors/UnsupportedLiteralValueError.ts
|
|
12
|
+
var UnsupportedLiteralValueError = class extends Error {
|
|
13
|
+
name = "UnsupportedLiteralValueError";
|
|
14
|
+
constructor(valueType) {
|
|
15
|
+
super(`Unsupported Zod literal value type: ${valueType}.`);
|
|
16
|
+
this.valueType = valueType;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
3
20
|
//#region src/tsTypeGenerator.ts
|
|
4
21
|
function fromZod(zodType) {
|
|
5
22
|
if (zodType instanceof $ZodString) return fromZodString(zodType);
|
|
@@ -89,8 +106,7 @@ function fromZodObject(zodObject) {
|
|
|
89
106
|
const members = Object.entries(zodObject._zod.def.shape).map(([key, nextZodNode]) => {
|
|
90
107
|
const type = fromZod(nextZodNode);
|
|
91
108
|
if (!nextZodNode._zod?.def) console.warn(`Zod node for key "${key}" does not have a _zod.def property. This may indicate an issue with the Zod schema.`, { key });
|
|
92
|
-
const
|
|
93
|
-
const isOptional = nextZodNodeTypeName === "optional";
|
|
109
|
+
const isOptional = nextZodNode._zod?.optout === "optional";
|
|
94
110
|
return factory.createPropertySignature(void 0, createTsAstPropertyKey(key), isOptional ? factory.createToken(SyntaxKind.QuestionToken) : void 0, type);
|
|
95
111
|
});
|
|
96
112
|
return factory.createTypeLiteralNode(members);
|
|
@@ -106,6 +122,8 @@ function fromZodIntersection(zodIntersection) {
|
|
|
106
122
|
}
|
|
107
123
|
function fromZodTuple(zodTuple) {
|
|
108
124
|
const elements = zodTuple._zod.def.items.map(fromZod);
|
|
125
|
+
const { rest } = zodTuple._zod.def;
|
|
126
|
+
if (rest) elements.push(factory.createRestTypeNode(factory.createArrayTypeNode(fromZod(rest))));
|
|
109
127
|
return factory.createTupleTypeNode(elements);
|
|
110
128
|
}
|
|
111
129
|
function fromZodRecord(zodRecord) {
|
|
@@ -123,22 +141,29 @@ function fromZodSet(zodSet) {
|
|
|
123
141
|
return factory.createTypeReferenceNode(factory.createIdentifier("Set"), [innerType]);
|
|
124
142
|
}
|
|
125
143
|
function fromZodLiteral(zodLiteral) {
|
|
126
|
-
if (zodLiteral._zod.def.values.length === 0) throw new
|
|
127
|
-
const
|
|
144
|
+
if (zodLiteral._zod.def.values.length === 0) throw new EmptyZodLiteralError();
|
|
145
|
+
const types = zodLiteral._zod.def.values.map(fromLiteralValue);
|
|
146
|
+
const [type] = types;
|
|
147
|
+
if (types.length === 1 && type) return type;
|
|
148
|
+
return factory.createUnionTypeNode(types);
|
|
149
|
+
}
|
|
150
|
+
function fromLiteralValue(value) {
|
|
128
151
|
if (typeof value === "string") return factory.createLiteralTypeNode(factory.createStringLiteral(value));
|
|
129
152
|
if (typeof value === "number") return factory.createLiteralTypeNode(factory.createNumericLiteral(value));
|
|
130
153
|
if (typeof value === "boolean") return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse());
|
|
131
|
-
if (typeof value === "bigint") return factory.createLiteralTypeNode(factory.createBigIntLiteral(value.toString()));
|
|
154
|
+
if (typeof value === "bigint") return factory.createLiteralTypeNode(factory.createBigIntLiteral(`${value.toString()}n`));
|
|
132
155
|
if (value === null) return factory.createLiteralTypeNode(factory.createNull());
|
|
133
156
|
if (value === void 0) return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);
|
|
134
|
-
throw new
|
|
157
|
+
throw new UnsupportedLiteralValueError(typeof value);
|
|
135
158
|
}
|
|
136
159
|
function fromZodEnum(zodEnum) {
|
|
137
|
-
const types =
|
|
138
|
-
return factory.createLiteralTypeNode(factory.createStringLiteral(key));
|
|
139
|
-
});
|
|
160
|
+
const types = getZodEnumValues(zodEnum._zod.def.entries).map(fromLiteralValue);
|
|
140
161
|
return factory.createUnionTypeNode(types);
|
|
141
162
|
}
|
|
163
|
+
function getZodEnumValues(entries) {
|
|
164
|
+
const numericValues = Object.values(entries).filter((value) => typeof value === "number");
|
|
165
|
+
return Object.entries(entries).filter(([key]) => !numericValues.includes(Number(key))).map(([, value]) => value);
|
|
166
|
+
}
|
|
142
167
|
function fromZodPromise(zodPromise) {
|
|
143
168
|
const innerType = fromZod(zodPromise._zod.def.innerType);
|
|
144
169
|
return factory.createTypeReferenceNode(factory.createIdentifier("Promise"), [innerType]);
|
|
@@ -151,13 +176,16 @@ function fromZodOptional(zodOptional) {
|
|
|
151
176
|
return factory.createUnionTypeNode([innerType, factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword)]);
|
|
152
177
|
}
|
|
153
178
|
function fromZodDefault(zodDefault) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
179
|
+
return withoutUndefined(fromZod(zodDefault._zod.def.innerType));
|
|
180
|
+
}
|
|
181
|
+
function withoutUndefined(type) {
|
|
182
|
+
if (isParenthesizedTypeNode(type)) return withoutUndefined(type.type);
|
|
183
|
+
if (!isUnionTypeNode(type)) return type;
|
|
184
|
+
const types = type.types.map(withoutUndefined).flatMap((nextType) => isUnionTypeNode(nextType) ? Array.from(nextType.types) : [nextType]).filter((nextType) => nextType.kind !== SyntaxKind.UndefinedKeyword);
|
|
185
|
+
const [singleType] = types;
|
|
186
|
+
if (types.length === 0) return type;
|
|
187
|
+
if (types.length === 1 && singleType) return singleType;
|
|
188
|
+
return factory.createUnionTypeNode(types);
|
|
161
189
|
}
|
|
162
190
|
function fromZodTemplateLiteral(_zodTemplateLiteral) {
|
|
163
191
|
return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"sourcesContent":["import { factory, SyntaxKind } from \"typescript\";\nimport {\n $ZodAny,\n $ZodArray,\n $ZodBigInt,\n $ZodBoolean,\n $ZodCatch,\n $ZodCustom,\n $ZodDate,\n $ZodDefault,\n $ZodEnum,\n $ZodFile,\n $ZodIntersection,\n $ZodLazy,\n $ZodLiteral,\n $ZodMap,\n $ZodNaN,\n $ZodNever,\n $ZodNonOptional,\n $ZodNull,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodPipe,\n $ZodPromise,\n $ZodReadonly,\n $ZodRecord,\n $ZodSet,\n $ZodString,\n $ZodSuccess,\n $ZodSymbol,\n $ZodTemplateLiteral,\n $ZodTransform,\n $ZodTuple,\n $ZodUndefined,\n $ZodUnion,\n $ZodUnknown,\n $ZodVoid,\n} from \"zod/v4/core\";\nimport type {\n Identifier,\n Node,\n StringLiteral,\n TypeElement,\n TypeNode,\n} from \"typescript\";\nimport type { $ZodType } from \"zod/v4/core\";\n\nexport function fromZod(zodType: $ZodType): TypeNode {\n if (zodType instanceof $ZodString) {\n return fromZodString(zodType);\n }\n if (zodType instanceof $ZodNumber) {\n return fromZodNumber(zodType);\n }\n if (zodType instanceof $ZodBigInt) {\n return fromZodBigInt(zodType);\n }\n if (zodType instanceof $ZodBoolean) {\n return fromZodBoolean(zodType);\n }\n if (zodType instanceof $ZodDate) {\n return fromZodDate(zodType);\n }\n if (zodType instanceof $ZodSymbol) {\n return fromZodSymbol(zodType);\n }\n if (zodType instanceof $ZodUndefined) {\n return fromZodUndefined(zodType);\n }\n if (zodType instanceof $ZodNullable) {\n return fromZodNullable(zodType);\n }\n if (zodType instanceof $ZodNull) {\n return fromZodNull(zodType);\n }\n if (zodType instanceof $ZodAny) {\n return fromZodAny(zodType);\n }\n if (zodType instanceof $ZodUnknown) {\n return fromZodUnknown(zodType);\n }\n if (zodType instanceof $ZodNever) {\n return fromZodNever(zodType);\n }\n if (zodType instanceof $ZodVoid) {\n return fromZodVoid(zodType);\n }\n if (zodType instanceof $ZodArray) {\n return fromZodArray(zodType);\n }\n if (zodType instanceof $ZodObject) {\n return fromZodObject(zodType);\n }\n if (zodType instanceof $ZodUnion) {\n return fromZodUnion(zodType);\n }\n if (zodType instanceof $ZodIntersection) {\n return fromZodIntersection(zodType);\n }\n if (zodType instanceof $ZodTuple) {\n return fromZodTuple(zodType);\n }\n if (zodType instanceof $ZodRecord) {\n return fromZodRecord(zodType);\n }\n if (zodType instanceof $ZodMap) {\n return fromZodMap(zodType);\n }\n if (zodType instanceof $ZodSet) {\n return fromZodSet(zodType);\n }\n if (zodType instanceof $ZodLiteral) {\n return fromZodLiteral(zodType);\n }\n if (zodType instanceof $ZodEnum) {\n return fromZodEnum(zodType);\n }\n if (zodType instanceof $ZodPromise) {\n return fromZodPromise(zodType);\n }\n if (zodType instanceof $ZodLazy) {\n return fromZodLazy(zodType);\n }\n if (zodType instanceof $ZodOptional) {\n return fromZodOptional(zodType);\n }\n if (zodType instanceof $ZodDefault) {\n return fromZodDefault(zodType);\n }\n if (zodType instanceof $ZodTemplateLiteral) {\n return fromZodTemplateLiteral(zodType);\n }\n if (zodType instanceof $ZodCustom) {\n return fromZodCustom(zodType);\n }\n if (zodType instanceof $ZodTransform) {\n return fromZodTransform(zodType);\n }\n if (zodType instanceof $ZodNonOptional) {\n return fromZodNonOptional(zodType);\n }\n if (zodType instanceof $ZodReadonly) {\n return fromZodReadonly(zodType);\n }\n if (zodType instanceof $ZodNaN) {\n return fromZodNaN(zodType);\n }\n if (zodType instanceof $ZodPipe) {\n return fromZodPipe(zodType);\n }\n if (zodType instanceof $ZodSuccess) {\n return fromZodSuccess(zodType);\n }\n if (zodType instanceof $ZodCatch) {\n return fromZodCatch(zodType);\n }\n if (zodType instanceof $ZodFile) {\n return fromZodFile(zodType);\n }\n\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodString(_zodString: $ZodString): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.StringKeyword);\n}\n\nfunction fromZodNumber(_zodNumber: $ZodNumber): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.NumberKeyword);\n}\n\nfunction fromZodBigInt(_zodBigInt: $ZodBigInt): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.BigIntKeyword);\n}\n\nfunction fromZodBoolean(_zodBoolean: $ZodBoolean): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword);\n}\n\nfunction fromZodDate(_zodDate: $ZodDate): TypeNode {\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Date\"));\n}\n\nfunction fromZodSymbol(_zodSymbol: $ZodSymbol): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.SymbolKeyword);\n}\n\nfunction fromZodUndefined(_zodUndefined: $ZodUndefined): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);\n}\n\nfunction fromZodNullable(zodNullable: $ZodNullable): TypeNode {\n const innerType = fromZod(zodNullable._zod.def.innerType);\n return factory.createUnionTypeNode([\n innerType,\n factory.createLiteralTypeNode(factory.createNull()),\n ]);\n}\n\nfunction fromZodNull(_zodNull: $ZodNull): TypeNode {\n return factory.createLiteralTypeNode(factory.createNull());\n}\n\nfunction fromZodAny(_zodAny: $ZodAny): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);\n}\n\nfunction fromZodUnknown(_zodUnknown: $ZodUnknown): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNever(_zodNever: $ZodNever): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.NeverKeyword);\n}\n\nfunction fromZodVoid(_zodVoid: $ZodVoid): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.VoidKeyword);\n}\n\nfunction fromZodArray(zodArray: $ZodArray): TypeNode {\n const innerType = fromZod(zodArray._zod.def.element);\n return factory.createArrayTypeNode(innerType);\n}\n\nfunction fromZodObject(zodObject: $ZodObject): TypeNode {\n const entries = Object.entries(zodObject._zod.def.shape);\n\n const members: TypeElement[] = entries.map(([key, nextZodNode]) => {\n const type = fromZod(nextZodNode);\n\n if (!nextZodNode._zod?.def) {\n console.warn(\n `Zod node for key \"${key}\" does not have a _zod.def property. This may indicate an issue with the Zod schema.`,\n {\n key,\n }\n );\n }\n const { type: nextZodNodeTypeName } = nextZodNode._zod?.def ?? {};\n const isOptional = nextZodNodeTypeName === \"optional\";\n\n const propertySignature = factory.createPropertySignature(\n undefined,\n createTsAstPropertyKey(key),\n isOptional ? factory.createToken(SyntaxKind.QuestionToken) : undefined,\n type\n );\n\n // TODO: add description?\n return propertySignature;\n });\n return factory.createTypeLiteralNode(members);\n}\n\nfunction fromZodUnion(zodUnion: $ZodUnion): TypeNode {\n const options = zodUnion._zod.def.options.map(fromZod);\n return factory.createUnionTypeNode(options);\n}\n\nfunction fromZodIntersection(zodIntersection: $ZodIntersection): TypeNode {\n const left = fromZod(zodIntersection._zod.def.left);\n const right = fromZod(zodIntersection._zod.def.right);\n return factory.createIntersectionTypeNode([left, right]);\n}\n\nfunction fromZodTuple(zodTuple: $ZodTuple): TypeNode {\n const elements = zodTuple._zod.def.items.map(fromZod);\n return factory.createTupleTypeNode(elements);\n}\n\nfunction fromZodRecord(zodRecord: $ZodRecord): TypeNode {\n const keyType = fromZod(zodRecord._zod.def.keyType);\n const valueType = fromZod(zodRecord._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Record\"), [\n keyType,\n valueType,\n ]);\n}\n\nfunction fromZodMap(zodMap: $ZodMap): TypeNode {\n const keyType = fromZod(zodMap._zod.def.keyType);\n const valueType = fromZod(zodMap._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Map\"), [\n keyType,\n valueType,\n ]);\n}\n\nfunction fromZodSet(zodSet: $ZodSet): TypeNode {\n const innerType = fromZod(zodSet._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Set\"), [\n innerType,\n ]);\n}\n\nfunction fromZodLiteral(zodLiteral: $ZodLiteral): TypeNode {\n if (zodLiteral._zod.def.values.length === 0) {\n throw new Error(\"ZodLiteral has no values\");\n }\n const value = zodLiteral._zod.def.values[0];\n\n if (typeof value === \"string\") {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value));\n }\n if (typeof value === \"number\") {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value));\n }\n if (typeof value === \"boolean\") {\n return factory.createLiteralTypeNode(\n value ? factory.createTrue() : factory.createFalse()\n );\n }\n if (typeof value === \"bigint\") {\n return factory.createLiteralTypeNode(\n factory.createBigIntLiteral(value.toString())\n );\n }\n if (value === null) {\n return factory.createLiteralTypeNode(factory.createNull());\n }\n if (value === undefined) {\n return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);\n }\n\n throw new Error(`Unsupported literal type: ${typeof value}`);\n}\n\nfunction fromZodEnum(zodEnum: $ZodEnum): TypeNode {\n const entries = Object.entries(zodEnum._zod.def.entries);\n const types = entries.map(([key, _value]) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key));\n });\n return factory.createUnionTypeNode(types);\n}\n\nfunction fromZodPromise(zodPromise: $ZodPromise): TypeNode {\n const innerType = fromZod(zodPromise._zod.def.innerType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Promise\"), [\n innerType,\n ]);\n}\n\nfunction fromZodLazy(_zodLazy: $ZodLazy): TypeNode {\n // TODO: handle zodLazy\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodOptional(zodOptional: $ZodOptional): TypeNode {\n const innerType = fromZod(zodOptional._zod.def.innerType);\n return factory.createUnionTypeNode([\n innerType,\n factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword),\n ]);\n}\n\nfunction fromZodDefault(zodDefault: $ZodDefault): TypeNode {\n const innerType = fromZod(zodDefault._zod.def.innerType);\n\n const filteredNodes: Node[] = [];\n innerType.forEachChild(node => {\n if (node.kind !== SyntaxKind.UndefinedKeyword) {\n filteredNodes.push(node);\n }\n });\n\n // TODO: is TsTypeNode correct?\n // @ts-expect-error needed to set children\n innerType.types = filteredNodes;\n return innerType;\n}\n\nfunction fromZodTemplateLiteral(\n _zodTemplateLiteral: $ZodTemplateLiteral\n): TypeNode {\n // TODO: handle zodTemplateLiteral\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodCustom(_zodCustom: $ZodCustom): TypeNode {\n // TODO: handle zodCustom\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodTransform(_zodTransform: $ZodTransform): TypeNode {\n // TODO: handle zodTransform\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNonOptional(_zodNonOptional: $ZodNonOptional): TypeNode {\n // TODO: handle zodNonOptional\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodReadonly(_zodReadonly: $ZodReadonly): TypeNode {\n // TODO: handle zodReadonly\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNaN(_zodNaN: $ZodNaN): TypeNode {\n // TODO: handle zodNaN\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodPipe(_zodPipe: $ZodPipe): TypeNode {\n // TODO: handle zodPipe\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodSuccess(_zodSuccess: $ZodSuccess): TypeNode {\n // TODO: handle zodSuccess\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodCatch(_zodCatch: $ZodCatch): TypeNode {\n // TODO: handle zodCatch\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodFile(_zodFile: $ZodFile): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\n/**\n * Returns a TypeScript AST node representing the property key.\n * If the key is a valid JavaScript identifier, returns an Identifier node.\n * Otherwise, returns a StringLiteral node.\n *\n * @param {string} key - The property key to convert.\n * @returns {Identifier | StringLiteral} The corresponding AST node for the property key.\n */\nfunction createTsAstPropertyKey(key: string): Identifier | StringLiteral {\n // TODO: is TsTypeNode correct or required anymore?\n if (/^[$A-Z_a-z][\\w$]*$/.test(key)) {\n return factory.createIdentifier(key);\n }\n return factory.createStringLiteral(key);\n}\n","import {\n createPrinter,\n createSourceFile,\n EmitHint,\n ScriptKind,\n ScriptTarget,\n} from \"typescript\";\nimport type { TypeNode } from \"typescript\";\n\nexport function print(tsType: TypeNode): string {\n const sourceFile = createSourceFile(\n \"print.ts\",\n \"\",\n ScriptTarget.Latest,\n false,\n ScriptKind.TS\n );\n const printer = createPrinter();\n return printer.printNode(EmitHint.Unspecified, tsType, sourceFile);\n}\n"],"mappings":";;;AAiDA,SAAgB,QAAQ,SAA6B;AACnD,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,cACrB,QAAO,iBAAiB,QAAQ;AAElC,KAAI,mBAAmB,aACrB,QAAO,gBAAgB,QAAQ;AAEjC,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,QACrB,QAAO,WAAW,QAAQ;AAE5B,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,UACrB,QAAO,aAAa,QAAQ;AAE9B,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,UACrB,QAAO,aAAa,QAAQ;AAE9B,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,UACrB,QAAO,aAAa,QAAQ;AAE9B,KAAI,mBAAmB,iBACrB,QAAO,oBAAoB,QAAQ;AAErC,KAAI,mBAAmB,UACrB,QAAO,aAAa,QAAQ;AAE9B,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,QACrB,QAAO,WAAW,QAAQ;AAE5B,KAAI,mBAAmB,QACrB,QAAO,WAAW,QAAQ;AAE5B,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,aACrB,QAAO,gBAAgB,QAAQ;AAEjC,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,oBACrB,QAAO,uBAAuB,QAAQ;AAExC,KAAI,mBAAmB,WACrB,QAAO,cAAc,QAAQ;AAE/B,KAAI,mBAAmB,cACrB,QAAO,iBAAiB,QAAQ;AAElC,KAAI,mBAAmB,gBACrB,QAAO,mBAAmB,QAAQ;AAEpC,KAAI,mBAAmB,aACrB,QAAO,gBAAgB,QAAQ;AAEjC,KAAI,mBAAmB,QACrB,QAAO,WAAW,QAAQ;AAE5B,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAE7B,KAAI,mBAAmB,YACrB,QAAO,eAAe,QAAQ;AAEhC,KAAI,mBAAmB,UACrB,QAAO,aAAa,QAAQ;AAE9B,KAAI,mBAAmB,SACrB,QAAO,YAAY,QAAQ;AAG7B,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,cAAc,YAAkC;AACvD,QAAO,QAAQ,sBAAsB,WAAW,cAAc;;AAGhE,SAAS,cAAc,YAAkC;AACvD,QAAO,QAAQ,sBAAsB,WAAW,cAAc;;AAGhE,SAAS,cAAc,YAAkC;AACvD,QAAO,QAAQ,sBAAsB,WAAW,cAAc;;AAGhE,SAAS,eAAe,aAAoC;AAC1D,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,YAAY,UAA8B;AACjD,QAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,OAAO,CAAC;;AAG1E,SAAS,cAAc,YAAkC;AACvD,QAAO,QAAQ,sBAAsB,WAAW,cAAc;;AAGhE,SAAS,iBAAiB,eAAwC;AAChE,QAAO,QAAQ,sBAAsB,WAAW,iBAAiB;;AAGnE,SAAS,gBAAgB,aAAqC;CAC5D,MAAM,YAAY,QAAQ,YAAY,KAAK,IAAI,UAAU;AACzD,QAAO,QAAQ,oBAAoB,CACjC,WACA,QAAQ,sBAAsB,QAAQ,YAAY,CAAC,CACpD,CAAC;;AAGJ,SAAS,YAAY,UAA8B;AACjD,QAAO,QAAQ,sBAAsB,QAAQ,YAAY,CAAC;;AAG5D,SAAS,WAAW,SAA4B;AAC9C,QAAO,QAAQ,sBAAsB,WAAW,WAAW;;AAG7D,SAAS,eAAe,aAAoC;AAC1D,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,aAAa,WAAgC;AACpD,QAAO,QAAQ,sBAAsB,WAAW,aAAa;;AAG/D,SAAS,YAAY,UAA8B;AACjD,QAAO,QAAQ,sBAAsB,WAAW,YAAY;;AAG9D,SAAS,aAAa,UAA+B;CACnD,MAAM,YAAY,QAAQ,SAAS,KAAK,IAAI,QAAQ;AACpD,QAAO,QAAQ,oBAAoB,UAAU;;AAG/C,SAAS,cAAc,WAAiC;CAGtD,MAAM,UAFU,OAAO,QAAQ,UAAU,KAAK,IAAI,MAAM,CAEjB,KAAK,CAAC,KAAK,iBAAiB;EACjE,MAAM,OAAO,QAAQ,YAAY;AAEjC,MAAI,CAAC,YAAY,MAAM,IACrB,SAAQ,KACN,qBAAqB,IAAI,uFACzB,EACE,KACD,CACF;EAEH,MAAM,EAAE,MAAM,wBAAwB,YAAY,MAAM,OAAO,EAAE;EACjE,MAAM,aAAa,wBAAwB;AAU3C,SAR0B,QAAQ,wBAChC,KAAA,GACA,uBAAuB,IAAI,EAC3B,aAAa,QAAQ,YAAY,WAAW,cAAc,GAAG,KAAA,GAC7D,KACD;GAID;AACF,QAAO,QAAQ,sBAAsB,QAAQ;;AAG/C,SAAS,aAAa,UAA+B;CACnD,MAAM,UAAU,SAAS,KAAK,IAAI,QAAQ,IAAI,QAAQ;AACtD,QAAO,QAAQ,oBAAoB,QAAQ;;AAG7C,SAAS,oBAAoB,iBAA6C;CACxE,MAAM,OAAO,QAAQ,gBAAgB,KAAK,IAAI,KAAK;CACnD,MAAM,QAAQ,QAAQ,gBAAgB,KAAK,IAAI,MAAM;AACrD,QAAO,QAAQ,2BAA2B,CAAC,MAAM,MAAM,CAAC;;AAG1D,SAAS,aAAa,UAA+B;CACnD,MAAM,WAAW,SAAS,KAAK,IAAI,MAAM,IAAI,QAAQ;AACrD,QAAO,QAAQ,oBAAoB,SAAS;;AAG9C,SAAS,cAAc,WAAiC;CACtD,MAAM,UAAU,QAAQ,UAAU,KAAK,IAAI,QAAQ;CACnD,MAAM,YAAY,QAAQ,UAAU,KAAK,IAAI,UAAU;AACvD,QAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,SAAS,EAAE,CACzE,SACA,UACD,CAAC;;AAGJ,SAAS,WAAW,QAA2B;CAC7C,MAAM,UAAU,QAAQ,OAAO,KAAK,IAAI,QAAQ;CAChD,MAAM,YAAY,QAAQ,OAAO,KAAK,IAAI,UAAU;AACpD,QAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,MAAM,EAAE,CACtE,SACA,UACD,CAAC;;AAGJ,SAAS,WAAW,QAA2B;CAC7C,MAAM,YAAY,QAAQ,OAAO,KAAK,IAAI,UAAU;AACpD,QAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,MAAM,EAAE,CACtE,UACD,CAAC;;AAGJ,SAAS,eAAe,YAAmC;AACzD,KAAI,WAAW,KAAK,IAAI,OAAO,WAAW,EACxC,OAAM,IAAI,MAAM,2BAA2B;CAE7C,MAAM,QAAQ,WAAW,KAAK,IAAI,OAAO;AAEzC,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,sBAAsB,QAAQ,oBAAoB,MAAM,CAAC;AAE1E,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,sBAAsB,QAAQ,qBAAqB,MAAM,CAAC;AAE3E,KAAI,OAAO,UAAU,UACnB,QAAO,QAAQ,sBACb,QAAQ,QAAQ,YAAY,GAAG,QAAQ,aAAa,CACrD;AAEH,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,sBACb,QAAQ,oBAAoB,MAAM,UAAU,CAAC,CAC9C;AAEH,KAAI,UAAU,KACZ,QAAO,QAAQ,sBAAsB,QAAQ,YAAY,CAAC;AAE5D,KAAI,UAAU,KAAA,EACZ,QAAO,QAAQ,sBAAsB,WAAW,iBAAiB;AAGnE,OAAM,IAAI,MAAM,6BAA6B,OAAO,QAAQ;;AAG9D,SAAS,YAAY,SAA6B;CAEhD,MAAM,QADU,OAAO,QAAQ,QAAQ,KAAK,IAAI,QAAQ,CAClC,KAAK,CAAC,KAAK,YAAY;AAC3C,SAAO,QAAQ,sBAAsB,QAAQ,oBAAoB,IAAI,CAAC;GACtE;AACF,QAAO,QAAQ,oBAAoB,MAAM;;AAG3C,SAAS,eAAe,YAAmC;CACzD,MAAM,YAAY,QAAQ,WAAW,KAAK,IAAI,UAAU;AACxD,QAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,UAAU,EAAE,CAC1E,UACD,CAAC;;AAGJ,SAAS,YAAY,UAA8B;AAEjD,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,gBAAgB,aAAqC;CAC5D,MAAM,YAAY,QAAQ,YAAY,KAAK,IAAI,UAAU;AACzD,QAAO,QAAQ,oBAAoB,CACjC,WACA,QAAQ,sBAAsB,WAAW,iBAAiB,CAC3D,CAAC;;AAGJ,SAAS,eAAe,YAAmC;CACzD,MAAM,YAAY,QAAQ,WAAW,KAAK,IAAI,UAAU;CAExD,MAAM,gBAAwB,EAAE;AAChC,WAAU,cAAa,SAAQ;AAC7B,MAAI,KAAK,SAAS,WAAW,iBAC3B,eAAc,KAAK,KAAK;GAE1B;AAIF,WAAU,QAAQ;AAClB,QAAO;;AAGT,SAAS,uBACP,qBACU;AAEV,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,cAAc,YAAkC;AAEvD,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,iBAAiB,eAAwC;AAEhE,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,mBAAmB,iBAA4C;AAEtE,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,gBAAgB,cAAsC;AAE7D,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,WAAW,SAA4B;AAE9C,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,YAAY,UAA8B;AAEjD,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,eAAe,aAAoC;AAE1D,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,aAAa,WAAgC;AAEpD,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;AAGjE,SAAS,YAAY,UAA8B;AACjD,QAAO,QAAQ,sBAAsB,WAAW,eAAe;;;;;;;;;;AAWjE,SAAS,uBAAuB,KAAyC;AAEvE,KAAI,qBAAqB,KAAK,IAAI,CAChC,QAAO,QAAQ,iBAAiB,IAAI;AAEtC,QAAO,QAAQ,oBAAoB,IAAI;;;;AC5azC,SAAgB,MAAM,QAA0B;CAC9C,MAAM,aAAa,iBACjB,YACA,IACA,aAAa,QACb,OACA,WAAW,GACZ;AAED,QADgB,eAAe,CAChB,UAAU,SAAS,aAAa,QAAQ,WAAW"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/errors/EmptyZodLiteralError.ts","../src/errors/UnsupportedLiteralValueError.ts","../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"sourcesContent":["export class EmptyZodLiteralError extends Error {\n public override readonly name = \"EmptyZodLiteralError\";\n\n public constructor() {\n super(\"ZodLiteral must contain at least one literal value.\");\n }\n}\n","export class UnsupportedLiteralValueError extends Error {\n public override readonly name = \"UnsupportedLiteralValueError\";\n\n public constructor(public readonly valueType: string) {\n super(`Unsupported Zod literal value type: ${valueType}.`);\n }\n}\n","import {\n factory,\n isParenthesizedTypeNode,\n isUnionTypeNode,\n SyntaxKind,\n} from \"typescript\";\nimport {\n $ZodAny,\n $ZodArray,\n $ZodBigInt,\n $ZodBoolean,\n $ZodCatch,\n $ZodCustom,\n $ZodDate,\n $ZodDefault,\n $ZodEnum,\n $ZodFile,\n $ZodIntersection,\n $ZodLazy,\n $ZodLiteral,\n $ZodMap,\n $ZodNaN,\n $ZodNever,\n $ZodNonOptional,\n $ZodNull,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodPipe,\n $ZodPromise,\n $ZodReadonly,\n $ZodRecord,\n $ZodSet,\n $ZodString,\n $ZodSuccess,\n $ZodSymbol,\n $ZodTemplateLiteral,\n $ZodTransform,\n $ZodTuple,\n $ZodUndefined,\n $ZodUnion,\n $ZodUnknown,\n $ZodVoid,\n} from \"zod/v4/core\";\nimport { EmptyZodLiteralError } from \"./errors/EmptyZodLiteralError.js\";\nimport { UnsupportedLiteralValueError } from \"./errors/UnsupportedLiteralValueError.js\";\nimport type {\n Identifier,\n StringLiteral,\n TypeElement,\n TypeNode,\n} from \"typescript\";\nimport type { $ZodType } from \"zod/v4/core\";\n\nexport function fromZod(zodType: $ZodType): TypeNode {\n if (zodType instanceof $ZodString) {\n return fromZodString(zodType);\n }\n if (zodType instanceof $ZodNumber) {\n return fromZodNumber(zodType);\n }\n if (zodType instanceof $ZodBigInt) {\n return fromZodBigInt(zodType);\n }\n if (zodType instanceof $ZodBoolean) {\n return fromZodBoolean(zodType);\n }\n if (zodType instanceof $ZodDate) {\n return fromZodDate(zodType);\n }\n if (zodType instanceof $ZodSymbol) {\n return fromZodSymbol(zodType);\n }\n if (zodType instanceof $ZodUndefined) {\n return fromZodUndefined(zodType);\n }\n if (zodType instanceof $ZodNullable) {\n return fromZodNullable(zodType);\n }\n if (zodType instanceof $ZodNull) {\n return fromZodNull(zodType);\n }\n if (zodType instanceof $ZodAny) {\n return fromZodAny(zodType);\n }\n if (zodType instanceof $ZodUnknown) {\n return fromZodUnknown(zodType);\n }\n if (zodType instanceof $ZodNever) {\n return fromZodNever(zodType);\n }\n if (zodType instanceof $ZodVoid) {\n return fromZodVoid(zodType);\n }\n if (zodType instanceof $ZodArray) {\n return fromZodArray(zodType);\n }\n if (zodType instanceof $ZodObject) {\n return fromZodObject(zodType);\n }\n if (zodType instanceof $ZodUnion) {\n return fromZodUnion(zodType);\n }\n if (zodType instanceof $ZodIntersection) {\n return fromZodIntersection(zodType);\n }\n if (zodType instanceof $ZodTuple) {\n return fromZodTuple(zodType);\n }\n if (zodType instanceof $ZodRecord) {\n return fromZodRecord(zodType);\n }\n if (zodType instanceof $ZodMap) {\n return fromZodMap(zodType);\n }\n if (zodType instanceof $ZodSet) {\n return fromZodSet(zodType);\n }\n if (zodType instanceof $ZodLiteral) {\n return fromZodLiteral(zodType);\n }\n if (zodType instanceof $ZodEnum) {\n return fromZodEnum(zodType);\n }\n if (zodType instanceof $ZodPromise) {\n return fromZodPromise(zodType);\n }\n if (zodType instanceof $ZodLazy) {\n return fromZodLazy(zodType);\n }\n if (zodType instanceof $ZodOptional) {\n return fromZodOptional(zodType);\n }\n if (zodType instanceof $ZodDefault) {\n return fromZodDefault(zodType);\n }\n if (zodType instanceof $ZodTemplateLiteral) {\n return fromZodTemplateLiteral(zodType);\n }\n if (zodType instanceof $ZodCustom) {\n return fromZodCustom(zodType);\n }\n if (zodType instanceof $ZodTransform) {\n return fromZodTransform(zodType);\n }\n if (zodType instanceof $ZodNonOptional) {\n return fromZodNonOptional(zodType);\n }\n if (zodType instanceof $ZodReadonly) {\n return fromZodReadonly(zodType);\n }\n if (zodType instanceof $ZodNaN) {\n return fromZodNaN(zodType);\n }\n if (zodType instanceof $ZodPipe) {\n return fromZodPipe(zodType);\n }\n if (zodType instanceof $ZodSuccess) {\n return fromZodSuccess(zodType);\n }\n if (zodType instanceof $ZodCatch) {\n return fromZodCatch(zodType);\n }\n if (zodType instanceof $ZodFile) {\n return fromZodFile(zodType);\n }\n\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodString(_zodString: $ZodString): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.StringKeyword);\n}\n\nfunction fromZodNumber(_zodNumber: $ZodNumber): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.NumberKeyword);\n}\n\nfunction fromZodBigInt(_zodBigInt: $ZodBigInt): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.BigIntKeyword);\n}\n\nfunction fromZodBoolean(_zodBoolean: $ZodBoolean): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword);\n}\n\nfunction fromZodDate(_zodDate: $ZodDate): TypeNode {\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Date\"));\n}\n\nfunction fromZodSymbol(_zodSymbol: $ZodSymbol): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.SymbolKeyword);\n}\n\nfunction fromZodUndefined(_zodUndefined: $ZodUndefined): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);\n}\n\nfunction fromZodNullable(zodNullable: $ZodNullable): TypeNode {\n const innerType = fromZod(zodNullable._zod.def.innerType);\n return factory.createUnionTypeNode([\n innerType,\n factory.createLiteralTypeNode(factory.createNull()),\n ]);\n}\n\nfunction fromZodNull(_zodNull: $ZodNull): TypeNode {\n return factory.createLiteralTypeNode(factory.createNull());\n}\n\nfunction fromZodAny(_zodAny: $ZodAny): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);\n}\n\nfunction fromZodUnknown(_zodUnknown: $ZodUnknown): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNever(_zodNever: $ZodNever): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.NeverKeyword);\n}\n\nfunction fromZodVoid(_zodVoid: $ZodVoid): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.VoidKeyword);\n}\n\nfunction fromZodArray(zodArray: $ZodArray): TypeNode {\n const innerType = fromZod(zodArray._zod.def.element);\n return factory.createArrayTypeNode(innerType);\n}\n\nfunction fromZodObject(zodObject: $ZodObject): TypeNode {\n const entries = Object.entries(zodObject._zod.def.shape);\n\n const members: TypeElement[] = entries.map(([key, nextZodNode]) => {\n const type = fromZod(nextZodNode);\n\n if (!nextZodNode._zod?.def) {\n console.warn(\n `Zod node for key \"${key}\" does not have a _zod.def property. This may indicate an issue with the Zod schema.`,\n {\n key,\n }\n );\n }\n const isOptional = nextZodNode._zod?.optout === \"optional\";\n\n const propertySignature = factory.createPropertySignature(\n undefined,\n createTsAstPropertyKey(key),\n isOptional ? factory.createToken(SyntaxKind.QuestionToken) : undefined,\n type\n );\n\n // TODO: add description?\n return propertySignature;\n });\n return factory.createTypeLiteralNode(members);\n}\n\nfunction fromZodUnion(zodUnion: $ZodUnion): TypeNode {\n const options = zodUnion._zod.def.options.map(fromZod);\n return factory.createUnionTypeNode(options);\n}\n\nfunction fromZodIntersection(zodIntersection: $ZodIntersection): TypeNode {\n const left = fromZod(zodIntersection._zod.def.left);\n const right = fromZod(zodIntersection._zod.def.right);\n return factory.createIntersectionTypeNode([left, right]);\n}\n\nfunction fromZodTuple(zodTuple: $ZodTuple): TypeNode {\n const elements = zodTuple._zod.def.items.map(fromZod);\n const { rest } = zodTuple._zod.def;\n\n if (rest) {\n elements.push(\n factory.createRestTypeNode(factory.createArrayTypeNode(fromZod(rest)))\n );\n }\n\n return factory.createTupleTypeNode(elements);\n}\n\nfunction fromZodRecord(zodRecord: $ZodRecord): TypeNode {\n const keyType = fromZod(zodRecord._zod.def.keyType);\n const valueType = fromZod(zodRecord._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Record\"), [\n keyType,\n valueType,\n ]);\n}\n\nfunction fromZodMap(zodMap: $ZodMap): TypeNode {\n const keyType = fromZod(zodMap._zod.def.keyType);\n const valueType = fromZod(zodMap._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Map\"), [\n keyType,\n valueType,\n ]);\n}\n\nfunction fromZodSet(zodSet: $ZodSet): TypeNode {\n const innerType = fromZod(zodSet._zod.def.valueType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Set\"), [\n innerType,\n ]);\n}\n\nfunction fromZodLiteral(zodLiteral: $ZodLiteral): TypeNode {\n if (zodLiteral._zod.def.values.length === 0) {\n throw new EmptyZodLiteralError();\n }\n const types = zodLiteral._zod.def.values.map(fromLiteralValue);\n\n const [type] = types;\n if (types.length === 1 && type) {\n return type;\n }\n\n return factory.createUnionTypeNode(types);\n}\n\ntype LiteralValue = string | number | boolean | bigint | null | undefined;\n\nfunction fromLiteralValue(value: LiteralValue): TypeNode {\n if (typeof value === \"string\") {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value));\n }\n if (typeof value === \"number\") {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value));\n }\n if (typeof value === \"boolean\") {\n return factory.createLiteralTypeNode(\n value ? factory.createTrue() : factory.createFalse()\n );\n }\n if (typeof value === \"bigint\") {\n return factory.createLiteralTypeNode(\n factory.createBigIntLiteral(`${value.toString()}n`)\n );\n }\n if (value === null) {\n return factory.createLiteralTypeNode(factory.createNull());\n }\n if (value === undefined) {\n return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);\n }\n\n throw new UnsupportedLiteralValueError(typeof value);\n}\n\nfunction fromZodEnum(zodEnum: $ZodEnum): TypeNode {\n const values = getZodEnumValues(zodEnum._zod.def.entries);\n const types = values.map(fromLiteralValue);\n return factory.createUnionTypeNode(types);\n}\n\nfunction getZodEnumValues(\n entries: Record<string, string | number>\n): Array<string | number> {\n const numericValues = Object.values(entries).filter(\n (value): value is number => typeof value === \"number\"\n );\n\n return Object.entries(entries)\n .filter(([key]) => !numericValues.includes(Number(key)))\n .map(([, value]) => value);\n}\n\nfunction fromZodPromise(zodPromise: $ZodPromise): TypeNode {\n const innerType = fromZod(zodPromise._zod.def.innerType);\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Promise\"), [\n innerType,\n ]);\n}\n\nfunction fromZodLazy(_zodLazy: $ZodLazy): TypeNode {\n // TODO: handle zodLazy\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodOptional(zodOptional: $ZodOptional): TypeNode {\n const innerType = fromZod(zodOptional._zod.def.innerType);\n return factory.createUnionTypeNode([\n innerType,\n factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword),\n ]);\n}\n\nfunction fromZodDefault(zodDefault: $ZodDefault): TypeNode {\n const innerType = fromZod(zodDefault._zod.def.innerType);\n return withoutUndefined(innerType);\n}\n\nfunction withoutUndefined(type: TypeNode): TypeNode {\n if (isParenthesizedTypeNode(type)) {\n return withoutUndefined(type.type);\n }\n\n if (!isUnionTypeNode(type)) {\n return type;\n }\n\n const types = type.types\n .map(withoutUndefined)\n .flatMap(nextType =>\n isUnionTypeNode(nextType) ? Array.from(nextType.types) : [nextType]\n )\n .filter(nextType => nextType.kind !== SyntaxKind.UndefinedKeyword);\n\n const [singleType] = types;\n if (types.length === 0) {\n return type;\n }\n if (types.length === 1 && singleType) {\n return singleType;\n }\n\n return factory.createUnionTypeNode(types);\n}\n\nfunction fromZodTemplateLiteral(\n _zodTemplateLiteral: $ZodTemplateLiteral\n): TypeNode {\n // TODO: handle zodTemplateLiteral\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodCustom(_zodCustom: $ZodCustom): TypeNode {\n // TODO: handle zodCustom\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodTransform(_zodTransform: $ZodTransform): TypeNode {\n // TODO: handle zodTransform\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNonOptional(_zodNonOptional: $ZodNonOptional): TypeNode {\n // TODO: handle zodNonOptional\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodReadonly(_zodReadonly: $ZodReadonly): TypeNode {\n // TODO: handle zodReadonly\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodNaN(_zodNaN: $ZodNaN): TypeNode {\n // TODO: handle zodNaN\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodPipe(_zodPipe: $ZodPipe): TypeNode {\n // TODO: handle zodPipe\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodSuccess(_zodSuccess: $ZodSuccess): TypeNode {\n // TODO: handle zodSuccess\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodCatch(_zodCatch: $ZodCatch): TypeNode {\n // TODO: handle zodCatch\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\nfunction fromZodFile(_zodFile: $ZodFile): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);\n}\n\n/**\n * Returns a TypeScript AST node representing the property key.\n * If the key is a valid JavaScript identifier, returns an Identifier node.\n * Otherwise, returns a StringLiteral node.\n *\n * @param {string} key - The property key to convert.\n * @returns {Identifier | StringLiteral} The corresponding AST node for the property key.\n */\nfunction createTsAstPropertyKey(key: string): Identifier | StringLiteral {\n // TODO: is TsTypeNode correct or required anymore?\n if (/^[$A-Z_a-z][\\w$]*$/.test(key)) {\n return factory.createIdentifier(key);\n }\n return factory.createStringLiteral(key);\n}\n","import {\n createPrinter,\n createSourceFile,\n EmitHint,\n ScriptKind,\n ScriptTarget,\n} from \"typescript\";\nimport type { TypeNode } from \"typescript\";\n\nexport function print(tsType: TypeNode): string {\n const sourceFile = createSourceFile(\n \"print.ts\",\n \"\",\n ScriptTarget.Latest,\n false,\n ScriptKind.TS\n );\n const printer = createPrinter();\n return printer.printNode(EmitHint.Unspecified, tsType, sourceFile);\n}\n"],"mappings":"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"}
|