@depup/webpack 5.111.1-depup.2 → 5.112.0-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 +4 -8
- package/changes.json +3 -19
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +224 -106
- package/lib/Compiler.js +19 -19
- package/lib/Dependency.js +3 -551
- package/lib/DependencyTemplate.js +3 -70
- package/lib/EntryPlugin.js +3 -68
- package/lib/Entrypoint.js +3 -121
- package/lib/ExternalsPlugin.js +3 -92
- package/lib/FileSystemInfo.js +3 -4629
- package/lib/InitFragment.js +3 -204
- package/lib/LibraryTemplatePlugin.js +3 -46
- package/lib/ModuleFilenameHelpers.js +3 -400
- package/lib/ModuleNotFoundError.js +2 -2
- package/lib/MultiCompiler.js +37 -8
- package/lib/NormalModule.js +3 -2242
- package/lib/NullFactory.js +3 -22
- package/lib/ProgressPlugin.js +3 -908
- package/lib/RawModule.js +3 -197
- package/lib/RequestShortener.js +3 -37
- package/lib/SingleEntryPlugin.js +1 -1
- package/lib/WebpackError.js +2 -2
- package/lib/asset/AssetBytesGenerator.js +8 -8
- package/lib/asset/AssetBytesParser.js +3 -3
- package/lib/asset/AssetGenerator.js +36 -22
- package/lib/asset/AssetModule.js +2 -2
- package/lib/asset/AssetModulesPlugin.js +6 -9
- package/lib/asset/AssetParser.js +3 -3
- package/lib/asset/AssetSourceGenerator.js +8 -8
- package/lib/asset/AssetSourceParser.js +3 -3
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +7 -7
- package/lib/asset/WebManifestParser.js +5 -5
- package/lib/async-modules/AsyncModuleHelpers.js +6 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
- package/lib/async-modules/isGeneratorLowered.js +3 -3
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
- package/lib/{Cache.js → cache/Cache.js} +1 -1
- package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +2 -2
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +8 -10
- package/lib/cache/ResolverCachePlugin.js +8 -4
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
- package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
- package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +5 -158
- package/lib/config/defaults.js +144 -48
- package/lib/config/getClaimedAssetTypes.js +21 -13
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +10 -0
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +13 -11
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerExposedDependency.js +1 -1
- package/lib/container/ContainerPlugin.js +178 -5
- package/lib/container/ContainerReferencePlugin.js +75 -14
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackItemDependency.js +1 -1
- package/lib/container/FallbackModule.js +12 -10
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +10 -11
- package/lib/container/ModuleFederationPlugin.js +306 -7
- package/lib/container/RemoteModule.js +14 -10
- package/lib/container/RemoteRuntimeModule.js +5 -5
- package/lib/container/RemoteToExternalDependency.js +1 -1
- package/lib/container/moduleFederationHooks.js +1 -1
- package/lib/context/ContextModule.js +36 -25
- package/lib/context/ContextModuleFactory.js +13 -10
- package/lib/context/ContextReplacementPlugin.js +3 -3
- package/lib/css/CssGenerator.js +38 -31
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +27 -29
- package/lib/css/CssModulesPlugin.js +128 -44
- package/lib/css/CssParser.js +682 -291
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6985 -5125
- package/lib/css/syntax-parser.js +19873 -0
- package/lib/css/syntax-printer.js +6037 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +52 -19
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +9 -9
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/ConstDependency.js +3 -120
- package/lib/dependencies/ContextElementDependency.js +5 -172
- package/lib/dependencies/NullDependency.js +3 -37
- package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
- package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
- package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
- package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
- package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
- package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
- package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
- package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
- package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
- package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
- package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
- package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
- package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
- package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
- package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -33
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +35 -30
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
- package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
- package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
- package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
- package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
- package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
- package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
- package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
- package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
- package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
- package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
- package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
- package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
- package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
- package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
- package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
- package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
- package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
- package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
- package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
- package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
- package/lib/dependencies/context/ContextElementDependency.js +198 -0
- package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
- package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
- package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
- package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
- package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
- package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
- package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
- package/lib/dependencies/core/ConstDependency.js +131 -0
- package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
- package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
- package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
- package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
- package/lib/dependencies/core/NullDependency.js +44 -0
- package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
- package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
- package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +369 -92
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +23 -16
- package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
- package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
- package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +23 -16
- package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
- package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
- package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
- package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
- package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +19 -17
- package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
- package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
- package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
- package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
- package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
- package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +133 -118
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +60 -36
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +99 -84
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +94 -59
- package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
- package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
- package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
- package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
- package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +51 -141
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -19
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -15
- package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
- package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
- package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
- package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
- package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
- package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
- package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
- package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
- package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +119 -98
- package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
- package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
- package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
- package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
- package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
- package/lib/{url → dependencies/url}/URLParserPlugin.js +16 -18
- package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
- package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
- package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
- package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
- package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +31 -33
- package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
- package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
- package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
- package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
- package/lib/devtool/ModuleFilenameHelpers.js +413 -0
- package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
- package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +154 -26
- package/lib/{util → devtool}/generateDebugId.js +1 -1
- package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
- package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
- package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
- package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
- package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
- package/lib/dll/DelegatedModule.js +20 -18
- package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
- package/lib/dll/DelegatedPlugin.js +1 -1
- package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
- package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
- package/lib/dll/DllEntryPlugin.js +3 -3
- package/lib/dll/DllModule.js +11 -9
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +102 -26
- package/lib/dll/LibManifestPlugin.js +9 -7
- package/lib/electron/ElectronTargetPlugin.js +2 -2
- package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
- package/lib/{dependencies → entry}/EntryDependency.js +11 -2
- package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
- package/lib/entry/EntryPlugin.js +75 -0
- package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
- package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
- package/lib/errors/DeprecatedOptionWarning.js +30 -0
- package/lib/errors/DllManifestError.js +26 -0
- package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
- package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
- package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +7 -5
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +4 -4
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
- package/lib/errors/ModuleBuildError.js +1 -1
- package/lib/errors/ModuleDependencyError.js +2 -2
- package/lib/errors/ModuleDependencyWarning.js +2 -2
- package/lib/errors/ModuleError.js +1 -1
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +3 -3
- package/lib/errors/ModuleParseError.js +1 -1
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/ModuleWarning.js +1 -1
- package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
- package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
- package/lib/errors/NodeStuffInWebError.js +7 -2
- package/lib/errors/PathVariableError.js +31 -0
- package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
- package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
- package/lib/errors/RuntimeModuleGenerationError.js +51 -0
- package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
- package/lib/errors/SystemImportDeprecationWarning.js +43 -0
- package/lib/errors/UnmergeableEntryExportsError.js +34 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
- package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
- package/lib/errors/WebpackError.js +12 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +79 -55
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
- package/lib/externals/ExternalsPlugin.js +99 -0
- package/lib/fs/FileSystemInfo.js +4642 -0
- package/lib/{util → fs}/fs.js +22 -9
- package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
- package/lib/graph/Chunk.js +985 -0
- package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +628 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +130 -82
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +30 -30
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +152 -57
- package/lib/{util → graph}/findGraphRoots.js +14 -8
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +47 -47
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +31 -21
- package/lib/html/HtmlGenerator.js +107 -43
- package/lib/html/HtmlModule.js +6 -2
- package/lib/html/HtmlModulesPlugin.js +172 -76
- package/lib/html/HtmlParser.js +503 -153
- package/lib/html/builtinEmbeddedRenderer.js +60 -13
- package/lib/html/data.js +2 -1
- package/lib/html/htmlMinify.js +111 -41
- package/lib/html/syntax-parser.js +15796 -0
- package/lib/html/syntax-printer.js +1034 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +67 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +31 -4
- package/lib/ids/IdHelpers.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
- package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
- package/lib/ids/SyncModuleIdsPlugin.js +3 -3
- package/lib/{util → ids}/numberHash.js +1 -1
- package/lib/index.js +303 -97
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +25 -25
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +4 -4
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +74 -7
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +17 -17
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
- package/lib/javascript/JavascriptModule.js +4 -3
- package/lib/javascript/JavascriptModulesPlugin.js +440 -211
- package/lib/javascript/JavascriptParser.js +220 -134
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3840 -5
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
- package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
- package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
- package/lib/javascript/data.js +533 -122
- package/lib/javascript/jsMinify.js +272 -0
- package/lib/javascript/regexp.js +67 -32
- package/lib/javascript/syntax-parser.js +18561 -0
- package/lib/javascript/syntax-printer-data.js +933 -0
- package/lib/javascript/syntax-printer.js +47106 -0
- package/lib/javascript/syntax.js +20 -11274
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +10 -10
- package/lib/json/JsonModule.js +2 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -5
- package/lib/json/jsonMinify.js +69 -0
- package/lib/library/AbstractLibraryPlugin.js +28 -15
- package/lib/library/AmdLibraryPlugin.js +4 -4
- package/lib/library/AssignLibraryPlugin.js +27 -11
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +1 -1
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +160 -166
- package/lib/library/SystemLibraryPlugin.js +6 -8
- package/lib/library/UmdLibraryPlugin.js +3 -4
- package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
- package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
- package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
- package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
- package/lib/loaders/LoaderRunner.js +31 -21
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/logging/Logger.js +7 -9
- package/lib/logging/ProgressPlugin.js +957 -0
- package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
- package/lib/{Generator.js → module/Generator.js} +16 -14
- package/lib/{Module.js → module/Module.js} +119 -51
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2348 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +3 -3
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +2 -2
- package/lib/{util → module}/findCaseMismatch.js +2 -2
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
- package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
- package/lib/node/NodeEnvironmentPlugin.js +11 -1
- package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
- package/lib/node/NodeTargetPlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +58 -6
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
- package/lib/optimize/ConcatenatedModule.js +229 -214
- package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
- package/lib/optimize/ConstExportsPlugin.js +7 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
- package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +17 -17
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +17 -17
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +11 -3
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +584 -0
- package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +16 -7
- package/lib/optimize/MangleExportsPlugin.js +5 -5
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
- package/lib/optimize/MinChunkSizePlugin.js +9 -6
- package/lib/optimize/ModuleConcatenationPlugin.js +20 -12
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +16 -7
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +18 -18
- package/lib/optimize/SplitChunksPlugin.js +713 -155
- package/lib/{util → optimize}/TupleQueue.js +9 -9
- package/lib/optimize/chunkSetIntersections.js +437 -0
- package/lib/{util → optimize}/deterministicGrouping.js +17 -17
- package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
- package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
- package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
- package/lib/output/SSRManifestPlugin.js +349 -0
- package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
- package/lib/performance/BroadContextsPlugin.js +4 -4
- package/lib/performance/CacheEffectivenessPlugin.js +2 -3
- package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
- package/lib/performance/DuplicateModulesPlugin.js +3 -4
- package/lib/performance/DuplicatePackagesPlugin.js +3 -3
- package/lib/performance/DynamicExportsPlugin.js +2 -2
- package/lib/performance/EvalUsagePlugin.js +3 -3
- package/lib/performance/HotspotsPlugin.js +11 -10
- package/lib/performance/LargeModulesPlugin.js +2 -3
- package/lib/performance/LegacyJavascriptPlugin.js +1 -2
- package/lib/performance/MissingSideEffectsPlugin.js +2 -3
- package/lib/performance/MissingSourceMapsPlugin.js +5 -6
- package/lib/performance/PureAnnotationsPlugin.js +3 -3
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +11 -12
- package/lib/performance/TopLevelThisPlugin.js +8 -7
- package/lib/performance/UnsplitVendorsPlugin.js +1 -2
- package/lib/performance/UnusedAliasesPlugin.js +6 -7
- package/lib/performance/UnusedAssetsPlugin.js +5 -5
- package/lib/performance/UnusedDefinesPlugin.js +2 -2
- package/lib/performance/UnusedExternalsPlugin.js +3 -4
- package/lib/performance/UnusedFederationPlugin.js +2 -4
- package/lib/performance/UnusedModulesPlugin.js +5 -4
- package/lib/performance/getModuleSize.js +1 -1
- package/lib/performance/hasOnlyUnusedExports.js +4 -4
- package/lib/performance/isOnlyReexported.js +7 -6
- package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
- package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
- package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +65 -44
- package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
- package/lib/prefetch/parseResourceHintOptions.js +4 -3
- package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
- package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
- package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
- package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
- package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
- package/lib/resolve/getResolveOptionsKey.js +59 -0
- package/lib/rules/RuleSetCompiler.js +27 -46
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +7 -4
- package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +4 -4
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
- package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
- package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
- package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
- package/lib/runtime/GlobalRuntimeModule.js +3 -3
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
- package/lib/runtime/HelperRuntimeModule.js +16 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/NonceRuntimeModule.js +2 -2
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
- package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
- package/lib/runtime/SystemContextRuntimeModule.js +2 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
- package/lib/runtime/WorkerRuntimeModule.js +1 -1
- package/lib/runtime/baseUri.js +1 -1
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +67 -11
- package/lib/schemes/VirtualUrlPlugin.js +50 -16
- package/lib/serialization/AggregateErrorSerializer.js +2 -2
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +47 -16
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/serialization/SingleItemMiddleware.js +4 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
- package/lib/sharing/ConsumeSharedModule.js +18 -14
- package/lib/sharing/ConsumeSharedPlugin.js +148 -42
- package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
- package/lib/sharing/ProvideForSharedDependency.js +9 -1
- package/lib/sharing/ProvideSharedDependency.js +1 -1
- package/lib/sharing/ProvideSharedModule.js +11 -9
- package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
- package/lib/sharing/ProvideSharedPlugin.js +111 -20
- package/lib/sharing/SharePlugin.js +102 -9
- package/lib/sharing/ShareRuntimeModule.js +6 -6
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/{util → sharing}/semver.js +14 -16
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +22 -19
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +14 -13
- package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
- package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
- package/lib/template/DependencyTemplate.js +77 -0
- package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
- package/lib/template/InitFragment.js +223 -0
- package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
- package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
- package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
- package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +145 -63
- package/lib/{Template.js → template/Template.js} +13 -11
- package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
- package/lib/typescript/TypeScriptPlugin.js +3 -3
- package/lib/util/RequestShortener.js +44 -0
- package/lib/util/SortableSet.js +87 -22
- package/lib/util/SourceProcessor.js +349 -44
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +10 -12
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/comparators.js +10 -10
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +94 -15
- package/lib/util/deprecation.js +1 -1
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +197 -16
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +294 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +23 -4
- package/lib/util/parseJson.js +1 -1
- package/lib/util/preloadModuleType.js +5 -2
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +1 -1
- package/lib/util/serialization.js +4 -1
- package/lib/util/source.js +2 -2
- package/lib/util/terminalColors.js +161 -0
- package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +11 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +9 -8
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +14 -15
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +6 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
- package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
- package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
- package/lib/{Watching.js → watch/Watching.js} +8 -8
- package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
- package/lib/web/FetchCompileWasmPlugin.js +6 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/lib/web/JsonpTemplatePlugin.js +1 -1
- package/lib/webpack.js +27 -17
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
- package/package.json +48 -41
- package/schemas/WebpackOptions.check.js +2 -1
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +294 -74
- package/schemas/plugins/BannerPlugin.check.js +2 -1
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
- package/schemas/plugins/HtmlParserOptions.check.js +2 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -0
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +2 -1
- package/schemas/plugins/ProgressPlugin.json +2 -7
- package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
- package/schemas/plugins/SSRManifestPlugin.json +20 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssParserOptions.check.js +1 -0
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +19355 -13873
- package/lib/LazyBarrel.js +0 -388
- package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
- package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
- package/lib/javascript/ChunkFormatHelpers.js +0 -72
- package/lib/javascript/grammar.js +0 -5546
- package/lib/javascript/parser.js +0 -1500
- package/lib/javascript/regexpData.js +0 -51
- package/lib/performance/getSourceModules.js +0 -22
- package/lib/util/Semaphore.js +0 -65
- package/lib/util/objectToMap.js +0 -15
- package/schemas/WebpackOptions.check.d.ts +0 -7
- package/schemas/_container.json +0 -155
- package/schemas/_sharing.json +0 -118
- package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
- package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
- package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
- package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
- /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
- /package/lib/{util → css}/conventions.js +0 -0
- /package/lib/{util → css}/topologicalSort.js +0 -0
- /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
- /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
- /package/lib/{util → fs}/StackedCacheMap.js +0 -0
- /package/lib/{util → javascript}/StackedMap.js +0 -0
- /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
- /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
- /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
- /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
- /package/lib/{util → optimize}/Queue.js +0 -0
- /package/lib/{util → stats}/smartGrouping.js +0 -0
package/lib/util/dataURL.js
CHANGED
|
@@ -39,8 +39,9 @@ const decodeDataURI = (uri) => {
|
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* A `data:` URI split into the parts a caller has to put back together.
|
|
42
|
-
* `
|
|
43
|
-
*
|
|
42
|
+
* `parameters` is every `;…` after the media type (`;base64` included) and
|
|
43
|
+
* `payload` the text after the comma, both in the form they were written.
|
|
44
|
+
* @typedef {{ mediaType: string, parameters: string, base64: boolean, payload: string }} ParsedDataURI
|
|
44
45
|
*/
|
|
45
46
|
|
|
46
47
|
// `URIRegEx`'s `.` stops at a newline, which a raw `<svg>` payload carries, and
|
|
@@ -119,22 +120,56 @@ const parseDataURI = (uri) => {
|
|
|
119
120
|
if (match === null) return null;
|
|
120
121
|
return {
|
|
121
122
|
mediaType: match[1],
|
|
123
|
+
parameters: match[2],
|
|
122
124
|
base64: /;base64$/i.test(match[2]),
|
|
123
125
|
payload: match[3]
|
|
124
126
|
};
|
|
125
127
|
};
|
|
126
128
|
|
|
129
|
+
// A charset other than UTF-8 names bytes this cannot read back as text.
|
|
130
|
+
const FOREIGN_CHARSET_REGEXP = /;charset=(?!(?:utf-?8|us-ascii)(?:;|$))/i;
|
|
131
|
+
|
|
127
132
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
133
|
+
* Decode a payload's percent-escapes the way the URL parser does: a `%` and two
|
|
134
|
+
* hex digits is the byte they name, and any other `%` is itself.
|
|
135
|
+
* @param {string} payload the payload as written
|
|
136
|
+
* @returns {Buffer} the bytes it names
|
|
137
|
+
*/
|
|
138
|
+
const percentDecode = (payload) => {
|
|
139
|
+
const input = Buffer.from(payload, "utf8");
|
|
140
|
+
const output = Buffer.allocUnsafe(input.length);
|
|
141
|
+
let length = 0;
|
|
142
|
+
for (let i = 0; i < input.length; i++) {
|
|
143
|
+
const byte = input[i];
|
|
144
|
+
if (byte === 0x25 && i + 2 < input.length) {
|
|
145
|
+
const digits = String.fromCharCode(input[i + 1], input[i + 2]);
|
|
146
|
+
if (/^[0-9a-f]{2}$/i.test(digits)) {
|
|
147
|
+
output[length++] = Number.parseInt(digits, 16);
|
|
148
|
+
i += 2;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
output[length++] = byte;
|
|
153
|
+
}
|
|
154
|
+
return output.subarray(0, length);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The payload as text, or `null` when reading it would not round-trip. A raw
|
|
159
|
+
* `#` is read as content, as webpack's own `data:` modules read it, so a
|
|
160
|
+
* rebuilt URI escapes it rather than cutting the payload short.
|
|
132
161
|
* @param {ParsedDataURI} parsed the split URI
|
|
133
162
|
* @returns {string | null} the payload as text
|
|
134
163
|
*/
|
|
135
164
|
const decodeDataURIPayload = (parsed) => {
|
|
136
165
|
if (!parsed.base64) {
|
|
137
|
-
|
|
166
|
+
const { payload } = parsed;
|
|
167
|
+
if (!payload.includes("%")) return payload;
|
|
168
|
+
if (FOREIGN_CHARSET_REGEXP.test(parsed.parameters)) return null;
|
|
169
|
+
const bytes = percentDecode(payload);
|
|
170
|
+
const text = bytes.toString("utf8");
|
|
171
|
+
// Bytes that are no UTF-8 text are not written back as the same bytes.
|
|
172
|
+
return Buffer.from(text, "utf8").equals(bytes) ? text : null;
|
|
138
173
|
}
|
|
139
174
|
// Decoding is lenient rather than throwing, so garbage decodes to something
|
|
140
175
|
// that does not round-trip, which is the same answer: leave it alone.
|
|
@@ -144,6 +179,51 @@ const decodeDataURIPayload = (parsed) => {
|
|
|
144
179
|
: null;
|
|
145
180
|
};
|
|
146
181
|
|
|
182
|
+
/**
|
|
183
|
+
* A `data:` URI's payload as text, for a caller that will render it, with the
|
|
184
|
+
* language its media type names. `null` when there is nothing to offer: not a
|
|
185
|
+
* `data:` URI, a media type naming no language, a payload that would not
|
|
186
|
+
* round-trip, or a raw `#`, where a browser reads the rest as a fragment.
|
|
187
|
+
* @param {string} uri the URI, unquoted and unescaped
|
|
188
|
+
* @returns {{ parsed: ParsedDataURI, type: string, payload: string } | null} what it holds, or null
|
|
189
|
+
*/
|
|
190
|
+
const readEmbeddedDataURI = (uri) => {
|
|
191
|
+
if (uri.includes("#")) return null;
|
|
192
|
+
const parsed = parseDataURI(uri);
|
|
193
|
+
if (parsed === null) return null;
|
|
194
|
+
const type = languageOfMediaType(parsed.mediaType);
|
|
195
|
+
if (type === undefined) return null;
|
|
196
|
+
const payload = decodeDataURIPayload(parsed);
|
|
197
|
+
if (payload === null || payload === "") return null;
|
|
198
|
+
return { parsed, type, payload };
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Escape a payload for a `data:` URI written without `base64`, touching only
|
|
203
|
+
* what would change what the URI means. The host's own quoting is the caller's.
|
|
204
|
+
* @param {string} text the payload as text
|
|
205
|
+
* @returns {string} the escaped payload
|
|
206
|
+
*/
|
|
207
|
+
const encodeDataURIPayload = (text) => {
|
|
208
|
+
// WHY: `%` starts an escape and `#` a fragment. The URL parser drops every
|
|
209
|
+
// tab and newline and strips C0 controls and spaces off the end, so those
|
|
210
|
+
// are escaped too, or the payload read back is not the one written.
|
|
211
|
+
let trailing = text.length;
|
|
212
|
+
while (trailing > 0 && text.charCodeAt(trailing - 1) === 0x20) trailing--;
|
|
213
|
+
let out = "";
|
|
214
|
+
let start = 0;
|
|
215
|
+
for (let i = 0; i < text.length; i++) {
|
|
216
|
+
const c = text.charCodeAt(i);
|
|
217
|
+
if (c > 0x20 && c !== 0x7f && c !== 0x25 && c !== 0x23) continue;
|
|
218
|
+
if (c === 0x20 && i < trailing) continue;
|
|
219
|
+
out += `${text.slice(start, i)}%${c < 0x10 ? "0" : ""}${c
|
|
220
|
+
.toString(16)
|
|
221
|
+
.toUpperCase()}`;
|
|
222
|
+
start = i + 1;
|
|
223
|
+
}
|
|
224
|
+
return start === 0 ? text : out + text.slice(start);
|
|
225
|
+
};
|
|
226
|
+
|
|
147
227
|
/**
|
|
148
228
|
* Rebuild a `data:` URI around a new payload, in the form it was written in.
|
|
149
229
|
* @param {ParsedDataURI} parsed the split URI
|
|
@@ -151,14 +231,12 @@ const decodeDataURIPayload = (parsed) => {
|
|
|
151
231
|
* @returns {string} the rebuilt URI
|
|
152
232
|
*/
|
|
153
233
|
const buildDataURI = (parsed, text) => {
|
|
154
|
-
|
|
234
|
+
// A `;charset=` names how the payload decodes, so it is kept as written.
|
|
235
|
+
const head = `data:${parsed.mediaType}${parsed.parameters},`;
|
|
155
236
|
if (parsed.base64) {
|
|
156
237
|
return head + Buffer.from(text, "utf8").toString("base64");
|
|
157
238
|
}
|
|
158
|
-
|
|
159
|
-
// `#` starts a fragment. Everything else stays as the renderer wrote it, and
|
|
160
|
-
// the url token's own quoting is the caller's to apply.
|
|
161
|
-
return head + text.replace(/%/g, "%25").replace(/#/g, "%23");
|
|
239
|
+
return head + encodeDataURIPayload(text);
|
|
162
240
|
};
|
|
163
241
|
|
|
164
242
|
/**
|
|
@@ -208,8 +286,7 @@ const collectEmbeddedDiagnostics = (reported) => {
|
|
|
208
286
|
|
|
209
287
|
/**
|
|
210
288
|
* What a renderer made of one embedded body: the minified text, and anything it
|
|
211
|
-
* has to report about it. A bare string is the text alone
|
|
212
|
-
* renderer that declined.
|
|
289
|
+
* has to report about it. A bare string is the text alone.
|
|
213
290
|
* @typedef {{ code?: string, warnings?: (Error | string)[], errors?: (Error | string)[] }} EmbeddedSourceResult
|
|
214
291
|
*/
|
|
215
292
|
|
|
@@ -257,7 +334,9 @@ module.exports = {
|
|
|
257
334
|
decodeDataURI,
|
|
258
335
|
decodeDataURIPayload,
|
|
259
336
|
embeddedText,
|
|
337
|
+
encodeDataURIPayload,
|
|
260
338
|
languageOfFilename,
|
|
261
339
|
languageOfMediaType,
|
|
262
|
-
parseDataURI
|
|
340
|
+
parseDataURI,
|
|
341
|
+
readEmbeddedDataURI
|
|
263
342
|
};
|
package/lib/util/deprecation.js
CHANGED
|
@@ -203,7 +203,7 @@ module.exports.arrayToSetDeprecation = (set, name) => {
|
|
|
203
203
|
* Returns } SetDeprecatedArray.
|
|
204
204
|
* @template T
|
|
205
205
|
* @param {string} name name
|
|
206
|
-
* @returns {{ new <T
|
|
206
|
+
* @returns {{ new <T>(values?: ReadonlyArray<T> | null): SetDeprecatedArray<T> }} SetDeprecatedArray
|
|
207
207
|
*/
|
|
208
208
|
module.exports.createArrayToSetDeprecationSet = (name) => {
|
|
209
209
|
let initialized = false;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author sheo13666q @sheo13666q
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A condition in the minimizer plugin's `extractComments`. A function's arguments
|
|
10
|
+
* are each minimizer's own, so these minifiers hand it what `MinimizeExtractCommentsCondition` names.
|
|
11
|
+
* @typedef {boolean | string | RegExp | ((...args: never[]) => boolean)} PluginExtractCommentsCondition
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The minimizer plugin's `extractComments`, as far as these minifiers read it: a
|
|
15
|
+
* condition, or an object holding one.
|
|
16
|
+
* @typedef {PluginExtractCommentsCondition | { condition?: PluginExtractCommentsCondition }} PluginExtractComments
|
|
17
|
+
*/
|
|
18
|
+
/** @typedef {import("../../declarations/WebpackOptions").OptimizationMinimizeExtractComments} MinimizeExtractComments */
|
|
19
|
+
/** @typedef {import("../../declarations/WebpackOptions").OptimizationMinimizeExtractCommentsCondition} MinimizeExtractCommentsCondition */
|
|
20
|
+
/** @typedef {boolean | string | RegExp | ((comment: string) => boolean)} CommentsOption */
|
|
21
|
+
/** @typedef {(comment: string, line: number, column: number) => boolean} CommentPredicate */
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* How one language writes a comment, and which it keeps where nothing is extracted.
|
|
25
|
+
* @typedef {object} CommentSyntax
|
|
26
|
+
* @property {string} open what opens a comment, e.g. `/*`
|
|
27
|
+
* @property {string} close what closes it
|
|
28
|
+
* @property {(comment: string) => boolean} some what the `comments: "some"` level keeps
|
|
29
|
+
* @property {(comment: string) => boolean} unstated what is kept when `comments` is unset
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A `comments` value as the predicate over a comment's text it stands for.
|
|
34
|
+
* @param {CommentsOption} comments as configured
|
|
35
|
+
* @param {(comment: string) => boolean} some what `"some"` keeps
|
|
36
|
+
* @returns {(comment: string) => boolean} whether a comment is kept
|
|
37
|
+
*/
|
|
38
|
+
const keepCondition = (comments, some) => {
|
|
39
|
+
if (typeof comments === "function") return comments;
|
|
40
|
+
if (comments === true || comments === "all") return () => true;
|
|
41
|
+
if (comments === false) return () => false;
|
|
42
|
+
if (comments === "some") return some;
|
|
43
|
+
const pattern = comments instanceof RegExp ? comments : new RegExp(comments);
|
|
44
|
+
return (comment) => pattern.test(comment);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Which comments `extractComments` takes out, read as terser-webpack-plugin
|
|
49
|
+
* reads it: `true`, `"some"` or an object without a condition is terser's `some`
|
|
50
|
+
* bar IE's `@cc_on`, which marks conditional compilation rather than a license.
|
|
51
|
+
* @param {PluginExtractComments | MinimizeExtractComments | undefined} option as configured
|
|
52
|
+
* @returns {CommentPredicate | undefined} the condition, or undefined when nothing is extracted
|
|
53
|
+
*/
|
|
54
|
+
const extractCondition = (option) => {
|
|
55
|
+
if (option === undefined || option === false) return undefined;
|
|
56
|
+
/** @type {PluginExtractComments | MinimizeExtractComments} */
|
|
57
|
+
let condition = option;
|
|
58
|
+
if (typeof option === "object" && !(option instanceof RegExp)) {
|
|
59
|
+
// Extracting with a condition nothing meets still drops what is not kept.
|
|
60
|
+
condition = option.condition === undefined ? true : option.condition;
|
|
61
|
+
if (condition === false) return () => false;
|
|
62
|
+
}
|
|
63
|
+
if (condition === true || condition === "some") {
|
|
64
|
+
return (comment) => /@preserve|@lic|^\**!/i.test(comment);
|
|
65
|
+
}
|
|
66
|
+
if (typeof condition === "function") {
|
|
67
|
+
// No node to hand it, nor a second kind of comment: the predicate is asked
|
|
68
|
+
// about the comment alone, its text and place.
|
|
69
|
+
const predicate = /** @type {MinimizeExtractCommentsCondition} */ (
|
|
70
|
+
condition
|
|
71
|
+
);
|
|
72
|
+
return (comment, line, col) =>
|
|
73
|
+
predicate({ value: comment, line, col }) === true;
|
|
74
|
+
}
|
|
75
|
+
// an object option was unwrapped to its condition above
|
|
76
|
+
const keep = keepCondition(
|
|
77
|
+
/** @type {string | RegExp} */ (condition),
|
|
78
|
+
() => false
|
|
79
|
+
);
|
|
80
|
+
return (comment) => keep(comment);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The `comments` predicate a print takes to extract comments, and the list
|
|
85
|
+
* they are collected into, deduplicated and written with their delimiters.
|
|
86
|
+
* @param {PluginExtractComments | MinimizeExtractComments | undefined} option `extractComments` as configured
|
|
87
|
+
* @param {CommentsOption | undefined} comments the language's `comments` option
|
|
88
|
+
* @param {CommentSyntax} syntax how the language writes and keeps comments
|
|
89
|
+
* @returns {{ comments: CommentPredicate, extracted: string[] } | undefined} undefined when nothing is extracted
|
|
90
|
+
*/
|
|
91
|
+
const extractComments = (option, comments, syntax) => {
|
|
92
|
+
const extract = extractCondition(option);
|
|
93
|
+
if (extract === undefined) return undefined;
|
|
94
|
+
// As terser does: where the comments kept are not stated, extracting leaves
|
|
95
|
+
// only what the language must keep.
|
|
96
|
+
const keep =
|
|
97
|
+
comments === undefined
|
|
98
|
+
? syntax.unstated
|
|
99
|
+
: keepCondition(comments, syntax.some);
|
|
100
|
+
/** @type {string[]} */
|
|
101
|
+
const extracted = [];
|
|
102
|
+
const seen = new Set();
|
|
103
|
+
return {
|
|
104
|
+
comments: (comment, line, column) => {
|
|
105
|
+
if (!extract(comment, line, column)) return keep(comment);
|
|
106
|
+
const text = `${syntax.open}${comment}${syntax.close}`;
|
|
107
|
+
if (!seen.has(text)) {
|
|
108
|
+
seen.add(text);
|
|
109
|
+
extracted.push(text);
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
},
|
|
113
|
+
extracted
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
module.exports.extractComments = extractComments;
|
|
118
|
+
module.exports.keepCondition = keepCondition;
|
package/lib/util/globUtils.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const path = require("path");
|
|
9
|
-
const { join: joinPath } = require("
|
|
9
|
+
const { join: joinPath } = require("../fs/fs");
|
|
10
10
|
const {
|
|
11
11
|
ABSOLUTE_PATH_REGEXP,
|
|
12
12
|
WINDOWS_PATH_SEPARATOR_REGEXP
|
|
@@ -22,6 +22,9 @@ const getGlobToRegExpSource = memoize(
|
|
|
22
22
|
);
|
|
23
23
|
|
|
24
24
|
/** @typedef {{ caseSensitive?: boolean, requireLiteralLeadingDot?: boolean }} GlobMatchOptions */
|
|
25
|
+
/** @typedef {(str: string) => boolean} GlobMatcher */
|
|
26
|
+
/** @typedef {import("../../declarations/WebpackOptions").GlobCondition} GlobCondition */
|
|
27
|
+
/** @import Module from "../module/Module" */
|
|
25
28
|
|
|
26
29
|
/**
|
|
27
30
|
* @param {string} s string
|
|
@@ -518,10 +521,12 @@ const segmentGlobToRegExpSource = (segment) => {
|
|
|
518
521
|
* `path.matchesGlob` semantics: `*`, `?` and classes stay within a segment,
|
|
519
522
|
* a whole-segment `**` spans segments, and neither crosses a dot segment.
|
|
520
523
|
* @param {string} glob brace-free glob
|
|
524
|
+
* @param {boolean} lazy whether `**` spans as few segments as it can
|
|
521
525
|
* @returns {string} regexp source without anchors
|
|
522
526
|
*/
|
|
523
|
-
const braceFreeGlobToPathRegExpSource = (glob) => {
|
|
527
|
+
const braceFreeGlobToPathRegExpSource = (glob, lazy) => {
|
|
524
528
|
const segments = optimizeGlobSegments(glob.split("/"));
|
|
529
|
+
const repeat = lazy ? "*?" : "*";
|
|
525
530
|
let source = "";
|
|
526
531
|
let needSeparator = false;
|
|
527
532
|
for (let i = 0; i < segments.length; i++) {
|
|
@@ -536,8 +541,8 @@ const braceFreeGlobToPathRegExpSource = (glob) => {
|
|
|
536
541
|
source += isLast
|
|
537
542
|
? `${needSeparator ? "/" : ""}(?:${NON_DOT_SEGMENT}(?:/${NON_DOT_SEGMENT})*)?`
|
|
538
543
|
: needSeparator
|
|
539
|
-
? `(?:/${NON_DOT_SEGMENT})
|
|
540
|
-
: `/?(?:${NON_DOT_SEGMENT}/)
|
|
544
|
+
? `(?:/${NON_DOT_SEGMENT})${repeat}`
|
|
545
|
+
: `/?(?:${NON_DOT_SEGMENT}/)${repeat}`;
|
|
541
546
|
needSeparator = !isLast && needSeparator;
|
|
542
547
|
continue;
|
|
543
548
|
}
|
|
@@ -553,17 +558,10 @@ const braceFreeGlobToPathRegExpSource = (glob) => {
|
|
|
553
558
|
};
|
|
554
559
|
|
|
555
560
|
/**
|
|
556
|
-
* Compiles a glob into a matcher over OS-independent paths: `\` is a path
|
|
557
|
-
* separator in both the pattern and the tested path (never an escape, so a
|
|
558
|
-
* pattern built with `path.resolve` works everywhere; use `[*]` to match a
|
|
559
|
-
* literal `*`), and a relative pattern matches at any depth. Matching follows
|
|
560
|
-
* `path.matchesGlob`, except where its minimatch shows through — see the
|
|
561
|
-
* divergences listed above the corpus in `test/unitCases/globUtils.unittest.js`.
|
|
562
561
|
* @param {string} pattern glob pattern
|
|
563
|
-
* @
|
|
564
|
-
* @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
|
|
562
|
+
* @returns {string} regexp source matching a normalized path, unanchored
|
|
565
563
|
*/
|
|
566
|
-
const
|
|
564
|
+
const pathGlobToRegExpSource = (pattern) => {
|
|
567
565
|
let normalizedPattern = normalizePathSeparatorsForPath(pattern);
|
|
568
566
|
while (normalizedPattern.startsWith("./")) {
|
|
569
567
|
normalizedPattern = normalizedPattern.slice(2);
|
|
@@ -574,10 +572,40 @@ const createPathGlobMatcher = (pattern, options = {}) => {
|
|
|
574
572
|
) {
|
|
575
573
|
normalizedPattern = `**/${normalizedPattern}`;
|
|
576
574
|
}
|
|
577
|
-
const sources = expandGlobBraces(normalizedPattern).map(
|
|
578
|
-
braceFreeGlobToPathRegExpSource
|
|
575
|
+
const sources = expandGlobBraces(normalizedPattern).map((glob) =>
|
|
576
|
+
braceFreeGlobToPathRegExpSource(glob, false)
|
|
579
577
|
);
|
|
580
|
-
|
|
578
|
+
return sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`;
|
|
579
|
+
};
|
|
580
|
+
|
|
581
|
+
// a separator in a path regexp source, which a native path may spell `\`
|
|
582
|
+
const PATH_SOURCE_SEPARATOR_REGEXP = /\\[\s\S]|\[\^\/|\//g;
|
|
583
|
+
/** @type {Record<string, string>} */
|
|
584
|
+
const PATH_SOURCE_SEPARATORS = { "/": "[\\\\/]", "[^/": "[^\\\\/" };
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* @param {string} source regexp source over `/`-separated paths
|
|
588
|
+
* @returns {string} the same source, also accepting `\` as a separator
|
|
589
|
+
*/
|
|
590
|
+
const toNativePathSource = (source) =>
|
|
591
|
+
source.replace(
|
|
592
|
+
PATH_SOURCE_SEPARATOR_REGEXP,
|
|
593
|
+
(match) => PATH_SOURCE_SEPARATORS[match] || match
|
|
594
|
+
);
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* Compiles a glob into a matcher over OS-independent paths: `\` is a path
|
|
598
|
+
* separator in both the pattern and the tested path (never an escape, so a
|
|
599
|
+
* pattern built with `path.resolve` works everywhere; use `[*]` to match a
|
|
600
|
+
* literal `*`), and a relative pattern matches at any depth. Matching follows
|
|
601
|
+
* `path.matchesGlob`, except where its minimatch shows through — see the
|
|
602
|
+
* divergences listed above the corpus in `test/unitCases/globUtils.unittest.js`.
|
|
603
|
+
* @param {string} pattern glob pattern
|
|
604
|
+
* @param {GlobMatchOptions=} options options
|
|
605
|
+
* @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
|
|
606
|
+
*/
|
|
607
|
+
const createPathGlobMatcher = (pattern, options = {}) => {
|
|
608
|
+
const source = pathGlobToRegExpSource(pattern);
|
|
581
609
|
/** @type {RegExp} */
|
|
582
610
|
let regexp;
|
|
583
611
|
try {
|
|
@@ -598,6 +626,153 @@ const createPathGlobMatcher = (pattern, options = {}) => {
|
|
|
598
626
|
};
|
|
599
627
|
};
|
|
600
628
|
|
|
629
|
+
/**
|
|
630
|
+
* @param {GlobMatcher[]} positive patterns that select
|
|
631
|
+
* @param {GlobMatcher[]} negative patterns that subtract
|
|
632
|
+
* @returns {GlobMatcher} matcher
|
|
633
|
+
*/
|
|
634
|
+
const combineGlobMatchers = (positive, negative) => {
|
|
635
|
+
/** @type {GlobMatcher} */
|
|
636
|
+
const matchPositive =
|
|
637
|
+
positive.length === 0
|
|
638
|
+
? () => true
|
|
639
|
+
: positive.length === 1
|
|
640
|
+
? positive[0]
|
|
641
|
+
: (str) => positive.some((match) => match(str));
|
|
642
|
+
if (negative.length === 0) return matchPositive;
|
|
643
|
+
/** @type {GlobMatcher} */
|
|
644
|
+
const matchNegative =
|
|
645
|
+
negative.length === 1
|
|
646
|
+
? negative[0]
|
|
647
|
+
: (str) => negative.some((match) => match(str));
|
|
648
|
+
return (str) => matchPositive(str) && !matchNegative(str);
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* Compiles glob patterns into one matcher: patterns are OR-ed and a `!` prefix
|
|
653
|
+
* subtracts, as in `module.rules[].glob`.
|
|
654
|
+
* @param {string[]} globs glob patterns
|
|
655
|
+
* @param {(pattern: string, index: number) => never} onInvalid throws for an un-compilable pattern
|
|
656
|
+
* @returns {GlobMatcher} matcher
|
|
657
|
+
*/
|
|
658
|
+
const compileGlobList = (globs, onInvalid) => {
|
|
659
|
+
/** @type {GlobMatcher[]} */
|
|
660
|
+
const positive = [];
|
|
661
|
+
/** @type {GlobMatcher[]} */
|
|
662
|
+
const negative = [];
|
|
663
|
+
for (let i = 0; i < globs.length; i++) {
|
|
664
|
+
const pattern = globs[i];
|
|
665
|
+
const negated = pattern.startsWith("!");
|
|
666
|
+
const match = createPathGlobMatcher(negated ? pattern.slice(1) : pattern);
|
|
667
|
+
if (match === null) onInvalid(pattern, i);
|
|
668
|
+
(negated ? negative : positive).push(/** @type {GlobMatcher} */ (match));
|
|
669
|
+
}
|
|
670
|
+
return combineGlobMatchers(positive, negative);
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* @param {string} pattern glob pattern
|
|
675
|
+
* @returns {never} never returns
|
|
676
|
+
*/
|
|
677
|
+
const throwInvalidGlob = (pattern) => {
|
|
678
|
+
throw new Error(`Invalid glob pattern: ${pattern}`);
|
|
679
|
+
};
|
|
680
|
+
|
|
681
|
+
/** @type {WeakMap<GlobCondition, GlobMatcher>} */
|
|
682
|
+
const globConditionMatchers = new WeakMap();
|
|
683
|
+
|
|
684
|
+
/**
|
|
685
|
+
* Tests a path against `{ glob }`, compiled once per condition object.
|
|
686
|
+
* @param {GlobCondition} condition glob condition
|
|
687
|
+
* @param {string} str path
|
|
688
|
+
* @returns {boolean} true, when the path matches
|
|
689
|
+
*/
|
|
690
|
+
const matchGlobCondition = (condition, str) => {
|
|
691
|
+
let match = globConditionMatchers.get(condition);
|
|
692
|
+
if (match === undefined) {
|
|
693
|
+
match = compileGlobList(
|
|
694
|
+
Array.isArray(condition.glob) ? condition.glob : [condition.glob],
|
|
695
|
+
throwInvalidGlob
|
|
696
|
+
);
|
|
697
|
+
globConditionMatchers.set(condition, match);
|
|
698
|
+
}
|
|
699
|
+
return match(str);
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Tests a module's `nameForCondition()` against `{ glob }`; a module without one never matches.
|
|
704
|
+
* @param {GlobCondition} condition glob condition
|
|
705
|
+
* @param {Module} module module
|
|
706
|
+
* @returns {boolean} true, when the module matches
|
|
707
|
+
*/
|
|
708
|
+
const matchModuleGlobCondition = (condition, module) => {
|
|
709
|
+
const name = module.nameForCondition();
|
|
710
|
+
return name ? matchGlobCondition(condition, name) : false;
|
|
711
|
+
};
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Compiles each relative path of a path option as a glob, leaving absolute paths and RegExps as they are.
|
|
715
|
+
* @template T, R
|
|
716
|
+
* @param {(T | string)[]} paths option value
|
|
717
|
+
* @param {(pattern: string) => R} compile glob compiler
|
|
718
|
+
* @returns {(T | R | string)[]} paths with relative globs compiled
|
|
719
|
+
*/
|
|
720
|
+
const compileRelativeGlobPaths = (paths, compile) =>
|
|
721
|
+
paths.map((item) =>
|
|
722
|
+
typeof item === "string" && !ABSOLUTE_PATH_REGEXP.test(item)
|
|
723
|
+
? compile(item)
|
|
724
|
+
: item
|
|
725
|
+
);
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Compiles a glob into a RegExp matching what `createPathGlobMatcher` matches,
|
|
729
|
+
* for an option handed to code that only calls `.test()` on a native path.
|
|
730
|
+
* @param {string} pattern glob pattern
|
|
731
|
+
* @returns {RegExp} regexp
|
|
732
|
+
*/
|
|
733
|
+
const createPathGlobRegExp = (pattern) =>
|
|
734
|
+
new RegExp(`^${toNativePathSource(pathGlobToRegExpSource(pattern))}$`);
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Compiles a relative glob into a RegExp whose first group is the outermost
|
|
738
|
+
* directory it matches at the start of a path, trailing separator included — the
|
|
739
|
+
* shape `snapshot.managedPaths` and its siblings read. Like `module.rules[].glob`
|
|
740
|
+
* it matches at any depth, unless a leading `./` or `../` anchors it to `context`.
|
|
741
|
+
* @param {string} pattern relative glob pattern
|
|
742
|
+
* @param {string} context directory a `./` or `../` pattern is relative to
|
|
743
|
+
* @returns {RegExp} prefix regexp
|
|
744
|
+
*/
|
|
745
|
+
const createPathGlobPrefixRegExp = (pattern, context) => {
|
|
746
|
+
let glob = normalizePathSeparatorsForPath(pattern);
|
|
747
|
+
let baseSource = "";
|
|
748
|
+
if (glob.startsWith("./") || glob.startsWith("../")) {
|
|
749
|
+
let base = context;
|
|
750
|
+
for (;;) {
|
|
751
|
+
if (glob.startsWith("./")) {
|
|
752
|
+
glob = glob.slice(2);
|
|
753
|
+
} else if (glob.startsWith("../")) {
|
|
754
|
+
base = path.dirname(base);
|
|
755
|
+
glob = glob.slice(3);
|
|
756
|
+
} else {
|
|
757
|
+
break;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
for (const c of path.join(base, "/")) {
|
|
761
|
+
baseSource += c === "/" || c === "\\" ? "[\\\\/]" : quoteRegExpChar(c);
|
|
762
|
+
}
|
|
763
|
+
} else if (!glob.startsWith("**/")) {
|
|
764
|
+
glob = `**/${glob}`;
|
|
765
|
+
}
|
|
766
|
+
if (!glob.endsWith("/")) glob += "/";
|
|
767
|
+
const sources = expandGlobBraces(glob).map((brace) =>
|
|
768
|
+
braceFreeGlobToPathRegExpSource(brace, true)
|
|
769
|
+
);
|
|
770
|
+
const source = toNativePathSource(
|
|
771
|
+
sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`
|
|
772
|
+
);
|
|
773
|
+
return new RegExp(`^(${baseSource}${source})`);
|
|
774
|
+
};
|
|
775
|
+
|
|
601
776
|
/**
|
|
602
777
|
* @param {string} path path
|
|
603
778
|
* @param {string} baseDir base directory
|
|
@@ -961,7 +1136,11 @@ const globPatternBaseReachesDir = (patterns, dirPath) => {
|
|
|
961
1136
|
|
|
962
1137
|
module.exports = {
|
|
963
1138
|
commonGlobBaseDir,
|
|
1139
|
+
compileGlobList,
|
|
1140
|
+
compileRelativeGlobPaths,
|
|
964
1141
|
createPathGlobMatcher,
|
|
1142
|
+
createPathGlobPrefixRegExp,
|
|
1143
|
+
createPathGlobRegExp,
|
|
965
1144
|
escapeGlobPattern,
|
|
966
1145
|
extractGlobBaseDir,
|
|
967
1146
|
getGlobToRegExpSource,
|
|
@@ -976,6 +1155,8 @@ module.exports = {
|
|
|
976
1155
|
isNonExhaustiveImportMetaGlobSkippedDir,
|
|
977
1156
|
joinImportMetaGlobFsPath,
|
|
978
1157
|
joinImportMetaGlobPath,
|
|
1158
|
+
matchGlobCondition,
|
|
1159
|
+
matchModuleGlobCondition,
|
|
979
1160
|
normalizePathSeparators,
|
|
980
1161
|
normalizePathSeparatorsForPath,
|
|
981
1162
|
patternHasExplicitDotFor,
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
* @template T
|
|
10
|
+
* @typedef {import("./SourceProcessor").VisitorFn<T>} VisitorFn
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @template T
|
|
14
|
+
* @typedef {import("./SourceProcessor").CompiledVisitorBucket<T>} CompiledVisitorBucket
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Empty every bucket of a compiled visitor map in place, so a dispatch loop
|
|
19
|
+
* running over one ends after the visitor that asked and none fires again.
|
|
20
|
+
* @template TPath
|
|
21
|
+
* @param {CompiledVisitorBucket<TPath>[]} map the map a walk dispatches from
|
|
22
|
+
* @returns {VisitorFn<TPath>[][]} each emptied list followed by its visitors, for {@link resumeVisitors}
|
|
23
|
+
*/
|
|
24
|
+
const haltVisitors = (map) => {
|
|
25
|
+
/** @type {VisitorFn<TPath>[][]} */
|
|
26
|
+
const halted = [];
|
|
27
|
+
for (let type = 0; type < map.length; type++) {
|
|
28
|
+
const bucket = map[type];
|
|
29
|
+
if (bucket === undefined) continue;
|
|
30
|
+
halted.push(bucket.enter, [...bucket.enter], bucket.exit, [...bucket.exit]);
|
|
31
|
+
bucket.enter.length = 0;
|
|
32
|
+
bucket.exit.length = 0;
|
|
33
|
+
}
|
|
34
|
+
return halted;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Put back what {@link haltVisitors} emptied, so the next walk fires them all.
|
|
39
|
+
* @template TPath
|
|
40
|
+
* @param {VisitorFn<TPath>[][]} halted what `haltVisitors` returned
|
|
41
|
+
*/
|
|
42
|
+
const resumeVisitors = (halted) => {
|
|
43
|
+
for (let i = 0; i < halted.length; i += 2) {
|
|
44
|
+
const list = halted[i];
|
|
45
|
+
const visitors = halted[i + 1];
|
|
46
|
+
for (let k = 0; k < visitors.length; k++) list.push(visitors[k]);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
module.exports.haltVisitors = haltVisitors;
|
|
51
|
+
module.exports.resumeVisitors = resumeVisitors;
|
package/lib/util/handlerKeys.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
/** @import RuntimeModule from "../RuntimeModule" */
|
|
7
|
+
/** @import RuntimeModule from "../runtime/RuntimeModule" */
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The one key a chunk's runtime modules install on a handler map, or `null` when
|
|
@@ -20,7 +20,7 @@ const getOnlyHandlerKey = (runtimeModule, handlers) => {
|
|
|
20
20
|
/** @type {string | null} */
|
|
21
21
|
let only = null;
|
|
22
22
|
for (const module of chunkGraph.getChunkRuntimeModulesIterable(chunk)) {
|
|
23
|
-
// TODO
|
|
23
|
+
// TODO in the next major release: call it directly, every runtime module answers by then. A
|
|
24
24
|
// module built against an older webpack extends a base class without it.
|
|
25
25
|
const installed =
|
|
26
26
|
typeof module.getInstalledChunkHandlers === "function"
|