webpack 5.110.2 → 5.111.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.
- package/README.md +5 -2
- package/lib/APIPlugin.js +23 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/Cache.js +8 -3
- package/lib/CacheFacade.js +1 -1
- package/lib/ChunkGraph.js +20 -18
- package/lib/CircularModulesPlugin.js +157 -55
- package/lib/CleanPlugin.js +2 -2
- package/lib/Compilation.js +321 -303
- package/lib/Compiler.js +209 -46
- package/lib/ConcatenationScope.js +25 -35
- package/lib/ContextModule.js +17 -81
- package/lib/ContextModuleFactory.js +1 -1
- package/lib/CopyPlugin.js +1054 -0
- package/lib/DefinePlugin.js +24 -8
- package/lib/DotenvPlugin.js +41 -13
- package/lib/ExternalModule.js +41 -14
- package/lib/FileSystemInfo.js +17 -14
- package/lib/FlagDependencyExportsPlugin.js +45 -21
- package/lib/FlagDependencyUsagePlugin.js +8 -2
- package/lib/HotModuleReplacementPlugin.js +53 -7
- package/lib/JavascriptMetaInfoPlugin.js +5 -3
- package/lib/MainTemplate.js +5 -1
- package/lib/Module.js +16 -7
- package/lib/MultiCompiler.js +1 -1
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +58 -32
- package/lib/NormalModuleFactory.js +1 -1
- package/lib/RuntimeGlobals.js +21 -7
- package/lib/RuntimeModule.js +28 -12
- package/lib/RuntimePlugin.js +33 -3
- package/lib/RuntimeTemplate.js +794 -477
- package/lib/SourceMapDevToolPlugin.js +1 -1
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +84 -91
- package/lib/asset/AssetGenerator.js +25 -8
- package/lib/asset/AssetModule.js +3 -0
- package/lib/asset/WebManifestParser.js +7 -5
- package/lib/async-modules/AsyncModuleHelpers.js +10 -4
- package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +14 -1
- package/lib/config/browserslistTargetHandler.js +19 -0
- package/lib/config/defaults.js +110 -64
- package/lib/config/normalization.js +100 -20
- package/lib/config/target.js +10 -0
- package/lib/container/ContainerReferencePlugin.js +6 -0
- package/lib/container/RemoteRuntimeModule.js +9 -0
- package/lib/container/declaredRemotes.js +39 -0
- package/lib/css/CssGenerator.js +8 -0
- package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
- package/lib/css/CssLoadingRuntimeModule.js +94 -36
- package/lib/css/CssModule.js +1 -1
- package/lib/css/CssModulesPlugin.js +7 -6
- package/lib/css/CssParser.js +144 -11
- package/lib/css/CssServerStylesRuntimeModule.js +9 -0
- package/lib/css/cssMinify.js +11 -3
- package/lib/css/data.js +2814 -678
- package/lib/css/syntax.js +4082 -248
- package/lib/debug/ProfilingPlugin.js +4 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
- package/lib/dependencies/AMDRuntimeModules.js +18 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +3 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -0
- package/lib/dependencies/CommonJsPlugin.js +19 -3
- package/lib/dependencies/CommonJsRequireDependency.js +32 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
- package/lib/dependencies/CssIcssExportDependency.js +7 -1
- package/lib/dependencies/HarmonyCompatibilityDependency.js +58 -4
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +8 -3
- package/lib/dependencies/HarmonyExportExpressionDependency.js +44 -29
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +171 -32
- package/lib/dependencies/HarmonyExportInitFragment.js +99 -19
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +18 -30
- package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
- package/lib/dependencies/HarmonyImportDependency.js +99 -41
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +20 -3
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +24 -1
- package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
- package/lib/dependencies/HtmlEntryDependency.js +62 -2
- package/lib/dependencies/ImportContextDependency.js +43 -3
- package/lib/dependencies/ImportDependency.js +8 -29
- package/lib/dependencies/ImportMetaMainDependency.js +104 -0
- package/lib/dependencies/ImportMetaPlugin.js +59 -15
- package/lib/dependencies/ImportParserPlugin.js +24 -14
- package/lib/dependencies/RequireHeaderDependency.js +20 -21
- package/lib/dependencies/SystemRuntimeModule.js +9 -0
- package/lib/dependencies/WorkerDependency.js +1 -2
- package/lib/dependencies/WorkletDependency.js +1 -2
- package/lib/dependencies/importOptionsCheck.js +47 -0
- package/lib/dll/DelegatedModule.js +18 -1
- package/lib/dll/DllReferencePlugin.js +11 -8
- package/lib/dll/LibManifestPlugin.js +1 -1
- package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
- package/lib/errors/DotenvFileError.js +29 -0
- package/lib/errors/DuplicateModulesWarning.js +12 -7
- package/lib/errors/EmptyCopyPatternWarning.js +26 -0
- package/lib/errors/ExternalStarReexportError.js +44 -0
- package/lib/errors/ImportedBindingAssignmentError.js +30 -0
- package/lib/errors/MissingSourceMapsWarning.js +36 -0
- package/lib/errors/ModuleParseError.js +2 -1
- package/lib/errors/UnusedAssetsWarning.js +36 -0
- package/lib/errors/UnusedFederationWarning.js +35 -0
- package/lib/errors/UnusedModulesWarning.js +38 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
- package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
- package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
- package/lib/html/HtmlGenerator.js +11 -5
- package/lib/html/HtmlModulesPlugin.js +360 -84
- package/lib/html/HtmlParser.js +13 -6
- package/lib/html/builtinEmbeddedRenderer.js +107 -0
- package/lib/html/data.js +121 -7
- package/lib/html/htmlMinify.js +84 -113
- package/lib/html/syntax.js +1067 -569
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/index.js +3 -0
- package/lib/javascript/JavascriptModule.js +1 -0
- package/lib/javascript/JavascriptModulesPlugin.js +52 -22
- package/lib/javascript/JavascriptParser.js +1255 -728
- package/lib/javascript/StartupHelpers.js +27 -3
- package/lib/javascript/data.js +172 -0
- package/lib/javascript/grammar.js +5546 -0
- package/lib/javascript/parser.js +1494 -0
- package/lib/javascript/regexp.js +1762 -0
- package/lib/javascript/regexpData.js +51 -0
- package/lib/javascript/syntax.js +8696 -5225
- package/lib/library/ModuleLibraryPlugin.js +116 -5
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
- package/lib/optimize/ConcatenatedModule.js +133 -25
- package/lib/optimize/ConstExportsPlugin.js +50 -39
- package/lib/optimize/InlineExports.js +20 -123
- package/lib/optimize/MangleExportsPlugin.js +10 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +24 -1
- package/lib/optimize/RealContentHashPlugin.js +68 -9
- package/lib/optimize/SideEffectsFlagPlugin.js +17 -9
- package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
- package/lib/performance/CacheEffectivenessPlugin.js +4 -3
- package/lib/performance/DuplicateModulesPlugin.js +57 -13
- package/lib/performance/EvalUsagePlugin.js +5 -2
- package/lib/performance/MissingSourceMapsPlugin.js +115 -0
- package/lib/performance/PureAnnotationsPlugin.js +6 -3
- package/lib/performance/TopLevelThisPlugin.js +5 -4
- package/lib/performance/UnusedAssetsPlugin.js +109 -0
- package/lib/performance/UnusedFederationPlugin.js +147 -0
- package/lib/performance/UnusedModulesPlugin.js +141 -0
- package/lib/performance/UnusedReexportsPlugin.js +1 -55
- package/lib/performance/isOnlyReexported.js +65 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +2 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ResourceHintPlugin.js +7 -3
- package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +9 -0
- package/lib/rules/RuleSetCompiler.js +211 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +105 -67
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
- package/lib/runtime/BaseUriRuntimeModule.js +9 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
- package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -0
- package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
- package/lib/runtime/GlobalRuntimeModule.js +9 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
- package/lib/runtime/HelperRuntimeModule.js +10 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +338 -217
- package/lib/runtime/NonceRuntimeModule.js +9 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
- package/lib/runtime/PublicPathRuntimeModule.js +9 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
- package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
- package/lib/runtime/SystemContextRuntimeModule.js +9 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
- package/lib/schemes/HttpUriPlugin.js +22 -5
- package/lib/serialization/FileMiddleware.js +15 -2
- package/lib/serialization/ObjectMiddleware.js +138 -106
- package/lib/sharing/ConsumeSharedPlugin.js +12 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
- package/lib/sharing/ShareRuntimeModule.js +9 -0
- package/lib/sharing/declaredShared.js +47 -0
- package/lib/stats/DefaultStatsFactoryPlugin.js +3 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
- package/lib/util/ArrayQueue.js +3 -3
- package/lib/util/SourceProcessor.js +76 -69
- package/lib/util/URLAbsoluteSpecifier.js +3 -1
- package/lib/util/async.js +292 -0
- package/lib/util/buildDiagnostics.js +69 -0
- package/lib/util/conventions.js +5 -1
- package/lib/util/fs.js +27 -1
- package/lib/util/handlerKeys.js +40 -0
- package/lib/util/identifier.js +20 -0
- package/lib/util/internalSerializables.js +6 -0
- package/lib/util/registerExternalSerializer.js +6 -45
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
- package/package.json +22 -16
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +388 -76
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/ManifestPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.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/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/types.d.ts +1440 -331
- package/lib/dependencies/ExportBindingInitFragment.js +0 -191
- package/lib/errors/EntrypointOverlapWarning.js +0 -45
- package/lib/performance/EntrypointOverlapPlugin.js +0 -122
|
@@ -27,6 +27,7 @@ const createHooksRegistry = require("../util/createHooksRegistry");
|
|
|
27
27
|
const { propertyAccess } = require("../util/property");
|
|
28
28
|
const BuildTimeConstDependency = require("./BuildTimeConstDependency");
|
|
29
29
|
const ConstDependency = require("./ConstDependency");
|
|
30
|
+
const ImportMetaMainDependency = require("./ImportMetaMainDependency");
|
|
30
31
|
const ImportMetaResolveDependency = require("./ImportMetaResolveDependency");
|
|
31
32
|
const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
|
|
32
33
|
|
|
@@ -154,17 +155,44 @@ const isImportMetaFieldEnabled = (importMeta, field) => {
|
|
|
154
155
|
};
|
|
155
156
|
|
|
156
157
|
/**
|
|
157
|
-
* Renders the `import.meta.main` comparison
|
|
158
|
+
* Renders the `import.meta.main` comparison, which reads the module argument a
|
|
159
|
+
* scope-hoisted module does not have. A caller that can answer the expression
|
|
160
|
+
* statically for an inner module rules out only the concatenation root.
|
|
158
161
|
* @param {Parser} parser the parser
|
|
162
|
+
* @param {boolean} staticWhenInner whether an inner concatenated module answers it without the comparison
|
|
159
163
|
* @returns {string} the comparison expression
|
|
160
164
|
*/
|
|
161
|
-
const renderImportMetaMain = (parser) => {
|
|
165
|
+
const renderImportMetaMain = (parser, staticWhenInner) => {
|
|
162
166
|
const currentModule = parser.state.module;
|
|
163
|
-
|
|
164
|
-
|
|
167
|
+
const buildInfo =
|
|
168
|
+
/** @type {JavascriptModuleBuildInfo} */
|
|
169
|
+
(currentModule.buildInfo);
|
|
170
|
+
if (staticWhenInner) {
|
|
171
|
+
buildInfo.moduleConcatenationRootBailout = IMPORT_META_MAIN;
|
|
172
|
+
} else {
|
|
173
|
+
buildInfo.moduleConcatenationBailout = IMPORT_META_MAIN;
|
|
174
|
+
}
|
|
165
175
|
return `${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${currentModule.moduleArgument}`;
|
|
166
176
|
};
|
|
167
177
|
|
|
178
|
+
const IMPORT_META_VAR = "__webpack_import_meta__";
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* The name of the module's synthesized `import.meta` binding, stepped aside when
|
|
182
|
+
* the source already spells it. Re-bundling webpack output is the case that
|
|
183
|
+
* matters: the earlier binding would shadow this one and make it initialize
|
|
184
|
+
* itself.
|
|
185
|
+
* @param {Parser} parser the parser
|
|
186
|
+
* @returns {string} a name no declaration in this module takes
|
|
187
|
+
*/
|
|
188
|
+
const importMetaVarName = (parser) => {
|
|
189
|
+
const { source } = parser.state;
|
|
190
|
+
if (!source || !source.includes(IMPORT_META_VAR)) return IMPORT_META_VAR;
|
|
191
|
+
let index = 2;
|
|
192
|
+
while (source.includes(`__webpack_import_meta_${index}__`)) index++;
|
|
193
|
+
return `__webpack_import_meta_${index}__`;
|
|
194
|
+
};
|
|
195
|
+
|
|
168
196
|
/**
|
|
169
197
|
* Checks whether the callee is the `import.meta.resolve` member.
|
|
170
198
|
* @param {Expression | Super} callee call callee
|
|
@@ -261,6 +289,10 @@ class ImportMetaPlugin {
|
|
|
261
289
|
BuildTimeConstDependency,
|
|
262
290
|
new BuildTimeConstDependency.Template()
|
|
263
291
|
);
|
|
292
|
+
compilation.dependencyTemplates.set(
|
|
293
|
+
ImportMetaMainDependency,
|
|
294
|
+
new ImportMetaMainDependency.Template()
|
|
295
|
+
);
|
|
264
296
|
|
|
265
297
|
/**
|
|
266
298
|
* Returns file url.
|
|
@@ -442,7 +474,7 @@ class ImportMetaPlugin {
|
|
|
442
474
|
const referencedPropertiesInDestructuring =
|
|
443
475
|
parser.destructuringAssignmentPropertiesFor(metaProperty);
|
|
444
476
|
if (!referencedPropertiesInDestructuring) {
|
|
445
|
-
const varName =
|
|
477
|
+
const varName = importMetaVarName(parser);
|
|
446
478
|
const knownProps = [];
|
|
447
479
|
if (isImportMetaFieldEnabled(importMeta, "url")) {
|
|
448
480
|
knownProps.push(`url: ${importMetaUrl()}`);
|
|
@@ -451,7 +483,9 @@ class ImportMetaPlugin {
|
|
|
451
483
|
knownProps.push(`webpack: ${importMetaWebpackVersion()}`);
|
|
452
484
|
}
|
|
453
485
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
454
|
-
knownProps.push(
|
|
486
|
+
knownProps.push(
|
|
487
|
+
`main: ${renderImportMetaMain(parser, false)}`
|
|
488
|
+
);
|
|
455
489
|
}
|
|
456
490
|
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
457
491
|
addDefinitionValueDependencies();
|
|
@@ -471,8 +505,10 @@ class ImportMetaPlugin {
|
|
|
471
505
|
const plainInitCode = `var ${varName} = {${knownProps.join(
|
|
472
506
|
", "
|
|
473
507
|
)}};\n`;
|
|
508
|
+
// Each module owns its `import.meta`: it copies the bundle's one
|
|
509
|
+
// and inherits from it, so later host writes stay visible.
|
|
474
510
|
const initCode = preserveUnknown(importMeta)
|
|
475
|
-
? `var ${varName} = Object.assign(import.meta, {${knownProps.join(
|
|
511
|
+
? `var ${varName} = Object.assign(Object.create(import.meta), import.meta, {${knownProps.join(
|
|
476
512
|
", "
|
|
477
513
|
)}});\n`
|
|
478
514
|
: plainInitCode;
|
|
@@ -556,7 +592,7 @@ class ImportMetaPlugin {
|
|
|
556
592
|
break;
|
|
557
593
|
case "main":
|
|
558
594
|
if (fieldEnabled) {
|
|
559
|
-
append(`main: ${renderImportMetaMain(parser)},`);
|
|
595
|
+
append(`main: ${renderImportMetaMain(parser, false)},`);
|
|
560
596
|
runtimeRequirements.push(
|
|
561
597
|
RuntimeGlobals.moduleCache,
|
|
562
598
|
RuntimeGlobals.entryModuleId,
|
|
@@ -740,13 +776,21 @@ class ImportMetaPlugin {
|
|
|
740
776
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
741
777
|
parser.hooks.expression
|
|
742
778
|
.for(IMPORT_META_MAIN)
|
|
743
|
-
.tap(PLUGIN_NAME, (expr) =>
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
779
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
780
|
+
const dep = new ImportMetaMainDependency(
|
|
781
|
+
renderImportMetaMain(parser, true),
|
|
782
|
+
"false",
|
|
783
|
+
/** @type {Range} */ (expr.range),
|
|
784
|
+
[
|
|
785
|
+
RuntimeGlobals.moduleCache,
|
|
786
|
+
RuntimeGlobals.entryModuleId,
|
|
787
|
+
RuntimeGlobals.module
|
|
788
|
+
]
|
|
789
|
+
);
|
|
790
|
+
dep.loc = parser.getLocation(expr);
|
|
791
|
+
parser.state.module.addPresentationalDependency(dep);
|
|
792
|
+
return true;
|
|
793
|
+
});
|
|
750
794
|
parser.hooks.typeof
|
|
751
795
|
.for(IMPORT_META_MAIN)
|
|
752
796
|
.tap(
|
|
@@ -209,20 +209,18 @@ const isStaticStringAttributes = (node) => {
|
|
|
209
209
|
: key.type === "Literal"
|
|
210
210
|
? key.value
|
|
211
211
|
: undefined;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
212
|
+
// Any other key is an expression webpack cannot account for, and its
|
|
213
|
+
// value still evaluates, so the argument has to stay.
|
|
214
|
+
if (keyName !== "with" && keyName !== "assert") return false;
|
|
215
|
+
const value = prop.value;
|
|
216
|
+
if (value.type !== "ObjectExpression") return false;
|
|
217
|
+
for (const attr of value.properties) {
|
|
218
|
+
if (attr.type !== "Property" || attr.kind !== "init" || attr.computed) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const attrValue = attr.value;
|
|
222
|
+
if (attrValue.type !== "Literal" || typeof attrValue.value !== "string") {
|
|
223
|
+
return false;
|
|
226
224
|
}
|
|
227
225
|
}
|
|
228
226
|
}
|
|
@@ -676,6 +674,18 @@ class ImportParserPlugin {
|
|
|
676
674
|
parser
|
|
677
675
|
);
|
|
678
676
|
if (!dep) return;
|
|
677
|
+
// The context module ignores the options argument, but the spec
|
|
678
|
+
// evaluates it, so anything but a static attributes object stays.
|
|
679
|
+
const optionsNode = expr.options;
|
|
680
|
+
if (
|
|
681
|
+
optionsNode &&
|
|
682
|
+
optionsNode.range &&
|
|
683
|
+
!isStaticStringAttributes(optionsNode)
|
|
684
|
+
) {
|
|
685
|
+
/** @type {ImportContextDependency} */ (dep).optionsRange =
|
|
686
|
+
/** @type {Range} */ (optionsNode.range);
|
|
687
|
+
parser.walkExpression(optionsNode);
|
|
688
|
+
}
|
|
679
689
|
dep.loc = parser.getLocation(expr);
|
|
680
690
|
dep.optional = Boolean(parser.scope.inTry);
|
|
681
691
|
parser.state.current.addDependency(dep);
|
|
@@ -76,30 +76,29 @@ RequireHeaderDependency.Template = class RequireHeaderDependencyTemplate extends
|
|
|
76
76
|
{ moduleGraph, runtime, runtimeRequirements, concatenationScope }
|
|
77
77
|
) {
|
|
78
78
|
const dep = /** @type {RequireHeaderDependency} */ (dependency);
|
|
79
|
-
|
|
80
|
-
// the paired require dependency already replaced the whole call
|
|
81
|
-
if (
|
|
82
|
-
concatenationScope !== undefined &&
|
|
83
|
-
concatenationScope.isInsideReplacedRequire(dep.range[0])
|
|
84
|
-
) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
79
|
const requireDep = dep.requireDependency;
|
|
89
|
-
// Skip when the paired call became `0`; dead-branch still needs the header.
|
|
90
80
|
if (requireDep) {
|
|
91
81
|
const connection = moduleGraph.getConnection(requireDep);
|
|
92
|
-
if (
|
|
93
|
-
connection
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
82
|
+
if (connection) {
|
|
83
|
+
if (connection.isTargetActive(runtime)) {
|
|
84
|
+
if (
|
|
85
|
+
concatenationScope !== undefined &&
|
|
86
|
+
requireDep.rendersAsConcatenatedReference(
|
|
87
|
+
connection,
|
|
88
|
+
concatenationScope
|
|
89
|
+
)
|
|
90
|
+
) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
} else if (requireDep.isEvaluationOnly()) {
|
|
94
|
+
// Skip when the paired call became `0`; dead-branch still needs the header.
|
|
95
|
+
const guards = requireDep.branchGuards;
|
|
96
|
+
if (
|
|
97
|
+
guards === undefined ||
|
|
98
|
+
!HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
|
|
99
|
+
) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
}
|
|
@@ -24,6 +24,15 @@ class SystemRuntimeModule extends RuntimeModule {
|
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The `[handlerMap, key]` pairs this module installs onto a chunk handler map
|
|
29
|
+
* such as `__webpack_require__.f`, or `null` where it cannot name them.
|
|
30
|
+
* @returns {[string, string][] | null} installed chunk handlers (do not mutate)
|
|
31
|
+
*/
|
|
32
|
+
getInstalledChunkHandlers() {
|
|
33
|
+
return RuntimeModule.NO_CHUNK_HANDLERS;
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
/**
|
|
28
37
|
* Generates runtime code for this runtime module.
|
|
29
38
|
* @returns {string | null} runtime code
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const Template = require("../Template");
|
|
9
|
+
|
|
10
|
+
/** @import RuntimeTemplate from "../RuntimeTemplate" */
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Wraps an import so its arguments evaluate in source order and the options are
|
|
14
|
+
* checked, rejecting rather than throwing. The last parameter holds them.
|
|
15
|
+
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
|
16
|
+
* @param {string[]} parameters parameter names, the options one last
|
|
17
|
+
* @param {string} content the import expression to return once the check passes
|
|
18
|
+
* @returns {string} the wrapping function
|
|
19
|
+
*/
|
|
20
|
+
const importOptionsCheck = (runtimeTemplate, parameters, content) => {
|
|
21
|
+
const options = parameters[parameters.length - 1];
|
|
22
|
+
return runtimeTemplate.basicFunction(parameters.join(", "), [
|
|
23
|
+
"try {",
|
|
24
|
+
Template.indent([
|
|
25
|
+
`if (${options} !== undefined) {`,
|
|
26
|
+
Template.indent([
|
|
27
|
+
`if ((typeof ${options} !== "object" && typeof ${options} !== "function") || ${options} === null) throw new TypeError("The second argument to import() must be an object");`,
|
|
28
|
+
`var a = ${options}["with"];`,
|
|
29
|
+
"if (a !== undefined) {",
|
|
30
|
+
Template.indent([
|
|
31
|
+
'if ((typeof a !== "object" && typeof a !== "function") || a === null) throw new TypeError("The \'with\' option must be an object");',
|
|
32
|
+
"for (var k = Object.keys(a), i = 0; i < k.length; i++) {",
|
|
33
|
+
Template.indent([
|
|
34
|
+
'if (typeof a[k[i]] !== "string") throw new TypeError("Import attribute values must be strings");'
|
|
35
|
+
]),
|
|
36
|
+
"}"
|
|
37
|
+
]),
|
|
38
|
+
"}"
|
|
39
|
+
]),
|
|
40
|
+
"}"
|
|
41
|
+
]),
|
|
42
|
+
"} catch (e) { return Promise.reject(e); }",
|
|
43
|
+
`return ${content};`
|
|
44
|
+
]);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
module.exports = importOptionsCheck;
|
|
@@ -242,6 +242,7 @@ class DelegatedModule extends Module {
|
|
|
242
242
|
updateHash(hash, context) {
|
|
243
243
|
hash.update(this.delegationType);
|
|
244
244
|
hash.update(JSON.stringify(this.request));
|
|
245
|
+
hash.update(JSON.stringify(this.delegateData));
|
|
245
246
|
super.updateHash(hash, context);
|
|
246
247
|
}
|
|
247
248
|
|
|
@@ -299,7 +300,23 @@ class DelegatedModule extends Module {
|
|
|
299
300
|
this.delegationType = m.delegationType;
|
|
300
301
|
this.userRequest = m.userRequest;
|
|
301
302
|
this.originalRequest = m.originalRequest;
|
|
302
|
-
|
|
303
|
+
const next = m.delegateData;
|
|
304
|
+
// cleanupForCache clears delegateData; compare surviving build products instead.
|
|
305
|
+
if (this.buildMeta) {
|
|
306
|
+
const nextMeta = { ...next.buildMeta };
|
|
307
|
+
const exportsDependency = this.dependencies[1];
|
|
308
|
+
const builtExports =
|
|
309
|
+
exportsDependency instanceof StaticExportsDependency
|
|
310
|
+
? exportsDependency.exports
|
|
311
|
+
: undefined;
|
|
312
|
+
if (
|
|
313
|
+
JSON.stringify(this.buildMeta) !== JSON.stringify(nextMeta) ||
|
|
314
|
+
JSON.stringify(builtExports) !== JSON.stringify(next.exports || true)
|
|
315
|
+
) {
|
|
316
|
+
this.buildMeta = undefined;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
this.delegateData = next;
|
|
303
320
|
}
|
|
304
321
|
|
|
305
322
|
/**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
const ExternalModuleFactoryPlugin = require("../ExternalModuleFactoryPlugin");
|
|
9
9
|
const DelegatedSourceDependency = require("../dependencies/DelegatedSourceDependency");
|
|
10
10
|
const WebpackError = require("../errors/WebpackError");
|
|
11
|
-
const { makePathsRelative } = require("../util/identifier");
|
|
11
|
+
const { fileUrlToPath, makePathsRelative } = require("../util/identifier");
|
|
12
12
|
const parseJson = require("../util/parseJson");
|
|
13
13
|
const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
|
|
14
14
|
|
|
@@ -72,12 +72,13 @@ class DllReferencePlugin {
|
|
|
72
72
|
if ("manifest" in this.options) {
|
|
73
73
|
const manifest = this.options.manifest;
|
|
74
74
|
if (typeof manifest === "string") {
|
|
75
|
+
const manifestPath = fileUrlToPath(manifest);
|
|
75
76
|
/** @type {InputFileSystem} */
|
|
76
|
-
(compiler.inputFileSystem).readFile(
|
|
77
|
+
(compiler.inputFileSystem).readFile(manifestPath, (err, result) => {
|
|
77
78
|
if (err) return callback(err);
|
|
78
79
|
/** @type {CompilationDataItem} */
|
|
79
80
|
const data = {
|
|
80
|
-
path:
|
|
81
|
+
path: manifestPath,
|
|
81
82
|
data: undefined,
|
|
82
83
|
error: undefined
|
|
83
84
|
};
|
|
@@ -93,13 +94,13 @@ class DllReferencePlugin {
|
|
|
93
94
|
} catch (parseErr) {
|
|
94
95
|
// Store the error in the params so that it can
|
|
95
96
|
// be added as a compilation error later on.
|
|
96
|
-
const
|
|
97
|
+
const relativePath = makePathsRelative(
|
|
97
98
|
compiler.context,
|
|
98
|
-
|
|
99
|
+
manifestPath,
|
|
99
100
|
compiler.root
|
|
100
101
|
);
|
|
101
102
|
data.error = new DllManifestError(
|
|
102
|
-
|
|
103
|
+
relativePath,
|
|
103
104
|
/** @type {Error} */ (parseErr).message
|
|
104
105
|
);
|
|
105
106
|
}
|
|
@@ -153,7 +154,9 @@ class DllReferencePlugin {
|
|
|
153
154
|
source,
|
|
154
155
|
type: this.options.type,
|
|
155
156
|
scope: this.options.scope,
|
|
156
|
-
context: this.options.context
|
|
157
|
+
context: this.options.context
|
|
158
|
+
? fileUrlToPath(this.options.context)
|
|
159
|
+
: compiler.context,
|
|
157
160
|
content:
|
|
158
161
|
/** @type {DllReferencePluginOptionsContent} */
|
|
159
162
|
(resolvedContent),
|
|
@@ -176,7 +179,7 @@ class DllReferencePlugin {
|
|
|
176
179
|
/** @type {DllManifestError} */ (data.error)
|
|
177
180
|
);
|
|
178
181
|
}
|
|
179
|
-
compilation.fileDependencies.add(manifest);
|
|
182
|
+
compilation.fileDependencies.add(fileUrlToPath(manifest));
|
|
180
183
|
}
|
|
181
184
|
}
|
|
182
185
|
});
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const asyncLib = require("neo-async");
|
|
9
8
|
const EntryDependency = require("../dependencies/EntryDependency");
|
|
10
9
|
const { someInIterable } = require("../util/IterableHelpers");
|
|
10
|
+
const asyncLib = require("../util/async");
|
|
11
11
|
const { compareModulesById } = require("../util/comparators");
|
|
12
12
|
const { dirname, mkdirp } = require("../util/fs");
|
|
13
13
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {object} BailoutDetails
|
|
12
|
+
* @property {string} reason what keeps the runtime form, as the code generation recorded it
|
|
13
|
+
* @property {string[]} modules the modules it was recorded on, as many as are printed
|
|
14
|
+
* @property {number} count how many modules it was recorded on in all
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class AnalyzableBailoutsWarning extends WebpackError {
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instance of AnalyzableBailoutsWarning.
|
|
20
|
+
* @param {BailoutDetails[]} bailouts the reasons found, the most frequent first
|
|
21
|
+
* @param {number} references how many module and reason pairs there are
|
|
22
|
+
*/
|
|
23
|
+
constructor(bailouts, references) {
|
|
24
|
+
const list = bailouts
|
|
25
|
+
.map((it) => {
|
|
26
|
+
const more = it.count - it.modules.length;
|
|
27
|
+
const names = `${it.modules.join(", ")}${more > 0 ? `, and ${more} more` : ""}`;
|
|
28
|
+
return `\n ${it.reason}\n ${names}`;
|
|
29
|
+
})
|
|
30
|
+
.join("");
|
|
31
|
+
|
|
32
|
+
super(
|
|
33
|
+
`analyzable ESM output: ${references} ${references === 1 ? "reference keeps" : "references keep"} the runtime form:${list}\nA bundler reading this output cannot follow such a reference without running webpack's runtime. Each reason names the setting that keeps it; changing that setting lets the reference be written as a literal import() or new URL().\nFor more info visit https://webpack.js.org/configuration/output/#outputmodule`
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
/** @type {string} */
|
|
37
|
+
this.name = "AnalyzableBailoutsWarning";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = AnalyzableBailoutsWarning;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Error for a dotenv file that exists but could not be read. An absent file is
|
|
12
|
+
* normal and reported through `missingDependencies` instead.
|
|
13
|
+
*/
|
|
14
|
+
class DotenvFileError extends WebpackError {
|
|
15
|
+
/**
|
|
16
|
+
* @param {string} file path of the dotenv file
|
|
17
|
+
* @param {Error} error underlying file system error
|
|
18
|
+
*/
|
|
19
|
+
constructor(file, error) {
|
|
20
|
+
super(`Unable to read the dotenv file ${file}\n${error.message}`);
|
|
21
|
+
|
|
22
|
+
this.name = "DotenvFileError";
|
|
23
|
+
/** @type {string} */
|
|
24
|
+
this.file = file;
|
|
25
|
+
this.error = error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = DotenvFileError;
|
|
@@ -12,6 +12,7 @@ const WebpackError = require("./WebpackError");
|
|
|
12
12
|
* @typedef {object} DuplicateModuleDetails
|
|
13
13
|
* @property {string} name
|
|
14
14
|
* @property {number} chunks how many chunks carry a copy
|
|
15
|
+
* @property {string[]} entrypoints the entrypoints those chunks belong to, when more than one
|
|
15
16
|
* @property {number} wasted bytes the extra copies cost
|
|
16
17
|
*/
|
|
17
18
|
|
|
@@ -23,18 +24,22 @@ class DuplicateModulesWarning extends WebpackError {
|
|
|
23
24
|
*/
|
|
24
25
|
constructor(modules, wasted) {
|
|
25
26
|
const list = modules
|
|
26
|
-
.map(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
.map((module) => {
|
|
28
|
+
// Which entrypoints pay for it is the actionable part, so it leads
|
|
29
|
+
// where the copies are spread across more than one.
|
|
30
|
+
const where =
|
|
31
|
+
module.entrypoints.length > 1
|
|
32
|
+
? `in ${module.entrypoints.join(", ")}, ${module.chunks} chunks`
|
|
33
|
+
: `in ${module.chunks} chunks`;
|
|
34
|
+
|
|
35
|
+
return `\n ${module.name} (${where}, ${formatSize(module.wasted)} extra)`;
|
|
36
|
+
})
|
|
32
37
|
.join("");
|
|
33
38
|
|
|
34
39
|
super(
|
|
35
40
|
`duplicate modules: copies of the same module across chunks add ${formatSize(
|
|
36
41
|
wasted
|
|
37
|
-
)}:${list}\nA module reached from several chunks is emitted into each of them unless a shared chunk holds it. 'optimization.splitChunks' can pull it into one.\nFor more info visit https://webpack.js.org/plugins/split-chunks-plugin/`
|
|
42
|
+
)}:${list}\nA module reached from several chunks is emitted into each of them unless a shared chunk holds it. 'optimization.splitChunks' can pull it into one, with 'chunks: "all"' where the copies are in different entrypoints.\nFor more info visit https://webpack.js.org/plugins/split-chunks-plugin/`
|
|
38
43
|
);
|
|
39
44
|
|
|
40
45
|
/** @type {string} */
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
class EmptyCopyPatternWarning extends WebpackError {
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of EmptyCopyPatternWarning.
|
|
13
|
+
* @param {string} from the `from` of the pattern as written in the configuration
|
|
14
|
+
* @param {string} glob the glob `from` was resolved to
|
|
15
|
+
*/
|
|
16
|
+
constructor(from, glob) {
|
|
17
|
+
super(
|
|
18
|
+
`The '${from}' pattern of 'output.copy' copied no file.\nIt resolved to '${glob}', which matches nothing on disk — usually a typo, a path relative to the wrong directory, or a directory a previous build step was supposed to create.\nSilence it with 'ignoreWarnings' when the pattern is optional.`
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
/** @type {string} */
|
|
22
|
+
this.name = "EmptyCopyPatternWarning";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = EmptyCopyPatternWarning;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
/** @import ExternalModule from "../ExternalModule" */
|
|
11
|
+
/** @import Module from "../Module" */
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Error raised when a `module` library reexports everything from an external
|
|
15
|
+
* whose request names a property path instead of a module.
|
|
16
|
+
*/
|
|
17
|
+
class ExternalStarReexportError extends WebpackError {
|
|
18
|
+
/**
|
|
19
|
+
* Captures the external and the library entry reexporting from it.
|
|
20
|
+
* @param {ExternalModule} externalModule the reexported external
|
|
21
|
+
* @param {Module} module the library entry module
|
|
22
|
+
*/
|
|
23
|
+
constructor(externalModule, module) {
|
|
24
|
+
const request = /** @type {string[]} */ (
|
|
25
|
+
externalModule.getResolvedRequest()
|
|
26
|
+
);
|
|
27
|
+
super(
|
|
28
|
+
`Can't 'export * from ${JSON.stringify(
|
|
29
|
+
externalModule.userRequest
|
|
30
|
+
)}': the external is configured as ${JSON.stringify(
|
|
31
|
+
request
|
|
32
|
+
)}, which is a property of ${JSON.stringify(
|
|
33
|
+
request[0]
|
|
34
|
+
)} and has no module specifier to reexport. Reexport the names explicitly or configure the external without a property path.`
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
/** @type {string} */
|
|
38
|
+
this.name = "ExternalStarReexportError";
|
|
39
|
+
/** @type {Module} */
|
|
40
|
+
this.module = module;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
module.exports = ExternalStarReexportError;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const makeSerializable = require("../util/makeSerializable");
|
|
9
|
+
const WebpackError = require("./WebpackError");
|
|
10
|
+
|
|
11
|
+
class ImportedBindingAssignmentError extends WebpackError {
|
|
12
|
+
/**
|
|
13
|
+
* Creates an instance of ImportedBindingAssignmentError.
|
|
14
|
+
* @param {string} name the local name of the namespace binding
|
|
15
|
+
*/
|
|
16
|
+
constructor(name) {
|
|
17
|
+
super(
|
|
18
|
+
`Assignment to the imported binding '${name}'. A namespace import is immutable, so this throws a TypeError where the module is a real ES module.`
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
this.name = "ImportedBindingAssignmentError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
makeSerializable(
|
|
26
|
+
ImportedBindingAssignmentError,
|
|
27
|
+
"webpack/lib/errors/ImportedBindingAssignmentError"
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
module.exports = ImportedBindingAssignmentError;
|