Skip to content

Commit

Permalink
Merge branch 'namespace-interop-simplify'
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Apr 18, 2018
2 parents 480b239 + 79ad616 commit 481c47f
Show file tree
Hide file tree
Showing 8 changed files with 11 additions and 43 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## 0.59.0
*unreleased*
* Add `esm` format alias ([#2102](https://github.com/rollup/rollup/pull/2102))
* Improve handling of external modules imported as both default and named imports ([#2136](https://github.com/rollup/rollup/pull/2136))
* Fix wrong file name in error message ([#2137](https://github.com/rollup/rollup/pull/2137))

## 0.58.1
Expand Down
13 changes: 3 additions & 10 deletions src/Chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ export interface ModuleDeclarationDependency {
// these used as interop signifiers
exportsDefault: boolean;
exportsNames: boolean;
exportsNamespace: boolean;
reexports?: ReexportSpecifier[];
imports?: ImportSpecifier[];
}
Expand Down Expand Up @@ -629,15 +628,13 @@ export default class Chunk {
}

let reexports = reexportDeclarations.get(dep);
let exportsNames: boolean, exportsNamespace: boolean, exportsDefault: boolean;
let exportsNames: boolean, exportsDefault: boolean;
if (dep instanceof ExternalModule) {
exportsNames = dep.exportsNames;
exportsNamespace = dep.exportsNamespace;
exportsNames = dep.exportsNames || dep.exportsNamespace;
exportsDefault = 'default' in dep.declarations;
} else {
exportsNames = true;
// we don't want any interop patterns to trigger
exportsNamespace = false;
exportsDefault = false;
}

Expand All @@ -650,7 +647,7 @@ export default class Chunk {
<ExternalModule>dep,
options.globals,
this.graph,
exportsNames || exportsNamespace || exportsDefault
exportsNames || exportsDefault
);
}
}
Expand All @@ -663,7 +660,6 @@ export default class Chunk {
name: dep.name,
isChunk: !(<ExternalModule>dep).isExternal,
exportsNames,
exportsNamespace,
exportsDefault,
reexports,
imports
Expand Down Expand Up @@ -908,9 +904,6 @@ export default class Chunk {
if (!into.exportsNames && from.exportsNames) {
into.exportsNames = true;
}
if (!into.exportsNamespace && from.exportsNamespace) {
into.exportsNamespace = true;
}
if (!into.exportsDefault && from.exportsDefault) {
into.exportsDefault = true;
}
Expand Down
28 changes: 2 additions & 26 deletions src/finalisers/cjs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,41 +21,17 @@ export default function cjs(
const interop = options.interop !== false;

const importBlock = dependencies
.map(({ id, isChunk, name, reexports, imports }) => {
.map(({ id, isChunk, name, reexports, imports, exportsNames, exportsDefault }) => {
if (!reexports && !imports) {
return `require('${id}');`;
}

if (!interop || isChunk) {
if (!interop || isChunk || !exportsDefault) {
return `${varOrConst} ${name} = require('${id}');`;
}

const usesDefault =
(imports && imports.some(specifier => specifier.imported === 'default')) ||
(reexports && reexports.some(specifier => specifier.imported === 'default'));
if (!usesDefault) {
return `${varOrConst} ${name} = require('${id}');`;
}

const exportsNamespace = imports && imports.some(specifier => specifier.imported === '*');
if (exportsNamespace) {
return (
`${varOrConst} ${name} = require('${id}');` +
`\n${varOrConst} ${name}__default = ${name}['default'];`
);
}

needsInterop = true;

const exportsNames =
(imports &&
imports.some(
specifier => specifier.imported !== 'default' && specifier.imported !== '*'
)) ||
(reexports &&
reexports.some(
specifier => specifier.imported !== 'default' && specifier.imported !== '*'
));
if (exportsNames) {
return (
`${varOrConst} ${name} = require('${id}');` +
Expand Down
4 changes: 1 addition & 3 deletions src/finalisers/shared/getInteropBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@ export default function getInteropBlock(
varOrConst: string
) {
return dependencies
.map(({ name, exportsNamespace, exportsNames, exportsDefault }) => {
.map(({ name, exportsNames, exportsDefault }) => {
if (!exportsDefault || options.interop === false) return null;

if (exportsNamespace) return `${varOrConst} ${name}__default = ${name}['default'];`;

if (exportsNames)
return `${varOrConst} ${name}__default = 'default' in ${name} ? ${name}['default'] : ${name};`;

Expand Down
2 changes: 1 addition & 1 deletion src/finalisers/shared/trimEmptyImports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default function trimEmptyImports(dependencies: ModuleDeclarationDependen

while (i--) {
const dependency = dependencies[i];
if (dependency.exportsDefault || dependency.exportsNames || dependency.exportsNamespace) {
if (dependency.exportsDefault || dependency.exportsNames) {
return dependencies.slice(0, i + 1);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
define(['foo'], function (foo) { 'use strict';

var foo__default = foo['default'];
var foo__default = 'default' in foo ? foo['default'] : foo;

console.log( foo.bar );

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(function (foo) {
'use strict';

var foo__default = foo['default'];
var foo__default = 'default' in foo ? foo['default'] : foo;

console.log( foo.bar );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
(factory(global.foo));
}(this, (function (foo) { 'use strict';

var foo__default = foo['default'];
var foo__default = 'default' in foo ? foo['default'] : foo;

console.log( foo.bar );

Expand Down

0 comments on commit 481c47f

Please sign in to comment.