11import type { PrintResult } from '../printer/types' ;
2+ import type { OpenAPILatest } from '../types/openapi' ;
23import type {
34 GeneratingOptions ,
45 GeneratingPayload ,
@@ -15,6 +16,7 @@ import process from 'node:process';
1516import { Emitter } from 'strict-event-emitter' ;
1617import { normalizeError } from 'try-flatten' ;
1718import { Printer } from '../printer' ;
19+ import { OpenAPIVersion } from '../types/openapi' ;
1820import { isString } from '../utils/type-is' ;
1921import { Reader } from './Reader' ;
2022
@@ -60,6 +62,11 @@ export class Generator extends Emitter<GeneratorEmits> {
6062 const mainFile = path . join ( cwd , dest , fileName ) ;
6163 const typeFile = mainFile . replace ( / \. t s $ / , '.type.ts' ) ;
6264 const zodFile = mainFile . replace ( / \. t s $ / , '.zod.ts' ) ;
65+ const schemaFiles : Record < OpenAPIVersion , string > = {
66+ [ OpenAPIVersion . V2_0 ] : mainFile . replace ( / \. t s $ / , '.v2_0.json' ) ,
67+ [ OpenAPIVersion . V3_0 ] : mainFile . replace ( / \. t s $ / , '.v3_0.json' ) ,
68+ [ OpenAPIVersion . V3_1 ] : mainFile . replace ( / \. t s $ / , '.v3_1.json' ) ,
69+ } ;
6370
6471 // 1. 参数合并
6572 const printerOptions = Object . assign ( { } , globalPrinter , scopePrinter ) ;
@@ -82,11 +89,11 @@ export class Generator extends Emitter<GeneratorEmits> {
8289 this . emit ( 'process' , makePayload ( 'reading' ) ) ;
8390 const reader = new Reader ( ) ;
8491 reader . cwd = cwd ;
85- const openAPIV3Document = await reader . read ( document ) ;
92+ const migrated = await reader . read ( document ) ;
8693
8794 // 3. 输出
8895 this . emit ( 'process' , makePayload ( 'printing' ) ) ;
89- const printer = new Printer ( openAPIV3Document , printerOptions ) ;
96+ const printer = new Printer ( migrated . at ( - 1 ) ! . document ! as OpenAPILatest . Document , printerOptions ) ;
9097 const { type, main, zod } = printer . print ( { document : name , cwd, mainFile, typeFile, zodFile } ) ;
9198
9299 // 4. 写入
@@ -100,6 +107,15 @@ export class Generator extends Emitter<GeneratorEmits> {
100107 this . #writePrintResult( 'zod' , zodFile , zod ) ;
101108 }
102109
110+ if ( printerOptions . writeSchema ) {
111+ migrated . forEach ( ( { version, document, errors } ) => {
112+ this . #writePrintResult( `schema@${ version } ` , schemaFiles [ version ] , {
113+ code : JSON . stringify ( document , null , 2 ) ,
114+ errors,
115+ } ) ;
116+ } ) ;
117+ }
118+
103119 this . emit ( 'process' , makePayload ( 'generated' ) ) ;
104120 }
105121
0 commit comments