UNPKG

@trumbitta/nx-plugin-openapi

Version:

[![NPM Version](https://badge.fury.io/js/%40trumbitta%2Fnx-plugin-openapi.svg)](https://www.npmjs.com/@trumbitta/nx-plugin-openapi) [![License](https://img.shields.io/npm/l/@trumbitta/nx-plugin-openapi)]()

98 lines 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); // Nrwl const devkit_1 = require("@nrwl/devkit"); const run_tasks_in_serial_1 = require("@nrwl/workspace/src/utilities/run-tasks-in-serial"); // Third Parties const path_1 = require("path"); // Schematics const generator_1 = tslib_1.__importDefault(require("../init/generator")); const projectType = 'library'; function default_1(tree, schema) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const tasks = []; const options = normalizeOptions(tree, schema); // Init const initTask = yield generator_1.default(tree); tasks.push(initTask); // Add Project addProject(tree, options); // Create files createFiles(tree, options); // Update TS config updateTsConfig(tree, options); // Format if (!schema.skipFormat) { yield devkit_1.formatFiles(tree); } return run_tasks_in_serial_1.runTasksInSerial(...tasks); }); } exports.default = default_1; function normalizeOptions(host, options) { var _a; const name = devkit_1.names(options.name).fileName; const projectDirectory = options.directory ? `${devkit_1.names(options.directory).fileName}/${name}` : name; const projectName = projectDirectory.replace(new RegExp('/', 'g'), '-'); const { libsDir, npmScope } = devkit_1.getWorkspaceLayout(host); const projectRoot = devkit_1.joinPathFragments(`${libsDir}/${projectDirectory}`); const workspaceLayout = (_a = devkit_1.readWorkspaceConfiguration(host).workspaceLayout) !== null && _a !== void 0 ? _a : { libsDir: 'libs' }; const projectRootApiSpecLib = !options.isRemoteSpec && options.sourceSpecLib ? `${workspaceLayout.libsDir}/${options.sourceSpecLib}` : undefined; const parsedTags = options.tags ? options.tags.split(',').map((s) => s.trim()) : []; const importPath = options.importPath || `@${npmScope}/${projectDirectory}`; return Object.assign(Object.assign({}, options), { importPath, projectName, projectRoot, projectRootApiSpecLib, projectDirectory, parsedTags }); } const getExecutorOptions = (options) => { const executorOptions = { useDockerBuild: options.useDockerBuild, generator: options.generator, sourceSpecPathOrUrl: options.isRemoteSpec ? options.sourceSpecUrl : [options.projectRootApiSpecLib, options.sourceSpecFileRelativePath].join('/'), additionalProperties: options.additionalProperties, globalProperties: options.globalProperties, }; if (options.isRemoteSpec && options.sourceSpecUrlAuthorizationHeaders) { executorOptions.sourceSpecUrlAuthorizationHeaders = options.sourceSpecUrlAuthorizationHeaders; } return executorOptions; }; const addProject = (host, options) => { const executorOptions = getExecutorOptions(options); devkit_1.addProjectConfiguration(host, options.projectName, { root: options.projectRoot, sourceRoot: devkit_1.joinPathFragments(options.projectRoot, 'src'), projectType, targets: { 'generate-sources': { executor: '@trumbitta/nx-plugin-openapi:generate-api-lib-sources', options: executorOptions, }, }, implicitDependencies: !options.isRemoteSpec && options.sourceSpecLib ? [options.sourceSpecLib] : undefined, tags: options.parsedTags, }); }; function createFiles(host, options) { devkit_1.generateFiles(host, path_1.join(__dirname, './files'), options.projectRoot, Object.assign(Object.assign(Object.assign({}, options), devkit_1.names(options.name)), { dot: '.', tmpl: '', offsetFromRoot: devkit_1.offsetFromRoot(options.projectRoot) })); } function updateTsConfig(host, options) { devkit_1.updateJson(host, 'tsconfig.base.json', (json) => { const compilerOptions = json.compilerOptions; compilerOptions.paths = compilerOptions.paths || {}; delete compilerOptions.paths[options.name]; if (compilerOptions.paths[options.importPath]) { throw new Error(`You already have a library using the import path "${options.importPath}". Make sure to specify a unique one.`); } const { libsDir } = devkit_1.getWorkspaceLayout(host); compilerOptions.paths[options.importPath] = [`${libsDir}/${options.projectDirectory}/src/index.ts`]; return json; }); } //# sourceMappingURL=generator.js.map