UNPKG

@nx/angular

Version:

The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypre

115 lines (114 loc) 5.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.applicationGenerator = applicationGenerator; const devkit_1 = require("@nx/devkit"); const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-project-command"); const js_1 = require("@nx/js"); const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup"); const convert_to_rspack_1 = require("../convert-to-rspack/convert-to-rspack"); const init_1 = require("../init/init"); const setup_ssr_1 = require("../setup-ssr/setup-ssr"); const setup_tailwind_1 = require("../setup-tailwind/setup-tailwind"); const ensure_angular_dependencies_1 = require("../utils/ensure-angular-dependencies"); const version_utils_1 = require("../utils/version-utils"); const lib_1 = require("./lib"); async function applicationGenerator(tree, schema) { (0, ts_solution_setup_1.assertNotUsingTsSolutionSetup)(tree, 'angular', 'application'); const isRspack = schema.bundler === 'rspack'; if (isRspack) { schema.bundler = 'webpack'; } const options = await (0, lib_1.normalizeOptions)(tree, schema, isRspack); const rootOffset = (0, devkit_1.offsetFromRoot)(options.appProjectRoot); await (0, js_1.initGenerator)(tree, { ...options, tsConfigName: options.rootProject ? 'tsconfig.json' : 'tsconfig.base.json', js: false, skipFormat: true, }); await (0, init_1.angularInitGenerator)(tree, { ...options, skipFormat: true, addPlugin: options.addPlugin, }); if (!options.skipPackageJson) { (0, ensure_angular_dependencies_1.ensureAngularDependencies)(tree); } (0, lib_1.createProject)(tree, options); await (0, lib_1.createFiles)(tree, options, rootOffset); if (options.addTailwind) { await (0, setup_tailwind_1.setupTailwindGenerator)(tree, { project: options.name, skipFormat: true, skipPackageJson: options.skipPackageJson, }); } await (0, lib_1.addLinting)(tree, options); await (0, lib_1.addUnitTestRunner)(tree, options); const e2ePort = await (0, lib_1.addE2e)(tree, options); (0, lib_1.addServeStaticTarget)(tree, options, options.e2eTestRunner !== 'none' ? e2ePort : options.port); (0, lib_1.updateTsconfigFiles)(tree, options); (0, lib_1.setGeneratorDefaults)(tree, options); if (options.rootProject) { const nxJson = (0, devkit_1.readNxJson)(tree); nxJson.defaultProject = options.name; (0, devkit_1.updateNxJson)(tree, nxJson); } if (options.backendProject) { (0, lib_1.addProxyConfig)(tree, options); } if (options.ssr) { await (0, setup_ssr_1.setupSsr)(tree, { project: options.name, standalone: options.standalone, skipPackageJson: options.skipPackageJson, serverRouting: options.serverRouting, }); } if (isRspack) { await (0, convert_to_rspack_1.convertToRspack)(tree, { project: options.name, skipInstall: options.skipPackageJson, skipFormat: true, }); if (options.ssr) { (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, './files/rspack-ssr'), options.appProjectSourceRoot, { pathToDistFolder: (0, devkit_1.joinPathFragments)((0, devkit_1.offsetFromRoot)(options.appProjectRoot), options.outputPath, 'browser'), tmpl: '', }); } } if (!options.skipPackageJson) { const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree); const devDependencies = {}; const packageVersions = (0, version_utils_1.versions)(tree); if (angularMajorVersion >= 20) { const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ?? packageVersions.angularDevkitVersion; if (options.bundler === 'esbuild') { devDependencies['@angular/build'] = angularDevkitVersion; } else if (isRspack) { devDependencies['@angular/build'] = angularDevkitVersion; devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion; } else { devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion; } } if (options.style === 'less') { devDependencies['less'] = packageVersions.lessVersion; } if (Object.keys(devDependencies).length) { (0, devkit_1.addDependenciesToPackageJson)(tree, {}, devDependencies, undefined, true); } } if (!options.skipFormat) { await (0, devkit_1.formatFiles)(tree); } return () => { (0, devkit_1.installPackagesTask)(tree); (0, log_show_project_command_1.logShowProjectCommand)(options.name); }; } exports.default = applicationGenerator;