diff --git a/.changeset/orange-geckos-cross.md b/.changeset/orange-geckos-cross.md new file mode 100644 index 0000000..ab91c06 --- /dev/null +++ b/.changeset/orange-geckos-cross.md @@ -0,0 +1,5 @@ +--- +"@swc/cli": patch +--- + +fix(cli): Clone config instead of updating it diff --git a/packages/cli/src/swc/dir.ts b/packages/cli/src/swc/dir.ts index 78733ca..f39b565 100644 --- a/packages/cli/src/swc/dir.ts +++ b/packages/cli/src/swc/dir.ts @@ -401,12 +401,20 @@ export default async function dir({ swcOptions: Options; callbacks?: Callbacks; }) { - const { watch } = cliOptions; + // Deep clone the configuration objects to prevent reuse between calls + const clonedCliOptions = JSON.parse(JSON.stringify(cliOptions)); + const clonedSwcOptions = JSON.parse(JSON.stringify(swcOptions)); - await beforeStartCompilation(cliOptions); - await initialCompilation(cliOptions, swcOptions, callbacks); + await beforeStartCompilation(clonedCliOptions); - if (watch) { - await watchCompilation(cliOptions, swcOptions, callbacks); + await initialCompilation(clonedCliOptions, clonedSwcOptions, callbacks); + + if (clonedCliOptions.watch) { + const watcher = await watchCompilation( + clonedCliOptions, + clonedSwcOptions, + callbacks + ); + return watcher; } } diff --git a/packages/cli/src/swc/dirWorker.ts b/packages/cli/src/swc/dirWorker.ts index 53c6673..916c0c3 100644 --- a/packages/cli/src/swc/dirWorker.ts +++ b/packages/cli/src/swc/dirWorker.ts @@ -23,7 +23,10 @@ export default async function handleCompile(opts: { ); const sourceFileName = slash(relative(dirname(dest), opts.filename)); - const options = { ...opts.swcOptions, sourceFileName }; + // Create a deep copy of the options to prevent mutation affecting other compilations + const options = JSON.parse( + JSON.stringify({ ...opts.swcOptions, sourceFileName }) + ); const result = await compile(opts.filename, options, opts.sync, dest);