@@ -266,7 +266,7 @@ export function generate({
266
266
varName,
267
267
zodImportValue : "z" ,
268
268
} ) ,
269
- requiresImport : false ,
269
+ enumImport : false ,
270
270
typeName : importName ,
271
271
varName,
272
272
} ;
@@ -282,8 +282,9 @@ export function generate({
282
282
{ typeName : string ; value : ts . VariableStatement }
283
283
> ( ) ;
284
284
285
- // Keep track of types which need to be imported from the source file
285
+ // Keep track of types/enums which need to be imported from the source file
286
286
const sourceTypeImports : Set < string > = new Set ( ) ;
287
+ const sourceEnumImports : Set < string > = new Set ( ) ;
287
288
288
289
// Zod schemas with direct or indirect dependencies that are not in `zodSchemas`, won't be generated
289
290
const zodSchemasWithMissingDependencies = new Set < string > ( ) ;
@@ -302,40 +303,38 @@ export function generate({
302
303
! statements . has ( varName ) &&
303
304
! zodSchemasWithMissingDependencies . has ( varName )
304
305
)
305
- . forEach (
306
- ( { varName, dependencies, statement, typeName, requiresImport } ) => {
307
- const isCircular = dependencies . includes ( varName ) ;
308
- const notGeneratedDependencies = dependencies
309
- . filter ( ( dep ) => dep !== varName )
310
- . filter ( ( dep ) => ! statements . has ( dep ) )
311
- . filter ( ( dep ) => ! importedZodSchemas . has ( dep ) ) ;
312
- if ( notGeneratedDependencies . length === 0 ) {
313
- done = false ;
314
- if ( isCircular ) {
315
- sourceTypeImports . add ( typeName ) ;
316
- statements . set ( varName , {
317
- value : transformRecursiveSchema ( "z" , statement , typeName ) ,
318
- typeName,
319
- } ) ;
320
- } else {
321
- if ( requiresImport ) {
322
- sourceTypeImports . add ( typeName ) ;
323
- }
324
- statements . set ( varName , { value : statement , typeName } ) ;
306
+ . forEach ( ( { varName, dependencies, statement, typeName, enumImport } ) => {
307
+ const isCircular = dependencies . includes ( varName ) ;
308
+ const notGeneratedDependencies = dependencies
309
+ . filter ( ( dep ) => dep !== varName )
310
+ . filter ( ( dep ) => ! statements . has ( dep ) )
311
+ . filter ( ( dep ) => ! importedZodSchemas . has ( dep ) ) ;
312
+ if ( notGeneratedDependencies . length === 0 ) {
313
+ done = false ;
314
+ if ( isCircular ) {
315
+ sourceTypeImports . add ( typeName ) ;
316
+ statements . set ( varName , {
317
+ value : transformRecursiveSchema ( "z" , statement , typeName ) ,
318
+ typeName,
319
+ } ) ;
320
+ } else {
321
+ if ( enumImport ) {
322
+ sourceEnumImports . add ( typeName ) ;
325
323
}
326
- } else if (
327
- // Check if every dependency is (in `zodSchemas` and not in `zodSchemasWithMissingDependencies`)
328
- ! notGeneratedDependencies . every (
329
- ( dep ) =>
330
- zodSchemaNames . includes ( dep ) &&
331
- ! zodSchemasWithMissingDependencies . has ( dep )
332
- )
333
- ) {
334
- done = false ;
335
- zodSchemasWithMissingDependencies . add ( varName ) ;
324
+ statements . set ( varName , { value : statement , typeName } ) ;
336
325
}
326
+ } else if (
327
+ // Check if every dependency is (in `zodSchemas` and not in `zodSchemasWithMissingDependencies`)
328
+ ! notGeneratedDependencies . every (
329
+ ( dep ) =>
330
+ zodSchemaNames . includes ( dep ) &&
331
+ ! zodSchemasWithMissingDependencies . has ( dep )
332
+ )
333
+ ) {
334
+ done = false ;
335
+ zodSchemasWithMissingDependencies . add ( varName ) ;
337
336
}
338
- ) ;
337
+ } ) ;
339
338
}
340
339
341
340
// Generate remaining schemas, which have circular dependencies with loop of length > 1 like: A->B—>C->A
@@ -390,7 +389,15 @@ ${Array.from(zodSchemasWithMissingDependencies).join("\n")}`
390
389
)
391
390
) ;
392
391
393
- const sourceTypeImportsValues = Array . from ( sourceTypeImports . values ( ) ) ;
392
+ const sourceTypeImportsValues = [
393
+ ...sourceTypeImports . values ( ) ,
394
+ ...sourceEnumImports . values ( ) ,
395
+ ] . map ( ( name ) => {
396
+ return sourceEnumImports . has ( name )
397
+ ? name // enum import, no type notation added
398
+ : `type ${ name } ` ;
399
+ } ) ;
400
+
394
401
const getZodSchemasFile = (
395
402
typesImportPath : string
396
403
) => `// Generated by ts-to-zod
0 commit comments