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

135 lines (134 loc) 6.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.libraryGenerator = libraryGenerator; const tslib_1 = require("tslib"); 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 add_release_config_1 = require("@nx/js/src/generators/library/utils/add-release-config"); const init_1 = tslib_1.__importDefault(require("../../generators/init/init")); const test_runners_1 = require("../../utils/test-runners"); const add_linting_1 = tslib_1.__importDefault(require("../add-linting/add-linting")); const setup_tailwind_1 = tslib_1.__importDefault(require("../setup-tailwind/setup-tailwind")); const add_jest_1 = require("../utils/add-jest"); const add_vitest_1 = require("../utils/add-vitest"); const dependencies_1 = require("../utils/dependencies"); const ensure_angular_dependencies_1 = require("../utils/ensure-angular-dependencies"); const validations_1 = require("../utils/validations"); const version_utils_1 = require("../utils/version-utils"); const add_module_1 = require("./lib/add-module"); const add_project_1 = require("./lib/add-project"); const add_standalone_component_1 = require("./lib/add-standalone-component"); const create_files_1 = require("./lib/create-files"); const normalize_options_1 = require("./lib/normalize-options"); const set_generator_defaults_1 = require("./lib/set-generator-defaults"); const update_lib_package_npm_scope_1 = require("./lib/update-lib-package-npm-scope"); const update_tsconfig_files_1 = require("./lib/update-tsconfig-files"); const validate_options_1 = require("./lib/validate-options"); async function libraryGenerator(tree, schema) { (0, validations_1.assertNotUsingTsSolutionSetup)(tree, 'library'); (0, validate_options_1.validateOptions)(tree, schema); const options = await (0, normalize_options_1.normalizeOptions)(tree, schema); const { libraryOptions } = options; const pkgVersions = (0, version_utils_1.versions)(tree); await (0, js_1.initGenerator)(tree, { ...libraryOptions, js: false, skipFormat: true, }); await (0, init_1.default)(tree, { ...libraryOptions, skipFormat: true }); if (!libraryOptions.skipPackageJson) { // if zone.js is not installed, we'll never install it as a dependency // from the library generator (0, ensure_angular_dependencies_1.ensureAngularDependencies)(tree, /*zoneless*/ true); } const project = await (0, add_project_1.addProject)(tree, libraryOptions); (0, create_files_1.createFiles)(tree, options, project); await addUnitTestRunner(tree, libraryOptions); (0, update_tsconfig_files_1.updateTsConfigFiles)(tree, libraryOptions); updateNpmScopeIfBuildableOrPublishable(tree, libraryOptions); (0, set_generator_defaults_1.setGeneratorDefaults)(tree, options); if (!libraryOptions.standalone) { (0, add_module_1.addModule)(tree, libraryOptions); } else { await (0, add_standalone_component_1.addStandaloneComponent)(tree, options); } await addLinting(tree, libraryOptions); if (libraryOptions.addTailwind) { await (0, setup_tailwind_1.default)(tree, { project: libraryOptions.name, skipFormat: true, skipPackageJson: libraryOptions.skipPackageJson, }); } if ((libraryOptions.buildable || libraryOptions.publishable) && !libraryOptions.skipPackageJson) { (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { 'ng-packagr': pkgVersions.ngPackagrVersion, }, undefined, true); (0, dependencies_1.addBuildableLibrariesPostCssDependencies)(tree); } if (!libraryOptions.skipFormat) { await (0, devkit_1.formatFiles)(tree); } const tasks = [() => (0, devkit_1.installPackagesTask)(tree)]; if (libraryOptions.publishable) { tasks.push(await (0, add_release_config_1.releaseTasks)(tree)); } tasks.push(() => (0, log_show_project_command_1.logShowProjectCommand)(libraryOptions.name)); return (0, devkit_1.runTasksInSerial)(...tasks); } async function addUnitTestRunner(host, options) { const zoneless = (0, devkit_1.getDependencyVersionFromPackageJson)(host, 'zone.js') === null; switch (options.unitTestRunner) { case test_runners_1.UnitTestRunner.Jest: await (0, add_jest_1.addJest)(host, { name: options.name, projectRoot: options.projectRoot, skipPackageJson: options.skipPackageJson, strict: options.strict, runtimeTsconfigFileName: 'tsconfig.lib.json', zoneless, }); break; case test_runners_1.UnitTestRunner.VitestAngular: await (0, add_vitest_1.addVitestAngular)(host, { name: options.name, projectRoot: options.projectRoot, skipPackageJson: options.skipPackageJson, useNxUnitTestRunnerExecutor: true, }); break; case test_runners_1.UnitTestRunner.VitestAnalog: await (0, add_vitest_1.addVitestAnalog)(host, { name: options.name, projectRoot: options.projectRoot, skipFormat: options.skipFormat, skipPackageJson: options.skipPackageJson, strict: options.strict, zoneless, }); break; } } function updateNpmScopeIfBuildableOrPublishable(host, options) { if (options.buildable || options.publishable) { (0, update_lib_package_npm_scope_1.updateLibPackageNpmScope)(host, options); } } async function addLinting(host, options) { if (options.linter === 'none') { return; } await (0, add_linting_1.default)(host, { projectName: options.name, projectRoot: options.projectRoot, prefix: options.prefix, unitTestRunner: options.unitTestRunner, setParserOptionsProject: options.setParserOptionsProject, skipFormat: true, skipPackageJson: options.skipPackageJson, }); } exports.default = libraryGenerator;