From 5155abdda048fdf18335bc8bda2c8d87f42a4113 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 06:17:44 +0000 Subject: [PATCH 1/2] Initial plan From b92e72731b948d376ad0b5627d911952cfb05433 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 06:33:27 +0000 Subject: [PATCH 2/2] Port TypeScript PR #62320: Allow --module commonjs --moduleResolution bundler Uncomments and updates the bundler+module compatibility check in verifyCompilerOptions() to allow ModuleKindCommonJS with bundler moduleResolution. Updates the diagnostic to use the new message that includes 'commonjs' in the allowed values list. Updates 4 test baselines and removes 4 .diff files that are no longer needed since Go output now matches TypeScript reference. Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com> --- internal/compiler/program.go | 7 +++---- ...node18,moduleresolution=bundler).errors.txt | 2 ++ ...8,moduleresolution=bundler).errors.txt.diff | 11 ----------- ...node20,moduleresolution=bundler).errors.txt | 2 ++ ...0,moduleresolution=bundler).errors.txt.diff | 11 ----------- ...denext,moduleresolution=bundler).errors.txt | 2 ++ ...t,moduleresolution=bundler).errors.txt.diff | 11 ----------- .../bundlerOptionsCompat.errors.txt | 5 ++++- .../bundlerOptionsCompat.errors.txt.diff | 18 ------------------ 9 files changed, 13 insertions(+), 56 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt.diff delete mode 100644 testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt.diff diff --git a/internal/compiler/program.go b/internal/compiler/program.go index 92cc168290f..67d0b252728 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -925,10 +925,9 @@ func (p *Program) verifyCompilerOptions() { createDiagnosticForOptionName(diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler, "customConditions", "") } - // !!! Reenable once we don't map old moduleResolution kinds to bundler. - // if moduleResolution == core.ModuleResolutionKindBundler && !emitModuleKindIsNonNodeESM(moduleKind) && moduleKind != core.ModuleKindPreserve { - // createOptionValueDiagnostic("moduleResolution", diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later, "bundler") - // } + if moduleResolution == core.ModuleResolutionKindBundler && !emitModuleKindIsNonNodeESM(moduleKind) && moduleKind != core.ModuleKindPreserve && moduleKind != core.ModuleKindCommonJS { + createOptionValueDiagnostic("moduleResolution", diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later, "bundler") + } if core.ModuleKindNode16 <= moduleKind && moduleKind <= core.ModuleKindNodeNext && !(core.ModuleResolutionKindNode16 <= moduleResolution && moduleResolution <= core.ModuleResolutionKindNodeNext) { diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt index 5fb7b80d8d9..35cfa9d7da4 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt @@ -1,6 +1,8 @@ +error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node18'. +!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. !!! error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node18'. ==== /app/test.ts (0 errors) ==== import { test } from '../lib'; diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt.diff deleted file mode 100644 index 70ea38d3b00..00000000000 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt -+++ new.bundlerDirectoryModule(module=node18,moduleresolution=bundler).errors.txt -@@= skipped -0, +0 lines =@@ --error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node18'. - - --!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - !!! error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node18'. - ==== /app/test.ts (0 errors) ==== - import { test } from '../lib'; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt index 6fe3e6e3f29..8f813cbc2b8 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt @@ -1,6 +1,8 @@ +error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node20'. +!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. !!! error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node20'. ==== /app/test.ts (0 errors) ==== import { test } from '../lib'; diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt.diff deleted file mode 100644 index d5fe908ca29..00000000000 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt -+++ new.bundlerDirectoryModule(module=node20,moduleresolution=bundler).errors.txt -@@= skipped -0, +0 lines =@@ --error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node20'. - - --!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - !!! error TS5109: Option 'moduleResolution' must be set to 'Node16' (or left unspecified) when option 'module' is set to 'Node20'. - ==== /app/test.ts (0 errors) ==== - import { test } from '../lib'; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt index b9a6e969653..f21c74773e6 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt +++ b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt @@ -1,6 +1,8 @@ +error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. +!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. !!! error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. ==== /app/test.ts (0 errors) ==== import { test } from '../lib'; diff --git a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt.diff b/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt.diff deleted file mode 100644 index bb8cb1f7065..00000000000 --- a/testdata/baselines/reference/submodule/conformance/bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt -+++ new.bundlerDirectoryModule(module=nodenext,moduleresolution=bundler).errors.txt -@@= skipped -0, +0 lines =@@ --error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. - - --!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - !!! error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. - ==== /app/test.ts (0 errors) ==== - import { test } from '../lib'; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt b/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt index e5e9133062c..9b093341672 100644 --- a/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt @@ -1,12 +1,15 @@ +/tsconfig.json(4,25): error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. /tsconfig.json(4,25): error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. -==== /tsconfig.json (1 errors) ==== +==== /tsconfig.json (2 errors) ==== { "compilerOptions": { "module": "nodenext", "moduleResolution": "bundler", ~~~~~~~~~ +!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. + ~~~~~~~~~ !!! error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. "noEmit": true } diff --git a/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt.diff deleted file mode 100644 index cb19250ff01..00000000000 --- a/testdata/baselines/reference/submodule/conformance/bundlerOptionsCompat.errors.txt.diff +++ /dev/null @@ -1,18 +0,0 @@ ---- old.bundlerOptionsCompat.errors.txt -+++ new.bundlerOptionsCompat.errors.txt -@@= skipped -0, +0 lines =@@ --/tsconfig.json(4,25): error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - /tsconfig.json(4,25): error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. - - --==== /tsconfig.json (2 errors) ==== -+==== /tsconfig.json (1 errors) ==== - { - "compilerOptions": { - "module": "nodenext", - "moduleResolution": "bundler", -- ~~~~~~~~~ --!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later. - ~~~~~~~~~ - !!! error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. - "noEmit": true \ No newline at end of file