From e6e6a0d82d349384ed2340554c45e84949686b73 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:17:51 +0000 Subject: [PATCH 1/6] feat: separate enums from models --- packages/sdk/src/ts-schema-generator.ts | 49 +++++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index 413131269..fdcc67b9c 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -1347,7 +1347,7 @@ export class TsSchemaGenerator { statements.push( this.generateSchemaImport( model, - true, + false, true, !!(options.lite || options.liteOnly), options.importWithFileExtension, @@ -1420,6 +1420,15 @@ export class TsSchemaGenerator { // generate: export const Enum = $schema.enums.Enum['values']; const enums = model.declarations.filter(isEnum); + const enumStatements: ts.Statement[] = [ + this.generateSchemaImport( + model, + true, + false, + !!(options.lite || options.liteOnly), + options.importWithFileExtension, + ) + ]; for (const e of enums) { let enumDecl = ts.factory.createVariableStatement( [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)], @@ -1447,7 +1456,7 @@ export class TsSchemaGenerator { if (e.comments.length > 0) { enumDecl = this.generateDocs(enumDecl, e); } - statements.push(enumDecl); + enumStatements.push(enumDecl); // generate: export type Enum = (typeof Enum)[keyof typeof Enum]; let typeAlias = ts.factory.createTypeAliasDeclaration( @@ -1465,17 +1474,41 @@ export class TsSchemaGenerator { if (e.comments.length > 0) { typeAlias = this.generateDocs(typeAlias, e); } - statements.push(typeAlias); + enumStatements.push(typeAlias); } this.generateBannerComments(statements); - // write to file - const outputFile = path.join(options.outDir, 'models.ts'); - const sourceFile = ts.createSourceFile(outputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); const printer = ts.createPrinter(); - const result = printer.printList(ts.ListFormat.MultiLine, ts.factory.createNodeArray(statements), sourceFile); - fs.writeFileSync(outputFile, result); + const enumsOutputFile = path.join(options.outDir, 'enums.ts'); + + if (enums.length > 0) { + const enumsSourceFile = ts.createSourceFile(enumsOutputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); + const enumsResult = printer.printList(ts.ListFormat.MultiLine, ts.factory.createNodeArray(enumStatements), enumsSourceFile); + fs.writeFileSync(enumsOutputFile, enumsResult); + + let exportFrom = './enums'; + if (options.importWithFileExtension) { + exportFrom += options.importWithFileExtension.startsWith('.') + ? options.importWithFileExtension + : `.${options.importWithFileExtension}`; + } + + statements.push(ts.factory.createExportDeclaration( + undefined, + false, + undefined, + ts.factory.createStringLiteral(exportFrom), + )); + } + else { + fs.unlinkSync(enumsOutputFile); + } + + const modelsOutputFile = path.join(options.outDir, 'models.ts'); + const modelsSourceFile = ts.createSourceFile(modelsOutputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); + const modelsResult = printer.printList(ts.ListFormat.MultiLine, ts.factory.createNodeArray(statements), modelsSourceFile); + fs.writeFileSync(modelsOutputFile, modelsResult); } private generateSchemaImport( From 46df7fdbef2a23b86bfbfa31d5b8f7971cc32627 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:23:52 +0000 Subject: [PATCH 2/6] fix: generate banner comments --- packages/sdk/src/ts-schema-generator.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index fdcc67b9c..2c76f0eee 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -1483,6 +1483,8 @@ export class TsSchemaGenerator { const enumsOutputFile = path.join(options.outDir, 'enums.ts'); if (enums.length > 0) { + this.generateBannerComments(enumStatements); + const enumsSourceFile = ts.createSourceFile(enumsOutputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); const enumsResult = printer.printList(ts.ListFormat.MultiLine, ts.factory.createNodeArray(enumStatements), enumsSourceFile); fs.writeFileSync(enumsOutputFile, enumsResult); From 08c18f224d737778ddde2e25773584239fb2c05b Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:25:41 +0000 Subject: [PATCH 3/6] fix: check `enumStatements` variable instead --- packages/sdk/src/ts-schema-generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index 2c76f0eee..327db98c1 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -1482,7 +1482,7 @@ export class TsSchemaGenerator { const printer = ts.createPrinter(); const enumsOutputFile = path.join(options.outDir, 'enums.ts'); - if (enums.length > 0) { + if (enumStatements.length > 0) { this.generateBannerComments(enumStatements); const enumsSourceFile = ts.createSourceFile(enumsOutputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); From 5007b2ce6a5e89d3bdcfa031edf78d45ac18248f Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:26:05 +0000 Subject: [PATCH 4/6] fix: failure when trying to delete non-existant `enums.ts` --- packages/sdk/src/ts-schema-generator.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index 327db98c1..cb5543b16 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -1504,7 +1504,9 @@ export class TsSchemaGenerator { )); } else { - fs.unlinkSync(enumsOutputFile); + if (fs.existsSync(enumsOutputFile)) { + fs.unlinkSync(enumsOutputFile); + } } const modelsOutputFile = path.join(options.outDir, 'models.ts'); From 2d2b7855f61b4fddcc2ce9a8fec7b31b49bde6a2 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:37:37 +0000 Subject: [PATCH 5/6] revert: `enumStatements` check --- packages/sdk/src/ts-schema-generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index cb5543b16..7f76aa69a 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -1482,7 +1482,7 @@ export class TsSchemaGenerator { const printer = ts.createPrinter(); const enumsOutputFile = path.join(options.outDir, 'enums.ts'); - if (enumStatements.length > 0) { + if (enums.length > 0) { this.generateBannerComments(enumStatements); const enumsSourceFile = ts.createSourceFile(enumsOutputFile, '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); From 6d3c4673fcdfbe7fac1f62a215ec2f0687a4e006 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Fri, 6 Feb 2026 11:49:36 +0000 Subject: [PATCH 6/6] Trigger Build