@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
|
@@ -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
|
|
@@ -8,7 +8,7 @@ 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 AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
14
14
|
/**
|
|
@@ -57,7 +57,11 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
57
57
|
`${cst} hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {`,
|
|
58
58
|
Template.indent([
|
|
59
59
|
`${cst} cache = __webpack_module_cache__[id];`,
|
|
60
|
-
"
|
|
60
|
+
"if (!cache) return true;",
|
|
61
|
+
// A cached entry no longer means finished, and a rejected
|
|
62
|
+
// one is done but its error must still reach the importer.
|
|
63
|
+
`${cst} deps = cache.exports;`,
|
|
64
|
+
"return deps[webpackDone] !== true || deps[webpackError] !== undefined;"
|
|
61
65
|
]),
|
|
62
66
|
"});",
|
|
63
67
|
"if (hasUnresolvedAsyncSubgraph) {",
|
|
@@ -7,11 +7,10 @@
|
|
|
7
7
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
8
|
const RuntimeModule = require("../RuntimeModule");
|
|
9
9
|
const Template = require("../Template");
|
|
10
|
-
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
|
|
11
|
-
const { getUndoPath } = require("../util/identifier");
|
|
12
10
|
|
|
13
|
-
/** @
|
|
14
|
-
/** @
|
|
11
|
+
/** @import Chunk from "../Chunk" */
|
|
12
|
+
/** @import ChunkGraph from "../ChunkGraph" */
|
|
13
|
+
/** @import Compilation from "../Compilation" */
|
|
15
14
|
|
|
16
15
|
class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
17
16
|
constructor() {
|
|
@@ -24,22 +23,16 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
|
24
23
|
*/
|
|
25
24
|
generate() {
|
|
26
25
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
27
|
-
|
|
26
|
+
// The virtual build-time chunk has no script url and sits at the output
|
|
27
|
+
// root, so urls resolve against the `importModule` baseUri.
|
|
28
|
+
if (/** @type {ChunkGraph} */ (this.chunkGraph).buildTimeExecution) {
|
|
29
|
+
return `${RuntimeGlobals.publicPath} = "";`;
|
|
30
|
+
}
|
|
31
|
+
const { scriptType, importMetaName, environment } =
|
|
28
32
|
compilation.outputOptions;
|
|
29
33
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
chunk,
|
|
33
|
-
compilation.outputOptions
|
|
34
|
-
),
|
|
35
|
-
{
|
|
36
|
-
chunk,
|
|
37
|
-
contentHashType: "javascript"
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
const undoPath = getUndoPath(
|
|
41
|
-
chunkName,
|
|
42
|
-
/** @type {string} */ (path),
|
|
34
|
+
const undoPath = compilation.runtimeTemplate.chunkRootOutputDir(
|
|
35
|
+
chunk,
|
|
43
36
|
false
|
|
44
37
|
);
|
|
45
38
|
|
|
@@ -79,7 +72,7 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
|
79
72
|
"if(scripts.length) {",
|
|
80
73
|
Template.indent([
|
|
81
74
|
`${lt} i = scripts.length - 1;`,
|
|
82
|
-
"while (i > -1 && (!scriptUrl || !/^
|
|
75
|
+
"while (i > -1 && (!scriptUrl || !/^https?:/.test(scriptUrl))) scriptUrl = scripts[i--].src;"
|
|
83
76
|
]),
|
|
84
77
|
"}"
|
|
85
78
|
]),
|
|
@@ -90,7 +83,9 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
|
90
83
|
"// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration",
|
|
91
84
|
'// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.',
|
|
92
85
|
'if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");',
|
|
93
|
-
|
|
86
|
+
// One pass for the `blob:` prefix and the query/fragment: both stop at the
|
|
87
|
+
// first `?` or `#`, so stripping either first leaves the same url.
|
|
88
|
+
'scriptUrl = scriptUrl.replace(/^blob:|[?#].*$/g, "").replace(/\\/[^/]+$/, "/");',
|
|
94
89
|
!undoPath
|
|
95
90
|
? `${RuntimeGlobals.publicPath} = scriptUrl;`
|
|
96
91
|
: `${RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(
|
|
@@ -7,15 +7,31 @@
|
|
|
7
7
|
|
|
8
8
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
9
9
|
const RuntimeModule = require("../RuntimeModule");
|
|
10
|
+
const { renderBaseUri } = require("./baseUri");
|
|
10
11
|
|
|
11
|
-
/**
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* @import {
|
|
14
|
+
* EntryDescriptionNormalized as EntryDescription
|
|
15
|
+
* } from "../../declarations/WebpackOptions"
|
|
16
|
+
*/
|
|
17
|
+
/** @import Chunk from "../Chunk" */
|
|
18
|
+
/** @import Compilation from "../Compilation" */
|
|
13
19
|
|
|
14
20
|
class BaseUriRuntimeModule extends RuntimeModule {
|
|
15
21
|
constructor() {
|
|
16
22
|
super("base uri", RuntimeModule.STAGE_ATTACH);
|
|
17
23
|
}
|
|
18
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Returns true, if the runtime module should get it's own scope.
|
|
27
|
+
* When false, `generate()` must emit complete statements ending with `;`
|
|
28
|
+
* so a following runtime IIFE is not parsed as a call (ASI).
|
|
29
|
+
* @returns {boolean} true, if the runtime module should get it's own scope
|
|
30
|
+
*/
|
|
31
|
+
shouldIsolate() {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
19
35
|
/**
|
|
20
36
|
* Generates runtime code for this runtime module.
|
|
21
37
|
* @returns {string | null} runtime code
|
|
@@ -25,11 +41,21 @@ class BaseUriRuntimeModule extends RuntimeModule {
|
|
|
25
41
|
const options =
|
|
26
42
|
/** @type {EntryDescription} */
|
|
27
43
|
(chunk.getEntryOptions());
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
if (options.baseUri === undefined) {
|
|
45
|
+
return `${RuntimeGlobals.baseURI} = undefined;`;
|
|
46
|
+
}
|
|
47
|
+
const { runtimeTemplate, outputOptions } =
|
|
48
|
+
/** @type {Compilation} */
|
|
49
|
+
(this.compilation);
|
|
50
|
+
// Chunk loading is off here, so no loader has named a base for a relative one to be
|
|
51
|
+
// read against. Module output carries its own url; anything else has none to offer.
|
|
52
|
+
if (!runtimeTemplate.isModule()) {
|
|
53
|
+
return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
|
|
54
|
+
}
|
|
55
|
+
return renderBaseUri(
|
|
56
|
+
options.baseUri,
|
|
57
|
+
`${outputOptions.importMetaName}.url`
|
|
58
|
+
);
|
|
33
59
|
}
|
|
34
60
|
}
|
|
35
61
|
|