@nxext/stencil
Version:
Nx plugin for stenciljs
91 lines (90 loc) • 5.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applicationGenerator = applicationGenerator;
const tslib_1 = require("tslib");
const typings_1 = require("./../../utils/typings");
const devkit_1 = require("@nx/devkit");
const js_1 = require("@nx/js");
const utillities_1 = require("../../utils/utillities");
const init_1 = require("../init/init");
const path_1 = require("path");
const node_os_1 = require("node:os");
const add_project_1 = require("./lib/add-project");
const add_linting_1 = require("./lib/add-linting");
const add_cypress_1 = require("./lib/add-cypress");
const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-project-command");
function normalizeOptions(host, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d, _e, _f;
yield (0, project_name_and_root_utils_1.ensureRootProjectName)(options, 'application');
const { projectName, projectRoot } = yield (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
name: options.name,
projectType: 'application',
directory: options.directory,
});
(_a = options.name) !== null && _a !== void 0 ? _a : (options.name = projectName);
const parsedTags = options.tags
? options.tags.split(',').map((s) => s.trim())
: [];
const nxJson = (0, devkit_1.readNxJson)(host);
let e2eWebServerTarget = 'serve';
let e2ePort = 4200;
if (((_b = nxJson.targetDefaults) === null || _b === void 0 ? void 0 : _b[e2eWebServerTarget]) &&
((_d = (_c = nxJson.targetDefaults) === null || _c === void 0 ? void 0 : _c[e2eWebServerTarget].options) === null || _d === void 0 ? void 0 : _d.port)) {
e2ePort = (_f = (_e = nxJson.targetDefaults) === null || _e === void 0 ? void 0 : _e[e2eWebServerTarget].options) === null || _f === void 0 ? void 0 : _f.port;
}
const e2eProjectName = `${projectName}-e2e`;
const e2eProjectRoot = `${projectRoot}-e2e`;
const e2eWebServerAddress = `http://localhost:${e2ePort}`;
const style = (0, utillities_1.calculateStyle)(options.style);
const appType = typings_1.AppType.application;
return Object.assign(Object.assign({}, options), { name: projectName, projectName,
projectRoot, projectDirectory: projectRoot, parsedTags,
e2eProjectName,
e2eProjectRoot,
e2eWebServerAddress,
e2eWebServerTarget,
style,
appType });
});
}
function createFiles(host, options) {
(0, devkit_1.generateFiles)(host, (0, path_1.join)(__dirname, './files/app'), options.projectRoot, Object.assign(Object.assign(Object.assign({}, options), (0, devkit_1.names)(options.name)), { offsetFromRoot: (0, devkit_1.offsetFromRoot)(options.projectRoot) }));
if (options.unitTestRunner === 'none') {
host.delete(`${options.projectRoot}/src/components/app-home/app-home.spec.ts`);
host.delete(`${options.projectRoot}/src/components/app-root/app-root.spec.ts`);
host.delete(`${options.projectRoot}/src/components/app-profile/app-profile.spec.ts`);
}
}
function applicationGenerator(host, schema) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
(0, ts_solution_setup_1.assertNotUsingTsSolutionSetup)(host, '@nxext/stencil', 'application');
const options = yield normalizeOptions(host, schema);
const jsInitTask = yield (0, js_1.initGenerator)(host, Object.assign(Object.assign({}, options), { tsConfigName: 'tsconfig.base.json', skipFormat: true }));
const initTask = yield (0, init_1.initGenerator)(host, Object.assign(Object.assign({}, options), { skipFormat: true }));
createFiles(host, options);
(0, add_project_1.addProject)(host, options);
const lintTask = yield (0, add_linting_1.addLinting)(host, options);
const cypressTask = yield (0, add_cypress_1.addCypress)(host, options);
const ignoresToUpdate = ['.gitignore', '.prettierignore', '.nxignore'];
const toBeIgnored = ['.stencil'].join(node_os_1.EOL);
ignoresToUpdate.forEach((ignoreFile) => {
if (host.exists(ignoreFile)) {
const gitignoreContent = host.read(ignoreFile, 'utf-8');
if (!gitignoreContent.includes('.stencil')) {
host.write(ignoreFile, `${gitignoreContent}
${toBeIgnored}
`);
}
}
});
if (!options.skipFormat) {
yield (0, devkit_1.formatFiles)(host);
}
return (0, devkit_1.runTasksInSerial)(jsInitTask, initTask, lintTask, cypressTask, () => (0, log_show_project_command_1.logShowProjectCommand)(options.projectName));
});
}
exports.default = applicationGenerator;
//# sourceMappingURL=generator.js.map