UNPKG

1.92 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const Module = require("./Module");
8const Template = require("./Template");
9const { RawSource } = require("webpack-sources");
10
11/** @typedef {import("./util/createHash").Hash} Hash */
12
13class MultiModule extends Module {
14 constructor(context, dependencies, name) {
15 super("javascript/dynamic", context);
16
17 // Info from Factory
18 this.dependencies = dependencies;
19 this.name = name;
20 this._identifier = `multi ${this.dependencies
21 .map(d => d.request)
22 .join(" ")}`;
23 }
24
25 identifier() {
26 return this._identifier;
27 }
28
29 readableIdentifier(requestShortener) {
30 return `multi ${this.dependencies
31 .map(d => requestShortener.shorten(d.request))
32 .join(" ")}`;
33 }
34
35 build(options, compilation, resolver, fs, callback) {
36 this.built = true;
37 this.buildMeta = {};
38 this.buildInfo = {};
39 return callback();
40 }
41
42 needRebuild() {
43 return false;
44 }
45
46 size() {
47 return 16 + this.dependencies.length * 12;
48 }
49
50 /**
51 * @param {Hash} hash the hash used to track dependencies
52 * @returns {void}
53 */
54 updateHash(hash) {
55 hash.update("multi module");
56 hash.update(this.name || "");
57 super.updateHash(hash);
58 }
59
60 source(dependencyTemplates, runtimeTemplate) {
61 const str = [];
62 let idx = 0;
63 for (const dep of this.dependencies) {
64 if (dep.module) {
65 if (idx === this.dependencies.length - 1) {
66 str.push("module.exports = ");
67 }
68 str.push("__webpack_require__(");
69 if (runtimeTemplate.outputOptions.pathinfo) {
70 str.push(Template.toComment(dep.request));
71 }
72 str.push(`${JSON.stringify(dep.module.id)}`);
73 str.push(")");
74 } else {
75 const content = require("./dependencies/WebpackMissingModule").module(
76 dep.request
77 );
78 str.push(content);
79 }
80 str.push(";\n");
81 idx++;
82 }
83 return new RawSource(str.join(""));
84 }
85}
86
87module.exports = MultiModule;