typescript-swagger
Version:
Generate Swagger files from a decorator library like typescript-rest or a @decorators/express.
76 lines (58 loc) • 2.14 kB
text/typescript
import {ArgumentParser} from 'argparse';
import {Debugger} from 'debug';
import {useDebugger} from "../debug";
import {MetadataGenerator} from '../metadata/metadataGenerator';
import {SpecGenerator} from '../swagger/generator';
import {getCompilerOptions, getSwaggerConfig, validateSwaggerConfig} from "./utils";
const packageJson = require('../../package.json');
const debugLog : Debugger = useDebugger();
const workingDir: string = process.cwd();
const parser = new ArgumentParser({
addHelp: true,
description: 'Typescript Swagger tool',
version: packageJson.version
});
parser.addArgument(
['-c', '--config'],
{
help: 'The swagger config file (swagger.json or swagger.yml or swaggerConfig.js).'
}
);
parser.addArgument(
['-t', '--tsconfig'],
{
action: 'storeTrue',
defaultValue: false,
help: 'Load tsconfig.json file',
}
);
parser.addArgument(
['-p', '--tsconfig_path'],
{
help: 'The tsconfig file (tsconfig.json) path. Default to {cwd}/tsconfig.json.',
}
);
const parameters = parser.parseArgs();
try {
const config = getSwaggerConfig(workingDir, parameters.config);
const compilerOptions = getCompilerOptions(parameters.tsconfig, parameters.tsconfig_path);
debugLog('Starting Swagger generation tool');
debugLog('Compiler Options: %j', compilerOptions);
const swaggerConfig = validateSwaggerConfig(workingDir, config.swagger);
debugLog('Swagger Config: %j', swaggerConfig);
debugLog('Processing Services Metadata');
const metadata = new MetadataGenerator(swaggerConfig.entryFile, compilerOptions, swaggerConfig.ignore).generate();
debugLog('Generated Metadata: %j', metadata);
new SpecGenerator(metadata, swaggerConfig).generate()
.then(() => {
console.log('Generation completed');
})
.catch((err: any) => {
console.log(`Error generating swagger. ${err}`);
});
} catch (e) {
console.log('Swagger config not found. Did you specify the path to the swagger config file?');
process.exit(1);
}
;