diff --git a/packages/js/src/executors/swc/swc.impl.ts b/packages/js/src/executors/swc/swc.impl.ts index 23c2b0367cba6..19002b39e3cb4 100644 --- a/packages/js/src/executors/swc/swc.impl.ts +++ b/packages/js/src/executors/swc/swc.impl.ts @@ -2,7 +2,7 @@ import { ExecutorContext, readJsonFile } from '@nx/devkit'; import { assetGlobsToFiles, FileInputOutput } from '../../utils/assets/assets'; import { removeSync } from 'fs-extra'; import { sync as globSync } from 'fast-glob'; -import { dirname, join, relative, resolve } from 'path'; +import { dirname, join, relative, resolve, normalize } from 'path'; import { copyAssets } from '../../utils/assets'; import { checkDependencies } from '../../utils/check-dependencies'; import { @@ -66,7 +66,7 @@ function normalizeOptions( // default to current directory if projectRootParts is []. // Eg: when a project is at the root level, outside of layout dir const swcCwd = projectRootParts.join('/') || '.'; - const swcrcPath = getSwcrcPath(options, root, projectRoot); + const { swcrcPath, tmpSwcrcPath } = getSwcrcPath(options, root, projectRoot); const swcCliOptions = { srcPath: projectDir, @@ -89,6 +89,7 @@ function normalizeOptions( outputPath, tsConfig: join(root, options.tsConfig), swcCliOptions, + tmpSwcrcPath, } as NormalizedSwcExecutorOptions; } @@ -131,17 +132,18 @@ export async function* swcExecutor( // remap paths for SWC compilation options.swcCliOptions.srcPath = options.swcCliOptions.swcCwd; options.swcCliOptions.swcCwd = '.'; - options.swcCliOptions.destPath = options.swcCliOptions.destPath - .split('../') - .at(-1) - .concat('/', options.swcCliOptions.srcPath); + options.swcCliOptions.destPath = join( + options.swcCliOptions.destPath.split(normalize('../')).at(-1), + options.swcCliOptions.srcPath + ); // tmp swcrc with dependencies to exclude // - buildable libraries // - other libraries that are not dependent on the current project options.swcCliOptions.swcrcPath = generateTmpSwcrc( inlineProjectGraph, - options.swcCliOptions.swcrcPath + options.swcCliOptions.swcrcPath, + options.tmpSwcrcPath ); } @@ -206,7 +208,10 @@ export async function* swcExecutor( } function removeTmpSwcrc(swcrcPath: string) { - if (swcrcPath.includes('tmp/') && swcrcPath.includes('.generated.swcrc')) { + if ( + swcrcPath.includes(normalize('tmp/')) && + swcrcPath.includes('.generated.swcrc') + ) { removeSync(dirname(swcrcPath)); } } diff --git a/packages/js/src/utils/schema.d.ts b/packages/js/src/utils/schema.d.ts index b5fc85fb170b4..0a82243ba2e9c 100644 --- a/packages/js/src/utils/schema.d.ts +++ b/packages/js/src/utils/schema.d.ts @@ -83,4 +83,5 @@ export interface NormalizedSwcExecutorOptions swcExclude: string[]; skipTypeCheck: boolean; swcCliOptions: SwcCliOptions; + tmpSwcrcPath: string; } diff --git a/packages/js/src/utils/swc/get-swcrc-path.ts b/packages/js/src/utils/swc/get-swcrc-path.ts index cc4acdbb1b9c4..bb98b522a08c5 100644 --- a/packages/js/src/utils/swc/get-swcrc-path.ts +++ b/packages/js/src/utils/swc/get-swcrc-path.ts @@ -6,7 +6,19 @@ export function getSwcrcPath( contextRoot: string, projectRoot: string ) { - return options.swcrc + const swcrcPath = options.swcrc ? join(contextRoot, options.swcrc) : join(contextRoot, projectRoot, '.swcrc'); + + const tmpSwcrcPath = join( + contextRoot, + projectRoot, + 'tmp', + '.generated.swcrc' + ); + + return { + swcrcPath, + tmpSwcrcPath, + }; } diff --git a/packages/js/src/utils/swc/inline.ts b/packages/js/src/utils/swc/inline.ts index f8bcd83f265dd..1a55fed1661ea 100644 --- a/packages/js/src/utils/swc/inline.ts +++ b/packages/js/src/utils/swc/inline.ts @@ -3,7 +3,8 @@ import type { InlineProjectGraph } from '../inline'; export function generateTmpSwcrc( inlineProjectGraph: InlineProjectGraph, - swcrcPath: string + swcrcPath: string, + tmpSwcrcPath: string ) { const swcrc = readJsonFile(swcrcPath); @@ -14,7 +15,6 @@ export function generateTmpSwcrc( 'node_modules/**/*.ts$' ); - const tmpSwcrcPath = `tmp${swcrcPath}`; writeJsonFile(tmpSwcrcPath, swcrc); return tmpSwcrcPath;