@depup/webpack 5.110.3-depup.0 → 5.111.1-depup.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 +7 -8
- package/changes.json +7 -11
- package/lib/APIPlugin.js +26 -11
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/Cache.js +8 -3
- package/lib/CacheFacade.js +1 -1
- package/lib/CircularModulesPlugin.js +157 -55
- package/lib/CleanPlugin.js +2 -2
- package/lib/CompatibilityPlugin.js +3 -4
- package/lib/Compilation.js +336 -337
- package/lib/Compiler.js +213 -51
- package/lib/ConstPlugin.js +16 -132
- package/lib/CopyPlugin.js +1054 -0
- package/lib/DefinePlugin.js +24 -8
- package/lib/DependencyTemplate.js +2 -1
- package/lib/DotenvPlugin.js +24 -28
- package/lib/ErrorHelpers.js +113 -0
- package/lib/ExportsInfo.js +20 -16
- package/lib/ExternalModule.js +47 -22
- package/lib/FileSystemInfo.js +17 -14
- package/lib/FlagDependencyExportsPlugin.js +53 -34
- package/lib/FlagDependencyUsagePlugin.js +9 -13
- package/lib/Generator.js +24 -2
- package/lib/HotModuleReplacementPlugin.js +55 -7
- package/lib/IgnorePlugin.js +1 -1
- package/lib/JavascriptMetaInfoPlugin.js +5 -3
- package/lib/LoaderOptionsPlugin.js +1 -1
- package/lib/MainTemplate.js +5 -1
- package/lib/Module.js +19 -10
- package/lib/ModuleGraph.js +6 -9
- package/lib/MultiCompiler.js +7 -17
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +135 -50
- package/lib/NormalModuleFactory.js +1 -1
- package/lib/RuntimeGlobals.js +21 -7
- package/lib/RuntimeModule.js +28 -12
- package/lib/RuntimePlugin.js +30 -3
- package/lib/RuntimeTemplate.js +813 -518
- package/lib/SourceMapDevToolPlugin.js +54 -104
- package/lib/TemplatedPathPlugin.js +16 -59
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +84 -91
- package/lib/asset/AssetBytesGenerator.js +7 -1
- package/lib/asset/AssetGenerator.js +50 -24
- package/lib/asset/AssetModule.js +3 -0
- package/lib/asset/AssetSourceGenerator.js +7 -1
- package/lib/asset/WebManifestParser.js +7 -5
- package/lib/buildChunkGraph.js +11 -15
- package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
- package/lib/cache/PackFileCacheStrategy.js +17 -19
- package/lib/cache/getLazyHashedEtag.js +3 -5
- package/lib/config/browserslistTargetHandler.js +17 -4
- package/lib/config/defaults.js +138 -128
- package/lib/config/getClaimedAssetTypes.js +10 -11
- package/lib/config/normalization.js +82 -12
- package/lib/config/target.js +13 -4
- package/lib/container/ContainerReferencePlugin.js +6 -0
- package/lib/container/RemoteRuntimeModule.js +9 -0
- package/lib/container/declaredRemotes.js +39 -0
- package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
- package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
- package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
- package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
- package/lib/css/CssGenerator.js +27 -11
- 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 +162 -31
- package/lib/css/CssServerStylesRuntimeModule.js +9 -0
- package/lib/css/cssMinify.js +43 -32
- package/lib/css/data.js +3514 -869
- package/lib/css/syntax.js +6370 -1220
- package/lib/debug/ProfilingPlugin.js +7 -4
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
- package/lib/dependencies/AMDRuntimeModules.js +18 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
- package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
- package/lib/dependencies/CommonJsPlugin.js +19 -3
- package/lib/dependencies/CommonJsRequireDependency.js +14 -5
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -9
- package/lib/dependencies/ContextElementDependency.js +1 -1
- package/lib/dependencies/CssIcssExportDependency.js +13 -9
- package/lib/dependencies/CssIcssImportDependency.js +3 -6
- package/lib/dependencies/CssUrlDependency.js +3 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
- package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
- package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
- package/lib/dependencies/HarmonyImportDependency.js +6 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
- package/lib/dependencies/HtmlEntryDependency.js +124 -102
- package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
- package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
- package/lib/dependencies/ImportMetaMainDependency.js +104 -0
- package/lib/dependencies/ImportMetaPlugin.js +67 -25
- package/lib/dependencies/ImportParserPlugin.js +1 -1
- package/lib/dependencies/LoaderPlugin.js +26 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/SystemRuntimeModule.js +9 -0
- package/lib/dependencies/URLContextDependency.js +1 -1
- package/lib/dependencies/URLDependency.js +6 -5
- package/lib/dependencies/WorkerAndWorkletPlugin.js +15 -21
- package/lib/dependencies/WorkerDependency.js +7 -7
- package/lib/dependencies/WorkletDependency.js +7 -11
- 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/DuplicateModulesWarning.js +12 -7
- package/lib/errors/EmptyCopyPatternWarning.js +26 -0
- package/lib/errors/ExternalStarReexportError.js +44 -0
- package/lib/errors/HookWebpackError.js +3 -2
- 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/hmr/LazyCompilationPlugin.js +3 -5
- package/lib/html/HtmlGenerator.js +72 -87
- package/lib/html/HtmlModulesPlugin.js +418 -200
- package/lib/html/HtmlParser.js +110 -147
- package/lib/html/builtinEmbeddedRenderer.js +107 -0
- package/lib/html/data.js +142 -7
- package/lib/html/htmlMinify.js +92 -122
- package/lib/html/syntax.js +1618 -1391
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/index.js +49 -3
- package/lib/javascript/ChunkFormatHelpers.js +4 -3
- package/lib/javascript/JavascriptGenerator.js +8 -1
- package/lib/javascript/JavascriptModule.js +1 -0
- package/lib/javascript/JavascriptModulesPlugin.js +73 -72
- package/lib/javascript/JavascriptParser.js +1970 -900
- 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 +1500 -0
- package/lib/javascript/regexp.js +1762 -0
- package/lib/javascript/regexpData.js +51 -0
- package/lib/javascript/syntax.js +9061 -5262
- package/lib/json/JsonGenerator.js +7 -1
- package/lib/library/ModuleLibraryPlugin.js +171 -132
- package/lib/loaders/LoaderRunner.js +137 -9
- package/lib/node/NodeWatchFileSystem.js +3 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
- package/lib/optimize/AggressiveMergingPlugin.js +3 -5
- package/lib/optimize/ConcatenatedModule.js +178 -120
- package/lib/optimize/ConstExportsPlugin.js +50 -39
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
- package/lib/optimize/InlineExports.js +20 -123
- package/lib/optimize/InnerGraphPlugin.js +7 -13
- package/lib/optimize/LimitChunkCountPlugin.js +5 -8
- package/lib/optimize/MangleExportsPlugin.js +13 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
- package/lib/optimize/RealContentHashPlugin.js +68 -9
- package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
- package/lib/optimize/SplitChunksPlugin.js +2 -4
- package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
- package/lib/performance/BroadContextsPlugin.js +1 -1
- package/lib/performance/CacheEffectivenessPlugin.js +7 -7
- 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/SizeLimitsPlugin.js +2 -4
- 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 +8 -8
- 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 +18 -23
- package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
- package/lib/rules/RuleSetCompiler.js +211 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +98 -66
- 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 +12 -4
- 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 +11 -4
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
- package/lib/runtime/HelperRuntimeModule.js +10 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +305 -224
- 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/DataUriPlugin.js +3 -6
- package/lib/schemes/VirtualUrlPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +9 -9
- package/lib/serialization/FileMiddleware.js +16 -16
- package/lib/serialization/ObjectMiddleware.js +168 -139
- 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 +6 -5
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
- package/lib/typescript/TypeScriptPlugin.js +2 -3
- package/lib/url/URLParserPlugin.js +6 -8
- package/lib/util/LocConverter.js +4 -7
- package/lib/util/SourceProcessor.js +91 -91
- package/lib/util/async.js +292 -0
- package/lib/util/buildDiagnostics.js +69 -0
- package/lib/util/chainedImports.js +3 -4
- package/lib/util/concatenate.js +4 -4
- package/lib/util/createHooksRegistry.js +1 -2
- package/lib/util/dataURL.js +2 -3
- package/lib/util/deterministicGrouping.js +8 -13
- package/lib/util/findGraphRoots.js +6 -13
- package/lib/util/fs.js +27 -1
- package/lib/util/globUtils.js +1 -1
- package/lib/util/handlerKeys.js +40 -0
- package/lib/util/hash/wasm-hash.js +3 -4
- package/lib/util/identifier.js +20 -0
- package/lib/util/internalSerializables.js +5 -1
- package/lib/util/registerExternalSerializer.js +6 -45
- package/lib/util/semver.js +5 -3
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
- package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
- package/package.json +55 -46
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +379 -66
- 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 +1723 -604
- package/lib/dependencies/ExportBindingInitFragment.js +0 -191
- package/lib/errors/EntrypointOverlapWarning.js +0 -45
- package/lib/performance/EntrypointOverlapPlugin.js +0 -122
|
@@ -15,6 +15,10 @@ const HarmonyExportImportedSpecifierDependency = require("../dependencies/Harmon
|
|
|
15
15
|
const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
|
|
16
16
|
const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
|
|
17
17
|
const { ImportPhaseUtils } = require("../dependencies/ImportPhase");
|
|
18
|
+
const {
|
|
19
|
+
getBuildDiagnostics,
|
|
20
|
+
recordOptimizationBailout
|
|
21
|
+
} = require("../util/buildDiagnostics");
|
|
18
22
|
const formatLocation = require("../util/formatLocation");
|
|
19
23
|
const { dirname, join, readJson, relative } = require("../util/fs");
|
|
20
24
|
const { getGlobToRegExpSource } = require("../util/globUtils");
|
|
@@ -35,7 +39,7 @@ const { CompilerHintNotationRegExp } = require("../util/magicComment");
|
|
|
35
39
|
* } from "estree"
|
|
36
40
|
*/
|
|
37
41
|
/** @import Compiler from "../Compiler" */
|
|
38
|
-
/** @import Module, { BuildMeta } from "../Module" */
|
|
42
|
+
/** @import Module, { BuildMeta, BuildInfo } from "../Module" */
|
|
39
43
|
/**
|
|
40
44
|
* @import {
|
|
41
45
|
* JavascriptModuleBuildInfo
|
|
@@ -546,14 +550,18 @@ class SideEffectsFlagPlugin {
|
|
|
546
550
|
} else {
|
|
547
551
|
const type = sideEffectsStatement.type;
|
|
548
552
|
const loc = parser.getLocation(sideEffectsStatement);
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
)
|
|
553
|
+
const at = formatLocation(loc);
|
|
554
|
+
|
|
555
|
+
const buildInfo = /** @type {BuildInfo} */ (
|
|
556
|
+
parser.state.module.buildInfo
|
|
557
|
+
);
|
|
558
|
+
recordOptimizationBailout(
|
|
559
|
+
buildInfo,
|
|
560
|
+
`Statement (${type}) with side effects in source code at ${at}`
|
|
561
|
+
);
|
|
562
|
+
// `performance.unusedModules` names the statement, so it is kept typed too.
|
|
563
|
+
getBuildDiagnostics(buildInfo).sideEffectStatement =
|
|
564
|
+
`${type} at ${at}`;
|
|
557
565
|
}
|
|
558
566
|
});
|
|
559
567
|
};
|
|
@@ -588,12 +596,8 @@ class SideEffectsFlagPlugin {
|
|
|
588
596
|
pureFunctions.add(name);
|
|
589
597
|
};
|
|
590
598
|
|
|
591
|
-
//
|
|
592
|
-
//
|
|
593
|
-
// 1. function foo
|
|
594
|
-
// 2. export function foo
|
|
595
|
-
// 3. export default function foo
|
|
596
|
-
// 4. export default function / export default () => {} (anonymous)
|
|
599
|
+
// Covers a plain `function foo`, an exported one, and an
|
|
600
|
+
// `export default` function whether named or anonymous.
|
|
597
601
|
parser.hooks.preStatementByType
|
|
598
602
|
.for("FunctionDeclaration")
|
|
599
603
|
.tap(PLUGIN_NAME, (statement) => {
|
|
@@ -609,13 +613,10 @@ class SideEffectsFlagPlugin {
|
|
|
609
613
|
markPure(name);
|
|
610
614
|
return;
|
|
611
615
|
}
|
|
612
|
-
const commentsStart = parser.prevStatement
|
|
613
|
-
? /** @type {Range} */ (parser.prevStatement.range)[1]
|
|
614
|
-
: 0;
|
|
615
616
|
if (
|
|
616
617
|
hasNoSideEffectsNotation(
|
|
617
618
|
parser,
|
|
618
|
-
|
|
619
|
+
parser.getAttachedCommentsStart(statement),
|
|
619
620
|
/** @type {Range} */ (statement.range)[0]
|
|
620
621
|
)
|
|
621
622
|
) {
|
|
@@ -640,12 +641,9 @@ class SideEffectsFlagPlugin {
|
|
|
640
641
|
let hasAnnotation = false;
|
|
641
642
|
// Before the VariableDeclaration (only for const)
|
|
642
643
|
if (statement.kind === "const") {
|
|
643
|
-
const commentsStart = parser.prevStatement
|
|
644
|
-
? /** @type {Range} */ (parser.prevStatement.range)[1]
|
|
645
|
-
: 0;
|
|
646
644
|
hasAnnotation = hasNoSideEffectsNotation(
|
|
647
645
|
parser,
|
|
648
|
-
|
|
646
|
+
parser.getAttachedCommentsStart(statement),
|
|
649
647
|
/** @type {Range} */ (statement.range)[0]
|
|
650
648
|
);
|
|
651
649
|
}
|
|
@@ -893,11 +891,9 @@ class SideEffectsFlagPlugin {
|
|
|
893
891
|
}
|
|
894
892
|
if (!target) continue;
|
|
895
893
|
|
|
896
|
-
// A deferred re-export
|
|
897
|
-
//
|
|
898
|
-
//
|
|
899
|
-
// source module, breaking deferred-namespace identity
|
|
900
|
-
// and evaluation semantics.
|
|
894
|
+
// A deferred re-export keeps its side-effect-free barrel:
|
|
895
|
+
// collapsing it would turn the cached deferred namespace into
|
|
896
|
+
// an eager import, losing both identity and semantics.
|
|
901
897
|
if (
|
|
902
898
|
deferEnabled &&
|
|
903
899
|
isDeferredTargetConnection(target.connection)
|
|
@@ -1390,10 +1390,8 @@ class SplitChunksPlugin {
|
|
|
1390
1390
|
}
|
|
1391
1391
|
}
|
|
1392
1392
|
}
|
|
1393
|
-
//
|
|
1394
|
-
//
|
|
1395
|
-
// Otherwise we create the key from chunks and cache group key
|
|
1396
|
-
// This automatically merges equal names
|
|
1393
|
+
// A named group keys on its name, which merges equal names by itself;
|
|
1394
|
+
// an unnamed one keys on its chunks and cache group.
|
|
1397
1395
|
const key = name
|
|
1398
1396
|
? `${cacheGroup.key} name:${name}`
|
|
1399
1397
|
: getUnnamedKey(cacheGroup, selectedChunksKey);
|
|
@@ -0,0 +1,115 @@
|
|
|
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 AnalyzableBailoutsWarning = require("../errors/AnalyzableBailoutsWarning");
|
|
9
|
+
|
|
10
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
11
|
+
/** @import Compiler from "../Compiler" */
|
|
12
|
+
/** @import Module from "../Module" */
|
|
13
|
+
/** @import { BailoutDetails } from "../errors/AnalyzableBailoutsWarning" */
|
|
14
|
+
|
|
15
|
+
const PLUGIN_NAME = "AnalyzableBailoutsPlugin";
|
|
16
|
+
|
|
17
|
+
// Enough to point at the offenders without listing every module of a build.
|
|
18
|
+
const MAX_REPORTED_MODULES = 5;
|
|
19
|
+
|
|
20
|
+
class AnalyzableBailoutsPlugin {
|
|
21
|
+
/**
|
|
22
|
+
* Creates an instance of AnalyzableBailoutsPlugin.
|
|
23
|
+
* @param {PerformanceOptions} options the plugin options
|
|
24
|
+
*/
|
|
25
|
+
constructor(options) {
|
|
26
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
27
|
+
this.hints = options.hints;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
32
|
+
* @param {Compiler} compiler the compiler instance
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
apply(compiler) {
|
|
36
|
+
const hints = this.hints;
|
|
37
|
+
|
|
38
|
+
if (!hints) return;
|
|
39
|
+
|
|
40
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
41
|
+
// `afterSeal` is past the hash, which folds every message into it — and
|
|
42
|
+
// past the runtime modules, which record their reasons while being hashed.
|
|
43
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
44
|
+
const { chunkGraph, runtimeTemplate, requestShortener } = compilation;
|
|
45
|
+
|
|
46
|
+
// Nothing is recorded outside ESM output, so there is nothing to walk.
|
|
47
|
+
if (!runtimeTemplate.isModule()) return;
|
|
48
|
+
|
|
49
|
+
/** @type {Map<string, Set<string>>} */
|
|
50
|
+
const modulesByReason = new Map();
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Files the reasons recorded on a module under its printed name.
|
|
54
|
+
* @param {Module} module the module, a runtime module included
|
|
55
|
+
* @returns {void}
|
|
56
|
+
*/
|
|
57
|
+
const collect = (module) => {
|
|
58
|
+
const reasons = runtimeTemplate.analyzableBailoutsOf(module);
|
|
59
|
+
if (reasons.length === 0) return;
|
|
60
|
+
const name = module.readableIdentifier(requestShortener);
|
|
61
|
+
for (const reason of reasons) {
|
|
62
|
+
let modules = modulesByReason.get(reason);
|
|
63
|
+
if (modules === undefined) {
|
|
64
|
+
modules = new Set();
|
|
65
|
+
modulesByReason.set(reason, modules);
|
|
66
|
+
}
|
|
67
|
+
modules.add(name);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
for (const module of compilation.modules) collect(module);
|
|
72
|
+
for (const chunk of compilation.chunks) {
|
|
73
|
+
for (const module of chunkGraph.getChunkRuntimeModulesIterable(
|
|
74
|
+
chunk
|
|
75
|
+
)) {
|
|
76
|
+
collect(module);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (modulesByReason.size === 0) return;
|
|
81
|
+
|
|
82
|
+
/** @type {BailoutDetails[]} */
|
|
83
|
+
const bailouts = [];
|
|
84
|
+
let references = 0;
|
|
85
|
+
|
|
86
|
+
for (const [reason, modules] of modulesByReason) {
|
|
87
|
+
const names = [...modules].sort();
|
|
88
|
+
references += names.length;
|
|
89
|
+
bailouts.push({
|
|
90
|
+
reason,
|
|
91
|
+
modules: names.slice(0, MAX_REPORTED_MODULES),
|
|
92
|
+
count: names.length
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// The reason holding the most modules leads; ties read in one order.
|
|
97
|
+
bailouts.sort(
|
|
98
|
+
(a, b) => b.count - a.count || (a.reason < b.reason ? -1 : 1)
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const warning = new AnalyzableBailoutsWarning(bailouts, references);
|
|
102
|
+
|
|
103
|
+
if (hints === "error") {
|
|
104
|
+
compilation.errors.push(warning);
|
|
105
|
+
} else if (hints === "stats") {
|
|
106
|
+
compilation.hints.push(warning);
|
|
107
|
+
} else {
|
|
108
|
+
compilation.warnings.push(warning);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
module.exports = AnalyzableBailoutsPlugin;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const ContextModule = require("../ContextModule");
|
|
8
|
+
const ContextModule = require("../context/ContextModule");
|
|
9
9
|
const BroadContextsWarning = require("../errors/BroadContextsWarning");
|
|
10
10
|
const { compareStrings } = require("../util/comparators");
|
|
11
11
|
const getModuleSize = require("./getModuleSize");
|
|
@@ -65,10 +65,11 @@ class CacheEffectivenessPlugin {
|
|
|
65
65
|
|
|
66
66
|
uncacheable++;
|
|
67
67
|
|
|
68
|
+
const notCacheableReasons =
|
|
69
|
+
buildInfo.diagnostics && buildInfo.diagnostics.notCacheableReasons;
|
|
68
70
|
const reasons =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
? buildInfo.notCacheableReasons
|
|
71
|
+
notCacheableReasons && notCacheableReasons.length > 0
|
|
72
|
+
? notCacheableReasons
|
|
72
73
|
: [UNSPECIFIED_REASON];
|
|
73
74
|
|
|
74
75
|
for (const reason of reasons) {
|
|
@@ -82,10 +83,9 @@ class CacheEffectivenessPlugin {
|
|
|
82
83
|
|
|
83
84
|
if (!warmRebuild && uncacheable === 0) return;
|
|
84
85
|
|
|
85
|
-
// Most frequent first,
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
// would vary which of them a build names at all.
|
|
86
|
+
// Most frequent first, then by reason: the map is keyed in walk order,
|
|
87
|
+
// which differs between builds, and only three reasons are reported, so
|
|
88
|
+
// an unbroken tie would vary which of them a build names.
|
|
89
89
|
const sorted = [...modulesByReason].sort(
|
|
90
90
|
(a, b) => b[1] - a[1] || (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)
|
|
91
91
|
);
|
|
@@ -8,18 +8,17 @@
|
|
|
8
8
|
const DuplicateModulesWarning = require("../errors/DuplicateModulesWarning");
|
|
9
9
|
const { compareStrings } = require("../util/comparators");
|
|
10
10
|
const getModuleSize = require("./getModuleSize");
|
|
11
|
+
const getSourceModules = require("./getSourceModules");
|
|
11
12
|
|
|
12
13
|
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
14
|
+
/** @import Chunk from "../Chunk" */
|
|
13
15
|
/** @import Compiler from "../Compiler" */
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
* DuplicateModuleDetails
|
|
17
|
-
* } from "../errors/DuplicateModulesWarning"
|
|
18
|
-
*/
|
|
16
|
+
/** @import Module from "../Module" */
|
|
17
|
+
/** @import { DuplicateModuleDetails } from "../errors/DuplicateModulesWarning" */
|
|
19
18
|
|
|
20
19
|
const PLUGIN_NAME = "DuplicateModulesPlugin";
|
|
21
20
|
|
|
22
|
-
// Enough to name the
|
|
21
|
+
// Enough to name the costliest without listing every shared module.
|
|
23
22
|
const MAX_REPORTED_MODULES = 5;
|
|
24
23
|
|
|
25
24
|
class DuplicateModulesPlugin {
|
|
@@ -44,24 +43,69 @@ class DuplicateModulesPlugin {
|
|
|
44
43
|
|
|
45
44
|
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
46
45
|
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
47
|
-
const { chunkGraph, requestShortener } = compilation;
|
|
46
|
+
const { chunkGraph, entrypoints, requestShortener } = compilation;
|
|
47
|
+
|
|
48
|
+
// The entrypoints a chunk is reached from, so a copy can be blamed on
|
|
49
|
+
// the pages that pay for it.
|
|
50
|
+
/** @type {Map<Chunk, Set<string>>} */
|
|
51
|
+
const chunkEntrypoints = new Map();
|
|
52
|
+
|
|
53
|
+
for (const [name, entrypoint] of entrypoints) {
|
|
54
|
+
for (const chunk of entrypoint.chunks) {
|
|
55
|
+
const names = chunkEntrypoints.get(chunk);
|
|
56
|
+
|
|
57
|
+
if (names === undefined) {
|
|
58
|
+
chunkEntrypoints.set(chunk, new Set([name]));
|
|
59
|
+
} else {
|
|
60
|
+
names.add(name);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @type {Map<Module, { chunks: Set<Chunk>, entrypoints: Set<string> }>} */
|
|
66
|
+
const copies = new Map();
|
|
67
|
+
|
|
68
|
+
for (const chunk of compilation.chunks) {
|
|
69
|
+
const names = chunkEntrypoints.get(chunk);
|
|
70
|
+
|
|
71
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
72
|
+
// Scope hoisting makes several modules into one, so a module
|
|
73
|
+
// concatenated into two chunks is in neither on its own.
|
|
74
|
+
for (const inner of getSourceModules(module)) {
|
|
75
|
+
let entry = copies.get(inner);
|
|
76
|
+
|
|
77
|
+
if (entry === undefined) {
|
|
78
|
+
copies.set(
|
|
79
|
+
inner,
|
|
80
|
+
(entry = { chunks: new Set(), entrypoints: new Set() })
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
entry.chunks.add(chunk);
|
|
85
|
+
|
|
86
|
+
if (names !== undefined) {
|
|
87
|
+
for (const name of names) entry.entrypoints.add(name);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
48
93
|
/** @type {DuplicateModuleDetails[]} */
|
|
49
94
|
const duplicated = [];
|
|
50
95
|
let wasted = 0;
|
|
51
96
|
|
|
52
|
-
for (const module of
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (chunks < 2) continue;
|
|
97
|
+
for (const [module, { chunks, entrypoints: names }] of copies) {
|
|
98
|
+
if (chunks.size < 2) continue;
|
|
56
99
|
|
|
57
100
|
// The first copy is the one that had to be emitted; the rest are
|
|
58
101
|
// what a shared chunk would save.
|
|
59
|
-
const extra = getModuleSize(module) * (chunks - 1);
|
|
102
|
+
const extra = getModuleSize(module) * (chunks.size - 1);
|
|
60
103
|
|
|
61
104
|
wasted += extra;
|
|
62
105
|
duplicated.push({
|
|
63
106
|
name: module.readableIdentifier(requestShortener),
|
|
64
|
-
chunks,
|
|
107
|
+
chunks: chunks.size,
|
|
108
|
+
entrypoints: [...names].sort(compareStrings),
|
|
65
109
|
wasted: extra
|
|
66
110
|
});
|
|
67
111
|
}
|
|
@@ -11,6 +11,7 @@ const {
|
|
|
11
11
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
12
12
|
} = require("../ModuleTypeConstants");
|
|
13
13
|
const EvalUsageWarning = require("../errors/EvalUsageWarning");
|
|
14
|
+
const { getBuildDiagnostics } = require("../util/buildDiagnostics");
|
|
14
15
|
const { compareStrings } = require("../util/comparators");
|
|
15
16
|
|
|
16
17
|
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
@@ -59,7 +60,7 @@ class EvalUsagePlugin {
|
|
|
59
60
|
parser.state.module.buildInfo
|
|
60
61
|
);
|
|
61
62
|
|
|
62
|
-
buildInfo.usesEval = true;
|
|
63
|
+
getBuildDiagnostics(buildInfo).usesEval = true;
|
|
63
64
|
});
|
|
64
65
|
};
|
|
65
66
|
|
|
@@ -84,7 +85,9 @@ class EvalUsagePlugin {
|
|
|
84
85
|
// Every built module carries one, so only the field is in question.
|
|
85
86
|
const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
|
|
86
87
|
|
|
87
|
-
if (!buildInfo.usesEval)
|
|
88
|
+
if (!buildInfo.diagnostics || !buildInfo.diagnostics.usesEval) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
88
91
|
|
|
89
92
|
callers.push(module.readableIdentifier(requestShortener));
|
|
90
93
|
}
|
|
@@ -0,0 +1,115 @@
|
|
|
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 { SourceMapSource } = require("webpack-sources");
|
|
9
|
+
const NormalModule = require("../NormalModule");
|
|
10
|
+
const MissingSourceMapsWarning = require("../errors/MissingSourceMapsWarning");
|
|
11
|
+
const { compareStrings } = require("../util/comparators");
|
|
12
|
+
const getSourceModules = require("./getSourceModules");
|
|
13
|
+
|
|
14
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
15
|
+
/** @import Compiler from "../Compiler" */
|
|
16
|
+
/** @import Module from "../Module" */
|
|
17
|
+
/** @import RequestShortener from "../RequestShortener" */
|
|
18
|
+
/** @import { MissingSourceMapDetails } from "../errors/MissingSourceMapsWarning" */
|
|
19
|
+
|
|
20
|
+
const PLUGIN_NAME = "MissingSourceMapsPlugin";
|
|
21
|
+
|
|
22
|
+
// Enough to name the offenders without listing every module a loader touched.
|
|
23
|
+
const MAX_REPORTED_MODULES = 5;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The loaders that ran on a module, shortened for reading.
|
|
27
|
+
* @param {NormalModule} module the module
|
|
28
|
+
* @param {RequestShortener} requestShortener the request shortener
|
|
29
|
+
* @returns {string[]} what to call them
|
|
30
|
+
*/
|
|
31
|
+
const loaderNames = (module, requestShortener) =>
|
|
32
|
+
module.loaders.map((it) => requestShortener.shorten(it.loader) || it.loader);
|
|
33
|
+
|
|
34
|
+
class MissingSourceMapsPlugin {
|
|
35
|
+
/**
|
|
36
|
+
* Creates an instance of MissingSourceMapsPlugin.
|
|
37
|
+
* @param {PerformanceOptions} options the plugin options
|
|
38
|
+
*/
|
|
39
|
+
constructor(options) {
|
|
40
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
41
|
+
this.hints = options.hints;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
46
|
+
* @param {Compiler} compiler the compiler instance
|
|
47
|
+
* @returns {void}
|
|
48
|
+
*/
|
|
49
|
+
apply(compiler) {
|
|
50
|
+
const hints = this.hints;
|
|
51
|
+
|
|
52
|
+
if (!hints) return;
|
|
53
|
+
|
|
54
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
55
|
+
// `afterSeal` is past the hash, which folds every message into it — a
|
|
56
|
+
// hint reported earlier would change the build's identity.
|
|
57
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
58
|
+
const { requestShortener } = compilation;
|
|
59
|
+
/** @type {MissingSourceMapDetails[]} */
|
|
60
|
+
const found = [];
|
|
61
|
+
|
|
62
|
+
// A module can be reached both on its own and inside a
|
|
63
|
+
// concatenation, so it is only counted the first time.
|
|
64
|
+
/** @type {Set<Module>} */
|
|
65
|
+
const seen = new Set();
|
|
66
|
+
|
|
67
|
+
for (const parent of compilation.modules) {
|
|
68
|
+
// Scope hoisting makes several modules into one, and each of them
|
|
69
|
+
// kept the source its own loaders produced.
|
|
70
|
+
for (const module of getSourceModules(parent)) {
|
|
71
|
+
if (seen.has(module)) continue;
|
|
72
|
+
|
|
73
|
+
seen.add(module);
|
|
74
|
+
|
|
75
|
+
if (!(module instanceof NormalModule)) continue;
|
|
76
|
+
|
|
77
|
+
// Only where a real map was asked for: the cheap devtools map to
|
|
78
|
+
// the loader output by design, so nothing is lost there.
|
|
79
|
+
if (!module.useSourceMap) continue;
|
|
80
|
+
if (module.loaders.length === 0) continue;
|
|
81
|
+
|
|
82
|
+
// A loader that returned a map produces a `SourceMapSource`;
|
|
83
|
+
// falling back to any other source is the map being dropped.
|
|
84
|
+
if (module.originalSource() instanceof SourceMapSource) continue;
|
|
85
|
+
|
|
86
|
+
found.push({
|
|
87
|
+
name: module.readableIdentifier(requestShortener),
|
|
88
|
+
loaders: loaderNames(module, requestShortener)
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (found.length === 0) return;
|
|
94
|
+
|
|
95
|
+
// By name: module order is not stable across runs.
|
|
96
|
+
found.sort((a, b) => compareStrings(a.name, b.name));
|
|
97
|
+
|
|
98
|
+
const warning = new MissingSourceMapsWarning(
|
|
99
|
+
found.slice(0, MAX_REPORTED_MODULES),
|
|
100
|
+
found.length
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
if (hints === "error") {
|
|
104
|
+
compilation.errors.push(warning);
|
|
105
|
+
} else if (hints === "stats") {
|
|
106
|
+
compilation.hints.push(warning);
|
|
107
|
+
} else {
|
|
108
|
+
compilation.warnings.push(warning);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
module.exports = MissingSourceMapsPlugin;
|
|
@@ -11,6 +11,7 @@ const {
|
|
|
11
11
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
12
12
|
} = require("../ModuleTypeConstants");
|
|
13
13
|
const PureAnnotationsWarning = require("../errors/PureAnnotationsWarning");
|
|
14
|
+
const { getBuildDiagnostics } = require("../util/buildDiagnostics");
|
|
14
15
|
const { compareStrings } = require("../util/comparators");
|
|
15
16
|
const { CompilerHintNotationRegExp } = require("../util/magicComment");
|
|
16
17
|
|
|
@@ -154,7 +155,7 @@ class PureAnnotationsPlugin {
|
|
|
154
155
|
parser.state.module.buildInfo
|
|
155
156
|
);
|
|
156
157
|
|
|
157
|
-
buildInfo.ineffectivePureAnnotations = wasted;
|
|
158
|
+
getBuildDiagnostics(buildInfo).ineffectivePureAnnotations = wasted;
|
|
158
159
|
});
|
|
159
160
|
};
|
|
160
161
|
|
|
@@ -180,9 +181,11 @@ class PureAnnotationsPlugin {
|
|
|
180
181
|
// Every built module carries one, so only the field is in question.
|
|
181
182
|
const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
|
|
182
183
|
|
|
183
|
-
|
|
184
|
+
const count =
|
|
185
|
+
buildInfo.diagnostics &&
|
|
186
|
+
buildInfo.diagnostics.ineffectivePureAnnotations;
|
|
184
187
|
|
|
185
|
-
|
|
188
|
+
if (!count) continue;
|
|
186
189
|
|
|
187
190
|
total += count;
|
|
188
191
|
wasteful.push({
|
|
@@ -269,10 +269,8 @@ module.exports = class SizeLimitsPlugin {
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
if (hints) {
|
|
272
|
-
//
|
|
273
|
-
//
|
|
274
|
-
// 3. No Async Chunks
|
|
275
|
-
// if !1, then 2, if !2 return
|
|
272
|
+
// Each asset is checked against the limit first, then each entrypoint's
|
|
273
|
+
// initial chunks together; async chunks count towards neither.
|
|
276
274
|
if (assetsOverSizeLimit.length > 0) {
|
|
277
275
|
addLargestModules(compilation, assetsOverSizeLimit);
|
|
278
276
|
warnings.push(
|
|
@@ -11,14 +11,14 @@ const {
|
|
|
11
11
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
12
12
|
} = require("../ModuleTypeConstants");
|
|
13
13
|
const TopLevelThisWarning = require("../errors/TopLevelThisWarning");
|
|
14
|
+
const { getBuildDiagnostics } = require("../util/buildDiagnostics");
|
|
14
15
|
const { compareStrings } = require("../util/comparators");
|
|
15
16
|
const getSourceModules = require("./getSourceModules");
|
|
16
17
|
|
|
17
18
|
/** @import { Program } from "estree" */
|
|
18
19
|
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
19
20
|
/** @import Compiler from "../Compiler" */
|
|
20
|
-
/** @import Module from "../Module" */
|
|
21
|
-
/** @import { BuildInfo } from "../Module" */
|
|
21
|
+
/** @import Module, { BuildInfo } from "../Module" */
|
|
22
22
|
/** @import JavascriptParser from "../javascript/JavascriptParser" */
|
|
23
23
|
/** @import { TopLevelThisDetails } from "../errors/TopLevelThisWarning" */
|
|
24
24
|
|
|
@@ -133,7 +133,7 @@ class TopLevelThisPlugin {
|
|
|
133
133
|
/** @type {BuildInfo} */
|
|
134
134
|
(parser.state.module.buildInfo);
|
|
135
135
|
|
|
136
|
-
buildInfo.topLevelThis = count;
|
|
136
|
+
getBuildDiagnostics(buildInfo).topLevelThis = count;
|
|
137
137
|
});
|
|
138
138
|
};
|
|
139
139
|
|
|
@@ -168,7 +168,8 @@ class TopLevelThisPlugin {
|
|
|
168
168
|
seen.add(module);
|
|
169
169
|
|
|
170
170
|
const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
|
|
171
|
-
const count =
|
|
171
|
+
const count =
|
|
172
|
+
buildInfo.diagnostics && buildInfo.diagnostics.topLevelThis;
|
|
172
173
|
|
|
173
174
|
if (!count) continue;
|
|
174
175
|
|