From 2db82dd36d973bbacde973c62438904e2bedb861 Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Thu, 19 Dec 2024 14:09:57 +0000 Subject: [PATCH] feat(rsbuild): move plugin export to root of package (#29415) ## Current Behavior The Rsbuild plugin is exported at `@nx/rsbuild/plugin` ## Expected Behavior Export the plugin from `@nx/rsbuild` i.e. the root of the package. --- .../src/generators/application/lib/add-e2e.ts | 3 +- .../react/src/utils/has-rsbuild-plugin.ts | 14 ++++---- packages/rsbuild/config-utils.ts | 1 + packages/rsbuild/index.ts | 1 + packages/rsbuild/package.json | 4 --- packages/rsbuild/plugin.ts | 1 - packages/rsbuild/src/generators/init/init.ts | 2 +- packages/rsbuild/src/plugins/plugin.spec.ts | 2 +- .../src/utils/e2e-web-server-info-utils.ts | 2 +- .../rsbuild/src/utils/has-rsbuild-plugin.ts | 33 +++++++++++++++++++ .../application/application.spec.ts | 4 +-- .../src/generators/application/lib/add-e2e.ts | 7 ++-- packages/vue/src/utils/has-rsbuild-plugin.ts | 8 +++++ 13 files changed, 58 insertions(+), 24 deletions(-) delete mode 100644 packages/rsbuild/plugin.ts create mode 100644 packages/rsbuild/src/utils/has-rsbuild-plugin.ts create mode 100644 packages/vue/src/utils/has-rsbuild-plugin.ts diff --git a/packages/react/src/generators/application/lib/add-e2e.ts b/packages/react/src/generators/application/lib/add-e2e.ts index 3335fa3b3b..9c02dde733 100644 --- a/packages/react/src/generators/application/lib/add-e2e.ts +++ b/packages/react/src/generators/application/lib/add-e2e.ts @@ -27,7 +27,8 @@ export async function addE2e( const hasNxBuildPlugin = (options.bundler === 'webpack' && hasWebpackPlugin(tree)) || (options.bundler === 'rspack' && hasRspackPlugin(tree)) || - (options.bundler === 'rsbuild' && hasRsbuildPlugin(tree)) || + (options.bundler === 'rsbuild' && + (await hasRsbuildPlugin(tree, options.appProjectRoot))) || (options.bundler === 'vite' && hasVitePlugin(tree)); let e2eWebServerInfo: E2EWebServerDetails = { diff --git a/packages/react/src/utils/has-rsbuild-plugin.ts b/packages/react/src/utils/has-rsbuild-plugin.ts index 3f53aedbd6..1f67ffa9e2 100644 --- a/packages/react/src/utils/has-rsbuild-plugin.ts +++ b/packages/react/src/utils/has-rsbuild-plugin.ts @@ -1,10 +1,8 @@ -import { readNxJson, Tree } from '@nx/devkit'; +import { ensurePackage, Tree } from '@nx/devkit'; +import { nxVersion } from './versions'; -export function hasRsbuildPlugin(tree: Tree) { - const nxJson = readNxJson(tree); - return !!nxJson.plugins?.some((p) => - typeof p === 'string' - ? p === '@nx/rsbuild/plugin' - : p.plugin === '@nx/rsbuild/plugin' - ); +export async function hasRsbuildPlugin(tree: Tree, projectPath?: string) { + ensurePackage('@nx/rsbuild', nxVersion); + const { hasRsbuildPlugin } = await import('@nx/rsbuild/config-utils'); + return hasRsbuildPlugin(tree, projectPath); } diff --git a/packages/rsbuild/config-utils.ts b/packages/rsbuild/config-utils.ts index 5bb3ac0938..9a12e0e32b 100644 --- a/packages/rsbuild/config-utils.ts +++ b/packages/rsbuild/config-utils.ts @@ -6,3 +6,4 @@ export { } from './src/utils/ast-utils'; export * as versions from './src/utils/versions'; export { getRsbuildE2EWebServerInfo } from './src/utils/e2e-web-server-info-utils'; +export { hasRsbuildPlugin } from './src/utils/has-rsbuild-plugin'; diff --git a/packages/rsbuild/index.ts b/packages/rsbuild/index.ts index e69de29bb2..9d72a71f15 100644 --- a/packages/rsbuild/index.ts +++ b/packages/rsbuild/index.ts @@ -0,0 +1 @@ +export { createNodesV2, RsbuildPluginOptions } from './src/plugins/plugin'; diff --git a/packages/rsbuild/package.json b/packages/rsbuild/package.json index c6efe40828..cf1aa3f150 100644 --- a/packages/rsbuild/package.json +++ b/packages/rsbuild/package.json @@ -55,10 +55,6 @@ "./config-utils": { "types": "./config-utils.d.ts", "default": "./config-utils.js" - }, - "./plugin": { - "types": "./plugin.d.ts", - "default": "./plugin.js" } } } diff --git a/packages/rsbuild/plugin.ts b/packages/rsbuild/plugin.ts deleted file mode 100644 index 9d72a71f15..0000000000 --- a/packages/rsbuild/plugin.ts +++ /dev/null @@ -1 +0,0 @@ -export { createNodesV2, RsbuildPluginOptions } from './src/plugins/plugin'; diff --git a/packages/rsbuild/src/generators/init/init.ts b/packages/rsbuild/src/generators/init/init.ts index b070638d1d..e1098e73d9 100644 --- a/packages/rsbuild/src/generators/init/init.ts +++ b/packages/rsbuild/src/generators/init/init.ts @@ -43,7 +43,7 @@ export async function initGeneratorInternal( await addPlugin( tree, await createProjectGraphAsync(), - '@nx/rsbuild/plugin', + '@nx/rsbuild', createNodesV2, { buildTargetName: ['build', 'rsbuild:build', 'rsbuild-build'], diff --git a/packages/rsbuild/src/plugins/plugin.spec.ts b/packages/rsbuild/src/plugins/plugin.spec.ts index 7249fcacd6..668d54a6a7 100644 --- a/packages/rsbuild/src/plugins/plugin.spec.ts +++ b/packages/rsbuild/src/plugins/plugin.spec.ts @@ -15,7 +15,7 @@ jest.mock('@nx/js/src/utils/typescript/ts-solution-setup', () => ({ isUsingTsSolutionSetup: jest.fn().mockReturnValue(false), })); -describe('@nx/rsbuild/plugin', () => { +describe('@nx/rsbuild', () => { let createNodesFunction = createNodesV2[1]; let context: CreateNodesContext; let tempFs: TempFs; diff --git a/packages/rsbuild/src/utils/e2e-web-server-info-utils.ts b/packages/rsbuild/src/utils/e2e-web-server-info-utils.ts index 37630d1cab..d3d4f7a7da 100644 --- a/packages/rsbuild/src/utils/e2e-web-server-info-utils.ts +++ b/packages/rsbuild/src/utils/e2e-web-server-info-utils.ts @@ -22,7 +22,7 @@ export async function getRsbuildE2EWebServerInfo( tree, projectName, { - plugin: '@nx/rsbuild/plugin', + plugin: '@nx/rsbuild', serveTargetName: 'devTargetName', serveStaticTargetName: 'previewTargetName', configFilePath, diff --git a/packages/rsbuild/src/utils/has-rsbuild-plugin.ts b/packages/rsbuild/src/utils/has-rsbuild-plugin.ts new file mode 100644 index 0000000000..ec026cd8f4 --- /dev/null +++ b/packages/rsbuild/src/utils/has-rsbuild-plugin.ts @@ -0,0 +1,33 @@ +import { type Tree, readNxJson } from '@nx/devkit'; +import { minimatch } from 'minimatch'; + +export function hasRsbuildPlugin(tree: Tree, projectPath?: string) { + const nxJson = readNxJson(tree); + if (!projectPath) { + return !!nxJson.plugins?.some((p) => + typeof p === 'string' ? p === '@nx/rsbuild' : p.plugin === '@nx/rsbuild' + ); + } + return !!nxJson.plugins?.some((p) => { + if (typeof p === 'string') { + return p === '@nx/rsbuild'; + } + if (p.exclude) { + for (const exclude of p.exclude) { + if (minimatch(projectPath, exclude)) { + return false; + } + } + } + if (p.include) { + for (const include of p.include) { + if (minimatch(projectPath, include)) { + return true; + } + } + } + + // if no include or exclude, then it's a match + return true; + }); +} diff --git a/packages/vue/src/generators/application/application.spec.ts b/packages/vue/src/generators/application/application.spec.ts index 08b4a37b14..39e3e5e4c9 100644 --- a/packages/vue/src/generators/application/application.spec.ts +++ b/packages/vue/src/generators/application/application.spec.ts @@ -114,7 +114,7 @@ describe('application generator', () => { expect(listFiles(tree)).toMatchSnapshot(); expect( readNxJson(tree).plugins.find( - (p) => typeof p !== 'string' && p.plugin === '@nx/rsbuild/plugin' + (p) => typeof p !== 'string' && p.plugin === '@nx/rsbuild' ) ).toMatchInlineSnapshot(` { @@ -125,7 +125,7 @@ describe('application generator', () => { "previewTargetName": "preview", "typecheckTargetName": "typecheck", }, - "plugin": "@nx/rsbuild/plugin", + "plugin": "@nx/rsbuild", } `); }); diff --git a/packages/vue/src/generators/application/lib/add-e2e.ts b/packages/vue/src/generators/application/lib/add-e2e.ts index 804dd79bd4..53fe8fc22a 100644 --- a/packages/vue/src/generators/application/lib/add-e2e.ts +++ b/packages/vue/src/generators/application/lib/add-e2e.ts @@ -8,6 +8,7 @@ import { import { webStaticServeGenerator } from '@nx/web'; import { nxVersion } from '../../../utils/versions'; +import { hasRsbuildPlugin } from '../../../utils/has-rsbuild-plugin'; import { NormalizedSchema } from '../schema'; import { findPluginForConfigFile } from '@nx/devkit/src/utils/find-plugin-for-config-file'; import { addE2eCiTargetDefaults } from '@nx/devkit/src/generators/target-defaults-utils'; @@ -20,11 +21,7 @@ export async function addE2e( const nxJson = readNxJson(tree); const hasPlugin = options.bundler === 'rsbuild' - ? nxJson.plugins?.find((p) => - typeof p === 'string' - ? p === '@nx/rsbuild/plugin' - : p.plugin === '@nx/rsbuild/plugin' - ) + ? await hasRsbuildPlugin(tree, options.appProjectRoot) : nxJson.plugins?.find((p) => typeof p === 'string' ? p === '@nx/vite/plugin' diff --git a/packages/vue/src/utils/has-rsbuild-plugin.ts b/packages/vue/src/utils/has-rsbuild-plugin.ts new file mode 100644 index 0000000000..1f67ffa9e2 --- /dev/null +++ b/packages/vue/src/utils/has-rsbuild-plugin.ts @@ -0,0 +1,8 @@ +import { ensurePackage, Tree } from '@nx/devkit'; +import { nxVersion } from './versions'; + +export async function hasRsbuildPlugin(tree: Tree, projectPath?: string) { + ensurePackage('@nx/rsbuild', nxVersion); + const { hasRsbuildPlugin } = await import('@nx/rsbuild/config-utils'); + return hasRsbuildPlugin(tree, projectPath); +}