Skip to content

Commit

Permalink
Avoid variable name conflict when reexporting several namespaces from…
Browse files Browse the repository at this point in the history
… a chunk (#3742)
  • Loading branch information
lukastaegert committed Aug 22, 2020
1 parent fada4f6 commit 9096087
Show file tree
Hide file tree
Showing 22 changed files with 189 additions and 11 deletions.
11 changes: 6 additions & 5 deletions src/utils/deconflictChunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,20 +85,21 @@ function deconflictImportsEsmOrSystem(
imports: Set<Variable>,
dependenciesToBeDeconflicted: DependenciesToBeDeconflicted,
_interop: GetInterop,
_preserveModules: boolean,
preserveModules: boolean,
_externalLiveBindings: boolean,
chunkByModule: Map<Module, Chunk>,
syntheticExports: Set<SyntheticNamedExportVariable>
) {
// All namespace imports are contained here;
// this is needed for synthetic exports and namespace reexports
// This is needed for namespace reexports
for (const dependency of dependenciesToBeDeconflicted.dependencies) {
dependency.variableName = getSafeName(dependency.suggestedVariableName, usedNames);
if (preserveModules || dependency instanceof ExternalModule) {
dependency.variableName = getSafeName(dependency.suggestedVariableName, usedNames);
}
}
for (const variable of imports) {
const module = variable.module!;
const name = variable.name;
if (variable.isNamespace) {
if (variable.isNamespace && (preserveModules || module instanceof ExternalModule)) {
variable.setRenderNames(
null,
(module instanceof ExternalModule ? module : chunkByModule.get(module)!).variableName
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
description: 'correctly handles combined namespace reexports',
options: {
input: ['main1', 'main2']
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
define(['exports'], function (exports) { 'use strict';

const foo = 'foo';

var volume = /*#__PURE__*/Object.freeze({
__proto__: null,
foo: foo
});

const bar = 'bar';

var geometry = /*#__PURE__*/Object.freeze({
__proto__: null,
bar: bar
});

exports.bar = bar;
exports.foo = foo;
exports.geometry = geometry;
exports.volume = volume;

});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
define(['./generated-geometry'], function (geometry) { 'use strict';

var mod = /*#__PURE__*/Object.freeze({
__proto__: null,
volume: geometry.volume,
geometry: geometry.geometry
});

console.log(mod);

});
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define(['./generated-geometry'], function (geometry) { 'use strict';

console.log(geometry.foo, geometry.bar);

});
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

const foo = 'foo';

var volume = /*#__PURE__*/Object.freeze({
__proto__: null,
foo: foo
});

const bar = 'bar';

var geometry = /*#__PURE__*/Object.freeze({
__proto__: null,
bar: bar
});

exports.bar = bar;
exports.foo = foo;
exports.geometry = geometry;
exports.volume = volume;
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

var geometry = require('./generated-geometry.js');

var mod = /*#__PURE__*/Object.freeze({
__proto__: null,
volume: geometry.volume,
geometry: geometry.geometry
});

console.log(mod);
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';

var geometry = require('./generated-geometry.js');

console.log(geometry.foo, geometry.bar);
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const foo = 'foo';

var volume = /*#__PURE__*/Object.freeze({
__proto__: null,
foo: foo
});

const bar = 'bar';

var geometry = /*#__PURE__*/Object.freeze({
__proto__: null,
bar: bar
});

export { bar as b, foo as f, geometry as g, volume as v };
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { v as volume, g as geometry } from './generated-geometry.js';

var mod = /*#__PURE__*/Object.freeze({
__proto__: null,
volume: volume,
geometry: geometry
});

console.log(mod);
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { f as foo, b as bar } from './generated-geometry.js';

console.log(foo, bar);
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
System.register([], function (exports) {
'use strict';
return {
execute: function () {

const foo = exports('f', 'foo');

var volume = /*#__PURE__*/Object.freeze({
__proto__: null,
foo: foo
});
exports('v', volume);

const bar = exports('b', 'bar');

var geometry = /*#__PURE__*/Object.freeze({
__proto__: null,
bar: bar
});
exports('g', geometry);

}
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
System.register(['./generated-geometry.js'], function () {
'use strict';
var volume, geometry;
return {
setters: [function (module) {
volume = module.v;
geometry = module.g;
}],
execute: function () {

var mod = /*#__PURE__*/Object.freeze({
__proto__: null,
volume: volume,
geometry: geometry
});

console.log(mod);

}
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
System.register(['./generated-geometry.js'], function () {
'use strict';
var foo, bar;
return {
setters: [function (module) {
foo = module.f;
bar = module.b;
}],
execute: function () {

console.log(foo, bar);

}
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const bar = 'bar';
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * as volume from './volume';
export * as geometry from './geometry';
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import * as mod from './index.js';
console.log(mod);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { bar } from './geometry.js';
import { foo } from './volume.js';

console.log(foo, bar);
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const foo = 'foo';
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import './m2.js';
import { m as m1 } from './generated-m1.js';
import { m as ms } from './generated-m1.js';

console.log(m1);
console.log(ms);
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import './generated-dep.js';
import 'external';
import { l as index } from './generated-index.js';
import { l as lib } from './generated-index.js';

console.log(index);
console.log(lib);
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { p } from './hsl2hsv.js';
import { l as index } from './generated-index.js';
import { l as lib } from './generated-index.js';

console.log(p);
var main = new Map(Object.entries(index));
var main = new Map(Object.entries(lib));

export default main;

0 comments on commit 9096087

Please sign in to comment.