mirror of https://github.com/webpack/webpack.git
Merge pull request #6086 from webpack/refactor/runtime-template
pass runtimeTemplate to DependencyTemplate
This commit is contained in:
commit
d526d5f11c
|
|
@ -22,6 +22,7 @@ const MainTemplate = require("./MainTemplate");
|
|||
const ChunkTemplate = require("./ChunkTemplate");
|
||||
const HotUpdateChunkTemplate = require("./HotUpdateChunkTemplate");
|
||||
const ModuleTemplate = require("./ModuleTemplate");
|
||||
const RuntimeTemplate = require("./RuntimeTemplate");
|
||||
const Dependency = require("./Dependency");
|
||||
const ChunkRenderError = require("./ChunkRenderError");
|
||||
const AsyncDependencyToInitialChunkWarning = require("./AsyncDependencyToInitialChunkWarning");
|
||||
|
|
@ -181,9 +182,10 @@ class Compilation extends Tapable {
|
|||
this.mainTemplate = new MainTemplate(this.outputOptions);
|
||||
this.chunkTemplate = new ChunkTemplate(this.outputOptions);
|
||||
this.hotUpdateChunkTemplate = new HotUpdateChunkTemplate(this.outputOptions);
|
||||
this.runtimeTemplate = new RuntimeTemplate(this.outputOptions, this.requestShortener);
|
||||
this.moduleTemplates = {
|
||||
javascript: new ModuleTemplate(this.outputOptions, this.requestShortener),
|
||||
webassembly: new ModuleTemplate(this.outputOptions, this.requestShortener)
|
||||
javascript: new ModuleTemplate(this.runtimeTemplate),
|
||||
webassembly: new ModuleTemplate(this.runtimeTemplate)
|
||||
};
|
||||
|
||||
this.semaphore = new Semaphore(options.parallelism || 100);
|
||||
|
|
|
|||
|
|
@ -384,8 +384,8 @@ webpackAsyncContext.id = ${JSON.stringify(id)};
|
|||
module.exports = webpackAsyncContext;`;
|
||||
}
|
||||
|
||||
getLazyOnceSource(block, dependencies, id, outputOptions, requestShortener) {
|
||||
const promise = DepBlockHelpers.getDepBlockPromise(block, outputOptions, requestShortener, "lazy-once context");
|
||||
getLazyOnceSource(block, dependencies, id, runtimeTemplate) {
|
||||
const promise = DepBlockHelpers.getDepBlockPromise(block, runtimeTemplate, "lazy-once context");
|
||||
const map = this.getUserRequestMap(dependencies);
|
||||
const fakeMap = this.getFakeMap(dependencies);
|
||||
const thenFunction = fakeMap ?
|
||||
|
|
@ -490,7 +490,7 @@ module.exports = webpackEmptyAsyncContext;
|
|||
webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
||||
}
|
||||
|
||||
getSourceString(asyncMode, outputOptions, requestShortener) {
|
||||
getSourceString(asyncMode, runtimeTemplate) {
|
||||
if(asyncMode === "lazy") {
|
||||
if(this.blocks && this.blocks.length > 0) {
|
||||
return this.getLazySource(this.blocks, this.id);
|
||||
|
|
@ -506,7 +506,7 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
|||
if(asyncMode === "lazy-once") {
|
||||
const block = this.blocks[0];
|
||||
if(block) {
|
||||
return this.getLazyOnceSource(block, block.dependencies, this.id, outputOptions, requestShortener);
|
||||
return this.getLazyOnceSource(block, block.dependencies, this.id, runtimeTemplate);
|
||||
}
|
||||
return this.getSourceForEmptyAsyncContext(this.id);
|
||||
}
|
||||
|
|
@ -534,9 +534,9 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
|||
return new RawSource(sourceString);
|
||||
}
|
||||
|
||||
source(dependencyTemplates, outputOptions, requestShortener) {
|
||||
source(dependencyTemplates, runtimeTemplate) {
|
||||
return this.getSource(
|
||||
this.getSourceString(this.options.mode, outputOptions, requestShortener)
|
||||
this.getSourceString(this.options.mode, runtimeTemplate)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@ class DependenciesBlockVariable {
|
|||
});
|
||||
}
|
||||
|
||||
expressionSource(dependencyTemplates, outputOptions, requestShortener) {
|
||||
expressionSource(dependencyTemplates, runtimeTemplate) {
|
||||
const source = new ReplaceSource(new RawSource(this.expression));
|
||||
this.dependencies.forEach(dep => {
|
||||
const template = dependencyTemplates.get(dep.constructor);
|
||||
if(!template) throw new Error(`No template for dependency: ${dep.constructor.name}`);
|
||||
template.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
template.apply(dep, source, runtimeTemplate, dependencyTemplates);
|
||||
});
|
||||
return source;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ class EvalDevToolModuleTemplatePlugin {
|
|||
const str = ModuleFilenameHelpers.createFilename(module, {
|
||||
moduleFilenameTemplate: this.moduleFilenameTemplate,
|
||||
namespace: this.namespace
|
||||
}, moduleTemplate.requestShortener);
|
||||
}, moduleTemplate.runtimeTemplate.requestShortener);
|
||||
const footer = ["\n",
|
||||
ModuleFilenameHelpers.createFooter(module, moduleTemplate.requestShortener),
|
||||
ModuleFilenameHelpers.createFooter(module, moduleTemplate.runtimeTemplate.requestShortener),
|
||||
this.sourceUrlComment.replace(/\[url\]/g, encodeURI(str).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/^\//, ""))
|
||||
].join("\n");
|
||||
const result = new RawSource(`eval(${JSON.stringify(content + footer)});`);
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class EvalSourceMapDevToolModuleTemplatePlugin {
|
|||
return ModuleFilenameHelpers.createFilename(module, {
|
||||
moduleFilenameTemplate: self.moduleFilenameTemplate,
|
||||
namespace: self.namespace
|
||||
}, moduleTemplate.requestShortener);
|
||||
}, moduleTemplate.runtimeTemplate.requestShortener);
|
||||
});
|
||||
moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, (filename, i, n) => {
|
||||
for(let j = 0; j < n; j++)
|
||||
|
|
@ -59,7 +59,7 @@ class EvalSourceMapDevToolModuleTemplatePlugin {
|
|||
sourceMap.sources = moduleFilenames;
|
||||
if(sourceMap.sourcesContent) {
|
||||
sourceMap.sourcesContent = sourceMap.sourcesContent.map((content, i) => {
|
||||
return typeof content === "string" ? `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], moduleTemplate.requestShortener)}` : null;
|
||||
return typeof content === "string" ? `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], moduleTemplate.runtimeTemplate.requestShortener)}` : null;
|
||||
});
|
||||
}
|
||||
sourceMap.sourceRoot = options.sourceRoot || "";
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@ class FunctionModuleTemplatePlugin {
|
|||
});
|
||||
|
||||
moduleTemplate.plugin("package", (moduleSource, module) => {
|
||||
if(moduleTemplate.outputOptions.pathinfo) {
|
||||
if(moduleTemplate.runtimeTemplate.outputOptions.pathinfo) {
|
||||
const source = new ConcatSource();
|
||||
const req = module.readableIdentifier(moduleTemplate.requestShortener);
|
||||
const req = module.readableIdentifier(moduleTemplate.runtimeTemplate.requestShortener);
|
||||
source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
|
||||
source.add(" !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
|
||||
source.add(" \\****" + req.replace(/./g, "*") + "****/\n");
|
||||
|
|
@ -51,7 +51,7 @@ class FunctionModuleTemplatePlugin {
|
|||
source.add(Template.toComment("all exports used") + "\n");
|
||||
if(module.optimizationBailout) {
|
||||
module.optimizationBailout.forEach(text => {
|
||||
if(typeof text === "function") text = text(moduleTemplate.requestShortener);
|
||||
if(typeof text === "function") text = text(moduleTemplate.runtimeTemplate.requestShortener);
|
||||
source.add(Template.toComment(`${text}`) + "\n");
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,10 +9,9 @@ const SyncWaterfallHook = require("tapable").SyncWaterfallHook;
|
|||
const SyncHook = require("tapable").SyncHook;
|
||||
|
||||
module.exports = class ModuleTemplate extends Tapable {
|
||||
constructor(outputOptions, requestShortener) {
|
||||
constructor(runtimeTemplate) {
|
||||
super();
|
||||
this.outputOptions = outputOptions || {};
|
||||
this.requestShortener = requestShortener;
|
||||
this.runtimeTemplate = runtimeTemplate;
|
||||
this.hooks = {
|
||||
content: new SyncWaterfallHook(["source", "module", "options", "dependencyTemplates"]),
|
||||
module: new SyncWaterfallHook(["source", "module", "options", "dependencyTemplates"]),
|
||||
|
|
@ -23,7 +22,7 @@ module.exports = class ModuleTemplate extends Tapable {
|
|||
}
|
||||
|
||||
render(module, dependencyTemplates, options) {
|
||||
const moduleSource = module.source(dependencyTemplates, this.outputOptions, this.requestShortener);
|
||||
const moduleSource = module.source(dependencyTemplates, this.runtimeTemplate);
|
||||
const moduleSourcePostContent = this.hooks.content.call(moduleSource, module, options, dependencyTemplates);
|
||||
const moduleSourcePostModule = this.hooks.module.call(moduleSourcePostContent, module, options, dependencyTemplates);
|
||||
const moduleSourcePostRender = this.hooks.render.call(moduleSourcePostModule, module, options, dependencyTemplates);
|
||||
|
|
|
|||
|
|
@ -46,14 +46,14 @@ class MultiModule extends Module {
|
|||
super.updateHash(hash);
|
||||
}
|
||||
|
||||
source(dependencyTemplates, outputOptions) {
|
||||
source(dependencyTemplates, runtimeTemplate) {
|
||||
const str = [];
|
||||
this.dependencies.forEach((dep, idx) => {
|
||||
if(dep.module) {
|
||||
if(idx === this.dependencies.length - 1)
|
||||
str.push("module.exports = ");
|
||||
str.push("__webpack_require__(");
|
||||
if(outputOptions.pathinfo)
|
||||
if(runtimeTemplate.outputOptions.pathinfo)
|
||||
str.push(Template.toComment(dep.request));
|
||||
str.push(`${JSON.stringify(dep.module.id)}`);
|
||||
str.push(")");
|
||||
|
|
|
|||
|
|
@ -332,15 +332,15 @@ class NormalModule extends Module {
|
|||
return `${this.hash}-${dtHash}`;
|
||||
}
|
||||
|
||||
sourceDependency(dependency, dependencyTemplates, source, outputOptions, requestShortener) {
|
||||
sourceDependency(dependency, dependencyTemplates, source, runtimeTemplate) {
|
||||
const template = dependencyTemplates.get(dependency.constructor);
|
||||
if(!template) throw new Error("No template for dependency: " + dependency.constructor.name);
|
||||
template.apply(dependency, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
template.apply(dependency, source, runtimeTemplate, dependencyTemplates);
|
||||
}
|
||||
|
||||
sourceVariables(variable, availableVars, dependencyTemplates, outputOptions, requestShortener) {
|
||||
sourceVariables(variable, availableVars, dependencyTemplates, runtimeTemplate) {
|
||||
const name = variable.name;
|
||||
const expr = variable.expressionSource(dependencyTemplates, outputOptions, requestShortener);
|
||||
const expr = variable.expressionSource(dependencyTemplates, runtimeTemplate);
|
||||
|
||||
if(availableVars.some(v => v.name === name && v.expression.source() === expr.source())) {
|
||||
return;
|
||||
|
|
@ -400,9 +400,9 @@ class NormalModule extends Module {
|
|||
}, startState);
|
||||
}
|
||||
|
||||
sourceBlock(block, availableVars, dependencyTemplates, source, outputOptions, requestShortener) {
|
||||
sourceBlock(block, availableVars, dependencyTemplates, source, runtimeTemplate) {
|
||||
block.dependencies.forEach((dependency) => this.sourceDependency(
|
||||
dependency, dependencyTemplates, source, outputOptions, requestShortener));
|
||||
dependency, dependencyTemplates, source, runtimeTemplate));
|
||||
|
||||
/**
|
||||
* Get the variables of all blocks that we need to inject.
|
||||
|
|
@ -411,7 +411,7 @@ class NormalModule extends Module {
|
|||
*/
|
||||
const vars = block.variables.reduce((result, value) => {
|
||||
const variable = this.sourceVariables(
|
||||
value, availableVars, dependencyTemplates, outputOptions, requestShortener);
|
||||
value, availableVars, dependencyTemplates, runtimeTemplate);
|
||||
|
||||
if(variable) {
|
||||
result.push(variable);
|
||||
|
|
@ -478,13 +478,12 @@ class NormalModule extends Module {
|
|||
availableVars.concat(vars),
|
||||
dependencyTemplates,
|
||||
source,
|
||||
outputOptions,
|
||||
requestShortener
|
||||
runtimeTemplate
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
source(dependencyTemplates, outputOptions, requestShortener) {
|
||||
source(dependencyTemplates, runtimeTemplate) {
|
||||
if(this.type.startsWith("javascript")) {
|
||||
const hashDigest = this.getHashDigest(dependencyTemplates);
|
||||
if(this._cachedSourceHash === hashDigest) {
|
||||
|
|
@ -498,7 +497,7 @@ class NormalModule extends Module {
|
|||
|
||||
const source = new ReplaceSource(this._source);
|
||||
|
||||
this.sourceBlock(this, [], dependencyTemplates, source, outputOptions, requestShortener);
|
||||
this.sourceBlock(this, [], dependencyTemplates, source, runtimeTemplate);
|
||||
|
||||
const cachedSource = new CachedSource(source);
|
||||
this._cachedSource = cachedSource;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Tobias Koppers @sokra
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
module.exports = class RuntimeTemplate {
|
||||
constructor(outputOptions, requestShortener) {
|
||||
this.outputOptions = outputOptions || {};
|
||||
this.requestShortener = requestShortener;
|
||||
}
|
||||
};
|
||||
|
|
@ -20,14 +20,14 @@ class AMDRequireArrayDependency extends Dependency {
|
|||
}
|
||||
|
||||
AMDRequireArrayDependency.Template = class AMDRequireArrayDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const content = this.getContent(dep, outputOptions, requestShortener);
|
||||
apply(dep, source, runtime) {
|
||||
const content = this.getContent(dep, runtime);
|
||||
source.replace(dep.range[0], dep.range[1] - 1, content);
|
||||
}
|
||||
|
||||
getContent(dep, outputOptions, requestShortener) {
|
||||
getContent(dep, runtime) {
|
||||
const requires = dep.depsArray.map((dependency) => {
|
||||
const optionalComment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dependency.request)) : "";
|
||||
const optionalComment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dependency.request)) : "";
|
||||
return this.contentForDependency(dependency, optionalComment);
|
||||
});
|
||||
return `[${requires.join(", ")}]`;
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ class AMDRequireDependency extends NullDependency {
|
|||
}
|
||||
|
||||
AMDRequireDependency.Template = class AMDRequireDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
const depBlock = dep.block;
|
||||
const wrapper = DepBlockHelpers.getLoadDepBlockWrapper(depBlock, outputOptions, requestShortener, "require");
|
||||
const wrapper = DepBlockHelpers.getLoadDepBlockWrapper(depBlock, runtime, "require");
|
||||
|
||||
// has array range but no function range
|
||||
if(depBlock.arrayRange && !depBlock.functionRange) {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ const Template = require("../Template");
|
|||
|
||||
class ContextDependencyTemplateAsId {
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dep.request)) + " " : "";
|
||||
apply(dep, source, runtime) {
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dep.request)) + " " : "";
|
||||
|
||||
if(dep.module && dep.module.dependencies && dep.module.dependencies.length > 0) {
|
||||
if(dep.valueRange) {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ const Template = require("../Template");
|
|||
|
||||
class ContextDependencyTemplateAsRequireCall {
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dep.options.request)) + " " : "";
|
||||
apply(dep, source, runtime) {
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dep.options.request)) + " " : "";
|
||||
|
||||
const containsDeps = dep.module && dep.module.dependencies && dep.module.dependencies.length > 0;
|
||||
const isAsync = dep.options.mode !== "sync" && dep.options.mode !== "weak";
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ const Template = require("../Template");
|
|||
|
||||
const DepBlockHelpers = exports;
|
||||
|
||||
DepBlockHelpers.getLoadDepBlockWrapper = (depBlock, outputOptions, requestShortener, name) => {
|
||||
const promiseCode = DepBlockHelpers.getDepBlockPromise(depBlock, outputOptions, requestShortener, name);
|
||||
DepBlockHelpers.getLoadDepBlockWrapper = (depBlock, runtimeTemplate, name) => {
|
||||
const promiseCode = DepBlockHelpers.getDepBlockPromise(depBlock, runtimeTemplate, name);
|
||||
return [
|
||||
promiseCode + ".then(",
|
||||
").catch(",
|
||||
|
|
@ -17,11 +17,11 @@ DepBlockHelpers.getLoadDepBlockWrapper = (depBlock, outputOptions, requestShorte
|
|||
];
|
||||
};
|
||||
|
||||
DepBlockHelpers.getDepBlockPromise = (depBlock, outputOptions, requestShortener, name) => {
|
||||
DepBlockHelpers.getDepBlockPromise = (depBlock, runtimeTemplate, name) => {
|
||||
if(depBlock.chunks) {
|
||||
const chunks = depBlock.chunks.filter(chunk => !chunk.hasRuntime() && chunk.id !== null);
|
||||
const pathChunkCheck = outputOptions.pathinfo && depBlock.chunkName;
|
||||
const shortChunkName = requestShortener.shorten(depBlock.chunkName);
|
||||
const pathChunkCheck = runtimeTemplate.outputOptions.pathinfo && depBlock.chunkName;
|
||||
const shortChunkName = runtimeTemplate.requestShortener.shorten(depBlock.chunkName);
|
||||
const chunkReason = Template.toNormalComment(depBlock.chunkReason);
|
||||
const requireChunkId = chunk => "__webpack_require__.e(" + JSON.stringify(chunk.id) + ")";
|
||||
name = Template.toNormalComment(name);
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@ class HarmonyAcceptDependency extends NullDependency {
|
|||
}
|
||||
|
||||
HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
const content = dep.dependencies
|
||||
.filter(dependency => HarmonyImportDependency.Template.isImportEmitted(dependency, source))
|
||||
.map(dependency => dependency.getImportStatement(false, outputOptions, requestShortener))
|
||||
.map(dependency => dependency.getImportStatement(false, runtime))
|
||||
.join("");
|
||||
|
||||
if(dep.hasCallback) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class HarmonyAcceptImportDependency extends HarmonyImportDependency {
|
|||
}
|
||||
|
||||
HarmonyAcceptImportDependency.Template = class HarmonyAcceptImportDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {}
|
||||
apply(dep, source, runtime) {}
|
||||
};
|
||||
|
||||
module.exports = HarmonyAcceptImportDependency;
|
||||
|
|
|
|||
|
|
@ -337,9 +337,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
|
|||
module.exports = HarmonyExportImportedSpecifierDependency;
|
||||
|
||||
HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedSpecifierDependencyTemplate extends HarmonyImportDependency.Template {
|
||||
harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
super.harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
const importVar = dep.getImportVar(requestShortener);
|
||||
harmonyInit(dep, source, runtime, dependencyTemplates) {
|
||||
super.harmonyInit(dep, source, runtime, dependencyTemplates);
|
||||
const importVar = dep.getImportVar();
|
||||
const content = this.getContent(dep, importVar);
|
||||
source.insert(-1, content);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
|
|||
return 0;
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener) {
|
||||
harmonyInit(dep, source, runtime) {
|
||||
const content = this.getContent(dep);
|
||||
source.insert(-1, content);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,9 @@ class HarmonyImportDependency extends ModuleDependency {
|
|||
return importVar;
|
||||
}
|
||||
|
||||
getImportStatement(declare, outputOptions, requestShortener) {
|
||||
getImportStatement(declare, runtime) {
|
||||
const module = this.module;
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(this.request)) : "";
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(this.request)) : "";
|
||||
const optDeclaration = declare ? "var " : "";
|
||||
const optNewline = declare ? "\n" : " ";
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate {
|
|||
return key && sourceInfo.emittedImports.get(key);
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener) {
|
||||
harmonyInit(dep, source, runtime) {
|
||||
let sourceInfo = importEmittedMap.get(source);
|
||||
if(!sourceInfo) {
|
||||
importEmittedMap.set(source, sourceInfo = {
|
||||
|
|
@ -95,7 +95,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate {
|
|||
const key = dep.module || dep.request;
|
||||
if(key && sourceInfo.emittedImports.get(key)) return;
|
||||
sourceInfo.emittedImports.set(key, true);
|
||||
const content = dep.getImportStatement(true, outputOptions, requestShortener);
|
||||
const content = dep.getImportStatement(true, runtime);
|
||||
source.insert(-1, content);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -95,9 +95,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|||
}
|
||||
|
||||
HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependencyTemplate extends HarmonyImportDependency.Template {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
super.apply(dep, source, outputOptions, requestShortener);
|
||||
const importedVar = dep.getImportVar(requestShortener);
|
||||
apply(dep, source, runtime) {
|
||||
super.apply(dep, source, runtime);
|
||||
const importedVar = dep.getImportVar();
|
||||
const content = this.getContent(dep, importedVar);
|
||||
source.replace(dep.range[0], dep.range[1] - 1, content);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class HarmonyInitDependency extends NullDependency {
|
|||
module.exports = HarmonyInitDependency;
|
||||
|
||||
HarmonyInitDependency.Template = class HarmonyInitDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
const module = dep.originModule;
|
||||
const list = [];
|
||||
for(const dependency of module.dependencies) {
|
||||
|
|
@ -45,7 +45,7 @@ HarmonyInitDependency.Template = class HarmonyInitDependencyTemplate {
|
|||
});
|
||||
|
||||
for(const item of list) {
|
||||
item.template.harmonyInit(item.dependency, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
item.template.harmonyInit(item.dependency, source, runtime, dependencyTemplates);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@ class ImportDependency extends ModuleDependency {
|
|||
}
|
||||
|
||||
ImportDependency.Template = class ImportDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
const depBlock = dep.block;
|
||||
const promise = DepBlockHelpers.getDepBlockPromise(depBlock, outputOptions, requestShortener, "import()");
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dep.request)) : "";
|
||||
const promise = DepBlockHelpers.getDepBlockPromise(depBlock, runtime, "import()");
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dep.request)) : "";
|
||||
|
||||
const content = this.getContent(promise, dep, comment);
|
||||
source.replace(depBlock.range[0], depBlock.range[1] - 1, content);
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ class ImportEagerDependency extends ModuleDependency {
|
|||
}
|
||||
|
||||
ImportEagerDependency.Template = class ImportEagerDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dep.request)) : "";
|
||||
apply(dep, source, runtime) {
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dep.request)) : "";
|
||||
|
||||
const content = this.getContent(dep, comment);
|
||||
source.replace(dep.range[0], dep.range[1] - 1, content);
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ class ImportWeakDependency extends ModuleDependency {
|
|||
}
|
||||
|
||||
ImportWeakDependency.Template = class ImportDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(requestShortener.shorten(dep.request)) : "";
|
||||
apply(dep, source, runtime) {
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(runtime.requestShortener.shorten(dep.request)) : "";
|
||||
|
||||
const content = this.getContent(dep, comment);
|
||||
source.replace(dep.range[0], dep.range[1] - 1, content);
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ const Template = require("../Template");
|
|||
|
||||
class ModuleDependencyTemplateAsId {
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
if(!dep.range) return;
|
||||
const comment = outputOptions.pathinfo ?
|
||||
Template.toComment(requestShortener.shorten(dep.request)) + " " : "";
|
||||
const comment = runtime.outputOptions.pathinfo ?
|
||||
Template.toComment(runtime.requestShortener.shorten(dep.request)) + " " : "";
|
||||
let content;
|
||||
if(dep.module)
|
||||
content = comment + JSON.stringify(dep.module.id);
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ const Template = require("../Template");
|
|||
|
||||
class ModuleDependencyTemplateAsRequireId {
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
if(!dep.range) return;
|
||||
const comment = outputOptions.pathinfo ?
|
||||
Template.toComment(requestShortener.shorten(dep.request)) + " " : "";
|
||||
const comment = runtime.outputOptions.pathinfo ?
|
||||
Template.toComment(runtime.requestShortener.shorten(dep.request)) + " " : "";
|
||||
let content;
|
||||
if(dep.module)
|
||||
content = `__webpack_require__(${comment}${JSON.stringify(dep.module.id)})`;
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@ class RequireEnsureDependency extends NullDependency {
|
|||
}
|
||||
|
||||
RequireEnsureDependency.Template = class RequireEnsureDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
const depBlock = dep.block;
|
||||
const wrapper = DepBlockHelpers.getLoadDepBlockWrapper(depBlock, outputOptions, requestShortener, "require.ensure");
|
||||
const wrapper = DepBlockHelpers.getLoadDepBlockWrapper(depBlock, runtime, "require.ensure");
|
||||
const errorCallbackExists = depBlock.expr.arguments.length === 4 || (!depBlock.chunkName && depBlock.expr.arguments.length === 3);
|
||||
const startBlock = wrapper[0] + "(";
|
||||
const middleBlock = `).bind(null, __webpack_require__)${wrapper[1]}`;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ class RequireIncludeDependency extends ModuleDependency {
|
|||
}
|
||||
|
||||
RequireIncludeDependency.Template = class RequireIncludeDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
const comment = outputOptions.pathinfo ? Template.toComment(`require.include ${requestShortener.shorten(dep.request)}`) : "";
|
||||
apply(dep, source, runtime) {
|
||||
const comment = runtime.outputOptions.pathinfo ? Template.toComment(`require.include ${runtime.requestShortener.shorten(dep.request)}`) : "";
|
||||
source.replace(dep.range[0], dep.range[1] - 1, `undefined${comment}`);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class UnsupportedDependency extends NullDependency {
|
|||
}
|
||||
|
||||
UnsupportedDependency.Template = class UnsupportedDependencyTemplate {
|
||||
apply(dep, source, outputOptions, requestShortener) {
|
||||
apply(dep, source, runtime) {
|
||||
source.replace(dep.range[0], dep.range[1], webpackMissingModule(dep.request));
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -333,7 +333,8 @@ class ConcatenatedModule extends Module {
|
|||
return this.rootModule.identifier() + " " + hash.digest("hex");
|
||||
}
|
||||
|
||||
source(dependencyTemplates, outputOptions, requestShortener) {
|
||||
source(dependencyTemplates, runtimeTemplate) {
|
||||
const requestShortener = runtimeTemplate.requestShortener;
|
||||
// Metainfo for each module
|
||||
const modulesWithInfo = this._orderedConcatenationList.map((info, idx) => {
|
||||
switch(info.type) {
|
||||
|
|
@ -454,7 +455,7 @@ class ConcatenatedModule extends Module {
|
|||
modulesWithInfo.forEach(info => {
|
||||
if(info.type === "concatenated") {
|
||||
const m = info.module;
|
||||
const source = m.source(innerDependencyTemplates, outputOptions, requestShortener);
|
||||
const source = m.source(innerDependencyTemplates, runtimeTemplate);
|
||||
const code = source.source();
|
||||
let ast;
|
||||
try {
|
||||
|
|
@ -710,20 +711,20 @@ class HarmonyImportSpecifierDependencyConcatenatedTemplate {
|
|||
return NaN;
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
harmonyInit(dep, source, runtimeTemplate, dependencyTemplates) {
|
||||
const module = dep.module;
|
||||
const info = this.modulesMap.get(module);
|
||||
if(!info) {
|
||||
this.originalTemplate.harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.harmonyInit(dep, source, runtimeTemplate, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
const module = dep.module;
|
||||
const info = this.modulesMap.get(module);
|
||||
if(!info) {
|
||||
this.originalTemplate.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.apply(dep, source, runtime, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
let content;
|
||||
|
|
@ -759,20 +760,20 @@ class HarmonyImportSideEffectDependencyConcatenatedTemplate {
|
|||
return NaN;
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
harmonyInit(dep, source, runtime, dependencyTemplates) {
|
||||
const module = dep.module;
|
||||
const info = this.modulesMap.get(module);
|
||||
if(!info) {
|
||||
this.originalTemplate.harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.harmonyInit(dep, source, runtime, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
const module = dep.module;
|
||||
const info = this.modulesMap.get(module);
|
||||
if(!info) {
|
||||
this.originalTemplate.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.apply(dep, source, runtime, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -791,16 +792,16 @@ class HarmonyExportSpecifierDependencyConcatenatedTemplate {
|
|||
return NaN;
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
harmonyInit(dep, source, runtime, dependencyTemplates) {
|
||||
if(dep.originModule === this.rootModule) {
|
||||
this.originalTemplate.harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.harmonyInit(dep, source, runtime, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
if(dep.originModule === this.rootModule) {
|
||||
this.originalTemplate.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.apply(dep, source, runtime, dependencyTemplates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -811,7 +812,7 @@ class HarmonyExportExpressionDependencyConcatenatedTemplate {
|
|||
this.rootModule = rootModule;
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
let content = "/* harmony default export */ var __WEBPACK_MODULE_DEFAULT_EXPORT__ = ";
|
||||
if(dep.originModule === this.rootModule) {
|
||||
const used = dep.originModule.isUsed("default");
|
||||
|
|
@ -873,16 +874,16 @@ class HarmonyExportImportedSpecifierDependencyConcatenatedTemplate {
|
|||
return NaN;
|
||||
}
|
||||
|
||||
harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
harmonyInit(dep, source, runtime, dependencyTemplates) {
|
||||
const module = dep.module;
|
||||
const info = this.modulesMap.get(module);
|
||||
if(!info) {
|
||||
this.originalTemplate.harmonyInit(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.harmonyInit(dep, source, runtime, dependencyTemplates);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
if(dep.originModule === this.rootModule) {
|
||||
if(this.modulesMap.get(dep.module)) {
|
||||
const exportDefs = this.getExports(dep);
|
||||
|
|
@ -905,7 +906,7 @@ class HarmonyExportImportedSpecifierDependencyConcatenatedTemplate {
|
|||
source.insert(-1, content);
|
||||
});
|
||||
} else {
|
||||
this.originalTemplate.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
|
||||
this.originalTemplate.apply(dep, source, runtime, dependencyTemplates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -918,7 +919,7 @@ class HarmonyCompatibilityDependencyConcatenatedTemplate {
|
|||
this.modulesMap = modulesMap;
|
||||
}
|
||||
|
||||
apply(dep, source, outputOptions, requestShortener, dependencyTemplates) {
|
||||
apply(dep, source, runtime, dependencyTemplates) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,26 +5,21 @@ require("should");
|
|||
const sinon = require("sinon");
|
||||
const ContextDependencyTemplateAsId = require("../lib/dependencies/ContextDependencyTemplateAsId");
|
||||
|
||||
const requestShortenerMock = {
|
||||
shorten: (request) => `shortened ${request}`
|
||||
};
|
||||
|
||||
describe("ContextDependencyTemplateAsId", () => {
|
||||
let env;
|
||||
|
||||
const applyContextDependencyTemplateAsId = function() {
|
||||
const contextDependencyTemplateAsId = new ContextDependencyTemplateAsId();
|
||||
const args = [].slice.call(arguments).concat(requestShortenerMock);
|
||||
contextDependencyTemplateAsId.apply.apply(contextDependencyTemplateAsId, args);
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
env = {
|
||||
source: {
|
||||
replace: sinon.stub()
|
||||
},
|
||||
outputOptions: {
|
||||
pathinfo: true
|
||||
runtimeTemplate: {
|
||||
outputOptions: {
|
||||
pathinfo: true
|
||||
},
|
||||
requestShortener: {
|
||||
shorten: (request) => `shortened ${request}`
|
||||
}
|
||||
},
|
||||
module: {
|
||||
id: "123",
|
||||
|
|
@ -46,7 +41,7 @@ describe("ContextDependencyTemplateAsId", () => {
|
|||
describe("when applied", () => {
|
||||
describe("with module missing depedencies", () => {
|
||||
beforeEach(() => {
|
||||
applyContextDependencyTemplateAsId(env.baseDependency, env.source, env.outputOptions);
|
||||
new ContextDependencyTemplateAsId().apply(env.baseDependency, env.source, env.runtimeTemplate);
|
||||
});
|
||||
|
||||
it("replaces source with missing module error", () => {
|
||||
|
|
@ -65,8 +60,8 @@ describe("ContextDependencyTemplateAsId", () => {
|
|||
|
||||
describe("and path info true", function() {
|
||||
beforeEach(function() {
|
||||
env.outputOptions.pathinfo = true;
|
||||
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
|
||||
env.runtimeTemplate.outputOptions.pathinfo = true;
|
||||
new ContextDependencyTemplateAsId().apply(env.dependency, env.source, env.runtimeTemplate);
|
||||
});
|
||||
|
||||
it("replaces source with webpack require with comment", () => {
|
||||
|
|
@ -77,8 +72,8 @@ describe("ContextDependencyTemplateAsId", () => {
|
|||
|
||||
describe("and path info false", function() {
|
||||
beforeEach(function() {
|
||||
env.outputOptions.pathinfo = false;
|
||||
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
|
||||
env.runtimeTemplate.outputOptions.pathinfo = false;
|
||||
new ContextDependencyTemplateAsId().apply(env.dependency, env.source, env.runtimeTemplate);
|
||||
});
|
||||
|
||||
it("replaces source with webpack require without comment", () => {
|
||||
|
|
@ -97,7 +92,7 @@ describe("ContextDependencyTemplateAsId", () => {
|
|||
module: env.module
|
||||
});
|
||||
|
||||
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
|
||||
new ContextDependencyTemplateAsId().apply(dependency, env.source, env.runtimeTemplate);
|
||||
});
|
||||
|
||||
it("replaces source with webpack require and wraps value", () => {
|
||||
|
|
@ -124,7 +119,7 @@ describe("ContextDependencyTemplateAsId", () => {
|
|||
module: env.module
|
||||
});
|
||||
|
||||
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
|
||||
new ContextDependencyTemplateAsId().apply(dependency, env.source, env.runtimeTemplate);
|
||||
});
|
||||
|
||||
it("replaces source with webpack require, wraps value and make replacements", () => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue