diff --git a/packages/typescript/src/options/tsconfig.ts b/packages/typescript/src/options/tsconfig.ts index 885bf824f..74d04ee9c 100644 --- a/packages/typescript/src/options/tsconfig.ts +++ b/packages/typescript/src/options/tsconfig.ts @@ -105,6 +105,7 @@ function containsEnumOptions( */ function setModuleResolutionKind(parsedConfig: ParsedCommandLine): ParsedCommandLine { const moduleKind = parsedConfig.options.module; + // Fallback if `parsedConfig.options.moduleResolution` is not set const moduleResolution = moduleKind === ModuleKind.Node16 ? ModuleResolutionKind.Node16 @@ -115,8 +116,8 @@ function setModuleResolutionKind(parsedConfig: ParsedCommandLine): ParsedCommand return { ...parsedConfig, options: { - ...parsedConfig.options, - moduleResolution + moduleResolution, + ...parsedConfig.options } }; } diff --git a/packages/typescript/test/fixtures/nodenext-module/index.ts b/packages/typescript/test/fixtures/nodenext-module/index.ts new file mode 100644 index 000000000..0c0d1749c --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-module/index.ts @@ -0,0 +1,4 @@ +import foo from 'foo'; + +const bar: string = foo; +console.log(bar); diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.d.cts b/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.d.cts similarity index 100% rename from packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.d.cts rename to packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.d.cts diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.d.ts b/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.d.ts similarity index 100% rename from packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.d.ts rename to packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.d.ts diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.js b/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.js similarity index 100% rename from packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/index.js rename to packages/typescript/test/fixtures/nodenext-module/node_modules/foo/index.js diff --git a/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/package.json b/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/package.json new file mode 100644 index 000000000..2756bec92 --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-module/node_modules/foo/package.json @@ -0,0 +1,10 @@ +{ + "type": "module", + "exports": { + "types": { + "require": "./index.d.cts", + "default": "./index.d.ts" + }, + "default": "./index.js" + } +} diff --git a/packages/typescript/test/fixtures/nodenext-module/package.json b/packages/typescript/test/fixtures/nodenext-module/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-module/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/typescript/test/fixtures/nodenext-module/tsconfig.json b/packages/typescript/test/fixtures/nodenext-module/tsconfig.json new file mode 100644 index 000000000..cb2baa6ac --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-module/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "module": "nodenext" + } +} diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/dist/index.js b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/dist/index.js new file mode 100644 index 000000000..60c6c8d8b --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/dist/index.js @@ -0,0 +1 @@ +export default "foo"; diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/package.json b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/package.json index 2756bec92..89452e95f 100644 --- a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/package.json +++ b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/package.json @@ -2,9 +2,9 @@ "type": "module", "exports": { "types": { - "require": "./index.d.cts", - "default": "./index.d.ts" + "require": "./types/index.d.cts", + "default": "./types/index.d.ts" }, - "default": "./index.js" + "default": "./dist/index.js" } } diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.cts b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.cts new file mode 100644 index 000000000..da5e19a0e --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.cts @@ -0,0 +1,2 @@ +declare const foo: number; +export = foo; diff --git a/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.ts b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.ts new file mode 100644 index 000000000..aa0022cdb --- /dev/null +++ b/packages/typescript/test/fixtures/nodenext-resolution/node_modules/foo/types/index.d.ts @@ -0,0 +1,2 @@ +declare const foo: string; +export default foo; diff --git a/packages/typescript/test/fixtures/nodenext-resolution/tsconfig.json b/packages/typescript/test/fixtures/nodenext-resolution/tsconfig.json index cb2baa6ac..8ddfdabfa 100644 --- a/packages/typescript/test/fixtures/nodenext-resolution/tsconfig.json +++ b/packages/typescript/test/fixtures/nodenext-resolution/tsconfig.json @@ -1,5 +1,5 @@ { "compilerOptions": { - "module": "nodenext" + "moduleResolution": "nodenext" } } diff --git a/packages/typescript/test/test.js b/packages/typescript/test/test.js index 0c1710df7..58c5b6986 100644 --- a/packages/typescript/test/test.js +++ b/packages/typescript/test/test.js @@ -1292,6 +1292,26 @@ test.serial('works when code is in src directory', async (t) => { }); test.serial('correctly resolves types in a nodenext module', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'fixtures/nodenext-module/index.ts', + plugins: [ + typescript({ + tsconfig: 'fixtures/nodenext-module/tsconfig.json' + }) + ], + onwarn({ toString, ...warning }) { + warnings.push(warning); + } + }); + const code = await getCode(bundle, outputOptions); + + t.true(code.includes('const bar = foo'), code); + t.is(warnings.length, 1); + t.is(warnings[0].code, 'UNRESOLVED_IMPORT'); +}); + +test.serial('correctly resolves types with nodenext moduleResolution', async (t) => { const warnings = []; const bundle = await rollup({ input: 'fixtures/nodenext-resolution/index.ts', @@ -1306,7 +1326,7 @@ test.serial('correctly resolves types in a nodenext module', async (t) => { }); const code = await getCode(bundle, outputOptions); - t.true(code.includes('const bar = foo'), code); + t.true(code.includes('var bar = foo'), code); t.is(warnings.length, 1); t.is(warnings[0].code, 'UNRESOLVED_IMPORT'); });