Skip to content

Commit 8835751

Browse files
committed
fix conflict handling
remove unused code
1 parent 7099fcc commit 8835751

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

lib/optimize/ConcatenatedModule.js

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -313,33 +313,30 @@ class ConcatenatedModule extends Module {
313313
} else if(dep instanceof HarmonyExportImportedSpecifierDependency) {
314314
const exportName = dep.name;
315315
const importName = dep.id;
316-
const importModule = dep.importDependency.module;
317-
const innerReexport = modulesSet.has(importModule);
316+
const importedModule = dep.importDependency.module;
318317
if(exportName && importName) {
319318
reexportMap.set(exportName, {
320-
module: importModule,
319+
module: importedModule,
321320
exportName: importName,
322321
dependency: dep
323322
});
324323
} else if(exportName) {
325324
reexportMap.set(exportName, {
326-
module: importModule,
325+
module: importedModule,
327326
exportName: true,
328327
dependency: dep
329328
});
330-
} else if(Array.isArray(importModule.providedExports)) {
329+
} else {
331330
var activeExports = new Set(HarmonyModulesHelpers.getActiveExports(dep.originModule, dep));
332-
importModule.providedExports.forEach(name => {
331+
importedModule.providedExports.forEach(name => {
333332
if(activeExports.has(name) || name === "default")
334333
return;
335334
reexportMap.set(name, {
336-
module: importModule,
335+
module: importedModule,
337336
exportName: name,
338337
dependency: dep
339338
});
340339
});
341-
} else if(innerReexport) {
342-
throw new Error(`Module "${importModule.readableIdentifier(requestShortener)}" doesn't provide static exports for "export *" in ${info.module.readableIdentifier(requestShortener)}`);
343340
}
344341
}
345342
});
@@ -449,6 +446,8 @@ class ConcatenatedModule extends Module {
449446

450447
// List of all used names to avoid conflicts
451448
const allUsedNames = new Set([
449+
"__WEBPACK_MODULE_DEFAULT_EXPORT__", // avoid using this internal name
450+
452451
"abstract", "arguments", "await", "boolean", "break", "byte", "case", "catch", "char", "class",
453452
"const", "continue", "debugger", "default", "delete", "do", "double", "else", "enum", "eval",
454453
"export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if",
@@ -606,7 +605,7 @@ class ConcatenatedModule extends Module {
606605
name = "";
607606

608607
// Remove uncool stuff
609-
extraInfo = extraInfo.replace(/(\/index)?\.([a-zA-Z0-9]{1,4})$/, "");
608+
extraInfo = extraInfo.replace(/\.+\/|(\/index)?\.([a-zA-Z0-9]{1,4})$/g, "");
610609

611610
const splittedInfo = extraInfo.split("/");
612611
while(splittedInfo.length) {
@@ -615,8 +614,12 @@ class ConcatenatedModule extends Module {
615614
if(!usedNamed1.has(nameIdent) && (!usedNamed2 || !usedNamed2.has(nameIdent))) return nameIdent;
616615
}
617616

618-
while(usedNamed1.has(name = name + "_") || (usedNamed2 && usedNamed2.has(name))) { /* do nothing */ }
619-
return name;
617+
let i = 0, nameWithNumber;
618+
do {
619+
i++;
620+
nameWithNumber = Template.toIdentifier(`${name}_${i}`);
621+
} while(usedNamed1.has(nameWithNumber) || (usedNamed2 && usedNamed2.has(nameWithNumber)));
622+
return nameWithNumber;
620623
}
621624

622625
updateHash(hash) {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import value1 from "./module?(";
2+
import value2 from "./module?)";
3+
import value3 from "./module?[";
4+
import value4 from "./module?]";
5+
import value5 from "./module?{";
6+
import value6 from "./module?}";
7+
8+
it("should not break on name conflicts", function() {
9+
value1.should.be.eql("a");
10+
value2.should.be.eql("a");
11+
value3.should.be.eql("a");
12+
value4.should.be.eql("a");
13+
value5.should.be.eql("a");
14+
value6.should.be.eql("a");
15+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default "a";

0 commit comments

Comments
 (0)