diff --git a/packages/angular/src/generators/init/angular-v14/init.ts b/packages/angular/src/generators/init/angular-v14/init.ts deleted file mode 100755 index 4101f85b33..0000000000 --- a/packages/angular/src/generators/init/angular-v14/init.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { cypressInitGenerator } from '@nrwl/cypress'; -import { - addDependenciesToPackageJson, - ensurePackage, - formatFiles, - GeneratorCallback, - logger, - readNxJson, - runTasksInSerial, - Tree, - updateNxJson, -} from '@nrwl/devkit'; -import { jestInitGenerator } from '@nrwl/jest'; -import { Linter } from '@nrwl/linter'; -import { initGenerator as jsInitGenerator } from '@nrwl/js'; - -import { backwardCompatibleVersions } from '../../../utils/backward-compatible-versions'; -import { E2eTestRunner, UnitTestRunner } from '../../../utils/test-runners'; -import { - addDependenciesToPackageJsonIfDontExist, - getInstalledPackageVersion, -} from '../../utils/version-utils'; -import { Schema } from './schema'; - -export async function angularInitGenerator( - host: Tree, - rawOptions: Schema -): Promise { - const options = normalizeOptions(rawOptions); - setDefaults(host, options); - const tasks: GeneratorCallback[] = []; - - const peerDepsToInstall = [ - '@angular-devkit/core', - '@angular-devkit/schematics', - '@schematics/angular', - ]; - let devkitVersion: string; - peerDepsToInstall.forEach((pkg) => { - const packageVersion = getInstalledPackageVersion(host, pkg); - - if (!packageVersion) { - devkitVersion ??= - getInstalledPackageVersion(host, '@angular-devkit/build-angular') ?? - backwardCompatibleVersions.angularV14.angularDevkitVersion; - - try { - ensurePackage(pkg, devkitVersion); - } catch { - // @schematics/angular cannot be required so this fails but this will still allow wrapping the schematic later on - } - - if (!options.skipPackageJson) { - tasks.push( - addDependenciesToPackageJson(host, {}, { [pkg]: devkitVersion }) - ); - } - } - }); - - const jsTask = await jsInitGenerator(host, { - ...options, - js: false, - tsConfigName: options.rootProject ? 'tsconfig.json' : 'tsconfig.base.json', - skipFormat: true, - }); - tasks.push(jsTask); - - if (!options.skipPackageJson) { - tasks.push(updateDependencies(host)); - } - - const unitTestTask = await addUnitTestRunner(host, options); - tasks.push(unitTestTask); - const e2eTask = await addE2ETestRunner(host, options); - tasks.push(e2eTask); - - addGitIgnoreEntry(host, '.angular'); - - if (!options.skipFormat) { - await formatFiles(host); - } - - return runTasksInSerial(...tasks); -} - -function normalizeOptions(options: Schema): Required { - return { - e2eTestRunner: options.e2eTestRunner ?? E2eTestRunner.Cypress, - linter: options.linter ?? Linter.EsLint, - skipFormat: options.skipFormat ?? false, - skipInstall: options.skipInstall ?? false, - skipPackageJson: options.skipPackageJson ?? false, - style: options.style ?? 'css', - unitTestRunner: options.unitTestRunner ?? UnitTestRunner.Jest, - rootProject: options.rootProject, - }; -} - -function setDefaults(host: Tree, options: Schema) { - const nxJson = readNxJson(host); - - nxJson.generators = nxJson.generators || {}; - nxJson.generators['@nrwl/angular:application'] = { - style: options.style, - linter: options.linter, - unitTestRunner: options.unitTestRunner, - e2eTestRunner: options.e2eTestRunner, - ...(nxJson.generators['@nrwl/angular:application'] || {}), - }; - nxJson.generators['@nrwl/angular:library'] = { - linter: options.linter, - unitTestRunner: options.unitTestRunner, - ...(nxJson.generators['@nrwl/angular:library'] || {}), - }; - nxJson.generators['@nrwl/angular:component'] = { - style: options.style, - ...(nxJson.generators['@nrwl/angular:component'] || {}), - }; - - updateNxJson(host, nxJson); -} - -function updateDependencies(tree: Tree): GeneratorCallback { - const angularVersion = - getInstalledPackageVersion(tree, '@angular/core') ?? - backwardCompatibleVersions.angularV14.angularVersion; - const angularDevkitVersion = - getInstalledPackageVersion(tree, '@angular-devkit/build-angular') ?? - backwardCompatibleVersions.angularV14.angularDevkitVersion; - - return addDependenciesToPackageJsonIfDontExist( - tree, - { - '@angular/animations': angularVersion, - '@angular/common': angularVersion, - '@angular/compiler': angularVersion, - '@angular/core': angularVersion, - '@angular/forms': angularVersion, - '@angular/platform-browser': angularVersion, - '@angular/platform-browser-dynamic': angularVersion, - '@angular/router': angularVersion, - rxjs: backwardCompatibleVersions.angularV14.rxjsVersion, - tslib: backwardCompatibleVersions.angularV14.tsLibVersion, - 'zone.js': backwardCompatibleVersions.angularV14.zoneJsVersion, - }, - { - '@angular/cli': angularDevkitVersion, - '@angular/compiler-cli': angularVersion, - '@angular/language-service': angularVersion, - '@angular-devkit/build-angular': angularDevkitVersion, - } - ); -} - -async function addUnitTestRunner( - tree: Tree, - options: Schema -): Promise { - switch (options.unitTestRunner) { - case UnitTestRunner.Jest: - if (!options.skipPackageJson) { - addDependenciesToPackageJsonIfDontExist( - tree, - {}, - { - 'jest-preset-angular': - backwardCompatibleVersions.angularV14.jestPresetAngularVersion, - } - ); - } - - return jestInitGenerator(tree, { - skipPackageJson: options.skipPackageJson, - }); - default: - return () => {}; - } -} - -async function addE2ETestRunner( - tree: Tree, - options: Schema -): Promise { - switch (options.e2eTestRunner) { - case E2eTestRunner.Cypress: - return await cypressInitGenerator(tree, { - skipPackageJson: options.skipPackageJson, - }); - default: - return () => {}; - } -} - -function addGitIgnoreEntry(host: Tree, entry: string) { - if (host.exists('.gitignore')) { - let content = host.read('.gitignore', 'utf-8'); - if (/^\.angular$/gm.test(content)) { - return; - } - - content = `${content}\n${entry}\n`; - host.write('.gitignore', content); - } else { - logger.warn(`Couldn't find .gitignore file to update`); - } -} - -export default angularInitGenerator; diff --git a/packages/angular/src/generators/init/angular-v14/schema.d.ts b/packages/angular/src/generators/init/angular-v14/schema.d.ts deleted file mode 100644 index 171b5d834e..0000000000 --- a/packages/angular/src/generators/init/angular-v14/schema.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Linter } from '@nrwl/linter'; -import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners'; -import type { Styles } from '../utils/types'; - -export interface Schema { - unitTestRunner?: UnitTestRunner; - e2eTestRunner?: E2eTestRunner; - skipFormat?: boolean; - skipInstall?: boolean; - style?: Styles; - linter?: Linter; - skipPackageJson?: boolean; - rootProject?: boolean; -} diff --git a/packages/angular/src/generators/init/init.ts b/packages/angular/src/generators/init/init.ts index 60d4ed05c5..7c005c1c71 100755 --- a/packages/angular/src/generators/init/init.ts +++ b/packages/angular/src/generators/init/init.ts @@ -13,8 +13,6 @@ import { import { jestInitGenerator } from '@nrwl/jest'; import { Linter } from '@nrwl/linter'; import { initGenerator as jsInitGenerator } from '@nrwl/js'; - -import { join } from 'path'; import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners'; import { angularDevkitVersion, @@ -26,25 +24,17 @@ import { } from '../../utils/versions'; import { addDependenciesToPackageJsonIfDontExist, - getGeneratorDirectoryForInstalledAngularVersion, + getInstalledAngularVersionInfo, getInstalledPackageVersion, } from '../utils/version-utils'; +import { backwardCompatibleVersions } from '../../utils/backward-compatible-versions'; import { Schema } from './schema'; export async function angularInitGenerator( tree: Tree, rawOptions: Schema ): Promise { - const generatorDirectory = - getGeneratorDirectoryForInstalledAngularVersion(tree); - if (generatorDirectory) { - let previousGenerator = await import( - join(__dirname, generatorDirectory, 'init') - ); - await previousGenerator.default(tree, rawOptions); - return; - } - + const installedAngularVersionInfo = getInstalledAngularVersionInfo(tree); const tasks: GeneratorCallback[] = []; const options = normalizeOptions(rawOptions); @@ -60,7 +50,9 @@ export async function angularInitGenerator( if (!packageVersion) { devkitVersion ??= getInstalledPackageVersion(tree, '@angular-devkit/build-angular') ?? - angularDevkitVersion; + (installedAngularVersionInfo.major === 14 + ? backwardCompatibleVersions.angularV14.angularDevkitVersion + : angularDevkitVersion); try { ensurePackage(pkg, devkitVersion); @@ -86,9 +78,13 @@ export async function angularInitGenerator( tasks.push(jsTask); if (!options.skipPackageJson) { - tasks.push(updateDependencies(tree)); + tasks.push(updateDependencies(tree, installedAngularVersionInfo.major)); } - const unitTestTask = await addUnitTestRunner(tree, options); + const unitTestTask = await addUnitTestRunner( + tree, + options, + installedAngularVersionInfo.major + ); tasks.push(unitTestTask); const e2eTask = await addE2ETestRunner(tree, options); tasks.push(e2eTask); @@ -139,12 +135,20 @@ function setDefaults(host: Tree, options: Schema) { updateNxJson(host, nxJson); } -function updateDependencies(tree: Tree): GeneratorCallback { +function updateDependencies( + tree: Tree, + angularMajorVersion: number +): GeneratorCallback { const angularVersionToInstall = - getInstalledPackageVersion(tree, '@angular/core') ?? angularVersion; + getInstalledPackageVersion(tree, '@angular/core') ?? + (angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.angularVersion + : angularVersion); const angularDevkitVersionToInstall = getInstalledPackageVersion(tree, '@angular-devkit/build-angular') ?? - angularDevkitVersion; + (angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.angularDevkitVersion + : angularDevkitVersion); return addDependenciesToPackageJsonIfDontExist( tree, @@ -157,9 +161,18 @@ function updateDependencies(tree: Tree): GeneratorCallback { '@angular/platform-browser': angularVersionToInstall, '@angular/platform-browser-dynamic': angularVersionToInstall, '@angular/router': angularVersionToInstall, - rxjs: rxjsVersion, - tslib: tsLibVersion, - 'zone.js': zoneJsVersion, + rxjs: + angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.rxjsVersion + : rxjsVersion, + tslib: + angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.tsLibVersion + : tsLibVersion, + 'zone.js': + angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.zoneJsVersion + : zoneJsVersion, }, { '@angular/cli': angularDevkitVersionToInstall, @@ -172,7 +185,8 @@ function updateDependencies(tree: Tree): GeneratorCallback { async function addUnitTestRunner( tree: Tree, - options: Schema + options: Schema, + angularMajorVersion: number ): Promise { switch (options.unitTestRunner) { case UnitTestRunner.Jest: @@ -181,7 +195,10 @@ async function addUnitTestRunner( tree, {}, { - 'jest-preset-angular': jestPresetAngularVersion, + 'jest-preset-angular': + angularMajorVersion === 14 + ? backwardCompatibleVersions.angularV14.jestPresetAngularVersion + : jestPresetAngularVersion, } ); }