UNPKG

tsoa-custom-decorators

Version:

Build swagger-compliant REST APIs using TypeScript and Node

156 lines 5.99 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var metadataGenerator_1 = require("./metadataGeneration/metadataGenerator"); var specGenerator_1 = require("./swagger/specGenerator"); var routeGenerator_1 = require("./routeGeneration/routeGenerator"); var yargs = require("yargs"); var fs = require("fs"); var path = require("path"); var workingDir = process.cwd(); var getPackageJsonValue = function (key) { try { var packageJson = require(workingDir + "/package.json"); return packageJson[key] || ''; } catch (err) { return ''; } }; var versionDefault = getPackageJsonValue('version'); var nameDefault = getPackageJsonValue('name'); var descriptionDefault = getPackageJsonValue('description'); var licenseDefault = getPackageJsonValue('license'); var getConfig = function (configPath) { if (configPath === void 0) { configPath = 'tsoa.json'; } var config; try { config = require(workingDir + "/" + configPath); } catch (err) { if (err.code === 'MODULE_NOT_FOUND') { throw Error("No config file found at '" + configPath + "'"); } else if (err.name === 'SyntaxError') { throw Error("Invalid JSON syntax in config at '" + configPath + "': " + err.message); } else { throw Error("Unhandled error encountered loading '" + configPath + "': " + err.message); } } return config; }; var validateSwaggerConfig = function (config) { if (!config.outputDirectory) { throw new Error('Missing outputDirectory: onfiguration most contain output directory'); } if (!config.entryFile) { throw new Error('Missing entryFile: Configuration must contain an entry point file.'); } config.version = config.version || versionDefault; config.name = config.name || nameDefault; config.description = config.description || descriptionDefault; config.license = config.license || licenseDefault; config.basePath = config.basePath || '/'; return config; }; var validateRoutesConfig = function (config) { if (!config.entryFile) { throw new Error('Missing entryFile: Configuration must contain an entry point file.'); } if (!config.routesDir) { throw new Error('Missing routesDir: Configuration must contain a routes file output directory.'); } if (config.authenticationModule && !(fs.existsSync(config.authenticationModule) || fs.existsSync(config.authenticationModule + '.ts'))) { throw new Error("No authenticationModule file found at '" + config.authenticationModule + "'"); } if (config.iocModule && !(fs.existsSync(config.iocModule) || fs.existsSync(config.iocModule + '.ts'))) { throw new Error("No iocModule file found at '" + config.iocModule + "'"); } config.basePath = config.basePath || '/'; config.middleware = config.middleware || 'express'; return config; }; var configurationArgs = { alias: 'c', describe: 'tsoa configuration file; default is tsoa.json in the working directory', required: false, type: 'string' }; var hostArgs = { describe: 'API host', required: false, type: 'string' }; var basePathArgs = { describe: 'Base API path', required: false, type: 'string' }; yargs .usage('Usage: $0 <command> [options]') .demand(1) .command('swagger', 'Generate swagger spec', { basePath: basePathArgs, configuration: configurationArgs, host: hostArgs, }, function (args) { try { var config = getConfig(args.configuration); if (args.basePath) { config.swagger.basePath = args.basePath; } if (args.host) { config.swagger.host = args.host; } var metadataGeneratorDecoratorSchema = config.decoratorsSchema; var swaggerConfig = validateSwaggerConfig(config.swagger); var metadata = new metadataGenerator_1.MetadataGenerator(swaggerConfig.entryFile, metadataGeneratorDecoratorSchema).Generate(); new specGenerator_1.SpecGenerator(metadata, config.swagger).GenerateJson(swaggerConfig.outputDirectory); } catch (err) { console.error(err); } }) .command('routes', 'Generate routes', { basePath: basePathArgs, configuration: configurationArgs, }, function (args) { try { var config = getConfig(args.configuration); if (args.basePath) { config.routes.basePath = args.basePath; } var routesConfig = validateRoutesConfig(config.routes); var metadataGeneratorDecoratorSchema = config.decoratorsSchema; var metadata = new metadataGenerator_1.MetadataGenerator(routesConfig.entryFile, metadataGeneratorDecoratorSchema).Generate(); var routeGenerator = new routeGenerator_1.RouteGenerator(metadata, routesConfig); var pathTransformer = function (path) { return path.replace(/{/g, ':').replace(/}/g, ''); }; var template = void 0; switch (routesConfig.middleware) { case 'express': template = path.join(__dirname, 'routeGeneration/templates/express.ts'); break; case 'hapi': template = path.join(__dirname, 'routeGeneration/templates/hapi.ts'); pathTransformer = function (path) { return path; }; break; case 'koa': template = path.join(__dirname, 'routeGeneration/templates/koa.ts'); break; default: template = path.join(__dirname, 'routeGeneration/templates/express.ts'); } if (routesConfig.middlewareTemplate) { template = routesConfig.middlewareTemplate; } routeGenerator.GenerateCustomRoutes(template, pathTransformer); } catch (err) { console.error(err); } }) .help('help') .alias('help', 'h') .argv; //# sourceMappingURL=cli.js.map