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

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

Fix frontend appearance

  • Property mode set to 100644
File size: 5.4 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_ESM
11} = require("../ModuleTypeConstants");
12const CreateRequireParserPlugin = require("./CreateRequireParserPlugin");
13const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
14const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
15const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
16const HarmonyDetectionParserPlugin = require("./HarmonyDetectionParserPlugin");
17const HarmonyEvaluatedImportSpecifierDependency = require("./HarmonyEvaluatedImportSpecifierDependency");
18const HarmonyExportDependencyParserPlugin = require("./HarmonyExportDependencyParserPlugin");
19const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
20const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
21const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
22const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
23const HarmonyImportDependencyParserPlugin = require("./HarmonyImportDependencyParserPlugin");
24const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
25const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
26
27const HarmonyTopLevelThisParserPlugin = require("./HarmonyTopLevelThisParserPlugin");
28
29/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
30/** @typedef {import("../Compiler")} Compiler */
31/** @typedef {import("../javascript/JavascriptParser")} Parser */
32
33/**
34 * Defines the harmony modules plugin options type used by this module.
35 * @typedef {object} HarmonyModulesPluginOptions
36 * @property {boolean=} deferImport
37 */
38
39const PLUGIN_NAME = "HarmonyModulesPlugin";
40
41class HarmonyModulesPlugin {
42 /**
43 * Creates an instance of HarmonyModulesPlugin.
44 * @param {HarmonyModulesPluginOptions} options options
45 */
46 constructor(options) {
47 this.options = options;
48 }
49
50 /**
51 * Applies the plugin by registering its hooks on the compiler.
52 * @param {Compiler} compiler the compiler instance
53 * @returns {void}
54 */
55 apply(compiler) {
56 compiler.hooks.compilation.tap(
57 PLUGIN_NAME,
58 (compilation, { normalModuleFactory }) => {
59 compilation.dependencyTemplates.set(
60 HarmonyCompatibilityDependency,
61 new HarmonyCompatibilityDependency.Template()
62 );
63
64 compilation.dependencyFactories.set(
65 HarmonyImportSideEffectDependency,
66 normalModuleFactory
67 );
68 compilation.dependencyTemplates.set(
69 HarmonyImportSideEffectDependency,
70 new HarmonyImportSideEffectDependency.Template()
71 );
72
73 compilation.dependencyFactories.set(
74 HarmonyImportSpecifierDependency,
75 normalModuleFactory
76 );
77 compilation.dependencyTemplates.set(
78 HarmonyImportSpecifierDependency,
79 new HarmonyImportSpecifierDependency.Template()
80 );
81
82 compilation.dependencyFactories.set(
83 HarmonyEvaluatedImportSpecifierDependency,
84 normalModuleFactory
85 );
86 compilation.dependencyTemplates.set(
87 HarmonyEvaluatedImportSpecifierDependency,
88 new HarmonyEvaluatedImportSpecifierDependency.Template()
89 );
90
91 compilation.dependencyTemplates.set(
92 HarmonyExportHeaderDependency,
93 new HarmonyExportHeaderDependency.Template()
94 );
95
96 compilation.dependencyTemplates.set(
97 HarmonyExportExpressionDependency,
98 new HarmonyExportExpressionDependency.Template()
99 );
100
101 compilation.dependencyTemplates.set(
102 HarmonyExportSpecifierDependency,
103 new HarmonyExportSpecifierDependency.Template()
104 );
105
106 compilation.dependencyFactories.set(
107 HarmonyExportImportedSpecifierDependency,
108 normalModuleFactory
109 );
110 compilation.dependencyTemplates.set(
111 HarmonyExportImportedSpecifierDependency,
112 new HarmonyExportImportedSpecifierDependency.Template()
113 );
114
115 compilation.dependencyTemplates.set(
116 HarmonyAcceptDependency,
117 new HarmonyAcceptDependency.Template()
118 );
119
120 compilation.dependencyFactories.set(
121 HarmonyAcceptImportDependency,
122 normalModuleFactory
123 );
124 compilation.dependencyTemplates.set(
125 HarmonyAcceptImportDependency,
126 new HarmonyAcceptImportDependency.Template()
127 );
128
129 /**
130 * Handles the hook callback for this code path.
131 * @param {Parser} parser parser parser
132 * @param {JavascriptParserOptions} parserOptions parserOptions
133 * @returns {void}
134 */
135 const handler = (parser, parserOptions) => {
136 // TODO webpack 6: rename harmony to esm or module
137 if (parserOptions.harmony !== undefined && !parserOptions.harmony) {
138 return;
139 }
140
141 new HarmonyDetectionParserPlugin().apply(parser);
142 new HarmonyImportDependencyParserPlugin(parserOptions).apply(parser);
143 new HarmonyExportDependencyParserPlugin(parserOptions).apply(parser);
144 new HarmonyTopLevelThisParserPlugin().apply(parser);
145 if (parserOptions.createRequire) {
146 new CreateRequireParserPlugin(parserOptions).apply(parser);
147 }
148 };
149
150 normalModuleFactory.hooks.parser
151 .for(JAVASCRIPT_MODULE_TYPE_AUTO)
152 .tap(PLUGIN_NAME, handler);
153 normalModuleFactory.hooks.parser
154 .for(JAVASCRIPT_MODULE_TYPE_ESM)
155 .tap(PLUGIN_NAME, handler);
156 }
157 );
158 }
159}
160
161module.exports = HarmonyModulesPlugin;
Note: See TracBrowser for help on using the repository browser.