diff --git a/packages/typegen/src/typegen.test.ts b/packages/typegen/src/typegen.test.ts index 7b0b31e..6582dc3 100644 --- a/packages/typegen/src/typegen.test.ts +++ b/packages/typegen/src/typegen.test.ts @@ -4,6 +4,7 @@ import { generateTypesForDocument } from './typegen'; const examplePetAPIYAML = path.join(__dirname, '__tests__', 'resources', 'example-pet-api.openapi.yml'); describe('typegen', () => { + let banner: string; let imports: string; let schemaTypes: string; let operationTypings: string; @@ -11,11 +12,13 @@ describe('typegen', () => { beforeAll(async () => { const types = await generateTypesForDocument(examplePetAPIYAML, { transformOperationName: (operationId: string) => operationId, + banner: '/* eslint-disable */', disableOptionalPathParameters: true, }); imports = types[0]; schemaTypes = types[1]; operationTypings = types[2]; + banner = types[3]; }); test('generates type files from valid v3 specification', async () => { diff --git a/packages/typegen/src/typegen.ts b/packages/typegen/src/typegen.ts index 8065528..89ce93c 100644 --- a/packages/typegen/src/typegen.ts +++ b/packages/typegen/src/typegen.ts @@ -11,6 +11,7 @@ import { JSONSchema } from '@apidevtools/json-schema-ref-parser/dist/lib/types'; interface TypegenOptions { transformOperationName?: (operation: string) => string; disableOptionalPathParameters?: boolean; + banner?: string; } interface ExportedType { @@ -37,6 +38,11 @@ export async function main() { alias: 't', type: 'string', }) + .option('banner', { + alias: 'b', + type: 'string', + description: 'Add banner to generated file', + }) .option('disableOptionalPathParameters', { type: 'boolean', description: 'Force all path parameters to be required', @@ -49,6 +55,7 @@ export async function main() { const opts: TypegenOptions = { transformOperationName: (operation: string) => operation, + banner: argv.banner, }; if (argv.transformOperationName) { @@ -69,7 +76,12 @@ export async function main() { opts.disableOptionalPathParameters = argv.disableOptionalPathParameters ?? true; - const [imports, schemaTypes, operationTypings] = await generateTypesForDocument(argv._[0] as string, opts); + const [imports, schemaTypes, operationTypings, banner] = await generateTypesForDocument(argv._[0] as string, opts); + + if (banner?.length) { + console.log(banner, '\n'); + } + console.log(imports, '\n'); console.log(schemaTypes); console.log(operationTypings); @@ -94,6 +106,8 @@ export async function generateTypesForDocument(definition: Document | string, op await api.init(); const operationTypings = generateOperationMethodTypings(api, exportedTypes, opts); + const banner = opts.banner ?? ''; + const imports = [ 'import type {', ' OpenAPIClient,', @@ -104,7 +118,7 @@ export async function generateTypesForDocument(definition: Document | string, op `} from 'openapi-client-axios';`, ].join('\n'); - return [imports, schemaTypes, operationTypings]; + return [imports, schemaTypes, operationTypings, banner]; } function generateMethodForOperation(