|
1 | 1 | import { select } from '@inquirer/prompts'; |
| 2 | +import { createRequire } from 'node:module'; |
2 | 3 | import path from 'node:path'; |
3 | 4 | import { |
4 | 5 | MONOREPO_TOOL_DETECTORS, |
|
8 | 9 | hasScript, |
9 | 10 | listPackages, |
10 | 11 | listWorkspaces, |
11 | | - loadNxProjectGraph, |
12 | 12 | logger, |
13 | 13 | readPnpmWorkspacePatterns, |
| 14 | + stringifyError, |
14 | 15 | toUnixPath, |
15 | 16 | } from '@code-pushup/utils'; |
16 | 17 | import type { |
@@ -83,7 +84,15 @@ export async function listProjects( |
83 | 84 | } |
84 | 85 |
|
85 | 86 | async function listNxProjects(cwd: string): Promise<WizardProject[]> { |
86 | | - const graph = await loadNxProjectGraph(); |
| 87 | + const require = createRequire(path.join(cwd, 'package.json')); |
| 88 | + const { readCachedProjectGraph, createProjectGraphAsync } = |
| 89 | + require('@nx/devkit') as typeof import('@nx/devkit'); |
| 90 | + |
| 91 | + const graph = await loadProjectGraph( |
| 92 | + readCachedProjectGraph, |
| 93 | + createProjectGraphAsync, |
| 94 | + ); |
| 95 | + |
87 | 96 | return Object.values(graph.nodes).map(({ name, data }) => ({ |
88 | 97 | name, |
89 | 98 | directory: path.join(cwd, data.root), |
@@ -133,7 +142,7 @@ async function addNxTarget( |
133 | 142 | return false; |
134 | 143 | } |
135 | 144 | const config = JSON.parse(raw); |
136 | | - if (config.targets[TASK_NAME] != null) { |
| 145 | + if (config.targets?.[TASK_NAME] != null) { |
137 | 146 | return true; |
138 | 147 | } |
139 | 148 | const updated = { |
@@ -180,3 +189,17 @@ function toProject(cwd: string, pkg: WorkspacePackage): WizardProject { |
180 | 189 | relativeDir: toUnixPath(path.relative(cwd, pkg.directory)), |
181 | 190 | }; |
182 | 191 | } |
| 192 | + |
| 193 | +async function loadProjectGraph( |
| 194 | + readCached: typeof import('@nx/devkit').readCachedProjectGraph, |
| 195 | + createAsync: typeof import('@nx/devkit').createProjectGraphAsync, |
| 196 | +) { |
| 197 | + try { |
| 198 | + return readCached(); |
| 199 | + } catch (error) { |
| 200 | + logger.warn( |
| 201 | + `Could not read cached project graph, falling back to async creation.\n${stringifyError(error)}`, |
| 202 | + ); |
| 203 | + return createAsync({ exitOnError: false }); |
| 204 | + } |
| 205 | +} |
0 commit comments