@rexeus/typeweaver-zod-to-ts 0.10.4 → 0.11.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/README.md CHANGED
@@ -49,17 +49,19 @@ 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()`, `z.default()`
53
- - **Special types**: `z.unknown()`, `z.any()`, `z.void()`, `z.never()`, `z.null()`, `z.undefined()`
52
+ - **Modifiers**: `z.optional()`, `z.nullable()`, `z.default()`, `z.nonoptional()`, `z.readonly()`,
53
+ `z.catch()`
54
+ - **Special types**: `z.unknown()`, `z.any()`, `z.void()`, `z.never()`, `z.null()`, `z.undefined()`,
55
+ `z.nan()`, `z.file()`, `z.success()`
54
56
  - **Async types**: `z.promise()`
57
+ - **Pipes**: `z.pipe()` outputs the pipe output schema type; unsupported output schemas still fall
58
+ back to `unknown`
55
59
 
56
60
  ### ⚠️ Unsupported Types
57
61
 
58
62
  The following Zod types are not yet implemented and will fall back to `unknown` type:
59
63
 
60
- - **Advanced types**: `z.lazy()`, `z.templateLiteral()`, `z.custom()`, `z.transform()`, `z.pipe()`
61
- - **Modifiers**: `z.nonoptional()`, `z.readonly()`, `z.catch()`
62
- - **Special types**: `z.nan()`, `z.file()`, `z.success()`
64
+ - **Advanced types**: `z.lazy()`, `z.templateLiteral()`, `z.custom()`, `z.transform()`
63
65
 
64
66
  > **Note**: When encountering unsupported Zod types, the library gracefully falls back to
65
67
  > TypeScript's `unknown` type to maintain type safety.
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);
@@ -125,7 +142,7 @@ function fromZodSet(zodSet) {
125
142
  return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("Set"), [innerType]);
126
143
  }
127
144
  function fromZodLiteral(zodLiteral) {
128
- if (zodLiteral._zod.def.values.length === 0) throw new Error("ZodLiteral has no values");
145
+ if (zodLiteral._zod.def.values.length === 0) throw new EmptyZodLiteralError();
129
146
  const types = zodLiteral._zod.def.values.map(fromLiteralValue);
130
147
  const [type] = types;
131
148
  if (types.length === 1 && type) return type;
@@ -138,7 +155,7 @@ function fromLiteralValue(value) {
138
155
  if (typeof value === "bigint") return typescript.factory.createLiteralTypeNode(typescript.factory.createBigIntLiteral(`${value.toString()}n`));
139
156
  if (value === null) return typescript.factory.createLiteralTypeNode(typescript.factory.createNull());
140
157
  if (value === void 0) return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UndefinedKeyword);
141
- throw new Error(`Unsupported literal type: ${typeof value}`);
158
+ throw new UnsupportedLiteralValueError(typeof value);
142
159
  }
143
160
  function fromZodEnum(zodEnum) {
144
161
  const types = getZodEnumValues(zodEnum._zod.def.entries).map(fromLiteralValue);
@@ -162,12 +179,13 @@ function fromZodOptional(zodOptional) {
162
179
  function fromZodDefault(zodDefault) {
163
180
  return withoutUndefined(fromZod(zodDefault._zod.def.innerType));
164
181
  }
165
- function withoutUndefined(type) {
166
- if ((0, typescript.isParenthesizedTypeNode)(type)) return withoutUndefined(type.type);
182
+ function withoutUndefined(type, fallbackType = type) {
183
+ if ((0, typescript.isParenthesizedTypeNode)(type)) return withoutUndefined(type.type, fallbackType);
184
+ if (type.kind === typescript.SyntaxKind.UndefinedKeyword) return fallbackType;
167
185
  if (!(0, typescript.isUnionTypeNode)(type)) return type;
168
- 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 types = type.types.map((nextType) => withoutUndefined(nextType)).flatMap((nextType) => (0, typescript.isUnionTypeNode)(nextType) ? Array.from(nextType.types) : [nextType]).filter((nextType) => nextType.kind !== typescript.SyntaxKind.UndefinedKeyword);
169
187
  const [singleType] = types;
170
- if (types.length === 0) return type;
188
+ if (types.length === 0) return fallbackType;
171
189
  if (types.length === 1 && singleType) return singleType;
172
190
  return typescript.factory.createUnionTypeNode(types);
173
191
  }
@@ -180,39 +198,150 @@ function fromZodCustom(_zodCustom) {
180
198
  function fromZodTransform(_zodTransform) {
181
199
  return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
182
200
  }
183
- function fromZodNonOptional(_zodNonOptional) {
184
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
201
+ function fromZodNonOptional(zodNonOptional) {
202
+ return withoutUndefined(fromZod(zodNonOptional._zod.def.innerType), typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.NeverKeyword));
185
203
  }
186
- function fromZodReadonly(_zodReadonly) {
187
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
204
+ function fromZodReadonly(zodReadonly) {
205
+ return createReadonlyType(fromZod(zodReadonly._zod.def.innerType));
188
206
  }
189
207
  function fromZodNaN(_zodNaN) {
190
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
208
+ return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.NumberKeyword);
191
209
  }
192
- function fromZodPipe(_zodPipe) {
193
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
210
+ function fromZodPipe(zodPipe) {
211
+ return fromZod(zodPipe._zod.def.out);
194
212
  }
195
213
  function fromZodSuccess(_zodSuccess) {
196
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
214
+ return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.BooleanKeyword);
197
215
  }
198
- function fromZodCatch(_zodCatch) {
199
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
216
+ function fromZodCatch(zodCatch) {
217
+ return fromZod(zodCatch._zod.def.innerType);
200
218
  }
201
219
  function fromZodFile(_zodFile) {
202
- return typescript.factory.createKeywordTypeNode(typescript.SyntaxKind.UnknownKeyword);
203
- }
204
- /**
205
- * Returns a TypeScript AST node representing the property key.
206
- * If the key is a valid JavaScript identifier, returns an Identifier node.
207
- * Otherwise, returns a StringLiteral node.
208
- *
209
- * @param {string} key - The property key to convert.
210
- * @returns {Identifier | StringLiteral} The corresponding AST node for the property key.
211
- */
220
+ return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("File"));
221
+ }
222
+ function createReadonlyType(type) {
223
+ if ((0, typescript.isParenthesizedTypeNode)(type)) return createReadonlyType(type.type);
224
+ if ((0, typescript.isUnionTypeNode)(type)) return typescript.factory.createUnionTypeNode(type.types.map(createReadonlyType));
225
+ if ((0, typescript.isArrayTypeNode)(type) || (0, typescript.isTupleTypeNode)(type)) return typescript.factory.createTypeOperatorNode(typescript.SyntaxKind.ReadonlyKeyword, type);
226
+ if (isReadonlyPrimitiveType(type) || (0, typescript.isLiteralTypeNode)(type)) return type;
227
+ if ((0, typescript.isTypeReferenceNode)(type)) {
228
+ const typeName = (0, typescript.isIdentifier)(type.typeName) ? type.typeName.escapedText.toString() : void 0;
229
+ if (typeName === "Map") return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("ReadonlyMap"), type.typeArguments);
230
+ if (typeName === "Set") return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("ReadonlySet"), type.typeArguments);
231
+ if (typeName === "Date" || typeName === "Promise") return type;
232
+ }
233
+ return typescript.factory.createTypeReferenceNode(typescript.factory.createIdentifier("Readonly"), [type]);
234
+ }
235
+ function isReadonlyPrimitiveType(type) {
236
+ return [
237
+ typescript.SyntaxKind.AnyKeyword,
238
+ typescript.SyntaxKind.BigIntKeyword,
239
+ typescript.SyntaxKind.BooleanKeyword,
240
+ typescript.SyntaxKind.NeverKeyword,
241
+ typescript.SyntaxKind.NumberKeyword,
242
+ typescript.SyntaxKind.StringKeyword,
243
+ typescript.SyntaxKind.SymbolKeyword,
244
+ typescript.SyntaxKind.UndefinedKeyword,
245
+ typescript.SyntaxKind.UnknownKeyword,
246
+ typescript.SyntaxKind.VoidKeyword
247
+ ].includes(type.kind);
248
+ }
249
+ const RESERVED_IDENTIFIER_NAMES = new Set([
250
+ "abstract",
251
+ "accessor",
252
+ "any",
253
+ "as",
254
+ "asserts",
255
+ "async",
256
+ "await",
257
+ "bigint",
258
+ "boolean",
259
+ "break",
260
+ "case",
261
+ "catch",
262
+ "class",
263
+ "const",
264
+ "constructor",
265
+ "continue",
266
+ "debugger",
267
+ "declare",
268
+ "default",
269
+ "delete",
270
+ "do",
271
+ "else",
272
+ "enum",
273
+ "export",
274
+ "extends",
275
+ "false",
276
+ "finally",
277
+ "for",
278
+ "from",
279
+ "function",
280
+ "get",
281
+ "global",
282
+ "if",
283
+ "implements",
284
+ "import",
285
+ "in",
286
+ "infer",
287
+ "instanceof",
288
+ "interface",
289
+ "intrinsic",
290
+ "is",
291
+ "keyof",
292
+ "let",
293
+ "module",
294
+ "namespace",
295
+ "never",
296
+ "new",
297
+ "null",
298
+ "number",
299
+ "object",
300
+ "of",
301
+ "out",
302
+ "override",
303
+ "package",
304
+ "private",
305
+ "protected",
306
+ "public",
307
+ "readonly",
308
+ "require",
309
+ "return",
310
+ "satisfies",
311
+ "set",
312
+ "static",
313
+ "string",
314
+ "super",
315
+ "switch",
316
+ "symbol",
317
+ "this",
318
+ "throw",
319
+ "true",
320
+ "try",
321
+ "type",
322
+ "typeof",
323
+ "undefined",
324
+ "unique",
325
+ "unknown",
326
+ "using",
327
+ "var",
328
+ "void",
329
+ "while",
330
+ "with",
331
+ "yield"
332
+ ]);
212
333
  function createTsAstPropertyKey(key) {
213
- if (/^[$A-Z_a-z][\w$]*$/.test(key)) return typescript.factory.createIdentifier(key);
334
+ if (isSafePropertyIdentifier(key)) return typescript.factory.createIdentifier(key);
214
335
  return typescript.factory.createStringLiteral(key);
215
336
  }
337
+ function isSafePropertyIdentifier(key) {
338
+ return isIdentifierName(key) && !RESERVED_IDENTIFIER_NAMES.has(key);
339
+ }
340
+ function isIdentifierName(value) {
341
+ const [firstCharacter] = value;
342
+ if (!firstCharacter) return false;
343
+ return (0, typescript.isIdentifierStart)(firstCharacter.codePointAt(0), typescript.ScriptTarget.Latest) && Array.from(value.slice(firstCharacter.length)).every((character) => (0, typescript.isIdentifierPart)(character.codePointAt(0), typescript.ScriptTarget.Latest));
344
+ }
216
345
  //#endregion
217
346
  //#region src/tsTypePrinter.ts
218
347
  function print(tsType) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBAqDgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBC5C5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBA+DgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBCtD5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBAqDgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBC5C5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"mappings":";;;;iBA+DgB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,QAAA;;;iBCtD5B,KAAA,CAAM,MAAA,EAAQ,QAAA"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,22 @@
1
- import { EmitHint, ScriptKind, ScriptTarget, SyntaxKind, createPrinter, createSourceFile, factory, isParenthesizedTypeNode, isUnionTypeNode } from "typescript";
1
+ import { EmitHint, ScriptKind, ScriptTarget, SyntaxKind, createPrinter, createSourceFile, factory, isArrayTypeNode, isIdentifier, isIdentifierPart, isIdentifierStart, isLiteralTypeNode, isParenthesizedTypeNode, isTupleTypeNode, isTypeReferenceNode, 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);
@@ -124,7 +141,7 @@ function fromZodSet(zodSet) {
124
141
  return factory.createTypeReferenceNode(factory.createIdentifier("Set"), [innerType]);
125
142
  }
126
143
  function fromZodLiteral(zodLiteral) {
127
- if (zodLiteral._zod.def.values.length === 0) throw new Error("ZodLiteral has no values");
144
+ if (zodLiteral._zod.def.values.length === 0) throw new EmptyZodLiteralError();
128
145
  const types = zodLiteral._zod.def.values.map(fromLiteralValue);
129
146
  const [type] = types;
130
147
  if (types.length === 1 && type) return type;
@@ -137,7 +154,7 @@ function fromLiteralValue(value) {
137
154
  if (typeof value === "bigint") return factory.createLiteralTypeNode(factory.createBigIntLiteral(`${value.toString()}n`));
138
155
  if (value === null) return factory.createLiteralTypeNode(factory.createNull());
139
156
  if (value === void 0) return factory.createKeywordTypeNode(SyntaxKind.UndefinedKeyword);
140
- throw new Error(`Unsupported literal type: ${typeof value}`);
157
+ throw new UnsupportedLiteralValueError(typeof value);
141
158
  }
142
159
  function fromZodEnum(zodEnum) {
143
160
  const types = getZodEnumValues(zodEnum._zod.def.entries).map(fromLiteralValue);
@@ -161,12 +178,13 @@ function fromZodOptional(zodOptional) {
161
178
  function fromZodDefault(zodDefault) {
162
179
  return withoutUndefined(fromZod(zodDefault._zod.def.innerType));
163
180
  }
164
- function withoutUndefined(type) {
165
- if (isParenthesizedTypeNode(type)) return withoutUndefined(type.type);
181
+ function withoutUndefined(type, fallbackType = type) {
182
+ if (isParenthesizedTypeNode(type)) return withoutUndefined(type.type, fallbackType);
183
+ if (type.kind === SyntaxKind.UndefinedKeyword) return fallbackType;
166
184
  if (!isUnionTypeNode(type)) return type;
167
- const types = type.types.map(withoutUndefined).flatMap((nextType) => isUnionTypeNode(nextType) ? Array.from(nextType.types) : [nextType]).filter((nextType) => nextType.kind !== SyntaxKind.UndefinedKeyword);
185
+ const types = type.types.map((nextType) => withoutUndefined(nextType)).flatMap((nextType) => isUnionTypeNode(nextType) ? Array.from(nextType.types) : [nextType]).filter((nextType) => nextType.kind !== SyntaxKind.UndefinedKeyword);
168
186
  const [singleType] = types;
169
- if (types.length === 0) return type;
187
+ if (types.length === 0) return fallbackType;
170
188
  if (types.length === 1 && singleType) return singleType;
171
189
  return factory.createUnionTypeNode(types);
172
190
  }
@@ -179,39 +197,150 @@ function fromZodCustom(_zodCustom) {
179
197
  function fromZodTransform(_zodTransform) {
180
198
  return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
181
199
  }
182
- function fromZodNonOptional(_zodNonOptional) {
183
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
200
+ function fromZodNonOptional(zodNonOptional) {
201
+ return withoutUndefined(fromZod(zodNonOptional._zod.def.innerType), factory.createKeywordTypeNode(SyntaxKind.NeverKeyword));
184
202
  }
185
- function fromZodReadonly(_zodReadonly) {
186
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
203
+ function fromZodReadonly(zodReadonly) {
204
+ return createReadonlyType(fromZod(zodReadonly._zod.def.innerType));
187
205
  }
188
206
  function fromZodNaN(_zodNaN) {
189
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
207
+ return factory.createKeywordTypeNode(SyntaxKind.NumberKeyword);
190
208
  }
191
- function fromZodPipe(_zodPipe) {
192
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
209
+ function fromZodPipe(zodPipe) {
210
+ return fromZod(zodPipe._zod.def.out);
193
211
  }
194
212
  function fromZodSuccess(_zodSuccess) {
195
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
213
+ return factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword);
196
214
  }
197
- function fromZodCatch(_zodCatch) {
198
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
215
+ function fromZodCatch(zodCatch) {
216
+ return fromZod(zodCatch._zod.def.innerType);
199
217
  }
200
218
  function fromZodFile(_zodFile) {
201
- return factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword);
202
- }
203
- /**
204
- * Returns a TypeScript AST node representing the property key.
205
- * If the key is a valid JavaScript identifier, returns an Identifier node.
206
- * Otherwise, returns a StringLiteral node.
207
- *
208
- * @param {string} key - The property key to convert.
209
- * @returns {Identifier | StringLiteral} The corresponding AST node for the property key.
210
- */
219
+ return factory.createTypeReferenceNode(factory.createIdentifier("File"));
220
+ }
221
+ function createReadonlyType(type) {
222
+ if (isParenthesizedTypeNode(type)) return createReadonlyType(type.type);
223
+ if (isUnionTypeNode(type)) return factory.createUnionTypeNode(type.types.map(createReadonlyType));
224
+ if (isArrayTypeNode(type) || isTupleTypeNode(type)) return factory.createTypeOperatorNode(SyntaxKind.ReadonlyKeyword, type);
225
+ if (isReadonlyPrimitiveType(type) || isLiteralTypeNode(type)) return type;
226
+ if (isTypeReferenceNode(type)) {
227
+ const typeName = isIdentifier(type.typeName) ? type.typeName.escapedText.toString() : void 0;
228
+ if (typeName === "Map") return factory.createTypeReferenceNode(factory.createIdentifier("ReadonlyMap"), type.typeArguments);
229
+ if (typeName === "Set") return factory.createTypeReferenceNode(factory.createIdentifier("ReadonlySet"), type.typeArguments);
230
+ if (typeName === "Date" || typeName === "Promise") return type;
231
+ }
232
+ return factory.createTypeReferenceNode(factory.createIdentifier("Readonly"), [type]);
233
+ }
234
+ function isReadonlyPrimitiveType(type) {
235
+ return [
236
+ SyntaxKind.AnyKeyword,
237
+ SyntaxKind.BigIntKeyword,
238
+ SyntaxKind.BooleanKeyword,
239
+ SyntaxKind.NeverKeyword,
240
+ SyntaxKind.NumberKeyword,
241
+ SyntaxKind.StringKeyword,
242
+ SyntaxKind.SymbolKeyword,
243
+ SyntaxKind.UndefinedKeyword,
244
+ SyntaxKind.UnknownKeyword,
245
+ SyntaxKind.VoidKeyword
246
+ ].includes(type.kind);
247
+ }
248
+ const RESERVED_IDENTIFIER_NAMES = new Set([
249
+ "abstract",
250
+ "accessor",
251
+ "any",
252
+ "as",
253
+ "asserts",
254
+ "async",
255
+ "await",
256
+ "bigint",
257
+ "boolean",
258
+ "break",
259
+ "case",
260
+ "catch",
261
+ "class",
262
+ "const",
263
+ "constructor",
264
+ "continue",
265
+ "debugger",
266
+ "declare",
267
+ "default",
268
+ "delete",
269
+ "do",
270
+ "else",
271
+ "enum",
272
+ "export",
273
+ "extends",
274
+ "false",
275
+ "finally",
276
+ "for",
277
+ "from",
278
+ "function",
279
+ "get",
280
+ "global",
281
+ "if",
282
+ "implements",
283
+ "import",
284
+ "in",
285
+ "infer",
286
+ "instanceof",
287
+ "interface",
288
+ "intrinsic",
289
+ "is",
290
+ "keyof",
291
+ "let",
292
+ "module",
293
+ "namespace",
294
+ "never",
295
+ "new",
296
+ "null",
297
+ "number",
298
+ "object",
299
+ "of",
300
+ "out",
301
+ "override",
302
+ "package",
303
+ "private",
304
+ "protected",
305
+ "public",
306
+ "readonly",
307
+ "require",
308
+ "return",
309
+ "satisfies",
310
+ "set",
311
+ "static",
312
+ "string",
313
+ "super",
314
+ "switch",
315
+ "symbol",
316
+ "this",
317
+ "throw",
318
+ "true",
319
+ "try",
320
+ "type",
321
+ "typeof",
322
+ "undefined",
323
+ "unique",
324
+ "unknown",
325
+ "using",
326
+ "var",
327
+ "void",
328
+ "while",
329
+ "with",
330
+ "yield"
331
+ ]);
211
332
  function createTsAstPropertyKey(key) {
212
- if (/^[$A-Z_a-z][\w$]*$/.test(key)) return factory.createIdentifier(key);
333
+ if (isSafePropertyIdentifier(key)) return factory.createIdentifier(key);
213
334
  return factory.createStringLiteral(key);
214
335
  }
336
+ function isSafePropertyIdentifier(key) {
337
+ return isIdentifierName(key) && !RESERVED_IDENTIFIER_NAMES.has(key);
338
+ }
339
+ function isIdentifierName(value) {
340
+ const [firstCharacter] = value;
341
+ if (!firstCharacter) return false;
342
+ return isIdentifierStart(firstCharacter.codePointAt(0), ScriptTarget.Latest) && Array.from(value.slice(firstCharacter.length)).every((character) => isIdentifierPart(character.codePointAt(0), ScriptTarget.Latest));
343
+ }
215
344
  //#endregion
216
345
  //#region src/tsTypePrinter.ts
217
346
  function print(tsType) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/tsTypeGenerator.ts","../src/tsTypePrinter.ts"],"sourcesContent":["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 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 Error(\"ZodLiteral has no values\");\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 Error(`Unsupported literal type: ${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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"}
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 isArrayTypeNode,\n isIdentifier,\n isIdentifierPart,\n isIdentifierStart,\n isLiteralTypeNode,\n isParenthesizedTypeNode,\n isTupleTypeNode,\n isTypeReferenceNode,\n isUnionTypeNode,\n ScriptTarget,\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(\n type: TypeNode,\n fallbackType: TypeNode = type\n): TypeNode {\n if (isParenthesizedTypeNode(type)) {\n return withoutUndefined(type.type, fallbackType);\n }\n\n if (type.kind === SyntaxKind.UndefinedKeyword) {\n return fallbackType;\n }\n\n if (!isUnionTypeNode(type)) {\n return type;\n }\n\n const types = type.types\n .map(nextType => withoutUndefined(nextType))\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 fallbackType;\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 const innerType = fromZod(zodNonOptional._zod.def.innerType);\n return withoutUndefined(\n innerType,\n factory.createKeywordTypeNode(SyntaxKind.NeverKeyword)\n );\n}\n\nfunction fromZodReadonly(zodReadonly: $ZodReadonly): TypeNode {\n return createReadonlyType(fromZod(zodReadonly._zod.def.innerType));\n}\n\nfunction fromZodNaN(_zodNaN: $ZodNaN): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.NumberKeyword);\n}\n\nfunction fromZodPipe(zodPipe: $ZodPipe): TypeNode {\n return fromZod(zodPipe._zod.def.out);\n}\n\nfunction fromZodSuccess(_zodSuccess: $ZodSuccess): TypeNode {\n return factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword);\n}\n\nfunction fromZodCatch(zodCatch: $ZodCatch): TypeNode {\n return fromZod(zodCatch._zod.def.innerType);\n}\n\nfunction fromZodFile(_zodFile: $ZodFile): TypeNode {\n return factory.createTypeReferenceNode(factory.createIdentifier(\"File\"));\n}\n\nfunction createReadonlyType(type: TypeNode): TypeNode {\n if (isParenthesizedTypeNode(type)) {\n return createReadonlyType(type.type);\n }\n\n if (isUnionTypeNode(type)) {\n return factory.createUnionTypeNode(type.types.map(createReadonlyType));\n }\n\n if (isArrayTypeNode(type) || isTupleTypeNode(type)) {\n return factory.createTypeOperatorNode(SyntaxKind.ReadonlyKeyword, type);\n }\n\n if (isReadonlyPrimitiveType(type) || isLiteralTypeNode(type)) {\n return type;\n }\n\n if (isTypeReferenceNode(type)) {\n const typeName = isIdentifier(type.typeName)\n ? type.typeName.escapedText.toString()\n : undefined;\n\n if (typeName === \"Map\") {\n return factory.createTypeReferenceNode(\n factory.createIdentifier(\"ReadonlyMap\"),\n type.typeArguments\n );\n }\n\n if (typeName === \"Set\") {\n return factory.createTypeReferenceNode(\n factory.createIdentifier(\"ReadonlySet\"),\n type.typeArguments\n );\n }\n\n if (typeName === \"Date\" || typeName === \"Promise\") {\n return type;\n }\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier(\"Readonly\"), [\n type,\n ]);\n}\n\nfunction isReadonlyPrimitiveType(type: TypeNode): boolean {\n return [\n SyntaxKind.AnyKeyword,\n SyntaxKind.BigIntKeyword,\n SyntaxKind.BooleanKeyword,\n SyntaxKind.NeverKeyword,\n SyntaxKind.NumberKeyword,\n SyntaxKind.StringKeyword,\n SyntaxKind.SymbolKeyword,\n SyntaxKind.UndefinedKeyword,\n SyntaxKind.UnknownKeyword,\n SyntaxKind.VoidKeyword,\n ].includes(type.kind);\n}\n\nconst RESERVED_IDENTIFIER_NAMES = new Set([\n \"abstract\",\n \"accessor\",\n \"any\",\n \"as\",\n \"asserts\",\n \"async\",\n \"await\",\n \"bigint\",\n \"boolean\",\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"constructor\",\n \"continue\",\n \"debugger\",\n \"declare\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"enum\",\n \"export\",\n \"extends\",\n \"false\",\n \"finally\",\n \"for\",\n \"from\",\n \"function\",\n \"get\",\n \"global\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"infer\",\n \"instanceof\",\n \"interface\",\n \"intrinsic\",\n \"is\",\n \"keyof\",\n \"let\",\n \"module\",\n \"namespace\",\n \"never\",\n \"new\",\n \"null\",\n \"number\",\n \"object\",\n \"of\",\n \"out\",\n \"override\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"readonly\",\n \"require\",\n \"return\",\n \"satisfies\",\n \"set\",\n \"static\",\n \"string\",\n \"super\",\n \"switch\",\n \"symbol\",\n \"this\",\n \"throw\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"undefined\",\n \"unique\",\n \"unknown\",\n \"using\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n]);\n\nfunction createTsAstPropertyKey(key: string): Identifier | StringLiteral {\n if (isSafePropertyIdentifier(key)) {\n return factory.createIdentifier(key);\n }\n return factory.createStringLiteral(key);\n}\n\nfunction isSafePropertyIdentifier(key: string): boolean {\n return isIdentifierName(key) && !RESERVED_IDENTIFIER_NAMES.has(key);\n}\n\nfunction isIdentifierName(value: string): boolean {\n const [firstCharacter] = value;\n\n if (!firstCharacter) {\n return false;\n }\n\n return (\n isIdentifierStart(firstCharacter.codePointAt(0)!, ScriptTarget.Latest) &&\n Array.from(value.slice(firstCharacter.length)).every(character =>\n isIdentifierPart(character.codePointAt(0)!, ScriptTarget.Latest)\n )\n );\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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A;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,uBAAuB,KAAyC;AACvE,KAAI,yBAAyB,IAAI,CAC/B,QAAO,QAAQ,iBAAiB,IAAI;AAEtC,QAAO,QAAQ,oBAAoB,IAAI;;AAGzC,SAAS,yBAAyB,KAAsB;AACtD,QAAO,iBAAiB,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI;;AAGrE,SAAS,iBAAiB,OAAwB;CAChD,MAAM,CAAC,kBAAkB;AAEzB,KAAI,CAAC,eACH,QAAO;AAGT,QACE,kBAAkB,eAAe,YAAY,EAAE,EAAG,aAAa,OAAO,IACtE,MAAM,KAAK,MAAM,MAAM,eAAe,OAAO,CAAC,CAAC,OAAM,cACnD,iBAAiB,UAAU,YAAY,EAAE,EAAG,aAAa,OAAO,CACjE;;;;ACtoBL,SAAgB,MAAM,QAA0B;CAC9C,MAAM,aAAa,iBACjB,YACA,IACA,aAAa,QACb,OACA,WAAW,GACZ;AAED,QADgB,eAAe,CAChB,UAAU,SAAS,aAAa,QAAQ,WAAW"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rexeus/typeweaver-zod-to-ts",
3
- "version": "0.10.4",
3
+ "version": "0.11.0",
4
4
  "description": "Transforms Zod v4 schemas into precise TypeScript shapes. Powered by Typeweaver 🧵✨",
5
5
  "type": "module",
6
6
  "sideEffects": false,