From b8cfbcc62566ed7451d6ab9d9e09684927bbbebb Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Mon, 5 Jun 2023 11:31:50 -0400 Subject: [PATCH] fix(node): apply migration patch to 16.0.0 and 14.7.6 migrations as well (#17419) --- .../update-14-7-6/update-webpack-executor.ts | 26 +++++----- .../update-webpack-executor.spec.ts | 52 +++++++++++++++++++ .../update-16-0-0/update-webpack-executor.ts | 25 ++++----- 3 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts diff --git a/packages/node/src/migrations/update-14-7-6/update-webpack-executor.ts b/packages/node/src/migrations/update-14-7-6/update-webpack-executor.ts index c3b5ed3952533..4f5579a3e679b 100644 --- a/packages/node/src/migrations/update-14-7-6/update-webpack-executor.ts +++ b/packages/node/src/migrations/update-14-7-6/update-webpack-executor.ts @@ -1,21 +1,23 @@ import { formatFiles, - getProjects, + readProjectConfiguration, Tree, updateProjectConfiguration, } from '@nx/devkit'; +import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -export default async function update(host: Tree) { - const projects = getProjects(host); - - for (const [name, config] of projects.entries()) { - if (config?.targets?.build?.executor === '@nrwl/node:webpack') { - config.targets.build.executor = '@nrwl/webpack:webpack'; - config.targets.build.options.target = 'node'; - config.targets.build.options.compiler = 'tsc'; - updateProjectConfiguration(host, name, config); +export default async function update(tree: Tree) { + forEachExecutorOptions( + tree, + '@nrwl/node:webpack', + (options, projectName, targetName) => { + const projectConfig = readProjectConfiguration(tree, projectName); + projectConfig.targets[targetName].executor = '@nrwl/webpack:webpack'; + projectConfig.targets[targetName].options.compiler = 'tsc'; + projectConfig.targets[targetName].options.target = 'node'; + updateProjectConfiguration(tree, projectName, projectConfig); } - } + ); - await formatFiles(host); + await formatFiles(tree); } diff --git a/packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts b/packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts new file mode 100644 index 0000000000000..6af63c248b2ce --- /dev/null +++ b/packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts @@ -0,0 +1,52 @@ +import { addProjectConfiguration, readProjectConfiguration } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; + +import update from './update-webpack-executor'; + +describe('Migration: @nrwl/webpack', () => { + it(`should update usage of webpack executor`, async () => { + let tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + + addProjectConfiguration(tree, 'myapp', { + root: 'apps/myapp', + sourceRoot: 'apps/myapp/src', + projectType: 'application', + targets: { + foo: { + executor: '@nrwl/node:webpack', + options: {}, + }, + bar: { + executor: '@nx/node:webpack', + options: {}, + }, + }, + }); + + await update(tree); + + expect(readProjectConfiguration(tree, 'myapp')).toEqual({ + $schema: '../../node_modules/nx/schemas/project-schema.json', + name: 'myapp', + root: 'apps/myapp', + sourceRoot: 'apps/myapp/src', + projectType: 'application', + targets: { + foo: { + executor: '@nx/webpack:webpack', + options: { + compiler: 'tsc', + target: 'node', + }, + }, + bar: { + executor: '@nx/webpack:webpack', + options: { + compiler: 'tsc', + target: 'node', + }, + }, + }, + }); + }); +}); diff --git a/packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts b/packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts index 330ac3de7ba10..faf23d5e301ea 100644 --- a/packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts +++ b/packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts @@ -1,21 +1,22 @@ import { formatFiles, - getProjects, + readProjectConfiguration, Tree, updateProjectConfiguration, } from '@nx/devkit'; +import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -export default async function update(host: Tree) { - const projects = getProjects(host); +export default async function update(tree: Tree) { + const migrateProject = (options, projectName, targetName) => { + const projectConfig = readProjectConfiguration(tree, projectName); + projectConfig.targets[targetName].executor = '@nx/webpack:webpack'; + projectConfig.targets[targetName].options.compiler = 'tsc'; + projectConfig.targets[targetName].options.target = 'node'; + updateProjectConfiguration(tree, projectName, projectConfig); + }; - for (const [name, config] of projects.entries()) { - if (config?.targets?.build?.executor === '@nrwl/node:webpack') { - config.targets.build.executor = '@nx/webpack:webpack'; - config.targets.build.options.target = 'node'; - config.targets.build.options.compiler = 'tsc'; - updateProjectConfiguration(host, name, config); - } - } + forEachExecutorOptions(tree, '@nx/node:webpack', migrateProject); + forEachExecutorOptions(tree, '@nrwl/node:webpack', migrateProject); - await formatFiles(host); + await formatFiles(tree); }