source: frontend/node_modules/webpack/lib/dependencies/CommonJsPlugin.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 9.6 KB
Line 
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const {
9 JAVASCRIPT_MODULE_TYPE_AUTO,
10 JAVASCRIPT_MODULE_TYPE_DYNAMIC
11} = require("../ModuleTypeConstants");
12const RuntimeGlobals = require("../RuntimeGlobals");
13const RuntimeModule = require("../RuntimeModule");
14const SelfModuleFactory = require("../SelfModuleFactory");
15const Template = require("../Template");
16const {
17 evaluateToIdentifier,
18 expressionIsUnsupported,
19 toConstantDependency
20} = require("../javascript/JavascriptParserHelpers");
21const CommonJsExportRequireDependency = require("./CommonJsExportRequireDependency");
22const CommonJsExportsDependency = require("./CommonJsExportsDependency");
23const CommonJsExportsParserPlugin = require("./CommonJsExportsParserPlugin");
24const CommonJsFullRequireDependency = require("./CommonJsFullRequireDependency");
25const CommonJsImportsParserPlugin = require("./CommonJsImportsParserPlugin");
26const CommonJsRequireContextDependency = require("./CommonJsRequireContextDependency");
27const CommonJsRequireDependency = require("./CommonJsRequireDependency");
28const CommonJsSelfReferenceDependency = require("./CommonJsSelfReferenceDependency");
29const ModuleDecoratorDependency = require("./ModuleDecoratorDependency");
30const RequireHeaderDependency = require("./RequireHeaderDependency");
31const RequireResolveContextDependency = require("./RequireResolveContextDependency");
32const RequireResolveDependency = require("./RequireResolveDependency");
33const RequireResolveHeaderDependency = require("./RequireResolveHeaderDependency");
34const RuntimeRequirementsDependency = require("./RuntimeRequirementsDependency");
35
36/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
37/** @typedef {import("../Compilation")} Compilation */
38/** @typedef {import("../Compiler")} Compiler */
39/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
40/** @typedef {import("../Module").BuildInfo} BuildInfo */
41/** @typedef {import("../javascript/JavascriptParser")} Parser */
42
43const PLUGIN_NAME = "CommonJsPlugin";
44
45class CommonJsPlugin {
46 /**
47 * Applies the plugin by registering its hooks on the compiler.
48 * @param {Compiler} compiler the compiler instance
49 * @returns {void}
50 */
51 apply(compiler) {
52 compiler.hooks.compilation.tap(
53 PLUGIN_NAME,
54 (compilation, { contextModuleFactory, normalModuleFactory }) => {
55 compilation.dependencyFactories.set(
56 CommonJsRequireDependency,
57 normalModuleFactory
58 );
59 compilation.dependencyTemplates.set(
60 CommonJsRequireDependency,
61 new CommonJsRequireDependency.Template()
62 );
63
64 compilation.dependencyFactories.set(
65 CommonJsFullRequireDependency,
66 normalModuleFactory
67 );
68 compilation.dependencyTemplates.set(
69 CommonJsFullRequireDependency,
70 new CommonJsFullRequireDependency.Template()
71 );
72
73 compilation.dependencyFactories.set(
74 CommonJsRequireContextDependency,
75 contextModuleFactory
76 );
77 compilation.dependencyTemplates.set(
78 CommonJsRequireContextDependency,
79 new CommonJsRequireContextDependency.Template()
80 );
81
82 compilation.dependencyFactories.set(
83 RequireResolveDependency,
84 normalModuleFactory
85 );
86 compilation.dependencyTemplates.set(
87 RequireResolveDependency,
88 new RequireResolveDependency.Template()
89 );
90
91 compilation.dependencyFactories.set(
92 RequireResolveContextDependency,
93 contextModuleFactory
94 );
95 compilation.dependencyTemplates.set(
96 RequireResolveContextDependency,
97 new RequireResolveContextDependency.Template()
98 );
99
100 compilation.dependencyTemplates.set(
101 RequireResolveHeaderDependency,
102 new RequireResolveHeaderDependency.Template()
103 );
104
105 compilation.dependencyTemplates.set(
106 RequireHeaderDependency,
107 new RequireHeaderDependency.Template()
108 );
109
110 compilation.dependencyTemplates.set(
111 CommonJsExportsDependency,
112 new CommonJsExportsDependency.Template()
113 );
114
115 compilation.dependencyFactories.set(
116 CommonJsExportRequireDependency,
117 normalModuleFactory
118 );
119 compilation.dependencyTemplates.set(
120 CommonJsExportRequireDependency,
121 new CommonJsExportRequireDependency.Template()
122 );
123
124 const selfFactory = new SelfModuleFactory(compilation.moduleGraph);
125
126 compilation.dependencyFactories.set(
127 CommonJsSelfReferenceDependency,
128 selfFactory
129 );
130 compilation.dependencyTemplates.set(
131 CommonJsSelfReferenceDependency,
132 new CommonJsSelfReferenceDependency.Template()
133 );
134
135 compilation.dependencyFactories.set(
136 ModuleDecoratorDependency,
137 selfFactory
138 );
139 compilation.dependencyTemplates.set(
140 ModuleDecoratorDependency,
141 new ModuleDecoratorDependency.Template()
142 );
143
144 compilation.hooks.runtimeRequirementInModule
145 .for(RuntimeGlobals.harmonyModuleDecorator)
146 .tap(PLUGIN_NAME, (module, set) => {
147 set.add(RuntimeGlobals.module);
148 set.add(RuntimeGlobals.requireScope);
149 });
150
151 compilation.hooks.runtimeRequirementInModule
152 .for(RuntimeGlobals.nodeModuleDecorator)
153 .tap(PLUGIN_NAME, (module, set) => {
154 set.add(RuntimeGlobals.module);
155 set.add(RuntimeGlobals.requireScope);
156 });
157
158 compilation.hooks.runtimeRequirementInTree
159 .for(RuntimeGlobals.harmonyModuleDecorator)
160 .tap(PLUGIN_NAME, (chunk, _set) => {
161 compilation.addRuntimeModule(
162 chunk,
163 new HarmonyModuleDecoratorRuntimeModule()
164 );
165 });
166
167 compilation.hooks.runtimeRequirementInTree
168 .for(RuntimeGlobals.nodeModuleDecorator)
169 .tap(PLUGIN_NAME, (chunk, _set) => {
170 compilation.addRuntimeModule(
171 chunk,
172 new NodeModuleDecoratorRuntimeModule()
173 );
174 });
175
176 /**
177 * Handles the hook callback for this code path.
178 * @param {Parser} parser parser parser
179 * @param {JavascriptParserOptions} parserOptions parserOptions
180 * @returns {void}
181 */
182 const handler = (parser, parserOptions) => {
183 if (parserOptions.commonjs !== undefined && !parserOptions.commonjs) {
184 return;
185 }
186 parser.hooks.typeof
187 .for("module")
188 .tap(
189 PLUGIN_NAME,
190 toConstantDependency(parser, JSON.stringify("object"))
191 );
192
193 parser.hooks.expression
194 .for("require.main")
195 .tap(
196 PLUGIN_NAME,
197 toConstantDependency(
198 parser,
199 `${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}]`,
200 [RuntimeGlobals.moduleCache, RuntimeGlobals.entryModuleId]
201 )
202 );
203
204 parser.hooks.expression
205 .for("require.extensions")
206 .tap(
207 PLUGIN_NAME,
208 expressionIsUnsupported(
209 parser,
210 "require.extensions is not supported by webpack. Use a loader instead."
211 )
212 );
213
214 parser.hooks.expression
215 .for(RuntimeGlobals.moduleLoaded)
216 .tap(PLUGIN_NAME, (expr) => {
217 /** @type {BuildInfo} */
218 (parser.state.module.buildInfo).moduleConcatenationBailout =
219 RuntimeGlobals.moduleLoaded;
220 const dep = new RuntimeRequirementsDependency([
221 RuntimeGlobals.moduleLoaded
222 ]);
223 dep.loc = /** @type {DependencyLocation} */ (expr.loc);
224 parser.state.module.addPresentationalDependency(dep);
225 return true;
226 });
227
228 parser.hooks.expression
229 .for(RuntimeGlobals.moduleId)
230 .tap(PLUGIN_NAME, (expr) => {
231 /** @type {BuildInfo} */
232 (parser.state.module.buildInfo).moduleConcatenationBailout =
233 RuntimeGlobals.moduleId;
234 const dep = new RuntimeRequirementsDependency([
235 RuntimeGlobals.moduleId
236 ]);
237 dep.loc = /** @type {DependencyLocation} */ (expr.loc);
238 parser.state.module.addPresentationalDependency(dep);
239 return true;
240 });
241
242 parser.hooks.evaluateIdentifier.for("module.hot").tap(
243 PLUGIN_NAME,
244 evaluateToIdentifier("module.hot", "module", () => ["hot"], null)
245 );
246
247 new CommonJsImportsParserPlugin(parserOptions).apply(parser);
248 new CommonJsExportsParserPlugin(compilation.moduleGraph).apply(
249 parser
250 );
251 };
252
253 normalModuleFactory.hooks.parser
254 .for(JAVASCRIPT_MODULE_TYPE_AUTO)
255 .tap(PLUGIN_NAME, handler);
256 normalModuleFactory.hooks.parser
257 .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
258 .tap(PLUGIN_NAME, handler);
259 }
260 );
261 }
262}
263
264class HarmonyModuleDecoratorRuntimeModule extends RuntimeModule {
265 constructor() {
266 super("harmony module decorator");
267 }
268
269 /**
270 * Generates runtime code for this runtime module.
271 * @returns {string | null} runtime code
272 */
273 generate() {
274 const { runtimeTemplate } = /** @type {Compilation} */ (this.compilation);
275 return Template.asString([
276 `${
277 RuntimeGlobals.harmonyModuleDecorator
278 } = ${runtimeTemplate.basicFunction("module", [
279 "module = Object.create(module);",
280 "if (!module.children) module.children = [];",
281 "Object.defineProperty(module, 'exports', {",
282 Template.indent([
283 "enumerable: true,",
284 `set: ${runtimeTemplate.basicFunction("", [
285 "throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);"
286 ])}`
287 ]),
288 "});",
289 "return module;"
290 ])};`
291 ]);
292 }
293}
294
295class NodeModuleDecoratorRuntimeModule extends RuntimeModule {
296 constructor() {
297 super("node module decorator");
298 }
299
300 /**
301 * Generates runtime code for this runtime module.
302 * @returns {string | null} runtime code
303 */
304 generate() {
305 const { runtimeTemplate } = /** @type {Compilation} */ (this.compilation);
306 return Template.asString([
307 `${RuntimeGlobals.nodeModuleDecorator} = ${runtimeTemplate.basicFunction(
308 "module",
309 [
310 "module.paths = [];",
311 "if (!module.children) module.children = [];",
312 "return module;"
313 ]
314 )};`
315 ]);
316 }
317}
318
319module.exports = CommonJsPlugin;
Note: See TracBrowser for help on using the repository browser.