Skip to content

Commit

Permalink
feat: deduplicate reexports and renderedExports to simplify output (#…
Browse files Browse the repository at this point in the history
…4759)

* fix: deduplicate reexports and renderedExports

* test: regression es test

* test: regression amd and cjs test

* test: regression system test

* Revert "test: regression amd and cjs test"

This reverts commit 5c3ae7a.

* Revert "test: regression system test"

This reverts commit 9159eb4.

* fix: only for es format
  • Loading branch information
TrickyPi committed Dec 21, 2022
1 parent b86e706 commit 6b3f556
Show file tree
Hide file tree
Showing 27 changed files with 84 additions and 36 deletions.
32 changes: 28 additions & 4 deletions src/Chunk.ts
Expand Up @@ -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)
);
}
}
}
Expand Down Expand Up @@ -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;
Expand Down
@@ -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 };
@@ -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 };
@@ -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 };
@@ -1,2 +1,5 @@
import foo from './dep2.js';
export { default } from './dep2.js';



export { foo as default };
@@ -1,4 +1,5 @@
import { value } from './main.js';
export { value } from './main.js';

console.log('dynamic2', value);

export { value };
@@ -1,4 +1,5 @@
import { value } from './generated-dynamic1.js';
export { value } from './generated-dynamic1.js';

console.log('dynamic2', value);

export { value };
@@ -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 };
@@ -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 };
@@ -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 };
@@ -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 };
@@ -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 };
@@ -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 };
@@ -1,5 +1,6 @@
import { value1 } from './main1.js';
export { value1 } from './main1.js';
import './generated-dep2.js';

console.log('dynamic1', value1);

export { value1 };
@@ -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 };
@@ -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 };
@@ -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 };
@@ -1,4 +1,5 @@
import { value } from './main.js';
export { value } from './main.js';

console.log('dynamic', value);

export { value };
@@ -1,4 +1,5 @@
import { value } from './main.js';
export { value } from './main.js';

console.log('dynamic', value);

export { value };
@@ -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 };
@@ -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 };
@@ -1,5 +1,6 @@
import * as lib from './lib.js';
export { lib };

console.log(lib);
import('./lib.js').then(console.log);

export { lib };
@@ -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 };
@@ -1,2 +1,5 @@
import foo from './dep2.js';
export { default } from './dep2.js';



export { foo as default };
@@ -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 };
@@ -1,2 +1,5 @@
import { f as foo } from './generated-dep2.js';
export { f as default } from './generated-dep2.js';



export { foo as default };
@@ -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 };

0 comments on commit 6b3f556

Please sign in to comment.