From 46e5dcefb0b4509c6e1784f09dd014576fa2eff7 Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Thu, 20 Feb 2025 20:53:44 +0000 Subject: [PATCH] fix(js): use uuid when generating tmp tsconfig (#30118) ## Current Behavior When multiple processes/tasks are running in parallel for a single project that produce tmp tsconfig files for buildable libraries, they can clobber each other. ## Expected Behavior Ensure the config file is generated with a unique id to prevent clobbering --- packages/js/src/utils/buildable-libs-utils.ts | 3 ++- packages/vite/plugins/nx-tsconfig-paths.plugin.ts | 15 ++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/js/src/utils/buildable-libs-utils.ts b/packages/js/src/utils/buildable-libs-utils.ts index 454b0c3813..d09048487a 100644 --- a/packages/js/src/utils/buildable-libs-utils.ts +++ b/packages/js/src/utils/buildable-libs-utils.ts @@ -19,6 +19,7 @@ import { output } from 'nx/src/utils/output'; import { dirname, join, relative, extname, resolve } from 'path'; import type * as ts from 'typescript'; import { readTsConfigPaths } from './typescript/ts-config'; +import { randomUUID } from 'crypto'; function isBuildable(target: string, node: ProjectGraphProjectNode): boolean { return ( @@ -443,7 +444,7 @@ export function createTmpTsConfig( 'tmp', projectRoot, process.env.NX_TASK_TARGET_TARGET ?? 'build', - 'tsconfig.generated.json' + `tsconfig.generated.${randomUUID()}.json` ); if (tsconfigPath === tmpTsConfigPath) { return tsconfigPath; diff --git a/packages/vite/plugins/nx-tsconfig-paths.plugin.ts b/packages/vite/plugins/nx-tsconfig-paths.plugin.ts index 5c21bae0ca..eb26044db5 100644 --- a/packages/vite/plugins/nx-tsconfig-paths.plugin.ts +++ b/packages/vite/plugins/nx-tsconfig-paths.plugin.ts @@ -80,13 +80,14 @@ export function nxViteTsPaths(options: nxViteTsPathsOptions = {}) { projectRoot = config.root; const projectRootFromWorkspaceRoot = relative(workspaceRoot, projectRoot); let foundTsConfigPath = getTsConfig( - join( - workspaceRoot, - 'tmp', - projectRootFromWorkspaceRoot, - process.env.NX_TASK_TARGET_TARGET ?? 'build', - 'tsconfig.generated.json' - ) + process.env.NX_TSCONFIG_PATH ?? + join( + workspaceRoot, + 'tmp', + projectRootFromWorkspaceRoot, + process.env.NX_TASK_TARGET_TARGET ?? 'build', + 'tsconfig.generated.json' + ) ); if (!foundTsConfigPath) { throw new Error(stripIndents`Unable to find a tsconfig in the workspace!