1 |
|
2 |
|
3 |
|
4 |
|
5 | "use strict";
|
6 |
|
7 | const { OriginalSource, RawSource } = require("webpack-sources");
|
8 |
|
9 | const Module = require("./Module");
|
10 | const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
|
11 | const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
|
12 | const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | class DelegatedModule extends Module {
|
18 | constructor(sourceRequest, data, type, userRequest, originalRequest) {
|
19 | super("javascript/dynamic", null);
|
20 |
|
21 |
|
22 | this.sourceRequest = sourceRequest;
|
23 | this.request = data.id;
|
24 | this.type = type;
|
25 | this.userRequest = userRequest;
|
26 | this.originalRequest = originalRequest;
|
27 | this.delegateData = data;
|
28 |
|
29 |
|
30 | this.delegatedSourceDependency = undefined;
|
31 | }
|
32 |
|
33 | libIdent(options) {
|
34 | return typeof this.originalRequest === "string"
|
35 | ? this.originalRequest
|
36 | : this.originalRequest.libIdent(options);
|
37 | }
|
38 |
|
39 | identifier() {
|
40 | return `delegated ${JSON.stringify(this.request)} from ${
|
41 | this.sourceRequest
|
42 | }`;
|
43 | }
|
44 |
|
45 | readableIdentifier() {
|
46 | return `delegated ${this.userRequest} from ${this.sourceRequest}`;
|
47 | }
|
48 |
|
49 | needRebuild() {
|
50 | return false;
|
51 | }
|
52 |
|
53 | build(options, compilation, resolver, fs, callback) {
|
54 | this.built = true;
|
55 | this.buildMeta = Object.assign({}, this.delegateData.buildMeta);
|
56 | this.buildInfo = {};
|
57 | this.delegatedSourceDependency = new DelegatedSourceDependency(
|
58 | this.sourceRequest
|
59 | );
|
60 | this.addDependency(this.delegatedSourceDependency);
|
61 | this.addDependency(
|
62 | new DelegatedExportsDependency(this, this.delegateData.exports || true)
|
63 | );
|
64 | callback();
|
65 | }
|
66 |
|
67 | source(depTemplates, runtime) {
|
68 | const dep = (this.dependencies[0]);
|
69 | const sourceModule = dep.module;
|
70 | let str;
|
71 |
|
72 | if (!sourceModule) {
|
73 | str = WebpackMissingModule.moduleCode(this.sourceRequest);
|
74 | } else {
|
75 | str = `module.exports = (${runtime.moduleExports({
|
76 | module: sourceModule,
|
77 | request: dep.request
|
78 | })})`;
|
79 |
|
80 | switch (this.type) {
|
81 | case "require":
|
82 | str += `(${JSON.stringify(this.request)})`;
|
83 | break;
|
84 | case "object":
|
85 | str += `[${JSON.stringify(this.request)}]`;
|
86 | break;
|
87 | }
|
88 |
|
89 | str += ";";
|
90 | }
|
91 |
|
92 | if (this.useSourceMap) {
|
93 | return new OriginalSource(str, this.identifier());
|
94 | } else {
|
95 | return new RawSource(str);
|
96 | }
|
97 | }
|
98 |
|
99 | size() {
|
100 | return 42;
|
101 | }
|
102 |
|
103 | |
104 |
|
105 |
|
106 |
|
107 | updateHash(hash) {
|
108 | hash.update(this.type);
|
109 | hash.update(JSON.stringify(this.request));
|
110 | super.updateHash(hash);
|
111 | }
|
112 | }
|
113 |
|
114 | module.exports = DelegatedModule;
|