@yolkai/nx-workspace
Version:
89 lines (88 loc) • 3.77 kB
JavaScript
;
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 });
}