From a637f9eef9039d9ad59de568737488f9ba2e2cdb Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Wed, 2 Oct 2024 10:18:41 -0400 Subject: [PATCH] chore(repo): remove v16 migrations (#28220) ## Current Behavior ## Expected Behavior ## Related Issue(s) Fixes # --- packages/angular/migrations.json | 981 ------------------ packages/cypress/migrations.json | 57 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-2-0/update-cy-tsconfig.spec.ts | 250 ----- .../update-16-2-0/update-cy-tsconfig.ts | 128 --- .../update-16-4-0/tsconfig-sourcemaps.spec.ts | 175 ---- .../update-16-4-0/tsconfig-sourcemaps.ts | 102 -- .../update-16-8-0/cypress-13.spec.ts | 243 ----- .../migrations/update-16-8-0/cypress-13.ts | 246 ----- packages/detox/migrations.json | 65 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-0-0/update-detoxrc-json.spec.ts | 57 - .../update-16-0-0/update-detoxrc-json.ts | 71 -- .../update-detoxrc-json-expo.spec.ts | 127 --- .../update-16-1-4/update-detoxrc-json-expo.ts | 104 -- packages/devkit/migrations.json | 15 +- .../update-16-0-0-add-nx-packages.spec.ts | 41 - .../update-16-0-0-add-nx-packages.ts | 9 - .../migrate-mf-util-usage.spec.ts | 231 ----- .../update-16-9-0/migrate-mf-util-usage.ts | 321 ------ packages/esbuild/migrations.json | 36 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-0-1-set-thirdparty-true.spec.ts | 109 -- .../update-16-0-1-set-thirdparty-true.ts | 39 - packages/eslint-plugin/migrations.json | 6 - .../update-16-0-0-add-nx-packages.spec.ts | 83 -- .../update-16-0-0-add-nx-packages.ts | 51 - packages/eslint/migrations.json | 56 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-8-0-add-ignored-files.spec.ts | 194 ---- .../update-16-8-0-add-ignored-files.ts | 80 -- packages/expo/migrations.json | 262 ----- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../remove-deprecated-targets.ts | 39 - .../update-16-1-4/update-eas-scripts.spec.ts | 51 - .../update-16-1-4/update-eas-scripts.ts | 40 - .../update-16-6-0/add-depends-on.ts | 29 - .../update-16-6-0/update-metro-config.ts | 69 -- .../remove-types-react-native.ts | 15 - .../update-eas-cli-version.spec.ts | 28 - .../update-16-9-0/update-eas-cli-version.ts | 16 - packages/express/migrations.json | 9 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - packages/jest/migrations.json | 21 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../add-test-setup-to-inputs-ignore.spec.ts | 51 - .../add-test-setup-to-inputs-ignore.ts | 28 - packages/js/migrations.json | 77 -- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - ...-projects-to-update-buildable-deps.spec.ts | 119 --- ...y-set-projects-to-update-buildable-deps.ts | 51 - .../update-16-8-2/update-swcrc.spec.ts | 82 -- .../migrations/update-16-8-2/update-swcrc.ts | 30 - packages/nest/migrations.json | 76 +- packages/nest/package.json | 1 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../nestjs-10-updates.ts | 134 --- .../nestjs-10.spec.ts | 242 ----- packages/next/migrations.json | 36 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../remove-root-build-option.spec.ts | 72 -- .../update-16-3-0/remove-root-build-option.ts | 27 - .../update-nx-next-dependency.spec.ts | 26 - .../update-nx-next-dependency.ts | 16 - packages/node/migrations.json | 27 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-webpack-executor.spec.ts | 52 - .../update-16-0-0/update-webpack-executor.ts | 22 - .../update-webpack-executor.spec.ts | 52 - .../update-16-3-1/update-webpack-executor.ts | 22 - .../replace-node-executor.spec.ts | 79 -- .../update-16-4-0/replace-node-executor.ts | 19 - packages/nx/migrations.json | 37 - .../assert-valid-migrations.ts | 11 +- .../update-15-0-0/prefix-outputs.spec.ts | 192 ---- .../update-15-0-0/prefix-outputs.ts | 69 -- .../update-16-0-0/remove-nrwl-cli.ts | 17 - .../update-depends-on-to-tokens.spec.ts | 131 --- .../update-depends-on-to-tokens.ts | 119 --- .../update-16-0-0/update-nx-cloud-runner.ts | 34 - .../remove-run-commands-output-path.spec.ts | 102 -- .../remove-run-commands-output-path.ts | 52 - .../escape-dollar-sign-env-variables.spec.ts | 132 --- .../escape-dollar-sign-env-variables.ts | 92 -- packages/plugin/migrations.json | 21 +- .../update-16-0-0-add-nx-packages.spec.ts | 40 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-0-0/cli-in-schema-json.spec.ts | 281 ----- .../update-16-0-0/cli-in-schema-json.ts | 177 ---- .../replace-e2e-executor.spec.ts | 71 -- .../update-16-2-0/replace-e2e-executor.ts | 47 - packages/react-native/migrations.json | 213 ---- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 12 - .../update-16-1-0/upgrade-storybook-6-5.ts | 19 - .../update-16-6-0/add-depends-on.ts | 77 -- .../update-16-6-0/update-metro-config.ts | 67 -- .../remove-types-react-native.ts | 15 - packages/react/migrations.json | 112 -- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-2-0-remove-package.spec.ts | 23 - .../update-16-2-0-remove-package.ts | 10 - ...ove-types-react-router-dom-package.spec.ts | 23 - .../remove-types-react-router-dom-package.ts | 10 - .../update-16-7-0-add-typings.spec.ts | 101 -- .../update-16-7-0-add-typings.ts | 69 -- .../update-16-7-0/add-babel-core.spec.ts | 32 - .../update-16-7-0/add-babel-core.ts | 21 - packages/rollup/migrations.json | 21 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - ...-3-add-babel-upward-root-mode-flag.spec.ts | 58 -- ...-16-3-3-add-babel-upward-root-mode-flag.ts | 32 - ...-projects-to-update-buildable-deps.spec.ts | 119 --- ...y-set-projects-to-update-buildable-deps.ts | 46 - packages/rspack/migrations.json | 26 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - packages/storybook/migrations.json | 611 ----------- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 12 - .../migrations/update-16-0-0/update-sb-7.ts | 30 - .../eslint-ignore-react-plugin.spec.ts | 115 -- .../eslint-ignore-react-plugin.ts | 48 - .../move-storybook-tsconfig.spec.ts.snap | 206 ---- .../move-storybook-tsconfig.spec.ts | 243 ----- .../update-16-5-0/move-storybook-tsconfig.ts | 32 - packages/vite/migrations.json | 93 -- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-4-1-test-file-config.spec.ts | 106 -- .../update-16-4-1-test-file-config.ts | 41 - .../change-ts-paths-plugin.spec.ts | 148 --- .../change-ts-paths-plugin.ts | 54 - packages/web/migrations.json | 15 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - .../update-16-0-0-update-executors.ts | 44 - packages/webpack/migrations.json | 24 - .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 8 - packages/workspace/migrations.json | 45 +- .../update-16-0-0-add-nx-packages.spec.ts | 37 - .../update-16-0-0-add-nx-packages.ts | 12 - .../update-16-0-0/fix-invalid-babelrc.spec.ts | 100 -- .../update-16-0-0/fix-invalid-babelrc.ts | 51 - ...rkspace-generators-to-local-plugin.spec.ts | 208 ---- ...ve-workspace-generators-to-local-plugin.ts | 270 ----- 160 files changed, 23 insertions(+), 11897 deletions(-) delete mode 100644 packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.spec.ts delete mode 100644 packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.ts delete mode 100644 packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.spec.ts delete mode 100644 packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.ts delete mode 100644 packages/cypress/src/migrations/update-16-8-0/cypress-13.spec.ts delete mode 100644 packages/cypress/src/migrations/update-16-8-0/cypress-13.ts delete mode 100644 packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.spec.ts delete mode 100644 packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.ts delete mode 100644 packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.spec.ts delete mode 100644 packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.ts delete mode 100644 packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.spec.ts delete mode 100644 packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.ts delete mode 100644 packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.spec.ts delete mode 100644 packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.ts delete mode 100644 packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.spec.ts delete mode 100644 packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.ts delete mode 100644 packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/expo/src/migrations/update-16-0-0/remove-deprecated-targets.ts delete mode 100644 packages/expo/src/migrations/update-16-1-4/update-eas-scripts.spec.ts delete mode 100644 packages/expo/src/migrations/update-16-1-4/update-eas-scripts.ts delete mode 100644 packages/expo/src/migrations/update-16-6-0/add-depends-on.ts delete mode 100644 packages/expo/src/migrations/update-16-6-0/update-metro-config.ts delete mode 100644 packages/expo/src/migrations/update-16-9-0/remove-types-react-native.ts delete mode 100644 packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.spec.ts delete mode 100644 packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.ts delete mode 100644 packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts delete mode 100644 packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts delete mode 100644 packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts delete mode 100644 packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts delete mode 100644 packages/js/src/migrations/update-16-8-2/update-swcrc.spec.ts delete mode 100644 packages/js/src/migrations/update-16-8-2/update-swcrc.ts delete mode 100644 packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10-updates.ts delete mode 100644 packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10.spec.ts delete mode 100644 packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/next/src/migrations/update-16-3-0/remove-root-build-option.spec.ts delete mode 100644 packages/next/src/migrations/update-16-3-0/remove-root-build-option.ts delete mode 100644 packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.spec.ts delete mode 100644 packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.ts delete mode 100644 packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts delete mode 100644 packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts delete mode 100644 packages/node/src/migrations/update-16-3-1/update-webpack-executor.spec.ts delete mode 100644 packages/node/src/migrations/update-16-3-1/update-webpack-executor.ts delete mode 100644 packages/node/src/migrations/update-16-4-0/replace-node-executor.spec.ts delete mode 100644 packages/node/src/migrations/update-16-4-0/replace-node-executor.ts delete mode 100644 packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts delete mode 100644 packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts delete mode 100644 packages/nx/src/migrations/update-16-0-0/remove-nrwl-cli.ts delete mode 100644 packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.spec.ts delete mode 100644 packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.ts delete mode 100644 packages/nx/src/migrations/update-16-0-0/update-nx-cloud-runner.ts delete mode 100644 packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.spec.ts delete mode 100644 packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.ts delete mode 100644 packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.spec.ts delete mode 100644 packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.ts delete mode 100644 packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.spec.ts delete mode 100644 packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.ts delete mode 100644 packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.spec.ts delete mode 100644 packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.ts delete mode 100644 packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/react-native/src/migrations/update-16-1-0/upgrade-storybook-6-5.ts delete mode 100644 packages/react-native/src/migrations/update-16-6-0/add-depends-on.ts delete mode 100644 packages/react-native/src/migrations/update-16-6-0/update-metro-config.ts delete mode 100644 packages/react-native/src/migrations/update-16-9-0/remove-types-react-native.ts delete mode 100644 packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.spec.ts delete mode 100644 packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.ts delete mode 100644 packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.spec.ts delete mode 100644 packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.ts delete mode 100644 packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.spec.ts delete mode 100644 packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.ts delete mode 100644 packages/react/src/migrations/update-16-7-0/add-babel-core.spec.ts delete mode 100644 packages/react/src/migrations/update-16-7-0/add-babel-core.ts delete mode 100644 packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.spec.ts delete mode 100644 packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.ts delete mode 100644 packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts delete mode 100644 packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts delete mode 100644 packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/storybook/src/migrations/update-16-0-0/update-sb-7.ts delete mode 100644 packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.spec.ts delete mode 100644 packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.ts delete mode 100644 packages/storybook/src/migrations/update-16-5-0/__snapshots__/move-storybook-tsconfig.spec.ts.snap delete mode 100644 packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.spec.ts delete mode 100644 packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.ts delete mode 100644 packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.spec.ts delete mode 100644 packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.ts delete mode 100644 packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.spec.ts delete mode 100644 packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.ts delete mode 100644 packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/web/src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors.ts delete mode 100644 packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.spec.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.spec.ts delete mode 100644 packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.ts diff --git a/packages/angular/migrations.json b/packages/angular/migrations.json index ff4a7b49e6..acf86cb5d0 100644 --- a/packages/angular/migrations.json +++ b/packages/angular/migrations.json @@ -1,173 +1,5 @@ { "generators": { - "install-required-packages": { - "cli": "nx", - "version": "15.7.0-beta.1", - "description": "Install the required angular-devkit packages as we do not directly depend on them anymore", - "factory": "./src/migrations/update-15-7-0/install-required-packages" - }, - "remove-show-circular-dependencies-option": { - "cli": "nx", - "version": "14.2.0-beta.0", - "description": "Remove 'showCircularDependencies' option from browser and server executors.", - "factory": "./src/migrations/update-14-2-0/remove-show-circular-dependencies-option" - }, - "update-angular-cli-version": { - "cli": "nx", - "version": "14.2.0-beta.0", - "description": "Update the @angular/cli package version.", - "factory": "./src/migrations/update-14-2-0/update-angular-cli" - }, - "update-libraries-secondary-entrypoints": { - "cli": "nx", - "version": "14.2.0-beta.0", - "description": "Remove 'package.json' files from library projects secondary entrypoints.", - "factory": "./src/migrations/update-14-2-0/update-libraries-secondary-entrypoints" - }, - "update-postinstall-script-ngcc-target": { - "cli": "nx", - "version": "14.2.0-beta.0", - "description": "Update postinstall script running ngcc to use ES2020 target.", - "factory": "./src/migrations/update-14-2-0/update-ngcc-target" - }, - "update-tsconfig-target": { - "cli": "nx", - "version": "14.2.0-beta.0", - "description": "Update TypeScript compilation target to 'ES2020'.", - "factory": "./src/migrations/update-14-2-0/update-tsconfig-target" - }, - "update-router-initial-navigation": { - "cli": "nx", - "version": "14.2.0-beta.6", - "description": "Update `initialNavigation: 'enabled'` to `initialNavigation: 'enabledBlocking'`.", - "factory": "./src/migrations/update-14-2-0/update-router-initial-navigation" - }, - "migrate-mfe-to-mf": { - "cli": "nx", - "version": "14.5.0-beta.0", - "description": "Update any references of MFE to MF.", - "factory": "./src/migrations/update-14-5-0/migrate-mfe-to-mf" - }, - "update-angular-cli-version-14-1-0": { - "cli": "nx", - "version": "14.5.2-beta.0", - "requires": { - "@angular/core": ">=14.1.0" - }, - "description": "Update the @angular/cli package version to ~14.1.0.", - "factory": "./src/migrations/update-14-5-2/update-angular-cli" - }, - "update-angular-cli-version-14-2-0": { - "cli": "nx", - "version": "14.6.0-beta.0", - "requires": { - "@angular/core": ">=14.2.0" - }, - "description": "Update the @angular/cli package version to ~14.2.0.", - "factory": "./src/migrations/update-14-6-0/update-angular-cli" - }, - "rename-webpack-server-executor": { - "cli": "nx", - "version": "15.0.0-beta.0", - "description": "Rename @nrwl/angular:webpack-server executor to @nrwl/angular:webpack-dev-server", - "factory": "./src/migrations/update-14-8-0/rename-webpack-server" - }, - "switch-to-jasmine-marbles": { - "cli": "nx", - "version": "15.0.0-beta.0", - "description": "Update the usages of @nrwl/angular/testing to import jasmine-marbles symbols from jasmine-marbles itself.", - "factory": "./src/migrations/update-15-0-0/switch-to-jasmine-marbles" - }, - "add-karma-inputs": { - "cli": "nx", - "version": "15.0.0-beta.1", - "description": "Stop hashing karma spec files and config files for build targets and dependent tasks", - "factory": "./src/migrations/update-15-0-0/add-karma-inputs" - }, - "update-angular-cli-version-15-0-0": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Update the @angular/cli package version to ~15.0.0.", - "factory": "./src/migrations/update-15-2-0/update-angular-cli" - }, - "remove-browserlist-config": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Remove browserslist config as it's handled by build-angular", - "factory": "./src/migrations/update-15-2-0/remove-browserlist-config" - }, - "update-typescript-target": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Update typescript target to ES2022", - "factory": "./src/migrations/update-15-2-0/update-typescript-target" - }, - "update-workspace-config": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Remove bundleDependencies from server targets", - "factory": "./src/migrations/update-15-2-0/update-workspace-config" - }, - "update-platform-server-exports": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Remove exported `@angular/platform-server` `renderModule` method. The `renderModule` method is now exported by the Angular CLI.", - "factory": "./src/migrations/update-15-2-0/remove-platform-server-exports" - }, - "update-karma-main-file": { - "cli": "nx", - "version": "15.2.0-beta.0", - "requires": { - "@angular/core": ">=15.0.0" - }, - "description": "Remove no longer needed require calls in Karma builder main file.", - "factory": "./src/migrations/update-15-2-0/update-karma-main-file" - }, - "update-angular-cli-version-15-1-0": { - "cli": "nx", - "version": "15.5.0-beta.0", - "requires": { - "@angular/core": ">=15.1.0" - }, - "description": "Update the @angular/cli package version to ~15.1.0.", - "factory": "./src/migrations/update-15-5-0/update-angular-cli" - }, - "update-angular-cli-version-15-2-0": { - "cli": "nx", - "version": "15.8.0-beta.4", - "requires": { - "@angular/core": ">=15.2.0" - }, - "description": "Update the @angular/cli package version to ~15.2.0.", - "factory": "./src/migrations/update-15-8-0/update-angular-cli" - }, - "update-tsconfig-spec-jest": { - "cli": "nx", - "version": "15.9.0-beta.3", - "description": "Update the tsconfig.spec.json to use target es2016 for jest-preset-angular v13", - "factory": "./src/migrations/update-15-9-0/update-testing-tsconfig" - }, - "update-file-server-executor": { - "cli": "nx", - "version": "15.9.0-beta.9", - "description": "Update the file-server executor to use @nrwl/web:file-server", - "factory": "./src/migrations/update-15-9-0/update-file-server-executor" - }, "remove-library-generator-simple-module-name-option": { "cli": "nx", "version": "16.0.0-beta.1", @@ -437,819 +269,6 @@ } }, "packageJsonUpdates": { - "14.1.8": { - "version": "14.1.8-beta.0", - "packages": { - "postcss-import": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "postcss-preset-env": { - "version": "~7.5.0", - "alwaysAddToPackageJson": false - }, - "postcss-url": { - "version": "~10.1.3", - "alwaysAddToPackageJson": false - } - } - }, - "14.2.0": { - "version": "14.2.0-beta.6", - "packages": { - "@angular-devkit/architect": { - "version": "~0.1400.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1400.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~14.0.0", - "alwaysAddToPackageJson": true - }, - "@angular/common": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/forms": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/elements": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/compiler": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/compiler-cli": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/localize": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/platform-browser-dynamic": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/platform-server": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/router": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/upgrade": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/language-service": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/animations": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/service-worker": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/material": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/eslint-plugin": { - "version": "~13.2.1", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/eslint-plugin-template": { - "version": "~13.2.1", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/template-parser": { - "version": "~13.2.1", - "alwaysAddToPackageJson": false - }, - "@ngrx/store": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/component-store": { - "version": "~13.2.0", - "alwaysAddToPackageJson": false - }, - "jest-preset-angular": { - "version": "~11.1.2", - "alwaysAddToPackageJson": false - }, - "karma-jasmine": { - "version": "~5.0.0", - "alwaysAddToPackageJson": false - }, - "jasmine-core": { - "version": "~4.1.0", - "alwaysAddToPackageJson": false - }, - "jasmine-spec-reporter": { - "version": "~7.0.0", - "alwaysAddToPackageJson": false - }, - "@types/jasmine": { - "version": "~4.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.3.7": { - "version": "14.3.7-beta.0", - "requires": { - "@angular/core": "^14.0.0" - }, - "packages": { - "@ngrx/store": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/component-store": { - "version": "~14.0.0" - } - } - }, - "14.4.0": { - "version": "14.4.0-beta.1", - "requires": { - "eslint": "^7.0.0 || ^8.0.0", - "@angular/core": ">=14.0.0 <15.0.0" - }, - "packages": { - "@angular-eslint/eslint-plugin": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/eslint-plugin-template": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/template-parser": { - "version": "~14.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.5.2": { - "version": "14.5.2-beta.0", - "x-prompt": "Do you want to update the Angular version to v14.1?", - "requires": { - "@angular/core": ">=14.0.0 <14.1.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1401.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1401.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~14.1.0", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~14.1.0", - "alwaysAddToPackageJson": false - }, - "karma": { - "version": "~6.4.0", - "alwaysAddToPackageJson": false - }, - "karma-jasmine": { - "version": "~5.1.0", - "alwaysAddToPackageJson": false - }, - "karma-jasmine-html-reporter": { - "version": "~2.0.0", - "alwaysAddToPackageJson": false - }, - "jasmine-core": { - "version": "~4.2.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.5.3": { - "version": "14.5.3-beta.0", - "requires": { - "@angular/core": "14.1.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1401.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1401.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~14.1.1", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~14.1.1", - "alwaysAddToPackageJson": false - } - } - }, - "14.5.5": { - "version": "14.5.5-beta.0", - "packages": { - "ts-node": { - "version": "10.9.1", - "alwaysAddToPackageJson": false - } - } - }, - "14.6.0-angular": { - "version": "14.6.0-beta.0", - "x-prompt": "Do you want to update the Angular version to v14.2?", - "requires": { - "@angular/core": ">=14.1.0 <14.2.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1402.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1402.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~14.2.0", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~14.2.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.6.0-jest-preset-angular": { - "version": "14.6.0-beta.0", - "requires": { - "@angular-devkit/build-angular": ">=0.1102.19 <15.0.0", - "@angular/compiler-cli": ">=11.2.14 <15.0.0", - "@angular/core": ">=11.2.14 <15.0.0", - "@angular/platform-browser-dynamic": ">=11.2.14 <15.0.0", - "jest": "^28.0.0" - }, - "packages": { - "jest-preset-angular": { - "version": "12.2.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.6.0-rxjs": { - "version": "14.6.0-beta.0", - "requires": { - "rxjs": ">=7.0.0 <7.5.0" - }, - "packages": { - "rxjs": { - "version": "~7.5.0", - "alwaysAddToPackageJson": false - } - } - }, - "14.8.0-angular-eslint": { - "version": "14.8.0-beta.0", - "requires": { - "eslint": "^7.0.0 || ^8.0.0", - "@angular/core": ">=14.0.0 <15.0.0" - }, - "packages": { - "@angular-eslint/eslint-plugin": { - "version": "~14.0.4", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/eslint-plugin-template": { - "version": "~14.0.4", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/template-parser": { - "version": "~14.0.4", - "alwaysAddToPackageJson": false - } - } - }, - "14.8.0-jest-preset-angular": { - "version": "14.8.0-beta.0", - "requires": { - "@angular-devkit/build-angular": ">=0.1102.19 <15.0.0", - "@angular/compiler-cli": ">=11.2.14 <15.0.0", - "@angular/core": ">=11.2.14 <15.0.0", - "@angular/platform-browser-dynamic": ">=11.2.14 <15.0.0", - "jest": "^28.0.0" - }, - "packages": { - "jest-preset-angular": { - "version": "12.2.2", - "alwaysAddToPackageJson": false - } - } - }, - "15.2.0": { - "version": "15.2.0-beta.0", - "x-prompt": "Do you want to update the Angular version to v15?", - "requires": { - "@angular/core": "^14.2.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1500.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1500.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~15.0.0", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/common": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/express-engine": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/builders": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.2.2-angular-eslint": { - "version": "15.2.2-beta.0", - "requires": { - "eslint": "^7.20.0 || ^8.0.0", - "@angular/core": ">=15.0.0 <16.0.0" - }, - "packages": { - "@angular-eslint/eslint-plugin": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/eslint-plugin-template": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@angular-eslint/template-parser": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.2.2-jest": { - "version": "15.2.2-beta.0", - "requires": { - "@angular-devkit/build-angular": ">=12.2.18 <16.0.0", - "@angular/compiler-cli": ">=12.2.16 <16.0.0", - "@angular/core": ">=12.2.16 <16.0.0", - "@angular/platform-browser-dynamic": ">=12.2.16 <16.0.0", - "jest": "^28.0.0" - }, - "packages": { - "jest-preset-angular": { - "version": "12.2.3", - "alwaysAddToPackageJson": false - } - } - }, - "15.3.1": { - "version": "15.3.1-beta.0", - "requires": { - "@angular/core": "^15.0.0" - }, - "packages": { - "@ngrx/store": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "~15.0.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/component-store": { - "version": "~15.0.0" - } - } - }, - "15.5.0": { - "version": "15.5.0-beta.0", - "x-prompt": "Do you want to update the Angular version to v15.1?", - "requires": { - "@angular/core": ">=15.0.0 <15.1.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1501.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1501.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~15.1.0", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.5.2": { - "version": "15.5.2-beta.0", - "requires": { - "@angular-devkit/build-angular": ">=15.0.0 <16.0.0" - }, - "packages": { - "@nguniversal/builders": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/express-engine": { - "version": "~15.1.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.8.0": { - "version": "15.8.0-beta.4", - "x-prompt": "Do you want to update the Angular version to v15.2?", - "requires": { - "@angular/core": ">=15.1.0 <15.2.0" - }, - "packages": { - "@angular-devkit/architect": { - "version": "~0.1502.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-angular": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/build-webpack": { - "version": "~0.1502.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/core": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@angular-devkit/schematics": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/pwa": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/core": { - "version": "~15.2.0", - "alwaysAddToPackageJson": true - }, - "@angular/material": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@angular/cdk": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@schematics/angular": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/express-engine": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "@nguniversal/build-angular": { - "version": "~15.2.0", - "alwaysAddToPackageJson": false - }, - "ng-packagr": { - "version": "~15.2.2", - "alwaysAddToPackageJson": false - }, - "zone.js": { - "version": "~0.12.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.8.0-jest": { - "version": "15.8.0-beta.0", - "requires": { - "@angular-devkit/build-angular": ">=13.0.0 <16.0.0", - "@angular/compiler-cli": ">=13.0.0 <16.0.0", - "@angular/core": ">=13.0.0 <16.0.0", - "@angular/platform-browser-dynamic": ">=13.0.0 <16.0.0", - "jest": "^29.0.0" - }, - "packages": { - "jest-preset-angular": { - "version": "13.0.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.8.0-ngrx": { - "version": "15.8.0-beta.6", - "requires": { - "@angular/core": "^15.0.0" - }, - "packages": { - "@ngrx/store": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/effects": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/entity": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/router-store": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/schematics": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/store-devtools": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - }, - "@ngrx/component-store": { - "version": "~15.3.0", - "alwaysAddToPackageJson": false - } - } - }, - "15.8.6-rxjs": { - "version": "15.8.6-beta.0", - "requires": { - "rxjs": ">=7.5.0 <7.6.0" - }, - "packages": { - "rxjs": { - "version": "~7.8.0", - "alwaysAddToPackageJson": false - } - } - }, "16.1.0": { "version": "16.1.0-beta.1", "x-prompt": "Do you want to update the Angular version to v16?", diff --git a/packages/cypress/migrations.json b/packages/cypress/migrations.json index 0b38ab249f..fc1647b55a 100644 --- a/packages/cypress/migrations.json +++ b/packages/cypress/migrations.json @@ -1,29 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/cypress with @nx/cypress", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-2-0-normalize-tsconfigs": { - "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Normalize tsconfig.cy.json files to be located at '/cypress/tsconfig.json'", - "implementation": "./src/migrations/update-16-2-0/update-cy-tsconfig" - }, - "update-16-3-0-remove-old-tsconfigs": { - "cli": "nx", - "version": "16.4.0-beta.10", - "description": "Remove tsconfig.e2e.json and add settings to project tsconfig.json. tsConfigs executor option is now deprecated. The project level tsconfig.json file should be used instead.", - "implementation": "./src/migrations/update-16-4-0/tsconfig-sourcemaps" - }, - "update-16-8-0-cypress-13": { - "cli": "nx", - "version": "16.8.0-beta.4", - "description": "Update to Cypress v13. Most noteable change is video recording is off by default. This migration will only update if the workspace is already on Cypress v12. https://docs.cypress.io/guides/references/migration-guide#Migrating-to-Cypress-130", - "implementation": "./src/migrations/update-16-8-0/cypress-13" - }, "update-cypress-version-13-6-6": { "cli": "nx", "version": "18.1.0-beta.3", @@ -38,39 +14,6 @@ } }, "packageJsonUpdates": { - "16.1.0": { - "version": "16.1.0-beta.0", - "requires": { - "cypress": ">=12.0.0 <12.11.0" - }, - "packages": { - "cypress": { - "version": "^12.11.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.5.0": { - "version": "16.5.0-beta.0", - "requires": { - "cypress": ">=12.0.0 <12.16.0" - }, - "packages": { - "cypress": { - "version": "^12.16.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.7.0": { - "version": "16.7.0-beta.3", - "packages": { - "eslint-plugin-cypress": { - "version": "^2.13.4", - "alwaysAddToPackageJson": false - } - } - }, "17.2.0-beta.2": { "version": "17.2.0-beta.2", "packages": { diff --git a/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index ac8681ec34..0000000000 --- a/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/cypress'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/cypress', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/cypress'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/cypress'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/cypress', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/cypress'] ?? - packageJson.dependencies['@nx/cypress']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index e3edbbb93e..0000000000 --- a/packages/cypress/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/cypress', '@nx/cypress'); - - await formatFiles(tree); -} diff --git a/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.spec.ts b/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.spec.ts deleted file mode 100644 index 672e613f35..0000000000 --- a/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.spec.ts +++ /dev/null @@ -1,250 +0,0 @@ -import 'nx/src/internal-testing-utils/mock-project-graph'; - -import { - Tree, - readJson, - readProjectConfiguration, - updateJson, - updateProjectConfiguration, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import { normalizeCyTsConfigNames } from './update-cy-tsconfig'; -import { libraryGenerator } from '@nx/js'; - -describe('Cypress Migration - update-cy-tsconfig', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - it('should do nothing if cypress/tsconfig.json exists', async () => { - await libraryGenerator(tree, { directory: 'libs/my-lib' }); - addCyExecutor(tree, 'my-lib'); - const tsconfig = { - extends: '../tsconfig.json', - compilerOptions: { - sourceMap: false, - outDir: '../../../dist/out-tsc', - allowJs: true, - types: ['cypress', 'node'], - }, - include: ['**/*.ts', '**/*.js', '../cypress.config.ts'], - }; - - tree.write( - 'libs/my-lib/cypress/tsconfig.json', - JSON.stringify(tsconfig, null, 2) - ); - updateJson(tree, 'libs/my-lib/tsconfig.json', (json) => { - json.references ??= []; - json.references.push({ path: './cypress/tsconfig.json' }); - return json; - }); - - await normalizeCyTsConfigNames(tree); - expect(readJson(tree, 'libs/my-lib/tsconfig.json').references).toEqual( - expect.arrayContaining([{ path: './cypress/tsconfig.json' }]) - ); - expect(readJson(tree, 'libs/my-lib/cypress/tsconfig.json')).toEqual( - tsconfig - ); - }); - - it('should move cypress/tsconfig.cy.json to cypress/tsconfig.json', async () => { - await libraryGenerator(tree, { directory: 'libs/my-lib' }); - addCyExecutor(tree, 'my-lib'); - const tsconfig = { - extends: '../tsconfig.json', - compilerOptions: { - outDir: '../../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'support/**/*.ts', - '../cypress.config.ts', - '../**/*.cy.ts', - '../**/*.cy.tsx', - '../**/*.cy.js', - '../**/*.cy.jsx', - '../**/*.d.ts', - ], - }; - - tree.write( - 'libs/my-lib/cypress/tsconfig.cy.json', - JSON.stringify(tsconfig, null, 2) - ); - - updateJson(tree, 'libs/my-lib/tsconfig.json', (json) => { - json.references ??= []; - json.references.push({ path: './cypress/tsconfig.cy.json' }); - return json; - }); - - await normalizeCyTsConfigNames(tree); - expect(tree.exists('libs/my-lib/cypress/tsconfig.cy.json')).toBeFalsy(); - expect(readJson(tree, 'libs/my-lib/tsconfig.json').references).toEqual( - expect.arrayContaining([{ path: './cypress/tsconfig.json' }]) - ); - expect(readJson(tree, 'libs/my-lib/cypress/tsconfig.json')).toEqual( - tsconfig - ); - }); - - it('should move tsconfig.cy.json to cypress/tsconfig.json', async () => { - await libraryGenerator(tree, { directory: 'libs/my-lib' }); - addCyExecutor(tree, 'my-lib'); - const tsconfig = { - extends: './tsconfig.json', - compilerOptions: { - outDir: '../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'cypress/support/**/*.ts', - 'cypress.config.ts', - '**/*.cy.ts', - '**/*.cy.tsx', - '**/*.cy.js', - '**/*.cy.jsx', - '**/*.d.ts', - ], - }; - - tree.write( - 'libs/my-lib/tsconfig.cy.json', - JSON.stringify(tsconfig, null, 2) - ); - updateJson(tree, 'libs/my-lib/tsconfig.json', (json) => { - json.references ??= []; - json.references.push({ path: './tsconfig.cy.json' }); - return json; - }); - - await normalizeCyTsConfigNames(tree); - expect(tree.exists('libs/my-lib/tsconfig.cy.json')).toBeFalsy(); - expect(readJson(tree, 'libs/my-lib/tsconfig.json').references).toEqual( - expect.arrayContaining([{ path: './cypress/tsconfig.json' }]) - ); - expect(readJson(tree, 'libs/my-lib/cypress/tsconfig.json')).toEqual({ - extends: '../tsconfig.json', - compilerOptions: { - outDir: '../../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'support/**/*.ts', - '../cypress.config.ts', - '../**/*.cy.ts', - '../**/*.cy.tsx', - '../**/*.cy.js', - '../**/*.cy.jsx', - '../**/*.d.ts', - ], - }); - }); - - it('should be idepotent', async () => { - await libraryGenerator(tree, { directory: 'libs/my-lib' }); - addCyExecutor(tree, 'my-lib'); - const tsconfig = { - extends: './tsconfig.json', - compilerOptions: { - outDir: '../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'cypress/support/**/*.ts', - 'cypress.config.ts', - '**/*.cy.ts', - '**/*.cy.tsx', - '**/*.cy.js', - '**/*.cy.jsx', - '**/*.d.ts', - ], - }; - - tree.write( - 'libs/my-lib/tsconfig.cy.json', - JSON.stringify(tsconfig, null, 2) - ); - updateJson(tree, 'libs/my-lib/tsconfig.json', (json) => { - json.references ??= []; - json.references.push({ path: './tsconfig.cy.json' }); - return json; - }); - - await normalizeCyTsConfigNames(tree); - expect(tree.exists('libs/my-lib/tsconfig.cy.json')).toBeFalsy(); - expect(readJson(tree, 'libs/my-lib/tsconfig.json').references).toEqual( - expect.arrayContaining([{ path: './cypress/tsconfig.json' }]) - ); - expect(readJson(tree, 'libs/my-lib/cypress/tsconfig.json')).toEqual({ - extends: '../tsconfig.json', - compilerOptions: { - outDir: '../../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'support/**/*.ts', - '../cypress.config.ts', - '../**/*.cy.ts', - '../**/*.cy.tsx', - '../**/*.cy.js', - '../**/*.cy.jsx', - '../**/*.d.ts', - ], - }); - - await normalizeCyTsConfigNames(tree); - expect(tree.exists('libs/my-lib/tsconfig.cy.json')).toBeFalsy(); - expect(readJson(tree, 'libs/my-lib/tsconfig.json').references).toEqual([ - { path: './tsconfig.lib.json' }, - { path: './tsconfig.spec.json' }, - { path: './cypress/tsconfig.json' }, - ]); - expect(readJson(tree, 'libs/my-lib/cypress/tsconfig.json')).toEqual({ - extends: '../tsconfig.json', - compilerOptions: { - outDir: '../../../dist/out-tsc', - module: 'commonjs', - types: ['cypress', 'node'], - sourceMap: false, - }, - include: [ - 'support/**/*.ts', - '../cypress.config.ts', - '../**/*.cy.ts', - '../**/*.cy.tsx', - '../**/*.cy.js', - '../**/*.cy.jsx', - '../**/*.d.ts', - ], - }); - }); -}); - -function addCyExecutor(tree: Tree, projectName: string) { - const pc = readProjectConfiguration(tree, projectName); - - pc.targets['e2e'] = { - executor: '@nx/cypress:cypress', - options: { - testingType: 'e2e', - devServerTarget: `${projectName}:serve`, - cypressConfig: `${projectName}/cypress.config.ts`, - }, - }; - - updateProjectConfiguration(tree, projectName, pc); -} diff --git a/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.ts b/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.ts deleted file mode 100644 index 21c4b091f5..0000000000 --- a/packages/cypress/src/migrations/update-16-2-0/update-cy-tsconfig.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { - ProjectConfiguration, - Tree, - formatFiles, - getProjects, - joinPathFragments, - updateJson, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; - -export async function normalizeCyTsConfigNames(tree: Tree) { - const projects = getProjects(tree); - - forEachExecutorOptions(tree, '@nx/cypress:cypress', (_, projectName) => { - const projectConfig = projects.get(projectName); - const newTsConfigPath = joinPathFragments( - projectConfig.root, - 'cypress', - 'tsconfig.json' - ); - - // if there is already a tsconfig.json in the cypress folder, then assume things are setup already - if (!tree.exists(newTsConfigPath)) { - moveProjectTsCyConfig(tree, projectConfig, newTsConfigPath); - moveCyDirTsCyConfig(tree, projectConfig, newTsConfigPath); - updateCyDirTsConfigReferences(tree, projectConfig); - } - }); - - await formatFiles(tree); -} - -function moveProjectTsCyConfig( - tree: Tree, - projectConfig: ProjectConfiguration, - newTsConfigPath: string -) { - if (tree.exists(joinPathFragments(projectConfig.root, 'tsconfig.cy.json'))) { - tree.rename( - joinPathFragments(projectConfig.root, 'tsconfig.cy.json'), - newTsConfigPath - ); - updateJson(tree, newTsConfigPath, (json) => { - json.extends = '../tsconfig.json'; - - json.compilerOptions ??= {}; - json.compilerOptions = { - ...json.compilerOptions, - sourceMap: false, - outDir: '../../../dist/out-tsc', - }; - - json.include ??= []; - json.include = json.include.map((p) => { - if (p.startsWith('cypress/')) { - return p.replace('cypress/', ''); - } - return `../${p}`; - }); - return json; - }); - } -} - -function moveCyDirTsCyConfig( - tree: Tree, - projectConfig: ProjectConfiguration, - newTsConfigPath: string -) { - if ( - tree.exists( - joinPathFragments(projectConfig.root, 'cypress', 'tsconfig.cy.json') - ) - ) { - tree.rename( - joinPathFragments(projectConfig.root, 'cypress', 'tsconfig.cy.json'), - newTsConfigPath - ); - updateJson(tree, newTsConfigPath, (json) => { - json.compilerOptions ??= {}; - json.compilerOptions = { - ...json.compilerOptions, - sourceMap: false, - }; - - return json; - }); - } -} - -function updateCyDirTsConfigReferences( - tree: Tree, - projectConfig: ProjectConfiguration -) { - if ( - !tree.exists( - joinPathFragments(projectConfig.root, 'cypress', 'tsconfig.json') - ) - ) { - return; - } - updateJson( - tree, - joinPathFragments(projectConfig.root, 'tsconfig.json'), - (json) => { - json.references ??= []; - if (!json.references) { - return json; - } - const cyFile = json.references.find((p) => - p.path.includes('tsconfig.cy.json') - ); - - if (cyFile) { - json.references.splice(json.references.indexOf(cyFile), 1); - } - - if (!json.references.some((r) => r.path === './cypress/tsconfig.json')) { - json.references.push({ - path: './cypress/tsconfig.json', - }); - } - return json; - } - ); -} - -export default normalizeCyTsConfigNames; diff --git a/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.spec.ts b/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.spec.ts deleted file mode 100644 index 307c1ae566..0000000000 --- a/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.spec.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { - Tree, - addProjectConfiguration, - readJson, - readProjectConfiguration, - updateJson, - updateProjectConfiguration, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import { fixLegacyCypressTsconfig } from './tsconfig-sourcemaps'; - -describe('Cypress Migration: tsconfig-sourcemaps', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should remove tsconfig.e2e.json and update tsconfig.json', async () => { - addLegacyProject(tree); - - await fixLegacyCypressTsconfig(tree); - expect(readProjectConfiguration(tree, 'legacy-e2e').targets.e2e) - .toMatchInlineSnapshot(` - { - "configurations": { - "production": { - "devServerTarget": "legacy-e2e:serve:production", - }, - }, - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/legacy-e2e/cypress.config.ts", - "devServerTarget": "legacy-e2e:serve", - "testingType": "e2e", - }, - } - `); - expect(readJson(tree, 'apps/legacy-e2e/tsconfig.json')) - .toMatchInlineSnapshot(` - { - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "resolveJsonModule": true, - "sourceMap": false, - "strict": true, - "types": [ - "cypress", - "node", - ], - }, - "exclude": [], - "extends": "../../tsconfig.base.json", - "files": [], - "include": [ - "cypress.ci.1.config.ts", - "cypress.ci.2.config.ts", - "cypress.ci.3.config.ts", - "cypress.ci.4.config.ts", - "src/**/*.ts", - "cypress.config.ts", - ], - "references": [], - } - `); - expect(tree.exists('apps/legacy-e2e/tsconfig.e2e.json')).toBeFalsy(); - expect(tree.exists('apps/legacy-e2e/tsconfig.e2e.prod.json')).toBeFalsy(); - }); - - it('should do nothing if tsconfig option is not used', async () => { - addLegacyProject(tree); - - tree.delete('apps/legacy-e2e/tsconfig.e2e.json'); - tree.delete('apps/legacy-e2e/tsconfig.e2e.prod.json'); - const pc = readProjectConfiguration(tree, 'legacy-e2e'); - - delete pc.targets.e2e.options.tsConfig; - delete pc.targets.e2e.configurations; - - const existingProjectConfig = pc.targets.e2e; - - updateProjectConfiguration(tree, 'legacy-e2e', pc); - - updateJson(tree, 'apps/legacy-e2e/tsconfig.json', (json) => { - json.references = []; - return json; - }); - - const existingTsConfig = readJson(tree, 'apps/legacy-e2e/tsconfig.json'); - - await fixLegacyCypressTsconfig(tree); - - expect(readProjectConfiguration(tree, 'legacy-e2e').targets.e2e).toEqual( - existingProjectConfig - ); - expect(readJson(tree, 'apps/legacy-e2e/tsconfig.json')).toEqual( - existingTsConfig - ); - }); -}); - -function addLegacyProject(tree: Tree) { - addProjectConfiguration(tree, 'legacy-e2e', { - root: 'apps/legacy-e2e', - sourceRoot: 'apps/legacy-e2e/src', - targets: { - e2e: { - executor: '@nx/cypress:cypress', - options: { - cypressConfig: 'apps/legacy-e2e/cypress.config.ts', - tsConfig: 'apps/legacy-e2e/tsconfig.e2e.json', - devServerTarget: 'legacy-e2e:serve', - testingType: 'e2e', - }, - configurations: { - production: { - devServerTarget: 'legacy-e2e:serve:production', - tsConfig: 'apps/legacy-e2e/tsconfig.e2e.prod.json', - }, - }, - }, - }, - }); - - tree.write( - 'apps/legacy-e2e/tsconfig.e2e.json', - JSON.stringify({ - extends: './tsconfig.json', - compilerOptions: { - sourceMap: false, - outDir: '../../dist/out-tsc', - types: ['cypress', 'node'], - }, - include: ['src/**/*.ts', 'cypress.config.ts'], - }) - ); - tree.write( - 'apps/legacy-e2e/tsconfig.e2e.prod.json', - JSON.stringify({ - extends: './tsconfig.e2e.json', - compilerOptions: { - sourceMap: false, - outDir: '../../dist/out-tsc', - types: ['cypress', 'node'], - strict: true, - }, - include: ['src/**/*.ts', 'cypress.config.ts'], - }) - ); - tree.write( - 'apps/legacy-e2e/tsconfig.json', - JSON.stringify({ - extends: '../../tsconfig.base.json', - compilerOptions: { - types: ['cypress', 'node'], - resolveJsonModule: true, - }, - include: [ - 'cypress.ci.1.config.ts', - 'cypress.ci.2.config.ts', - 'cypress.ci.3.config.ts', - 'cypress.ci.4.config.ts', - ], - files: [], - references: [ - { - path: './tsconfig.e2e.json', - }, - { - path: './tsconfig.e2e.prod.json', - }, - ], - }) - ); -} diff --git a/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.ts b/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.ts deleted file mode 100644 index a90982d8b7..0000000000 --- a/packages/cypress/src/migrations/update-16-4-0/tsconfig-sourcemaps.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { CypressExecutorOptions } from '../../executors/cypress/cypress.impl'; -import { - updateJson, - Tree, - getProjects, - joinPathFragments, - readJson, - updateProjectConfiguration, - formatFiles, -} from '@nx/devkit'; -import { posix } from 'path'; - -export async function fixLegacyCypressTsconfig(tree: Tree) { - const projects = getProjects(tree); - forEachExecutorOptions( - tree, - '@nx/cypress:cypress', - (options, projectName, targetName, configName) => { - const projectConfig = projects.get(projectName); - - if ( - options.testingType !== 'e2e' && - projectConfig.targets[targetName]?.options?.testingType !== 'e2e' - ) { - return; - } - - const tsconfigToRemove = - options.tsConfig ?? - joinPathFragments(projectConfig.root, 'tsconfig.e2e.json'); - - const projectLevelConfigPath = joinPathFragments( - projectConfig.root, - 'tsconfig.json' - ); - - if ( - !tree.exists(projectLevelConfigPath) || - !tree.exists(tsconfigToRemove) - ) { - return; - } - - if (tsconfigToRemove === projectLevelConfigPath) { - updateJson(tree, projectLevelConfigPath, (json) => { - json.compilerOptions = { - sourceMap: false, - ...json.compilerOptions, - }; - return json; - }); - } else { - const e2eConfig = readJson(tree, tsconfigToRemove); - - updateJson(tree, projectLevelConfigPath, (json) => { - json.compilerOptions = { - sourceMap: false, - ...json.compilerOptions, - ...e2eConfig.compilerOptions, - }; - json.files = Array.from( - new Set([...(json.files ?? []), ...(e2eConfig.files ?? [])]) - ); - json.include = Array.from( - new Set([...(json.include ?? []), ...(e2eConfig.include ?? [])]) - ); - json.exclude = Array.from( - new Set([...(json.exclude ?? []), ...(e2eConfig.exclude ?? [])]) - ); - - // these paths will always be 'unix style' - // and on windows relative will not work on these paths - const tsConfigFromProjRoot = posix.relative( - projectConfig.root, - tsconfigToRemove - ); - - json.references = (json.references ?? []).filter( - ({ path }) => !path.includes(tsConfigFromProjRoot) - ); - return json; - }); - - tree.delete(tsconfigToRemove); - } - - if (configName) { - delete projectConfig.targets[targetName].configurations[configName] - .tsConfig; - } else { - delete projectConfig.targets[targetName].options.tsConfig; - } - - updateProjectConfiguration(tree, projectName, projectConfig); - } - ); - - await formatFiles(tree); -} - -export default fixLegacyCypressTsconfig; diff --git a/packages/cypress/src/migrations/update-16-8-0/cypress-13.spec.ts b/packages/cypress/src/migrations/update-16-8-0/cypress-13.spec.ts deleted file mode 100644 index 75f90593f0..0000000000 --- a/packages/cypress/src/migrations/update-16-8-0/cypress-13.spec.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { Tree, addProjectConfiguration, readJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import { updateToCypress13 } from './cypress-13'; - -describe('Cypress 13', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should update deps to cypress v13', async () => { - setup(tree, { name: 'my-app' }); - - await updateToCypress13(tree); - expect(readJson(tree, 'package.json').devDependencies.cypress).toEqual( - '^13.0.0' - ); - }); - - it('should update videoUploadOnPasses from config w/setupNodeEvents', async () => { - setup(tree, { name: 'my-app-video-upload-on-passes' }); - await updateToCypress13(tree); - expect( - tree.read('apps/my-app-video-upload-on-passes/cypress.config.ts', 'utf-8') - ).toMatchInlineSnapshot(` - "import fs from 'fs'; - - import { defineConfig } from 'cypress'; - import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; - import { nxComponentTestingPreset } from '@nx/react/plugins/component-testing'; - - export default defineConfig({ - something: 'blah', - // nodeVersion: 'system', - // videoUploadOnPasses: false , - e2e: { - ...nxE2EPreset(__filename), - setupNodeEvents(on, config) { - const a = ''; - removePassedSpecs(on); - }, - }, - component: { - ...nxComponentTestingPreset(__filename), - setupNodeEvents: (on, config) => { - const b = ''; - removePassedSpecs(on); - }, - }, - }); - - /** - * Delete videos for specs that do not contain failing or retried tests. - * This function is to be used in the 'setupNodeEvents' configuration option as a replacement to - * 'videoUploadOnPasses' which has been removed. - * - * https://docs.cypress.io/guides/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests - **/ - function removePassedSpecs(on) { - on('after:spec', (spec, results) => { - if (results && results.vide) { - const hasFailures = results.tests.some((t) => - t.attempts.some((a) => a.state === 'failed') - ); - - if (!hasFailures) { - fs.unlinkSync(results.video); - } - } - }); - } - " - `); - }); - it('should remove nodeVersion from config', async () => { - setup(tree, { name: 'my-app-node-version' }); - await updateToCypress13(tree); - expect(tree.read('apps/my-app-node-version/cypress.config.ts', 'utf-8')) - .toMatchInlineSnapshot(` - "import fs from 'fs'; - - import { defineConfig } from 'cypress'; - import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; - import { nxComponentTestingPreset } from '@nx/react/plugins/component-testing'; - - export default defineConfig({ - something: 'blah', - // nodeVersion: 'system', - // videoUploadOnPasses: false , - e2e: { - ...nxE2EPreset(__filename), - setupNodeEvents(on, config) { - const a = ''; - removePassedSpecs(on); - }, - }, - component: { - ...nxComponentTestingPreset(__filename), - setupNodeEvents: (on, config) => { - const b = ''; - removePassedSpecs(on); - }, - }, - }); - - /** - * Delete videos for specs that do not contain failing or retried tests. - * This function is to be used in the 'setupNodeEvents' configuration option as a replacement to - * 'videoUploadOnPasses' which has been removed. - * - * https://docs.cypress.io/guides/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests - **/ - function removePassedSpecs(on) { - on('after:spec', (spec, results) => { - if (results && results.vide) { - const hasFailures = results.tests.some((t) => - t.attempts.some((a) => a.state === 'failed') - ); - - if (!hasFailures) { - fs.unlinkSync(results.video); - } - } - }); - } - " - `); - }); - - it('should comment about overriding readFile command', async () => { - setup(tree, { name: 'my-app-read-file' }); - const testContent = `describe('something', () => { - it('should do the thing', () => { - cy.readFile('my-data.json').its('name').should('eq', 'Nx'); - }); -}); -`; - tree.write('apps/my-app-read-file/src/something.cy.ts', testContent); - - tree.write( - 'apps/my-app-read-file/cypress/support/commands.ts', - `declare namespace Cypress { - interface Chainable { - login(email: string, password: string): void; - } -} -// -// -- This is a parent command -- -Cypress.Commands.add('login', (email, password) => { - console.log('Custom command example: Login', email, password); -}); -Cypress.Commands.overwrite('readFile', () => {}); - -` - ); - await updateToCypress13(tree); - - expect( - tree.read('apps/my-app-read-file/src/something.cy.ts', 'utf-8') - ).toEqual(testContent); - expect( - tree.read('apps/my-app-read-file/cypress/support/commands.ts', 'utf-8') - ).toMatchInlineSnapshot(` - "declare namespace Cypress { - interface Chainable { - login(email: string, password: string): void; - } - } - // - // -- This is a parent command -- - Cypress.Commands.add('login', (email, password) => { - console.log('Custom command example: Login', email, password); - }); - /** - * TODO(@nx/cypress): This command can no longer be overridden - * Consider using a different name like 'custom_readFile' - * More info: https://docs.cypress.io/guides/references/migration-guide#readFile-can-no-longer-be-overwritten-with-CypressCommandsoverwrite - **/ - Cypress.Commands.overwrite('readFile', () => {}); - " - `); - }); -}); - -function setup(tree: Tree, options: { name: string }) { - tree.write( - `apps/${options.name}/cypress.config.ts`, - ` -import { defineConfig} from 'cypress'; -import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; -import { nxComponentTestingPreset } from '@nx/react/plugins/component-testing'; - -export default defineConfig({ - something: 'blah', - nodeVersion: 'system', - videoUploadOnPasses: false, - e2e: { - ...nxE2EPreset(__filename), - videoUploadOnPasses: false, - nodeVersion: 'bundled', - setupNodeEvents(on, config) { - const a = ''; - }, - }, - component: { - ...nxComponentTestingPreset(__filename), - videoUploadOnPasses: false, - nodeVersion: 'something', - setupNodeEvents: (on, config) => { - const b = ''; - } - }, -}) -` - ); - tree.write( - 'package.json', - JSON.stringify({ devDependencies: { cypress: '^12.16.0' } }) - ); - addProjectConfiguration(tree, options.name, { - root: `apps/${options.name}`, - sourceRoot: `apps/${options.name}/src`, - targets: { - e2e: { - executor: '@nx/cypress:cypress', - options: { - testingType: 'e2e', - cypressConfig: `apps/${options.name}/cypress.config.ts`, - devServerTarget: 'app:serve', - }, - }, - 'component-test': { - executor: '@nx/cypress:cypress', - options: { - testingType: 'component', - cypressConfig: `apps/${options.name}/ct-cypress.config.ts`, - skipServe: true, - devServerTarget: 'app:build', - }, - }, - }, - }); -} diff --git a/packages/cypress/src/migrations/update-16-8-0/cypress-13.ts b/packages/cypress/src/migrations/update-16-8-0/cypress-13.ts deleted file mode 100644 index 2320473555..0000000000 --- a/packages/cypress/src/migrations/update-16-8-0/cypress-13.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { - updateJson, - installPackagesTask, - getProjects, - visitNotIgnoredFiles, - formatFiles, - type Tree, -} from '@nx/devkit'; -import { installedCypressVersion } from '../../utils/cypress-version'; -import { - isObjectLiteralExpression, - isCallExpression, - type CallExpression, - type MethodDeclaration, - type PropertyAccessExpression, - type PropertyAssignment, -} from 'typescript'; -import { tsquery } from '@phenomnomnominal/tsquery'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import type { CypressExecutorOptions } from '../../executors/cypress/cypress.impl'; - -const JS_TS_FILE_MATCHER = /\.[jt]sx?$/; - -export async function updateToCypress13(tree: Tree) { - if (installedCypressVersion() < 12) { - return; - } - - const projects = getProjects(tree); - - forEachExecutorOptions( - tree, - '@nx/cypress:cypress', - (options, projectName) => { - if (!options.cypressConfig || !tree.exists(options.cypressConfig)) { - return; - } - const projectConfig = projects.get(projectName); - - removeNodeVersionOption(tree, options.cypressConfig); - removeVideoUploadOnPassesOption(tree, options.cypressConfig); - - visitNotIgnoredFiles(tree, projectConfig.root, (filePath) => { - if (!JS_TS_FILE_MATCHER.test(filePath)) { - return; - } - shouldNotOverrideReadFile(tree, filePath); - }); - } - ); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies ??= {}; - json.devDependencies.cypress = '^13.0.0'; - return json; - }); - - await formatFiles(tree); -} - -function removeVideoUploadOnPassesOption(tree: Tree, configPath: string) { - const config = tree.read(configPath, 'utf-8'); - const isUsingDeprecatedOption = - tsquery.query(config, getPropertyQuery('videoUploadOnPasses'))?.length > 0; - - if (!isUsingDeprecatedOption) { - return; - } - - const importStatement = configPath.endsWith('.ts') - ? "import fs from 'fs';" - : "const fs = require('fs');"; - - const replacementFunction = `/** -* Delete videos for specs that do not contain failing or retried tests. -* This function is to be used in the 'setupNodeEvents' configuration option as a replacement to -* 'videoUploadOnPasses' which has been removed. -* -* https://docs.cypress.io/guides/guides/screenshots-and-videos#Delete-videos-for-specs-without-failing-or-retried-tests -**/ -function removePassedSpecs(on) { - on('after:spec', (spec, results) => { - if(results && results.vide) { - const hasFailures = results.tests.some(t => t.attempts.some(a => a.state === 'failed')); - - if(!hasFailures) { - fs.unlinkSync(results.video); - } - } - }) -}`; - - const withReplacementFn = `${importStatement}\n${config}\n${replacementFunction}`; - - // setupNodeEvents can be a property or method. - const setupNodeEventsQuery = - 'ExportAssignment ObjectLiteralExpression > :matches(PropertyAssignment:has(Identifier[name="setupNodeEvents"]), MethodDeclaration:has(Identifier[name="setupNodeEvents"]))'; - - const hasSetupNodeEvents = - tsquery.query(withReplacementFn, setupNodeEventsQuery)?.length > 0; - - let updatedWithSetupNodeEvents = withReplacementFn; - if (hasSetupNodeEvents) { - // if have setupNodeEvents, update existing fn to use removePassedSpecs helper and remove videoUploadOnPasses - const noVideoUploadOption = tsquery.replace( - withReplacementFn, - getPropertyQuery('videoUploadOnPasses'), - (node: PropertyAssignment) => { - if (isObjectLiteralExpression(node.initializer)) { - // is a nested config object - const key = node.name.getText().trim(); - const listOfProperties = node.initializer.properties - .map((j) => j.getText()) - .filter((j) => !j.includes('videoUploadOnPasses')) - .join(',\n'); - - return `${key}: { - ${listOfProperties} -} - `; - } else { - if (isPropertyTopLevel(node)) { - return `// ${node.getText()} `; - } - } - } - ); - - updatedWithSetupNodeEvents = tsquery.replace( - noVideoUploadOption, - `${setupNodeEventsQuery} Block`, - (node: PropertyAssignment | MethodDeclaration) => { - const blockWithoutBraces = node - .getFullText() - .trim() - .slice(1, -1) - .trim(); - return `{ - ${blockWithoutBraces} - removePassedSpecs(on); -} -`; - }, - { visitAllChildren: false } - ); - } else { - // if don't have setupNodeEvents, replace videoUploadOnPasses with setupNodeEvents method - updatedWithSetupNodeEvents = tsquery.replace( - withReplacementFn, - getPropertyQuery('videoUploadOnPasses'), - () => { - return `setupNodeEvents(on, config) { - removePassedSpecs(on); -}`; - } - ); - } - - tree.write(configPath, updatedWithSetupNodeEvents); -} - -/** - * remove the nodeVersion option from the config file - **/ -function removeNodeVersionOption(tree: Tree, configPath: string) { - const config = tree.read(configPath, 'utf-8'); - - const updated = tsquery.replace( - config, - getPropertyQuery('nodeVersion'), - (node: PropertyAssignment) => { - if (isObjectLiteralExpression(node.initializer)) { - // is a nested config object - const key = node.name.getText().trim(); - const listOfProperties = node.initializer.properties - .map((j) => j.getFullText()) - .filter((j) => !j.includes('nodeVersion')) - .join(', '); - return `${key}: { - ${listOfProperties} - }`; - } else { - if (isPropertyTopLevel(node)) { - return `// ${node.getText()}`; - } - } - } - ); - - if (updated !== config) { - tree.write(configPath, updated); - } -} - -/** - * leave a comment on all usages of overriding built-ins that are now banned - **/ -export function shouldNotOverrideReadFile(tree: Tree, filePath: string) { - const content = tree.read(filePath, 'utf-8'); - const markedOverrideUsage = tsquery.replace( - content, - 'PropertyAccessExpression:has(Identifier[name="overwrite"]):has(Identifier[name="Cypress"])', - (node: PropertyAccessExpression) => { - if (isAlreadyCommented(node)) { - return; - } - const expression = node.expression.getText().trim(); - // prevent grabbing other Cypress..defaults - - if (expression === 'Cypress.Commands') { - // get value. - const overwriteExpression = node.parent as CallExpression; - - const command = (overwriteExpression.arguments?.[0] as any)?.text; // need string without quotes - if (command === 'readFile') { - // overwrite - return `/** -* TODO(@nx/cypress): This command can no longer be overridden -* Consider using a different name like 'custom_${command}' -* More info: https://docs.cypress.io/guides/references/migration-guide#readFile-can-no-longer-be-overwritten-with-CypressCommandsoverwrite -**/ -${node.getText()}`; - } - } - } - ); - tree.write(filePath, markedOverrideUsage); -} - -function isAlreadyCommented(node: PropertyAccessExpression) { - return node.getFullText().includes('TODO(@nx/cypress)'); -} - -function isPropertyTopLevel(node: PropertyAssignment) { - return ( - node.parent && - isObjectLiteralExpression(node.parent) && - node.parent.parent && - isCallExpression(node.parent.parent) - ); -} - -const getPropertyQuery = (propertyName: string) => - `ExportAssignment ObjectLiteralExpression > PropertyAssignment:has(Identifier[name="${propertyName}"])`; - -export default updateToCypress13; diff --git a/packages/detox/migrations.json b/packages/detox/migrations.json index 38634c3853..ac23a57d3b 100644 --- a/packages/detox/migrations.json +++ b/packages/detox/migrations.json @@ -1,69 +1,6 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/detox with @nx/detox", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-0-0-update-detoxrc": { - "cli": "nx", - "version": "16.0.0-beta.3", - "description": "Update .detoxrc.json and jest.config.json for detox 20", - "implementation": "./src/migrations/update-16-0-0/update-detoxrc-json" - }, - "update-detoxrc-json-expo-16-1-4": { - "cli": "nx", - "version": "16.1.4-beta.0", - "description": "Update .detoxrc.json for expo", - "implementation": "./src/migrations/update-16-1-4/update-detoxrc-json-expo" - } - }, + "generators": {}, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.3", - "packages": { - "detox": { - "version": "~20.7.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.1": { - "version": "16.1.1-beta.0", - "packages": { - "detox": { - "version": "~20.8.0", - "alwaysAddToPackageJson": false - }, - "@config-plugins/detox": { - "version": "~5.0.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.5": { - "version": "16.1.5-beta.0", - "packages": { - "detox": { - "version": "^20.9.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.6.0": { - "version": "16.6.0-beta.6", - "packages": { - "detox": { - "version": "^20.11.1", - "alwaysAddToPackageJson": false - }, - "@config-plugins/detox": { - "version": "~6.0.0", - "alwaysAddToPackageJson": false - } - } - }, "18.0.0": { "version": "18.0.0-beta.0", "packages": { diff --git a/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 40759f32ea..0000000000 --- a/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/detox'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/detox', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/detox'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/detox'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/detox', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/detox'] ?? - packageJson.dependencies['@nx/detox']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index d549f91ae5..0000000000 --- a/packages/detox/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - replaceNrwlPackageWithNxPackage(tree, '@nrwl/detox', '@nx/detox'); - - await formatFiles(tree); -} diff --git a/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.spec.ts b/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.spec.ts deleted file mode 100644 index 95f1221b3e..0000000000 --- a/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { addProjectConfiguration, readJson, Tree } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; - -import update from './update-detoxrc-json'; - -describe('Update detoxrc for detox 20', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - addProjectConfiguration(tree, 'products', { - root: 'apps/products', - sourceRoot: 'apps/products/src', - targets: { - 'test-ios': { - executor: '@nx/detox:test', - }, - }, - }); - tree.write('apps/products/jest.config.json', `{"transform": {}}`); - tree.write('apps/products/.detoxrc.json', '{}'); - }); - - it(`should update jest.config.json`, async () => { - await update(tree); - - const jestConfig = readJson(tree, 'apps/products/jest.config.json'); - expect(jestConfig).toEqual({ - rootDir: '.', - testMatch: [ - '/src/**/*.test.ts?(x)', - '/src/**/*.spec.ts?(x)', - ], - globalSetup: 'detox/runners/jest/globalSetup', - globalTeardown: 'detox/runners/jest/globalTeardown', - reporter: ['detox/runners/jest/reporter'], - verbose: true, - }); - }); - - it(`should update .detoxrc.json`, async () => { - await update(tree); - - const detoxrcJson = readJson(tree, 'apps/products/.detoxrc.json'); - expect(detoxrcJson).toEqual({ - testRunner: { - args: { - $0: 'jest', - config: './jest.config.json', - }, - jest: { - setupTimeout: 120000, - }, - }, - }); - }); -}); diff --git a/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.ts b/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.ts deleted file mode 100644 index e588cc3bf6..0000000000 --- a/packages/detox/src/migrations/update-16-0-0/update-detoxrc-json.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { - Tree, - formatFiles, - getProjects, - updateJson, - ProjectConfiguration, -} from '@nx/devkit'; - -/** - * Update .detoxrc.json under detox project: - * - remove deprecated keys: testRunner - * - update keys: runnerConfig - * Update jest.config.json under detox project: - * - remove key: transform - * - add key: rootDir, testMatch, reporter, globalSetup, globalTeardown, verbose - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - projects.forEach((project) => { - if (project.targets?.['test-ios']?.executor !== '@nx/detox:test') return; - updateDetoxrcJson(tree, project); - updateJestConfigJson(tree, project); - }); - - await formatFiles(tree); -} - -function updateDetoxrcJson(host: Tree, project: ProjectConfiguration) { - const detoxConfigPath = `${project.root}/.detoxrc.json`; - if (!host.exists(detoxConfigPath)) return; - updateJson(host, detoxConfigPath, (json) => { - json.testRunner = { - args: { - $0: 'jest', - config: './jest.config.json', - }, - jest: { - setupTimeout: 120000, - }, - }; - if (json.runnerConfig) { - delete json.runnerConfig; - } - return json; - }); -} - -function updateJestConfigJson(host: Tree, project: ProjectConfiguration) { - const jestConfigPath = `${project.root}/jest.config.json`; - if (!host.exists(jestConfigPath)) return; - updateJson(host, jestConfigPath, (json) => { - if (json.transform) { - delete json.transform; - } - if (!json.rootDir) { - json.rootDir = '.'; - } - if (!json.testMatch) { - json.testMatch = [ - '/src/**/*.test.ts?(x)', - '/src/**/*.spec.ts?(x)', - ]; - } - json.reporter = ['detox/runners/jest/reporter']; - json.globalSetup = 'detox/runners/jest/globalSetup'; - json.globalTeardown = 'detox/runners/jest/globalTeardown'; - json.verbose = true; - return json; - }); -} diff --git a/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.spec.ts b/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.spec.ts deleted file mode 100644 index 9a6121b47d..0000000000 --- a/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.spec.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { addProjectConfiguration, readJson, Tree } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; - -import update from './update-detoxrc-json-expo'; - -describe('Update detoxrc for expo projects', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - addProjectConfiguration(tree, 'products', { - root: 'apps/products', - sourceRoot: 'apps/products/src', - targets: { - 'test-ios': { - executor: '@nx/detox:test', - options: { - detoxConfiguration: 'ios.sim.eas', - }, - }, - 'build-ios': { - executor: '@nx/detox:build', - options: { - detoxConfiguration: 'random value', - }, - }, - 'test-android': { - executor: '@nx/detox:test', - options: { - detoxConfiguration: 'android.sim.eas', - }, - }, - 'build-android': { - executor: '@nx/detox:build', - options: { - detoxConfiguration: 'random value', - }, - }, - }, - }); - tree.write('apps/products/jest.config.json', `{"transform": {}}`); - tree.write( - 'apps/products/.detoxrc.json', - `{"apps": {"ios.eas": {}, "android.eas": {}, "ios.local": {}, "android.local": {}}}` - ); - }); - - it(`should update .detoxrc.json`, async () => { - await update(tree); - - const detoxrcJson = readJson(tree, 'apps/products/.detoxrc.json'); - expect(detoxrcJson).toEqual({ - apps: { - 'ios.eas': { - build: - 'npx nx run products:download --platform ios --distribution simulator --output=../../apps/products/dist/', - }, - 'android.eas': { - build: - 'npx nx run products:download --platform android --distribution simulator --output=../../apps/products/dist/', - type: 'android.apk', - }, - 'ios.local': { - build: - 'npx nx run products:build --platform ios --profile preview --wait --local --no-interactive --output=../../apps/products/dist/Products.tar.gz', - }, - 'android.local': { - build: - 'npx nx run products:build --platform android --profile preview --wait --local --no-interactive --output=../../apps/products/dist/Products.apk', - type: 'android.apk', - }, - }, - }); - }); - - it(`should update project.json`, async () => { - await update(tree); - - const projectJson = readJson(tree, 'apps/products/project.json'); - expect(projectJson).toEqual({ - $schema: '../../node_modules/nx/schemas/project-schema.json', - name: 'products', - sourceRoot: 'apps/products/src', - targets: { - 'build-android': { - executor: '@nx/detox:build', - options: { - detoxConfiguration: 'android.sim.eas', - }, - }, - 'build-ios': { - executor: '@nx/detox:build', - options: { - detoxConfiguration: 'ios.sim.eas', - }, - }, - 'test-android': { - configurations: { - bare: { - buildTarget: 'products:build-android:bare', - detoxConfiguration: 'android.emu.debug', - }, - local: { - buildTarget: 'products:build-android:local', - detoxConfiguration: 'android.emu.local', - }, - production: { - buildTarget: 'products:build-android:production', - detoxConfiguration: 'android.emu.release', - }, - }, - executor: '@nx/detox:test', - options: { - buildTarget: 'products:build-android', - detoxConfiguration: 'android.sim.eas', - }, - }, - 'test-ios': { - executor: '@nx/detox:test', - options: { - detoxConfiguration: 'ios.sim.eas', - }, - }, - }, - }); - }); -}); diff --git a/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.ts b/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.ts deleted file mode 100644 index 8f4bdf951d..0000000000 --- a/packages/detox/src/migrations/update-16-1-4/update-detoxrc-json-expo.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { - Tree, - formatFiles, - getProjects, - updateJson, - ProjectConfiguration, - offsetFromRoot, - detectPackageManager, - getPackageManagerCommand, - names, - updateProjectConfiguration, -} from '@nx/devkit'; - -/** - * Update .detoxrc.json under detox project for expo: - * - fix the eas build command - * - fix the local build command - * - update project.json targets - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - projects.forEach((project) => { - if (project.targets?.['test-ios']?.executor !== '@nx/detox:test') return; - updateDetoxrcJson(tree, project); - updateProjectJson(tree, project); - }); - - await formatFiles(tree); -} - -function updateDetoxrcJson(host: Tree, project: ProjectConfiguration) { - const detoxConfigPath = `${project.root}/.detoxrc.json`; - const projectName = project.name?.endsWith('-e2e') - ? project.name.substring(0, project.name.indexOf('-e2e')) - : project.name; - const appRoot = getProjects(host).get(projectName)?.root; - const appName = names(projectName).className; - const offset = offsetFromRoot(project.root); - const exec = getPackageManagerCommand(detectPackageManager(host.root)).exec; - if (!host.exists(detoxConfigPath)) return; - updateJson(host, detoxConfigPath, (json) => { - if (json.apps?.['ios.eas']) { - json.apps[ - 'ios.eas' - ].build = `${exec} nx run ${projectName}:download --platform ios --distribution simulator --output=${offset}${appRoot}/dist/`; - } - if (json.apps?.['android.eas']) { - json.apps[ - 'android.eas' - ].build = `${exec} nx run ${projectName}:download --platform android --distribution simulator --output=${offset}${appRoot}/dist/`; - json.apps['android.eas'].type = 'android.apk'; - } - if (json.apps?.['ios.local']) { - json.apps[ - 'ios.local' - ].build = `${exec} nx run ${projectName}:build --platform ios --profile preview --wait --local --no-interactive --output=${offset}${appRoot}/dist/${appName}.tar.gz`; - } - if (json.apps?.['android.local']) { - json.apps[ - 'android.local' - ].build = `${exec} nx run ${projectName}:build --platform android --profile preview --wait --local --no-interactive --output=${offset}${appRoot}/dist/${appName}.apk`; - json.apps['android.local'].type = 'android.apk'; - } - return json; - }); -} - -function updateProjectJson(host: Tree, project: ProjectConfiguration) { - if ( - project.targets?.['test-ios']?.options?.detoxConfiguration == 'ios.sim.eas' - ) { - project.targets['build-ios'].options.detoxConfiguration = 'ios.sim.eas'; - } - if ( - project.targets?.['test-android']?.options?.detoxConfiguration == - 'android.sim.eas' - ) { - project.targets['build-android'].options.detoxConfiguration = - 'android.sim.eas'; - project.targets['test-android'] = { - executor: '@nx/detox:test', - options: { - detoxConfiguration: 'android.sim.eas', - buildTarget: `${project.name}:build-android`, - }, - configurations: { - local: { - detoxConfiguration: 'android.emu.local', - buildTarget: `${project.name}:build-android:local`, - }, - bare: { - detoxConfiguration: 'android.emu.debug', - buildTarget: `${project.name}:build-android:bare`, - }, - production: { - detoxConfiguration: 'android.emu.release', - buildTarget: `${project.name}:build-android:production`, - }, - }, - }; - } - updateProjectConfiguration(host, project.name, project); -} diff --git a/packages/devkit/migrations.json b/packages/devkit/migrations.json index 8b14bc3d2b..c0b5008c37 100644 --- a/packages/devkit/migrations.json +++ b/packages/devkit/migrations.json @@ -1,18 +1,5 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/devkit with @nx/devkit", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-9-0-migrate-mf-usage-to-webpack": { - "cli": "nx", - "version": "16.9.0-beta.1", - "description": "Replace imports of Module Federation utils frm @nx/devkit to @nx/webpack", - "implementation": "./src/migrations/update-16-9-0/migrate-mf-util-usage" - } - }, + "generators": {}, "packageJsonUpdates": {}, "version": "0.1" } diff --git a/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 5456330985..0000000000 --- a/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { assertRunsAgainstNxRepo } from 'nx/src/internal-testing-utils/run-migration-against-this-workspace'; -import { createTreeWithEmptyWorkspace } from 'nx/src/generators/testing-utils/create-tree-with-empty-workspace'; -import { Tree } from 'nx/src/generators/tree'; -import { readJson, updateJson } from 'nx/src/generators/utils/json'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/devkit'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/devkit', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/devkit'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/devkit'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/devkit', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/devkit'] ?? - packageJson.dependencies['@nx/devkit']; - - expect(newDependencyVersion).toBeDefined(); - }); - - assertRunsAgainstNxRepo(replacePackage); -}); diff --git a/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 6a74372f31..0000000000 --- a/packages/devkit/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Tree } from 'nx/src/devkit-exports'; -import { formatFiles } from '../../generators/format-files'; -import { replaceNrwlPackageWithNxPackage } from '../../utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/devkit', '@nx/devkit'); - - await formatFiles(tree); -} diff --git a/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.spec.ts b/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.spec.ts deleted file mode 100644 index 7342e281af..0000000000 --- a/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.spec.ts +++ /dev/null @@ -1,231 +0,0 @@ -import { createTreeWithEmptyWorkspace } from 'nx/src/generators/testing-utils/create-tree-with-empty-workspace'; -import { stripIndents } from 'nx/src/utils/strip-indents'; -import { readJson } from 'nx/src/generators/utils/json'; - -import migrateMfUtilUsage from './migrate-mf-util-usage'; - -describe('migrate-mf-util-usage', () => { - it('should do nothing if it does not find files using the mf public api', async () => { - // ARRANGE - const testFileContents = `${stripIndents`import { readFileSync } from 'fs'; - const file = readFileSync('test.ts');`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(testFileContents); - }); - - it('should do nothing if it does not find files using the mf public api even if they use devkit', async () => { - // ARRANGE - const testFileContents = `${stripIndents`import { readJson } from '@nx/devkit'; - const file = readJson('test.json');`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(testFileContents); - }); - - it('should replace imports to utils from devkit with webpack', async () => { - // ARRANGE - const testFileContents = stripIndents`import {ModuleFederationConfig} from '@nx/devkit'; - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`import { ModuleFederationConfig } from '@nx/webpack'; - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - - it('should extract imports to utils from devkit and replace with imports from webpack', async () => { - // ARRANGE - const testFileContents = stripIndents`import {joinPathFragments, ModuleFederationConfig} from '@nx/devkit'; - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`import { joinPathFragments } from '@nx/devkit'; - import { ModuleFederationConfig } from '@nx/webpack'; - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - - it('should extract imports to utils from devkit and replace with imports from webpack, even with multiple devkit imports', async () => { - // ARRANGE - const testFileContents = stripIndents`import {joinPathFragments, ModuleFederationConfig} from '@nx/devkit'; - import {readJson, WorkspaceLibrary} from '@nx/devkit'; - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`import { joinPathFragments } from '@nx/devkit'; - import { readJson } from '@nx/devkit'; - import { ModuleFederationConfig, WorkspaceLibrary } from '@nx/webpack'; - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - - describe('require()', () => { - it('should do nothing if it does not find files using the mf public api', async () => { - // ARRANGE - const testFileContents = `${stripIndents`const { readFileSync } = require('fs'); - const file = readFileSync('test.ts');`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(testFileContents); - }); - - it('should do nothing if it does not find files using the mf public api even if they use devkit', async () => { - // ARRANGE - const testFileContents = `${stripIndents`const { readJson } = require('@nx/devkit'); - const file = readJson('test.json');`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(testFileContents); - }); - - it('should replace imports to utils from devkit with webpack', async () => { - // ARRANGE - const testFileContents = stripIndents`const {ModuleFederationConfig} = require('@nx/devkit'); - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`const { ModuleFederationConfig } = require('@nx/webpack'); - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - - it('should extract imports to utils from devkit and replace with imports from webpack', async () => { - // ARRANGE - const testFileContents = stripIndents`const {joinPathFragments, ModuleFederationConfig} = require("@nx/devkit"); - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`const { joinPathFragments } = require('@nx/devkit'); - const { ModuleFederationConfig } = require('@nx/webpack'); - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - - it('should extract imports to utils from devkit and replace with imports from webpack, even with multiple devkit imports', async () => { - // ARRANGE - const testFileContents = stripIndents`const {joinPathFragments, ModuleFederationConfig} = require('@nx/devkit'); - const {readJson, WorkspaceLibrary} = require('@nx/devkit'); - const config: ModuleFederationConfig = {}; - `; - const expectedTestFileContents = `${stripIndents`const { joinPathFragments } = require('@nx/devkit'); - const { readJson } = require('@nx/devkit'); - const { ModuleFederationConfig, WorkspaceLibrary } = require('@nx/webpack'); - const config: ModuleFederationConfig = {};`}\n`; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.ts', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.ts', 'utf-8')).toEqual(expectedTestFileContents); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); - }); - - it('should replace imports to utils from devkit with webpack in JSDoc comments', async () => { - // ARRANGE - const testFileContents = stripIndents` - /** - * @type {import('@nx/devkit').ModuleFederationConfig} - **/ - const config = {}; - `; - - const tree = createTreeWithEmptyWorkspace(); - tree.write('test.js', testFileContents); - - // ACT - await migrateMfUtilUsage(tree); - - // ASSERT - expect(tree.read('test.js', 'utf-8')).toMatchInlineSnapshot(` - "/** - * @type {import('@nx/webpack').ModuleFederationConfig} - **/ - const config = {}; - " - `); - expect( - readJson(tree, 'package.json').devDependencies['@nx/webpack'] - ).toBeDefined(); - }); -}); diff --git a/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.ts b/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.ts deleted file mode 100644 index ec28fd5516..0000000000 --- a/packages/devkit/src/migrations/update-16-9-0/migrate-mf-util-usage.ts +++ /dev/null @@ -1,321 +0,0 @@ -import type { Node, SyntaxKind } from 'typescript'; -import { visitNotIgnoredFiles } from '../../generators/visit-not-ignored-files'; -import { formatFiles } from '../../generators/format-files'; -import { - addDependenciesToPackageJson, - ensurePackage, -} from '../../utils/package-json'; -import { typescriptVersion } from '../../utils/versions'; - -import { GeneratorCallback, readJson, Tree } from 'nx/src/devkit-exports'; - -let tsModule: typeof import('typescript'); - -const MODULE_FEDERATION_PUBLIC_TOKENS = [ - 'AdditionalSharedConfig', - 'ModuleFederationConfig', - 'SharedLibraryConfig', - 'SharedWorkspaceLibraryConfig', - 'WorkspaceLibrary', - 'SharedFunction', - 'WorkspaceLibrarySecondaryEntryPoint', - 'Remotes', - 'ModuleFederationLibrary', - 'applySharedFunction', - 'applyAdditionalShared', - 'getNpmPackageSharedConfig', - 'shareWorkspaceLibraries', - 'sharePackages', - 'mapRemotes', - 'mapRemotesForSSR', - 'getDependentPackagesForProject', - 'readRootPackageJson', -]; - -export default async (tree: Tree): Promise => { - let hasFileToMigrate = false; - visitNotIgnoredFiles(tree, '/', (path) => { - if (!path.endsWith('.ts') && !path.endsWith('.js')) { - return; - } - - let fileContents = tree.read(path, 'utf-8'); - if ( - MODULE_FEDERATION_PUBLIC_TOKENS.every( - (token) => !fileContents.includes(token) - ) - ) { - return; - } - - hasFileToMigrate = true; - - fileContents = replaceTSImports(tree, path, fileContents); - fileContents = replaceRequireCalls(tree, path, fileContents); - fileContents = replaceJSDoc(tree, path, fileContents); - tree.write(path, fileContents); - }); - - if (hasFileToMigrate) { - await formatFiles(tree); - - const pkgJson = readJson(tree, 'package.json'); - const nxVersion = - pkgJson.devDependencies?.['nx'] ?? - pkgJson.dependencies?.['nx'] ?? - '17.0.0'; - return addDependenciesToPackageJson(tree, {}, { '@nx/webpack': nxVersion }); - } -}; - -function replaceJSDoc(tree: Tree, path: string, fileContents: string) { - let newFileContents = fileContents; - for (const token of MODULE_FEDERATION_PUBLIC_TOKENS) { - newFileContents = newFileContents.replaceAll( - new RegExp( - `(@type)+\\s({)+(\\s)*(import\\(('|")+@nx\/devkit('|")+\\)\.)+(${token})+\\s*(})+`, - 'g' - ), - `@type {import('@nx/webpack').${token}}` - ); - } - - return newFileContents; -} - -function replaceRequireCalls( - tree: Tree, - path: string, - fileContents: string -): string { - if (!tsModule) { - tsModule = ensurePackage('typescript', typescriptVersion); - } - - const sourceFile = tsModule.createSourceFile( - path, - fileContents, - tsModule.ScriptTarget.Latest, - true - ); - - const allDevkitRequires = findNodes( - sourceFile, - tsModule.SyntaxKind.VariableStatement - ) - .filter((node) => - [`require("@nx/devkit")`, `require('@nx/devkit')`].some((r) => - node.getText().includes(r) - ) - ) - .filter( - (node) => findNodes(node, tsModule.SyntaxKind.ObjectBindingPattern).length - ); - - const mfUtilRequires = allDevkitRequires.filter((node) => - MODULE_FEDERATION_PUBLIC_TOKENS.some((token) => - node.getText().includes(token) - ) - ); - - if (!mfUtilRequires.length) { - return fileContents; - } - - const mfUtilTokens = mfUtilRequires.map((node) => { - const allTokens = findNodes(node, tsModule.SyntaxKind.BindingElement); - const mfTokens = allTokens.filter((node) => - MODULE_FEDERATION_PUBLIC_TOKENS.some((token) => node.getText() === token) - ); - - return { - requireNode: node, - onlyMf: allTokens.length === mfTokens.length, - mfTokens, - }; - }); - - const changes: { - startPosition: number; - endPosition?: number; - content: string; - }[] = []; - for (const mfUtilRequireData of mfUtilTokens) { - if (mfUtilRequireData.onlyMf) { - changes.push({ - startPosition: mfUtilRequireData.requireNode.getStart(), - endPosition: mfUtilRequireData.requireNode.getEnd(), - content: '', - }); - } else { - for (const mfToken of mfUtilRequireData.mfTokens) { - const replaceTrailingComma = - mfToken.getText().charAt(mfToken.getEnd() + 1) === ','; - changes.push({ - startPosition: mfToken.getStart(), - endPosition: replaceTrailingComma - ? mfToken.getEnd() + 1 - : mfToken.getEnd(), - content: '', - }); - } - } - } - - changes.push({ - startPosition: mfUtilTokens[mfUtilTokens.length - 1].requireNode.getEnd(), - content: `\nconst { ${mfUtilTokens - .map((mfUtilToken) => mfUtilToken.mfTokens.map((node) => node.getText())) - .join(', ')} } = require('@nx/webpack');`, - }); - - let newFileContents = fileContents; - while (changes.length) { - const change = changes.pop(); - newFileContents = `${newFileContents.substring(0, change.startPosition)}${ - change.content - }${newFileContents.substring( - change.endPosition ? change.endPosition : change.startPosition - )}`; - } - - return newFileContents; -} - -function replaceTSImports( - tree: Tree, - path: string, - fileContents: string -): string { - if (!tsModule) { - tsModule = ensurePackage('typescript', typescriptVersion); - } - - const sourceFile = tsModule.createSourceFile( - path, - fileContents, - tsModule.ScriptTarget.Latest, - true - ); - - const allImports = findNodes( - sourceFile, - tsModule.SyntaxKind.ImportDeclaration - ); - const devkitImports = allImports.filter((i) => - i.getText().includes(`'@nx/devkit';`) - ); - const mfUtilsImports = devkitImports.filter((i) => - MODULE_FEDERATION_PUBLIC_TOKENS.some((token) => i.getText().includes(token)) - ); - - if (!mfUtilsImports.length) { - return fileContents; - } - - const mfUtilsWithMultipleImports = mfUtilsImports.map((i) => { - const importSpecifierNodes = findNodes( - i, - tsModule.SyntaxKind.ImportSpecifier - ); - const mfImportSpecifierNodes = importSpecifierNodes.filter((node) => - MODULE_FEDERATION_PUBLIC_TOKENS.some((token) => - node.getText().includes(token) - ) - ); - - return { - importDeclarationNode: i, - onlyMf: mfImportSpecifierNodes.length === importSpecifierNodes.length, - mfImportSpecifierNodes, - }; - }); - - const changes: { - startPosition: number; - endPosition?: number; - content: string; - }[] = []; - for (const importDeclaration of mfUtilsWithMultipleImports) { - if (importDeclaration.onlyMf) { - changes.push({ - startPosition: importDeclaration.importDeclarationNode.getStart(), - endPosition: importDeclaration.importDeclarationNode.getEnd(), - content: '', - }); - } else { - for (const mfImportSpecifierNodes of importDeclaration.mfImportSpecifierNodes) { - const replaceTrailingComma = - importDeclaration.importDeclarationNode - .getText() - .charAt(mfImportSpecifierNodes.getEnd() + 1) === ','; - changes.push({ - startPosition: mfImportSpecifierNodes.getStart(), - endPosition: replaceTrailingComma - ? mfImportSpecifierNodes.getEnd() + 1 - : mfImportSpecifierNodes.getEnd(), - content: '', - }); - } - } - } - - changes.push({ - startPosition: - mfUtilsWithMultipleImports[ - mfUtilsWithMultipleImports.length - 1 - ].importDeclarationNode.getEnd(), - content: `\nimport { ${mfUtilsWithMultipleImports - .map((importDeclaration) => - importDeclaration.mfImportSpecifierNodes.map((node) => node.getText()) - ) - .join(', ')} } from '@nx/webpack';`, - }); - - let newFileContents = fileContents; - while (changes.length) { - const change = changes.pop(); - newFileContents = `${newFileContents.substring(0, change.startPosition)}${ - change.content - }${newFileContents.substring( - change.endPosition ? change.endPosition : change.startPosition - )}`; - } - - return newFileContents; -} - -function findNodes( - node: Node, - kind: SyntaxKind | SyntaxKind[], - max = Infinity -): Node[] { - if (!node || max == 0) { - return []; - } - - const arr: Node[] = []; - const hasMatch = Array.isArray(kind) - ? kind.includes(node.kind) - : node.kind === kind; - if (hasMatch) { - arr.push(node); - max--; - } - if (max > 0) { - for (const child of node.getChildren()) { - findNodes(child, kind, max).forEach((node) => { - if (max > 0) { - arr.push(node); - } - max--; - }); - - if (max <= 0) { - break; - } - } - } - - return arr; -} diff --git a/packages/esbuild/migrations.json b/packages/esbuild/migrations.json index 722387067d..f9d34cef28 100644 --- a/packages/esbuild/migrations.json +++ b/packages/esbuild/migrations.json @@ -1,36 +1,4 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/esbuild with @nx/esbuild", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-0-1-set-thirdparty-true": { - "version": "16.0.1-beta.0", - "description": "Set thirdParty to true to maintain the existing behavior of bundling dependencies.", - "cli": "nx", - "implementation": "./src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true" - } - }, - "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.5", - "packages": { - "esbuild": { - "version": "0.17.17", - "alwaysAddToPackageJson": false - } - } - }, - "16.8.0": { - "version": "16.8.0-beta.2", - "packages": { - "esbuild": { - "version": "^0.19.2", - "alwaysAddToPackageJson": false - } - } - } - } + "generators": {}, + "packageJsonUpdates": {} } diff --git a/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 463bcdcc06..0000000000 --- a/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/esbuild'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/esbuild', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/esbuild'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/esbuild'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/esbuild', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/esbuild'] ?? - packageJson.dependencies['@nx/esbuild']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 0f2fee0d76..0000000000 --- a/packages/esbuild/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/esbuild', '@nx/esbuild'); - - await formatFiles(tree); -} diff --git a/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.spec.ts b/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.spec.ts deleted file mode 100644 index 7da77d511f..0000000000 --- a/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.spec.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { - addProjectConfiguration, - readProjectConfiguration, - Tree, -} from '@nx/devkit'; - -import update from './update-16-0-1-set-thirdparty-true'; - -describe('update-16-0-1-set-thirdparty-true', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should skip migration targets are not set on the project', async () => { - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - }); - await update(tree); - - const config = readProjectConfiguration(tree, 'myapp'); - - expect(config.targets).toBeUndefined(); - }); - - it('should add thirdParty property if bundling is enabled implicitly', async () => { - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/esbuild:esbuild', - }, - }, - }); - await update(tree); - - const config = readProjectConfiguration(tree, 'myapp'); - - expect(config.targets.build.options).toEqual({ - thirdParty: true, - }); - }); - - it('should add thirdParty property if bundling is enabled explicitly', async () => { - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/esbuild:esbuild', - options: { - bundle: true, - }, - }, - }, - }); - await update(tree); - - const config = readProjectConfiguration(tree, 'myapp'); - - expect(config.targets.build.options).toEqual({ - bundle: true, - thirdParty: true, - }); - }); - - it('should not add thirdParty property if bundling is disabled', async () => { - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/esbuild:esbuild', - options: { - bundle: false, - }, - }, - }, - }); - await update(tree); - - const config = readProjectConfiguration(tree, 'myapp'); - - expect(config.targets.build.options).toEqual({ - bundle: false, - }); - }); - - it('should not set thirdParty property if it was already set', async () => { - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/esbuild:esbuild', - options: { - thirdParty: false, - }, - }, - }, - }); - await update(tree); - - const config = readProjectConfiguration(tree, 'myapp'); - - expect(config.targets.build.options).toEqual({ - thirdParty: false, - }); - }); -}); diff --git a/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.ts b/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.ts deleted file mode 100644 index e1e3973dd1..0000000000 --- a/packages/esbuild/src/migrations/update-16-0-1-set-thirdparty-true/update-16-0-1-set-thirdparty-true.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { - formatFiles, - getProjects, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; - -export default async function update(host: Tree) { - const projects = getProjects(host); - - projects.forEach((projectConfig, projectName) => { - if (!projectConfig.targets) return; - - let shouldUpdate = false; - - Object.entries(projectConfig.targets).forEach( - ([targetName, targetConfig]) => { - if ( - targetConfig.executor === '@nrwl/esbuild:esbuild' || - targetConfig.executor === '@nx/esbuild:esbuild' - ) { - projectConfig.targets[targetName].options ??= {}; - if (projectConfig.targets[targetName].options.bundle !== false) { - shouldUpdate = true; - - projectConfig.targets[targetName].options.thirdParty ??= true; - } - } - } - ); - - if (shouldUpdate) { - updateProjectConfiguration(host, projectName, projectConfig); - } - }); - - await formatFiles(host); -} diff --git a/packages/eslint-plugin/migrations.json b/packages/eslint-plugin/migrations.json index 14c0760e50..73b5e7315e 100644 --- a/packages/eslint-plugin/migrations.json +++ b/packages/eslint-plugin/migrations.json @@ -1,11 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/eslint-plugin-nx with @nx/eslint-plugin", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, "update-17-2-6-rename-workspace-rules": { "cli": "nx", "version": "17.2.6-beta.1", diff --git a/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index f75974eea6..0000000000 --- a/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Tree, readJson, updateJson, writeJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/eslint-plugin-nx'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/eslint-plugin-nx', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/eslint-plugin-nx'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/eslint-plugin-nx'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/eslint-plugin', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/eslint-plugin'] ?? - packageJson.dependencies['@nx/eslint-plugin']; - - expect(newDependencyVersion).toBeDefined(); - }); - - it('should replace the eslint plugin', async () => { - writeJson(tree, '.eslintrc.json', { - plugins: ['@nrwl/nx'], - rules: { - '@nrwl/nx/enforce-module-boundaries': ['error', {}], - }, - }); - - await replacePackage(tree); - - expect(readJson(tree, '.eslintrc.json')).toMatchInlineSnapshot(` - { - "plugins": [ - "@nx", - ], - "rules": { - "@nx/enforce-module-boundaries": [ - "error", - {}, - ], - }, - } - `); - }); - - it('should replace eslint-ignore comments', async () => { - tree.write( - 'ignored-file.ts', - '// eslint-disable-next-line @nrwl/nx/enforce-module-boundaries\n /*\n* eslint-disable @nrwl/nx/enforce-module-boundaries\n*/\n // eslint-disable-line @nrwl/nx/enforce-module-boundaries' - ); - tree.write('plugin.ts', `import * as p from '@nrwl/nx-plugin'`); - - await replacePackage(tree); - - expect(tree.read('ignored-file.ts').toString()).toMatchInlineSnapshot(` - "// eslint-disable-next-line @nx/enforce-module-boundaries - /* - * eslint-disable @nx/enforce-module-boundaries - */ - // eslint-disable-line @nx/enforce-module-boundaries" - `); - expect(tree.read('plugin.ts').toString()).toMatchInlineSnapshot( - `"import * as p from '@nrwl/nx-plugin'"` - ); - }); -}); diff --git a/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 19dc743a80..0000000000 --- a/packages/eslint-plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Tree, formatFiles, visitNotIgnoredFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -import { basename } from 'path'; -import { isBinaryPath } from '@nx/devkit/src/utils/binary-extensions'; - -const eslintFileNames = [ - '.eslintrc', - '.eslintrc.js', - '.eslintrc.cjs', - '.eslintrc.yaml', - '.eslintrc.yml', - '.eslintrc.json', - 'eslint.config.js', // new format that requires `ESLINT_USE_FLAT_CONFIG=true` -]; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage( - tree, - '@nrwl/eslint-plugin-nx', - '@nx/eslint-plugin' - ); - - /** - * Matches: - * * // eslint-disable-next-line @nrwl/nx/... - * * // eslint-disable-line @nrwl/nx/... - * * /* eslint-disable @nrwl/nx/... - */ - const ignoreLineRegex = /(eslint-disable(?:(?:-next)?-line)?\s*)@nrwl\/nx/g; - visitNotIgnoredFiles(tree, '.', (path) => { - if (isBinaryPath(path)) { - return; - } - - let contents = tree.read(path).toString(); - if (eslintFileNames.includes(basename(path))) { - if (!contents.includes('@nrwl/nx')) { - return; - } - - contents = contents.replace(new RegExp('@nrwl/nx', 'g'), '@nx'); - } - if (ignoreLineRegex.test(contents)) { - contents = contents.replace(ignoreLineRegex, '$1@nx'); - } - tree.write(path, contents); - }); - - await formatFiles(tree); -} diff --git a/packages/eslint/migrations.json b/packages/eslint/migrations.json index 05c0b88185..7db3c058f7 100644 --- a/packages/eslint/migrations.json +++ b/packages/eslint/migrations.json @@ -1,16 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/linter with @nx/linter", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-8-0-add-ignored-files": { - "version": "16.8.0", - "description": "update-16-8-0-add-ignored-files", - "implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files" - }, "update-17-0-0-rename-to-eslint": { "version": "17.0.0-beta.7", "description": "update-17-0-0-rename-to-eslint", @@ -33,51 +22,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.0", - "packages": { - "@typescript-eslint/parser": { - "version": "^5.58.0" - }, - "@typescript-eslint/eslint-plugin": { - "version": "^5.58.0" - }, - "@typescript-eslint/utils": { - "version": "^5.58.0" - } - } - }, - "16.5.0": { - "version": "16.5.0-beta.2", - "packages": { - "@typescript-eslint/parser": { - "version": "^5.60.1" - }, - "@typescript-eslint/eslint-plugin": { - "version": "^5.60.1" - }, - "@typescript-eslint/utils": { - "version": "^5.60.1" - } - } - }, - "16.7.0": { - "version": "16.7.0-beta.2", - "packages": { - "eslint": { - "version": "~8.46.0" - }, - "@typescript-eslint/parser": { - "version": "^5.60.1" - }, - "@typescript-eslint/eslint-plugin": { - "version": "^5.60.1" - }, - "@typescript-eslint/utils": { - "version": "^5.60.1" - } - } - }, "17.0.0": { "version": "17.0.0-rc.2", "packages": { diff --git a/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 1c66d74de0..0000000000 --- a/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/linter'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/linter', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/linter'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/linter'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/linter', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/linter'] ?? - packageJson.dependencies['@nx/linter']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 318e1816ff..0000000000 --- a/packages/eslint/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/linter', '@nx/linter'); - - await formatFiles(tree); -} diff --git a/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.spec.ts b/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.spec.ts deleted file mode 100644 index 48e1252014..0000000000 --- a/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.spec.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { addProjectConfiguration, readJson, Tree, writeJson } from '@nx/devkit'; - -import update from './update-16-8-0-add-ignored-files'; - -describe('update-16-8-0-add-ignored-files migration', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - tree.write('.eslintrc.json', '{}'); - }); - - it('should run successfully when eslint config is not present', async () => { - addProjectConfiguration(tree, 'my-pkg', { - root: 'packages/my-pkg', - sourceRoot: 'packages/my-pkg/src', - projectType: 'library', - targets: { - build: { - executor: '@nx/vite:build', - options: {}, - }, - }, - }); - - expect(() => update(tree)).not.toThrow(); - }); - - it.each` - executor | expectedPattern - ${'@nx/vite:build'} | ${'{projectRoot}/vite.config.{js,ts,mjs,mts}'} - ${'@nx/vite:test'} | ${'{projectRoot}/vite.config.{js,ts,mjs,mts}'} - ${'@nx/esbuild:esbuild'} | ${'{projectRoot}/esbuild.config.{js,ts,mjs,mts}'} - ${'@nx/rollup:rollup'} | ${'{projectRoot}/rollup.config.{js,ts,mjs,mts}'} - `( - 'should add ignoredFiles to projects using vite, esbuild, and rollup', - async ({ executor, expectedPattern }) => { - addProjectConfiguration(tree, 'my-pkg', { - root: 'packages/my-pkg', - sourceRoot: 'packages/my-pkg/src', - projectType: 'library', - targets: { - build: { - executor, - options: {}, - }, - }, - }); - writeJson(tree, `packages/my-pkg/.eslintrc.json`, { - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': 'error', - }, - }, - ], - }); - - update(tree); - - expect(readJson(tree, 'packages/my-pkg/.eslintrc.json')).toEqual({ - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': [ - 'error', - { - ignoredFiles: [expectedPattern], - }, - ], - }, - }, - ], - }); - } - ); - - it('should retain existing severity', () => { - addProjectConfiguration(tree, 'my-pkg', { - root: 'packages/my-pkg', - sourceRoot: 'packages/my-pkg/src', - projectType: 'library', - targets: { - build: { - executor: '@nx/vite:build', - options: {}, - }, - }, - }); - writeJson(tree, `packages/my-pkg/.eslintrc.json`, { - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': 'warn', - }, - }, - ], - }); - - update(tree); - - expect(readJson(tree, 'packages/my-pkg/.eslintrc.json')).toEqual({ - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': [ - 'warn', - { - ignoredFiles: ['{projectRoot}/vite.config.{js,ts,mjs,mts}'], - }, - ], - }, - }, - ], - }); - }); - - it('should retain existing options', () => { - addProjectConfiguration(tree, 'my-pkg', { - root: 'packages/my-pkg', - sourceRoot: 'packages/my-pkg/src', - projectType: 'library', - targets: { - build: { - executor: '@nx/vite:build', - options: {}, - }, - }, - }); - writeJson(tree, `packages/my-pkg/.eslintrc.json`, { - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': [ - 'error', - { - checkVersionMismatches: false, - }, - ], - }, - }, - ], - }); - - update(tree); - - expect(readJson(tree, 'packages/my-pkg/.eslintrc.json')).toEqual({ - root: true, - ignorePatterns: ['!**/*'], - plugins: ['@nx'], - overrides: [ - { - files: ['*.json'], - parser: 'jsonc-eslint-parser', - rules: { - '@nx/dependency-checks': [ - 'error', - { - checkVersionMismatches: false, - ignoredFiles: ['{projectRoot}/vite.config.{js,ts,mjs,mts}'], - }, - ], - }, - }, - ], - }); - }); -}); diff --git a/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.ts b/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.ts deleted file mode 100644 index a070ef746c..0000000000 --- a/packages/eslint/src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { getProjects, Tree } from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { - findEslintFile, - isEslintConfigSupported, - lintConfigHasOverride, - updateOverrideInLintConfig, -} from '../../generators/utils/eslint-file'; - -// Add `ignoredFiles` pattern to projects using vite, esbuild, and rollup. -// This is needed because the @nx/dependency-checks lint rule will complain -// about dependencies used in build config files, even though they are not -// production dependencies. -export default function update(tree: Tree) { - const projects = getProjects(tree); - - const addIgnorePattern = - (ignorePattern: string) => (_options: unknown, projectName: string) => { - const project = projects.get(projectName); - if ( - !findEslintFile(tree, project.root) || - !isEslintConfigSupported(tree) - ) { - return; - } - if ( - lintConfigHasOverride( - tree, - project.root, - (o) => - Array.isArray(o.files) - ? o.files.some((f) => f.match(/\.json$/)) - : !!o.files?.match(/\.json$/), - true - ) - ) { - updateOverrideInLintConfig( - tree, - project.root, - (o) => !!o.rules?.['@nx/dependency-checks'], - (o) => { - const value = o.rules['@nx/dependency-checks']; - let ruleSeverity: 0 | 1 | 2 | 'error' | 'warn' | 'off'; - let ruleOptions: any; - if (Array.isArray(value)) { - ruleSeverity = value[0]; - ruleOptions = value[1]; - } else { - ruleSeverity = value; - ruleOptions = {}; - } - ruleOptions.ignoredFiles = [ignorePattern]; - o.rules['@nx/dependency-checks'] = [ruleSeverity, ruleOptions]; - return o; - } - ); - } - }; - - forEachExecutorOptions( - tree, - '@nx/vite:build', - addIgnorePattern('{projectRoot}/vite.config.{js,ts,mjs,mts}') - ); - forEachExecutorOptions( - tree, - '@nx/vite:test', - addIgnorePattern('{projectRoot}/vite.config.{js,ts,mjs,mts}') - ); - forEachExecutorOptions( - tree, - '@nx/esbuild:esbuild', - addIgnorePattern('{projectRoot}/esbuild.config.{js,ts,mjs,mts}') - ); - forEachExecutorOptions( - tree, - '@nx/rollup:rollup', - addIgnorePattern('{projectRoot}/rollup.config.{js,ts,mjs,mts}') - ); -} diff --git a/packages/expo/migrations.json b/packages/expo/migrations.json index 6b6d101556..2b968b5277 100644 --- a/packages/expo/migrations.json +++ b/packages/expo/migrations.json @@ -1,47 +1,5 @@ { "generators": { - "remove-deprecated-expo-targets": { - "version": "16.0.0-beta.0", - "cli": "nx", - "description": "Remove deprecated expo targets", - "factory": "./src/migrations/update-16-0-0/remove-deprecated-targets" - }, - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/expo with @nx/expo", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-eas-scripts-16-1-4": { - "cli": "nx", - "version": "16.1.4-beta.0", - "description": "Update package.json eas build lifecycle scripts", - "implementation": "./src/migrations/update-16-1-4/update-eas-scripts" - }, - "update-16-6-0-add-dependsOn": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Add dependsOn like ensure-symlink or sync-deps to targets", - "implementation": "./src/migrations/update-16-6-0/add-depends-on" - }, - "update-16-6-0-update-metro-config": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Update metro.config.js to use the new metro config format", - "implementation": "./src/migrations/update-16-6-0/update-metro-config" - }, - "update-16-9-0-remove-types-react-native": { - "cli": "nx", - "version": "16.9.0-beta.1", - "description": "Remove @types/react-native from package.json", - "implementation": "./src/migrations/update-16-9-0/remove-types-react-native" - }, - "update-16-9-0-update-eas-json-cli-version": { - "cli": "nx", - "version": "16.9.0-beta.1", - "description": "Update eas.json cli version", - "implementation": "./src/migrations/update-16-9-0/update-eas-cli-version" - }, "update-18-0-0-remove-block-list": { "cli": "nx", "version": "18.0.0-beta.0", @@ -86,226 +44,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.0", - "packages": { - "expo": { - "version": "48.0.11", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.71.6", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.71.6", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.10.0", - "alwaysAddToPackageJson": false - }, - "@expo/cli": { - "version": "~0.7.0", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "12.0.1", - "alwaysAddToPackageJson": false - }, - "jest-expo": { - "version": "~48.0.2", - "alwaysAddToPackageJson": false, - "addToPackageJson": "devDependencies" - } - } - }, - "16.0.2": { - "version": "16.0.2-beta.0", - "packages": { - "expo": { - "version": "48.0.15", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.71.7", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.10.2", - "alwaysAddToPackageJson": false - }, - "@expo/cli": { - "version": "~0.7.1", - "alwaysAddToPackageJson": false - }, - "expo-splash-screen": { - "version": "~0.18.2", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.5": { - "version": "16.1.5-beta.0", - "packages": { - "expo": { - "version": "^48.0.16", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.12.0", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "12.1.2", - "alwaysAddToPackageJson": false - } - } - }, - "16.2.2": { - "version": "16.2.2-beta.0", - "packages": { - "expo": { - "version": "^48.0.17", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.13.2", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.71.8", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.71.7", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0": { - "version": "16.4.0-beta.5", - "packages": { - "expo": { - "version": "^48.0.19", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.13.3", - "alwaysAddToPackageJson": false - }, - "@expo/cli": { - "version": "~0.7.3", - "alwaysAddToPackageJson": false - } - } - }, - "16.6.0": { - "version": "16.6.0-beta.0", - "packages": { - "expo": { - "version": "^49.0.3", - "alwaysAddToPackageJson": false - }, - "@expo/metro-config": { - "version": "~0.10.6", - "alwaysAddToPackageJson": false - }, - "expo-splash-screen": { - "version": "~0.20.4", - "alwaysAddToPackageJson": false - }, - "expo-status-bar": { - "version": "~1.6.0", - "alwaysAddToPackageJson": false - }, - "@expo/cli": { - "version": "~0.10.10", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~3.15.0", - "alwaysAddToPackageJson": false - }, - "babel-preset-expo": { - "version": "~9.5.0", - "alwaysAddToPackageJson": false - }, - "jest-expo": { - "version": "~49.0.0", - "alwaysAddToPackageJson": false - }, - "metro-resolver": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.72.3", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.72.2", - "alwaysAddToPackageJson": false - }, - "react-native-web": { - "version": "~0.19.6", - "alwaysAddToPackageJson": false - }, - "react-native-svg": { - "version": "13.9.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.9.0": { - "version": "16.9.0-beta.1", - "packages": { - "expo": { - "version": "49.0.10", - "alwaysAddToPackageJson": false - }, - "@expo/metro-config": { - "version": "~0.10.7", - "alwaysAddToPackageJson": false - }, - "expo-splash-screen": { - "version": "~0.20.5", - "alwaysAddToPackageJson": false - }, - "@expo/cli": { - "version": "~0.10.12", - "alwaysAddToPackageJson": false - }, - "eas-cli": { - "version": "~5.2.0", - "alwaysAddToPackageJson": false - }, - "babel-preset-expo": { - "version": "~9.5.2", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.72.4", - "alwaysAddToPackageJson": false - }, - "react-native-web": { - "version": "~0.19.8", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "~12.3.0", - "alwaysAddToPackageJson": false - }, - "@testing-library/jest-native": { - "version": "~5.4.3", - "alwaysAddToPackageJson": false - } - } - }, "17.1.0": { "version": "17.1.0-beta.0", "packages": { diff --git a/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 9ee07dbc04..0000000000 --- a/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/expo'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/expo', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/expo'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/expo'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/expo', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/expo'] ?? - packageJson.dependencies['@nx/expo']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 9459acd384..0000000000 --- a/packages/expo/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/expo', '@nx/expo'); - - await formatFiles(tree); -} diff --git a/packages/expo/src/migrations/update-16-0-0/remove-deprecated-targets.ts b/packages/expo/src/migrations/update-16-0-0/remove-deprecated-targets.ts deleted file mode 100644 index 735c15aef0..0000000000 --- a/packages/expo/src/migrations/update-16-0-0/remove-deprecated-targets.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - Tree, - formatFiles, - getProjects, - updateProjectConfiguration, -} from '@nx/devkit'; - -/** - * Remove deprecated @expo/cli targets - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [name, config] of projects.entries()) { - if ( - config.targets?.['start']?.executor === '@nrwl/expo:start' || - config.targets?.['start']?.executor === '@nx/expo:start' - ) { - const targetsToDelete = [ - 'build-ios', - 'build-android', - 'build-web', - 'build-status', - 'publish', - 'publish-set', - 'rollback', - 'eject', - ]; - targetsToDelete.forEach((target) => { - if (config.targets[target]) { - delete config.targets[target]; - } - }); - updateProjectConfiguration(tree, name, config); - } - } - - await formatFiles(tree); -} diff --git a/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.spec.ts b/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.spec.ts deleted file mode 100644 index bdc51c04cc..0000000000 --- a/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.spec.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - Tree, - addProjectConfiguration, - readJson, - updateJson, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import update from './update-eas-scripts'; - -describe('update-eas-scripts', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - addProjectConfiguration(tree, 'products', { - root: 'apps/products', - sourceRoot: 'apps/products/src', - targets: { - start: { - executor: '@nrwl/expo:start', - }, - }, - }); - tree.write('apps/products/package.json', JSON.stringify({})); - }); - - it('should add scripts', async () => { - update(tree); - - expect( - tree.exists('tools/scripts/eas-build-post-install.mjs') - ).toBeTruthy(); - const packageJson = readJson(tree, 'apps/products/package.json'); - expect(packageJson.scripts['eas-build-post-install']).toEqual( - 'cd ../../ && node tools/scripts/eas-build-post-install.mjs . apps/products' - ); - }); - - it('should remove postinstall script', async () => { - updateJson(tree, 'apps/products/package.json', (json) => { - json.scripts = { - postinstall: 'some script', - }; - return json; - }); - update(tree); - - const packageJson = readJson(tree, 'apps/products/package.json'); - expect(packageJson.scripts['postinstall']).toBeUndefined(); - }); -}); diff --git a/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.ts b/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.ts deleted file mode 100644 index 253ee1d54c..0000000000 --- a/packages/expo/src/migrations/update-16-1-4/update-eas-scripts.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - Tree, - getProjects, - logger, - offsetFromRoot, - updateJson, -} from '@nx/devkit'; -import { addEasScripts } from '../../generators/application/lib/add-eas-scripts'; -import { join } from 'path'; - -/** - * Update app's package.json to use eas-build-post-install scripts. - */ -export default function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [name, config] of projects.entries()) { - if ( - config.targets?.['start']?.executor === '@nrwl/expo:start' || - config.targets?.['start']?.executor === '@nx/expo:start' - ) { - try { - addEasScripts(tree); - updateJson(tree, join(config.root, 'package.json'), (packageJson) => { - if (packageJson.scripts?.['postinstall']) { - delete packageJson.scripts['postinstall']; - } - const offset = offsetFromRoot(config.root); - packageJson.scripts = { - ...packageJson.scripts, - 'eas-build-post-install': `cd ${offset} && node tools/scripts/eas-build-post-install.mjs . ${config.root}`, - }; - return packageJson; - }); - } catch { - logger.error(`Unable to update package.json for project ${name}.`); - } - } - } -} diff --git a/packages/expo/src/migrations/update-16-6-0/add-depends-on.ts b/packages/expo/src/migrations/update-16-6-0/add-depends-on.ts deleted file mode 100644 index c133e28eba..0000000000 --- a/packages/expo/src/migrations/update-16-6-0/add-depends-on.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Tree, getProjects, updateProjectConfiguration } from '@nx/devkit'; - -/** - * This migration adds dependsOn to project.json. - * - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [name, config] of projects.entries()) { - if (config.targets?.['start']?.executor === '@nx/expo:start') { - config.targets['start'].dependsOn = ['ensure-symlink', 'sync-deps']; - } - if (config.targets?.['run-ios']?.executor === '@nx/expo:run') { - config.targets['run-ios'].dependsOn = ['ensure-symlink', 'sync-deps']; - } - if (config.targets?.['run-android']?.executor === '@nx/expo:run') { - config.targets['run-android'].dependsOn = ['ensure-symlink', 'sync-deps']; - } - if (config.targets?.['prebuild']?.executor === '@nx/expo:prebuild') { - config.targets['prebuild'].dependsOn = ['ensure-symlink', 'sync-deps']; - } - if (config.targets?.['export']?.executor === '@nx/expo:export') { - config.targets['export'].dependsOn = ['ensure-symlink', 'sync-deps']; - } - - updateProjectConfiguration(tree, name, config); - } -} diff --git a/packages/expo/src/migrations/update-16-6-0/update-metro-config.ts b/packages/expo/src/migrations/update-16-6-0/update-metro-config.ts deleted file mode 100644 index 8a165cc66c..0000000000 --- a/packages/expo/src/migrations/update-16-6-0/update-metro-config.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Tree, getProjects } from '@nx/devkit'; -import { join } from 'path'; - -/** - * This migration updates metro.config.js to export config as a default. - * - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [_, config] of projects.entries()) { - if (config.targets?.['start']?.executor === '@nx/expo:start') { - if (tree.exists(join(config.root, 'metro.config.js'))) { - const oldConfig = tree - .read(join(config.root, 'metro.config.js')) - .toString(); - tree.write( - join(config.root, 'metro-v71.config.js'), - oldConfigComment + oldConfig - ); - tree.write(join(config.root, 'metro.config.js'), content); - } - } - } -} - -const oldConfigComment = `/** - * Old custom configuration for React Native v0.71. - * From @react-native/metro-config 0.72.1, it is no longer necessary to use a config function to access the complete default config. - * Please port your custom configuration to metro.config.js. - * Please see https://docs.expo.dev/guides/customizing-metro/ to learn about configuration. - */ -`; - -const content = ` -const { withNxMetro } = require('@nx/expo'); -const { getDefaultConfig } = require('@expo/metro-config'); -const { mergeConfig } = require('metro-config'); - -const defaultConfig = getDefaultConfig(__dirname); -const { assetExts, sourceExts } = defaultConfig.resolver; - -/** - * Metro configuration - * https://facebook.github.io/metro/docs/configuration - * - * @type {import('metro-config').MetroConfig} - */ -const customConfig = { - transformer: { - babelTransformerPath: require.resolve('react-native-svg-transformer'), - }, - resolver: { - assetExts: assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...sourceExts, 'cjs', 'mjs', 'svg'], - }, -}; - - -module.exports = withNxMetro(mergeConfig(defaultConfig, customConfig), { - // Change this to true to see debugging info. - // Useful if you have issues resolving modules - debug: false, - // all the file extensions used for imports other than 'ts', 'tsx', 'js', 'jsx', 'json' - extensions: [], - // Specify folders to watch, in addition to Nx defaults (workspace libraries and node_modules) - watchFolders: [], -}); -`; diff --git a/packages/expo/src/migrations/update-16-9-0/remove-types-react-native.ts b/packages/expo/src/migrations/update-16-9-0/remove-types-react-native.ts deleted file mode 100644 index a2a9daabb1..0000000000 --- a/packages/expo/src/migrations/update-16-9-0/remove-types-react-native.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { - formatFiles, - removeDependenciesFromPackageJson, - Tree, -} from '@nx/devkit'; - -/** - * Remove @types/react-native package since it is no longer required. It would be a part of react native package. - * @param tree - * @returns - */ -export default async function update(tree: Tree) { - removeDependenciesFromPackageJson(tree, [], ['@types/react-native']); - await formatFiles(tree); -} diff --git a/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.spec.ts b/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.spec.ts deleted file mode 100644 index 85389d62b9..0000000000 --- a/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { addProjectConfiguration, getProjects, Tree } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import update from './update-eas-cli-version'; - -describe('update-eas-cli-version', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - addProjectConfiguration(tree, 'product', { - root: 'apps/product', - sourceRoot: 'apps/product/src', - targets: { - start: { - executor: '@nx/expo:start', - }, - }, - }); - tree.write('apps/product/eas.json', '{"cli":{"version": "1.2.3"}}'); - }); - - it(`should update eas.json with greater than version`, async () => { - await update(tree); - - const easJson = JSON.parse(tree.read('apps/product/eas.json').toString()); - expect(easJson.cli.version).toContain('>='); - }); -}); diff --git a/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.ts b/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.ts deleted file mode 100644 index 49de4ae51b..0000000000 --- a/packages/expo/src/migrations/update-16-9-0/update-eas-cli-version.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Tree, getProjects, updateJson } from '@nx/devkit'; - -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [name, config] of projects.entries()) { - if (config.targets?.['start']?.executor === '@nx/expo:start') { - updateJson(tree, `${config.root}/eas.json`, (easJson) => { - if (easJson?.cli?.version) { - easJson.cli.version = `>= 5`; - } - return easJson; - }); - } - } -} diff --git a/packages/express/migrations.json b/packages/express/migrations.json index 1f28dfafc3..f9d34cef28 100644 --- a/packages/express/migrations.json +++ b/packages/express/migrations.json @@ -1,11 +1,4 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/express with @nx/express", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - } - }, + "generators": {}, "packageJsonUpdates": {} } diff --git a/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 856c86a57b..0000000000 --- a/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/express'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/express', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/express'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/express'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/express', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/express'] ?? - packageJson.dependencies['@nx/express']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 5ac86ccf45..0000000000 --- a/packages/express/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/express', '@nx/express'); - - await formatFiles(tree); -} diff --git a/packages/jest/migrations.json b/packages/jest/migrations.json index 12bddd7d97..2ec6fd7754 100644 --- a/packages/jest/migrations.json +++ b/packages/jest/migrations.json @@ -1,17 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/jest with @nx/jest", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "add-test-setup-to-inputs-ignore": { - "cli": "nx", - "version": "16.5.0-beta.2", - "description": "Add test-setup.ts to ignored files in production input", - "implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore" - }, "move-options-to-target-defaults": { "version": "17.1.0-beta.2", "description": "Move jest executor options to nx.json targetDefaults", @@ -19,15 +7,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.4", - "packages": { - "ts-jest": { - "version": "~29.1.0", - "alwaysAddToPackageJson": false - } - } - }, "17.2.0": { "version": "17.2.0-beta.2", "packages": { diff --git a/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index e92821496f..0000000000 --- a/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/jest'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/jest', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/jest'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/jest'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/jest', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/jest'] ?? - packageJson.dependencies['@nx/jest']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 0d5413bfec..0000000000 --- a/packages/jest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/jest', '@nx/jest'); - - await formatFiles(tree); -} diff --git a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts deleted file mode 100644 index add7fb0f72..0000000000 --- a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.spec.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Tree, readNxJson, updateNxJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import addTestSetupToIgnoredInputs from './add-test-setup-to-inputs-ignore'; - -describe('Jest Migration - jest 29 mocked usage in tests', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should add inputs configuration for test-setup if missing', async () => { - updateNxJson(tree, { - namedInputs: { - default: ['{projectRoot}/**/*', 'sharedGlobals'], - sharedGlobals: [], - production: ['default'], - }, - }); - - await addTestSetupToIgnoredInputs(tree); - - const updated = readNxJson(tree); - expect(updated.namedInputs.production).toMatchInlineSnapshot(` - [ - "default", - "!{projectRoot}/src/test-setup.[jt]s", - ] - `); - }); - - it('should not add inputs configuration for test-setup if existing', async () => { - updateNxJson(tree, { - namedInputs: { - default: ['{projectRoot}/**/*', 'sharedGlobals'], - sharedGlobals: [], - production: ['!{projectRoot}/src/test-setup.[jt]s', 'default'], - }, - }); - - await addTestSetupToIgnoredInputs(tree); - - const updated = readNxJson(tree); - expect(updated.namedInputs.production).toMatchInlineSnapshot(` - [ - "!{projectRoot}/src/test-setup.[jt]s", - "default", - ] - `); - }); -}); diff --git a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts b/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts deleted file mode 100644 index 5aab603136..0000000000 --- a/packages/jest/src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - NxJsonConfiguration, - Tree, - formatFiles, - readNxJson, - updateNxJson, -} from '@nx/devkit'; - -export async function addTestSetupToIgnoredInputs(tree: Tree) { - const nxJson: NxJsonConfiguration = readNxJson(tree); - - if (!nxJson) { - return; - } - if ( - nxJson.namedInputs?.production && - !nxJson.namedInputs.production.includes( - '!{projectRoot}/src/test-setup.[jt]s' - ) - ) { - nxJson.namedInputs.production.push('!{projectRoot}/src/test-setup.[jt]s'); - updateNxJson(tree, nxJson); - } - - await formatFiles(tree); -} - -export default addTestSetupToIgnoredInputs; diff --git a/packages/js/migrations.json b/packages/js/migrations.json index 99e0241965..a277e5dd84 100644 --- a/packages/js/migrations.json +++ b/packages/js/migrations.json @@ -1,23 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/js with @nx/js", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "explicitly-set-projects-to-update-buildable-deps": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.", - "factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps" - }, - "16-8-2-update-swcrc": { - "cli": "nx", - "version": "16.8.2-beta.0", - "description": "Remove invalid options (strict, noInterop) for ES6 type modules.", - "factory": "./src/migrations/update-16-8-2/update-swcrc" - }, "update-17-0-0-remove-deprecated-build-options": { "cli": "nx", "version": "17.0.2", @@ -26,65 +8,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.3", - "packages": { - "@swc/cli": { - "version": "~0.1.62", - "alwaysAddToPackageJson": false - }, - "@swc/helpers": { - "version": "~0.5.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.0": { - "version": "16.1.0-beta.0", - "x-prompt": "Do you want to update to TypeScript v5.0?", - "requires": { - "typescript": ">=4.9.5 <5.0.0" - }, - "packages": { - "typescript": { - "version": "~5.0.2" - } - } - }, - "16.4.0": { - "version": "16.4.0-beta.11", - "x-prompt": "Do you want to update to TypeScript v5.1?", - "requires": { - "typescript": ">=5.0.0 <5.1.0" - }, - "packages": { - "typescript": { - "version": "~5.1.3" - } - } - }, - "16.8.2": { - "version": "16.8.2-beta.0", - "packages": { - "@swc/core": { - "version": "~1.3.85", - "alwaysAddToPackageJson": false - }, - "@swc/helpers": { - "version": "~0.5.2", - "alwaysAddToPackageJson": false - } - } - }, - "16.9.2": { - "version": "16.9.2-beta.0", - "packages": { - "@swc-node/register": { - "version": "~1.6.7", - "alwaysAddToPackageJson": false - } - } - }, "17.0.0": { "version": "17.0.0-rc.2", "packages": { diff --git a/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 42b7c511fb..0000000000 --- a/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/js'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/js', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/js'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/js'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/js', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/js'] ?? - packageJson.dependencies['@nx/js']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 04118deb72..0000000000 --- a/packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/js', '@nx/js'); - - await formatFiles(tree); -} diff --git a/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts b/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts deleted file mode 100644 index b21129350c..0000000000 --- a/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { - ProjectConfiguration, - ProjectGraph, - Tree, - addProjectConfiguration, - readProjectConfiguration, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import migration from './explicitly-set-projects-to-update-buildable-deps'; - -let projectGraph: ProjectGraph; -jest.mock('@nx/devkit', () => ({ - ...jest.requireActual('@nx/devkit'), - createProjectGraphAsync: () => Promise.resolve(projectGraph), -})); - -describe('explicitly-set-projects-to-update-buildable-deps migration', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it.each(['@nx/js:swc', '@nrwl/js:swc', '@nx/js:tsc', '@nrwl/js:tsc'])( - 'should set updateBuildableProjectDepsInPackageJson option to "true" when not specified in target using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'lib1', - projectType: 'library', - targets: { build: { executor, options: {} } }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(true); - } - ); - - it.each(['@nx/js:swc', '@nrwl/js:swc', '@nx/js:tsc', '@nrwl/js:tsc'])( - 'should set updateBuildableProjectDepsInPackageJson option to "true" when target has no options object defined using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'lib1', - projectType: 'library', - targets: { build: { executor } }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(true); - } - ); - - it.each(['@nx/js:swc', '@nrwl/js:swc', '@nx/js:tsc', '@nrwl/js:tsc'])( - 'should not overwrite updateBuildableProjectDepsInPackageJson option when it is specified in target using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'lib1', - projectType: 'library', - targets: { - build: { - executor, - options: { updateBuildableProjectDepsInPackageJson: false }, - }, - }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(false); - } - ); - - it('should not update targets using other executors', async () => { - const originalProjectConfig: ProjectConfiguration = { - root: 'lib1', - projectType: 'library', - targets: { - build: { - executor: 'some-executor', - options: {}, - }, - }, - }; - addProject(tree, 'lib1', originalProjectConfig); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect(project.targets).toStrictEqual(originalProjectConfig.targets); - }); -}); - -function addProject( - tree: Tree, - projectName: string, - config: ProjectConfiguration -): void { - projectGraph = { - dependencies: {}, - nodes: { - [projectName]: { - data: config, - name: projectName, - type: config.projectType === 'application' ? 'app' : 'lib', - }, - }, - }; - addProjectConfiguration(tree, projectName, config); -} diff --git a/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts b/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts deleted file mode 100644 index edbe446bf5..0000000000 --- a/packages/js/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - createProjectGraphAsync, - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; - -const executors = new Set([ - '@nx/js:swc', - '@nrwl/js:swc', - '@nx/js:tsc', - '@nrwl/js:tsc', -]); - -export default async function (tree: Tree) { - // use project graph to get the expanded target configurations - const projectGraph = await createProjectGraphAsync(); - - for (const [projectName, { data: projectData }] of Object.entries( - projectGraph.nodes - )) { - if (projectData.projectType !== 'library') { - continue; - } - - for (const [targetName, target] of Object.entries( - projectData.targets || {} - )) { - if (!executors.has(target.executor)) { - continue; - } - - if ( - !target.options || - target.options.updateBuildableProjectDepsInPackageJson === undefined - ) { - // read the project configuration to write the explicit project configuration - // and avoid writing the expanded target configuration - const project = readProjectConfiguration(tree, projectName); - project.targets[targetName].options ??= {}; - project.targets[ - targetName - ].options.updateBuildableProjectDepsInPackageJson = true; - updateProjectConfiguration(tree, projectName, project); - } - } - } - - await formatFiles(tree); -} diff --git a/packages/js/src/migrations/update-16-8-2/update-swcrc.spec.ts b/packages/js/src/migrations/update-16-8-2/update-swcrc.spec.ts deleted file mode 100644 index 7c8e06e7e7..0000000000 --- a/packages/js/src/migrations/update-16-8-2/update-swcrc.spec.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { addProjectConfiguration, readJson, Tree, writeJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import update from './update-swcrc'; - -describe('Migration: update .swcrc', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should remove invalid options for ES6 modules', async () => { - addProjectConfiguration(tree, 'pkg', { - root: 'pkg', - }); - writeJson(tree, 'pkg/.swcrc', { - module: { - type: 'es6', - strict: true, - noInterop: true, - }, - }); - - await update(tree); - - expect(readJson(tree, 'pkg/.swcrc')).toEqual({ - module: { - type: 'es6', - }, - }); - }); - - it('should keep options for CommonJS modules', async () => { - addProjectConfiguration(tree, 'pkg', { - root: 'pkg', - }); - writeJson(tree, 'pkg/.swcrc', { - module: { - type: 'commonjs', - strict: true, - noInterop: true, - }, - }); - - await update(tree); - - expect(readJson(tree, 'pkg/.swcrc')).toEqual({ - module: { - type: 'commonjs', - strict: true, - noInterop: true, - }, - }); - }); - - it('should ignore projects without module options in .swcrc', async () => { - addProjectConfiguration(tree, 'pkg', { - root: 'pkg', - }); - writeJson(tree, 'pkg/.swcrc', { - jsc: { - target: 'es2017', - }, - }); - - await expect(update(tree)).resolves.not.toThrow(); - - expect(readJson(tree, 'pkg/.swcrc')).toEqual({ - jsc: { - target: 'es2017', - }, - }); - }); - - it('should ignore projects without .swcrc', async () => { - addProjectConfiguration(tree, 'pkg', { - root: 'pkg', - }); - - await expect(update(tree)).resolves.not.toThrow(); - }); -}); diff --git a/packages/js/src/migrations/update-16-8-2/update-swcrc.ts b/packages/js/src/migrations/update-16-8-2/update-swcrc.ts deleted file mode 100644 index 359a38a284..0000000000 --- a/packages/js/src/migrations/update-16-8-2/update-swcrc.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { - formatFiles, - getProjects, - readJson, - Tree, - writeJson, -} from '@nx/devkit'; -import { join } from 'path'; - -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const config of projects.values()) { - const swcrcPath = join(config.root, '.swcrc'); - if (!tree.exists(swcrcPath)) continue; - const json = readJson(tree, swcrcPath); - // No longer need strict or noInterop for es6 modules - // See: https://github.com/swc-project/swc/commit/7e8d72d - if ( - json.module?.type === 'es6' && - (json.module?.strict || json.module?.noInterop) - ) { - delete json.module.noInterop; - delete json.module.strict; - writeJson(tree, swcrcPath, json); - } - } - - await formatFiles(tree); -} diff --git a/packages/nest/migrations.json b/packages/nest/migrations.json index 27068d5867..f9d34cef28 100644 --- a/packages/nest/migrations.json +++ b/packages/nest/migrations.json @@ -1,76 +1,4 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/nest with @nx/nest", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-4-0-support-nestjs-10": { - "cli": "nx", - "version": "16.4.0-beta.16", - "description": "Update TsConfig target to es2021 and CacheModule if being used. Read more at https://docs.nestjs.com/migration-guide", - "implementation": "./src/migrations/update-16-4-0-cache-manager/nestjs-10-updates" - } - }, - "packageJsonUpdates": { - "16.1.0": { - "version": "16.1.0-beta.0", - "packages": { - "@nestjs/common": { - "version": "^9.1.1", - "alwaysAddToPackageJson": false - }, - "@nestjs/core": { - "version": "^9.1.1", - "alwaysAddToPackageJson": false - }, - "@nestjs/platform-express": { - "version": "^9.1.1", - "alwaysAddToPackageJson": false - }, - "@nestjs/schematics": { - "version": "^9.1.0", - "alwaysAddToPackageJson": false - }, - "@nestjs/swagger": { - "version": "^6.3.0", - "alwaysAddToPackageJson": false - }, - "@nestjs/testing": { - "version": "^9.1.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0": { - "version": "16.4.0-beta.11", - "packages": { - "@nestjs/common": { - "version": "^10.0.2", - "alwaysAddToPackageJson": false - }, - "@nestjs/core": { - "version": "^10.0.2", - "alwaysAddToPackageJson": false - }, - "@nestjs/platform-express": { - "version": "^10.0.2", - "alwaysAddToPackageJson": false - }, - "@nestjs/schematics": { - "version": "^10.0.1", - "alwaysAddToPackageJson": false - }, - "@nestjs/swagger": { - "version": "^7.0.2", - "alwaysAddToPackageJson": false - }, - "@nestjs/testing": { - "version": "^10.0.2", - "alwaysAddToPackageJson": false - } - } - } - } + "generators": {}, + "packageJsonUpdates": {} } diff --git a/packages/nest/package.json b/packages/nest/package.json index 156e00f6d9..66e60d7405 100644 --- a/packages/nest/package.json +++ b/packages/nest/package.json @@ -36,7 +36,6 @@ "@nx/js": "file:../js", "@nx/eslint": "file:../eslint", "@nx/node": "file:../node", - "@phenomnomnominal/tsquery": "~5.0.1", "tslib": "^2.3.0" }, "publishConfig": { diff --git a/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index dc34380a63..0000000000 --- a/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/nest'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/nest', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/nest'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/nest'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/nest', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/nest'] ?? - packageJson.dependencies['@nx/nest']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index b8bc21758d..0000000000 --- a/packages/nest/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/nest', '@nx/nest'); - - await formatFiles(tree); -} diff --git a/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10-updates.ts b/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10-updates.ts deleted file mode 100644 index 1178c5670e..0000000000 --- a/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10-updates.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { - Tree, - addDependenciesToPackageJson, - createProjectGraphAsync, - formatFiles, - getProjects, - joinPathFragments, - updateJson, - visitNotIgnoredFiles, -} from '@nx/devkit'; -import { tsquery } from '@phenomnomnominal/tsquery'; -import { - ImportDeclaration, - VariableStatement, - ScriptTarget, - isVariableStatement, -} from 'typescript'; - -const JS_TS_FILE_MATCHER = /\.[jt]sx?$/; - -const importMatch = - ':matches(ImportDeclaration, VariableStatement):has(Identifier[name="CacheModule"], Identifier[name="CacheModule"]):has(StringLiteral[value="@nestjs/common"])'; - -export async function updateNestJs10(tree: Tree) { - const nestProjects = await getNestProejcts(); - if (nestProjects.length === 0) { - return; - } - - let installCacheModuleDeps = false; - const projects = getProjects(tree); - - for (const projectName of nestProjects) { - const projectConfig = projects.get(projectName); - const tsConfig = - projectConfig.targets?.build?.options?.tsConfig ?? - joinPathFragments( - projectConfig.root, - projectConfig.projectType === 'application' - ? 'tsconfig.app.json' - : 'tsconfig.lib.json' - ); - - if (tree.exists(tsConfig)) { - updateTsConfigTarget(tree, tsConfig); - } - - visitNotIgnoredFiles(tree, projectConfig.root, (filePath) => { - if (!JS_TS_FILE_MATCHER.test(filePath)) { - return; - } - - installCacheModuleDeps = - updateCacheManagerImport(tree, filePath) || installCacheModuleDeps; - }); - } - - await formatFiles(tree); - - return installCacheModuleDeps - ? addDependenciesToPackageJson( - tree, - { - '@nestjs/cache-manager': '^2.0.0', - 'cache-manager': '^5.2.3', - }, - {} - ) - : () => {}; -} - -async function getNestProejcts(): Promise { - const projectGraph = await createProjectGraphAsync(); - - return Object.entries(projectGraph.dependencies) - .filter(([node, dep]) => - dep.some( - ({ target }) => - !projectGraph.externalNodes?.[node] && target === 'npm:@nestjs/common' - ) - ) - .map(([projectName]) => projectName); -} - -// change import { CacheModule } from '@nestjs/common'; -// to import { CacheModule } from '@nestjs/cache-manager'; -export function updateCacheManagerImport( - tree: Tree, - filePath: string -): boolean { - const content = tree.read(filePath, 'utf-8'); - - const updated = tsquery.replace( - content, - importMatch, - - (node: ImportDeclaration | VariableStatement) => { - const text = node.getText(); - return `${text.replace('CacheModule', '')}\n${ - isVariableStatement(node) - ? "const { CacheModule } = require('@nestjs/cache-manager')" - : "import { CacheModule } from '@nestjs/cache-manager';" - }`; - } - ); - - if (updated !== content) { - tree.write(filePath, updated); - return true; - } -} - -export function updateTsConfigTarget(tree: Tree, tsConfigPath: string) { - updateJson(tree, tsConfigPath, (json) => { - if (!json.compilerOptions.target) { - return json; - } - - const normalizedTargetName = json.compilerOptions.target.toUpperCase(); - // es6 isn't apart of the ScriptTarget enum but is a valid tsconfig target in json file - const existingTarget = - normalizedTargetName === 'ES6' - ? ScriptTarget.ES2015 - : (ScriptTarget[normalizedTargetName] as unknown as ScriptTarget); - - if (existingTarget < ScriptTarget.ES2021) { - json.compilerOptions.target = 'es2021'; - } - - return json; - }); -} - -export default updateNestJs10; diff --git a/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10.spec.ts b/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10.spec.ts deleted file mode 100644 index d17809dd88..0000000000 --- a/packages/nest/src/migrations/update-16-4-0-cache-manager/nestjs-10.spec.ts +++ /dev/null @@ -1,242 +0,0 @@ -import { - ProjectConfiguration, - ProjectGraph, - Tree, - addProjectConfiguration, - readJson, -} from '@nx/devkit'; -import { - updateNestJs10, - updateCacheManagerImport, - updateTsConfigTarget, -} from './nestjs-10-updates'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; - -let projectGraph: ProjectGraph; -jest.mock('@nx/devkit', () => ({ - ...jest.requireActual('@nx/devkit'), - createProjectGraphAsync: () => Promise.resolve(projectGraph), -})); -describe('nestjs 10 migration changes', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - - jest.resetAllMocks(); - }); - - it('should update nestjs project', async () => { - tree.write( - 'apps/app1/main.ts', - ` -/** - * This is not a production server yet! - * This is only a minimal backend to get started. - */ - -import { Logger } from '@nestjs/common'; -import { NestFactory } from '@nestjs/core'; -import { CacheModule } from '@nestjs/common'; -import { AppModule } from './app/app.module'; - -async function bootstrap() { - const app = await NestFactory.create(AppModule); - const globalPrefix = 'api'; - app.setGlobalPrefix(globalPrefix); - const port = process.env.PORT || 3000; - await app.listen(port); - Logger.log('🚀 Application is running on: http://localhost:' + port + '/' + globalPrefix); -} - -bootstrap(); -` - ); - - tree.write( - 'apps/app1/tsconfig.app.json', - JSON.stringify({ - extends: './tsconfig.json', - compilerOptions: { - outDir: '../../dist/out-tsc', - module: 'commonjs', - types: ['node'], - emitDecoratorMetadata: true, - target: 'es2015', - }, - exclude: ['jest.config.ts', 'src/**/*.spec.ts', 'src/**/*.test.ts'], - include: ['src/**/*.ts'], - }) - ); - addProject( - tree, - 'app1', - { - root: 'apps/app1', - targets: { - build: { - executor: '@nx/webpack:webpack', - options: { - tsConfig: 'apps/app1/tsconfig.app.json', - }, - }, - }, - }, - ['npm:@nestjs/common'] - ); - - await updateNestJs10(tree); - - expect(readJson(tree, 'package.json').dependencies).toMatchInlineSnapshot(` - { - "@nestjs/cache-manager": "^2.0.0", - "cache-manager": "^5.2.3", - } - `); - expect( - readJson(tree, 'apps/app1/tsconfig.app.json').compilerOptions.target - ).toEqual('es2021'); - expect(tree.read('apps/app1/main.ts', 'utf-8')).toContain( - "import { CacheModule } from '@nestjs/cache-manager';" - ); - }); - - it('should work with non buildable lib', async () => { - tree.write( - 'libs/lib1/src/lib/lib1.module.ts', - ` -import { Module, CacheModule } from '@nestjs/common'; - -@Module({ - controllers: [], - providers: [], - exports: [], - imports: [CacheModule.register()], -}) -export class LibOneModule {} -` - ); - - tree.write( - 'libs/lib1/tsconfig.lib.json', - JSON.stringify({ - extends: './tsconfig.json', - compilerOptions: { - outDir: '../../dist/out-tsc', - module: 'commonjs', - types: ['node'], - emitDecoratorMetadata: true, - target: 'es6', - }, - exclude: ['jest.config.ts', 'src/**/*.spec.ts', 'src/**/*.test.ts'], - include: ['src/**/*.ts'], - }) - ); - addProject( - tree, - 'app1', - { - root: 'libs/lib1', - targets: {}, - }, - ['npm:@nestjs/common'] - ); - - await updateNestJs10(tree); - - expect(readJson(tree, 'package.json').dependencies).toMatchInlineSnapshot(` - { - "@nestjs/cache-manager": "^2.0.0", - "cache-manager": "^5.2.3", - } - `); - expect( - readJson(tree, 'libs/lib1/tsconfig.lib.json').compilerOptions.target - ).toEqual('es2021'); - expect(tree.read('libs/lib1/src/lib/lib1.module.ts', 'utf-8')).toContain( - "import { CacheModule } from '@nestjs/cache-manager';" - ); - }); - - it('should update cache module import', () => { - tree.write( - 'main.ts', - ` -import { Module, CacheModule } from '@nestjs/common'; -const { Module, CacheModule } = require('@nestjs/common'); -` - ); - const actual = updateCacheManagerImport(tree, 'main.ts'); - - expect(tree.read('main.ts', 'utf-8')).toMatchInlineSnapshot(` - " - import { Module, } from '@nestjs/common'; - import { CacheModule } from '@nestjs/cache-manager'; - const { Module, } = require('@nestjs/common'); - const { CacheModule } = require('@nestjs/cache-manager') - " - `); - expect(actual).toBe(true); - }); - - it('should NOT update cache module imports', () => { - tree.write( - 'main.ts', - ` -import { AnotherModule } from '@nestjs/common'; -const { AnotherModule } = require('@nestjs/common'); -` - ); - const actual = updateCacheManagerImport(tree, 'main.ts'); - - expect(tree.read('main.ts', 'utf-8')).toMatchInlineSnapshot(` - " - import { AnotherModule } from '@nestjs/common'; - const { AnotherModule } = require('@nestjs/common'); - " - `); - expect(actual).toBeUndefined(); - }); - - it('should update script target', () => { - tree.write( - 'tsconfig.json', - JSON.stringify({ compilerOptions: { target: 'es6' } }) - ); - updateTsConfigTarget(tree, 'tsconfig.json'); - expect(readJson(tree, 'tsconfig.json').compilerOptions.target).toBe( - 'es2021' - ); - }); - - it('should NOT update script if over es2021', () => { - tree.write( - 'tsconfig.json', - JSON.stringify({ compilerOptions: { target: 'es2022' } }) - ); - updateTsConfigTarget(tree, 'tsconfig.json'); - expect(readJson(tree, 'tsconfig.json').compilerOptions.target).toBe( - 'es2022' - ); - }); -}); - -function addProject( - tree: Tree, - projectName: string, - config: ProjectConfiguration, - dependencies: string[] -): void { - projectGraph = { - dependencies: { - [projectName]: dependencies.map((d) => ({ - source: projectName, - target: d, - type: 'static', - })), - }, - nodes: { - [projectName]: { data: config, name: projectName, type: 'app' }, - }, - }; - addProjectConfiguration(tree, projectName, config); -} diff --git a/packages/next/migrations.json b/packages/next/migrations.json index 9d572c73d7..0e5a49d091 100644 --- a/packages/next/migrations.json +++ b/packages/next/migrations.json @@ -1,23 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/next with @nx/next", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-3-0-remove-root-build-option": { - "cli": "nx", - "version": "16.3.0-beta.9", - "description": "Remove root build option from project configurations since it is not needed.", - "implementation": "./src/migrations/update-16-3-0/remove-root-build-option" - }, - "update-16-4-0-update-next-dependency": { - "cli": "nx", - "version": "16.4.0-beta.3", - "description": "Update package.json moving @nx/next from dependency to devDependency", - "implementation": "./src/migrations/update-16-4-0/update-nx-next-dependency" - }, "update-17-2-7": { "cli": "nx", "version": "17.2.7", @@ -26,24 +8,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.0", - "packages": { - "next": { - "version": "13.3.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.4": { - "version": "16.4.0-beta.4", - "packages": { - "stylus": { - "version": "^0.59.0", - "alwaysAddToPackageJson": false - } - } - }, "17.3.1-beta.0": { "version": "17.3.1-beta.0", "packages": { diff --git a/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 9e8a332ed3..0000000000 --- a/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/next'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/next', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/next'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/next'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/next', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/next'] ?? - packageJson.dependencies['@nx/next']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 577d5dd438..0000000000 --- a/packages/next/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/next', '@nx/next'); - - await formatFiles(tree); -} diff --git a/packages/next/src/migrations/update-16-3-0/remove-root-build-option.spec.ts b/packages/next/src/migrations/update-16-3-0/remove-root-build-option.spec.ts deleted file mode 100644 index 7454b4406e..0000000000 --- a/packages/next/src/migrations/update-16-3-0/remove-root-build-option.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import update from './remove-root-build-option'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { - addProjectConfiguration, - readProjectConfiguration, - Tree, -} from '@nx/devkit'; - -describe('remove-root-build-option', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should remove the root option from the build target for @nx/next:build executor', async () => { - addProjectConfiguration(tree, 'my-app', { - root: 'my-app', - targets: { - build: { - executor: '@nx/next:build', - options: { - root: 'my-app', - }, - }, - }, - }); - - await update(tree); - - const updatedConfig = readProjectConfiguration(tree, 'my-app'); - expect(updatedConfig.targets.build.options.root).toBeUndefined(); - }); - - it('should remove the root option from the build target for @nrwl/next:build executor', async () => { - addProjectConfiguration(tree, 'my-app', { - root: 'my-app', - targets: { - build: { - executor: '@nrwl/next:build', - options: { - root: 'my-app', - }, - }, - }, - }); - - await update(tree); - - const updatedConfig = readProjectConfiguration(tree, 'my-app'); - expect(updatedConfig.targets.build.options.root).toBeUndefined(); - }); - - it('should leave other executors alone', async () => { - addProjectConfiguration(tree, 'my-app', { - root: 'my-app', - targets: { - build: { - executor: '@acme/foo:bar', - options: { - root: 'my-app', - }, - }, - }, - }); - - await update(tree); - - const updatedConfig = readProjectConfiguration(tree, 'my-app'); - expect(updatedConfig.targets.build.options.root).toEqual('my-app'); - }); -}); diff --git a/packages/next/src/migrations/update-16-3-0/remove-root-build-option.ts b/packages/next/src/migrations/update-16-3-0/remove-root-build-option.ts deleted file mode 100644 index 0fc1d8a3d6..0000000000 --- a/packages/next/src/migrations/update-16-3-0/remove-root-build-option.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; - -export default async function update(tree: Tree) { - forEachExecutorOptions( - tree, - '@nx/next:build', - (options, projectName, targetName) => { - const projectConfig = readProjectConfiguration(tree, projectName); - delete projectConfig.targets[targetName].options.root; - updateProjectConfiguration(tree, projectName, projectConfig); - } - ); - forEachExecutorOptions( - tree, - '@nrwl/next:build', - (options, projectName, targetName) => { - const projectConfig = readProjectConfiguration(tree, projectName); - delete projectConfig.targets[targetName].options.root; - updateProjectConfiguration(tree, projectName, projectConfig); - } - ); -} diff --git a/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.spec.ts b/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.spec.ts deleted file mode 100644 index ba3b4603f4..0000000000 --- a/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import update from './update-nx-next-dependency'; - -describe('update-nx-next-dependency', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.dependencies['@nx/next'] = '16.0.0'; - return json; - }); - }); - - it('should move @nx/next from dependencies to devDependencies', async () => { - await update(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nx/next'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nx/next'] - ).toBeDefined(); - }); -}); diff --git a/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.ts b/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.ts deleted file mode 100644 index cebc293809..0000000000 --- a/packages/next/src/migrations/update-16-4-0/update-nx-next-dependency.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Tree, formatFiles, updateJson } from '@nx/devkit'; -import type { PackageJson } from 'nx/src/utils/package-json'; - -export default async function update(tree: Tree) { - if (tree.exists('./package.json')) { - updateJson(tree, 'package.json', (packageJson) => { - if (packageJson.dependencies['@nx/next']) { - packageJson.devDependencies['@nx/next'] = - packageJson.dependencies['@nx/next']; - delete packageJson.dependencies['@nx/next']; - } - return packageJson; - }); - } - await formatFiles(tree); -} diff --git a/packages/node/migrations.json b/packages/node/migrations.json index 13b0d3de92..e90c1b35e3 100644 --- a/packages/node/migrations.json +++ b/packages/node/migrations.json @@ -1,30 +1,5 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/node with @nx/node", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-0-0-update-executor": { - "cli": "nx", - "version": "16.0.0-beta.5", - "description": "Replace @nrwl/node:webpack with @nx/node:webpack", - "implementation": "./src/migrations/update-16-0-0/update-webpack-executor" - }, - "update-16-3-1-update-executor": { - "cli": "nx", - "version": "16.3.1-beta.0", - "description": "Replace @nrwl/node:webpack and @nx/node:webpack with @nx/webpack:webpack for all project targets", - "implementation": "./src/migrations/update-16-3-1/update-webpack-executor" - }, - "update-16-4-0-replace-node-executor": { - "cli": "nx", - "version": "16.4.0-beta.8", - "description": "Replace @nx/node:node with @nx/js:node for all project targets", - "implementation": "./src/migrations/update-16-4-0/replace-node-executor" - } - }, + "generators": {}, "packageJsonUpdates": { "17.3.0": { "version": "17.3.0-beta.3", diff --git a/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 0b72ce8487..0000000000 --- a/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/node'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/node', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/node'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/node'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/node', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/node'] ?? - packageJson.dependencies['@nx/node']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index aa0821ebae..0000000000 --- a/packages/node/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/node', '@nx/node'); - - 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 deleted file mode 100644 index 6af63c248b..0000000000 --- a/packages/node/src/migrations/update-16-0-0/update-webpack-executor.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -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 deleted file mode 100644 index faf23d5e30..0000000000 --- a/packages/node/src/migrations/update-16-0-0/update-webpack-executor.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; - -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); - }; - - forEachExecutorOptions(tree, '@nx/node:webpack', migrateProject); - forEachExecutorOptions(tree, '@nrwl/node:webpack', migrateProject); - - await formatFiles(tree); -} diff --git a/packages/node/src/migrations/update-16-3-1/update-webpack-executor.spec.ts b/packages/node/src/migrations/update-16-3-1/update-webpack-executor.spec.ts deleted file mode 100644 index 6af63c248b..0000000000 --- a/packages/node/src/migrations/update-16-3-1/update-webpack-executor.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -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-3-1/update-webpack-executor.ts b/packages/node/src/migrations/update-16-3-1/update-webpack-executor.ts deleted file mode 100644 index faf23d5e30..0000000000 --- a/packages/node/src/migrations/update-16-3-1/update-webpack-executor.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; - -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); - }; - - forEachExecutorOptions(tree, '@nx/node:webpack', migrateProject); - forEachExecutorOptions(tree, '@nrwl/node:webpack', migrateProject); - - await formatFiles(tree); -} diff --git a/packages/node/src/migrations/update-16-4-0/replace-node-executor.spec.ts b/packages/node/src/migrations/update-16-4-0/replace-node-executor.spec.ts deleted file mode 100644 index 3e947bf22c..0000000000 --- a/packages/node/src/migrations/update-16-4-0/replace-node-executor.spec.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { addProjectConfiguration, readProjectConfiguration } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import update from './replace-node-executor'; - -describe('Migration: replace @nx/node:node executor', () => { - it(`should replace @nx/node:node executor with @nx/js:node`, async () => { - let tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - - addProjectConfiguration(tree, 'myapp', { - root: 'apps/myapp', - sourceRoot: 'apps/myapp/src', - projectType: 'application', - targets: { - foo: { - executor: '@nx/node:node', - options: {}, - }, - bar: { - executor: '@nx/node:node', - options: {}, - }, - }, - }); - - addProjectConfiguration(tree, 'myapp2', { - root: 'apps/myapp2', - sourceRoot: 'apps/myapp2/src', - projectType: 'application', - targets: { - foo: { - executor: '@nx/node:node', - options: {}, - }, - bar: { - executor: '@nx/node:node', - 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/js:node', - options: {}, - }, - bar: { - executor: '@nx/js:node', - options: {}, - }, - }, - }); - - expect(readProjectConfiguration(tree, 'myapp2')).toEqual({ - $schema: '../../node_modules/nx/schemas/project-schema.json', - name: 'myapp2', - root: 'apps/myapp2', - sourceRoot: 'apps/myapp2/src', - projectType: 'application', - targets: { - foo: { - executor: '@nx/js:node', - options: {}, - }, - bar: { - executor: '@nx/js:node', - options: {}, - }, - }, - }); - }); -}); diff --git a/packages/node/src/migrations/update-16-4-0/replace-node-executor.ts b/packages/node/src/migrations/update-16-4-0/replace-node-executor.ts deleted file mode 100644 index 950413dea1..0000000000 --- a/packages/node/src/migrations/update-16-4-0/replace-node-executor.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; - -export default async function update(tree: Tree) { - const migrateProject = (_options, projectName, targetName) => { - const projectConfig = readProjectConfiguration(tree, projectName); - projectConfig.targets[targetName].executor = '@nx/js:node'; - updateProjectConfiguration(tree, projectName, projectConfig); - }; - - forEachExecutorOptions(tree, '@nx/node:node', migrateProject); - - await formatFiles(tree); -} diff --git a/packages/nx/migrations.json b/packages/nx/migrations.json index 1a495445ce..465e2c5a72 100644 --- a/packages/nx/migrations.json +++ b/packages/nx/migrations.json @@ -1,42 +1,5 @@ { "generators": { - "16.0.0-remove-nrwl-cli": { - "cli": "nx", - "version": "16.0.0-beta.0", - "description": "Remove @nrwl/cli.", - "implementation": "./src/migrations/update-16-0-0/remove-nrwl-cli" - }, - "16.0.0-tokens-for-depends-on": { - "cli": "nx", - "version": "16.0.0-beta.9", - "description": "Replace `dependsOn.projects` and `inputs` definitions with new configuration format.", - "implementation": "./src/migrations/update-16-0-0/update-depends-on-to-tokens" - }, - "16.0.0-update-nx-cloud-runner": { - "cli": "nx", - "version": "16.0.0-beta.0", - "description": "Replace @nrwl/nx-cloud with nx-cloud", - "implementation": "./src/migrations/update-16-0-0/update-nx-cloud-runner" - }, - "16.2.0-remove-output-path-from-run-commands": { - "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Remove outputPath from run commands", - "implementation": "./src/migrations/update-16-2-0/remove-run-commands-output-path" - }, - "16.6.0-prefix-outputs": { - "cli": "nx", - "version": "16.6.0-beta.6", - "description": "Prefix outputs with {workspaceRoot}/{projectRoot} if needed", - "implementation": "./src/migrations/update-15-0-0/prefix-outputs" - }, - "16.8.0-escape-dollar-sign-env": { - "cli": "nx", - "version": "16.8.0-beta.3", - "description": "Escape $ in env variables", - "implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables", - "x-repair-skip": true - }, "17.0.0-move-cache-directory": { "cli": "nx", "version": "17.0.0-beta.1", diff --git a/packages/nx/src/internal-testing-utils/assert-valid-migrations.ts b/packages/nx/src/internal-testing-utils/assert-valid-migrations.ts index 4902ca6a04..950822d3f8 100644 --- a/packages/nx/src/internal-testing-utils/assert-valid-migrations.ts +++ b/packages/nx/src/internal-testing-utils/assert-valid-migrations.ts @@ -2,17 +2,26 @@ import { MigrationsJson, MigrationsJsonEntry } from '../config/misc-interfaces'; import * as path from 'path'; export function assertValidMigrationPaths(json: MigrationsJson, root: string) { + let hasTests = false; Object.entries(json.generators).forEach(([generator, m]) => { - it(`should have valid path generator: ${generator}`, () => { + hasTests = true; + it(`should have valid path generator: ${generator}`, () => { validateMigration(m, root); }); }); Object.entries(json.schematics ?? {}).forEach(([schematic, m]) => { + hasTests = true; it(`should have valid path schematic: ${schematic}`, () => { validateMigration(m, root); }); }); + + if (!hasTests) { + it('should pass without migrations', () => { + // no-op + }); + } } function validateMigration(m: MigrationsJsonEntry, root: string) { diff --git a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts deleted file mode 100644 index dad298a7a3..0000000000 --- a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '../../generators/testing-utils/create-tree-with-empty-workspace'; -import type { Tree } from '../../generators/tree'; -import { - addProjectConfiguration, - readNxJson, - readProjectConfiguration, - updateNxJson, -} from '../../generators/utils/project-configuration'; -import { readJson, writeJson } from '../../generators/utils/json'; -import prefixOutputs from './prefix-outputs'; -import { validateOutputs } from '../../tasks-runner/utils'; - -describe('15.0.0 migration (prefix-outputs)', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should prefix project outputs', async () => { - addProjectConfiguration(tree, 'proj', { - root: 'proj', - targets: { - build: { - executor: 'nx:run-commands', - outputs: [ - 'dist', - 'dist/{projectRoot}', - 'dist/{projectRoot}/**/*.js', - 'proj/coverage', - './test-results', - '{projectRoot}/build', - '{options.outputDirectory}', - ], - options: {}, - }, - }, - }); - - await prefixOutputs(tree); - - const updated = readProjectConfiguration(tree, 'proj'); - - expect(updated.targets.build.outputs).toEqual([ - '{workspaceRoot}/dist', - '{workspaceRoot}/dist/{projectRoot}', - '{workspaceRoot}/dist/{projectRoot}/**/*.js', - '{projectRoot}/coverage', - '{projectRoot}/test-results', - '{projectRoot}/build', - '{options.outputDirectory}', - ]); - - expect(() => validateOutputs(updated.targets.build.outputs)).not.toThrow(); - }); - - it('should prefix target default outputs', async () => { - const nxJson = readNxJson(tree); - updateNxJson(tree, { - ...nxJson, - targetDefaults: { - build: { - outputs: ['dist', '{projectRoot}/build', '{options.outputPath}'], - }, - }, - }); - - await prefixOutputs(tree); - - const updated = readNxJson(tree); - - expect(updated.targetDefaults).toMatchInlineSnapshot(` - { - "build": { - "outputs": [ - "{workspaceRoot}/dist", - "{projectRoot}/build", - "{options.outputPath}", - ], - }, - } - `); - }); - - it('should migrate package.json projects', async () => { - writeJson(tree, 'proj/package.json', { - name: 'proj', - scripts: { - build: 'echo', - }, - nx: { - targets: { - build: { - outputs: ['dist/proj', 'proj/build'], - }, - }, - }, - }); - tree.delete('workspace.json'); - - await prefixOutputs(tree); - - expect(readJson(tree, 'proj/package.json').nx.targets.build).toEqual({ - outputs: ['{workspaceRoot}/dist/proj', '{projectRoot}/build'], - }); - }); - - it('should not error for package.json projects', async () => { - writeJson(tree, 'proj/package.json', { - name: 'proj', - scripts: { - build: 'echo', - }, - }); - tree.delete('workspace.json'); - - await prefixOutputs(tree); - }); - - it('should handle negated outputs', async () => { - const nxJson = readNxJson(tree); - updateNxJson(tree, { - ...nxJson, - targetDefaults: { - build: { - outputs: ['!dist', '{projectRoot}/build', '{options.outputPath}'], - }, - }, - }); - - await prefixOutputs(tree); - - const updated = readNxJson(tree); - - expect(updated.targetDefaults).toMatchInlineSnapshot(` - { - "build": { - "outputs": [ - "!{workspaceRoot}/dist", - "{projectRoot}/build", - "{options.outputPath}", - ], - }, - } - `); - }); -}); - -describe('15.0.0 migration (prefix-outputs) (v1)', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should prefix project outputs', async () => { - addProjectConfiguration(tree, 'proj', { - root: 'proj', - targets: { - build: { - executor: 'nx:run-commands', - outputs: [ - 'dist', - 'dist/{projectRoot}', - 'dist/{projectRoot}/**/*.js', - 'proj/coverage', - './test-results', - '{projectRoot}/build', - '{options.outputDirectory}', - ], - options: {}, - }, - }, - }); - - await prefixOutputs(tree); - - const updated = readProjectConfiguration(tree, 'proj'); - - expect(updated.targets.build.outputs).toEqual([ - '{workspaceRoot}/dist', - '{workspaceRoot}/dist/{projectRoot}', - '{workspaceRoot}/dist/{projectRoot}/**/*.js', - '{projectRoot}/coverage', - '{projectRoot}/test-results', - '{projectRoot}/build', - '{options.outputDirectory}', - ]); - - expect(() => validateOutputs(updated.targets.build.outputs)).not.toThrow(); - }); -}); diff --git a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts deleted file mode 100644 index 3c5f281670..0000000000 --- a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Tree } from '../../generators/tree'; -import { formatChangedFilesWithPrettierIfAvailable } from '../../generators/internal-utils/format-changed-files-with-prettier-if-available'; -import { - getProjects, - updateProjectConfiguration, -} from '../../generators/utils/project-configuration'; -import { readNxJson, updateNxJson } from '../../generators/utils/nx-json'; -import { joinPathFragments } from '../../utils/path'; -import { join } from 'path'; -import { - transformLegacyOutputs, - validateOutputs, -} from '../../tasks-runner/utils'; -import { updateJson } from '../../generators/utils/json'; -import { PackageJson } from '../../utils/package-json'; - -export default async function (tree: Tree) { - // If the workspace doesn't have a nx.json, don't make any changes - if (!tree.exists('nx.json')) { - return; - } - - const nxJson = readNxJson(tree); - - for (const [projectName, project] of getProjects(tree)) { - for (const [_, target] of Object.entries(project.targets ?? {})) { - if (!target.outputs) { - continue; - } - - target.outputs = transformLegacyOutputs(project.root, target.outputs); - } - try { - updateProjectConfiguration(tree, projectName, project); - } catch { - if (tree.exists(join(project.root, 'package.json'))) { - updateJson( - tree, - join(project.root, 'package.json'), - (json) => { - for (const target of Object.values(json.nx?.targets ?? {})) { - if (target.outputs) { - target.outputs = transformLegacyOutputs( - project.root, - target.outputs - ); - } - } - - return json; - } - ); - } - } - } - - if (nxJson.targetDefaults) { - for (const [_, target] of Object.entries(nxJson.targetDefaults)) { - if (!target.outputs) { - continue; - } - target.outputs = transformLegacyOutputs('{projectRoot}', target.outputs); - } - - updateNxJson(tree, nxJson); - } - - await formatChangedFilesWithPrettierIfAvailable(tree); -} diff --git a/packages/nx/src/migrations/update-16-0-0/remove-nrwl-cli.ts b/packages/nx/src/migrations/update-16-0-0/remove-nrwl-cli.ts deleted file mode 100644 index f13430e58e..0000000000 --- a/packages/nx/src/migrations/update-16-0-0/remove-nrwl-cli.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Tree } from '../../generators/tree'; -import { formatChangedFilesWithPrettierIfAvailable } from '../../generators/internal-utils/format-changed-files-with-prettier-if-available'; -import { updateJson } from '../../generators/utils/json'; - -export default async function (tree: Tree) { - updateJson(tree, 'package.json', (json) => { - for (const deps of [json.dependencies, json.devDependencies]) { - if (deps) { - delete deps['@nrwl/cli']; - } - } - - return json; - }); - - await formatChangedFilesWithPrettierIfAvailable(tree); -} diff --git a/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.spec.ts b/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.spec.ts deleted file mode 100644 index fed29c7aa5..0000000000 --- a/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.spec.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { - addProjectConfiguration, - readNxJson, - readProjectConfiguration, -} from '../../generators/utils/project-configuration'; - -import update from './update-depends-on-to-tokens'; -import { updateJson, writeJson } from '../../generators/utils/json'; -import { createTreeWithEmptyWorkspace } from '../../generators/testing-utils/create-tree-with-empty-workspace'; -import { assertRunsAgainstNxRepo } from '../../internal-testing-utils/run-migration-against-this-workspace'; - -describe('update-depends-on-to-tokens', () => { - it('should update nx.json', async () => { - const tree = createTreeWithEmptyWorkspace(); - updateJson(tree, 'nx.json', (json) => { - json.targetDefaults = { - build: { - dependsOn: [ - { - projects: 'self', - }, - ], - inputs: [{ projects: 'self', input: 'someInput' }], - }, - test: { - dependsOn: [ - { - projects: 'dependencies', - }, - ], - inputs: [{ projects: 'dependencies', input: 'someInput' }], - }, - other: { - dependsOn: ['^deps'], - }, - }; - return json; - }); - await update(tree); - const nxJson = readNxJson(tree); - const buildDependencyConfiguration = nxJson.targetDefaults.build - .dependsOn[0] as any; - const testDependencyConfiguration = nxJson.targetDefaults.test - .dependsOn[0] as any; - const buildInputConfiguration = nxJson.targetDefaults.build - .inputs[0] as any; - const testInputConfiguration = nxJson.targetDefaults.test.inputs[0] as any; - expect(buildDependencyConfiguration.projects).not.toBeDefined(); - expect(buildDependencyConfiguration.dependencies).not.toBeDefined(); - expect(buildInputConfiguration.projects).not.toBeDefined(); - expect(buildInputConfiguration.dependencies).not.toBeDefined(); - expect(testInputConfiguration.projects).not.toBeDefined(); - expect(testInputConfiguration.dependencies).toEqual(true); - expect(testDependencyConfiguration.projects).not.toBeDefined(); - expect(testDependencyConfiguration.dependencies).toEqual(true); - expect(nxJson.targetDefaults.other.dependsOn).toEqual(['^deps']); - }); - - it('should update project configurations', async () => { - const tree = createTreeWithEmptyWorkspace(); - addProjectConfiguration(tree, 'proj1', { - root: 'proj1', - targets: { - build: { - dependsOn: [ - { - projects: 'self', - target: 'build', - }, - ], - inputs: [{ projects: 'self', input: 'someInput' }], - }, - test: { - dependsOn: [ - { - projects: 'dependencies', - target: 'test', - }, - ], - inputs: [{ projects: 'dependencies', input: 'someInput' }], - }, - other: { - dependsOn: ['^deps'], - }, - }, - }); - await update(tree); - const project = readProjectConfiguration(tree, 'proj1'); - const buildDependencyConfiguration = project.targets.build - .dependsOn[0] as any; - const testDependencyConfiguration = project.targets.test - .dependsOn[0] as any; - const buildInputConfiguration = project.targets.build.inputs[0] as any; - const testInputConfiguration = project.targets.test.inputs[0] as any; - expect(buildDependencyConfiguration.projects).not.toBeDefined(); - expect(buildDependencyConfiguration.dependencies).not.toBeDefined(); - expect(buildInputConfiguration.projects).not.toBeDefined(); - expect(buildInputConfiguration.dependencies).not.toBeDefined(); - expect(testDependencyConfiguration.projects).not.toBeDefined(); - expect(testDependencyConfiguration.dependencies).toEqual(true); - expect(testInputConfiguration.projects).not.toBeDefined(); - expect(testInputConfiguration.dependencies).toEqual(true); - expect(project.targets.other.dependsOn).toEqual(['^deps']); - expect(project.targets.other.inputs).not.toBeDefined(); - }); - - it('should not throw on nulls', async () => { - const tree = createTreeWithEmptyWorkspace(); - addProjectConfiguration(tree, 'proj1', { - root: 'proj1', - }); - addProjectConfiguration(tree, 'proj2', { - root: 'proj2', - targets: { - build: {}, - }, - }); - writeJson(tree, 'nx.json', {}); - let promise = update(tree); - await expect(promise).resolves.toBeUndefined(); - writeJson(tree, 'nx.json', { - targetDefaults: { - build: {}, - }, - }); - promise = update(tree); - await expect(promise).resolves.toBeUndefined(); - }); - - assertRunsAgainstNxRepo(update); -}); diff --git a/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.ts b/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.ts deleted file mode 100644 index 6fabe17983..0000000000 --- a/packages/nx/src/migrations/update-16-0-0/update-depends-on-to-tokens.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { - getProjects, - readNxJson, - updateNxJson, - updateProjectConfiguration, -} from '../../generators/utils/project-configuration'; -import { Tree } from '../../generators/tree'; -import { formatChangedFilesWithPrettierIfAvailable } from '../../generators/internal-utils/format-changed-files-with-prettier-if-available'; - -export default async function (tree: Tree) { - updateDependsOnAndInputsInsideNxJson(tree); - - const projectsConfigurations = getProjects(tree); - for (const [projectName, projectConfiguration] of projectsConfigurations) { - let projectChanged = false; - for (const [targetName, targetConfiguration] of Object.entries( - projectConfiguration.targets ?? {} - )) { - for (const dependency of targetConfiguration.dependsOn ?? []) { - if (typeof dependency !== 'string') { - if ( - dependency.projects === 'self' || - dependency.projects === '{self}' - ) { - delete dependency.projects; - projectChanged = true; - } else if ( - dependency.projects === 'dependencies' || - dependency.projects === '{dependencies}' - ) { - delete dependency.projects; - dependency.dependencies = true; - projectChanged = true; - } - } - } - for (let i = 0; i < targetConfiguration.inputs?.length ?? 0; i++) { - const input = targetConfiguration.inputs[i]; - if (typeof input !== 'string') { - if ( - 'projects' in input && - (input.projects === 'self' || input.projects === '{self}') - ) { - delete input.projects; - projectChanged = true; - } else if ( - 'projects' in input && - (input.projects === 'dependencies' || - input.projects === '{dependencies}') - ) { - delete input.projects; - targetConfiguration.inputs[i] = { - ...input, - dependencies: true, - }; - projectChanged = true; - } - } - } - } - if (projectChanged) { - updateProjectConfiguration(tree, projectName, projectConfiguration); - } - } - - await formatChangedFilesWithPrettierIfAvailable(tree); -} -function updateDependsOnAndInputsInsideNxJson(tree: Tree) { - const nxJson = readNxJson(tree); - let nxJsonChanged = false; - for (const [target, defaults] of Object.entries( - nxJson?.targetDefaults ?? {} - )) { - for (const dependency of defaults.dependsOn ?? []) { - if (typeof dependency !== 'string') { - if ( - dependency.projects === 'self' || - dependency.projects === '{self}' - ) { - delete dependency.projects; - nxJsonChanged = true; - } else if ( - dependency.projects === 'dependencies' || - dependency.projects === '{dependencies}' - ) { - delete dependency.projects; - dependency.dependencies = true; - nxJsonChanged = true; - } - } - } - for (let i = 0; i < defaults.inputs?.length ?? 0; i++) { - const input = defaults.inputs[i]; - if (typeof input !== 'string') { - if ( - 'projects' in input && - (input.projects === 'self' || input.projects === '{self}') - ) { - delete input.projects; - nxJsonChanged = true; - } else if ( - 'projects' in input && - (input.projects === 'dependencies' || - input.projects === '{dependencies}') - ) { - delete input.projects; - defaults.inputs[i] = { - ...input, - dependencies: true, - }; - nxJsonChanged = true; - } - } - } - } - if (nxJsonChanged) { - updateNxJson(tree, nxJson); - } -} diff --git a/packages/nx/src/migrations/update-16-0-0/update-nx-cloud-runner.ts b/packages/nx/src/migrations/update-16-0-0/update-nx-cloud-runner.ts deleted file mode 100644 index 23b663ee40..0000000000 --- a/packages/nx/src/migrations/update-16-0-0/update-nx-cloud-runner.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - readNxJson, - updateNxJson, -} from '../../generators/utils/project-configuration'; -import { Tree } from '../../generators/tree'; -import { updateJson } from '../../generators/utils/json'; -import { formatChangedFilesWithPrettierIfAvailable } from '../../generators/internal-utils/format-changed-files-with-prettier-if-available'; - -export default async function (tree: Tree) { - updateJson(tree, 'package.json', (json) => { - if (json.dependencies && json.dependencies['@nrwl/nx-cloud']) { - json.dependencies['nx-cloud'] = json.dependencies['@nrwl/nx-cloud']; - delete json.dependencies['@nrwl/nx-cloud']; - } - - if (json.devDependencies && json.devDependencies['@nrwl/nx-cloud']) { - json.devDependencies['nx-cloud'] = json.devDependencies['@nrwl/nx-cloud']; - delete json.devDependencies['@nrwl/nx-cloud']; - } - - return json; - }); - - const nxJson = readNxJson(tree); - if (!nxJson) return; - for (let opts of Object.values(nxJson.tasksRunnerOptions ?? {})) { - if (opts.runner === '@nrwl/nx-cloud') { - opts.runner = 'nx-cloud'; - } - } - updateNxJson(tree, nxJson); - - await formatChangedFilesWithPrettierIfAvailable(tree); -} diff --git a/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.spec.ts b/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.spec.ts deleted file mode 100644 index f0d48d98fe..0000000000 --- a/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { TargetConfiguration } from '../../config/workspace-json-project-json'; -import { createTreeWithEmptyWorkspace } from '../../generators/testing-utils/create-tree-with-empty-workspace'; -import { readJson, writeJson } from '../../generators/utils/json'; -import { - addProjectConfiguration, - readProjectConfiguration, -} from '../../generators/utils/project-configuration'; -import { assertRunsAgainstNxRepo } from '../../internal-testing-utils/run-migration-against-this-workspace'; -import removeRunCommandsOutputPath from './remove-run-commands-output-path'; - -describe('removeRunCommandsOutputPath', () => { - it('should migrate target options correctly', () => { - const tree = createTreeWithEmptyWorkspace(); - const startingTargets: Record = { - build: { - executor: 'nx:run-commands', - outputs: ['{options.outputPath}'], - options: { - outputPath: 'dist/apps/my-app', - commands: [], - }, - }, - other: { - executor: 'nx:run-script', - options: { - script: 'start', - }, - }, - }; - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - targets: startingTargets, - }); - removeRunCommandsOutputPath(tree); - const migratedTargets = readProjectConfiguration(tree, 'my-app').targets; - expect(migratedTargets.build).not.toEqual(startingTargets.build); - expect(migratedTargets.build).toEqual({ - executor: 'nx:run-commands', - outputs: ['{workspaceRoot}/dist/apps/my-app'], - options: { - commands: [], - }, - }); - expect(migratedTargets.other).toEqual(startingTargets.other); - }); - - it('should handle null options correctly', () => { - const tree = createTreeWithEmptyWorkspace(); - const startingTargets: Record = { - build: { - executor: 'nx:run-commands', - outputs: ['dist/some/path'], - }, - }; - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - targets: startingTargets, - }); - expect(() => removeRunCommandsOutputPath(tree)).not.toThrow(); - const migratedTargets = readProjectConfiguration(tree, 'my-app').targets; - expect(migratedTargets.build).toEqual(startingTargets.build); - expect(migratedTargets.other).toEqual(startingTargets.other); - }); - - it('should migrate target defaults correctly', () => { - const tree = createTreeWithEmptyWorkspace(); - const startingTargetDefaults: Record = { - build: { - executor: 'nx:run-commands', - outputs: ['{options.outputPath}'], - options: { - outputPath: 'dist/apps/my-app', - commands: [], - }, - }, - other: { - executor: 'nx:run-script', - options: { - script: 'start', - }, - }, - }; - writeJson(tree, 'nx.json', { - targetDefaults: startingTargetDefaults, - }); - removeRunCommandsOutputPath(tree); - const migratedTargetDefaults = readJson(tree, 'nx.json').targetDefaults; - expect(migratedTargetDefaults.build).not.toEqual( - startingTargetDefaults.build - ); - expect(migratedTargetDefaults.build).toEqual({ - executor: 'nx:run-commands', - outputs: ['{workspaceRoot}/dist/apps/my-app'], - options: { - commands: [], - }, - }); - expect(migratedTargetDefaults.other).toEqual(startingTargetDefaults.other); - }); - - assertRunsAgainstNxRepo(removeRunCommandsOutputPath); -}); diff --git a/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.ts b/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.ts deleted file mode 100644 index c2dc9d5c24..0000000000 --- a/packages/nx/src/migrations/update-16-2-0/remove-run-commands-output-path.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { joinPathFragments } from '../../utils/path'; -import { NxJsonConfiguration } from '../../config/nx-json'; -import { TargetConfiguration } from '../../config/workspace-json-project-json'; -import { formatChangedFilesWithPrettierIfAvailable } from '../../generators/internal-utils/format-changed-files-with-prettier-if-available'; -import { Tree } from '../../generators/tree'; -import { updateJson } from '../../generators/utils/json'; -import { - getProjects, - updateProjectConfiguration, -} from '../../generators/utils/project-configuration'; - -export default async function removeRunCommandsOutputPath(tree: Tree) { - for (const [project, configuration] of getProjects(tree).entries()) { - const targets = configuration.targets ?? {}; - let changed = false; - for (const [, target] of Object.entries(targets)) { - changed ||= updateTargetBlock(target); - } - if (changed) { - updateProjectConfiguration(tree, project, configuration); - } - } - if (tree.exists('nx.json')) { - updateJson(tree, 'nx.json', (json) => { - for (const [, target] of Object.entries(json.targetDefaults ?? {})) { - updateTargetBlock(target); - } - return json; - }); - } - await formatChangedFilesWithPrettierIfAvailable(tree); -} - -function updateTargetBlock(target: TargetConfiguration): boolean { - let changed = false; - if (target.executor === 'nx:run-commands' && target.options?.outputPath) { - changed = true; - const outputs = new Set(target.outputs ?? []); - outputs.delete('{options.outputPath}'); - const newOutputs = Array.isArray(target.options.outputPath) - ? target.options.outputPath.map((p) => - joinPathFragments('{workspaceRoot}', p) - ) - : [joinPathFragments('{workspaceRoot}', target.options.outputPath)]; - for (const outputPath of newOutputs) { - outputs.add(outputPath); - } - delete target.options.outputPath; - target.outputs = Array.from(outputs); - } - return changed; -} diff --git a/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.spec.ts b/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.spec.ts deleted file mode 100644 index dc262102d1..0000000000 --- a/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.spec.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '../../generators/testing-utils/create-tree-with-empty-workspace'; -import { addProjectConfiguration } from '../../generators/utils/project-configuration'; -import escapeDollarSignEnvVariables from './escape-dollar-sign-env-variables'; - -describe('escape $ in env variables', () => { - let tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should escape $ in env variables in .env file', () => { - tree.write( - '.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - escapeDollarSignEnvVariables(tree); - expect(tree.read('.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - }); - - it('should escape $ env variables in .env file under project', () => { - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - }); - addProjectConfiguration(tree, 'my-app2', { - root: 'apps/my-app2', - }); - tree.write( - 'apps/my-app/.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - tree.write( - 'apps/my-app2/.env', - `dollar=$ -NX_SOME_VAR=$DEF` - ); - escapeDollarSignEnvVariables(tree); - expect(tree.read('apps/my-app/.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - expect(tree.read('apps/my-app2/.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$DEF`); - }); - - it('should escape $ env variables in .env for target', () => { - tree.write('.env', 'dollar=$'); - tree.write('.env.build', 'dollar=$'); - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - targets: { - build: { - executor: '@nx/node:build', - configurations: { - production: {}, - }, - }, - }, - }); - tree.write( - 'apps/my-app/.build.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - tree.write( - 'apps/my-app/.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - escapeDollarSignEnvVariables(tree); - expect(tree.read('.env', 'utf-8')).toEqual(`dollar=\\$`); - expect(tree.read('apps/my-app/.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - expect(tree.read('apps/my-app/.build.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - }); - - it('should escape $ env variables in .env for configuration', () => { - tree.write('.env', 'dollar=$'); - tree.write('.env.production', 'dollar=$'); - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - targets: { - build: { - executor: '@nx/node:build', - configurations: { - production: {}, - }, - }, - }, - }); - tree.write( - 'apps/my-app/.production.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - tree.write( - 'apps/my-app/.build.production.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - tree.write( - 'apps/my-app/.env', - `dollar=$ -NX_SOME_VAR=$ABC` - ); - escapeDollarSignEnvVariables(tree); - expect(tree.read('.env', 'utf-8')).toEqual(`dollar=\\$`); - expect(tree.read('apps/my-app/.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - expect(tree.read('apps/my-app/.build.production.env', 'utf-8')) - .toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - expect(tree.read('apps/my-app/.production.env', 'utf-8')) - .toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - }); - - it('should not escape $ env variables if it is already escaped', () => { - addProjectConfiguration(tree, 'my-app', { - root: 'apps/my-app', - }); - tree.write( - 'apps/my-app/.env', - `dollar=\\$ -NX_SOME_VAR=\\$ABC` - ); - escapeDollarSignEnvVariables(tree); - expect(tree.read('apps/my-app/.env', 'utf-8')).toEqual(`dollar=\\$ -NX_SOME_VAR=\\$ABC`); - }); -}); diff --git a/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.ts b/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.ts deleted file mode 100644 index 279c5605d4..0000000000 --- a/packages/nx/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { logger } from '../../utils/logger'; -import { Tree } from '../../generators/tree'; -import { getProjects } from '../../generators/utils/project-configuration'; - -/** - * This function escapes dollar sign in env variables - * It will go through: - * - '.env', '.local.env', '.env.local' - * - .env.[target-name], .[target-name].env - * - .env.[target-name].[configuration-name], .[target-name].[configuration-name].env - * - .env.[configuration-name], .[configuration-name].env - * at each project root and workspace root - * @param tree - */ -export default function escapeDollarSignEnvVariables(tree: Tree) { - const envFiles = ['.env', '.local.env', '.env.local']; - for (const [_, configuration] of getProjects(tree).entries()) { - envFiles.push( - `${configuration.root}/.env`, - `${configuration.root}/.local.env`, - `${configuration.root}/.env.local` - ); - for (const targetName in configuration.targets) { - const task = configuration.targets[targetName]; - envFiles.push( - `.env.${targetName}`, - `.${targetName}.env`, - `${configuration.root}/.env.${targetName}`, - `${configuration.root}/.${targetName}.env` - ); - - if (task.configurations) { - for (const configurationName in task.configurations) { - envFiles.push( - `.env.${targetName}.${configurationName}`, - `.${targetName}.${configurationName}.env`, - `.env.${configurationName}`, - `.${configurationName}.env`, - `${configuration.root}/.env.${targetName}.${configurationName}`, - `${configuration.root}/.${targetName}.${configurationName}.env`, - `${configuration.root}/.env.${configurationName}`, - `${configuration.root}/.${configurationName}.env` - ); - } - } - } - } - for (const envFile of new Set(envFiles)) { - parseEnvFile(tree, envFile); - } -} - -/** - * This function parse the env file and escape dollar sign - * @param tree - * @param envFilePath - * @returns - */ -function parseEnvFile(tree: Tree, envFilePath: string) { - if (!tree.exists(envFilePath)) { - return; - } - - let envFileContent = tree.read(envFilePath, 'utf-8'); - if (!envFileContent) { - // envFileContent is null if we fail to read the file for any reason - // e.g. the file is not utf-8 encoded - logger.info( - `Unable to update ${envFilePath}. Nx interpolates environment variables in the form of $VAR_NAME. To escape the dollar sign, use \\$VAR_NAME.` - ); - return; - } - - envFileContent = envFileContent - .split('\n') - .map((line) => { - line = line.trim(); - - if (!line || !line.includes('$')) { - return line; - } - - const declarations = line.split('='); - if (declarations[1].includes('$') && !declarations[1].includes(`\\$`)) { - declarations[1] = declarations[1].replace('$', `\\$`); - line = declarations.join('='); - } - return line; - }) - .join('\n'); - tree.write(envFilePath, envFileContent); -} diff --git a/packages/plugin/migrations.json b/packages/plugin/migrations.json index 38263a21f0..65a4590b7c 100644 --- a/packages/plugin/migrations.json +++ b/packages/plugin/migrations.json @@ -1,22 +1,3 @@ { - "generators": { - "update-remove-cli-prop": { - "version": "16.0.0-beta.1", - "cli": "nx", - "description": "Removes CLI property within schema.json files and moves generators and schematics to the proper root node in migrations.json", - "factory": "./src/migrations/update-16-0-0/cli-in-schema-json" - }, - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/nx-plugin with @nx/plugin", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-2-0-replace-e2e-executor": { - "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Replace @nx/plugin:e2e with @nx/jest", - "implementation": "./src/migrations/update-16-2-0/replace-e2e-executor" - } - } + "generators": {} } diff --git a/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index d4fe58f7db..0000000000 --- a/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { assertRunsAgainstNxRepo } from '@nx/devkit/internal-testing-utils'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/nx-plugin'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/nx-plugin', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/nx-plugin'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/nx-plugin'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/plugin', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/plugin'] ?? - packageJson.dependencies['@nx/plugin']; - - expect(newDependencyVersion).toBeDefined(); - }); - - assertRunsAgainstNxRepo(replacePackage); -}); diff --git a/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 2ea9737e96..0000000000 --- a/packages/plugin/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/nx-plugin', '@nx/plugin'); - - await formatFiles(tree); -} diff --git a/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.spec.ts b/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.spec.ts deleted file mode 100644 index e3f821bb3d..0000000000 --- a/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.spec.ts +++ /dev/null @@ -1,281 +0,0 @@ -import 'nx/src/internal-testing-utils/mock-project-graph'; - -import { - ExecutorsJson, - GeneratorsJson, - joinPathFragments, - MigrationsJson, - readJson, - readProjectConfiguration, - Tree, - updateJson, - writeJson, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { Linter } from '@nx/eslint'; -import { assertRunsAgainstNxRepo } from '@nx/devkit/internal-testing-utils'; -import { PackageJson } from 'nx/src/utils/package-json'; -import executorGenerator from '../../generators/executor/executor'; -import generatorGenerator from '../../generators/generator/generator'; -import pluginGenerator from '../../generators/plugin/plugin'; -import { updateCliPropsForPlugins } from './cli-in-schema-json'; - -describe('updateCliPropsForPlugins', () => { - let originalEnv: string; - beforeEach(() => { - originalEnv = process.env.NX_ADD_PLUGINS; - process.env.NX_ADD_PLUGINS = 'false'; - }); - - afterAll(() => { - process.env.NX_ADD_PLUGINS = originalEnv; - }); - - it('should move non-nx generators to schematics for migrations.json', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root } = await createPlugin(tree); - updatePluginPackageJson(tree, { - 'nx-migrations': 'migrations.json', - }); - writeJson( - tree, - joinPathFragments(root, 'migrations.json'), - { - version: '1.0.0', - generators: { - 'migration-1': { - version: '1.0.0', - description: 'My Plugin 1', - factory: './migrations/my-plugin-1', - }, - }, - } - ); - await updateCliPropsForPlugins(tree); - const updated = readJson( - tree, - joinPathFragments(root, 'migrations.json') - ); - expect(updated.generators).not.toHaveProperty('migration-1'); - expect(updated.schematics).toHaveProperty('migration-1'); - }); - - it('should move nx generators to generators for migrations.json', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root } = await createPlugin(tree); - updatePluginPackageJson(tree, { - 'nx-migrations': 'migrations.json', - }); - writeJson( - tree, - joinPathFragments(root, 'migrations.json'), - { - version: '1.0.0', - schematics: { - 'migration-1': { - version: '1.0.0', - description: 'My Plugin 1', - factory: './migrations/my-plugin-1', - cli: 'nx', - }, - }, - } - ); - await updateCliPropsForPlugins(tree); - const updated = readJson( - tree, - joinPathFragments(root, 'migrations.json') - ); - expect(updated.schematics).not.toHaveProperty('migration-1'); - expect(updated.generators).toHaveProperty('migration-1'); - }); - - it('should move both nx generators to generators and non-nx schematics to schematics for migrations.json', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root } = await createPlugin(tree); - updatePluginPackageJson(tree, { - 'nx-migrations': 'migrations.json', - }); - writeJson( - tree, - joinPathFragments(root, 'migrations.json'), - { - version: '1.0.0', - schematics: { - 'migration-1': { - version: '1.0.0', - description: 'My Plugin 1', - factory: './migrations/my-plugin-1', - cli: 'nx', - }, - 'migration-2': { - version: '1.0.0', - description: 'My Plugin 2', - factory: './migrations/my-plugin-2', - }, - }, - generators: { - 'migration-3': { - version: '1.0.0', - description: 'My Plugin 3', - factory: './migrations/my-plugin-3', - cli: 'nx', - }, - 'migration-4': { - version: '1.0.0', - description: 'My Plugin 4', - factory: './migrations/my-plugin-4', - }, - }, - } - ); - await updateCliPropsForPlugins(tree); - const updated = readJson( - tree, - joinPathFragments(root, 'migrations.json') - ); - expect(updated.schematics).not.toHaveProperty('migration-1'); - expect(updated.generators).toHaveProperty('migration-1'); - expect(updated.schematics).toHaveProperty('migration-2'); - expect(updated.generators).not.toHaveProperty('migration-2'); - expect(updated.schematics).not.toHaveProperty('migration-3'); - expect(updated.generators).toHaveProperty('migration-3'); - expect(updated.schematics).toHaveProperty('migration-4'); - expect(updated.generators).not.toHaveProperty('migration-4'); - }); - - it('should remove cli property from executors', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root, name } = await createPlugin(tree); - await executorGenerator(tree, { - name: 'my-executor', - path: `${name}/src/executors/my-executor`, - unitTestRunner: 'jest', - includeHasher: false, - }); - const schemaPath = joinPathFragments( - root, - 'src/executors/my-executor/schema.json' - ); - updateJson(tree, schemaPath, (schema) => { - schema.cli = 'nx'; - return schema; - }); - await updateCliPropsForPlugins(tree); - const updated = readJson(tree, schemaPath); - expect(updated).not.toHaveProperty('cli'); - }); - - it('should remove cli property from builders', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root, name } = await createPlugin(tree); - await executorGenerator(tree, { - name: 'my-executor', - path: `${name}/src/executors/my-executor`, - unitTestRunner: 'jest', - includeHasher: false, - }); - updateJson( - tree, - joinPathFragments(root, 'executors.json'), - (json) => { - json.builders = json.executors; - delete json.builders; - return json; - } - ); - const schemaPath = joinPathFragments( - root, - 'src/executors/my-executor/schema.json' - ); - updateJson(tree, schemaPath, (schema) => { - schema.cli = 'nx'; - return schema; - }); - await updateCliPropsForPlugins(tree); - const updated = readJson(tree, schemaPath); - expect(updated).not.toHaveProperty('cli'); - }); - - it('should remove cli property from generators', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root, name } = await createPlugin(tree); - await generatorGenerator(tree, { - name: 'my-generator', - path: `${name}/src/generators/my-generator`, - unitTestRunner: 'jest', - }); - const schemaPath = joinPathFragments( - root, - 'src/generators/my-generator/schema.json' - ); - updateJson(tree, schemaPath, (schema) => { - schema.cli = 'nx'; - return schema; - }); - await updateCliPropsForPlugins(tree); - const updated = readJson(tree, schemaPath); - expect(updated).not.toHaveProperty('cli'); - }); - - it('should remove cli property from schematics', async () => { - const tree = createTreeWithEmptyWorkspace(); - const { root, name } = await createPlugin(tree); - await generatorGenerator(tree, { - name: 'my-schematic', - path: `${name}/src/generators/my-schematic`, - unitTestRunner: 'jest', - }); - updateJson( - tree, - joinPathFragments(root, 'generators.json'), - (json) => { - json.schematics = json.generators; - delete json.generators; - return json; - } - ); - const schemaPath = joinPathFragments( - root, - 'src/generators/my-schematic/schema.json' - ); - updateJson(tree, schemaPath, (schema) => { - schema.cli = 'nx'; - return schema; - }); - await updateCliPropsForPlugins(tree); - const updated = readJson(tree, schemaPath); - expect(updated).not.toHaveProperty('cli'); - }); - - assertRunsAgainstNxRepo(updateCliPropsForPlugins); -}); - -async function createPlugin(tree: Tree) { - await pluginGenerator(tree, { - directory: 'my-plugin', - compiler: 'tsc', - linter: Linter.EsLint, - unitTestRunner: 'jest', - skipFormat: true, - skipLintChecks: false, - skipTsConfig: false, - }); - return readProjectConfiguration(tree, 'my-plugin'); -} - -function updatePluginPackageJson( - tree: Tree, - packageJsonProps: Partial -) { - const { root } = readProjectConfiguration(tree, 'my-plugin'); - updateJson(tree, root + '/package.json', (json) => { - const base = { json, ...packageJsonProps }; - for (const prop in base) { - if (base[prop] === null || base[prop] === undefined) { - delete json[prop]; - } - } - return base; - }); -} diff --git a/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.ts b/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.ts deleted file mode 100644 index 3364aa74e7..0000000000 --- a/packages/plugin/src/migrations/update-16-0-0/cli-in-schema-json.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { - GeneratorsJson, - getProjects, - joinPathFragments, - MigrationsJson, - ExecutorsJson, - readJson, - Tree, - updateJson, - output, -} from '@nx/devkit'; -import { - ExecutorsJsonEntry, - GeneratorsJsonEntry, -} from 'nx/src/config/misc-interfaces'; -import { PackageJson, readNxMigrateConfig } from 'nx/src/utils/package-json'; -import { dirname } from 'path'; - -export function updateCliPropsForPlugins(tree: Tree) { - const projects = getProjects(tree); - for (const project of projects.values()) { - if (tree.exists(joinPathFragments(project.root, 'package.json'))) { - const packageJson: PackageJson = readJson( - tree, - joinPathFragments(project.root, 'package.json') - ); - const migrateConfig = readNxMigrateConfig(packageJson); - if (migrateConfig.migrations) { - const migrationsPath = joinPathFragments( - project.root, - migrateConfig.migrations - ); - if (tree.exists(migrationsPath)) { - updateMigrationsJsonForPlugin(tree, migrationsPath); - } else { - output.warn({ - title: `Migrations file specified for ${packageJson.name} does not exist: ${migrationsPath}`, - bodyLines: [ - 'Please ensure that migrations that use the Angular Devkit are placed inside the `schematics` property, and migrations that use the Nx Devkit are placed inside the `generators` property.', - ], - }); - } - } - if (packageJson.generators) { - const generatorsPath = joinPathFragments( - project.root, - packageJson.generators - ); - if (tree.exists(generatorsPath)) { - removeCliFromGeneratorSchemaJsonFiles(tree, generatorsPath); - } else { - output.warn({ - title: `Generators file specified for ${packageJson.name} does not exist: ${generatorsPath}`, - bodyLines: [ - "The `cli` property inside generator's `schema.json` files is no longer supported.", - ], - }); - } - } - if (packageJson.executors) { - const executorsPath = joinPathFragments( - project.root, - packageJson.executors - ); - if (tree.exists(executorsPath)) { - removeCliFromExecutorSchemaJsonFiles(tree, executorsPath); - } else { - output.warn({ - title: `Executors file specified for ${packageJson.name} does not exist: ${executorsPath}`, - bodyLines: [ - "The `cli` property inside executor's `schema.json` files is no longer supported.", - ], - }); - } - } - if (packageJson.builders) { - const buildersPath = joinPathFragments( - project.root, - packageJson.builders - ); - if (tree.exists(buildersPath)) { - removeCliFromExecutorSchemaJsonFiles(tree, buildersPath); - } else { - output.warn({ - title: `Builders file specified for ${packageJson.name} does not exist: ${buildersPath}`, - bodyLines: [ - "The `cli` property inside builder's `schema.json` files is no longer supported.", - ], - }); - } - } - if (packageJson.schematics) { - const schematicsPath = joinPathFragments( - project.root, - packageJson.schematics - ); - if (tree.exists(schematicsPath)) { - removeCliFromGeneratorSchemaJsonFiles(tree, schematicsPath); - } else { - output.warn({ - title: `Schematics file specified for ${packageJson.name} does not exist: ${schematicsPath}`, - bodyLines: [ - "The `cli` property inside schematic's `schema.json` files is no longer supported.", - ], - }); - } - } - } - } -} - -function removeCliFromExecutorSchemaJsonFiles( - tree: Tree, - collectionPath: string -) { - const collection: ExecutorsJson = readJson(tree, collectionPath); - for (const [name, entry] of Object.entries(collection.executors ?? {}).concat( - Object.entries(collection.builders ?? {}) - )) { - deleteCliPropFromSchemaFile(collectionPath, entry, tree); - } -} - -function removeCliFromGeneratorSchemaJsonFiles( - tree: Tree, - collectionPath: string -) { - const collection: GeneratorsJson = readJson(tree, collectionPath); - for (const [name, entry] of Object.entries( - collection.generators ?? {} - ).concat(Object.entries(collection.schematics ?? {}))) { - deleteCliPropFromSchemaFile(collectionPath, entry, tree); - } -} - -function updateMigrationsJsonForPlugin(tree: Tree, collectionPath: string) { - updateJson(tree, collectionPath, (json) => { - for (const migration in json.generators ?? {}) { - if (!(json.generators[migration].cli === 'nx')) { - json.schematics ??= {}; - json.schematics[migration] = json.generators[migration]; - delete json.generators[migration]; - } - } - for (const migration in json.schematics ?? {}) { - if (json.schematics[migration].cli === 'nx') { - json.generators ??= {}; - json.generators[migration] = json.schematics[migration]; - delete json.schematics[migration]; - } - } - return json; - }); -} - -export default updateCliPropsForPlugins; - -function deleteCliPropFromSchemaFile( - collectionPath: string, - entry: ExecutorsJsonEntry | GeneratorsJsonEntry, - tree: Tree -) { - if (typeof entry === 'string' || !entry.schema) { - return; - } - const schemaPath = joinPathFragments(dirname(collectionPath), entry.schema); - if (tree.exists(schemaPath)) { - updateJson(tree, schemaPath, (json) => { - if (json.cli) { - delete json.cli; - } - return json; - }); - } else { - console.warn(`Could not find schema file ${schemaPath}`); - } -} diff --git a/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.spec.ts b/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.spec.ts deleted file mode 100644 index dad32acac2..0000000000 --- a/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { - Tree, - readJson, - updateJson, - addProjectConfiguration, - readProjectConfiguration, -} from '@nx/devkit'; -import { assertRunsAgainstNxRepo } from '@nx/devkit/internal-testing-utils'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replaceE2EExecutor from './replace-e2e-executor'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - addProjectConfiguration(tree, 'proj1', { - root: 'proj1', - targets: { - build: { - executor: '@nx/js:rollup', - }, - e2e: { - executor: '@nx/plugin:e2e', - options: { - target: 'proj1:build', - }, - configurations: { - ci: { - ci: true, - }, - }, - }, - }, - }); - }); - - it('should replace @nrwl/nx-plugin:e2e with @nx/jest:jest', async () => { - await replaceE2EExecutor(tree); - - expect(readProjectConfiguration(tree, 'proj1')).toMatchInlineSnapshot(` - { - "$schema": "../node_modules/nx/schemas/project-schema.json", - "name": "proj1", - "root": "proj1", - "targets": { - "build": { - "executor": "@nx/js:rollup", - }, - "e2e": { - "configurations": { - "ci": { - "ci": true, - "runInBand": true, - }, - }, - "dependsOn": [ - "proj1:build", - ], - "executor": "@nx/jest:jest", - "options": { - "runInBand": true, - }, - }, - }, - } - `); - }); - - assertRunsAgainstNxRepo(replaceE2EExecutor); -}); diff --git a/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.ts b/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.ts deleted file mode 100644 index 7a140369a7..0000000000 --- a/packages/plugin/src/migrations/update-16-2-0/replace-e2e-executor.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - Tree, - formatFiles, - getProjects, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { JestExecutorOptions } from '@nx/jest/src/executors/jest/schema'; - -export interface NxPluginE2EExecutorOptions extends JestExecutorOptions { - target: string; - jestConfig: string; -} - -export default async function replaceE2EExecutor(tree: Tree): Promise { - const projects = getProjects(tree); - for (const executor of ['@nx/plugin:e2e', '@nrwl/nx-plugin:e2e']) { - forEachExecutorOptions( - tree, - executor, - (options, project, target, configuration) => { - const projectConfiguration = projects.get(project); - - const config = { - ...options, - target: undefined, - runInBand: true, - }; - if (configuration) { - projectConfiguration.targets[target].configurations[configuration] = - config; - } else { - projectConfiguration.targets[target].dependsOn = [ - ...(projectConfiguration.targets[target].dependsOn ?? []), - options.target, - ]; - projectConfiguration.targets[target].executor = '@nx/jest:jest'; - projectConfiguration.targets[target].options = config; - } - - updateProjectConfiguration(tree, project, projectConfiguration); - } - ); - } - - await formatFiles(tree); -} diff --git a/packages/react-native/migrations.json b/packages/react-native/migrations.json index 35476cfed6..5b5d62a050 100644 --- a/packages/react-native/migrations.json +++ b/packages/react-native/migrations.json @@ -1,35 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/react-native with @nx/react-native", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-1-0-upgrade-storybook-6-5": { - "cli": "nx", - "version": "16.1.0-beta.0", - "description": "Upgrade @storybook/react-native to 6.5", - "implementation": "./src/migrations/update-16-1-0/upgrade-storybook-6-5" - }, - "update-16-6-0-add-dependsOn": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Add dependsOn like ensure-symlink or sync-deps to targets", - "implementation": "./src/migrations/update-16-6-0/add-depends-on" - }, - "update-16-6-0-update-metro-config": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Update metro.config.js to use the new metro config format", - "implementation": "./src/migrations/update-16-6-0/update-metro-config" - }, - "update-16-9-0-remove-types-react-native": { - "cli": "nx", - "version": "16.9.0-beta.1", - "description": "Remove @types/react-native from package.json", - "implementation": "./src/migrations/update-16-9-0/remove-types-react-native" - }, "update-18-0-0-add-web-configuration": { "cli": "nx", "version": "18.0.0-beta.0", @@ -74,189 +44,6 @@ } }, "packageJsonUpdates": { - "16.0.0": { - "version": "16.0.0-beta.0", - "packages": { - "@react-native-community/cli": { - "version": "10.2.2", - "alwaysAddToPackageJson": false - }, - "react-native": { - "version": "0.71.7", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.71.6", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "12.0.1", - "alwaysAddToPackageJson": false - }, - "react-native-svg": { - "version": "13.9.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.0.2": { - "version": "16.0.2-beta.0", - "packages": { - "@react-native-async-storage/async-storage": { - "version": "1.18.1", - "alwaysAddToPackageJson": false - }, - "react-native-safe-area-context": { - "version": "4.5.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.5": { - "version": "16.1.5-beta.0", - "packages": { - "react-native": { - "version": "0.71.8", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.71.7", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "12.1.2", - "alwaysAddToPackageJson": false - }, - "react-native-safe-area-context": { - "version": "4.5.2", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0": { - "version": "16.4.0-beta.5", - "packages": { - "react-native": { - "version": "0.71.10", - "alwaysAddToPackageJson": false - }, - "@react-native-async-storage/async-storage": { - "version": "1.18.2", - "alwaysAddToPackageJson": false - }, - "react-native-safe-area-context": { - "version": "4.5.3", - "alwaysAddToPackageJson": false - } - } - }, - "16.6.0": { - "version": "16.6.0-beta.0", - "packages": { - "react-native": { - "version": "0.72.3", - "alwaysAddToPackageJson": false - }, - "@types/react-native": { - "version": "0.72.2", - "alwaysAddToPackageJson": false - }, - "metro": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro-resolver": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro-config": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro-react-native-babel-preset": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro-babel-register": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "metro-react-native-babel-transformer": { - "version": "0.76.7", - "alwaysAddToPackageJson": false - }, - "@react-native/metro-config": { - "version": "^0.72.9", - "alwaysAddToPackageJson": false, - "addToPackageJson": "devDependencies" - }, - "@react-native-community/cli": { - "version": "11.3.5", - "alwaysAddToPackageJson": false - }, - "@react-native-community/cli-platform-android": { - "version": "11.3.5", - "alwaysAddToPackageJson": false - }, - "@react-native-community/cli-platform-ios": { - "version": "11.3.5", - "alwaysAddToPackageJson": false - }, - "@babel/runtime": { - "version": "7.22.6", - "alwaysAddToPackageJson": false - }, - "@react-native-async-storage/async-storage": { - "version": "1.19.0", - "alwaysAddToPackageJson": false - }, - "react-native-safe-area-context": { - "version": "4.7.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.9.0": { - "version": "16.9.0-beta.1", - "packages": { - "react-native": { - "version": "0.72.4", - "alwaysAddToPackageJson": false - }, - "@react-native/metro-config": { - "version": "^0.72.11", - "alwaysAddToPackageJson": false - }, - "@react-native-community/cli": { - "version": "11.3.6", - "alwaysAddToPackageJson": false - }, - "@react-native-community/cli-platform-android": { - "version": "11.3.6", - "alwaysAddToPackageJson": false - }, - "@react-native-community/cli-platform-ios": { - "version": "11.3.6", - "alwaysAddToPackageJson": false - }, - "@testing-library/react-native": { - "version": "~12.3.0", - "alwaysAddToPackageJson": false - }, - "@testing-library/jest-native": { - "version": "~5.4.3", - "alwaysAddToPackageJson": false - }, - "@react-native-async-storage/async-storage": { - "version": "~1.19.3", - "alwaysAddToPackageJson": false - }, - "react-native-safe-area-context": { - "version": "~4.7.2", - "alwaysAddToPackageJson": false - } - } - }, "17.1.0": { "version": "17.1.0-beta.1", "packages": { diff --git a/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 3342dbf72e..0000000000 --- a/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/react-native'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/react-native', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/react-native'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/react-native'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/react-native', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/react-native'] ?? - packageJson.dependencies['@nx/react-native']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index e2ddecb068..0000000000 --- a/packages/react-native/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage( - tree, - '@nrwl/react-native', - '@nx/react-native' - ); - - await formatFiles(tree); -} diff --git a/packages/react-native/src/migrations/update-16-1-0/upgrade-storybook-6-5.ts b/packages/react-native/src/migrations/update-16-1-0/upgrade-storybook-6-5.ts deleted file mode 100644 index 9eac7e9560..0000000000 --- a/packages/react-native/src/migrations/update-16-1-0/upgrade-storybook-6-5.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Tree, updateJson } from '@nx/devkit'; - -/** - * This migration is to upgrade storybook to 6.5. - * - remove react-native-storybook-loader - */ -export default function update(tree: Tree) { - if (tree.exists('package.json')) { - updateJson(tree, 'package.json', (packageJson) => { - if (packageJson.dependencies?.['react-native-storybook-loader']) { - delete packageJson.dependencies['react-native-storybook-loader']; - } - if (packageJson.devDependencies?.['react-native-storybook-loader']) { - delete packageJson.devDependencies['react-native-storybook-loader']; - } - return packageJson; - }); - } -} diff --git a/packages/react-native/src/migrations/update-16-6-0/add-depends-on.ts b/packages/react-native/src/migrations/update-16-6-0/add-depends-on.ts deleted file mode 100644 index f2c45816dc..0000000000 --- a/packages/react-native/src/migrations/update-16-6-0/add-depends-on.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Tree, getProjects, updateProjectConfiguration } from '@nx/devkit'; - -/** - * This migration adds dependsOn to project.json. - * - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [name, config] of projects.entries()) { - if (config.targets?.['start']?.executor === '@nx/react-native:start') { - config.targets['start'].dependsOn = [ - 'ensure-symlink', - 'sync-deps', - 'pod-install', - ]; - if ( - config.targets?.['run-ios']?.executor === '@nx/react-native:run-ios' - ) { - config.targets['run-ios'].dependsOn = [ - 'ensure-symlink', - 'sync-deps', - 'pod-install', - ]; - } - if ( - config.targets?.['bundle-ios']?.executor === '@nx/react-native:bundle' - ) { - config.targets['bundle-ios'].dependsOn = ['ensure-symlink']; - } - if ( - config.targets?.['run-android']?.executor === - '@nx/react-native:run-android' - ) { - config.targets['run-android'].dependsOn ??= [ - 'ensure-symlink', - 'sync-deps', - ]; - } - if ( - config.targets?.['build-android']?.executor === - '@nx/react-native:build-android' - ) { - config.targets['build-android'].dependsOn = [ - 'ensure-symlink', - 'sync-deps', - ]; - } - if ( - config.targets?.['build-ios']?.executor === '@nx/react-native:build-ios' - ) { - config.targets['build-ios'].dependsOn ??= [ - 'ensure-symlink', - 'sync-deps', - 'pod-install', - ]; - } - if ( - config.targets?.['pod-instal']?.executor === - '@nx/react-native:pod-install' - ) { - config.targets['pod-install'].dependsOn ??= [ - 'ensure-symlink', - 'sync-deps', - ]; - } - if ( - config.targets?.['bundle-android']?.executor === - '@nx/react-native:bundle' - ) { - config.targets['bundle-android'].dependsOn ??= ['ensure-symlink']; - } - - updateProjectConfiguration(tree, name, config); - } - } -} diff --git a/packages/react-native/src/migrations/update-16-6-0/update-metro-config.ts b/packages/react-native/src/migrations/update-16-6-0/update-metro-config.ts deleted file mode 100644 index 0b32312e6d..0000000000 --- a/packages/react-native/src/migrations/update-16-6-0/update-metro-config.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Tree, getProjects } from '@nx/devkit'; -import { join } from 'path'; - -/** - * This migration updates metro.config.js to export config as a default. - * - */ -export default async function update(tree: Tree) { - const projects = getProjects(tree); - - for (const [_, config] of projects.entries()) { - if (config.targets?.['start']?.executor === '@nx/react-native:start') { - if (tree.exists(join(config.root, 'metro.config.js'))) { - const oldConfig = tree - .read(join(config.root, 'metro.config.js')) - .toString(); - tree.write( - join(config.root, 'metro-v71.config.js'), - oldConfigComment + oldConfig - ); - tree.write(join(config.root, 'metro.config.js'), content); - } - } - } -} - -const oldConfigComment = `/** - * Old custom configuration for React Native v0.71. - * From @react-native/metro-config 0.72.1, it is no longer necessary to use a config function to access the complete default config. - * Please port your custom configuration to metro.config.js. - * Please see https://reactnative.dev/docs/metro to learn about configuration. - */ -`; - -const content = ` -const { withNxMetro } = require('@nx/react-native'); -const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); - -const defaultConfig = getDefaultConfig(__dirname); -const { assetExts, sourceExts } = defaultConfig.resolver; - -/** - * Metro configuration - * https://facebook.github.io/metro/docs/configuration - * - * @type {import('metro-config').MetroConfig} - */ -const customConfig = { - transformer: { - babelTransformerPath: require.resolve('react-native-svg-transformer'), - }, - resolver: { - assetExts: assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...sourceExts, 'cjs', 'mjs', 'svg'], - }, -}; - -module.exports = withNxMetro(mergeConfig(defaultConfig, customConfig), { - // Change this to true to see debugging info. - // Useful if you have issues resolving modules - debug: false, - // all the file extensions used for imports other than 'ts', 'tsx', 'js', 'jsx', 'json' - extensions: [], - // Specify folders to watch, in addition to Nx defaults (workspace libraries and node_modules) - watchFolders: [], -}); -`; diff --git a/packages/react-native/src/migrations/update-16-9-0/remove-types-react-native.ts b/packages/react-native/src/migrations/update-16-9-0/remove-types-react-native.ts deleted file mode 100644 index a2a9daabb1..0000000000 --- a/packages/react-native/src/migrations/update-16-9-0/remove-types-react-native.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { - formatFiles, - removeDependenciesFromPackageJson, - Tree, -} from '@nx/devkit'; - -/** - * Remove @types/react-native package since it is no longer required. It would be a part of react native package. - * @param tree - * @returns - */ -export default async function update(tree: Tree) { - removeDependenciesFromPackageJson(tree, [], ['@types/react-native']); - await formatFiles(tree); -} diff --git a/packages/react/migrations.json b/packages/react/migrations.json index 3791f1d66f..7c1aae730b 100644 --- a/packages/react/migrations.json +++ b/packages/react/migrations.json @@ -1,35 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/react with @nx/react", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-2-0-remove-package": { - "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Remove react-test-renderer from package.json", - "implementation": "./src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package" - }, - "remove-types-react-router-dom": { - "cli": "nx", - "version": "16.3.0-beta.2", - "description": "Remove @types/react-router-dom from package.json", - "implementation": "./src/migrations/update-16-3-0/remove-types-react-router-dom-package" - }, - "add-babel-core": { - "cli": "nx", - "version": "16.7.0-beta.2", - "description": "Add @babel/core to package.json if @babel/preset-react is present", - "implementation": "./src/migrations/update-16-7-0/add-babel-core" - }, - "update-16-7-0-add-typings": { - "cli": "nx", - "version": "16.7.0-beta.2", - "description": "Add @nx/react types to tsconfig types array", - "implementation": "./src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings" - }, "add-module-federation-env-var-to-target-defaults": { "cli": "nx", "version": "18.0.0-beta.0", @@ -62,88 +32,6 @@ } }, "packageJsonUpdates": { - "16.3.0": { - "version": "16.3.0-beta.2", - "packages": { - "react-router-dom": { - "version": "6.11.2", - "alwaysAddToPackageJson": false - }, - "@svgr/rollup": { - "version": "^8.0.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.4": { - "version": "16.4.0-beta.4", - "packages": { - "stylus": { - "version": "^0.59.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.7": { - "version": "16.4.0-beta.7", - "packages": { - "@types/react": { - "version": "18.2.12", - "alwaysAddToPackageJson": false - }, - "@types/react-dom": { - "version": "18.2.5", - "alwaysAddToPackageJson": false - }, - "@types/react-is": { - "version": "18.2.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.8": { - "version": "16.4.0-beta.8", - "packages": { - "@emotion/styled": { - "version": "11.11.0", - "alwaysAddToPackageJson": false - }, - "@emotion/react": { - "version": "11.11.1", - "alwaysAddToPackageJson": false - }, - "@emotion/babel-plugin": { - "version": "11.11.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.11": { - "version": "16.4.0-beta.11", - "packages": { - "@types/react": { - "version": "18.2.13", - "alwaysAddToPackageJson": false - }, - "@types/react-dom": { - "version": "18.2.6", - "alwaysAddToPackageJson": false - }, - "@types/react-is": { - "version": "18.2.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.5.0-beta.4": { - "version": "16.5.0-beta.4", - "packages": { - "@types/react": { - "version": "18.2.14", - "alwaysAddToPackageJson": false - } - } - }, "17.0.0-beta.0": { "version": "17.0.0-beta.0", "packages": { diff --git a/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 63e3112c58..0000000000 --- a/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/react'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/react', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/react'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/react'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/react', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/react'] ?? - packageJson.dependencies['@nx/react']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 951796732f..0000000000 --- a/packages/react/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/react', '@nx/react'); - - await formatFiles(tree); -} diff --git a/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.spec.ts b/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.spec.ts deleted file mode 100644 index d9901b1137..0000000000 --- a/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import removePackage from './update-16-2-0-remove-package'; - -describe('update-16-2-0-remove-package', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['react-test-renderer'] = '18.2.0'; - return json; - }); - }); - - it('should remove react-test-renderer from package.json', async () => { - await removePackage(tree); - - expect( - readJson(tree, 'package.json').devDependencies['react-test-renderer'] - ).not.toBeDefined(); - }); -}); diff --git a/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.ts b/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.ts deleted file mode 100644 index 00b761a185..0000000000 --- a/packages/react/src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { - Tree, - formatFiles, - removeDependenciesFromPackageJson, -} from '@nx/devkit'; - -export default async function removePackage(tree: Tree): Promise { - removeDependenciesFromPackageJson(tree, [], ['react-test-renderer']); - await formatFiles(tree); -} diff --git a/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.spec.ts b/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.spec.ts deleted file mode 100644 index f83bb55552..0000000000 --- a/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import removePackage from './remove-types-react-router-dom-package'; - -describe('update-16-3-0-remove-types-react-router-dom-package', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@types/react-router-dom'] = '*'; - return json; - }); - }); - - it('should remove react-test-renderer from package.json', async () => { - await removePackage(tree); - - expect( - readJson(tree, 'package.json').devDependencies['react-test-renderer'] - ).not.toBeDefined(); - }); -}); diff --git a/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.ts b/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.ts deleted file mode 100644 index 00b761a185..0000000000 --- a/packages/react/src/migrations/update-16-3-0/remove-types-react-router-dom-package.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { - Tree, - formatFiles, - removeDependenciesFromPackageJson, -} from '@nx/devkit'; - -export default async function removePackage(tree: Tree): Promise { - removeDependenciesFromPackageJson(tree, [], ['react-test-renderer']); - await formatFiles(tree); -} diff --git a/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.spec.ts b/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.spec.ts deleted file mode 100644 index 29e7151990..0000000000 --- a/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.spec.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Tree, addProjectConfiguration } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; -import addTypings from './update-16-7-0-add-typings'; - -describe('Add typings to react projects', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should update tsconfig to include react typings', async () => { - tree.write( - 'package.json', - JSON.stringify({ - dependencies: {}, - devDependencies: {}, - }) - ); - - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/webpack:webpack', - }, - serve: { - executor: '@nx/webpack:dev-server', - }, - }, - }); - tree.write( - 'myapp/tsconfig.json', - JSON.stringify({ - compilerOptions: { - jsx: 'react-jsx', - }, - }) - ); - tree.write( - 'myapp/tsconfig.app.json', - JSON.stringify({ - compilerOptions: {}, - }) - ); - - await addTypings(tree); - const tsconfigTypes = JSON.parse( - tree.read('myapp/tsconfig.app.json', 'utf-8') - ); - - expect(tsconfigTypes.compilerOptions.types).toContain( - '@nx/react/typings/cssmodule.d.ts' - ); - expect(tsconfigTypes.compilerOptions.types).toContain( - '@nx/react/typings/image.d.ts' - ); - }); - - it('should not update tsconfig of node app to include react typings', async () => { - tree.write( - 'package.json', - JSON.stringify({ - dependencies: {}, - devDependencies: {}, - }) - ); - - addProjectConfiguration(tree, 'myapp', { - root: 'myapp', - targets: { - build: { - executor: '@nx/webpack:webpack', - }, - serve: { - executor: '@nx/js:node', - }, - }, - }); - tree.write( - 'myapp/tsconfig.app.json', - JSON.stringify({ - compilerOptions: { - types: [], - }, - }) - ); - - await addTypings(tree); - const tsconfigTypes = JSON.parse( - tree.read('myapp/tsconfig.app.json', 'utf-8') - ); - - expect(tsconfigTypes.compilerOptions.types).not.toContain( - '@nx/react/typings/cssmodule.d.ts' - ); - expect(tsconfigTypes.compilerOptions.types).not.toContain( - '@nx/react/typings/image.d.ts' - ); - }); -}); diff --git a/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.ts b/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.ts deleted file mode 100644 index abca89a6ba..0000000000 --- a/packages/react/src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - Tree, - formatFiles, - getProjects, - joinPathFragments, - readJson, - updateJson, -} from '@nx/devkit'; - -export default async function addTypings(tree: Tree) { - const projects = getProjects(tree); - const buildExecutors = [ - '@nx/webpack:webpack', - '@nx/vite:build', - '@nx/rspack:rspack', - ]; - const serveExecutors = [ - '@nx/webpack:dev-server', - '@nx/vite:dev-server', - '@nx/rspack:dev-server', - ]; - const relatedTsConfigs = [ - 'tsconfig.app.json', - 'tsconfig.lib.json', - 'tsconfig.spec.json', - ]; - - const typesToAdd = [ - '@nx/react/typings/cssmodule.d.ts', - '@nx/react/typings/image.d.ts', - ]; - - for (const [, config] of projects) { - if (!buildExecutors.includes(config?.targets?.build?.executor)) { - continue; - } - if ( - config?.targets?.serve?.executor && - !serveExecutors.includes(config?.targets?.serve?.executor) - ) { - continue; - } - const rootPath = config.root; - const projectTsConfigPath = joinPathFragments(rootPath, 'tsconfig.json'); - const projectTsConfig = readJson(tree, projectTsConfigPath); - if (projectTsConfig.compilerOptions?.jsx !== 'react-jsx') { - continue; - } - - relatedTsConfigs.forEach((tsConfig) => { - const tsConfigPath = joinPathFragments(rootPath, tsConfig); - if (tree.exists(tsConfigPath)) { - updateJson(tree, tsConfigPath, (json) => { - const compilerOptions = json.compilerOptions || {}; - compilerOptions.types = [ - ...new Set([...(compilerOptions.types || []), ...typesToAdd]), - ]; - if (json.files?.length > 0) { - json.files = json.files.filter( - (file: string) => !['cssmodule.d.ts', 'image.d.ts'].includes(file) - ); - } - return { ...json, compilerOptions }; - }); - } - }); - } - await formatFiles(tree); -} diff --git a/packages/react/src/migrations/update-16-7-0/add-babel-core.spec.ts b/packages/react/src/migrations/update-16-7-0/add-babel-core.spec.ts deleted file mode 100644 index 5489bcc0b8..0000000000 --- a/packages/react/src/migrations/update-16-7-0/add-babel-core.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import addBabelCore from './add-babel-core'; - -describe('update-16-7-0-add-babel-core', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should add @babel/core to package.json', async () => { - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@babel/preset-react'] = '*'; - return json; - }); - - await addBabelCore(tree); - - expect( - readJson(tree, 'package.json').devDependencies['@babel/core'] - ).toBeDefined(); - }); - - it('should not add @babel/core to package.json if preset-react is not available', async () => { - await addBabelCore(tree); - - expect( - readJson(tree, 'package.json').devDependencies['@babel/core'] - ).not.toBeDefined(); - }); -}); diff --git a/packages/react/src/migrations/update-16-7-0/add-babel-core.ts b/packages/react/src/migrations/update-16-7-0/add-babel-core.ts deleted file mode 100644 index 660a5db55f..0000000000 --- a/packages/react/src/migrations/update-16-7-0/add-babel-core.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - Tree, - addDependenciesToPackageJson, - formatFiles, - readJson, -} from '@nx/devkit'; -import { babelCoreVersion } from '../../utils/versions'; - -export default async function addBabelCore(tree: Tree): Promise { - const packageJson = readJson(tree, 'package.json'); - if (packageJson?.devDependencies['@babel/preset-react']) { - addDependenciesToPackageJson( - tree, - {}, - { - '@babel/core': babelCoreVersion, - } - ); - await formatFiles(tree); - } -} diff --git a/packages/rollup/migrations.json b/packages/rollup/migrations.json index fb636fa151..4b77be7bb6 100644 --- a/packages/rollup/migrations.json +++ b/packages/rollup/migrations.json @@ -1,24 +1,5 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/rollup with @nx/rollup", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-3-3-add-babel-upward-root-mode-flag": { - "cli": "nx", - "version": "16.3.3-beta.0", - "description": "Add babelUpwardRootMode if not already defined", - "implementation": "./src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag" - }, - "explicitly-set-projects-to-update-buildable-deps": { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.", - "factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps" - } - }, + "generators": {}, "packageJsonUpdates": { "18.2.0": { "version": "18.2.0-beta.1", diff --git a/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 6b5307270d..0000000000 --- a/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/rollup'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/rollup', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/rollup'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/rollup'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/rollup', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/rollup'] ?? - packageJson.dependencies['@nx/rollup']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 785c3859ba..0000000000 --- a/packages/rollup/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/rollup', '@nx/rollup'); - - await formatFiles(tree); -} diff --git a/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.spec.ts b/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.spec.ts deleted file mode 100644 index d041cd5fac..0000000000 --- a/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.spec.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { - addProjectConfiguration, - readProjectConfiguration, - Tree, -} from '@nx/devkit'; -import addBabelUpwardRootModeFlag from './update-16-3-3-add-babel-upward-root-mode-flag'; - -describe('16.3.0 migration (add babelUpwardRootMode flag)', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should add the babelUpwardRootMode flag to rollup projects', async () => { - addProjectConfiguration(tree, 'app1', { - root: 'apps/app1', - targets: { - build: { - executor: '@nx/rollup:rollup', - options: {}, - }, - }, - }); - addProjectConfiguration(tree, 'app2', { - root: 'apps/app2', - targets: { - build: { - executor: '@nx/rollup:rollup', - options: { - babelUpwardRootMode: false, - }, - }, - }, - }); - - addProjectConfiguration(tree, 'app3', { - root: 'apps/app3', - targets: { - build: { - executor: '@nx/esbuild:esbuild', - options: {}, - }, - }, - }); - - await addBabelUpwardRootModeFlag(tree); - - const app1 = readProjectConfiguration(tree, 'app1'); - const app2 = readProjectConfiguration(tree, 'app2'); - const app3 = readProjectConfiguration(tree, 'app3'); - - expect(app1.targets['build'].options.babelUpwardRootMode).toBeTruthy(); - expect(app2.targets['build'].options.babelUpwardRootMode).toBeFalsy(); - expect(app3.targets['build'].options.babelUpwardRootMode).toBeUndefined(); - }); -}); diff --git a/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.ts b/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.ts deleted file mode 100644 index 35e0294153..0000000000 --- a/packages/rollup/src/migrations/update-16-3-3-add-babel-upward-root-mode-flag/update-16-3-3-add-babel-upward-root-mode-flag.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { RollupExecutorOptions } from '../../executors/rollup/schema'; - -export default async function (tree: Tree) { - forEachExecutorOptions( - tree, - '@nx/rollup:rollup', - ( - options: RollupExecutorOptions, - projectName, - targetName, - _configurationName - ) => { - if (options.babelUpwardRootMode !== undefined) { - return; - } - - const projectConfiguration = readProjectConfiguration(tree, projectName); - projectConfiguration.targets[targetName].options.babelUpwardRootMode = - true; - updateProjectConfiguration(tree, projectName, projectConfiguration); - } - ); - - await formatFiles(tree); -} diff --git a/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts b/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts deleted file mode 100644 index e507d75aea..0000000000 --- a/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.spec.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { - ProjectConfiguration, - ProjectGraph, - Tree, - addProjectConfiguration, - readProjectConfiguration, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import migration from './explicitly-set-projects-to-update-buildable-deps'; - -let projectGraph: ProjectGraph; -jest.mock('@nx/devkit', () => ({ - ...jest.requireActual('@nx/devkit'), - createProjectGraphAsync: () => Promise.resolve(projectGraph), -})); - -describe('explicitly-set-projects-to-update-buildable-deps migration', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it.each(['@nx/rollup:rollup', '@nrwl/rollup:rollup'])( - 'should set updateBuildableProjectDepsInPackageJson option to "true" when not specified in target using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'libs/lib1', - projectType: 'library', - targets: { build: { executor, options: {} } }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(true); - } - ); - - it.each(['@nx/rollup:rollup', '@nrwl/rollup:rollup'])( - 'should set updateBuildableProjectDepsInPackageJson option to "true" when target has no options object defined using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'libs/lib1', - projectType: 'library', - targets: { build: { executor } }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(true); - } - ); - - it.each(['@nx/js:swc', '@nrwl/js:swc', '@nx/js:tsc', '@nrwl/js:tsc'])( - 'should not overwrite updateBuildableProjectDepsInPackageJson option when it is specified in target using "%s"', - async (executor) => { - addProject(tree, 'lib1', { - root: 'libs/lib1', - projectType: 'library', - targets: { - build: { - executor, - options: { updateBuildableProjectDepsInPackageJson: false }, - }, - }, - }); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect( - project.targets.build.options.updateBuildableProjectDepsInPackageJson - ).toBe(false); - } - ); - - it('should not update targets using other executors', async () => { - const originalProjectConfig: ProjectConfiguration = { - root: 'libs/lib1', - projectType: 'library', - targets: { - build: { - executor: 'some-executor', - options: {}, - }, - }, - }; - addProject(tree, 'lib1', originalProjectConfig); - - await migration(tree); - - const project = readProjectConfiguration(tree, 'lib1'); - expect(project.targets).toStrictEqual(originalProjectConfig.targets); - }); -}); - -function addProject( - tree: Tree, - projectName: string, - config: ProjectConfiguration -): void { - projectGraph = { - dependencies: {}, - nodes: { - [projectName]: { - data: config, - name: projectName, - type: config.projectType === 'application' ? 'app' : 'lib', - }, - }, - }; - addProjectConfiguration(tree, projectName, config); -} diff --git a/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts b/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts deleted file mode 100644 index 5af99c4f5b..0000000000 --- a/packages/rollup/src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { - createProjectGraphAsync, - formatFiles, - readProjectConfiguration, - Tree, - updateProjectConfiguration, -} from '@nx/devkit'; - -const executors = new Set(['@nx/rollup:rollup', '@nrwl/rollup:rollup']); - -export default async function (tree: Tree) { - // use project graph to get the expanded target configurations - const projectGraph = await createProjectGraphAsync(); - - for (const [projectName, { data: projectData }] of Object.entries( - projectGraph.nodes - )) { - if (projectData.projectType !== 'library') { - continue; - } - - for (const [targetName, target] of Object.entries( - projectData.targets || {} - )) { - if (!executors.has(target.executor)) { - continue; - } - - if ( - !target.options || - target.options.updateBuildableProjectDepsInPackageJson === undefined - ) { - // read the project configuration to write the explicit project configuration - // and avoid writing the expanded target configuration - const project = readProjectConfiguration(tree, projectName); - project.targets[targetName].options ??= {}; - project.targets[ - targetName - ].options.updateBuildableProjectDepsInPackageJson = true; - updateProjectConfiguration(tree, projectName, project); - } - } - } - - await formatFiles(tree); -} diff --git a/packages/rspack/migrations.json b/packages/rspack/migrations.json index 88f20a517d..549dd79a01 100644 --- a/packages/rspack/migrations.json +++ b/packages/rspack/migrations.json @@ -1,30 +1,6 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/rspack with @nx/rspack", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - } - }, + "generators": {}, "packageJsonUpdates": { - "16.1.3": { - "version": "16.1.3-beta.0", - "packages": { - "@rspack/core": { - "version": "~0.1.12", - "alwaysAddToPackageJson": false - }, - "@rspack/dev-server": { - "version": "~0.1.12", - "alwaysAddToPackageJson": false - }, - "@rspack/plugin-minify": { - "version": "~0.1.12", - "alwaysAddToPackageJson": false - } - } - }, "18.1.0": { "version": "18.1.0-beta.0", "packages": { diff --git a/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 8fc2324fb4..0000000000 --- a/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { readJson, Tree, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/rspack'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/rspack', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/rspack'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/rspack'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/rspack', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/rspack'] ?? - packageJson.dependencies['@nx/rspack']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index bf44165b3c..0000000000 --- a/packages/rspack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { formatFiles, Tree } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/rspack', '@nx/rspack'); - - await formatFiles(tree); -} diff --git a/packages/storybook/migrations.json b/packages/storybook/migrations.json index fd69b51476..8b1ec9aefc 100644 --- a/packages/storybook/migrations.json +++ b/packages/storybook/migrations.json @@ -1,29 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/storybook with @nx/storybook", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-0-0-migrate-7": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Update workspace to use Storybook v7", - "implementation": "./src/migrations/update-16-0-0/update-sb-7" - }, - "update-16-1-0": { - "cli": "nx", - "version": "16.1.0-beta.0", - "description": "Ignore @nx/react/plugins/storybook in Storybook eslint rules.", - "factory": "./src/migrations/update-16-1-0/eslint-ignore-react-plugin" - }, - "update-16-5-0": { - "cli": "nx", - "version": "16.5.0-beta.0", - "description": "Move .storybook/tsconfig.json to tsconfig.storybook.json for non-Angular projects.", - "factory": "./src/migrations/update-16-5-0/move-storybook-tsconfig" - }, "update-19-6-0-add-nx-packages": { "cli": "nx", "version": "19.6.0-beta.0", @@ -272,593 +248,6 @@ } } }, - "16.7.0": { - "version": "16.7.0-beta.3", - "packages": { - "@storybook/test-runner": { - "version": "^0.13.0", - "alwaysAddToPackageJson": false - }, - "@storybook/core-server": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/react-vite": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/react-webpack5": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-vite": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-webpack5": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-a11y": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-actions": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-backgrounds": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-controls": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-docs": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-interactions": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-mdx-gfm": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-highlight": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-jest": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-links": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-measure": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-outline": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots-puppeteer": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storysource": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-toolbars": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-viewport": { - "version": "^7.2.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.6.0": { - "version": "16.6.0-beta.6", - "packages": { - "@storybook/test-runner": { - "version": "^0.11.0", - "alwaysAddToPackageJson": false - }, - "@storybook/core-server": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/react-vite": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/react-webpack5": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-vite": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-webpack5": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-a11y": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-actions": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-backgrounds": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-controls": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-docs": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-interactions": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-mdx-gfm": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-highlight": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-jest": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-links": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-measure": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-outline": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots-puppeteer": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storysource": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-toolbars": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-viewport": { - "version": "^7.1.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.5.0": { - "version": "16.5.0-beta.0", - "requires": { - "@storybook/core-server": ">=7.0.0 <7.0.24" - }, - "packages": { - "@storybook/core-server": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-vite": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-webpack5": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-vite": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-webpack5": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-a11y": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-actions": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-backgrounds": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-controls": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-docs": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-mdx-gfm": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-highlight": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-interactions": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-jest": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-links": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-measure": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-outline": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots-puppeteer": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storysource": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-toolbars": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-viewport": { - "version": "^7.0.24", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.3": { - "version": "16.1.3-beta.0", - "requires": { - "@storybook/core-server": ">=7.0.0 <7.0.9" - }, - "packages": { - "@storybook/core-server": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-vite": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-webpack5": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-vite": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-webpack5": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-a11y": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-actions": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-backgrounds": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-controls": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-docs": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-mdx-gfm": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-highlight": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-interactions": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-jest": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-links": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-measure": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-outline": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots-puppeteer": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storysource": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-toolbars": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-viewport": { - "version": "^7.0.9", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.0": { - "version": "16.1.0-beta.0", - "requires": { - "@storybook/core-server": ">=7.0.0 <7.0.8" - }, - "packages": { - "eslint-plugin-storybook": { - "version": "^0.6.12", - "alwaysAddToPackageJson": false - }, - "@storybook/core-server": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-vite": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/web-components-webpack5": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-vite": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/builder-webpack5": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-a11y": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-actions": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-backgrounds": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-controls": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-docs": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-mdx-gfm": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-highlight": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-interactions": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-jest": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-links": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-measure": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-outline": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storyshots-puppeteer": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-storysource": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-toolbars": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-viewport": { - "version": "^7.0.8", - "alwaysAddToPackageJson": false - }, - "@storybook/react-native": { - "version": "^6.5.3", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-ondevice-actions": { - "version": "^6.5.3", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-ondevice-backgrounds": { - "version": "^6.5.3", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-ondevice-controls": { - "version": "^6.5.3", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-ondevice-notes": { - "version": "^6.5.3", - "alwaysAddToPackageJson": false - } - } - }, - "16.0.0": { - "version": "16.0.0-beta.1", - "packages": { - "@storybook/core-server": { - "version": "^7.0.5", - "alwaysAddToPackageJson": false - }, - "@storybook/angular": { - "version": "^7.0.5", - "alwaysAddToPackageJson": false - }, - "@storybook/react": { - "version": "^7.0.5", - "alwaysAddToPackageJson": false - }, - "@storybook/addon-essentials": { - "version": "^7.0.5", - "alwaysAddToPackageJson": false - } - } - }, "18.2.0": { "version": "18.2.0-beta.1", "packages": { diff --git a/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 741918e260..0000000000 --- a/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/storybook'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/storybook', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/storybook'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/storybook'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/storybook', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/storybook'] ?? - packageJson.dependencies['@nx/storybook']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 52e0700364..0000000000 --- a/packages/storybook/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage( - tree, - '@nrwl/storybook', - '@nx/storybook' - ); - - await formatFiles(tree); -} diff --git a/packages/storybook/src/migrations/update-16-0-0/update-sb-7.ts b/packages/storybook/src/migrations/update-16-0-0/update-sb-7.ts deleted file mode 100644 index 2c8b3f66b0..0000000000 --- a/packages/storybook/src/migrations/update-16-0-0/update-sb-7.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Tree } from '@nx/devkit'; -import { output } from 'nx/src/utils/output'; -import migrate7Generator from '../../generators/migrate-7/migrate-7'; -import { storybookMajorVersion } from '../../utils/utilities'; - -export default async function changeStorybookTargets(tree: Tree) { - const storybookVersion = storybookMajorVersion(); - if (!storybookVersion) { - /** - * This just checks if Storybook is installed in the workspace. - * The thing here is that during the previous step of the migration, - * during packageJsonUpdates, Nx has already set Storybook - * to version 7, if Storybook exists in the workspace. - * So, it makes no sense here to check if the version is - * 7, because it will always be. - */ - return; - } - - output.log({ - title: 'Migrating Storybook to v7', - bodyLines: [ - `🚀 This migration will update your Storybook configuration to v7.`, - `It will call the @nx/storybook:migrate-7 generator for you.`, - `You can read more about the migration and how this generator works here:`, - `https://nx.dev/nx-api/storybook/generators/migrate-7`, - ], - }); - return migrate7Generator(tree, { autoAcceptAllPrompts: true }); -} diff --git a/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.spec.ts b/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.spec.ts deleted file mode 100644 index 7cdae11d3c..0000000000 --- a/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.spec.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { - addProjectConfiguration, - ProjectConfiguration, - readJson, - Tree, - updateJson, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import * as variousProjects from './test-configs/various-configs.json'; -import eslintIgnoreReactPlugin from './eslint-ignore-react-plugin'; - -describe('Ignore @nx/react/plugins/storybook in Storybook eslint plugin', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - addProjectConfiguration( - tree, - variousProjects['main-vite'].name, - variousProjects['main-vite'] as ProjectConfiguration - ); - tree.write('apps/main-vite/tsconfig.json', `{}`); - tree.write( - `apps/main-vite/.storybook/main.js`, - ` - module.exports = { - stories: ['../src/lib/**/*.stories.@(mdx|js|jsx|ts|tsx)'], - addons: ['@storybook/addon-essentials'], - framework: { - name: '@storybook/react-vite', - options: {}, - }, - }; - ` - ); - addProjectConfiguration( - tree, - variousProjects['main-webpack'].name, - variousProjects['main-webpack'] as ProjectConfiguration - ); - - if (!tree.exists('.eslintrc.json')) { - tree.write('.eslintrc.json', `{}`); - } - }); - - it('should not ignore the plugin if it is not used', async () => { - await eslintIgnoreReactPlugin(tree); - const eslintConfig = readJson(tree, '.eslintrc.json'); - expect(eslintConfig).toEqual({}); - expect(eslintConfig.rules).toBeUndefined(); - }); - - it('should not ignore the plugin if "plugin:storybook/recommended" is not included', async () => { - tree.write('apps/main-webpack/tsconfig.json', `{}`); - tree.write( - `apps/main-webpack/.storybook/main.js`, - ` - module.exports = { - stories: ['../src/lib/**/*.stories.@(mdx|js|jsx|ts|tsx)'], - addons: ['@storybook/addon-essentials', '@nx/react/plugins/storybook'], - framework: { - name: '@storybook/react-webpack5', - options: {}, - }, - }; - ` - ); - - await eslintIgnoreReactPlugin(tree); - - const eslintConfig = readJson(tree, '.eslintrc.json'); - expect(eslintConfig).toEqual({}); - expect(eslintConfig.rules).toBeUndefined(); - }); - - it(`should add ignore @nx/react/plugins/storybook to eslint config`, async () => { - tree.write('apps/main-webpack/tsconfig.json', `{}`); - tree.write( - `apps/main-webpack/.storybook/main.js`, - ` - module.exports = { - stories: ['../src/lib/**/*.stories.@(mdx|js|jsx|ts|tsx)'], - addons: ['@storybook/addon-essentials', '@nx/react/plugins/storybook'], - framework: { - name: '@storybook/react-webpack5', - options: {}, - }, - }; - ` - ); - - updateJson(tree, '.eslintrc.json', (json) => { - json.extends ??= []; - json.extends.push('plugin:storybook/recommended'); - return json; - }); - - await eslintIgnoreReactPlugin(tree); - - const eslintConfig = readJson(tree, '.eslintrc.json'); - expect(eslintConfig.rules).toHaveProperty( - 'storybook/no-uninstalled-addons' - ); - - expect(eslintConfig.rules['storybook/no-uninstalled-addons']).toMatchObject( - [ - 'error', - { - ignore: ['@nx/react/plugins/storybook'], - }, - ] - ); - }); -}); diff --git a/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.ts b/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.ts deleted file mode 100644 index eeb6d8a8cc..0000000000 --- a/packages/storybook/src/migrations/update-16-1-0/eslint-ignore-react-plugin.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - getProjects, - joinPathFragments, - Tree, - formatFiles, - updateJson, -} from '@nx/devkit'; - -export default async function (tree: Tree) { - const projects = getProjects(tree); - const reactPlugin = '@nx/react/plugins/storybook'; - let shouldIgnoreReactPlugin = false; - - for (const [, config] of projects) { - let sbConfigPath = joinPathFragments(config.root, '.storybook/main.ts'); - - if (!tree.exists(sbConfigPath)) { - sbConfigPath = joinPathFragments(config.root, '.storybook/main.js'); - } - - if (!tree.exists(sbConfigPath)) { - continue; - } - - const sbConfig = tree.read(sbConfigPath, 'utf-8'); - if (sbConfig.includes(reactPlugin)) { - shouldIgnoreReactPlugin = true; - break; - } - } - - if (shouldIgnoreReactPlugin && tree.exists('.eslintrc.json')) { - updateJson(tree, '.eslintrc.json', (json) => { - if (json.extends?.includes('plugin:storybook/recommended')) { - json.rules ??= {}; - json.rules['storybook/no-uninstalled-addons'] = [ - 'error', - { - ignore: ['@nx/react/plugins/storybook'], - }, - ]; - } - return json; - }); - } - - await formatFiles(tree); -} diff --git a/packages/storybook/src/migrations/update-16-5-0/__snapshots__/move-storybook-tsconfig.spec.ts.snap b/packages/storybook/src/migrations/update-16-5-0/__snapshots__/move-storybook-tsconfig.spec.ts.snap deleted file mode 100644 index 8fa23d4051..0000000000 --- a/packages/storybook/src/migrations/update-16-5-0/__snapshots__/move-storybook-tsconfig.spec.ts.snap +++ /dev/null @@ -1,206 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update Storybook tsconfig.json 1`] = ` -"{ - "extends": "./tsconfig.json", - "compilerOptions": { - "emitDecoratorMetadata": true, - "outDir": "" - }, - "files": [ - "../../node_modules/@nx/react/typings/styled-jsx.d.ts", - "../../node_modules/@nx/react/typings/cssmodule.d.ts", - "../../node_modules/@nx/react/typings/image.d.ts" - ], - "exclude": [ - "src/**/*.spec.ts", - "src/**/*.spec.js", - "src/**/*.spec.tsx", - "src/**/*.spec.jsx" - ], - "include": [ - "src/**/*.stories.ts", - "src/**/*.stories.js", - "src/**/*.stories.jsx", - "src/**/*.stories.tsx", - "src/**/*.stories.mdx", - ".storybook/*.js" - ] -} -" -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update Storybook tsconfig.json 2`] = ` -"{ - "extends": "./tsconfig.json", - "compilerOptions": { - "emitDecoratorMetadata": true, - "outDir": "" - }, - "files": [ - "../../node_modules/@nx/react/typings/styled-jsx.d.ts", - "../../node_modules/@nx/react/typings/cssmodule.d.ts", - "../../node_modules/@nx/react/typings/image.d.ts" - ], - "exclude": [ - "src/**/*.spec.ts", - "src/**/*.spec.js", - "src/**/*.spec.tsx", - "src/**/*.spec.jsx" - ], - "include": [ - "src/**/*.stories.ts", - "src/**/*.stories.js", - "src/**/*.stories.jsx", - "src/**/*.stories.tsx", - "src/**/*.stories.mdx", - ".storybook/*.js" - ] -} -" -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update Storybook tsconfig.json 3`] = ` -"{ - "extends": "./tsconfig.json", - "compilerOptions": { - "emitDecoratorMetadata": true, - "outDir": "" - }, - "files": [ - "../../../../../node_modules/@nx/react/typings/styled-jsx.d.ts", - "../../../../../node_modules/@nx/react/typings/cssmodule.d.ts", - "../../../../../node_modules/@nx/react/typings/image.d.ts" - ], - "exclude": [ - "src/**/*.spec.ts", - "src/**/*.spec.js", - "src/**/*.spec.tsx", - "src/**/*.spec.jsx" - ], - "include": [ - "src/**/*.stories.ts", - "src/**/*.stories.js", - "src/**/*.stories.jsx", - "src/**/*.stories.tsx", - "src/**/*.stories.mdx", - ".storybook/*.js" - ] -} -" -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update nx.json inputs 1`] = ` -{ - "affected": { - "defaultBase": "main", - }, - "namedInputs": { - "production": [ - "default", - "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)", - "!{projectRoot}/.storybook/**/*", - "!{projectRoot}/tsconfig.storybook.json", - ], - }, - "targetDefaults": { - "build": { - "cache": true, - }, - "build-storybook": { - "inputs": [ - "default", - "^production", - "{projectRoot}/.storybook/**/*", - "{projectRoot}/tsconfig.storybook.json", - ], - }, - "lint": { - "cache": true, - }, - }, -} -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update projects tsconfig.json 1`] = ` -"{ - "compilerOptions": { - "jsx": "react-jsx", - "allowJs": false, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.storybook.json" - } - ], - "extends": "../../tsconfig.base.json" -} -" -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update projects tsconfig.json 2`] = ` -"{ - "compilerOptions": { - "jsx": "react-jsx", - "allowJs": false, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "types": ["vite/client", "vitest"] - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.storybook.json" - } - ], - "extends": "../../tsconfig.base.json" -} -" -`; - -exports[`Ignore @nx/react/plugins/storybook in Storybook eslint plugin should update projects tsconfig.json 3`] = ` -"{ - "compilerOptions": { - "jsx": "react-jsx", - "allowJs": false, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "types": ["vite/client", "vitest"] - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.storybook.json" - } - ], - "extends": "../../../../../tsconfig.base.json" -} -" -`; diff --git a/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.spec.ts b/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.spec.ts deleted file mode 100644 index a4748a2b5f..0000000000 --- a/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.spec.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { - NxJsonConfiguration, - ProjectConfiguration, - Tree, - addProjectConfiguration, - updateJson, - readNxJson, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import * as variousProjects from './test-configs/storybook-projects.json'; -import moveStorybookTsconfig from './move-storybook-tsconfig'; - -describe('Ignore @nx/react/plugins/storybook in Storybook eslint plugin', () => { - let tree: Tree; - - beforeEach(async () => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - updateJson(tree, 'nx.json', (json) => { - json.namedInputs = { - production: ['default'], - }; - return json; - }); - setupProjects(tree); - await moveStorybookTsconfig(tree); - }); - - it('should update projects tsconfig.json', async () => { - expect( - tree.read(`apps/webpack-app/tsconfig.json`).toString() - ).toMatchSnapshot(); - expect( - tree.read(`apps/vite-app/tsconfig.json`).toString() - ).toMatchSnapshot(); - expect( - tree.read(`apps/my/custom/place/nested-app/tsconfig.json`).toString() - ).toMatchSnapshot(); - }); - - it('should update Storybook tsconfig.json', async () => { - expect( - tree.read(`apps/webpack-app/tsconfig.storybook.json`).toString() - ).toMatchSnapshot(); - expect( - tree.read(`apps/vite-app/tsconfig.storybook.json`).toString() - ).toMatchSnapshot(); - expect( - tree - .read(`apps/my/custom/place/nested-app/tsconfig.storybook.json`) - .toString() - ).toMatchSnapshot(); - }); - - it('should delete old Storybook tsconfig.json', async () => { - expect(tree.exists(`apps/vite-app/.storybook/tsconfig.json`)).toBeFalsy(); - expect( - tree.exists(`apps/webpack-app/.storybook/tsconfig.json`) - ).toBeFalsy(); - expect( - tree.exists(`apps/my/custom/place/nested-app/.storybook/tsconfig.json`) - ).toBeFalsy(); - }); - - it('should update nx.json inputs', () => { - expect(readNxJson(tree)).toMatchSnapshot(); - }); -}); - -function setupProjects(tree: Tree) { - for (const [name, project] of Object.entries(variousProjects)) { - addProjectConfiguration(tree, name, project as ProjectConfiguration); - } - tree.write( - `apps/my/custom/place/nested-app/tsconfig.json`, - JSON.stringify({ - compilerOptions: { - jsx: 'react-jsx', - allowJs: false, - esModuleInterop: false, - allowSyntheticDefaultImports: true, - strict: true, - types: ['vite/client', 'vitest'], - }, - files: [], - include: [], - references: [ - { - path: './tsconfig.app.json', - }, - { - path: './tsconfig.spec.json', - }, - { - path: './.storybook/tsconfig.json', - }, - ], - extends: '../../../../../tsconfig.base.json', - }) - ); - tree.write( - `apps/webpack-app/tsconfig.json`, - JSON.stringify({ - compilerOptions: { - jsx: 'react-jsx', - allowJs: false, - esModuleInterop: false, - allowSyntheticDefaultImports: true, - strict: true, - }, - files: [], - include: [], - references: [ - { - path: './tsconfig.app.json', - }, - { - path: './tsconfig.spec.json', - }, - { - path: './.storybook/tsconfig.json', - }, - ], - extends: '../../tsconfig.base.json', - }) - ); - tree.write( - 'apps/vite-app/tsconfig.json', - JSON.stringify({ - compilerOptions: { - jsx: 'react-jsx', - allowJs: false, - esModuleInterop: false, - allowSyntheticDefaultImports: true, - strict: true, - types: ['vite/client', 'vitest'], - }, - files: [], - include: [], - references: [ - { - path: './tsconfig.app.json', - }, - { - path: './tsconfig.spec.json', - }, - { - path: './.storybook/tsconfig.json', - }, - ], - extends: '../../tsconfig.base.json', - }) - ); - - tree.write( - 'apps/my/custom/place/nested-app/.storybook/tsconfig.json', - JSON.stringify({ - extends: '../tsconfig.json', - compilerOptions: { - emitDecoratorMetadata: true, - outDir: '', - }, - files: [ - '../../../../../../node_modules/@nx/react/typings/styled-jsx.d.ts', - '../../../../../../node_modules/@nx/react/typings/cssmodule.d.ts', - '../../../../../../node_modules/@nx/react/typings/image.d.ts', - ], - exclude: [ - '../**/*.spec.ts', - '../**/*.spec.js', - '../**/*.spec.tsx', - '../**/*.spec.jsx', - ], - include: [ - '../src/**/*.stories.ts', - '../src/**/*.stories.js', - '../src/**/*.stories.jsx', - '../src/**/*.stories.tsx', - '../src/**/*.stories.mdx', - '*.js', - ], - }) - ); - - tree.write( - 'apps/vite-app/.storybook/tsconfig.json', - JSON.stringify({ - extends: '../tsconfig.json', - compilerOptions: { - emitDecoratorMetadata: true, - outDir: '', - }, - files: [ - '../../../node_modules/@nx/react/typings/styled-jsx.d.ts', - '../../../node_modules/@nx/react/typings/cssmodule.d.ts', - '../../../node_modules/@nx/react/typings/image.d.ts', - ], - exclude: [ - '../**/*.spec.ts', - '../**/*.spec.js', - '../**/*.spec.tsx', - '../**/*.spec.jsx', - ], - include: [ - '../src/**/*.stories.ts', - '../src/**/*.stories.js', - '../src/**/*.stories.jsx', - '../src/**/*.stories.tsx', - '../src/**/*.stories.mdx', - '*.js', - ], - }) - ); - - tree.write( - 'apps/webpack-app/.storybook/tsconfig.json', - JSON.stringify({ - extends: '../tsconfig.json', - compilerOptions: { - emitDecoratorMetadata: true, - outDir: '', - }, - files: [ - '../../../node_modules/@nx/react/typings/styled-jsx.d.ts', - '../../../node_modules/@nx/react/typings/cssmodule.d.ts', - '../../../node_modules/@nx/react/typings/image.d.ts', - ], - exclude: [ - '../**/*.spec.ts', - '../**/*.spec.js', - '../**/*.spec.tsx', - '../**/*.spec.jsx', - ], - include: [ - '../src/**/*.stories.ts', - '../src/**/*.stories.js', - '../src/**/*.stories.jsx', - '../src/**/*.stories.tsx', - '../src/**/*.stories.mdx', - '*.js', - ], - }) - ); -} diff --git a/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.ts b/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.ts deleted file mode 100644 index baeea742ce..0000000000 --- a/packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { getProjects, joinPathFragments, Tree, formatFiles } from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { - addStorybookToNamedInputs, - addStorybookToTargetDefaults, - renameAndMoveOldTsConfig, -} from '../../generators/configuration/lib/util-functions'; - -export default async function (tree: Tree) { - forEachExecutorOptions( - tree, - '@nx/storybook:storybook', - (options, projectName) => { - const projectConfiguration = getProjects(tree).get(projectName); - const projectRoot = projectConfiguration.root; - if (options?.['configDir'] === undefined) { - return; - } - - const pathToStorybookConfigFile = joinPathFragments( - options?.['configDir'], - 'tsconfig.json' - ); - - renameAndMoveOldTsConfig(projectRoot, pathToStorybookConfigFile, tree); - } - ); - - addStorybookToNamedInputs(tree); - addStorybookToTargetDefaults(tree, false); - await formatFiles(tree); -} diff --git a/packages/vite/migrations.json b/packages/vite/migrations.json index 4c54200bab..1280a6da69 100644 --- a/packages/vite/migrations.json +++ b/packages/vite/migrations.json @@ -1,23 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/vite with @nx/vite", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-4-1-test-file-config": { - "version": "16.4.1-beta.0", - "description": "Changes the testFile config in the vite:test exectutor from a string to an array of strings", - "cli": "nx", - "implementation": "./src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config" - }, - "16-6-0-change-ts-paths-plugin": { - "version": "16.6.0-beta.4", - "description": "Change vite-tsconfig-paths plugin for first party nx-vite-tsconfig-paths plugin", - "cli": "nx", - "implementation": "./src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin" - }, "move-target-defaults": { "version": "17.1.0-beta.2", "description": "Move target defaults", @@ -114,81 +96,6 @@ "alwaysAddToPackageJson": false } } - }, - "16.4.0-beta.7": { - "version": "16.4.0-beta.7", - "packages": { - "vite": { - "version": "^4.3.9", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.0-beta.4": { - "version": "16.4.0-beta.4", - "packages": { - "@vitejs/plugin-react": { - "version": "^4.0.0", - "alwaysAddToPackageJson": false - }, - "@vitejs/plugin-react-swc": { - "version": "^3.3.2", - "alwaysAddToPackageJson": false - }, - "jsdom": { - "version": "~22.1.0", - "alwaysAddToPackageJson": false - }, - "vite-plugin-dts": { - "version": "~2.3.0", - "alwaysAddToPackageJson": false - }, - "vitest": { - "version": "^0.32.0", - "alwaysAddToPackageJson": false - }, - "@vitest/coverage-c8": { - "version": "^0.32.0", - "alwaysAddToPackageJson": false - }, - "@vitest/ui": { - "version": "^0.32.0", - "alwaysAddToPackageJson": false - }, - "@vitest/coverage-istanbul": { - "version": "^0.32.0", - "alwaysAddToPackageJson": false - } - } - }, - "16.1.0-beta.0": { - "version": "16.1.0-beta.0", - "packages": { - "vite": { - "version": "^4.3.4", - "alwaysAddToPackageJson": false - }, - "vite-tsconfig-paths": { - "version": "^4.2.0", - "alwaysAddToPackageJson": false - }, - "vitest": { - "version": "^0.31.0", - "alwaysAddToPackageJson": false - }, - "@vitest/coverage-c8": { - "version": "^0.31.0", - "alwaysAddToPackageJson": false - }, - "@vitest/ui": { - "version": "^0.31.0", - "alwaysAddToPackageJson": false - }, - "@vitest/coverage-istanbul": { - "version": "^0.31.0", - "alwaysAddToPackageJson": false - } - } } } } diff --git a/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 2d2cf0571d..0000000000 --- a/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/vite'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/vite', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/vite'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/vite'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/vite', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/vite'] ?? - packageJson.dependencies['@nx/vite']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 8e629b564c..0000000000 --- a/packages/vite/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/vite', '@nx/vite'); - - await formatFiles(tree); -} diff --git a/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.spec.ts b/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.spec.ts deleted file mode 100644 index 12f47c52ec..0000000000 --- a/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.spec.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { - Tree, - addProjectConfiguration, - readProjectConfiguration, -} from '@nx/devkit'; - -import updateTestFileOption from './update-16-4-1-test-file-config'; - -describe('update-16-5-0-vite-test-file-config migration', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should run successfully when testFile does not exist in the config', () => { - addProjectConfiguration(tree, 'vitest', { - root: 'vitest', - targets: { - test: { - executor: '@nx/vite:test', - options: { - ci: true, - watch: true, - }, - }, - }, - }); - updateTestFileOption(tree); - expect(readProjectConfiguration(tree, 'vitest')).toMatchInlineSnapshot(` - { - "$schema": "../node_modules/nx/schemas/project-schema.json", - "name": "vitest", - "root": "vitest", - "targets": { - "test": { - "executor": "@nx/vite:test", - "options": { - "ci": true, - "watch": true, - }, - }, - }, - } - `); - }); - - it('should run successfully when testFile exists in options and configurations', () => { - addProjectConfiguration(tree, 'vitest', { - root: 'vitest', - targets: { - test: { - executor: '@nx/vite:test', - options: { - testFile: 'test-file.ts', - config: 'vite.config.ts', - }, - configurations: { - one: { - testFile: 'test-file-one.ts', - ci: true, - }, - two: { - testFile: 'test-file-two.ts', - watch: true, - }, - }, - }, - }, - }); - updateTestFileOption(tree); - expect(readProjectConfiguration(tree, 'vitest')).toMatchInlineSnapshot(` - { - "$schema": "../node_modules/nx/schemas/project-schema.json", - "name": "vitest", - "root": "vitest", - "targets": { - "test": { - "configurations": { - "one": { - "ci": true, - "testFiles": [ - "test-file-one.ts", - ], - }, - "two": { - "testFiles": [ - "test-file-two.ts", - ], - "watch": true, - }, - }, - "executor": "@nx/vite:test", - "options": { - "config": "vite.config.ts", - "testFiles": [ - "test-file.ts", - ], - }, - }, - }, - } - `); - }); -}); diff --git a/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.ts b/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.ts deleted file mode 100644 index 64f59dc34c..0000000000 --- a/packages/vite/src/migrations/update-16-4-1-update-test-file-config/update-16-4-1-test-file-config.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Tree, getProjects, updateProjectConfiguration } from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { VitestExecutorOptions } from '../../executors/test/schema'; - -type OldVitestExecutorOptions = Omit & { - testFile: string; -}; - -export default function update(tree: Tree) { - const projects = getProjects(tree); - - forEachExecutorOptions( - tree, - '@nx/vite:test', - (options, projectName, targetName, configuration) => { - const projectConfig = projects.get(projectName); - - if (!options.testFile) { - return; - } - - const newTestFileArgs = [options.testFile]; - - delete options.testFile; - - if (configuration) { - projectConfig.targets[targetName].configurations[configuration] = { - ...options, - testFiles: newTestFileArgs, - }; - } else { - projectConfig.targets[targetName].options = { - ...options, - testFiles: newTestFileArgs, - }; - } - - updateProjectConfiguration(tree, projectName, projectConfig); - } - ); -} diff --git a/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.spec.ts b/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.spec.ts deleted file mode 100644 index 8cbcac9d42..0000000000 --- a/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.spec.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { Tree, addProjectConfiguration } from '@nx/devkit'; - -import changeTsPathsPlugin from './change-ts-paths-plugin'; - -describe('change-vite-ts-paths-plugin migration', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should update viteTsConfigPaths to nxViteTsPaths plugin', () => { - addProject(tree, 'demo'); - - changeTsPathsPlugin(tree); - - expect(tree.read('apps/demo/vite.config.ts', 'utf-8')) - .toMatchInlineSnapshot(` - " - /// - import { defineConfig } from 'vite'; - import react from '@vitejs/plugin-react'; - import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; - - export default defineConfig({ - cacheDir: '../../node_modules/.vite/demo', - server: { - port: 4200, - host: 'localhost', - }, - - preview: { - port: 4300, - host: 'localhost', - }, - - plugins: [ - react(), - nxViteTsPaths() - ], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ - // viteTsConfigPaths({ - // root: '../../', - // }), - // ], - // }, - - test: { - globals: true, - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'jsdom', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - }, - }); - - " - `); - }); - - it('should not change anything if viteTsConfigPaths is not used', () => { - addProject(tree, 'demo'); - tree.delete('apps/demo/vite.config.ts'); - - expect(() => changeTsPathsPlugin(tree)).not.toThrow(); - expect(tree.exists('apps/demo/vite.config.ts')).toBeFalsy(); - }); -}); - -function addProject(tree: Tree, name: string) { - addProjectConfiguration(tree, name, { - root: `apps/${name}`, - sourceRoot: `apps/${name}/src`, - targets: { - build: { - executor: '@nx/vite:build', - outputs: ['{options.outputPath}'], - defaultConfiguration: 'production', - options: { - outputPath: `dist/apps/${name}`, - buildLibsFromSource: false, - }, - configurations: { - development: { - mode: 'development', - }, - production: { - mode: 'production', - }, - }, - }, - }, - }); - - tree.write( - `apps/${name}/vite.config.ts`, - ` -/// -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import viteTsConfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/${name}', - server: { - port: 4200, - host: 'localhost', - }, - - preview: { - port: 4300, - host: 'localhost', - }, - - plugins: [ - react(), - viteTsConfigPaths({ - root: '../../' - }) - ], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ - // viteTsConfigPaths({ - // root: '../../', - // }), - // ], - // }, - - test: { - globals: true, - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'jsdom', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - }, -}); - -` - ); -} diff --git a/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.ts b/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.ts deleted file mode 100644 index 44c5e10c1c..0000000000 --- a/packages/vite/src/migrations/update-16-6-0-change-ts-paths-plugin/change-ts-paths-plugin.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Tree, getProjects, joinPathFragments } from '@nx/devkit'; -import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils'; -import { ViteBuildExecutorOptions } from '../../executors/build/schema'; -import { tsquery } from '@phenomnomnominal/tsquery'; -import { findViteConfig } from '../../utils/find-vite-config'; - -export default function update(tree: Tree) { - const projects = getProjects(tree); - forEachExecutorOptions( - tree, - '@nx/vite:build', - (options, projectName) => { - const projectConfig = projects.get(projectName); - const config = - options.configFile || findViteConfig(tree, projectConfig.root); - if (!config || !tree.exists(config)) { - return; - } - - const configContents = tree.read(config, 'utf-8'); - - const oldTsConfigPathPlugin = - tsquery.query( - configContents, - 'ImportDeclaration:has(StringLiteral[value="vite-tsconfig-paths"])' - ) ?? []; - - if (oldTsConfigPathPlugin.length === 0) { - return; - } - - const importName = - oldTsConfigPathPlugin[0]?.['importClause']?.name?.text ?? - 'viteTsConfigPaths'; - const updatedContent = tsquery.replace( - configContents, - `PropertyAssignment:has(Identifier[name="plugins"]) CallExpression:has(Identifier[name="${importName}"])`, - () => { - return `nxViteTsPaths()`; - } - ); - - const withImportChange = tsquery.replace( - updatedContent, - 'ImportDeclaration:has(StringLiteral[value="vite-tsconfig-paths"])', - () => { - return "import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';"; - } - ); - - tree.write(config, withImportChange); - } - ); -} diff --git a/packages/web/migrations.json b/packages/web/migrations.json index 7c71d46c90..2736252dcb 100644 --- a/packages/web/migrations.json +++ b/packages/web/migrations.json @@ -1,18 +1,5 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/web with @nx/web", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "update-16-0-0-update-executors": { - "cli": "nx", - "version": "16.0.0-beta.4", - "description": "Replace @nrwl/web executors with @nx/webpack and @nx/rollup", - "implementation": "./src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors" - } - }, + "generators": {}, "packageJsonUpdates": { "17.3.0": { "version": "17.3.0-beta.3", diff --git a/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index b30cdd5895..0000000000 --- a/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/web'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/web', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/web'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/web'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/web', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/web'] ?? - packageJson.dependencies['@nx/web']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index 58d705a1a2..0000000000 --- a/packages/web/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/web', '@nx/web'); - - await formatFiles(tree); -} diff --git a/packages/web/src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors.ts b/packages/web/src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors.ts deleted file mode 100644 index 5e17cdd90b..0000000000 --- a/packages/web/src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - formatFiles, - getProjects, - Tree, - updateProjectConfiguration, - addDependenciesToPackageJson, -} from '@nx/devkit'; -import { nxVersion } from '../../utils/versions'; - -export default async function update(host: Tree) { - const projects = getProjects(host); - const deps = {}; - - for (const [name, config] of projects.entries()) { - let updated = false; - - // webpack - if (config?.targets?.build?.executor === '@nrwl/web:webpack') { - config.targets.build.executor = '@nx/webpack:webpack'; - deps['@nx/webpack'] = nxVersion; - updated = true; - } - if (config?.targets?.serve?.executor === '@nrwl/web:dev-server') { - config.targets.serve.executor = '@nx/webpack:dev-server'; - deps['@nx/webpack'] = nxVersion; - updated = true; - } - - // rollup - if (config?.targets?.build?.executor === '@nrwl/web:rollup') { - config.targets.build.executor = '@nx/rollup:rollup'; - deps['@nx/rollup'] = nxVersion; - updated = true; - } - - if (updated) { - updateProjectConfiguration(host, name, config); - } - } - - await formatFiles(host); - - return addDependenciesToPackageJson(host, {}, deps); -} diff --git a/packages/webpack/migrations.json b/packages/webpack/migrations.json index bd975630d6..b7600347b6 100644 --- a/packages/webpack/migrations.json +++ b/packages/webpack/migrations.json @@ -1,11 +1,5 @@ { "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/webpack with @nx/webpack", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, "update-17-2-1-webpack-config-setup": { "cli": "nx", "version": "17.2.1-beta.0", @@ -20,24 +14,6 @@ } }, "packageJsonUpdates": { - "16.3.0": { - "version": "16.3.0-beta.8", - "packages": { - "@svgr/webpack": { - "version": "^8.0.1", - "alwaysAddToPackageJson": false - } - } - }, - "16.4.1": { - "version": "16.4.1-beta.0", - "packages": { - "webpack": { - "version": "^5.80.0", - "alwaysAddToPackageJson": false - } - } - }, "19.6.0": { "version": "19.6.0-beta.1", "packages": { diff --git a/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index c890c2cc1f..0000000000 --- a/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/webpack'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/webpack', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/webpack'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/webpack'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/webpack', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/webpack'] ?? - packageJson.dependencies['@nx/webpack']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index bfe97ade69..0000000000 --- a/packages/webpack/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage(tree, '@nrwl/webpack', '@nx/webpack'); - - await formatFiles(tree); -} diff --git a/packages/workspace/migrations.json b/packages/workspace/migrations.json index 473aac9dfe..311cefc8dc 100644 --- a/packages/workspace/migrations.json +++ b/packages/workspace/migrations.json @@ -1,49 +1,6 @@ { - "generators": { - "update-16-0-0-add-nx-packages": { - "cli": "nx", - "version": "16.0.0-beta.1", - "description": "Replace @nrwl/workspace with @nx/workspace", - "implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages" - }, - "16-0-0-move-workspace-generators-into-local-plugin": { - "version": "16.0.0-beta.4", - "description": "Generates a plugin called 'workspace-plugin' containing your workspace generators.", - "cli": "nx", - "implementation": "./src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin" - }, - "16-0-0-fix-invalid-babelrc": { - "version": "16.0.0-beta.9", - "description": "Fix .babelrc presets if it contains an invalid entry for @nx/web/babel.", - "cli": "nx", - "implementation": "./src/migrations/update-16-0-0/fix-invalid-babelrc" - } - }, + "generators": {}, "packageJsonUpdates": { - "16.1.0": { - "version": "16.1.0-beta.0", - "x-prompt": "Do you want to update to TypeScript v5.0?", - "requires": { - "typescript": ">=4.9.5 <5.0.0" - }, - "packages": { - "typescript": { - "version": "~5.0.2" - } - } - }, - "16.4.0": { - "version": "16.4.0-beta.11", - "x-prompt": "Do you want to update to TypeScript v5.1?", - "requires": { - "typescript": ">=5.0.0 <5.1.0" - }, - "packages": { - "typescript": { - "version": "~5.1.3" - } - } - }, "17.1.0": { "version": "17.1.0-beta.4", "x-prompt": "Do you want to update to TypeScript v5.2?", diff --git a/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts b/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts deleted file mode 100644 index 70f3b546b1..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Tree, readJson, updateJson } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import replacePackage from './update-16-0-0-add-nx-packages'; - -describe('update-16-0-0-add-nx-packages', () => { - let tree: Tree; - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - - updateJson(tree, 'package.json', (json) => { - json.devDependencies['@nrwl/workspace'] = '16.0.0'; - return json; - }); - }); - - it('should remove the dependency on @nrwl/workspace', async () => { - await replacePackage(tree); - - expect( - readJson(tree, 'package.json').dependencies['@nrwl/workspace'] - ).not.toBeDefined(); - expect( - readJson(tree, 'package.json').devDependencies['@nrwl/workspace'] - ).not.toBeDefined(); - }); - - it('should add a dependency on @nx/workspace', async () => { - await replacePackage(tree); - - const packageJson = readJson(tree, 'package.json'); - const newDependencyVersion = - packageJson.devDependencies['@nx/workspace'] ?? - packageJson.dependencies['@nx/workspace']; - - expect(newDependencyVersion).toBeDefined(); - }); -}); diff --git a/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts b/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts deleted file mode 100644 index b2b9c4844a..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Tree, formatFiles } from '@nx/devkit'; -import { replaceNrwlPackageWithNxPackage } from '@nx/devkit/src/utils/replace-package'; - -export default async function replacePackage(tree: Tree): Promise { - await replaceNrwlPackageWithNxPackage( - tree, - '@nrwl/workspace', - '@nx/workspace' - ); - - await formatFiles(tree); -} diff --git a/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.spec.ts b/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.spec.ts deleted file mode 100644 index 6725e1dfc9..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.spec.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { - addProjectConfiguration, - readJson, - Tree, - updateJson, - writeJson, -} from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import update from './fix-invalid-babelrc'; - -describe('fix-invalid-babelrc', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it.each` - webPlugin - ${'@nrwl/web'} - ${'@nx/web'} - `('should skip update if Web plugin is installed', ({ webPlugin }) => { - addProjectConfiguration(tree, 'proj', { - root: 'proj', - name: 'proj', - }); - updateJson(tree, 'package.json', (json) => { - json.devDependencies[webPlugin] = '16.0.0'; - return json; - }); - writeJson(tree, 'proj/.babelrc', { - presets: [['@nx/web/babel', {}]], - }); - - update(tree); - - expect(readJson(tree, 'proj/.babelrc')).toEqual({ - presets: [['@nx/web/babel', {}]], - }); - }); - - it.each` - jsPlugin | originalPreset - ${'@nrwl/js'} | ${'@nrwl/web/babel'} - ${'@nrwl/js'} | ${'@nx/web/babel'} - ${'@nx/js'} | ${'@nrwl/web/babel'} - ${'@nx/js'} | ${'@nx/web/babel'} - `( - 'should rename @nrwl/web/babel to @nx/js/babel when JS plugin is installed', - ({ jsPlugin, originalPreset }) => { - addProjectConfiguration(tree, 'proj1', { - root: 'proj1', - name: 'proj1', - }); - addProjectConfiguration(tree, 'proj2', { - root: 'proj2', - name: 'proj2', - }); - updateJson(tree, 'package.json', (json) => { - json.devDependencies[jsPlugin] = '16.0.0'; - return json; - }); - writeJson(tree, 'proj1/.babelrc', { - presets: [[originalPreset, {}]], - }); - writeJson(tree, 'proj2/.babelrc', { - presets: [originalPreset], - }); - - update(tree); - - expect(readJson(tree, 'proj1/.babelrc')).toEqual({ - presets: [['@nx/js/babel', {}]], - }); - expect(readJson(tree, 'proj2/.babelrc')).toEqual({ - presets: ['@nx/js/babel'], - }); - } - ); - - it('should remove the invalid preset if neither Web nor JS plugins are present', () => { - addProjectConfiguration(tree, 'proj', { - root: 'proj', - name: 'proj', - }); - writeJson(tree, 'proj/.babelrc', { - presets: [ - '@babel/preset-env', - ['@nx/web/babel', {}], - '@babel/preset-typescript', - ], - }); - - update(tree); - - expect(readJson(tree, 'proj/.babelrc')).toEqual({ - presets: ['@babel/preset-env', '@babel/preset-typescript'], - }); - }); -}); diff --git a/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.ts b/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.ts deleted file mode 100644 index f7f4cbc1f7..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0/fix-invalid-babelrc.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - getProjects, - joinPathFragments, - readJson, - Tree, - writeJson, -} from '@nx/devkit'; - -export default function update(tree: Tree) { - const projects = getProjects(tree); - const packageJson = readJson(tree, 'package.json'); - - // In case user installed as prod dep. - const deps = { ...packageJson.dependencies, ...packageJson.devDependencies }; - - // If web package is installed, skip update. - if (deps['@nrwl/web'] || deps['@nx/web']) { - return; - } - - projects.forEach((config, name) => { - const babelRcPath = joinPathFragments(config.root, '.babelrc'); - if (!tree.exists(babelRcPath)) return; - - const babelRc = readJson(tree, babelRcPath); - const nrwlWebBabelPresetIdx = babelRc.presets?.findIndex((p) => - // Babel preset could be specified as a string or a tuple with options. - // Account for rescope migration running before or after this one. - Array.isArray(p) - ? p[0] === '@nrwl/web/babel' || p[0] === '@nx/web/babel' - : p === '@nrwl/web/babel' || p === '@nx/web/babel' - ); - - if (nrwlWebBabelPresetIdx === undefined || nrwlWebBabelPresetIdx === -1) { - return; - } - - if (deps['@nrwl/js'] || deps['@nx/js']) { - // If JS plugin is installed, then rename to @nx/js/babel. - const found = babelRc.presets[nrwlWebBabelPresetIdx]; - babelRc.presets[nrwlWebBabelPresetIdx] = Array.isArray(found) - ? ['@nx/js/babel', found[1]] - : '@nx/js/babel'; - } else { - // Otherwise, remove from config. - babelRc.presets.splice(nrwlWebBabelPresetIdx, 1); - } - - writeJson(tree, babelRcPath, babelRc); - }); -} diff --git a/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.spec.ts b/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.spec.ts deleted file mode 100644 index 1685f65510..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.spec.ts +++ /dev/null @@ -1,208 +0,0 @@ -import 'nx/src/internal-testing-utils/mock-project-graph'; - -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { - Tree, - readProjectConfiguration, - readJson, - joinPathFragments, - GeneratorsJson, - ProjectConfiguration, - stripIndents, -} from '@nx/devkit'; - -import generator from './move-workspace-generators-to-local-plugin'; - -describe('move-workspace-generators-to-local-plugin', () => { - let tree: Tree; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace(); - }); - - it('should find single workspace generator successfully', async () => { - await workspaceGeneratorGenerator(tree, { - name: 'my-generator', - }); - await generator(tree); - const config = readProjectConfiguration(tree, 'workspace-plugin'); - expect(config.root).toEqual('tools/workspace-plugin'); - - assertValidGenerator(tree, config, 'my-generator'); - }); - - it('should convert multiple workspace generators successfully', async () => { - const generators = [...new Array(10)].map((x) => uniq('generator')); - for (const name of generators) { - await workspaceGeneratorGenerator(tree, { - name, - }); - } - - await generator(tree); - - const config = readProjectConfiguration(tree, 'workspace-plugin'); - expect(config.root).toEqual('tools/workspace-plugin'); - - for (const generator of generators) { - assertValidGenerator(tree, config, generator); - } - }); - - it('should be idempotent', async () => { - const generators = [...new Array(10)].map((x) => uniq('generator')); - for (const name of generators) { - await workspaceGeneratorGenerator(tree, { - name, - }); - } - - await generator(tree); - - const generatorsJson = readJson( - tree, - 'tools/workspace-plugin/generators.json' - ); - - await generator(tree); - expect(readJson(tree, 'tools/workspace-plugin/generators.json')).toEqual( - generatorsJson - ); - - const config = readProjectConfiguration(tree, 'workspace-plugin'); - - for (const generator of generators) { - assertValidGenerator(tree, config, generator); - } - }); - - it('should merge new generators into existing plugin', async () => { - const generators = [...new Array(10)].map((x) => uniq('generator')); - for (const name of generators) { - await workspaceGeneratorGenerator(tree, { - name, - }); - } - - await generator(tree); - - const moreGenerators = [...new Array(5)].map((x) => uniq('generator')); - for (const name of moreGenerators) { - await workspaceGeneratorGenerator(tree, { - name, - }); - } - - await generator(tree); - - const config = readProjectConfiguration(tree, 'workspace-plugin'); - - for (const generator of generators.concat(moreGenerators)) { - assertValidGenerator(tree, config, generator); - } - }); - - it('should update imports that point to a parent directory', async () => { - await workspaceGeneratorGenerator(tree, { - name: 'my-generator', - }); - tree.write('tools/utils/index.ts', 'export default function someUtil() {}'); - tree.write( - 'tools/generators/my-generator/index.ts', - 'import { someUtil } from "../../utils";' - ); - tree.write( - 'tools/generators/my-generator/lib/index.ts', - 'import { someUtil } from "../../../utils";' - ); - await generator(tree); - - const config = readProjectConfiguration(tree, 'workspace-plugin'); - const generatorImplPath = joinPathFragments( - config.root, - 'src/generators/my-generator/index.ts' - ); - const generatorImpl = tree.read(generatorImplPath).toString('utf-8'); - expect(generatorImpl).toContain( - `import { someUtil } from '../../../../utils';` - ); - const generatorLibImplPath = joinPathFragments( - config.root, - 'src/generators/my-generator/lib/index.ts' - ); - const generatorLibImpl = tree.read(generatorLibImplPath).toString('utf-8'); - expect(generatorLibImpl).toContain( - `import { someUtil } from '../../../../../utils';` - ); - }); -}); - -function assertValidGenerator( - tree: Tree, - config: ProjectConfiguration, - generator: string -) { - const generatorsJson = readJson( - tree, - joinPathFragments(config.root, 'generators.json') - ); - expect(generatorsJson.generators).toHaveProperty(generator); - const generatorImplPath = joinPathFragments( - config.root, - generatorsJson.generators[generator].implementation, - 'index.ts' - ); - expect(tree.exists(generatorImplPath)).toBeTruthy(); - const generatorSchemaPath = joinPathFragments( - config.root, - generatorsJson.generators[generator].schema - ); - expect(tree.exists(generatorSchemaPath)).toBeTruthy(); -} - -function uniq(prefix: string) { - return `${prefix}${Math.floor(Math.random() * 10000000)}`; -} - -async function workspaceGeneratorGenerator( - host: Tree, - schema: { name: string } -) { - const outputDirectory = joinPathFragments('tools/generators', schema.name); - - host.write( - joinPathFragments(outputDirectory, 'index.ts'), - stripIndents`import { Tree, formatFiles, installPackagesTask } from '@nx/devkit'; - import { libraryGenerator } from '@nx/workspace/generators'; - - export default async function(tree: Tree, schema: any) { - await libraryGenerator(tree, {name: schema.name}); - await formatFiles(tree); - return () => { - installPackagesTask(tree) - } - }` - ); - - host.write( - joinPathFragments(outputDirectory, 'schema.json'), - stripIndents`{ - "$schema": "https://json-schema.org/schema", - "cli": "nx", - "$id": "<%= name %>", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Library name", - "$default": { - "$source": "argv", - "index": 0 - } - } - }, - "required": ["name"] - } - ` - ); -} diff --git a/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.ts b/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.ts deleted file mode 100644 index e2f2625d74..0000000000 --- a/packages/workspace/src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { - addDependenciesToPackageJson, - ensurePackage, - formatFiles, - getProjects, - getWorkspaceLayout, - joinPathFragments, - output, - ProjectConfiguration, - readJson, - readProjectConfiguration, - Tree, - updateJson, -} from '@nx/devkit'; -// nx-ignore-next-line -import * as path from 'path'; -import { - GeneratorsJson, - GeneratorsJsonEntry, -} from 'nx/src/config/misc-interfaces'; -import { moveGenerator } from '../../generators/move/move'; -import { nxVersion } from '../../utils/versions'; -import { PackageJson } from 'nx/src/utils/package-json'; -import { posix } from 'path'; -import { getNpmScope } from '../../utilities/get-import-path'; - -const PROJECT_NAME = 'workspace-plugin'; -const DESTINATION = `tools/${PROJECT_NAME}`; - -export default async function (tree: Tree) { - if (!tree.exists('tools/generators')) { - return; - } - const tasks = []; - if (hasWorkspaceGenerators(tree)) { - tasks.push(...(await moveWorkspaceGeneratorsToLocalPlugin(tree))); - } - removeToolsGeneratorsIfEmpty(tree); - await formatFiles(tree); - return () => { - for (const task of tasks) { - task(); - } - }; -} - -async function moveWorkspaceGeneratorsToLocalPlugin(tree: Tree) { - const tasks = []; - let project = getProjects(tree).get(PROJECT_NAME); - if (!project) { - await createNewPlugin(tree); - tasks.push( - addDependenciesToPackageJson( - tree, - {}, - { - '@nx/plugin': nxVersion, - } - ) - ); - project = readProjectConfiguration(tree, PROJECT_NAME); - } - updateExistingPlugin(tree, project); - return tasks; -} - -function hasWorkspaceGenerators(tree: Tree) { - const children = tree.children('tools/generators'); - return ( - children.length > 0 && - !(children.length === 1 && children[0] === '.gitkeep') - ); -} - -function removeToolsGeneratorsIfEmpty(tree: Tree) { - if (!hasWorkspaceGenerators(tree)) { - tree.delete('tools/generators'); - } -} - -// Inspired by packages/nx/src/command-line/workspace-generators.ts -function collectAndMoveGenerators(tree: Tree, destinationProjectRoot: string) { - const generators: Record = {}; - const generatorsDir = 'tools/generators'; - const destinationDir = joinPathFragments( - destinationProjectRoot, - 'src', - 'generators' - ); - for (const c of tree.children('tools/generators')) { - const childDir = path.join(generatorsDir, c); - const schemaPath = joinPathFragments(childDir, 'schema.json'); - if (tree.exists(schemaPath)) { - const schema = readJson(tree, schemaPath); - generators[c] = { - implementation: `./src/generators/${c}`, - schema: `./src/generators/${joinPathFragments(c, 'schema.json')}`, - description: schema.description ?? `Generator ${c}`, - }; - moveFilesInDirectory( - tree, - childDir, - joinPathFragments(destinationDir, c) - ); - } - } - return generators; -} - -function moveFilesInDirectory(tree: Tree, source: string, destination: string) { - const relative = posix.relative(source, posix.dirname(destination)); - if (!relative.startsWith('../')) { - // If the destination is in the same directory or a subdirectory of the source - // we can just move the files. If it is not, we need to update the relative imports. - return; - } - let offsetLevel = 0; - const pathParts = relative.split('/'); - for (const part of pathParts) { - if (part === '..') { - offsetLevel++; - } else { - break; - } - } - for (const c of tree.children(source)) { - if (!tree.isFile(c)) { - moveFilesInDirectory( - tree, - joinPathFragments(source, c), - joinPathFragments(destination, c) - ); - } - tree.rename( - joinPathFragments(source, c), - joinPathFragments(destination, c) - ); - // If its a TS file we can update relative imports with find + replace - // This could be done with AST, but since we are only looking at relative - // imports its easy to do via string replace. We replace any strings starting - // with a relative path outside of their own directory. - if (c.endsWith('.ts')) { - let content = tree.read(joinPathFragments(destination, c)).toString(); - // +2 is a bit of a magic number here - represents extra directory levels in a normal - // plugin structure compared to the workspace-generator layout - const extraDirectoriesInPluginStructure = 2; - content = content.replace( - new RegExp(`'` + `\.\.\/`.repeat(offsetLevel), 'g'), - "'" + '../'.repeat(offsetLevel + extraDirectoriesInPluginStructure) - ); - content = content.replace( - new RegExp(`"` + `\.\.\/`.repeat(offsetLevel), 'g'), - '"' + '../'.repeat(offsetLevel + extraDirectoriesInPluginStructure) - ); - // We write it back in the same spot, since it is moved as if it was a regular file after this - tree.write(joinPathFragments(source, c), content); - } - tree.rename( - joinPathFragments(source, c), - joinPathFragments(destination, c) - ); - } -} - -async function createNewPlugin(tree: Tree) { - ensurePackage('@nx/plugin', nxVersion); - const { pluginGenerator } = - // nx-ignore-next-line - require('@nx/plugin/src/generators/plugin/plugin'); - - // nx-ignore-next-line - const { Linter } = ensurePackage('@nx/eslint', nxVersion); - - const npmScope = getNpmScope(tree); - const importPath = npmScope ? `@${npmScope}/${PROJECT_NAME}` : PROJECT_NAME; - - await pluginGenerator(tree, { - minimal: true, - directory: PROJECT_NAME, - importPath: importPath, - skipTsConfig: false, - compiler: 'tsc', - linter: Linter.EsLint, - skipFormat: true, - skipLintChecks: false, - unitTestRunner: 'jest', - e2eTestRunner: 'none', - publishable: false, - }); - await getCreateGeneratorsJson()( - tree, - readProjectConfiguration(tree, PROJECT_NAME).root, - PROJECT_NAME - ); - await moveGeneratedPlugin(tree, DESTINATION, importPath); -} - -function moveGeneratedPlugin( - tree: Tree, - destination: string, - importPath: string -) { - const config = readProjectConfiguration(tree, PROJECT_NAME); - if (config.root !== DESTINATION) { - return moveGenerator(tree, { - destination, - projectName: PROJECT_NAME, - newProjectName: PROJECT_NAME, - updateImportPath: true, - importPath: importPath, - }); - } -} - -function updateExistingPlugin(tree: Tree, project: ProjectConfiguration) { - const packageJson = readJson( - tree, - joinPathFragments(project.root, 'package.json') - ); - const defaultGeneratorsPath = joinPathFragments( - project.root, - 'generators.json' - ); - let generatorsJsonPath = - packageJson.generators || - packageJson.schematics || - tree.exists(defaultGeneratorsPath) - ? defaultGeneratorsPath - : null; - if (!generatorsJsonPath) { - getCreateGeneratorsJson()( - tree, - readProjectConfiguration(tree, PROJECT_NAME).root, - PROJECT_NAME - ); - generatorsJsonPath = defaultGeneratorsPath; - } - updateJson(tree, generatorsJsonPath, (json) => { - const generators = collectAndMoveGenerators(tree, project.root); - json.generators ??= {}; - for (const generator in generators) { - if (json.generators[generator]) { - output.warn({ - title: `Generator ${generator} already exists in ${project.name}`, - bodyLines: [ - 'Since you have a generator with the same name in your plugin, the generator from workspace-generators has been discarded.', - ], - }); - } else { - json.generators[generator] = generators[generator]; - } - } - return json; - }); -} - -function getCreateGeneratorsJson(): ( - host: Tree, - projectRoot: string, - projectName: string, - skipLintChecks?: boolean, - skipFormat?: boolean -) => Promise { - // We cant use `as typeof import('@nx/plugin/src/generators/generator/generator');` here - // because it will cause a typescript error at build time. - const { createGeneratorsJson } = - // nx-ignore-next-line - require('@nx/plugin/src/generators/generator/generator'); - return createGeneratorsJson; -}