@depup/webpack 5.109.0-depup.0 → 5.110.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 -7
- package/bin/webpack.js +12 -0
- package/changes.json +10 -10
- 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 +43 -32
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +15 -16
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +38 -7
- package/lib/Compilation.js +709 -414
- package/lib/Compiler.js +69 -42
- package/lib/ConcatenationScope.js +117 -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 +168 -57
- 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 +50 -13
- 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 +123 -19
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +242 -84
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +116 -42
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +63 -57
- 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 +28 -36
- 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 +22 -6
- 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 +221 -156
- package/lib/NormalModuleFactory.js +563 -112
- 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 +346 -256
- package/lib/RuntimeTemplate.js +2792 -352
- 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 +55 -25
- 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 +2 -2
- 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 +289 -28
- 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 +282 -81
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +36 -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 +53 -66
- package/lib/container/ModuleFederationPlugin.js +7 -18
- 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 +178 -44
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +82 -36
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +197 -106
- package/lib/css/CssParser.js +1248 -618
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5324 -0
- package/lib/css/syntax.js +10396 -952
- 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 +140 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
- 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 +156 -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 +4 -4
- 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 +15 -11
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
- 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 +28 -20
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +21 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +37 -29
- 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 +2 -2
- package/lib/dependencies/ImportDependency.js +24 -20
- 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 +49 -35
- 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 +51 -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 +46 -28
- package/lib/dependencies/WorkerDependency.js +28 -22
- package/lib/dependencies/WorkletDependency.js +15 -14
- package/lib/dependencies/getFunctionExpression.js +8 -4
- 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/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/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 +89 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
- 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 +28 -10
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +299 -79
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +312 -174
- 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 +7819 -3331
- 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 +31 -18
- 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 +181 -162
- package/lib/javascript/JavascriptParser.js +291 -112
- 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 +3403 -300
- 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 +14 -1
- 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 +81 -20
- package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +21 -17
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +996 -477
- package/lib/optimize/ConstExportsPlugin.js +11 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +9 -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 +124 -59
- package/lib/optimize/RealContentHashPlugin.js +20 -13
- 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 +232 -68
- 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 +377 -136
- 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 +1 -1
- 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 +23 -6
- 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 +24 -15
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +274 -942
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +305 -66
- 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 +253 -226
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
- package/lib/stats/StatsFactory.js +56 -35
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +12 -14
- package/lib/url/URLParserPlugin.js +26 -13
- 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 +1050 -24
- package/lib/util/StringXor.js +1 -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 +5 -1
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- 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 +25 -1
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +6 -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/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 +41 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -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 +34 -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 +101 -19
- package/lib/web/FetchCompileWasmPlugin.js +46 -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 +37 -30
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +780 -91
- 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 +4013 -738
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -7,16 +7,8 @@
|
|
|
7
7
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
8
|
const RuntimeModule = require("../RuntimeModule");
|
|
9
9
|
const Template = require("../Template");
|
|
10
|
-
const CssUrlDependency = require("../dependencies/CssUrlDependency");
|
|
11
|
-
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
12
|
-
const URLDependency = require("../dependencies/URLDependency");
|
|
13
|
-
const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
|
|
14
10
|
|
|
15
|
-
/** @
|
|
16
|
-
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
17
|
-
/** @typedef {import("../Compilation")} Compilation */
|
|
18
|
-
/** @typedef {import("../Module")} Module */
|
|
19
|
-
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
11
|
+
/** @import Compilation from "../Compilation" */
|
|
20
12
|
|
|
21
13
|
/**
|
|
22
14
|
* Fires `<link rel="prefetch">` / `<link rel="preload">` for every asset
|
|
@@ -25,10 +17,17 @@ const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
|
|
|
25
17
|
* user module evaluates, so by the time user code reaches the
|
|
26
18
|
* corresponding `new URL(...)` (or hands the URL to `<img>`, `fetch`,
|
|
27
19
|
* `new Worker`, etc.), the browser already has the response in flight.
|
|
20
|
+
*
|
|
21
|
+
* The calls themselves are rendered by `ResourceHintPlugin`, while runtime
|
|
22
|
+
* requirements are still open — see `collectStartupAssetHintLines`.
|
|
28
23
|
*/
|
|
29
24
|
class StartupAssetHintRuntimeModule extends RuntimeModule {
|
|
30
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @param {string[]} lines the `<link>` calls this chunk fires at startup
|
|
27
|
+
*/
|
|
28
|
+
constructor(lines) {
|
|
31
29
|
super("startup asset hints", RuntimeModule.STAGE_TRIGGER);
|
|
30
|
+
this._lines = lines;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
/**
|
|
@@ -37,129 +36,7 @@ class StartupAssetHintRuntimeModule extends RuntimeModule {
|
|
|
37
36
|
*/
|
|
38
37
|
generate() {
|
|
39
38
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
40
|
-
const
|
|
41
|
-
const moduleGraph = /** @type {ModuleGraph} */ (compilation.moduleGraph);
|
|
42
|
-
const runtimeTemplate = compilation.runtimeTemplate;
|
|
43
|
-
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
44
|
-
const runtimeRequirements =
|
|
45
|
-
/** @type {Set<string>} */
|
|
46
|
-
(chunkGraph.getTreeRuntimeRequirements(chunk));
|
|
47
|
-
|
|
48
|
-
// Dedupe per asset module: if the same asset is referenced twice
|
|
49
|
-
// (e.g. CSS rule says `prefetch`, a JS magic comment says
|
|
50
|
-
// `preload`), pick `preload` over `prefetch` and keep the most
|
|
51
|
-
// recently seen explicit attribute overrides. Avoids emitting a
|
|
52
|
-
// duplicate `<link>` and ordering-dependent winners.
|
|
53
|
-
/**
|
|
54
|
-
* @typedef {object} AssetHintEntry
|
|
55
|
-
* @property {import("../Module")} assetModule
|
|
56
|
-
* @property {string} request
|
|
57
|
-
* @property {boolean} preload
|
|
58
|
-
* @property {("low" | "high" | "auto" | undefined)} fetchPriority
|
|
59
|
-
* @property {(string | undefined)} as
|
|
60
|
-
* @property {(string | undefined)} type
|
|
61
|
-
* @property {(string | undefined)} media
|
|
62
|
-
*/
|
|
63
|
-
// Per-asset dedupe vs the HTML-head emission by `HtmlEntryDependency`:
|
|
64
|
-
// if the asset is reachable from an HTML entrypoint's chunks, its
|
|
65
|
-
// `<link>` lands in that HTML `<head>` already — skip the runtime
|
|
66
|
-
// hint for that asset so the DOM doesn't carry two tags for one URL.
|
|
67
|
-
// Set is computed once per compilation from the module graph (stable
|
|
68
|
-
// across cache reads), never from a mutable cross-module marker.
|
|
69
|
-
const ResourceHintPlugin = require("./ResourceHintPlugin");
|
|
70
|
-
|
|
71
|
-
// `output.resourceHints: "none"` is a hard off switch — the plugin's
|
|
72
|
-
// runtime-requirements hook already skips adding this module then, so no
|
|
73
|
-
// `"none"` guard is needed here.
|
|
74
|
-
const { isHtmlHinted } =
|
|
75
|
-
ResourceHintPlugin.getCompilationResolver(compilation);
|
|
76
|
-
|
|
77
|
-
/** @type {Map<string, AssetHintEntry>} */
|
|
78
|
-
const perAsset = new Map();
|
|
79
|
-
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
80
|
-
const deps =
|
|
81
|
-
/** @type {{ dependencies?: import("../Dependency")[] }} */
|
|
82
|
-
(module).dependencies;
|
|
83
|
-
if (!deps) continue;
|
|
84
|
-
for (const dep of deps) {
|
|
85
|
-
if (
|
|
86
|
-
!(dep instanceof URLDependency) &&
|
|
87
|
-
!(dep instanceof CssUrlDependency) &&
|
|
88
|
-
!(dep instanceof HtmlSourceDependency)
|
|
89
|
-
) {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (!dep.prefetch && !dep.preload) continue;
|
|
93
|
-
const assetModule = moduleGraph.getModule(dep);
|
|
94
|
-
if (!assetModule) continue;
|
|
95
|
-
if (isHtmlHinted(assetModule)) continue;
|
|
96
|
-
const key = assetModule.identifier();
|
|
97
|
-
const urlDep =
|
|
98
|
-
/** @type {URLDependency & Partial<CssUrlDependency> & Partial<HtmlSourceDependency>} */
|
|
99
|
-
(dep);
|
|
100
|
-
const existing = perAsset.get(key);
|
|
101
|
-
if (existing) {
|
|
102
|
-
if (dep.preload) existing.preload = true;
|
|
103
|
-
if (dep.fetchPriority) existing.fetchPriority = dep.fetchPriority;
|
|
104
|
-
if (urlDep.asAttribute) existing.as = urlDep.asAttribute;
|
|
105
|
-
if (urlDep.typeAttribute) existing.type = urlDep.typeAttribute;
|
|
106
|
-
if (urlDep.mediaAttribute) existing.media = urlDep.mediaAttribute;
|
|
107
|
-
} else {
|
|
108
|
-
perAsset.set(key, {
|
|
109
|
-
assetModule: /** @type {Module} */ (assetModule),
|
|
110
|
-
request: dep.request,
|
|
111
|
-
preload: Boolean(dep.preload),
|
|
112
|
-
fetchPriority: dep.fetchPriority,
|
|
113
|
-
as: urlDep.asAttribute,
|
|
114
|
-
type: urlDep.typeAttribute,
|
|
115
|
-
media: urlDep.mediaAttribute
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
const lines = [];
|
|
121
|
-
for (const entry of perAsset.values()) {
|
|
122
|
-
const fn = entry.preload
|
|
123
|
-
? RuntimeGlobals.preloadAsset
|
|
124
|
-
: RuntimeGlobals.prefetchAsset;
|
|
125
|
-
// For CSS-only assets (referenced from `url(...)` but never
|
|
126
|
-
// from JS) the module produces no JS source, so
|
|
127
|
-
// `__webpack_require__(id)` would throw at runtime. Use the
|
|
128
|
-
// emitted filename + publicPath directly in that case; asset
|
|
129
|
-
// modules referenced from JS stay on the existing `moduleRaw`
|
|
130
|
-
// path which yields the same URL.
|
|
131
|
-
const hasJsSourceType = entry.assetModule
|
|
132
|
-
.getSourceTypes()
|
|
133
|
-
.has("javascript");
|
|
134
|
-
let hrefExpr;
|
|
135
|
-
if (hasJsSourceType) {
|
|
136
|
-
hrefExpr = runtimeTemplate.moduleRaw({
|
|
137
|
-
chunkGraph,
|
|
138
|
-
module: entry.assetModule,
|
|
139
|
-
request: entry.request,
|
|
140
|
-
runtimeRequirements,
|
|
141
|
-
weak: false
|
|
142
|
-
});
|
|
143
|
-
} else {
|
|
144
|
-
const buildInfo =
|
|
145
|
-
/** @type {{ filename?: string }} */
|
|
146
|
-
(entry.assetModule.buildInfo);
|
|
147
|
-
if (!buildInfo || !buildInfo.filename) continue;
|
|
148
|
-
runtimeRequirements.add(RuntimeGlobals.publicPath);
|
|
149
|
-
hrefExpr = `${RuntimeGlobals.publicPath} + ${JSON.stringify(buildInfo.filename)}`;
|
|
150
|
-
}
|
|
151
|
-
const as =
|
|
152
|
-
entry.as || ResourceHintRuntimeModule.guessAsAttribute(entry.request);
|
|
153
|
-
lines.push(
|
|
154
|
-
`${fn}(${hrefExpr}, ${JSON.stringify(as)}, ${
|
|
155
|
-
entry.type ? JSON.stringify(entry.type) : "undefined"
|
|
156
|
-
}, ${entry.media ? JSON.stringify(entry.media) : "undefined"}, ${
|
|
157
|
-
entry.fetchPriority
|
|
158
|
-
? JSON.stringify(entry.fetchPriority)
|
|
159
|
-
: "undefined"
|
|
160
|
-
});`
|
|
161
|
-
);
|
|
162
|
-
}
|
|
39
|
+
const lines = this._lines;
|
|
163
40
|
if (lines.length === 0) return null;
|
|
164
41
|
// `__webpack_nonce__` set inside the entry module is too late — the
|
|
165
42
|
// entry hasn't run yet. Read the nonce off the `<script>` tag that
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const memoize = require("../util/memoize");
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const getUnsupportedFeatureWarning = memoize(() =>
|
|
10
|
+
require("../errors/UnsupportedFeatureWarning")
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
/** @import { DependencyLocation } from "../Dependency" */
|
|
14
|
+
/** @import NormalModule from "../NormalModule" */
|
|
11
15
|
|
|
12
16
|
/**
|
|
13
17
|
* @typedef {object} ResourceHintOptions
|
|
@@ -38,7 +42,7 @@ const parseResourceHintOptions = (importOptions, module, loc) => {
|
|
|
38
42
|
* @returns {void}
|
|
39
43
|
*/
|
|
40
44
|
const warn = (message) => {
|
|
41
|
-
module.addWarning(new
|
|
45
|
+
module.addWarning(new (getUnsupportedFeatureWarning())(message, loc));
|
|
42
46
|
};
|
|
43
47
|
|
|
44
48
|
if (importOptions.webpackPrefetch !== undefined) {
|
|
@@ -100,4 +104,27 @@ const parseResourceHintOptions = (importOptions, module, loc) => {
|
|
|
100
104
|
return hints;
|
|
101
105
|
};
|
|
102
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Maps a request/filename to the value of the `<link>` `as` attribute. Best
|
|
109
|
+
* effort — falls back to `"fetch"` when the type cannot be guessed. Pattern
|
|
110
|
+
* matches against the path part, ignoring any query string suffix.
|
|
111
|
+
* @param {string} request request/filename
|
|
112
|
+
* @returns {string} value for the `as` attribute
|
|
113
|
+
*/
|
|
114
|
+
const guessAsAttribute = (request) => {
|
|
115
|
+
if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)(\?.*)?$/i.test(request)) {
|
|
116
|
+
return "image";
|
|
117
|
+
}
|
|
118
|
+
if (/\.(woff2?|ttf|otf|eot)(\?.*)?$/i.test(request)) return "font";
|
|
119
|
+
if (/\.css(\?.*)?$/i.test(request)) return "style";
|
|
120
|
+
if (/\.[cm]?jsx?(\?.*)?$/i.test(request)) return "script";
|
|
121
|
+
if (/\.[cm]?tsx?(\?.*)?$/i.test(request)) return "script";
|
|
122
|
+
if (/\.(mp3|wav|flac|aac|m4a|ogg|oga)(\?.*)?$/i.test(request)) return "audio";
|
|
123
|
+
if (/\.(mp4|webm|mkv|mov|m4v|ogv|avi)(\?.*)?$/i.test(request)) return "video";
|
|
124
|
+
if (/\.vtt(\?.*)?$/i.test(request)) return "track";
|
|
125
|
+
return "fetch";
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
parseResourceHintOptions.guessAsAttribute = guessAsAttribute;
|
|
129
|
+
|
|
103
130
|
module.exports = parseResourceHintOptions;
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/** @
|
|
9
|
-
/** @
|
|
8
|
+
/** @import { RuleSetRule } from "../../declarations/WebpackOptions" */
|
|
9
|
+
/** @import RuleSetCompiler from "./RuleSetCompiler" */
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Defines the keys of types type used by this module.
|
|
@@ -5,10 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @import {
|
|
10
|
+
* RuleSetConditionOrConditions,
|
|
11
|
+
* RuleSetConditionOrConditionsAbsolute,
|
|
12
|
+
* RuleSetRule
|
|
13
|
+
* } from "../../declarations/WebpackOptions"
|
|
14
|
+
*/
|
|
15
|
+
/** @import RuleSetCompiler from "./RuleSetCompiler" */
|
|
12
16
|
|
|
13
17
|
/**
|
|
14
18
|
* Defines the keys of types type used by this module.
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
/**
|
|
9
|
+
* @import {
|
|
10
|
+
* RuleSetGlob,
|
|
11
|
+
* RuleSetGlobs,
|
|
12
|
+
* RuleSetRule
|
|
13
|
+
* } from "../../declarations/WebpackOptions"
|
|
14
|
+
*/
|
|
15
|
+
/** @import RuleSetCompiler from "./RuleSetCompiler" */
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Defines the keys of types type used by this module.
|
|
19
|
+
* @template T
|
|
20
|
+
* @template {T[keyof T]} V
|
|
21
|
+
* @typedef {import("./RuleSetCompiler").KeysOfTypes<T, V>} KeysOfTypes
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** @typedef {KeysOfTypes<RuleSetRule, RuleSetGlob | RuleSetGlobs>} GlobMatcherRuleKeys */
|
|
25
|
+
|
|
26
|
+
const PLUGIN_NAME = "GlobMatcherRulePlugin";
|
|
27
|
+
|
|
28
|
+
class GlobMatcherRulePlugin {
|
|
29
|
+
/**
|
|
30
|
+
* Creates an instance of GlobMatcherRulePlugin.
|
|
31
|
+
* @param {GlobMatcherRuleKeys} ruleProperty the rule property
|
|
32
|
+
* @param {string=} dataProperty the data property
|
|
33
|
+
*/
|
|
34
|
+
constructor(ruleProperty, dataProperty) {
|
|
35
|
+
/** @type {GlobMatcherRuleKeys} */
|
|
36
|
+
this.ruleProperty = ruleProperty;
|
|
37
|
+
/** @type {string | GlobMatcherRuleKeys} */
|
|
38
|
+
this.dataProperty = dataProperty || ruleProperty;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
43
|
+
* @param {RuleSetCompiler} ruleSetCompiler the rule set compiler
|
|
44
|
+
* @returns {void}
|
|
45
|
+
*/
|
|
46
|
+
apply(ruleSetCompiler) {
|
|
47
|
+
ruleSetCompiler.hooks.rule.tap(
|
|
48
|
+
PLUGIN_NAME,
|
|
49
|
+
(path, rule, unhandledProperties, result) => {
|
|
50
|
+
if (unhandledProperties.has(this.ruleProperty)) {
|
|
51
|
+
unhandledProperties.delete(this.ruleProperty);
|
|
52
|
+
const condition = ruleSetCompiler.compileGlobCondition(
|
|
53
|
+
`${path}.${this.ruleProperty}`,
|
|
54
|
+
/** @type {RuleSetGlob | RuleSetGlobs} */
|
|
55
|
+
(rule[this.ruleProperty])
|
|
56
|
+
);
|
|
57
|
+
result.conditions.push({
|
|
58
|
+
property: this.dataProperty,
|
|
59
|
+
matchWhenEmpty: condition.matchWhenEmpty,
|
|
60
|
+
fn: condition.fn
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = GlobMatcherRulePlugin;
|
|
@@ -5,11 +5,18 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @import {
|
|
10
|
+
* RuleSetConditionOrConditions,
|
|
11
|
+
* RuleSetRule
|
|
12
|
+
* } from "../../declarations/WebpackOptions"
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @import RuleSetCompiler, {
|
|
16
|
+
* EffectData,
|
|
17
|
+
* RuleConditionFunction
|
|
18
|
+
* } from "./RuleSetCompiler"
|
|
19
|
+
*/
|
|
13
20
|
|
|
14
21
|
/**
|
|
15
22
|
* Defines the keys of types type used by this module.
|
|
@@ -6,13 +6,18 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const { SyncHook } = require("tapable");
|
|
9
|
+
const { createPathGlobMatcher } = require("../util/globUtils");
|
|
9
10
|
|
|
10
|
-
/** @
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
/** @import { ResolveRequest } from "enhanced-resolve" */
|
|
12
|
+
/**
|
|
13
|
+
* @import {
|
|
14
|
+
* Falsy,
|
|
15
|
+
* RuleSetUseItem,
|
|
16
|
+
* RuleSetLoaderOptions,
|
|
17
|
+
* RuleSetRule,
|
|
18
|
+
* RuleSetConditionAbsolute
|
|
19
|
+
* } from "../../declarations/WebpackOptions"
|
|
20
|
+
*/
|
|
16
21
|
|
|
17
22
|
/** @typedef {(Falsy | RuleSetRule)[]} RuleSetRules */
|
|
18
23
|
|
|
@@ -48,6 +53,7 @@ const { SyncHook } = require("tapable");
|
|
|
48
53
|
* @property {string=} mimetype
|
|
49
54
|
* @property {string} dependency
|
|
50
55
|
* @property {ResolveRequest["descriptionFileData"]=} descriptionData
|
|
56
|
+
* @property {ResolveRequest["relativePath"]=} descriptionRelativePath
|
|
51
57
|
* @property {string=} compiler
|
|
52
58
|
* @property {string} issuer
|
|
53
59
|
* @property {string} issuerLayer
|
|
@@ -57,6 +63,9 @@ const { SyncHook } = require("tapable");
|
|
|
57
63
|
/**
|
|
58
64
|
* Defines the compiled rule type used by this module.
|
|
59
65
|
* @typedef {object} CompiledRule
|
|
66
|
+
* @property {string} path
|
|
67
|
+
* @property {RuleSetRule} raw
|
|
68
|
+
* @property {boolean} used
|
|
60
69
|
* @property {RuleCondition[]} conditions
|
|
61
70
|
* @property {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
|
|
62
71
|
* @property {CompiledRule[]=} rules
|
|
@@ -88,6 +97,7 @@ const { SyncHook } = require("tapable");
|
|
|
88
97
|
* @typedef {object} RuleSet
|
|
89
98
|
* @property {References} references map of references in the rule set (may grow over time)
|
|
90
99
|
* @property {(effectData: EffectData) => Effect[]} exec execute the rule set
|
|
100
|
+
* @property {() => CompiledRule[]} unusedRules the rules that never matched, outermost first
|
|
91
101
|
*/
|
|
92
102
|
|
|
93
103
|
/**
|
|
@@ -99,11 +109,34 @@ const { SyncHook } = require("tapable");
|
|
|
99
109
|
|
|
100
110
|
/** @typedef {Set<string>} UnhandledProperties */
|
|
101
111
|
|
|
112
|
+
/** @typedef {(str: string) => boolean} GlobMatcher */
|
|
102
113
|
/** @typedef {(data: EffectData) => (RuleSetUseItem | (Falsy | RuleSetUseItem)[])} RuleSetUseFn */
|
|
103
114
|
/** @typedef {(value: string) => boolean} RuleSetConditionFn */
|
|
104
115
|
|
|
105
116
|
/** @typedef {{ apply: (ruleSetCompiler: RuleSetCompiler) => void }} RuleSetPlugin */
|
|
106
117
|
|
|
118
|
+
/**
|
|
119
|
+
* @param {GlobMatcher[]} positive patterns that select
|
|
120
|
+
* @param {GlobMatcher[]} negative patterns that subtract
|
|
121
|
+
* @returns {GlobMatcher} matcher
|
|
122
|
+
*/
|
|
123
|
+
const combineGlobMatchers = (positive, negative) => {
|
|
124
|
+
/** @type {GlobMatcher} */
|
|
125
|
+
const matchPositive =
|
|
126
|
+
positive.length === 0
|
|
127
|
+
? () => true
|
|
128
|
+
: positive.length === 1
|
|
129
|
+
? positive[0]
|
|
130
|
+
: (str) => positive.some((match) => match(str));
|
|
131
|
+
if (negative.length === 0) return matchPositive;
|
|
132
|
+
/** @type {GlobMatcher} */
|
|
133
|
+
const matchNegative =
|
|
134
|
+
negative.length === 1
|
|
135
|
+
? negative[0]
|
|
136
|
+
: (str) => negative.some((match) => match(str));
|
|
137
|
+
return (str) => matchPositive(str) && !matchNegative(str);
|
|
138
|
+
};
|
|
139
|
+
|
|
107
140
|
class RuleSetCompiler {
|
|
108
141
|
/**
|
|
109
142
|
* Creates an instance of RuleSetCompiler.
|
|
@@ -177,6 +210,7 @@ class RuleSetCompiler {
|
|
|
177
210
|
return false;
|
|
178
211
|
}
|
|
179
212
|
}
|
|
213
|
+
rule.used = true;
|
|
180
214
|
for (const effect of rule.effects) {
|
|
181
215
|
if (typeof effect === "function") {
|
|
182
216
|
const returnedEffects = effect(data);
|
|
@@ -211,6 +245,12 @@ class RuleSetCompiler {
|
|
|
211
245
|
execRule(data, rule, effects);
|
|
212
246
|
}
|
|
213
247
|
return effects;
|
|
248
|
+
},
|
|
249
|
+
unusedRules: () => {
|
|
250
|
+
/** @type {CompiledRule[]} */
|
|
251
|
+
const unused = [];
|
|
252
|
+
collectUnusedRules(rules, unused);
|
|
253
|
+
return unused;
|
|
214
254
|
}
|
|
215
255
|
};
|
|
216
256
|
}
|
|
@@ -251,6 +291,9 @@ class RuleSetCompiler {
|
|
|
251
291
|
|
|
252
292
|
/** @type {CompiledRule} */
|
|
253
293
|
const compiledRule = {
|
|
294
|
+
path,
|
|
295
|
+
raw: rule,
|
|
296
|
+
used: false,
|
|
254
297
|
conditions: [],
|
|
255
298
|
effects: [],
|
|
256
299
|
rules: undefined,
|
|
@@ -382,6 +425,11 @@ class RuleSetCompiler {
|
|
|
382
425
|
}
|
|
383
426
|
}
|
|
384
427
|
break;
|
|
428
|
+
case "glob":
|
|
429
|
+
if (value) {
|
|
430
|
+
conditions.push(this.compileGlobCondition(`${path}.glob`, value));
|
|
431
|
+
}
|
|
432
|
+
break;
|
|
385
433
|
case "not":
|
|
386
434
|
if (value) {
|
|
387
435
|
const matcher = this.compileCondition(`${path}.not`, value);
|
|
@@ -410,6 +458,49 @@ class RuleSetCompiler {
|
|
|
410
458
|
return this.combineConditionsAnd(conditions);
|
|
411
459
|
}
|
|
412
460
|
|
|
461
|
+
/**
|
|
462
|
+
* Returns a compiled glob condition. Unlike a regexp it matches the same way
|
|
463
|
+
* on every OS: `\` is a path separator in both the pattern and the tested
|
|
464
|
+
* value, and a relative pattern matches at any depth. Patterns are OR-ed,
|
|
465
|
+
* a `!` prefix subtracts, and a list of only `!` patterns subtracts from
|
|
466
|
+
* everything.
|
|
467
|
+
* @param {string} path current path
|
|
468
|
+
* @param {string | string[]} glob user provided glob pattern(s)
|
|
469
|
+
* @returns {Condition} compiled condition
|
|
470
|
+
*/
|
|
471
|
+
compileGlobCondition(path, glob) {
|
|
472
|
+
const globs = Array.isArray(glob) ? glob : [glob];
|
|
473
|
+
if (globs.length === 0) {
|
|
474
|
+
throw this.error(path, glob, "Expected glob pattern, but got empty list");
|
|
475
|
+
}
|
|
476
|
+
/** @type {GlobMatcher[]} */
|
|
477
|
+
const positive = [];
|
|
478
|
+
/** @type {GlobMatcher[]} */
|
|
479
|
+
const negative = [];
|
|
480
|
+
for (let i = 0; i < globs.length; i++) {
|
|
481
|
+
const pattern = globs[i];
|
|
482
|
+
const patternPath = Array.isArray(glob) ? `${path}[${i}]` : path;
|
|
483
|
+
if (typeof pattern !== "string") {
|
|
484
|
+
throw this.error(
|
|
485
|
+
patternPath,
|
|
486
|
+
pattern,
|
|
487
|
+
`Unexpected ${typeof pattern} when glob pattern was expected`
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
const negated = pattern.startsWith("!");
|
|
491
|
+
const match = createPathGlobMatcher(negated ? pattern.slice(1) : pattern);
|
|
492
|
+
if (match === null) {
|
|
493
|
+
throw this.error(patternPath, pattern, "Invalid glob pattern");
|
|
494
|
+
}
|
|
495
|
+
(negated ? negative : positive).push(match);
|
|
496
|
+
}
|
|
497
|
+
const match = combineGlobMatchers(positive, negative);
|
|
498
|
+
return {
|
|
499
|
+
matchWhenEmpty: match(""),
|
|
500
|
+
fn: (v) => typeof v === "string" && match(v)
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
|
|
413
504
|
/**
|
|
414
505
|
* Combine conditions or.
|
|
415
506
|
* @param {Condition[]} conditions some conditions
|
|
@@ -477,7 +568,8 @@ class RuleSetCompiler {
|
|
|
477
568
|
* are ignored: they don't establish the module type (e.g. a stylelint pre-loader
|
|
478
569
|
* must not suppress the built-in css type). A `test` regexp that references the
|
|
479
570
|
* extension (e.g. `/source\.css$/`) also counts even if the sample path itself
|
|
480
|
-
* doesn't match, so a loader scoped to specific filenames is still detected
|
|
571
|
+
* doesn't match, so a loader scoped to specific filenames is still detected; a
|
|
572
|
+
* `glob` condition naming the extension counts the same way.
|
|
481
573
|
* @param {import("../../declarations/WebpackOptions").RuleSetRules | undefined} rules user `module.rules`
|
|
482
574
|
* @param {string} resource sample resource path (e.g. `"/file.css"`)
|
|
483
575
|
* @param {boolean=} inherited whether an enclosing rule already matched the resource
|
|
@@ -493,7 +585,13 @@ class RuleSetCompiler {
|
|
|
493
585
|
inherited ||
|
|
494
586
|
matchesResource(rule.test, resource, extProbe) ||
|
|
495
587
|
matchesResource(rule.resource, resource, extProbe) ||
|
|
496
|
-
matchesResource(rule.include, resource, extProbe)
|
|
588
|
+
matchesResource(rule.include, resource, extProbe) ||
|
|
589
|
+
// the rule-level `glob` selects the resource as well
|
|
590
|
+
matchesResource(
|
|
591
|
+
rule.glob === undefined ? undefined : { glob: rule.glob },
|
|
592
|
+
resource,
|
|
593
|
+
extProbe
|
|
594
|
+
);
|
|
497
595
|
const establishesType =
|
|
498
596
|
rule.type !== undefined ||
|
|
499
597
|
((rule.use !== undefined || rule.loader !== undefined) &&
|
|
@@ -543,9 +641,25 @@ const matchRuleSetCondition = (condition, resource) => {
|
|
|
543
641
|
};
|
|
544
642
|
|
|
545
643
|
/**
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
644
|
+
* @param {EXPECTED_ANY} glob glob pattern(s)
|
|
645
|
+
* @param {string} extension extension including the dot (e.g. `".css"`)
|
|
646
|
+
* @returns {boolean} whether a pattern targets the extension
|
|
647
|
+
*/
|
|
648
|
+
const globReferencesExtension = (glob, extension) => {
|
|
649
|
+
// a `!` pattern subtracts the extension instead of targeting it
|
|
650
|
+
if (typeof glob === "string") {
|
|
651
|
+
return !glob.startsWith("!") && glob.includes(extension);
|
|
652
|
+
}
|
|
653
|
+
return (
|
|
654
|
+
Array.isArray(glob) &&
|
|
655
|
+
glob.some((pattern) => globReferencesExtension(pattern, extension))
|
|
656
|
+
);
|
|
657
|
+
};
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* Whether any regexp or glob in the condition references the extension probe
|
|
661
|
+
* (e.g. `\.css`), i.e. the rule clearly targets that extension even if the
|
|
662
|
+
* generic sample path doesn't match its (possibly filename-scoped) pattern.
|
|
549
663
|
* @param {EXPECTED_ANY} condition condition
|
|
550
664
|
* @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
|
|
551
665
|
* @returns {boolean} whether a regexp in the condition targets the extension
|
|
@@ -557,6 +671,8 @@ const conditionReferencesExtension = (condition, extProbe) => {
|
|
|
557
671
|
}
|
|
558
672
|
if (condition && typeof condition === "object") {
|
|
559
673
|
return (
|
|
674
|
+
// `\.css` → `.css`
|
|
675
|
+
globReferencesExtension(condition.glob, extProbe.slice(1)) ||
|
|
560
676
|
conditionReferencesExtension(condition.and, extProbe) ||
|
|
561
677
|
conditionReferencesExtension(condition.or, extProbe)
|
|
562
678
|
);
|
|
@@ -566,7 +682,7 @@ const conditionReferencesExtension = (condition, extProbe) => {
|
|
|
566
682
|
|
|
567
683
|
/**
|
|
568
684
|
* A condition counts as targeting the resource if it matches the sample path or
|
|
569
|
-
* references the extension via a regexp.
|
|
685
|
+
* references the extension via a regexp or glob.
|
|
570
686
|
* @param {RuleSetConditionAbsolute | undefined} condition condition
|
|
571
687
|
* @param {string} resource sample resource path
|
|
572
688
|
* @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
|
|
@@ -577,4 +693,22 @@ const matchesResource = (condition, resource, extProbe) =>
|
|
|
577
693
|
(matchRuleSetCondition(condition, resource) ||
|
|
578
694
|
conditionReferencesExtension(condition, extProbe));
|
|
579
695
|
|
|
696
|
+
/**
|
|
697
|
+
* Collects the outermost rules that never matched. A rule below an unused one is
|
|
698
|
+
* unused only because of its parent, so its subtree is not descended into.
|
|
699
|
+
* @param {CompiledRule[]} rules compiled rules
|
|
700
|
+
* @param {CompiledRule[]} result where unused rules are collected
|
|
701
|
+
* @returns {void}
|
|
702
|
+
*/
|
|
703
|
+
const collectUnusedRules = (rules, result) => {
|
|
704
|
+
for (const rule of rules) {
|
|
705
|
+
if (!rule.used) {
|
|
706
|
+
result.push(rule);
|
|
707
|
+
continue;
|
|
708
|
+
}
|
|
709
|
+
if (rule.rules) collectUnusedRules(rule.rules, result);
|
|
710
|
+
if (rule.oneOf) collectUnusedRules(rule.oneOf, result);
|
|
711
|
+
}
|
|
712
|
+
};
|
|
713
|
+
|
|
580
714
|
module.exports = RuleSetCompiler;
|
|
@@ -7,17 +7,24 @@
|
|
|
7
7
|
|
|
8
8
|
const util = require("util");
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @import {
|
|
12
|
+
* Falsy,
|
|
13
|
+
* RuleSetLoader,
|
|
14
|
+
* RuleSetLoaderOptions,
|
|
15
|
+
* RuleSetRule,
|
|
16
|
+
* RuleSetUse,
|
|
17
|
+
* RuleSetUseItem,
|
|
18
|
+
* RuleSetUseFunction
|
|
19
|
+
* } from "../../declarations/WebpackOptions"
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @import RuleSetCompiler, {
|
|
23
|
+
* Effect,
|
|
24
|
+
* EffectData,
|
|
25
|
+
* EffectUseType
|
|
26
|
+
* } from "./RuleSetCompiler"
|
|
27
|
+
*/
|
|
21
28
|
|
|
22
29
|
const PLUGIN_NAME = "UseEffectRulePlugin";
|
|
23
30
|
|
|
@@ -8,13 +8,23 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
|
8
8
|
const Template = require("../Template");
|
|
9
9
|
const HelperRuntimeModule = require("./HelperRuntimeModule");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
11
|
+
/** @import Compilation from "../Compilation" */
|
|
12
12
|
|
|
13
13
|
class AsyncModuleGeneratorRuntimeModule extends HelperRuntimeModule {
|
|
14
14
|
constructor() {
|
|
15
15
|
super("async module generator");
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Returns true, if the runtime module should get it's own scope.
|
|
20
|
+
* When false, `generate()` must emit complete statements ending with `;`
|
|
21
|
+
* so a following runtime IIFE is not parsed as a call (ASI).
|
|
22
|
+
* @returns {boolean} true, if the runtime module should get it's own scope
|
|
23
|
+
*/
|
|
24
|
+
shouldIsolate() {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
18
28
|
/**
|
|
19
29
|
* Generates runtime code for this runtime module.
|
|
20
30
|
* @returns {string | null} runtime code
|