1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 | const InitFragment = require("../InitFragment");
|
9 | const makeSerializable = require("../util/makeSerializable");
|
10 | const propertyAccess = require("../util/propertyAccess");
|
11 | const { handleDependencyBase } = require("./CommonJsDependencyHelpers");
|
12 | const NullDependency = require("./NullDependency");
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | const EMPTY_OBJECT = {};
|
21 |
|
22 | class CommonJsExportsDependency extends NullDependency {
|
23 | constructor(range, valueRange, base, names) {
|
24 | super();
|
25 | this.range = range;
|
26 | this.valueRange = valueRange;
|
27 | this.base = base;
|
28 | this.names = names;
|
29 | }
|
30 |
|
31 | get type() {
|
32 | return "cjs exports";
|
33 | }
|
34 |
|
35 | |
36 |
|
37 |
|
38 |
|
39 |
|
40 | getExports(moduleGraph) {
|
41 | const name = this.names[0];
|
42 | return {
|
43 | exports: [
|
44 | {
|
45 | name,
|
46 |
|
47 |
|
48 |
|
49 | canMangle: !(name in EMPTY_OBJECT)
|
50 | }
|
51 | ],
|
52 | dependencies: undefined
|
53 | };
|
54 | }
|
55 |
|
56 | serialize(context) {
|
57 | const { write } = context;
|
58 | write(this.range);
|
59 | write(this.valueRange);
|
60 | write(this.base);
|
61 | write(this.names);
|
62 | super.serialize(context);
|
63 | }
|
64 |
|
65 | deserialize(context) {
|
66 | const { read } = context;
|
67 | this.range = read();
|
68 | this.valueRange = read();
|
69 | this.base = read();
|
70 | this.names = read();
|
71 | super.deserialize(context);
|
72 | }
|
73 | }
|
74 |
|
75 | makeSerializable(
|
76 | CommonJsExportsDependency,
|
77 | "webpack/lib/dependencies/CommonJsExportsDependency"
|
78 | );
|
79 |
|
80 | CommonJsExportsDependency.Template = class CommonJsExportsDependencyTemplate extends (
|
81 | NullDependency.Template
|
82 | ) {
|
83 | |
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 | apply(
|
90 | dependency,
|
91 | source,
|
92 | { module, moduleGraph, initFragments, runtimeRequirements, runtime }
|
93 | ) {
|
94 | const dep = (dependency);
|
95 | const used = moduleGraph
|
96 | .getExportsInfo(module)
|
97 | .getUsedName(dep.names, runtime);
|
98 |
|
99 | const [type, base] = handleDependencyBase(
|
100 | dep.base,
|
101 | module,
|
102 | runtimeRequirements
|
103 | );
|
104 |
|
105 | switch (type) {
|
106 | case "expression":
|
107 | if (!used) {
|
108 | initFragments.push(
|
109 | new InitFragment(
|
110 | "var __webpack_unused_export__;\n",
|
111 | InitFragment.STAGE_CONSTANTS,
|
112 | 0,
|
113 | "__webpack_unused_export__"
|
114 | )
|
115 | );
|
116 | source.replace(
|
117 | dep.range[0],
|
118 | dep.range[1] - 1,
|
119 | "__webpack_unused_export__"
|
120 | );
|
121 | return;
|
122 | }
|
123 | source.replace(
|
124 | dep.range[0],
|
125 | dep.range[1] - 1,
|
126 | `${base}${propertyAccess(used)}`
|
127 | );
|
128 | return;
|
129 | case "Object.defineProperty":
|
130 | if (!used) {
|
131 | initFragments.push(
|
132 | new InitFragment(
|
133 | "var __webpack_unused_export__;\n",
|
134 | InitFragment.STAGE_CONSTANTS,
|
135 | 0,
|
136 | "__webpack_unused_export__"
|
137 | )
|
138 | );
|
139 | source.replace(
|
140 | dep.range[0],
|
141 | dep.valueRange[0] - 1,
|
142 | "__webpack_unused_export__ = ("
|
143 | );
|
144 | source.replace(dep.valueRange[1], dep.range[1] - 1, ")");
|
145 | return;
|
146 | }
|
147 | source.replace(
|
148 | dep.range[0],
|
149 | dep.valueRange[0] - 1,
|
150 | `Object.defineProperty(${base}${propertyAccess(
|
151 | used.slice(0, -1)
|
152 | )}, ${JSON.stringify(used[used.length - 1])}, (`
|
153 | );
|
154 | source.replace(dep.valueRange[1], dep.range[1] - 1, "))");
|
155 | return;
|
156 | }
|
157 | }
|
158 | };
|
159 |
|
160 | module.exports = CommonJsExportsDependency;
|