@depup/webpack 5.109.2-depup.0 → 5.110.3-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 +5 -5
- package/changes.json +7 -7
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +46 -35
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +4 -7
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +7 -7
- package/lib/Compilation.js +688 -409
- package/lib/Compiler.js +53 -38
- package/lib/ConcatenationScope.js +107 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +121 -37
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +91 -26
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +111 -14
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +232 -77
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +44 -70
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +40 -49
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +8 -4
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +9 -4
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +152 -103
- package/lib/NormalModuleFactory.js +555 -110
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +335 -169
- package/lib/RuntimeTemplate.js +2761 -316
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +32 -22
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +12 -6
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +30 -23
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +270 -78
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +46 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +6 -11
- package/lib/container/ModuleFederationPlugin.js +7 -24
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +171 -43
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +84 -32
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +172 -100
- package/lib/css/CssParser.js +1113 -568
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5334 -0
- package/lib/css/syntax.js +9647 -232
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +170 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +121 -60
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +49 -31
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +45 -5
- package/lib/dependencies/ImportDependency.js +33 -50
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +73 -49
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +50 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
- package/lib/dependencies/WorkerDependency.js +22 -22
- package/lib/dependencies/WorkletDependency.js +18 -21
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/importOptionsCheck.js +47 -0
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DotenvFileError.js +29 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/ImportedBindingAssignmentError.js +30 -0
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +9 -6
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +277 -77
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +366 -200
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +6034 -1384
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +7 -8
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +103 -123
- package/lib/javascript/JavascriptParser.js +242 -99
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +2678 -232
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +47 -6
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +1030 -476
- package/lib/optimize/ConstExportsPlugin.js +16 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +130 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
- package/lib/optimize/RealContentHashPlugin.js +121 -41
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +86 -24
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +295 -79
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +46 -20
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +4 -4
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +22 -9
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
- package/lib/stats/StatsFactory.js +25 -26
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +20 -24
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/ArrayQueue.js +3 -3
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1066 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +3 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +10 -2
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/createMappings.js +25 -3
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +4 -0
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +8 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/removeBOM.js +82 -1
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
- package/lib/web/FetchCompileWasmPlugin.js +48 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +32 -25
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +667 -34
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +3223 -465
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -0,0 +1,139 @@
|
|
|
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 LegacyJavascriptWarning = require("../errors/LegacyJavascriptWarning");
|
|
9
|
+
const { compareStrings } = require("../util/comparators");
|
|
10
|
+
const { WINDOWS_PATH_SEPARATOR_REGEXP } = require("../util/identifier");
|
|
11
|
+
const getModuleSize = require("./getModuleSize");
|
|
12
|
+
const getSourceModules = require("./getSourceModules");
|
|
13
|
+
|
|
14
|
+
/** @import { Environment, PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
15
|
+
/** @import Compiler from "../Compiler" */
|
|
16
|
+
/** @import { LegacyPackageDetails } from "../errors/LegacyJavascriptWarning" */
|
|
17
|
+
|
|
18
|
+
const PLUGIN_NAME = "LegacyJavascriptPlugin";
|
|
19
|
+
|
|
20
|
+
// Packages that exist to emulate syntax. `core-js` is absent on purpose: it
|
|
21
|
+
// polyfills APIs, which `output.environment` says nothing about.
|
|
22
|
+
const EMULATING_PACKAGES = ["regenerator-runtime", "@babel/runtime"];
|
|
23
|
+
|
|
24
|
+
// The syntax the report leans on: each is what one of those packages exists to
|
|
25
|
+
// lower, so a target with all of them needs none of the lowering.
|
|
26
|
+
/** @type {(keyof Environment)[]} */
|
|
27
|
+
const NATIVE_FEATURES = [
|
|
28
|
+
"arrowFunction",
|
|
29
|
+
"asyncFunction",
|
|
30
|
+
"const",
|
|
31
|
+
"destructuring",
|
|
32
|
+
"forOf",
|
|
33
|
+
"generator",
|
|
34
|
+
"templateLiteral"
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The emulating package a module belongs to, if it is in one.
|
|
39
|
+
* @param {string} resource the module's path
|
|
40
|
+
* @returns {string | undefined} the package, or undefined when it is not one
|
|
41
|
+
*/
|
|
42
|
+
const emulatingPackage = (resource) => {
|
|
43
|
+
// Separators normalized so one check serves both platforms, and matched
|
|
44
|
+
// against the path so an alias or re-export is still recognized.
|
|
45
|
+
const path = resource.replace(WINDOWS_PATH_SEPARATOR_REGEXP, "/");
|
|
46
|
+
|
|
47
|
+
for (const name of EMULATING_PACKAGES) {
|
|
48
|
+
if (path.includes(`node_modules/${name}/`)) return name;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
class LegacyJavascriptPlugin {
|
|
55
|
+
/**
|
|
56
|
+
* Creates an instance of LegacyJavascriptPlugin.
|
|
57
|
+
* @param {PerformanceOptions} options the plugin options
|
|
58
|
+
*/
|
|
59
|
+
constructor(options) {
|
|
60
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
61
|
+
this.hints = options.hints;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
66
|
+
* @param {Compiler} compiler the compiler instance
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
apply(compiler) {
|
|
70
|
+
const hints = this.hints;
|
|
71
|
+
|
|
72
|
+
if (!hints) return;
|
|
73
|
+
|
|
74
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
75
|
+
// `afterSeal` is past the hash, which folds every message into it — a
|
|
76
|
+
// hint reported earlier would change the build's identity.
|
|
77
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
78
|
+
const environment = compilation.outputOptions.environment;
|
|
79
|
+
|
|
80
|
+
// Reported only when the target has every one of them: emulating a
|
|
81
|
+
// feature the target is missing is the polyfill doing its job.
|
|
82
|
+
for (const feature of NATIVE_FEATURES) {
|
|
83
|
+
if (!environment[feature]) return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** @type {Map<string, LegacyPackageDetails>} */
|
|
87
|
+
const found = new Map();
|
|
88
|
+
let totalSize = 0;
|
|
89
|
+
|
|
90
|
+
for (const module of compilation.modules) {
|
|
91
|
+
for (const inner of getSourceModules(module)) {
|
|
92
|
+
const resource = inner.nameForCondition();
|
|
93
|
+
|
|
94
|
+
if (!resource) continue;
|
|
95
|
+
|
|
96
|
+
const name = emulatingPackage(resource);
|
|
97
|
+
|
|
98
|
+
if (!name) continue;
|
|
99
|
+
|
|
100
|
+
const size = getModuleSize(inner);
|
|
101
|
+
const details = found.get(name);
|
|
102
|
+
|
|
103
|
+
totalSize += size;
|
|
104
|
+
|
|
105
|
+
if (details === undefined) {
|
|
106
|
+
found.set(name, { name, modules: 1, size });
|
|
107
|
+
} else {
|
|
108
|
+
details.modules++;
|
|
109
|
+
details.size += size;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (found.size === 0) return;
|
|
115
|
+
|
|
116
|
+
// Ties break by name: module order is not stable across runs.
|
|
117
|
+
const packages = [...found.values()].sort(
|
|
118
|
+
(a, b) => b.size - a.size || compareStrings(a.name, b.name)
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const warning = new LegacyJavascriptWarning(
|
|
122
|
+
packages,
|
|
123
|
+
totalSize,
|
|
124
|
+
NATIVE_FEATURES
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
if (hints === "error") {
|
|
128
|
+
compilation.errors.push(warning);
|
|
129
|
+
} else if (hints === "stats") {
|
|
130
|
+
compilation.hints.push(warning);
|
|
131
|
+
} else {
|
|
132
|
+
compilation.warnings.push(warning);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
module.exports = LegacyJavascriptPlugin;
|
|
@@ -0,0 +1,138 @@
|
|
|
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 NormalModule = require("../NormalModule");
|
|
9
|
+
const MissingSideEffectsWarning = require("../errors/MissingSideEffectsWarning");
|
|
10
|
+
const { compareStrings } = require("../util/comparators");
|
|
11
|
+
const getModuleSize = require("./getModuleSize");
|
|
12
|
+
const hasOnlyUnusedExports = require("./hasOnlyUnusedExports");
|
|
13
|
+
|
|
14
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
15
|
+
/** @import Compiler from "../Compiler" */
|
|
16
|
+
/** @import Module from "../Module" */
|
|
17
|
+
/**
|
|
18
|
+
* @import {
|
|
19
|
+
* MissingSideEffectsDetails
|
|
20
|
+
* } from "../errors/MissingSideEffectsWarning"
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
const PLUGIN_NAME = "MissingSideEffectsPlugin";
|
|
24
|
+
|
|
25
|
+
// Enough to name the costliest without listing the whole dependency tree.
|
|
26
|
+
const MAX_REPORTED_PACKAGES = 5;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The package a module belongs to, when its package.json leaves 'sideEffects'
|
|
30
|
+
* unsaid. Nearly every package does, so only the costly ones are worth naming.
|
|
31
|
+
* @param {Module} module the module to look up
|
|
32
|
+
* @returns {string | undefined} the package name, or undefined
|
|
33
|
+
*/
|
|
34
|
+
const getUndeclaredPackage = (module) => {
|
|
35
|
+
if (!(module instanceof NormalModule)) return undefined;
|
|
36
|
+
|
|
37
|
+
const resolveData = module.resourceResolveData;
|
|
38
|
+
const description = resolveData && resolveData.descriptionFileData;
|
|
39
|
+
|
|
40
|
+
if (!description || typeof description.name !== "string") return undefined;
|
|
41
|
+
if ("sideEffects" in description) return undefined;
|
|
42
|
+
|
|
43
|
+
return description.name;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
class MissingSideEffectsPlugin {
|
|
47
|
+
/**
|
|
48
|
+
* Creates an instance of MissingSideEffectsPlugin.
|
|
49
|
+
* @param {PerformanceOptions} options the plugin options
|
|
50
|
+
*/
|
|
51
|
+
constructor(options) {
|
|
52
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
53
|
+
this.hints = options.hints;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
58
|
+
* @param {Compiler} compiler the compiler instance
|
|
59
|
+
* @returns {void}
|
|
60
|
+
*/
|
|
61
|
+
apply(compiler) {
|
|
62
|
+
const hints = this.hints;
|
|
63
|
+
|
|
64
|
+
if (!hints) return;
|
|
65
|
+
|
|
66
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
67
|
+
/** @type {MissingSideEffectsWarning | undefined} */
|
|
68
|
+
let warning;
|
|
69
|
+
|
|
70
|
+
// Usage is final here, and concatenation has not merged the modules
|
|
71
|
+
// away yet, so each one can still be measured and attributed.
|
|
72
|
+
compilation.hooks.optimizeModules.tap(PLUGIN_NAME, (modules) => {
|
|
73
|
+
const { chunkGraph, moduleGraph } = compilation;
|
|
74
|
+
/** @type {Map<string, { modules: number, size: number }>} */
|
|
75
|
+
const byPackage = new Map();
|
|
76
|
+
let wasted = 0;
|
|
77
|
+
|
|
78
|
+
for (const module of modules) {
|
|
79
|
+
// One webpack already left out costs nothing.
|
|
80
|
+
if (chunkGraph.getNumberOfModuleChunks(module) === 0) continue;
|
|
81
|
+
if (!hasOnlyUnusedExports(module, moduleGraph, chunkGraph)) continue;
|
|
82
|
+
|
|
83
|
+
const name = getUndeclaredPackage(module);
|
|
84
|
+
|
|
85
|
+
if (name === undefined) continue;
|
|
86
|
+
|
|
87
|
+
const size = getModuleSize(module);
|
|
88
|
+
const entry = byPackage.get(name);
|
|
89
|
+
|
|
90
|
+
wasted += size;
|
|
91
|
+
|
|
92
|
+
if (entry === undefined) {
|
|
93
|
+
byPackage.set(name, { modules: 1, size });
|
|
94
|
+
} else {
|
|
95
|
+
entry.modules++;
|
|
96
|
+
entry.size += size;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (byPackage.size === 0) return;
|
|
101
|
+
|
|
102
|
+
/** @type {MissingSideEffectsDetails[]} */
|
|
103
|
+
const packages = [];
|
|
104
|
+
|
|
105
|
+
for (const [name, { modules: count, size }] of byPackage) {
|
|
106
|
+
packages.push({ name, modules: count, size });
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Ties break by name: module order is not stable across runtimes.
|
|
110
|
+
packages.sort(
|
|
111
|
+
(a, b) => b.size - a.size || compareStrings(a.name, b.name)
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
warning = new MissingSideEffectsWarning(
|
|
115
|
+
packages.slice(0, MAX_REPORTED_PACKAGES),
|
|
116
|
+
packages.length,
|
|
117
|
+
wasted
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Reported past the hash: `createHash` folds every message into it, so
|
|
122
|
+
// a hint pushed earlier would change the build's identity.
|
|
123
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
124
|
+
if (warning === undefined) return;
|
|
125
|
+
|
|
126
|
+
if (hints === "error") {
|
|
127
|
+
compilation.errors.push(warning);
|
|
128
|
+
} else if (hints === "stats") {
|
|
129
|
+
compilation.hints.push(warning);
|
|
130
|
+
} else {
|
|
131
|
+
compilation.warnings.push(warning);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
module.exports = MissingSideEffectsPlugin;
|
|
@@ -0,0 +1,136 @@
|
|
|
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 MixedExportsWarning = require("../errors/MixedExportsWarning");
|
|
9
|
+
const { compareStrings } = require("../util/comparators");
|
|
10
|
+
|
|
11
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
12
|
+
/** @import Compiler from "../Compiler" */
|
|
13
|
+
/** @import { MixedExportsDetails } from "../errors/MixedExportsWarning" */
|
|
14
|
+
|
|
15
|
+
const PLUGIN_NAME = "MixedExportsPlugin";
|
|
16
|
+
|
|
17
|
+
// Enough to name the offenders without listing every entry.
|
|
18
|
+
const MAX_REPORTED_ENTRIES = 5;
|
|
19
|
+
|
|
20
|
+
// Only these hand the namespace object straight to `require()`, so only here
|
|
21
|
+
// does a default sitting beside named exports change what a consumer receives.
|
|
22
|
+
const AMBIGUOUS_LIBRARY_TYPES = new Set([
|
|
23
|
+
"commonjs",
|
|
24
|
+
"commonjs2",
|
|
25
|
+
"commonjs-module",
|
|
26
|
+
"commonjs-static"
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
class MixedExportsPlugin {
|
|
30
|
+
/**
|
|
31
|
+
* Creates an instance of MixedExportsPlugin.
|
|
32
|
+
* @param {PerformanceOptions} options the plugin options
|
|
33
|
+
*/
|
|
34
|
+
constructor(options) {
|
|
35
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
36
|
+
this.hints = options.hints;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
41
|
+
* @param {Compiler} compiler the compiler instance
|
|
42
|
+
* @returns {void}
|
|
43
|
+
*/
|
|
44
|
+
apply(compiler) {
|
|
45
|
+
const hints = this.hints;
|
|
46
|
+
|
|
47
|
+
if (!hints) return;
|
|
48
|
+
|
|
49
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
50
|
+
// `afterSeal` is past the hash, which folds every message into it — a
|
|
51
|
+
// hint reported earlier would change the build's identity.
|
|
52
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
53
|
+
const { moduleGraph, outputOptions } = compilation;
|
|
54
|
+
|
|
55
|
+
/** @type {Map<string, MixedExportsDetails[]>} */
|
|
56
|
+
const byType = new Map();
|
|
57
|
+
|
|
58
|
+
for (const [name, entry] of compilation.entries) {
|
|
59
|
+
// An entry can carry its own library, which wins over the output one.
|
|
60
|
+
const library = entry.options.library || outputOptions.library;
|
|
61
|
+
const type = library && library.type;
|
|
62
|
+
|
|
63
|
+
if (!type || !AMBIGUOUS_LIBRARY_TYPES.has(type)) continue;
|
|
64
|
+
|
|
65
|
+
// Naming one export already resolves it, whichever it is.
|
|
66
|
+
if (library.export) continue;
|
|
67
|
+
|
|
68
|
+
// Only the last module of an entry reaches the consumer: every chunk
|
|
69
|
+
// format renders the startup with `entries[entries.length - 1]`.
|
|
70
|
+
const { dependencies } = entry;
|
|
71
|
+
const exported = dependencies[dependencies.length - 1];
|
|
72
|
+
|
|
73
|
+
if (!exported) continue;
|
|
74
|
+
|
|
75
|
+
const module = moduleGraph.getModule(exported);
|
|
76
|
+
|
|
77
|
+
if (!module) continue;
|
|
78
|
+
|
|
79
|
+
const provided = moduleGraph
|
|
80
|
+
.getExportsInfo(module)
|
|
81
|
+
.getProvidedExports();
|
|
82
|
+
|
|
83
|
+
// `true` means "everything", which says nothing about a default.
|
|
84
|
+
if (!Array.isArray(provided)) continue;
|
|
85
|
+
|
|
86
|
+
/** @type {string[]} */
|
|
87
|
+
const named = [];
|
|
88
|
+
let hasDefault = false;
|
|
89
|
+
|
|
90
|
+
for (const it of provided) {
|
|
91
|
+
if (it === "default") {
|
|
92
|
+
hasDefault = true;
|
|
93
|
+
} else {
|
|
94
|
+
named.push(it);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!hasDefault || named.length === 0) continue;
|
|
99
|
+
|
|
100
|
+
const mixed = byType.get(type);
|
|
101
|
+
const details = { name, named: named.sort(compareStrings) };
|
|
102
|
+
|
|
103
|
+
if (mixed) {
|
|
104
|
+
mixed.push(details);
|
|
105
|
+
} else {
|
|
106
|
+
byType.set(type, [details]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (byType.size === 0) return;
|
|
111
|
+
|
|
112
|
+
// One report per library type, sorted so a rename cannot reorder them.
|
|
113
|
+
for (const type of [...byType.keys()].sort(compareStrings)) {
|
|
114
|
+
const mixed = /** @type {MixedExportsDetails[]} */ (byType.get(type));
|
|
115
|
+
|
|
116
|
+
mixed.sort((a, b) => compareStrings(a.name, b.name));
|
|
117
|
+
|
|
118
|
+
const warning = new MixedExportsWarning(
|
|
119
|
+
mixed.slice(0, MAX_REPORTED_ENTRIES),
|
|
120
|
+
type
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
if (hints === "error") {
|
|
124
|
+
compilation.errors.push(warning);
|
|
125
|
+
} else if (hints === "stats") {
|
|
126
|
+
compilation.hints.push(warning);
|
|
127
|
+
} else {
|
|
128
|
+
compilation.warnings.push(warning);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
module.exports = MixedExportsPlugin;
|
|
@@ -0,0 +1,178 @@
|
|
|
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 OsDependentRuleWarning = require("../errors/OsDependentRuleWarning");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @import {
|
|
12
|
+
* Falsy,
|
|
13
|
+
* PerformanceOptions,
|
|
14
|
+
* RuleSetCondition,
|
|
15
|
+
* RuleSetRule
|
|
16
|
+
* } from "../../declarations/WebpackOptions"
|
|
17
|
+
*/
|
|
18
|
+
/** @import Compiler from "../Compiler" */
|
|
19
|
+
|
|
20
|
+
const PLUGIN_NAME = "OsDependentRuleWarningPlugin";
|
|
21
|
+
|
|
22
|
+
// Only these carry a path. `resourceQuery`, `resourceFragment`, `mimetype` and
|
|
23
|
+
// `scheme` legitimately contain a `/`.
|
|
24
|
+
const PATH_PROPERTIES = [
|
|
25
|
+
"test",
|
|
26
|
+
"include",
|
|
27
|
+
"exclude",
|
|
28
|
+
"resource",
|
|
29
|
+
"realResource",
|
|
30
|
+
"issuer"
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
/** @typedef {"posix" | "windows" | undefined} Separator */
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Which separator a pattern can match, walking its source so an escape is never
|
|
37
|
+
* mistaken for the separator after it (`\.` is not `\\`); both means portable.
|
|
38
|
+
* @param {RegExp} regExp the condition
|
|
39
|
+
* @returns {Separator} the only separator it matches, or `undefined` when it is portable
|
|
40
|
+
*/
|
|
41
|
+
const onlyMatchedSeparator = (regExp) => {
|
|
42
|
+
const { source } = regExp;
|
|
43
|
+
let posix = false;
|
|
44
|
+
let windows = false;
|
|
45
|
+
|
|
46
|
+
for (let i = 0; i < source.length; i++) {
|
|
47
|
+
const character = source[i];
|
|
48
|
+
|
|
49
|
+
if (character === "\\") {
|
|
50
|
+
const escaped = source[i + 1];
|
|
51
|
+
|
|
52
|
+
if (escaped === "\\") {
|
|
53
|
+
windows = true;
|
|
54
|
+
} else if (escaped === "/") {
|
|
55
|
+
posix = true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
i++;
|
|
59
|
+
} else if (character === "/") {
|
|
60
|
+
posix = true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (posix === windows) return undefined;
|
|
65
|
+
|
|
66
|
+
return posix ? "posix" : "windows";
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {RuleSetCondition} condition the condition to walk
|
|
71
|
+
* @param {(regExp: RegExp) => void} callback called for every regexp within
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
const forEachRegExp = (condition, callback) => {
|
|
75
|
+
if (condition instanceof RegExp) {
|
|
76
|
+
callback(condition);
|
|
77
|
+
} else if (Array.isArray(condition)) {
|
|
78
|
+
for (const item of condition) forEachRegExp(item, callback);
|
|
79
|
+
} else if (condition && typeof condition === "object") {
|
|
80
|
+
// `not` is skipped: negated, a separator says which paths are *excluded*,
|
|
81
|
+
// so the condition still matches the other OS.
|
|
82
|
+
for (const key of ["and", "or"]) {
|
|
83
|
+
const nested = condition[/** @type {keyof typeof condition} */ (key)];
|
|
84
|
+
|
|
85
|
+
if (nested !== undefined) {
|
|
86
|
+
forEachRegExp(/** @type {RuleSetCondition} */ (nested), callback);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
class OsDependentRuleWarningPlugin {
|
|
93
|
+
/**
|
|
94
|
+
* Creates an instance of OsDependentRuleWarningPlugin.
|
|
95
|
+
* @param {PerformanceOptions} options the plugin options
|
|
96
|
+
*/
|
|
97
|
+
constructor(options) {
|
|
98
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
99
|
+
this.hints = options.hints;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
104
|
+
* @param {Compiler} compiler the compiler instance
|
|
105
|
+
* @returns {void}
|
|
106
|
+
*/
|
|
107
|
+
apply(compiler) {
|
|
108
|
+
const hints = this.hints;
|
|
109
|
+
const rules =
|
|
110
|
+
compiler.options.module && compiler.options.module.rules
|
|
111
|
+
? compiler.options.module.rules
|
|
112
|
+
: [];
|
|
113
|
+
|
|
114
|
+
/** @type {string[]} */
|
|
115
|
+
const descriptions = [];
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @param {(RuleSetRule | Falsy)[]} ruleSet rules to walk
|
|
119
|
+
* @param {string} path where `ruleSet` sits in the configuration
|
|
120
|
+
* @returns {void}
|
|
121
|
+
*/
|
|
122
|
+
const walk = (ruleSet, path) => {
|
|
123
|
+
for (let i = 0; i < ruleSet.length; i++) {
|
|
124
|
+
const rule = ruleSet[i];
|
|
125
|
+
|
|
126
|
+
if (!rule || typeof rule !== "object") continue;
|
|
127
|
+
|
|
128
|
+
const rulePath = `${path}[${i}]`;
|
|
129
|
+
|
|
130
|
+
for (const property of PATH_PROPERTIES) {
|
|
131
|
+
const condition = rule[/** @type {keyof RuleSetRule} */ (property)];
|
|
132
|
+
|
|
133
|
+
if (condition === undefined) continue;
|
|
134
|
+
|
|
135
|
+
forEachRegExp(
|
|
136
|
+
/** @type {RuleSetCondition} */ (condition),
|
|
137
|
+
(regExp) => {
|
|
138
|
+
const separator = onlyMatchedSeparator(regExp);
|
|
139
|
+
|
|
140
|
+
if (separator === undefined) return;
|
|
141
|
+
|
|
142
|
+
descriptions.push(
|
|
143
|
+
`${rulePath}.${property} (${regExp}) only matches ${
|
|
144
|
+
separator === "posix" ? "'/'" : "'\\'"
|
|
145
|
+
} paths`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (Array.isArray(rule.oneOf)) walk(rule.oneOf, `${rulePath}.oneOf`);
|
|
152
|
+
if (Array.isArray(rule.rules)) walk(rule.rules, `${rulePath}.rules`);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
walk(/** @type {RuleSetRule[]} */ (rules), "module.rules");
|
|
157
|
+
|
|
158
|
+
if (descriptions.length === 0) return;
|
|
159
|
+
|
|
160
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
161
|
+
// Reported past the hash: `createHash` folds every message into it, so
|
|
162
|
+
// a hint pushed earlier would change the build's identity.
|
|
163
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
164
|
+
const warning = new OsDependentRuleWarning(descriptions);
|
|
165
|
+
|
|
166
|
+
if (hints === "error") {
|
|
167
|
+
compilation.errors.push(warning);
|
|
168
|
+
} else if (hints === "stats") {
|
|
169
|
+
compilation.hints.push(warning);
|
|
170
|
+
} else {
|
|
171
|
+
compilation.warnings.push(warning);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
module.exports = OsDependentRuleWarningPlugin;
|