diff --git a/src/Chunk.ts b/src/Chunk.ts index da273cd3189..e7b31b5680a 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -603,12 +603,18 @@ export default class Chunk { const renderedExports = exportMode === 'none' ? [] : this.getChunkExportDeclarations(format); let hasExports = renderedExports.length > 0; let hasDefaultExport = false; - for (const { reexports } of renderedDependencies) { + for (const renderedDependence of renderedDependencies) { + const { reexports } = renderedDependence; if (reexports?.length) { hasExports = true; - if (reexports.some(reexport => reexport.reexported === 'default')) { + if (!hasDefaultExport && reexports.some(reexport => reexport.reexported === 'default')) { hasDefaultExport = true; - break; + } + if (format === 'es') { + renderedDependence.reexports = reexports.filter( + // eslint-disable-next-line unicorn/prefer-array-some + ({ reexported }) => !renderedExports.find(({ exported }) => exported === reexported) + ); } } } @@ -769,7 +775,25 @@ export default class Chunk { const variable = this.exportsByName.get(exportName)!; if (!(variable instanceof SyntheticNamedExportVariable)) { const module = variable.module; - if (module && this.chunkByModule.get(module as Module) !== this) continue; + if (module) { + const chunk = this.chunkByModule.get(module as Module); + if (chunk !== this) { + if (!chunk || format !== 'es') { + continue; + } + const chunkDep = this.renderedDependencies!.get(chunk)!; + const { imports, reexports } = chunkDep; + const importedByReexported = reexports?.find( + ({ reexported }) => reexported === exportName + ); + const isImported = imports?.find( + ({ imported }) => imported === importedByReexported?.imported + ); + if (!isImported) { + continue; + } + } + } } let expression = null; let hoisted = false; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js index 1db891a835f..4aad85561da 100644 --- a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js @@ -1,8 +1,9 @@ import foo from './default.js'; -export { default } from './default.js'; import { value } from './named.js'; console.log(foo, value); import('./default.js').then(result => console.log(result.default)); import('./named.js').then(result => console.log(result.value)); + +export { foo as default }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js index 5f0ad225f2e..005a4febb68 100644 --- a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js @@ -1,4 +1,5 @@ import { __exports as other } from './_virtual/other.js'; -export { __exports as default } from './_virtual/other.js'; other.value = 43; + +export { other as default }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js index 1db891a835f..4aad85561da 100644 --- a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js @@ -1,8 +1,9 @@ import foo from './default.js'; -export { default } from './default.js'; import { value } from './named.js'; console.log(foo, value); import('./default.js').then(result => console.log(result.default)); import('./named.js').then(result => console.log(result.value)); + +export { foo as default }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js index 845c1582956..46cbf60f18d 100644 --- a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js @@ -1,2 +1,5 @@ import foo from './dep2.js'; -export { default } from './dep2.js'; + + + +export { foo as default }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic-multi-stage/_expected/es/generated-dynamic2.js b/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic-multi-stage/_expected/es/generated-dynamic2.js index a092412cc30..982e0f809e7 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic-multi-stage/_expected/es/generated-dynamic2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic-multi-stage/_expected/es/generated-dynamic2.js @@ -1,4 +1,5 @@ import { value } from './main.js'; -export { value } from './main.js'; console.log('dynamic2', value); + +export { value }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic/_expected/es/generated-dynamic2.js b/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic/_expected/es/generated-dynamic2.js index 83da591c684..9e77312b6b4 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic/_expected/es/generated-dynamic2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/dynamic-import-dynamic/_expected/es/generated-dynamic2.js @@ -1,4 +1,5 @@ import { value } from './generated-dynamic1.js'; -export { value } from './generated-dynamic1.js'; console.log('dynamic2', value); + +export { value }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/generated-dynamic.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/generated-dynamic.js index 27e2a2c6636..6380c9bf25f 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/generated-dynamic.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/generated-dynamic.js @@ -1,6 +1,6 @@ import { v as value1 } from './generated-from-main-1-and-dynamic.js'; -export { v as value1 } from './generated-from-main-1-and-dynamic.js'; import { v as value2 } from './generated-from-main-1-and-2.js'; -export { v as value2 } from './generated-from-main-1-and-2.js'; console.log('dynamic1', value1, value2); + +export { value1, value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main1.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main1.js index 8762e90e0e4..3b3b3151a91 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main1.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main1.js @@ -1,7 +1,7 @@ import { v as value1 } from './generated-from-main-1-and-dynamic.js'; -export { v as value1 } from './generated-from-main-1-and-dynamic.js'; import { v as value2, a as value3 } from './generated-from-main-1-and-2.js'; -export { v as value2, a as value3 } from './generated-from-main-1-and-2.js'; console.log('main1', value1, value2, value3); import('./generated-dynamic.js'); + +export { value1, value2, value3 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main2.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main2.js index 0967a06d772..69ec00b4439 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-and-shared-dependencies/_expected/es/main2.js @@ -1,5 +1,6 @@ import { v as value2, a as value3 } from './generated-from-main-1-and-2.js'; -export { v as value2, a as value3 } from './generated-from-main-1-and-2.js'; console.log('main2', value2, value3); import('./generated-dynamic.js'); + +export { value2, value3 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/generated-dynamic.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/generated-dynamic.js index f4548c7c3ac..048134a8fb1 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/generated-dynamic.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/generated-dynamic.js @@ -1,6 +1,6 @@ import { v as value1 } from './generated-dep1.js'; -export { v as value1 } from './generated-dep1.js'; import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; console.log('dynamic1', value1, value2); + +export { value1, value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main1.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main1.js index fa5963a970a..a6e38954434 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main1.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main1.js @@ -1,9 +1,9 @@ import { v as value1 } from './generated-dep1.js'; -export { v as value1 } from './generated-dep1.js'; import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; const something = 'something'; console.log('main1', value1, value2, something); import('./generated-dynamic.js'); + +export { value1, value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main2.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main2.js index eac967da533..9c7e4462b03 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-different-dependencies/_expected/es/main2.js @@ -1,5 +1,6 @@ import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; console.log('main2', value2); import('./generated-dynamic.js'); + +export { value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic1.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic1.js index eec2d5323f1..76961847004 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic1.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic1.js @@ -1,5 +1,6 @@ import { value1 } from './main1.js'; -export { value1 } from './main1.js'; import './generated-dep2.js'; console.log('dynamic1', value1); + +export { value1 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic2.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic2.js index ce16c9af379..027cb6f031e 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/generated-dynamic2.js @@ -1,4 +1,5 @@ import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; console.log('dynamic2', value2); + +export { value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main1.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main1.js index 090f16af526..d32767617a2 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main1.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main1.js @@ -1,9 +1,8 @@ import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; const value1 = 'shared1'; console.log('main1', value1, value2); import('./generated-dynamic1.js'); -export { value1 }; +export { value1, value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main2.js b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main2.js index 7837ea7eca3..4217394441d 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main2.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/multi-entry-partly-already-loaded-dynamic/_expected/es/main2.js @@ -1,5 +1,6 @@ import { v as value2 } from './generated-dep2.js'; -export { v as value2 } from './generated-dep2.js'; console.log('main2', value2); import('./generated-dynamic2.js'); + +export { value2 }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic-multiple-imports/_expected/es/generated-dynamic.js b/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic-multiple-imports/_expected/es/generated-dynamic.js index 5726f3b9c9f..dc895901989 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic-multiple-imports/_expected/es/generated-dynamic.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic-multiple-imports/_expected/es/generated-dynamic.js @@ -1,4 +1,5 @@ import { value } from './main.js'; -export { value } from './main.js'; console.log('dynamic', value); + +export { value }; diff --git a/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic/_expected/es/generated-dynamic.js b/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic/_expected/es/generated-dynamic.js index 5726f3b9c9f..dc895901989 100644 --- a/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic/_expected/es/generated-dynamic.js +++ b/test/chunking-form/samples/improved-dynamic-chunks/single-dynamic/_expected/es/generated-dynamic.js @@ -1,4 +1,5 @@ import { value } from './main.js'; -export { value } from './main.js'; console.log('dynamic', value); + +export { value }; diff --git a/test/chunking-form/samples/preserve-modules-auto-export-mode/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-auto-export-mode/_expected/es/main.js index 1db891a835f..4aad85561da 100644 --- a/test/chunking-form/samples/preserve-modules-auto-export-mode/_expected/es/main.js +++ b/test/chunking-form/samples/preserve-modules-auto-export-mode/_expected/es/main.js @@ -1,8 +1,9 @@ import foo from './default.js'; -export { default } from './default.js'; import { value } from './named.js'; console.log(foo, value); import('./default.js').then(result => console.log(result.default)); import('./named.js').then(result => console.log(result.value)); + +export { foo as default }; diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/other.js b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/other.js index 5f0ad225f2e..005a4febb68 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/other.js +++ b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/other.js @@ -1,4 +1,5 @@ import { __exports as other } from './_virtual/other.js'; -export { __exports as default } from './_virtual/other.js'; other.value = 43; + +export { other as default }; diff --git a/test/chunking-form/samples/preserve-modules-default-mode-namespace/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-default-mode-namespace/_expected/es/main.js index 17433b486bb..e4f825b8bb8 100644 --- a/test/chunking-form/samples/preserve-modules-default-mode-namespace/_expected/es/main.js +++ b/test/chunking-form/samples/preserve-modules-default-mode-namespace/_expected/es/main.js @@ -1,5 +1,6 @@ import * as lib from './lib.js'; -export { lib }; console.log(lib); import('./lib.js').then(console.log); + +export { lib }; diff --git a/test/chunking-form/samples/preserve-modules-named-export-mode/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-named-export-mode/_expected/es/main.js index 1db891a835f..4aad85561da 100644 --- a/test/chunking-form/samples/preserve-modules-named-export-mode/_expected/es/main.js +++ b/test/chunking-form/samples/preserve-modules-named-export-mode/_expected/es/main.js @@ -1,8 +1,9 @@ import foo from './default.js'; -export { default } from './default.js'; import { value } from './named.js'; console.log(foo, value); import('./default.js').then(result => console.log(result.default)); import('./named.js').then(result => console.log(result.value)); + +export { foo as default }; diff --git a/test/chunking-form/samples/preserve-modules-non-entry-imports/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-non-entry-imports/_expected/es/main.js index 845c1582956..46cbf60f18d 100644 --- a/test/chunking-form/samples/preserve-modules-non-entry-imports/_expected/es/main.js +++ b/test/chunking-form/samples/preserve-modules-non-entry-imports/_expected/es/main.js @@ -1,2 +1,5 @@ import foo from './dep2.js'; -export { default } from './dep2.js'; + + + +export { foo as default }; diff --git a/test/chunking-form/samples/preserve-modules-root/_expected/es/custom_modules/@my-scope/my-base-pkg/index.js b/test/chunking-form/samples/preserve-modules-root/_expected/es/custom_modules/@my-scope/my-base-pkg/index.js index 1a37c8356d7..6f15b713d5e 100644 --- a/test/chunking-form/samples/preserve-modules-root/_expected/es/custom_modules/@my-scope/my-base-pkg/index.js +++ b/test/chunking-form/samples/preserve-modules-root/_expected/es/custom_modules/@my-scope/my-base-pkg/index.js @@ -1,8 +1,9 @@ import { __exports as myBasePkg } from '../../../_virtual/index.js'; -export { __exports as default } from '../../../_virtual/index.js'; Object.defineProperty(myBasePkg, '__esModule', { value: true }); var hello = 'world'; myBasePkg.hello = hello; + +export { myBasePkg as default }; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js index 017843b99a5..b79be341f29 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js @@ -1,2 +1,5 @@ import { f as foo } from './generated-dep2.js'; -export { f as default } from './generated-dep2.js'; + + + +export { foo as default }; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js index fd5fab10b7a..797c479bb91 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js @@ -1,7 +1,6 @@ import { l as lib } from './generated-lib.js'; -export { l as lib } from './generated-lib.js'; var foo = lib.foo; -export { foo }; +export { foo, lib };