Skip to content

Commit 1861d6e

Browse files
authored
fix(core): report should not include non-plugin packages as local plugins (#18306)
1 parent 6b43833 commit 1861d6e

File tree

5 files changed

+34
-12
lines changed

5 files changed

+34
-12
lines changed

packages/nx/src/command-line/generate/generate.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ async function promptForCollection(
5454
interactive: boolean,
5555
projectsConfiguration: ProjectsConfigurations
5656
): Promise<string> {
57-
const localPlugins = await getLocalWorkspacePlugins(projectsConfiguration);
57+
const localPlugins = await getLocalWorkspacePlugins(
58+
projectsConfiguration,
59+
readNxJson()
60+
);
5861

5962
const installedCollections = Array.from(
6063
new Set(findInstalledPlugins().map((x) => x.name))

packages/nx/src/command-line/list/list.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
createProjectGraphAsync,
1616
readProjectsConfigurationFromProjectGraph,
1717
} from '../../project-graph/project-graph';
18+
import { readNxJson } from '../../config/nx-json';
1819

1920
export interface ListArgs {
2021
/** The name of an installed plugin to query */
@@ -33,11 +34,13 @@ export async function listHandler(args: ListArgs): Promise<void> {
3334
if (args.plugin) {
3435
await listPluginCapabilities(args.plugin);
3536
} else {
37+
const nxJson = readNxJson();
3638
const corePlugins = fetchCorePlugins();
3739
const projectGraph = await createProjectGraphAsync({ exitOnError: true });
3840

3941
const localPlugins = await getLocalWorkspacePlugins(
40-
readProjectsConfigurationFromProjectGraph(projectGraph)
42+
readProjectsConfigurationFromProjectGraph(projectGraph),
43+
nxJson
4144
);
4245
const installedPlugins = await getInstalledPluginsAndCapabilities(
4346
workspaceRoot

packages/nx/src/command-line/report/report.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
import { gt, valid } from 'semver';
2121
import { findInstalledPlugins } from '../../utils/plugins/installed-plugins';
2222
import { getNxRequirePaths } from '../../utils/installation-directory';
23+
import { NxJsonConfiguration, readNxJson } from '../../config/nx-json';
2324

2425
const nxPackageJson = readJsonFile<typeof import('../../../package.json')>(
2526
join(__dirname, '../../../package.json')
@@ -148,7 +149,7 @@ export async function getReportData(): Promise<ReportData> {
148149
const pm = detectPackageManager();
149150
const pmVersion = getPackageManagerVersion(pm);
150151

151-
const localPlugins = await findLocalPlugins();
152+
const localPlugins = await findLocalPlugins(readNxJson());
152153
const communityPlugins = findInstalledCommunityPlugins();
153154

154155
let projectGraphError: Error | null = null;
@@ -185,11 +186,12 @@ export async function getReportData(): Promise<ReportData> {
185186
};
186187
}
187188

188-
async function findLocalPlugins() {
189+
async function findLocalPlugins(nxJson: NxJsonConfiguration) {
189190
try {
190191
const projectGraph = await createProjectGraphAsync({ exitOnError: true });
191192
const localPlugins = await getLocalWorkspacePlugins(
192-
readProjectsConfigurationFromProjectGraph(projectGraph)
193+
readProjectsConfigurationFromProjectGraph(projectGraph),
194+
nxJson
193195
);
194196
return Array.from(localPlugins.keys());
195197
} catch {

packages/nx/src/utils/plugins/local-plugins.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,29 @@ import { join } from 'path';
99
import { workspaceRoot } from '../workspace-root';
1010
import { existsSync } from 'fs';
1111
import { getPluginCapabilities } from './plugin-capabilities';
12+
import { NxJsonConfiguration, readNxJson } from '../../config/nx-json';
1213

1314
export async function getLocalWorkspacePlugins(
14-
projectsConfiguration: ProjectsConfigurations
15+
projectsConfiguration: ProjectsConfigurations,
16+
nxJson: NxJsonConfiguration
1517
): Promise<Map<string, PluginCapabilities>> {
1618
const plugins: Map<string, PluginCapabilities> = new Map();
1719
for (const project of Object.values(projectsConfiguration.projects)) {
1820
const packageJsonPath = join(workspaceRoot, project.root, 'package.json');
1921
if (existsSync(packageJsonPath)) {
2022
const packageJson: PackageJson = readJsonFile(packageJsonPath);
23+
const includeRuntimeCapabilities = nxJson?.plugins?.some((p) =>
24+
p.startsWith(packageJson.name)
25+
);
2126
const capabilities = await getPluginCapabilities(
2227
workspaceRoot,
23-
packageJson.name
28+
packageJson.name,
29+
includeRuntimeCapabilities
2430
);
2531
if (
2632
capabilities &&
27-
(capabilities.executors ||
28-
capabilities.generators ||
33+
(Object.keys(capabilities.executors ?? {}).length ||
34+
Object.keys(capabilities.generators ?? {}).length ||
2935
capabilities.projectGraphExtension ||
3036
capabilities.projectInference)
3137
) {
@@ -36,7 +42,6 @@ export async function getLocalWorkspacePlugins(
3642
}
3743
}
3844
}
39-
4045
return plugins;
4146
}
4247

@@ -53,6 +58,12 @@ export function listLocalWorkspacePlugins(
5358
if (hasElements(p.generators)) {
5459
capabilities.push('generators');
5560
}
61+
if (p.projectGraphExtension) {
62+
capabilities.push('graph-extension');
63+
}
64+
if (p.projectInference) {
65+
capabilities.push('project-inference');
66+
}
5667
bodyLines.push(`${chalk.bold(p.name)} (${capabilities.join()})`);
5768
}
5869

packages/nx/src/utils/plugins/plugin-capabilities.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ function tryGetCollection<T extends object>(
3333

3434
export async function getPluginCapabilities(
3535
workspaceRoot: string,
36-
pluginName: string
36+
pluginName: string,
37+
includeRuntimeCapabilities = false
3738
): Promise<PluginCapabilities | null> {
3839
try {
3940
const { json: packageJson, path: packageJsonPath } = readPluginPackageJson(
4041
pluginName,
4142
getNxRequirePaths(workspaceRoot)
4243
);
43-
const pluginModule = await tryGetModule(packageJson, workspaceRoot);
44+
const pluginModule = includeRuntimeCapabilities
45+
? await tryGetModule(packageJson, workspaceRoot)
46+
: ({} as Record<string, unknown>);
4447
return {
4548
name: pluginName,
4649
generators: {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy