webpack 5.59.0 → 5.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +1 -7
- package/hot/lazy-compilation-node.js +3 -1
- package/hot/poll.js +1 -1
- package/hot/signal.js +1 -1
- package/lib/APIPlugin.js +33 -0
- package/lib/BannerPlugin.js +10 -4
- package/lib/Cache.js +1 -1
- package/lib/CacheFacade.js +4 -11
- package/lib/Chunk.js +6 -3
- package/lib/ChunkGraph.js +1 -2
- package/lib/ChunkGroup.js +1 -1
- package/lib/CleanPlugin.js +81 -20
- package/lib/Compilation.js +179 -91
- package/lib/Compiler.js +86 -17
- package/lib/ConstPlugin.js +2 -2
- package/lib/ContextModule.js +142 -51
- package/lib/ContextModuleFactory.js +65 -25
- package/lib/DelegatedModule.js +1 -1
- package/lib/DelegatedModuleFactoryPlugin.js +1 -1
- package/lib/Dependency.js +17 -0
- package/lib/DependencyTemplate.js +9 -0
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllModule.js +1 -1
- package/lib/EntryOptionPlugin.js +2 -0
- package/lib/ErrorHelpers.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +16 -1
- package/lib/EvalSourceMapDevToolPlugin.js +18 -1
- package/lib/ExportsInfo.js +4 -4
- package/lib/ExternalModule.js +94 -54
- package/lib/ExternalModuleFactoryPlugin.js +5 -5
- package/lib/FileSystemInfo.js +89 -44
- package/lib/Generator.js +3 -0
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +3 -1
- package/lib/LoaderOptionsPlugin.js +1 -1
- package/lib/Module.js +27 -4
- package/lib/ModuleFilenameHelpers.js +8 -4
- package/lib/ModuleHashingError.js +29 -0
- package/lib/MultiCompiler.js +1 -1
- package/lib/MultiWatching.js +1 -1
- package/lib/NodeStuffPlugin.js +10 -0
- package/lib/NormalModule.js +41 -26
- package/lib/NormalModuleFactory.js +42 -37
- package/lib/ProgressPlugin.js +4 -5
- package/lib/RawModule.js +1 -1
- package/lib/RuntimeGlobals.js +29 -1
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +77 -1
- package/lib/RuntimeTemplate.js +114 -2
- package/lib/Template.js +2 -1
- package/lib/TemplatedPathPlugin.js +48 -23
- package/lib/WatchIgnorePlugin.js +19 -7
- package/lib/Watching.js +33 -19
- package/lib/WebpackOptionsApply.js +57 -11
- package/lib/asset/AssetGenerator.js +193 -63
- package/lib/asset/AssetModulesPlugin.js +3 -0
- package/lib/asset/RawDataUrlModule.js +148 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/buildChunkGraph.js +36 -6
- package/lib/cache/PackFileCacheStrategy.js +7 -4
- package/lib/cache/ResolverCachePlugin.js +90 -29
- package/lib/cli.js +44 -3
- package/lib/config/browserslistTargetHandler.js +41 -6
- package/lib/config/defaults.js +115 -19
- package/lib/config/normalization.js +9 -0
- package/lib/config/target.js +10 -0
- package/lib/container/ContainerEntryModule.js +8 -5
- package/lib/container/FallbackModule.js +4 -4
- package/lib/container/RemoteModule.js +4 -2
- package/lib/css/CssExportsGenerator.js +139 -0
- package/lib/css/CssGenerator.js +109 -0
- package/lib/css/CssLoadingRuntimeModule.js +440 -0
- package/lib/css/CssModulesPlugin.js +462 -0
- package/lib/css/CssParser.js +618 -0
- package/lib/css/walkCssTokens.js +659 -0
- package/lib/debug/ProfilingPlugin.js +24 -21
- package/lib/dependencies/AMDRequireDependency.js +6 -6
- package/lib/dependencies/CommonJsExportsParserPlugin.js +1 -2
- package/lib/dependencies/CommonJsFullRequireDependency.js +5 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -3
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -1
- package/lib/dependencies/ContextDependency.js +1 -0
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -3
- package/lib/dependencies/CreateScriptUrlDependency.js +12 -0
- package/lib/dependencies/CssExportDependency.js +85 -0
- package/lib/dependencies/CssImportDependency.js +75 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +119 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +101 -0
- package/lib/dependencies/CssUrlDependency.js +132 -0
- package/lib/dependencies/ExportsInfoDependency.js +6 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +5 -3
- package/lib/dependencies/HarmonyCompatibilityDependency.js +5 -5
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +95 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -3
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +25 -17
- package/lib/dependencies/HarmonyExportInitFragment.js +4 -1
- package/lib/dependencies/HarmonyImportDependency.js +23 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +142 -45
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +46 -22
- package/lib/dependencies/HarmonyModulesPlugin.js +10 -0
- package/lib/dependencies/ImportContextDependency.js +0 -2
- package/lib/dependencies/ImportMetaContextDependency.js +35 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +252 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +59 -0
- package/lib/dependencies/ImportMetaPlugin.js +22 -3
- package/lib/dependencies/LoaderPlugin.js +4 -2
- package/lib/dependencies/RequireContextDependency.js +0 -16
- package/lib/dependencies/RequireEnsureDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +74 -49
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +25 -9
- package/lib/hmr/HotModuleReplacement.runtime.js +29 -14
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +4 -3
- package/lib/hmr/LazyCompilationPlugin.js +54 -26
- package/lib/hmr/lazyCompilationBackend.js +51 -12
- package/lib/ids/DeterministicModuleIdsPlugin.js +55 -35
- package/lib/ids/HashedModuleIdsPlugin.js +11 -14
- package/lib/ids/IdHelpers.js +25 -11
- package/lib/ids/NamedModuleIdsPlugin.js +6 -9
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceModuleIdsPlugin.js +13 -10
- package/lib/ids/SyncModuleIdsPlugin.js +140 -0
- package/lib/index.js +13 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +2 -2
- package/lib/javascript/BasicEvaluatedExpression.js +5 -2
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/JavascriptGenerator.js +1 -0
- package/lib/javascript/JavascriptModulesPlugin.js +27 -2
- package/lib/javascript/JavascriptParser.js +82 -48
- package/lib/javascript/StartupHelpers.js +7 -30
- package/lib/library/AssignLibraryPlugin.js +39 -15
- package/lib/library/EnableLibraryPlugin.js +11 -0
- package/lib/library/UmdLibraryPlugin.js +5 -3
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeWatchFileSystem.js +85 -31
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +23 -8
- package/lib/node/RequireChunkLoadingRuntimeModule.js +24 -9
- package/lib/optimize/ConcatenatedModule.js +21 -9
- package/lib/optimize/ModuleConcatenationPlugin.js +5 -2
- package/lib/optimize/SplitChunksPlugin.js +8 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +27 -17
- package/lib/runtime/BaseUriRuntimeModule.js +31 -0
- package/lib/runtime/CreateScriptRuntimeModule.js +36 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +9 -34
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +76 -0
- package/lib/schemes/HttpUriPlugin.js +77 -14
- package/lib/serialization/FileMiddleware.js +44 -9
- package/lib/sharing/ConsumeSharedModule.js +8 -2
- package/lib/sharing/ConsumeSharedRuntimeModule.js +26 -5
- package/lib/sharing/ProvideSharedModule.js +4 -2
- package/lib/sharing/ShareRuntimeModule.js +1 -1
- package/lib/sharing/utils.js +1 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +113 -68
- package/lib/stats/DefaultStatsPrinterPlugin.js +89 -24
- package/lib/util/ArrayHelpers.js +30 -0
- package/lib/util/AsyncQueue.js +1 -1
- package/lib/util/compileBooleanMatcher.js +1 -1
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +12 -0
- package/lib/util/deprecation.js +10 -2
- package/lib/util/deterministicGrouping.js +1 -1
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/fs.js +11 -0
- package/lib/util/hash/BatchedHash.js +7 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +5 -139
- package/lib/util/identifier.js +65 -44
- package/lib/util/internalSerializables.js +15 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/semver.js +17 -10
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +9 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +20 -9
- package/lib/webpack.js +10 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -11
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +33 -22
- package/module.d.ts +215 -0
- package/package.json +23 -28
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +254 -29
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +2 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +3 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/types.d.ts +628 -179
@@ -10,7 +10,9 @@ const InnerGraph = require("../optimize/InnerGraph");
|
|
10
10
|
const ConstDependency = require("./ConstDependency");
|
11
11
|
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
12
12
|
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
13
|
+
const HarmonyEvaluatedImportSpecifierDependency = require("./HarmonyEvaluatedImportSpecifierDependency");
|
13
14
|
const HarmonyExports = require("./HarmonyExports");
|
15
|
+
const { ExportPresenceModes } = require("./HarmonyImportDependency");
|
14
16
|
const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
|
15
17
|
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
16
18
|
|
@@ -19,6 +21,7 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
|
|
19
21
|
/** @typedef {import("estree").Identifier} Identifier */
|
20
22
|
/** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
|
21
23
|
/** @typedef {import("estree").ImportExpression} ImportExpression */
|
24
|
+
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
22
25
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
23
26
|
/** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
|
24
27
|
/** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
|
@@ -60,8 +63,18 @@ function getAssertions(node) {
|
|
60
63
|
}
|
61
64
|
|
62
65
|
module.exports = class HarmonyImportDependencyParserPlugin {
|
66
|
+
/**
|
67
|
+
* @param {JavascriptParserOptions} options options
|
68
|
+
*/
|
63
69
|
constructor(options) {
|
64
|
-
this.
|
70
|
+
this.exportPresenceMode =
|
71
|
+
options.importExportsPresence !== undefined
|
72
|
+
? ExportPresenceModes.fromUserOption(options.importExportsPresence)
|
73
|
+
: options.exportsPresence !== undefined
|
74
|
+
? ExportPresenceModes.fromUserOption(options.exportsPresence)
|
75
|
+
: options.strictExportPresence
|
76
|
+
? ExportPresenceModes.ERROR
|
77
|
+
: ExportPresenceModes.AUTO;
|
65
78
|
this.strictThisContextOnImports = options.strictThisContextOnImports;
|
66
79
|
}
|
67
80
|
|
@@ -70,6 +83,19 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
70
83
|
* @returns {void}
|
71
84
|
*/
|
72
85
|
apply(parser) {
|
86
|
+
const { exportPresenceMode } = this;
|
87
|
+
|
88
|
+
function getNonOptionalPart(members, membersOptionals) {
|
89
|
+
let i = 0;
|
90
|
+
while (i < members.length && membersOptionals[i] === false) i++;
|
91
|
+
return i !== members.length ? members.slice(0, i) : members;
|
92
|
+
}
|
93
|
+
|
94
|
+
function getNonOptionalMemberChain(node, count) {
|
95
|
+
while (count--) node = node.object;
|
96
|
+
return node;
|
97
|
+
}
|
98
|
+
|
73
99
|
parser.hooks.isPure
|
74
100
|
.for("Identifier")
|
75
101
|
.tap("HarmonyImportDependencyParserPlugin", expression => {
|
@@ -118,74 +144,145 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
118
144
|
return true;
|
119
145
|
}
|
120
146
|
);
|
121
|
-
parser.hooks.
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
147
|
+
parser.hooks.binaryExpression.tap(
|
148
|
+
"HarmonyImportDependencyParserPlugin",
|
149
|
+
expression => {
|
150
|
+
if (expression.operator !== "in") return;
|
151
|
+
|
152
|
+
const leftPartEvaluated = parser.evaluateExpression(expression.left);
|
153
|
+
if (leftPartEvaluated.couldHaveSideEffects()) return;
|
154
|
+
const leftPart = leftPartEvaluated.asString();
|
155
|
+
if (!leftPart) return;
|
156
|
+
|
157
|
+
const rightPart = parser.evaluateExpression(expression.right);
|
158
|
+
if (!rightPart.isIdentifier()) return;
|
159
|
+
|
160
|
+
const rootInfo = rightPart.rootInfo;
|
161
|
+
if (
|
162
|
+
!rootInfo ||
|
163
|
+
!rootInfo.tagInfo ||
|
164
|
+
rootInfo.tagInfo.tag !== harmonySpecifierTag
|
165
|
+
)
|
166
|
+
return;
|
167
|
+
const settings = rootInfo.tagInfo.data;
|
168
|
+
const members = rightPart.getMembers();
|
169
|
+
const dep = new HarmonyEvaluatedImportSpecifierDependency(
|
126
170
|
settings.source,
|
127
171
|
settings.sourceOrder,
|
128
|
-
settings.ids,
|
172
|
+
settings.ids.concat(members).concat([leftPart]),
|
129
173
|
settings.name,
|
130
|
-
|
131
|
-
|
132
|
-
|
174
|
+
expression.range,
|
175
|
+
settings.assertions,
|
176
|
+
"in"
|
133
177
|
);
|
134
|
-
dep.
|
135
|
-
dep.
|
136
|
-
dep.
|
137
|
-
dep.loc = expr.loc;
|
178
|
+
dep.directImport = members.length === 0;
|
179
|
+
dep.asiSafe = !parser.isAsiPosition(expression.range[0]);
|
180
|
+
dep.loc = expression.loc;
|
138
181
|
parser.state.module.addDependency(dep);
|
139
182
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
140
183
|
return true;
|
141
|
-
}
|
142
|
-
|
184
|
+
}
|
185
|
+
);
|
186
|
+
parser.hooks.expression
|
143
187
|
.for(harmonySpecifierTag)
|
144
|
-
.tap("HarmonyImportDependencyParserPlugin",
|
188
|
+
.tap("HarmonyImportDependencyParserPlugin", expr => {
|
145
189
|
const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
|
146
|
-
const ids = settings.ids.concat(members);
|
147
190
|
const dep = new HarmonyImportSpecifierDependency(
|
148
191
|
settings.source,
|
149
192
|
settings.sourceOrder,
|
150
|
-
ids,
|
193
|
+
settings.ids,
|
151
194
|
settings.name,
|
152
195
|
expr.range,
|
153
|
-
|
196
|
+
exportPresenceMode,
|
154
197
|
settings.assertions
|
155
198
|
);
|
199
|
+
dep.shorthand = parser.scope.inShorthand;
|
200
|
+
dep.directImport = true;
|
156
201
|
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
157
202
|
dep.loc = expr.loc;
|
158
203
|
parser.state.module.addDependency(dep);
|
159
204
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
160
205
|
return true;
|
161
206
|
});
|
207
|
+
parser.hooks.expressionMemberChain
|
208
|
+
.for(harmonySpecifierTag)
|
209
|
+
.tap(
|
210
|
+
"HarmonyImportDependencyParserPlugin",
|
211
|
+
(expression, members, membersOptionals) => {
|
212
|
+
const settings = /** @type {HarmonySettings} */ (
|
213
|
+
parser.currentTagData
|
214
|
+
);
|
215
|
+
const nonOptionalMembers = getNonOptionalPart(
|
216
|
+
members,
|
217
|
+
membersOptionals
|
218
|
+
);
|
219
|
+
const expr =
|
220
|
+
nonOptionalMembers !== members
|
221
|
+
? getNonOptionalMemberChain(
|
222
|
+
expression,
|
223
|
+
members.length - nonOptionalMembers.length
|
224
|
+
)
|
225
|
+
: expression;
|
226
|
+
const ids = settings.ids.concat(nonOptionalMembers);
|
227
|
+
const dep = new HarmonyImportSpecifierDependency(
|
228
|
+
settings.source,
|
229
|
+
settings.sourceOrder,
|
230
|
+
ids,
|
231
|
+
settings.name,
|
232
|
+
expr.range,
|
233
|
+
exportPresenceMode,
|
234
|
+
settings.assertions
|
235
|
+
);
|
236
|
+
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
237
|
+
dep.loc = expr.loc;
|
238
|
+
parser.state.module.addDependency(dep);
|
239
|
+
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
240
|
+
return true;
|
241
|
+
}
|
242
|
+
);
|
162
243
|
parser.hooks.callMemberChain
|
163
244
|
.for(harmonySpecifierTag)
|
164
|
-
.tap(
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
245
|
+
.tap(
|
246
|
+
"HarmonyImportDependencyParserPlugin",
|
247
|
+
(expression, members, membersOptionals) => {
|
248
|
+
const { arguments: args, callee } = expression;
|
249
|
+
const settings = /** @type {HarmonySettings} */ (
|
250
|
+
parser.currentTagData
|
251
|
+
);
|
252
|
+
const nonOptionalMembers = getNonOptionalPart(
|
253
|
+
members,
|
254
|
+
membersOptionals
|
255
|
+
);
|
256
|
+
const expr =
|
257
|
+
nonOptionalMembers !== members
|
258
|
+
? getNonOptionalMemberChain(
|
259
|
+
callee,
|
260
|
+
members.length - nonOptionalMembers.length
|
261
|
+
)
|
262
|
+
: callee;
|
263
|
+
const ids = settings.ids.concat(nonOptionalMembers);
|
264
|
+
const dep = new HarmonyImportSpecifierDependency(
|
265
|
+
settings.source,
|
266
|
+
settings.sourceOrder,
|
267
|
+
ids,
|
268
|
+
settings.name,
|
269
|
+
expr.range,
|
270
|
+
exportPresenceMode,
|
271
|
+
settings.assertions
|
272
|
+
);
|
273
|
+
dep.directImport = members.length === 0;
|
274
|
+
dep.call = true;
|
275
|
+
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
276
|
+
// only in case when we strictly follow the spec we need a special case here
|
277
|
+
dep.namespaceObjectAsContext =
|
278
|
+
members.length > 0 && this.strictThisContextOnImports;
|
279
|
+
dep.loc = expr.loc;
|
280
|
+
parser.state.module.addDependency(dep);
|
281
|
+
if (args) parser.walkExpressions(args);
|
282
|
+
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
283
|
+
return true;
|
284
|
+
}
|
285
|
+
);
|
189
286
|
const { hotAcceptCallback, hotAcceptWithoutCallback } =
|
190
287
|
HotModuleReplacementPlugin.getParserHooks(parser);
|
191
288
|
hotAcceptCallback.tap(
|
@@ -28,6 +28,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
28
28
|
|
29
29
|
const idsSymbol = Symbol("HarmonyImportSpecifierDependency.ids");
|
30
30
|
|
31
|
+
const { ExportPresenceModes } = HarmonyImportDependency;
|
32
|
+
|
31
33
|
class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
32
34
|
constructor(
|
33
35
|
request,
|
@@ -35,14 +37,14 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
35
37
|
ids,
|
36
38
|
name,
|
37
39
|
range,
|
38
|
-
|
40
|
+
exportPresenceMode,
|
39
41
|
assertions
|
40
42
|
) {
|
41
43
|
super(request, sourceOrder, assertions);
|
42
44
|
this.ids = ids;
|
43
45
|
this.name = name;
|
44
46
|
this.range = range;
|
45
|
-
this.
|
47
|
+
this.exportPresenceMode = exportPresenceMode;
|
46
48
|
this.namespaceObjectAsContext = false;
|
47
49
|
this.call = undefined;
|
48
50
|
this.directImport = undefined;
|
@@ -153,19 +155,29 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
153
155
|
return [ids];
|
154
156
|
}
|
155
157
|
|
158
|
+
/**
|
159
|
+
* @param {ModuleGraph} moduleGraph module graph
|
160
|
+
* @returns {number} effective mode
|
161
|
+
*/
|
162
|
+
_getEffectiveExportPresenceLevel(moduleGraph) {
|
163
|
+
if (this.exportPresenceMode !== ExportPresenceModes.AUTO)
|
164
|
+
return this.exportPresenceMode;
|
165
|
+
return moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule
|
166
|
+
? ExportPresenceModes.ERROR
|
167
|
+
: ExportPresenceModes.WARN;
|
168
|
+
}
|
169
|
+
|
156
170
|
/**
|
157
171
|
* Returns warnings
|
158
172
|
* @param {ModuleGraph} moduleGraph module graph
|
159
173
|
* @returns {WebpackError[]} warnings
|
160
174
|
*/
|
161
175
|
getWarnings(moduleGraph) {
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
) {
|
166
|
-
return null;
|
176
|
+
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
177
|
+
if (exportsPresence === ExportPresenceModes.WARN) {
|
178
|
+
return this._getErrors(moduleGraph);
|
167
179
|
}
|
168
|
-
return
|
180
|
+
return null;
|
169
181
|
}
|
170
182
|
|
171
183
|
/**
|
@@ -174,10 +186,8 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
174
186
|
* @returns {WebpackError[]} errors
|
175
187
|
*/
|
176
188
|
getErrors(moduleGraph) {
|
177
|
-
|
178
|
-
|
179
|
-
moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule
|
180
|
-
) {
|
189
|
+
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
|
190
|
+
if (exportsPresence === ExportPresenceModes.ERROR) {
|
181
191
|
return this._getErrors(moduleGraph);
|
182
192
|
}
|
183
193
|
return null;
|
@@ -209,7 +219,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
209
219
|
write(this.ids);
|
210
220
|
write(this.name);
|
211
221
|
write(this.range);
|
212
|
-
write(this.
|
222
|
+
write(this.exportPresenceMode);
|
213
223
|
write(this.namespaceObjectAsContext);
|
214
224
|
write(this.call);
|
215
225
|
write(this.directImport);
|
@@ -224,7 +234,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
224
234
|
this.ids = read();
|
225
235
|
this.name = read();
|
226
236
|
this.range = read();
|
227
|
-
this.
|
237
|
+
this.exportPresenceMode = read();
|
228
238
|
this.namespaceObjectAsContext = read();
|
229
239
|
this.call = read();
|
230
240
|
this.directImport = read();
|
@@ -251,14 +261,32 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
251
261
|
*/
|
252
262
|
apply(dependency, source, templateContext) {
|
253
263
|
const dep = /** @type {HarmonyImportSpecifierDependency} */ (dependency);
|
254
|
-
const { moduleGraph,
|
255
|
-
templateContext;
|
264
|
+
const { moduleGraph, runtime } = templateContext;
|
256
265
|
const connection = moduleGraph.getConnection(dep);
|
257
266
|
// Skip rendering depending when dependency is conditional
|
258
267
|
if (connection && !connection.isTargetActive(runtime)) return;
|
259
268
|
|
260
269
|
const ids = dep.getIds(moduleGraph);
|
270
|
+
const exportExpr = this._getCodeForIds(dep, source, templateContext, ids);
|
271
|
+
const range = dep.range;
|
272
|
+
if (dep.shorthand) {
|
273
|
+
source.insert(range[1], `: ${exportExpr}`);
|
274
|
+
} else {
|
275
|
+
source.replace(range[0], range[1] - 1, exportExpr);
|
276
|
+
}
|
277
|
+
}
|
261
278
|
|
279
|
+
/**
|
280
|
+
* @param {HarmonyImportSpecifierDependency} dep dependency
|
281
|
+
* @param {ReplaceSource} source source
|
282
|
+
* @param {DependencyTemplateContext} templateContext context
|
283
|
+
* @param {string[]} ids ids
|
284
|
+
* @returns {string} generated code
|
285
|
+
*/
|
286
|
+
_getCodeForIds(dep, source, templateContext, ids) {
|
287
|
+
const { moduleGraph, module, runtime, concatenationScope } =
|
288
|
+
templateContext;
|
289
|
+
const connection = moduleGraph.getConnection(dep);
|
262
290
|
let exportExpr;
|
263
291
|
if (
|
264
292
|
connection &&
|
@@ -289,7 +317,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
289
317
|
);
|
290
318
|
}
|
291
319
|
} else {
|
292
|
-
super.apply(
|
320
|
+
super.apply(dep, source, templateContext);
|
293
321
|
|
294
322
|
const { runtimeTemplate, initFragments, runtimeRequirements } =
|
295
323
|
templateContext;
|
@@ -310,11 +338,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
310
338
|
runtimeRequirements
|
311
339
|
});
|
312
340
|
}
|
313
|
-
|
314
|
-
source.insert(dep.range[1], `: ${exportExpr}`);
|
315
|
-
} else {
|
316
|
-
source.replace(dep.range[0], dep.range[1] - 1, exportExpr);
|
317
|
-
}
|
341
|
+
return exportExpr;
|
318
342
|
}
|
319
343
|
};
|
320
344
|
|
@@ -8,6 +8,7 @@
|
|
8
8
|
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
9
9
|
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
10
10
|
const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
|
11
|
+
const HarmonyEvaluatedImportSpecifierDependency = require("./HarmonyEvaluatedImportSpecifierDependency");
|
11
12
|
const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
|
12
13
|
const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
|
13
14
|
const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
|
@@ -59,6 +60,15 @@ class HarmonyModulesPlugin {
|
|
59
60
|
new HarmonyImportSpecifierDependency.Template()
|
60
61
|
);
|
61
62
|
|
63
|
+
compilation.dependencyFactories.set(
|
64
|
+
HarmonyEvaluatedImportSpecifierDependency,
|
65
|
+
normalModuleFactory
|
66
|
+
);
|
67
|
+
compilation.dependencyTemplates.set(
|
68
|
+
HarmonyEvaluatedImportSpecifierDependency,
|
69
|
+
new HarmonyEvaluatedImportSpecifierDependency.Template()
|
70
|
+
);
|
71
|
+
|
62
72
|
compilation.dependencyTemplates.set(
|
63
73
|
HarmonyExportHeaderDependency,
|
64
74
|
new HarmonyExportHeaderDependency.Template()
|
@@ -28,7 +28,6 @@ class ImportContextDependency extends ContextDependency {
|
|
28
28
|
serialize(context) {
|
29
29
|
const { write } = context;
|
30
30
|
|
31
|
-
write(this.range);
|
32
31
|
write(this.valueRange);
|
33
32
|
|
34
33
|
super.serialize(context);
|
@@ -37,7 +36,6 @@ class ImportContextDependency extends ContextDependency {
|
|
37
36
|
deserialize(context) {
|
38
37
|
const { read } = context;
|
39
38
|
|
40
|
-
this.range = read();
|
41
39
|
this.valueRange = read();
|
42
40
|
|
43
41
|
super.deserialize(context);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Ivan Kopeykin @vankop
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
const makeSerializable = require("../util/makeSerializable");
|
9
|
+
const ContextDependency = require("./ContextDependency");
|
10
|
+
const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
|
11
|
+
|
12
|
+
class ImportMetaContextDependency extends ContextDependency {
|
13
|
+
constructor(options, range) {
|
14
|
+
super(options);
|
15
|
+
|
16
|
+
this.range = range;
|
17
|
+
}
|
18
|
+
|
19
|
+
get category() {
|
20
|
+
return "esm";
|
21
|
+
}
|
22
|
+
|
23
|
+
get type() {
|
24
|
+
return `import.meta.webpackContext ${this.options.mode}`;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
makeSerializable(
|
29
|
+
ImportMetaContextDependency,
|
30
|
+
"webpack/lib/dependencies/ImportMetaContextDependency"
|
31
|
+
);
|
32
|
+
|
33
|
+
ImportMetaContextDependency.Template = ModuleDependencyTemplateAsRequireId;
|
34
|
+
|
35
|
+
module.exports = ImportMetaContextDependency;
|