Skip to content

Commit

Permalink
Sanitizes chunk names to allow for virtually created chunks (#2590)
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Dec 15, 2018
1 parent ed67b63 commit 551654c
Show file tree
Hide file tree
Showing 13 changed files with 80 additions and 11 deletions.
15 changes: 6 additions & 9 deletions src/Chunk.ts
Expand Up @@ -30,6 +30,7 @@ import { basename, dirname, isAbsolute, normalize, relative, resolve } from './u
import renderChunk from './utils/renderChunk';
import { RenderOptions } from './utils/renderHelpers';
import { makeUnique, renderNamePattern } from './utils/renderNamePattern';
import { sanitizeFileName } from './utils/sanitize-file-name';
import { timeEnd, timeStart } from './utils/timers';
import { MISSING_EXPORT_SHIM_VARIABLE } from './utils/variableNames';

Expand Down Expand Up @@ -561,11 +562,8 @@ export default class Chunk {
const dependencies: ChunkDependencies = [];

this.dependencies.forEach(dep => {
const importsFromDependency = Array.from(this.imports).filter(
variable =>
variable.module instanceof Module
? variable.module.chunk === dep
: variable.module === dep
const importsFromDependency = Array.from(this.imports).filter(variable =>
variable.module instanceof Module ? variable.module.chunk === dep : variable.module === dep
);

let imports: ImportSpecifier[];
Expand Down Expand Up @@ -733,7 +731,6 @@ export default class Chunk {

// Make sure the direct dependencies of a chunk are present to maintain execution order
for (const { module } of Array.from(this.imports)) {
if (module.chunk === this) console.log(module.id);
const chunkOrExternal = module instanceof Module ? module.chunk : module;
if (this.dependencies.indexOf(chunkOrExternal) === -1) {
this.dependencies.push(chunkOrExternal);
Expand Down Expand Up @@ -938,7 +935,7 @@ export default class Chunk {
preserveModulesRelativeDir: string,
existingNames: Record<string, true>
) {
const sanitizedId = this.orderedModules[0].id.replace('\0', '_');
const sanitizedId = sanitizeFileName(this.orderedModules[0].id);
this.id = makeUnique(
normalize(
isAbsolute(this.orderedModules[0].id)
Expand Down Expand Up @@ -977,10 +974,10 @@ export default class Chunk {

private computeChunkName(): string {
if (this.facadeModule !== null && this.facadeModule.chunkAlias) {
return this.facadeModule.chunkAlias;
return sanitizeFileName(this.facadeModule.chunkAlias);
}
for (const module of this.orderedModules) {
if (module.chunkAlias) return module.chunkAlias;
if (module.chunkAlias) return sanitizeFileName(module.chunkAlias);
}
return 'chunk';
}
Expand Down
2 changes: 0 additions & 2 deletions src/utils/relativeId.ts
Expand Up @@ -19,7 +19,5 @@ export function isPlainName(name: string) {
(name[1] === '.' && (name[2] === '/' || (name[2] === '.' && name[3] === '/')))
)
return false;
// not a URL
if (name.indexOf(':') !== -1) return false;
return true;
}
3 changes: 3 additions & 0 deletions src/utils/sanitize-file-name.ts
@@ -0,0 +1,3 @@
export function sanitizeFileName(name: string): string {
return name.replace(/[\0]/g, '_');
}
20 changes: 20 additions & 0 deletions test/chunking-form/samples/sanitize-chunk-names/_config.js
@@ -0,0 +1,20 @@
module.exports = {
description: 'sanitizes chunk names from virtual entry points',
options: {
input: ['main1'],
plugins: [
{
options(options) {
options.input = ['\0virtual:entry-1', '\0virtual:entry-2'];
return options;
},
resolveId(id) {
return id;
},
load(id) {
return 'export default ' + JSON.stringify(id);
}
}
]
}
};
@@ -0,0 +1,7 @@
define(function () { 'use strict';

var _virtual_entry1 = "\u0000virtual:entry-1";

return _virtual_entry1;

});
@@ -0,0 +1,7 @@
define(function () { 'use strict';

var _virtual_entry2 = "\u0000virtual:entry-2";

return _virtual_entry2;

});
@@ -0,0 +1,5 @@
'use strict';

var _virtual_entry1 = "\u0000virtual:entry-1";

module.exports = _virtual_entry1;
@@ -0,0 +1,5 @@
'use strict';

var _virtual_entry2 = "\u0000virtual:entry-2";

module.exports = _virtual_entry2;
@@ -0,0 +1,3 @@
var _virtual_entry1 = "\u0000virtual:entry-1";

export default _virtual_entry1;
@@ -0,0 +1,3 @@
var _virtual_entry2 = "\u0000virtual:entry-2";

export default _virtual_entry2;
@@ -0,0 +1,10 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

var _virtual_entry1 = exports('default', "\u0000virtual:entry-1");

}
};
});
@@ -0,0 +1,10 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

var _virtual_entry2 = exports('default', "\u0000virtual:entry-2");

}
};
});
1 change: 1 addition & 0 deletions test/chunking-form/samples/sanitize-chunk-names/main1.js
@@ -0,0 +1 @@
console.log('main1');

0 comments on commit 551654c

Please sign in to comment.