summaryrefslogtreecommitdiffstats
path: root/node_modules/webpack/lib/JavascriptModulesPlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/JavascriptModulesPlugin.js')
-rw-r--r--node_modules/webpack/lib/JavascriptModulesPlugin.js185
1 files changed, 185 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/JavascriptModulesPlugin.js b/node_modules/webpack/lib/JavascriptModulesPlugin.js
new file mode 100644
index 0000000..2c1bbe4
--- /dev/null
+++ b/node_modules/webpack/lib/JavascriptModulesPlugin.js
@@ -0,0 +1,185 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+const Parser = require("./Parser");
+const Template = require("./Template");
+const { ConcatSource } = require("webpack-sources");
+const JavascriptGenerator = require("./JavascriptGenerator");
+const createHash = require("./util/createHash");
+
+class JavascriptModulesPlugin {
+ apply(compiler) {
+ compiler.hooks.compilation.tap(
+ "JavascriptModulesPlugin",
+ (compilation, { normalModuleFactory }) => {
+ normalModuleFactory.hooks.createParser
+ .for("javascript/auto")
+ .tap("JavascriptModulesPlugin", options => {
+ return new Parser(options, "auto");
+ });
+ normalModuleFactory.hooks.createParser
+ .for("javascript/dynamic")
+ .tap("JavascriptModulesPlugin", options => {
+ return new Parser(options, "script");
+ });
+ normalModuleFactory.hooks.createParser
+ .for("javascript/esm")
+ .tap("JavascriptModulesPlugin", options => {
+ return new Parser(options, "module");
+ });
+ normalModuleFactory.hooks.createGenerator
+ .for("javascript/auto")
+ .tap("JavascriptModulesPlugin", () => {
+ return new JavascriptGenerator();
+ });
+ normalModuleFactory.hooks.createGenerator
+ .for("javascript/dynamic")
+ .tap("JavascriptModulesPlugin", () => {
+ return new JavascriptGenerator();
+ });
+ normalModuleFactory.hooks.createGenerator
+ .for("javascript/esm")
+ .tap("JavascriptModulesPlugin", () => {
+ return new JavascriptGenerator();
+ });
+ compilation.mainTemplate.hooks.renderManifest.tap(
+ "JavascriptModulesPlugin",
+ (result, options) => {
+ const chunk = options.chunk;
+ const hash = options.hash;
+ const fullHash = options.fullHash;
+ const outputOptions = options.outputOptions;
+ const moduleTemplates = options.moduleTemplates;
+ const dependencyTemplates = options.dependencyTemplates;
+
+ const filenameTemplate =
+ chunk.filenameTemplate || outputOptions.filename;
+
+ const useChunkHash = compilation.mainTemplate.useChunkHash(chunk);
+
+ result.push({
+ render: () =>
+ compilation.mainTemplate.render(
+ hash,
+ chunk,
+ moduleTemplates.javascript,
+ dependencyTemplates
+ ),
+ filenameTemplate,
+ pathOptions: {
+ noChunkHash: !useChunkHash,
+ contentHashType: "javascript",
+ chunk
+ },
+ identifier: `chunk${chunk.id}`,
+ hash: useChunkHash ? chunk.hash : fullHash
+ });
+ return result;
+ }
+ );
+ compilation.mainTemplate.hooks.modules.tap(
+ "JavascriptModulesPlugin",
+ (source, chunk, hash, moduleTemplate, dependencyTemplates) => {
+ return Template.renderChunkModules(
+ chunk,
+ m => typeof m.source === "function",
+ moduleTemplate,
+ dependencyTemplates,
+ "/******/ "
+ );
+ }
+ );
+ compilation.chunkTemplate.hooks.renderManifest.tap(
+ "JavascriptModulesPlugin",
+ (result, options) => {
+ const chunk = options.chunk;
+ const outputOptions = options.outputOptions;
+ const moduleTemplates = options.moduleTemplates;
+ const dependencyTemplates = options.dependencyTemplates;
+ const filenameTemplate =
+ chunk.filenameTemplate || outputOptions.chunkFilename;
+
+ result.push({
+ render: () =>
+ this.renderJavascript(
+ compilation.chunkTemplate,
+ chunk,
+ moduleTemplates.javascript,
+ dependencyTemplates
+ ),
+ filenameTemplate,
+ pathOptions: {
+ chunk,
+ contentHashType: "javascript"
+ },
+ identifier: `chunk${chunk.id}`,
+ hash: chunk.hash
+ });
+
+ return result;
+ }
+ );
+ compilation.hooks.contentHash.tap("JavascriptModulesPlugin", chunk => {
+ const outputOptions = compilation.outputOptions;
+ const {
+ hashSalt,
+ hashDigest,
+ hashDigestLength,
+ hashFunction
+ } = outputOptions;
+ const hash = createHash(hashFunction);
+ if (hashSalt) hash.update(hashSalt);
+ const template = chunk.hasRuntime()
+ ? compilation.mainTemplate
+ : compilation.chunkTemplate;
+ hash.update(`${chunk.id} `);
+ hash.update(chunk.ids ? chunk.ids.join(",") : "");
+ template.updateHashForChunk(
+ hash,
+ chunk,
+ compilation.moduleTemplates.javascript,
+ compilation.dependencyTemplates
+ );
+ for (const m of chunk.modulesIterable) {
+ if (typeof m.source === "function") {
+ hash.update(m.hash);
+ }
+ }
+ const digest = /** @type {string} */ (hash.digest(hashDigest));
+ chunk.contentHash.javascript = digest.substr(0, hashDigestLength);
+ });
+ }
+ );
+ }
+
+ renderJavascript(chunkTemplate, chunk, moduleTemplate, dependencyTemplates) {
+ const moduleSources = Template.renderChunkModules(
+ chunk,
+ m => typeof m.source === "function",
+ moduleTemplate,
+ dependencyTemplates
+ );
+ const core = chunkTemplate.hooks.modules.call(
+ moduleSources,
+ chunk,
+ moduleTemplate,
+ dependencyTemplates
+ );
+ let source = chunkTemplate.hooks.render.call(
+ core,
+ chunk,
+ moduleTemplate,
+ dependencyTemplates
+ );
+ if (chunk.hasEntryModule()) {
+ source = chunkTemplate.hooks.renderWithEntry.call(source, chunk);
+ }
+ chunk.rendered = true;
+ return new ConcatSource(source, ";");
+ }
+}
+
+module.exports = JavascriptModulesPlugin;