1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 | const ConstDependency = require("./dependencies/ConstDependency");
|
9 | const ExportsInfoDependency = require("./dependencies/ExportsInfoDependency");
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | class ExportsInfoApiPlugin {
|
15 | |
16 |
|
17 |
|
18 |
|
19 |
|
20 | apply(compiler) {
|
21 | compiler.hooks.compilation.tap(
|
22 | "ExportsInfoApiPlugin",
|
23 | (compilation, { normalModuleFactory }) => {
|
24 | compilation.dependencyTemplates.set(
|
25 | ExportsInfoDependency,
|
26 | new ExportsInfoDependency.Template()
|
27 | );
|
28 | |
29 |
|
30 |
|
31 |
|
32 | const handler = parser => {
|
33 | parser.hooks.expressionMemberChain
|
34 | .for("__webpack_exports_info__")
|
35 | .tap("ExportsInfoApiPlugin", (expr, members) => {
|
36 | const dep =
|
37 | members.length >= 2
|
38 | ? new ExportsInfoDependency(
|
39 | expr.range,
|
40 | members.slice(0, -1),
|
41 | members[members.length - 1]
|
42 | )
|
43 | : new ExportsInfoDependency(expr.range, null, members[0]);
|
44 | dep.loc = expr.loc;
|
45 | parser.state.module.addDependency(dep);
|
46 | return true;
|
47 | });
|
48 | parser.hooks.expression
|
49 | .for("__webpack_exports_info__")
|
50 | .tap("ExportsInfoApiPlugin", expr => {
|
51 | const dep = new ConstDependency("true", expr.range);
|
52 | dep.loc = expr.loc;
|
53 | parser.state.module.addPresentationalDependency(dep);
|
54 | return true;
|
55 | });
|
56 | };
|
57 | normalModuleFactory.hooks.parser
|
58 | .for("javascript/auto")
|
59 | .tap("ExportsInfoApiPlugin", handler);
|
60 | normalModuleFactory.hooks.parser
|
61 | .for("javascript/dynamic")
|
62 | .tap("ExportsInfoApiPlugin", handler);
|
63 | normalModuleFactory.hooks.parser
|
64 | .for("javascript/esm")
|
65 | .tap("ExportsInfoApiPlugin", handler);
|
66 | }
|
67 | );
|
68 | }
|
69 | }
|
70 |
|
71 | module.exports = ExportsInfoApiPlugin;
|