diff --git a/src/Module.ts b/src/Module.ts index f96737ce7cc..75b35e99cd5 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -66,7 +66,6 @@ export interface ImportDescription { export interface ExportDescription { identifier?: string; localName: string; - node?: Node; } export interface ReexportDescription { @@ -334,8 +333,8 @@ export default class Module { const renderedExports: string[] = []; const removedExports: string[] = []; for (const exportName in this.exports) { - const expt = this.exports[exportName]; - (expt.node && expt.node.included ? renderedExports : removedExports).push(exportName); + const variable = this.getVariableForExportName(exportName); + (variable && variable.included ? renderedExports : removedExports).push(exportName); } return { renderedExports, removedExports }; } @@ -666,8 +665,7 @@ export default class Module { this.exports.default = { identifier: node.variable.getOriginalVariableName(), - localName: 'default', - node + localName: 'default' }; } else if ((node).declaration) { // export var { foo, bar } = ... @@ -679,13 +677,13 @@ export default class Module { if (declaration.type === NodeType.VariableDeclaration) { for (const decl of declaration.declarations) { for (const localName of extractAssignedNames(decl.id)) { - this.exports[localName] = { localName, node }; + this.exports[localName] = { localName }; } } } else { // export function foo () {} const localName = declaration.id.name; - this.exports[localName] = { localName, node }; + this.exports[localName] = { localName }; } } else { // export { foo, bar, baz } @@ -703,7 +701,7 @@ export default class Module { ); } - this.exports[exportedName] = { localName, node }; + this.exports[exportedName] = { localName }; } } } diff --git a/test/misc/bundle-information.js b/test/misc/bundle-information.js index 0ca67ba968d..e37fd14bc66 100644 --- a/test/misc/bundle-information.js +++ b/test/misc/bundle-information.js @@ -416,4 +416,107 @@ console.log(other);Promise.all([import('./dynamic1'), import('./dynamic2')]).the ); }); }); + + it('contains correct information about rendered/removedExports when directly exporting items', () => { + return rollup + .rollup({ + input: ['input'], + plugins: [ + loader({ + input: 'export { renderedFn, renderedClass, renderedConst } from "code"', + code: + 'export function renderedFn() {}\nexport function removedFn() {}\n' + + 'export class renderedClass {}\nexport class removedClass {}\n' + + 'export const renderedConst = 1;\nexport const removedConst = 1;' + }) + ] + }) + .then(bundle => + bundle.generate({ + format: 'esm' + }) + ) + .then(({ output: [output] }) => { + assert.deepEqual( + output.code, + 'function renderedFn() {}\nclass renderedClass {}\nconst renderedConst = 1;\n\nexport { renderedClass, renderedConst, renderedFn };\n', + 'code' + ); + assert.deepEqual( + output.exports, + ['renderedClass', 'renderedConst', 'renderedFn'], + 'exports' + ); + assert.deepEqual( + output.modules, + { + code: { + originalLength: 184, + removedExports: ['removedFn', 'removedClass', 'removedConst'], + renderedExports: ['renderedFn', 'renderedClass', 'renderedConst'], + renderedLength: 72 + }, + input: { + originalLength: 63, + removedExports: [], + renderedExports: [], + renderedLength: 0 + } + }, + 'modules' + ); + }); + }); + + it('contains correct information about rendered/removedExports when using export declaration', () => { + return rollup + .rollup({ + input: ['input'], + plugins: [ + loader({ + input: 'export { renderedFn, renderedClass, renderedConst } from "code"', + code: + 'function renderedFn() {}\nfunction removedFn() {}\n' + + 'class renderedClass {}\nclass removedClass {}\n' + + 'const renderedConst = 1;\nconst removedConst = 1;\n' + + 'export { renderedFn, renderedClass, renderedConst, removedFn, removedClass, removedConst }' + }) + ] + }) + .then(bundle => + bundle.generate({ + format: 'esm' + }) + ) + .then(({ output: [output] }) => { + assert.deepEqual( + output.code, + 'function renderedFn() {}\nclass renderedClass {}\nconst renderedConst = 1;\n\nexport { renderedClass, renderedConst, renderedFn };\n', + 'code' + ); + assert.deepEqual( + output.exports, + ['renderedClass', 'renderedConst', 'renderedFn'], + 'exports' + ); + assert.deepEqual( + output.modules, + { + code: { + originalLength: 233, + removedExports: ['removedFn', 'removedClass', 'removedConst'], + renderedExports: ['renderedFn', 'renderedClass', 'renderedConst'], + renderedLength: 72 + }, + input: { + originalLength: 63, + removedExports: [], + renderedExports: [], + renderedLength: 0 + } + }, + 'modules' + ); + }); + }); });