UNPKG

@yolkai/nx-workspace

Version:

Extensible Dev Tools for Monorepos

89 lines (88 loc) 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const schematics_1 = require("@angular-devkit/schematics"); const core_1 = require("@angular-devkit/core"); const nx_workspace_1 = require("@yolkai/nx-workspace"); const nx_workspace_2 = require("@yolkai/nx-workspace"); const nx_workspace_3 = require("@yolkai/nx-workspace"); const nx_workspace_4 = require("@yolkai/nx-workspace"); const nx_workspace_5 = require("@yolkai/nx-workspace"); const lint_1 = require("../../utils/lint"); function addProject(options) { return nx_workspace_1.updateWorkspaceInTree(json => { const architect = {}; architect.lint = lint_1.generateProjectLint(core_1.normalize(options.projectRoot), core_1.join(core_1.normalize(options.projectRoot), 'tsconfig.lib.json'), options.linter); json.projects[options.name] = { root: options.projectRoot, sourceRoot: core_1.join(core_1.normalize(options.projectRoot), 'src'), projectType: 'library', schematics: {}, architect }; return json; }); } function updateTsConfig(options) { return schematics_1.chain([ (host, context) => { const nxJson = nx_workspace_2.readJsonInTree(host, 'nx.json'); return nx_workspace_2.updateJsonInTree('tsconfig.json', json => { const c = json.compilerOptions; delete c.paths[options.name]; c.paths[`@${nxJson.npmScope}/${options.projectDirectory}`] = [ `libs/${options.projectDirectory}/src/index.ts` ]; return json; })(host, context); } ]); } function createFiles(options) { return schematics_1.mergeWith(schematics_1.apply(schematics_1.url(`./files/lib`), [ schematics_1.template(Object.assign({}, options, nx_workspace_3.names(options.name), { tmpl: '', offsetFromRoot: nx_workspace_5.offsetFromRoot(options.projectRoot) })), schematics_1.move(options.projectRoot) ])); } function updateNxJson(options) { return nx_workspace_2.updateJsonInTree('nx.json', json => { json.projects[options.name] = { tags: options.parsedTags }; return json; }); } function default_1(schema) { return (host, context) => { const options = normalizeOptions(schema); return schematics_1.chain([ lint_1.addLintFiles(options.projectRoot, options.linter), createFiles(options), !options.skipTsConfig ? updateTsConfig(options) : schematics_1.noop(), addProject(options), updateNxJson(options), options.unitTestRunner !== 'none' ? schematics_1.externalSchematic('@yolkai/nx-jest', 'jest-project', { project: options.name, setupFile: 'none', supportTsx: true, skipSerializers: true }) : schematics_1.noop(), nx_workspace_4.formatFiles(options) ])(host, context); }; } exports.default = default_1; function normalizeOptions(options) { const name = nx_workspace_3.toFileName(options.name); const projectDirectory = options.directory ? `${nx_workspace_3.toFileName(options.directory)}/${name}` : name; const projectName = projectDirectory.replace(new RegExp('/', 'g'), '-'); const fileName = options.simpleModuleName ? name : projectName; const projectRoot = `libs/${projectDirectory}`; const parsedTags = options.tags ? options.tags.split(',').map(s => s.trim()) : []; return Object.assign({}, options, { fileName, name: projectName, projectRoot, projectDirectory, parsedTags }); }