From de7fb531ac3f0e1304bb6a4e49f37b23a28085e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Tue, 14 Feb 2023 14:04:54 +0000 Subject: [PATCH] fix(angular): ensure peer deps are installed when initializing the plugin --- e2e/angular-core/src/angular-linting.test.ts | 4 ++-- e2e/angular-core/src/config.test.ts | 4 ++-- .../src/module-federation.test.ts | 4 ++-- e2e/angular-core/src/projects.test.ts | 4 ++-- .../src/cypress-component-tests.test.ts | 4 ++-- e2e/angular-extensions/src/misc.test.ts | 9 ++------ e2e/angular-extensions/src/ngrx.test.ts | 4 ++-- e2e/angular-extensions/src/tailwind.test.ts | 4 ++-- e2e/jest/src/jest-root.test.ts | 10 ++------- e2e/linter/src/linter.test.ts | 5 ++--- e2e/nx-misc/src/misc.test.ts | 2 +- e2e/utils/index.ts | 15 ------------- .../application/angular-v14/application.ts | 2 +- .../angular-v14/lib/add-protractor.ts | 2 +- .../src/generators/application/application.ts | 2 +- .../application/lib/add-protractor.ts | 2 +- .../src/generators/component/component.ts | 2 +- .../src/generators/init/angular-v14/init.ts | 18 +++++++++++++++ .../angular/src/generators/init/init.spec.ts | 19 ++++++++++++++++ packages/angular/src/generators/init/init.ts | 18 +++++++++++++++ .../src/generators/library/library.spec.ts | 17 ++++++++++++++ .../angular/src/generators/library/library.ts | 2 +- .../scam-directive/scam-directive.ts | 2 +- .../src/generators/scam-pipe/scam-pipe.ts | 2 +- packages/angular/src/generators/scam/scam.ts | 2 +- .../angular/src/generators/utils/testing.ts | 2 +- .../src/generators/web-worker/web-worker.ts | 2 +- packages/cypress/src/utils/testing.ts | 2 +- .../utils/config/legacy/functions.ts | 2 +- .../utils/config/legacy/update-config.ts | 2 +- packages/jest/src/utils/testing.ts | 2 +- packages/linter/src/utils/testing.ts | 2 +- .../generators/utils/run-nest-schematic.ts | 2 +- .../new/__snapshots__/new.spec.ts.snap | 3 --- .../src/generators/new/generate-preset.ts | 9 +------- packages/workspace/src/utils/ast-utils.ts | 22 +++++++------------ .../workspace/src/utils/cli-config-utils.ts | 2 +- packages/workspace/src/utils/project-type.ts | 4 ++-- .../src/utils/rules/add-install-task.ts | 6 +++-- .../workspace/src/utils/rules/deleteFile.ts | 2 +- .../src/utils/rules/update-karma-conf.ts | 2 +- .../workspace/src/utils/rules/workspace.ts | 4 ++-- packages/workspace/src/utils/testing-utils.ts | 2 +- packages/workspace/src/utils/testing.ts | 2 +- packages/workspace/src/utils/update-task.ts | 2 +- packages/workspace/src/utils/workspace.ts | 2 +- 46 files changed, 134 insertions(+), 103 deletions(-) diff --git a/e2e/angular-core/src/angular-linting.test.ts b/e2e/angular-core/src/angular-linting.test.ts index 9aacfb87b16a2..8d4f1034d7737 100644 --- a/e2e/angular-core/src/angular-linting.test.ts +++ b/e2e/angular-core/src/angular-linting.test.ts @@ -1,6 +1,6 @@ import { cleanupProject, - newAngularProject, + newProject, runCLI, uniq, updateFile, @@ -9,7 +9,7 @@ import * as path from 'path'; describe('Angular Package', () => { describe('linting', () => { - beforeAll(() => newAngularProject()); + beforeAll(() => newProject()); afterAll(() => cleanupProject()); it('should support eslint and pass linting on the standard generated code', async () => { diff --git a/e2e/angular-core/src/config.test.ts b/e2e/angular-core/src/config.test.ts index ec4090c8aab9b..2535f86032544 100644 --- a/e2e/angular-core/src/config.test.ts +++ b/e2e/angular-core/src/config.test.ts @@ -1,7 +1,7 @@ import { cleanupProject, expectTestsPass, - newAngularProject, + newProject, readJson, runCLI, runCLIAsync, @@ -10,7 +10,7 @@ import { } from '@nrwl/e2e/utils'; describe('Angular Config', () => { - beforeAll(() => newAngularProject()); + beforeAll(() => newProject()); afterAll(() => cleanupProject()); it('should upgrade the config correctly', async () => { diff --git a/e2e/angular-core/src/module-federation.test.ts b/e2e/angular-core/src/module-federation.test.ts index cab1ece92fd83..e77adeeb0204f 100644 --- a/e2e/angular-core/src/module-federation.test.ts +++ b/e2e/angular-core/src/module-federation.test.ts @@ -1,6 +1,6 @@ import { cleanupProject, - newAngularProject, + newProject, promisifiedTreeKill, readProjectConfig, runCLI, @@ -16,7 +16,7 @@ import { names } from '@nrwl/devkit'; describe('Angular Projects', () => { let proj: string; - beforeAll(() => (proj = newAngularProject())); + beforeAll(() => (proj = newProject())); afterAll(() => cleanupProject()); it('should serve the host and remote apps successfully, even with a shared library with a secondary entry point between them', async () => { diff --git a/e2e/angular-core/src/projects.test.ts b/e2e/angular-core/src/projects.test.ts index 6bc48af17d06a..1ded053b620cf 100644 --- a/e2e/angular-core/src/projects.test.ts +++ b/e2e/angular-core/src/projects.test.ts @@ -3,7 +3,7 @@ import { cleanupProject, getSize, killPorts, - newAngularProject, + newProject, promisifiedTreeKill, readFile, runCLI, @@ -20,7 +20,7 @@ import { names } from '@nrwl/devkit'; describe('Angular Projects', () => { let proj: string; - beforeAll(() => (proj = newAngularProject())); + beforeAll(() => (proj = newProject())); afterAll(() => cleanupProject()); it('should generate an app, a lib, link them, build, serve and test both correctly', async () => { diff --git a/e2e/angular-extensions/src/cypress-component-tests.test.ts b/e2e/angular-extensions/src/cypress-component-tests.test.ts index fa492f3301062..974027141ce4b 100644 --- a/e2e/angular-extensions/src/cypress-component-tests.test.ts +++ b/e2e/angular-extensions/src/cypress-component-tests.test.ts @@ -2,7 +2,7 @@ import { checkFilesDoNotExist, cleanupProject, createFile, - newAngularProject, + newProject, runCLI, uniq, updateFile, @@ -17,7 +17,7 @@ describe('Angular Cypress Component Tests', () => { const buildableLibName = uniq('cy-angular-buildable-lib'); beforeAll(async () => { - projectName = newAngularProject({ name: uniq('cy-ng') }); + projectName = newProject({ name: uniq('cy-ng') }); runCLI(`generate @nrwl/angular:app ${appName} --no-interactive`); runCLI( `generate @nrwl/angular:component fancy-component --project=${appName} --no-interactive` diff --git a/e2e/angular-extensions/src/misc.test.ts b/e2e/angular-extensions/src/misc.test.ts index c7e434896066e..72bb6bab41bf8 100644 --- a/e2e/angular-extensions/src/misc.test.ts +++ b/e2e/angular-extensions/src/misc.test.ts @@ -1,9 +1,4 @@ -import { - cleanupProject, - newAngularProject, - runCLI, - uniq, -} from '@nrwl/e2e/utils'; +import { cleanupProject, newProject, runCLI, uniq } from '@nrwl/e2e/utils'; describe('Move Angular Project', () => { let proj: string; @@ -12,7 +7,7 @@ describe('Move Angular Project', () => { let newPath: string; beforeAll(() => { - proj = newAngularProject(); + proj = newProject(); app1 = uniq('app1'); app2 = uniq('app2'); newPath = `subfolder/${app2}`; diff --git a/e2e/angular-extensions/src/ngrx.test.ts b/e2e/angular-extensions/src/ngrx.test.ts index 0730ad0f67c78..17813356579f5 100644 --- a/e2e/angular-extensions/src/ngrx.test.ts +++ b/e2e/angular-extensions/src/ngrx.test.ts @@ -2,7 +2,7 @@ import { cleanupProject, expectTestsPass, getSelectedPackageManager, - newAngularProject, + newProject, readJson, runCLI, runCLIAsync, @@ -12,7 +12,7 @@ import { describe('Angular Package', () => { describe('ngrx', () => { beforeAll(() => { - newAngularProject(); + newProject(); }); afterAll(() => { cleanupProject(); diff --git a/e2e/angular-extensions/src/tailwind.test.ts b/e2e/angular-extensions/src/tailwind.test.ts index bc0840059ba55..5b80760c960db 100644 --- a/e2e/angular-extensions/src/tailwind.test.ts +++ b/e2e/angular-extensions/src/tailwind.test.ts @@ -1,7 +1,7 @@ import { cleanupProject, listFiles, - newAngularProject, + newProject, readFile, removeFile, runCLI, @@ -117,7 +117,7 @@ describe('Tailwind support', () => { }; beforeAll(() => { - project = newAngularProject(); + project = newProject(); // Create tailwind config in the workspace root createWorkspaceTailwindConfigFile(); diff --git a/e2e/jest/src/jest-root.test.ts b/e2e/jest/src/jest-root.test.ts index 0e5bc0e346810..b13b1aa5038cc 100644 --- a/e2e/jest/src/jest-root.test.ts +++ b/e2e/jest/src/jest-root.test.ts @@ -1,10 +1,4 @@ -import { - newAngularProject, - newProject, - runCLI, - runCLIAsync, - uniq, -} from '@nrwl/e2e/utils'; +import { newProject, runCLI, runCLIAsync, uniq } from '@nrwl/e2e/utils'; describe('Jest root projects', () => { const myapp = uniq('myapp'); @@ -12,7 +6,7 @@ describe('Jest root projects', () => { describe('angular', () => { beforeAll(() => { - newAngularProject(); + newProject(); }); it('should test root level app projects', async () => { diff --git a/e2e/linter/src/linter.test.ts b/e2e/linter/src/linter.test.ts index 453bff5633ac2..ae1559b767d11 100644 --- a/e2e/linter/src/linter.test.ts +++ b/e2e/linter/src/linter.test.ts @@ -3,7 +3,6 @@ import { checkFilesExist, cleanupProject, createFile, - newAngularProject, newProject, readFile, readJson, @@ -186,7 +185,7 @@ describe('Linter', () => { }, 1000000); it('lint plugin should ensure module boundaries', () => { - const proj = newAngularProject(); + const proj = newProject(); const myapp = uniq('myapp'); const myapp2 = uniq('myapp2'); const mylib = uniq('mylib'); @@ -516,7 +515,7 @@ export function tslibC(): string { const myapp = uniq('myapp'); const mylib = uniq('mylib'); - newAngularProject(); + newProject(); runCLI(`generate @nrwl/angular:app ${myapp} --rootProject=true`); let rootEslint = readJson('.eslintrc.json'); diff --git a/e2e/nx-misc/src/misc.test.ts b/e2e/nx-misc/src/misc.test.ts index 84bb36be3b9a4..22e2f3f36b810 100644 --- a/e2e/nx-misc/src/misc.test.ts +++ b/e2e/nx-misc/src/misc.test.ts @@ -22,7 +22,7 @@ describe('Nx Commands', () => { afterAll(() => cleanupProject()); describe('show', () => { - it('ttt should show the list of projects', () => { + it('should show the list of projects', () => { const app1 = uniq('myapp'); const app2 = uniq('myapp'); expect(runCLI('show projects')).toEqual(''); diff --git a/e2e/utils/index.ts b/e2e/utils/index.ts index e1118bfe5c7db..fa9d4e977f87e 100644 --- a/e2e/utils/index.ts +++ b/e2e/utils/index.ts @@ -368,21 +368,6 @@ export function newProject({ } } -export function newAngularProject({ - name = uniq('proj'), - packageManager = getSelectedPackageManager(), -} = {}): string { - const projScope = newProject({ name, packageManager }); - - const angularPackages = [ - '@angular-devkit/core', - '@angular-devkit/schematics', - '@schematics/angular', - ]; - packageInstall(angularPackages.join(` `), projScope, 'latest'); - return projScope; -} - export function newLernaWorkspace({ name = uniq('lerna-proj'), packageManager = getSelectedPackageManager(), diff --git a/packages/angular/src/generators/application/angular-v14/application.ts b/packages/angular/src/generators/application/angular-v14/application.ts index ba704e002f789..fc6074df4c8dd 100644 --- a/packages/angular/src/generators/application/angular-v14/application.ts +++ b/packages/angular/src/generators/application/angular-v14/application.ts @@ -4,7 +4,6 @@ import { moveFilesToNewDirectory, Tree, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { UnitTestRunner } from '../../../utils/test-runners'; import { angularInitGenerator } from '../../init/init'; import { setupTailwindGenerator } from '../../setup-tailwind/setup-tailwind'; @@ -38,6 +37,7 @@ export async function applicationGenerator( skipFormat: true, }); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularAppSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'application' diff --git a/packages/angular/src/generators/application/angular-v14/lib/add-protractor.ts b/packages/angular/src/generators/application/angular-v14/lib/add-protractor.ts index df35d94ec154a..0e471834c2330 100644 --- a/packages/angular/src/generators/application/angular-v14/lib/add-protractor.ts +++ b/packages/angular/src/generators/application/angular-v14/lib/add-protractor.ts @@ -1,9 +1,9 @@ import type { Tree } from '@nrwl/devkit'; import { joinPathFragments, moveFilesToNewDirectory } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import type { NormalizedSchema } from './normalized-schema'; export async function addProtractor(host: Tree, options: NormalizedSchema) { + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const protractorSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'e2e' diff --git a/packages/angular/src/generators/application/application.ts b/packages/angular/src/generators/application/application.ts index ed21599326b40..8f188a98fc472 100644 --- a/packages/angular/src/generators/application/application.ts +++ b/packages/angular/src/generators/application/application.ts @@ -7,7 +7,6 @@ import { Tree, updateNxJson, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { join } from 'path'; import { UnitTestRunner } from '../../utils/test-runners'; import { angularInitGenerator } from '../init/init'; @@ -63,6 +62,7 @@ export async function applicationGenerator( skipFormat: true, }); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularAppSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'application' diff --git a/packages/angular/src/generators/application/lib/add-protractor.ts b/packages/angular/src/generators/application/lib/add-protractor.ts index df35d94ec154a..0e471834c2330 100644 --- a/packages/angular/src/generators/application/lib/add-protractor.ts +++ b/packages/angular/src/generators/application/lib/add-protractor.ts @@ -1,9 +1,9 @@ import type { Tree } from '@nrwl/devkit'; import { joinPathFragments, moveFilesToNewDirectory } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import type { NormalizedSchema } from './normalized-schema'; export async function addProtractor(host: Tree, options: NormalizedSchema) { + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const protractorSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'e2e' diff --git a/packages/angular/src/generators/component/component.ts b/packages/angular/src/generators/component/component.ts index f3c6a1bacd341..f559726e92936 100644 --- a/packages/angular/src/generators/component/component.ts +++ b/packages/angular/src/generators/component/component.ts @@ -6,7 +6,6 @@ import { readProjectConfiguration, stripIndents, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { pathStartsWith } from '../utils/path'; import { exportComponentInEntryPoint } from './lib/component'; import { normalizeOptions } from './lib/normalize-options'; @@ -30,6 +29,7 @@ export async function componentGenerator(tree: Tree, rawOptions: Schema) { checkPathUnderProjectRoot(tree, options); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularComponentSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'component' diff --git a/packages/angular/src/generators/init/angular-v14/init.ts b/packages/angular/src/generators/init/angular-v14/init.ts index affd213e109e2..d2bbdf69621d4 100755 --- a/packages/angular/src/generators/init/angular-v14/init.ts +++ b/packages/angular/src/generators/init/angular-v14/init.ts @@ -1,5 +1,6 @@ import { cypressInitGenerator } from '@nrwl/cypress'; import { + ensurePackage, formatFiles, GeneratorCallback, logger, @@ -26,6 +27,23 @@ export async function angularInitGenerator( const options = normalizeOptions(rawOptions); setDefaults(host, options); + 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; + ensurePackage(host, pkg, devkitVersion); + } + }); + const depsTask = !options.skipPackageJson ? updateDependencies(host) : () => {}; diff --git a/packages/angular/src/generators/init/init.spec.ts b/packages/angular/src/generators/init/init.spec.ts index d3b9c6e0baaba..546b75660f6c2 100644 --- a/packages/angular/src/generators/init/init.spec.ts +++ b/packages/angular/src/generators/init/init.spec.ts @@ -1,3 +1,22 @@ +jest.mock('@nrwl/devkit', () => ({ + ...jest.requireActual('@nrwl/devkit'), + // need to mock so it doesn't resolve what the workspace has installed + // and be able to test with different versions + ensurePackage: jest.fn().mockImplementation((tree, pkg, version, options) => { + updateJson(tree, 'package.json', (json) => ({ + ...json, + dependencies: { + ...json.dependencies, + ...(options?.dev === false ? { [pkg]: version } : {}), + }, + devDependencies: { + ...json.devDependencies, + ...(options?.dev ?? true ? { [pkg]: version } : {}), + }, + })); + }), +})); + import { NxJsonConfiguration, readJson, Tree, updateJson } from '@nrwl/devkit'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; import { Linter } from '@nrwl/linter'; diff --git a/packages/angular/src/generators/init/init.ts b/packages/angular/src/generators/init/init.ts index a59e52063e40a..6e560b5797f6c 100755 --- a/packages/angular/src/generators/init/init.ts +++ b/packages/angular/src/generators/init/init.ts @@ -1,5 +1,6 @@ import { cypressInitGenerator } from '@nrwl/cypress'; import { + ensurePackage, formatFiles, GeneratorCallback, logger, @@ -48,6 +49,23 @@ export async function angularInitGenerator( return; } + const peerDepsToInstall = [ + '@angular-devkit/core', + '@angular-devkit/schematics', + '@schematics/angular', + ]; + let devkitVersion: string; + peerDepsToInstall.forEach((pkg) => { + const packageVersion = getInstalledPackageVersion(tree, pkg); + + if (!packageVersion) { + devkitVersion ??= + getInstalledPackageVersion(tree, '@angular-devkit/build-angular') ?? + angularDevkitVersion; + ensurePackage(tree, pkg, devkitVersion); + } + }); + const options = normalizeOptions(rawOptions); setDefaults(tree, options); diff --git a/packages/angular/src/generators/library/library.spec.ts b/packages/angular/src/generators/library/library.spec.ts index a463c14275fcb..7e5162e1fb57a 100644 --- a/packages/angular/src/generators/library/library.spec.ts +++ b/packages/angular/src/generators/library/library.spec.ts @@ -27,6 +27,23 @@ jest.mock('@nrwl/devkit', () => { return { ...jest.requireActual('@nrwl/devkit'), createProjectGraphAsync: jest.fn().mockImplementation(() => projectGraph), + // need to mock so it doesn't resolve what the workspace has installed + // and be able to test with different versions + ensurePackage: jest + .fn() + .mockImplementation((tree, pkg, version, options) => { + updateJson(tree, 'package.json', (json) => ({ + ...json, + dependencies: { + ...json.dependencies, + ...(options?.dev === false ? { [pkg]: version } : {}), + }, + devDependencies: { + ...json.devDependencies, + ...(options?.dev ?? true ? { [pkg]: version } : {}), + }, + })); + }), }; }); diff --git a/packages/angular/src/generators/library/library.ts b/packages/angular/src/generators/library/library.ts index 964a6996d89c2..42f45278a91fd 100644 --- a/packages/angular/src/generators/library/library.ts +++ b/packages/angular/src/generators/library/library.ts @@ -6,7 +6,6 @@ import { removeDependenciesFromPackageJson, Tree, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { jestProjectGenerator } from '@nrwl/jest'; import { Linter } from '@nrwl/linter'; import { lt } from 'semver'; @@ -65,6 +64,7 @@ export async function libraryGenerator(tree: Tree, schema: Schema) { e2eTestRunner: E2eTestRunner.None, }); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const runAngularLibrarySchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'library' diff --git a/packages/angular/src/generators/scam-directive/scam-directive.ts b/packages/angular/src/generators/scam-directive/scam-directive.ts index 30565028e6399..32eb4865017dc 100644 --- a/packages/angular/src/generators/scam-directive/scam-directive.ts +++ b/packages/angular/src/generators/scam-directive/scam-directive.ts @@ -5,7 +5,6 @@ import { readNxJson, readProjectConfiguration, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { exportScam } from '../utils/export-scam'; import { getDirectiveFileInfo } from '../utils/file-info'; import { pathStartsWith } from '../utils/path'; @@ -18,6 +17,7 @@ export async function scamDirectiveGenerator(tree: Tree, rawOptions: Schema) { checkPathUnderProjectRoot(tree, options); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularDirectiveSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'directive' diff --git a/packages/angular/src/generators/scam-pipe/scam-pipe.ts b/packages/angular/src/generators/scam-pipe/scam-pipe.ts index cb9f065c6159d..5540aba8a879a 100644 --- a/packages/angular/src/generators/scam-pipe/scam-pipe.ts +++ b/packages/angular/src/generators/scam-pipe/scam-pipe.ts @@ -5,7 +5,6 @@ import { readNxJson, readProjectConfiguration, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { exportScam } from '../utils/export-scam'; import { getPipeFileInfo } from '../utils/file-info'; import { pathStartsWith } from '../utils/path'; @@ -18,6 +17,7 @@ export async function scamPipeGenerator(tree: Tree, rawOptions: Schema) { checkPathUnderProjectRoot(tree, options); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularPipeSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'pipe' diff --git a/packages/angular/src/generators/scam/scam.ts b/packages/angular/src/generators/scam/scam.ts index a769e366e5600..b16875078c6bb 100644 --- a/packages/angular/src/generators/scam/scam.ts +++ b/packages/angular/src/generators/scam/scam.ts @@ -5,7 +5,6 @@ import { readNxJson, readProjectConfiguration, } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { exportScam } from '../utils/export-scam'; import { getComponentFileInfo } from '../utils/file-info'; import { pathStartsWith } from '../utils/path'; @@ -18,6 +17,7 @@ export async function scamGenerator(tree: Tree, rawOptions: Schema) { checkPathUnderProjectRoot(tree, options); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const angularComponentSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'component' diff --git a/packages/angular/src/generators/utils/testing.ts b/packages/angular/src/generators/utils/testing.ts index b5b2084b1bd89..0855c93a6a991 100644 --- a/packages/angular/src/generators/utils/testing.ts +++ b/packages/angular/src/generators/utils/testing.ts @@ -1,5 +1,4 @@ import type { Tree } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; import { Linter } from '@nrwl/linter'; import { UnitTestRunner } from '../../utils/test-runners'; @@ -10,6 +9,7 @@ export async function createStorybookTestWorkspaceForLib( ): Promise { let tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const moduleGenerator = wrapAngularDevkitSchematic( '@schematics/angular', 'module' diff --git a/packages/angular/src/generators/web-worker/web-worker.ts b/packages/angular/src/generators/web-worker/web-worker.ts index bc5435a610f4e..ff9d6fed84e3a 100644 --- a/packages/angular/src/generators/web-worker/web-worker.ts +++ b/packages/angular/src/generators/web-worker/web-worker.ts @@ -1,6 +1,5 @@ import type { Tree } from '@nrwl/devkit'; import { formatFiles } from '@nrwl/devkit'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; import { normalizeOptions, updateTsConfig } from './lib'; import type { WebWorkerGeneratorOptions } from './schema'; @@ -10,6 +9,7 @@ export async function webWorkerGenerator( ): Promise { const options = normalizeOptions(rawOptions); const { skipFormat, ...schematicOptions } = options; + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const webWorkerSchematic = wrapAngularDevkitSchematic( '@schematics/angular', 'web-worker' diff --git a/packages/cypress/src/utils/testing.ts b/packages/cypress/src/utils/testing.ts index 3529df8c759b6..5a2194c9d54ac 100644 --- a/packages/cypress/src/utils/testing.ts +++ b/packages/cypress/src/utils/testing.ts @@ -1,6 +1,6 @@ import { join } from 'path'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { Tree, Rule } from '@angular-devkit/schematics'; +import type { Tree, Rule } from '@angular-devkit/schematics'; const testRunner = new SchematicTestRunner( '@nrwl/cypress', diff --git a/packages/jest/src/migrations/utils/config/legacy/functions.ts b/packages/jest/src/migrations/utils/config/legacy/functions.ts index 44ba45124415d..60ea665d72daf 100644 --- a/packages/jest/src/migrations/utils/config/legacy/functions.ts +++ b/packages/jest/src/migrations/utils/config/legacy/functions.ts @@ -1,7 +1,7 @@ import * as ts from 'typescript'; import { InsertChange, ReplaceChange } from '@nrwl/workspace'; import { findNodes } from 'nx/src/utils/typescript'; -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; import { stripJsonComments } from '@nrwl/devkit'; import { Config } from '@jest/types'; diff --git a/packages/jest/src/migrations/utils/config/legacy/update-config.ts b/packages/jest/src/migrations/utils/config/legacy/update-config.ts index bb154f7dab9ba..6d6814d66d7c7 100644 --- a/packages/jest/src/migrations/utils/config/legacy/update-config.ts +++ b/packages/jest/src/migrations/utils/config/legacy/update-config.ts @@ -1,4 +1,4 @@ -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; import { insert, RemoveChange } from '@nrwl/workspace'; import { addOrUpdateProperty, diff --git a/packages/jest/src/utils/testing.ts b/packages/jest/src/utils/testing.ts index a5518ee18fb80..4c0401cde5385 100644 --- a/packages/jest/src/utils/testing.ts +++ b/packages/jest/src/utils/testing.ts @@ -1,6 +1,6 @@ import { join } from 'path'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { Tree, Rule } from '@angular-devkit/schematics'; +import type { Tree, Rule } from '@angular-devkit/schematics'; const testRunner = new SchematicTestRunner( '@nrwl/jest', diff --git a/packages/linter/src/utils/testing.ts b/packages/linter/src/utils/testing.ts index ffc20714c77b7..2c6a0514a2af4 100644 --- a/packages/linter/src/utils/testing.ts +++ b/packages/linter/src/utils/testing.ts @@ -1,6 +1,6 @@ import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; import { join } from 'path'; -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; const migrationTestRunner = new SchematicTestRunner( '@nrwl/linter-migrations', diff --git a/packages/nest/src/generators/utils/run-nest-schematic.ts b/packages/nest/src/generators/utils/run-nest-schematic.ts index d1915b881ca1f..c7b3bec3f04ca 100644 --- a/packages/nest/src/generators/utils/run-nest-schematic.ts +++ b/packages/nest/src/generators/utils/run-nest-schematic.ts @@ -1,7 +1,6 @@ import type { Tree } from '@nrwl/devkit'; import { formatFiles } from '@nrwl/devkit'; import type { NestSchematic, NormalizedOptions } from './types'; -import { wrapAngularDevkitSchematic } from '@nrwl/devkit/ngcli-adapter'; export async function runNestSchematic( tree: Tree, @@ -10,6 +9,7 @@ export async function runNestSchematic( ): Promise { const { skipFormat, ...schematicOptions } = options; + const { wrapAngularDevkitSchematic } = require('@nrwl/devkit/ngcli-adapter'); const nestSchematic = wrapAngularDevkitSchematic( '@nestjs/schematics', schematic diff --git a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap index 79e32e2534ff4..72bea6d209576 100644 --- a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap @@ -6,10 +6,7 @@ Object { "@nrwl/angular": "0.0.1", }, "devDependencies": Object { - "@angular-devkit/core": "~15.1.0", - "@angular-devkit/schematics": "~15.1.0", "@nrwl/workspace": "0.0.1", - "@schematics/angular": "~15.1.0", "nx": "0.0.1", "prettier": "^2.6.2", "typescript": "~4.8.2", diff --git a/packages/workspace/src/generators/new/generate-preset.ts b/packages/workspace/src/generators/new/generate-preset.ts index dd95124e022fb..38d45a1fb677a 100644 --- a/packages/workspace/src/generators/new/generate-preset.ts +++ b/packages/workspace/src/generators/new/generate-preset.ts @@ -93,14 +93,7 @@ function getPresetDependencies(preset: string, version?: string) { case Preset.AngularMonorepo: case Preset.AngularStandalone: - return { - dependencies: { '@nrwl/angular': nxVersion }, - dev: { - '@angular-devkit/core': angularCliVersion, - '@angular-devkit/schematics': angularCliVersion, - '@schematics/angular': angularCliVersion, - }, - }; + return { dependencies: { '@nrwl/angular': nxVersion }, dev: {} }; case Preset.Express: return { dependencies: {}, dev: { '@nrwl/express': nxVersion } }; diff --git a/packages/workspace/src/utils/ast-utils.ts b/packages/workspace/src/utils/ast-utils.ts index c8afac24f4e91..5cd7619a838b7 100644 --- a/packages/workspace/src/utils/ast-utils.ts +++ b/packages/workspace/src/utils/ast-utils.ts @@ -5,28 +5,18 @@ * Use of this source code is governed by an MIT- style license that can be * found in the LICENSE file at https://angular.io/license */ -import { - apply, - chain, +import type { DirEntry, - forEach, - mergeWith, - noop, Rule, SchematicContext, Source, Tree, } from '@angular-devkit/schematics'; import * as ts from 'typescript'; -import { - parseJson, - ProjectConfiguration, - serializeJson, - FileData, -} from '@nrwl/devkit'; +import { parseJson, serializeJson } from '@nrwl/devkit'; import { getWorkspacePath } from './cli-config-utils'; -import { extname, join, normalize, Path } from '@angular-devkit/core'; -import type { NxJsonConfiguration, ProjectsConfigurations } from '@nrwl/devkit'; +import type { Path } from '@angular-devkit/core'; +import type { NxJsonConfiguration } from '@nrwl/devkit'; import { addInstallTask } from './rules/add-install-task'; import { findNodes } from 'nx/src/utils/typescript'; import { getSourceNodes } from '../utilities/typescript/get-source-nodes'; @@ -364,6 +354,7 @@ export function allFilesInDirInHost( recursive: boolean; } = { recursive: true } ): Path[] { + const { join } = require('@angular-devkit/core'); const dir = host.getDir(path); const res: Path[] = []; dir.subfiles.forEach((p) => { @@ -490,6 +481,7 @@ export function addDepsToPackageJson( devDeps: any, addInstall = true ): Rule { + const { chain, noop } = require('@angular-devkit/schematics'); return (host: Tree, context: SchematicContext) => { const currentPackageJson = readJsonInTree(host, 'package.json'); @@ -525,6 +517,7 @@ export function updatePackageJsonDependencies( devDeps: any, addInstall = true ): Rule { + const { chain } = require('@angular-devkit/schematics'); return chain([ updateJsonInTree('package.json', (json, context: SchematicContext) => { json.dependencies = { @@ -723,6 +716,7 @@ function renameFile(tree: Tree, from: string, to: string) { * Applies a template merge but skips for already existing entries */ export function applyWithSkipExisting(source: Source, rules: Rule[]): Rule { + const { mergeWith, apply, forEach } = require('@angular-devkit/schematics'); return (tree: Tree, _context: SchematicContext) => { const rule = mergeWith( apply(source, [ diff --git a/packages/workspace/src/utils/cli-config-utils.ts b/packages/workspace/src/utils/cli-config-utils.ts index 5614288fd20cd..336b52843874e 100644 --- a/packages/workspace/src/utils/cli-config-utils.ts +++ b/packages/workspace/src/utils/cli-config-utils.ts @@ -1,4 +1,4 @@ -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; import { readJsonInTree } from './ast-utils'; diff --git a/packages/workspace/src/utils/project-type.ts b/packages/workspace/src/utils/project-type.ts index 454def4325f73..595cb16bb9813 100644 --- a/packages/workspace/src/utils/project-type.ts +++ b/packages/workspace/src/utils/project-type.ts @@ -1,6 +1,6 @@ -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; import { getProjectConfig } from './ast-utils'; -import { join, Path } from '@angular-devkit/core'; +import { join } from '@angular-devkit/core'; export enum ProjectType { Application = 'application', diff --git a/packages/workspace/src/utils/rules/add-install-task.ts b/packages/workspace/src/utils/rules/add-install-task.ts index ab7fb6c38e908..73c157e900363 100644 --- a/packages/workspace/src/utils/rules/add-install-task.ts +++ b/packages/workspace/src/utils/rules/add-install-task.ts @@ -1,10 +1,12 @@ -import { Rule } from '@angular-devkit/schematics'; -import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; +import type { Rule } from '@angular-devkit/schematics'; let installAdded = false; export function addInstallTask( options: { skipInstall: boolean } = { skipInstall: false } ): Rule { + const { + NodePackageInstallTask, + } = require('@angular-devkit/schematics/tasks'); return (_, context) => { if (!options.skipInstall && !installAdded) { context.addTask(new NodePackageInstallTask()); diff --git a/packages/workspace/src/utils/rules/deleteFile.ts b/packages/workspace/src/utils/rules/deleteFile.ts index 2e145397453f7..02c1c8c2b1c09 100644 --- a/packages/workspace/src/utils/rules/deleteFile.ts +++ b/packages/workspace/src/utils/rules/deleteFile.ts @@ -1,4 +1,4 @@ -import { Rule, Tree } from '@angular-devkit/schematics'; +import type { Rule, Tree } from '@angular-devkit/schematics'; /** * Remove a file from the Virtual Schematic Tree diff --git a/packages/workspace/src/utils/rules/update-karma-conf.ts b/packages/workspace/src/utils/rules/update-karma-conf.ts index 908f403002978..b8719d42fd861 100644 --- a/packages/workspace/src/utils/rules/update-karma-conf.ts +++ b/packages/workspace/src/utils/rules/update-karma-conf.ts @@ -1,4 +1,4 @@ -import { Rule, Tree } from '@angular-devkit/schematics'; +import type { Rule, Tree } from '@angular-devkit/schematics'; import { createOrUpdate, getProjectConfig } from '../ast-utils'; import { offsetFromRoot } from '@nrwl/devkit'; diff --git a/packages/workspace/src/utils/rules/workspace.ts b/packages/workspace/src/utils/rules/workspace.ts index a9cee88ab48ad..ecdca79a9ca5f 100644 --- a/packages/workspace/src/utils/rules/workspace.ts +++ b/packages/workspace/src/utils/rules/workspace.ts @@ -1,5 +1,5 @@ -import { JsonObject } from '@angular-devkit/core'; -import { Rule } from '@angular-devkit/schematics'; +import type { JsonObject } from '@angular-devkit/core'; +import type { Rule } from '@angular-devkit/schematics'; import { updateWorkspace } from '../workspace'; /** diff --git a/packages/workspace/src/utils/testing-utils.ts b/packages/workspace/src/utils/testing-utils.ts index 35df2581d022e..4c9135d300592 100644 --- a/packages/workspace/src/utils/testing-utils.ts +++ b/packages/workspace/src/utils/testing-utils.ts @@ -1,4 +1,4 @@ -import { Tree } from '@angular-devkit/schematics'; +import type { Tree } from '@angular-devkit/schematics'; import { _test_addWorkspaceFile, WorkspaceFormat, diff --git a/packages/workspace/src/utils/testing.ts b/packages/workspace/src/utils/testing.ts index ea848d29fd90c..2309af6df7b28 100644 --- a/packages/workspace/src/utils/testing.ts +++ b/packages/workspace/src/utils/testing.ts @@ -1,6 +1,6 @@ import { join } from 'path'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { Rule, Tree } from '@angular-devkit/schematics'; +import type { Rule, Tree } from '@angular-devkit/schematics'; import { updateWorkspace } from './workspace'; import { TestingArchitectHost } from '@angular-devkit/architect/testing'; import { schema } from '@angular-devkit/core'; diff --git a/packages/workspace/src/utils/update-task.ts b/packages/workspace/src/utils/update-task.ts index 761b830612c29..92956b267180f 100644 --- a/packages/workspace/src/utils/update-task.ts +++ b/packages/workspace/src/utils/update-task.ts @@ -1,4 +1,4 @@ -import { +import type { Rule, SchematicContext, TaskConfiguration, diff --git a/packages/workspace/src/utils/workspace.ts b/packages/workspace/src/utils/workspace.ts index 7961c776792a2..fb26a734385af 100644 --- a/packages/workspace/src/utils/workspace.ts +++ b/packages/workspace/src/utils/workspace.ts @@ -1,4 +1,4 @@ -import { Tree, Rule } from '@angular-devkit/schematics'; +import type { Tree, Rule } from '@angular-devkit/schematics'; import { JsonArray, JsonObject, workspaces } from '@angular-devkit/core'; import { ProjectDefinition,