UNPKG

fastify-openapi-connector-generator

Version:

Complimentary CLI tool for fastify-openapi-connector package. It generates prefabricates for handlers from OpenAPI specification.

69 lines (58 loc) 2.66 kB
#!/usr/bin/env node import { bundle, createConfig } from '@redocly/openapi-core'; import parser from 'yargs-parser'; import { type OpenAPISpec, generate } from './generator.js'; const HELP = `Usage $ fastify-openapi-connector-generator [options] Options: --help Display this --schema-file [Required] Path to schema file generated by openapi-typescript. --types-file [Required] Path to where types file should be generated. --service-file [Required] Path to where service file should be generated. --spec-file [Required] Path to OpenAPI spec file --paths-dir [Optional] Directory to generate route handlers from paths section of OAS. --webhooks-dir [Optional] Directory to generate route handlers from webhooks section of OAS. --security-dir [Optional] Directory to generate security handlers. --untyped [Optional] Indicates that generated handlers should be untyped. --override-types-file [Optional] Indicates that types file should be overrided if exists. --import-extension [Optional] Import extension of js/ts files. Default is 'js' `; const [, , ...args] = process.argv; const flags = parser(args, { boolean: ['untyped', 'help', 'overrideTypesFile'], string: ['specFile', 'schemaFile', 'pathsDir', 'webhooksDir', 'securityDir', 'typesFile', 'serviceFile', 'importExtension'], }); if ('help' in flags) { console.info(HELP); process.exit(0); } if (!('schemaFile' in flags)) { console.info('--schema-file option is required! (Use opetion --help for more info)'); process.exit(-1); } if (!('typesFile' in flags)) { console.info('--types-file option is required! (Use opetion --help for more info)'); process.exit(-1); } if (!('serviceFile' in flags)) { console.info('--service-file option is required! (Use opetion --help for more info)'); process.exit(-1); } if (!('specFile' in flags)) { console.info('--spec-file option is required! (Use opetion --help for more info)'); process.exit(-1); } const config = await createConfig({}, { extends: ['recommended-strict'] }); const bundleResults = await bundle({ ref: flags.specFile, config, dereference: false }); await generate({ schemaFilePath: flags.schemaFile, spec: bundleResults.bundle.parsed as OpenAPISpec, typesPath: flags.typesFile, servicePath: flags.serviceFile, routesPath: flags.pathsDir, webhooksPath: flags.webhooksDir, securityPath: flags.securityDir, typed: !flags.untyped, overrideTypesFile: !!flags.overrideTypesFile, importExtension: flags.importExtension ?? 'js', });