@trumbitta/nx-plugin-openapi
Version:
[](https://www.npmjs.com/@trumbitta/nx-plugin-openapi) []()
98 lines • 4.58 kB
JavaScript
;
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