webpack 5.111.1 → 5.112.1
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 +1 -1
- package/bin/webpack.js +13 -7
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +373 -163
- package/lib/Compiler.js +31 -44
- 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 +21 -13
- package/lib/asset/AssetBytesParser.js +12 -10
- package/lib/asset/AssetGenerator.js +71 -69
- package/lib/asset/AssetModule.js +13 -2
- package/lib/asset/AssetModulesPlugin.js +10 -12
- package/lib/asset/AssetParser.js +10 -10
- package/lib/asset/AssetSourceGenerator.js +23 -15
- package/lib/asset/AssetSourceParser.js +12 -10
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +17 -12
- package/lib/asset/WebManifestParser.js +8 -8
- package/lib/async-modules/AsyncModuleHelpers.js +12 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +9 -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} +6 -6
- 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 +13 -19
- package/lib/cache/ResolverCachePlugin.js +65 -11
- 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} +209 -212
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +14 -164
- package/lib/config/defaults.js +166 -59
- package/lib/config/getClaimedAssetTypes.js +22 -14
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +11 -1
- 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 +37 -26
- package/lib/context/ContextModuleFactory.js +14 -11
- package/lib/context/ContextReplacementPlugin.js +6 -12
- package/lib/css/CssGenerator.js +78 -68
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +37 -29
- package/lib/css/CssModulesPlugin.js +129 -45
- package/lib/css/CssParser.js +714 -322
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/{util → css}/conventions.js +1 -1
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6990 -5125
- package/lib/css/syntax-parser.js +20734 -0
- package/lib/css/syntax-printer.js +6092 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +106 -51
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
- 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 -11
- 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} +14 -11
- 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 -36
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
- 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} +9 -6
- 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} +10 -11
- 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} +7 -10
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
- 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} +21 -17
- 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} +375 -99
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
- 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} +25 -22
- 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} +20 -20
- 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} +146 -133
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
- package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
- package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
- package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
- 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} +52 -151
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
- 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} +22 -25
- 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} +122 -103
- 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 +17 -19
- 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} +82 -53
- 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} +155 -27
- 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 +23 -21
- 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 +14 -10
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +103 -30
- 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/errors/AbstractMethodError.js +1 -1
- 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} +9 -6
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +6 -5
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/JSONParseError.js +4 -4
- 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 +13 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
- 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} +192 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +634 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
- package/lib/{util → graph}/findGraphRoots.js +15 -9
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +32 -28
- package/lib/html/HtmlGenerator.js +132 -60
- package/lib/html/HtmlModule.js +16 -2
- package/lib/html/HtmlModulesPlugin.js +184 -87
- package/lib/html/HtmlParser.js +511 -160
- package/lib/html/builtinEmbeddedRenderer.js +70 -25
- package/lib/html/data.js +44 -22
- package/lib/html/htmlMinify.js +114 -41
- package/lib/html/syntax-parser.js +15795 -0
- package/lib/html/syntax-printer.js +1033 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +70 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +32 -5
- 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 +312 -105
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +9 -9
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +32 -27
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
- package/lib/javascript/JavascriptModule.js +14 -3
- package/lib/javascript/JavascriptModulesPlugin.js +441 -214
- package/lib/javascript/JavascriptParser.js +318 -144
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3924 -13
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
- 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 +19169 -0
- package/lib/javascript/syntax-printer-data.js +1099 -0
- package/lib/javascript/syntax-printer.js +53878 -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 +24 -16
- package/lib/json/JsonModule.js +13 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +11 -10
- 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 +28 -12
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +2 -2
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +557 -187
- 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 +94 -46
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/loaders/loadLoader.js +16 -10
- 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} +33 -23
- package/lib/{Module.js → module/Module.js} +121 -53
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2350 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +12 -5
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +71 -20
- package/lib/{util → module}/findCaseMismatch.js +4 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
- 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 +13 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +6 -7
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
- package/lib/optimize/ConcatenatedModule.js +231 -220
- 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} +23 -28
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +12 -7
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +620 -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 +28 -22
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +18 -13
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
- package/lib/optimize/SplitChunksPlugin.js +719 -174
- 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} +69 -25
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
- 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 +4 -6
- package/lib/performance/HotspotsPlugin.js +39 -14
- 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 +19 -13
- 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 +22 -13
- 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 +66 -45
- 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 +50 -17
- 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/BasicEffectRulePlugin.js +1 -1
- package/lib/rules/RuleSetCompiler.js +42 -51
- package/lib/rules/UseEffectRulePlugin.js +1 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
- 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 +7 -11
- 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} +24 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -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 +68 -13
- package/lib/schemes/VirtualUrlPlugin.js +52 -16
- package/lib/serialization/AggregateErrorSerializer.js +4 -4
- package/lib/serialization/BinaryMiddleware.js +4 -1
- package/lib/serialization/ErrorObjectSerializer.js +2 -5
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +62 -29
- package/lib/serialization/PlainObjectSerializer.js +3 -7
- package/lib/serialization/Serializer.js +21 -11
- package/lib/serialization/SerializerMiddleware.js +10 -8
- 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 +57 -54
- package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
- package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +208 -37
- package/lib/stats/StatsPrinter.js +126 -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} +158 -95
- package/lib/{Template.js → template/Template.js} +14 -12
- 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 +439 -51
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +20 -16
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/cleverMerge.js +61 -33
- package/lib/util/comparators.js +19 -15
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +96 -15
- package/lib/util/deprecation.js +5 -4
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +198 -20
- 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 +296 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +28 -7
- package/lib/util/memoize.js +1 -1
- package/lib/util/parseJson.js +2 -2
- 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 +35 -28
- 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 +19 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +18 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +15 -17
- 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 +12 -18
- package/lib/web/FetchCompileWasmPlugin.js +8 -10
- 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 +57 -36
- package/schemas/WebpackOptions.check.js +4 -3
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +295 -75
- package/schemas/plugins/BannerPlugin.check.js +4 -3
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
- package/schemas/plugins/HtmlParserOptions.check.js +4 -3
- package/schemas/plugins/IgnorePlugin.check.js +4 -3
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
- package/schemas/plugins/ManifestPlugin.check.js +4 -3
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +4 -3
- 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 +4 -3
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
- package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
- package/schemas/plugins/container/ExternalsType.check.js +4 -3
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
- package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
- package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
- package/schemas/plugins/css/CssParserOptions.check.js +4 -3
- package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
- package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
- package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
- package/schemas/plugins/dll/DllPlugin.check.js +4 -3
- package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
- package/schemas/plugins/output/CleanOptions.check.js +7 -0
- package/schemas/plugins/output/CleanOptions.json +3 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +20780 -14174
- 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}/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/concatenate.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const Template = require("../Template");
|
|
8
|
+
const Template = require("../template/Template");
|
|
9
9
|
|
|
10
|
-
/** @import { Identifier
|
|
10
|
+
/** @import { Identifier } from "estree" */
|
|
11
11
|
/** @import { Optimization } from "../../declarations/WebpackOptions" */
|
|
12
12
|
/**
|
|
13
13
|
* @import {
|
|
@@ -16,9 +16,6 @@ const Template = require("../Template");
|
|
|
16
16
|
* Variable
|
|
17
17
|
* } from "../javascript/JavascriptModulesPlugin"
|
|
18
18
|
*/
|
|
19
|
-
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
20
|
-
/** @typedef {Node & { start?: number, end?: number }} PositionedNode */
|
|
21
|
-
/** @typedef {Exclude<keyof Node, "range" | "loc" | "leadingComments" | "trailingComments">} ChildKey */
|
|
22
19
|
/** @typedef {Set<string>} UsedNames */
|
|
23
20
|
|
|
24
21
|
const DEFAULT_EXPORT = "__WEBPACK_DEFAULT_EXPORT__";
|
|
@@ -90,146 +87,6 @@ const getAllReferences = (variable) => {
|
|
|
90
87
|
return set;
|
|
91
88
|
};
|
|
92
89
|
|
|
93
|
-
/**
|
|
94
|
-
* Tests whether a node covers the searched range. `start`/`end` are read before
|
|
95
|
-
* `range`, because webpack's parser serves `range` from a lazy getter that
|
|
96
|
-
* allocates an array and transitions the node's shape on first access — reading
|
|
97
|
-
* it while walking would pay that for most nodes of the ast.
|
|
98
|
-
* @param {PositionedNode} node node
|
|
99
|
-
* @param {number} start start of the searched range
|
|
100
|
-
* @param {number} end end of the searched range
|
|
101
|
-
* @returns {boolean} whether the node covers the range
|
|
102
|
-
*/
|
|
103
|
-
const coversRange = (node, start, end) => {
|
|
104
|
-
const nodeStart = node.start;
|
|
105
|
-
if (typeof nodeStart === "number") {
|
|
106
|
-
return nodeStart <= start && /** @type {number} */ (node.end) >= end;
|
|
107
|
-
}
|
|
108
|
-
const range = node.range;
|
|
109
|
-
return range !== undefined && range[0] <= start && range[1] >= end;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Returns the single sibling covering the searched range.
|
|
114
|
-
* @param {Node[]} items sibling nodes
|
|
115
|
-
* @param {number} start start of the searched range
|
|
116
|
-
* @param {number} end end of the searched range
|
|
117
|
-
* @returns {Node | undefined} covering sibling
|
|
118
|
-
*/
|
|
119
|
-
const findCoveringItem = (items, start, end) => {
|
|
120
|
-
// sibling ranges are ordered and disjoint; binary search the container
|
|
121
|
-
let low = 0;
|
|
122
|
-
let high = items.length - 1;
|
|
123
|
-
while (low <= high) {
|
|
124
|
-
const middle = (low + high) >> 1;
|
|
125
|
-
const item = /** @type {PositionedNode} */ (items[middle]);
|
|
126
|
-
/** @type {number | undefined} */
|
|
127
|
-
let itemStart;
|
|
128
|
-
/** @type {number | undefined} */
|
|
129
|
-
let itemEnd;
|
|
130
|
-
if (item) {
|
|
131
|
-
itemStart = item.start;
|
|
132
|
-
if (typeof itemStart === "number") {
|
|
133
|
-
itemEnd = item.end;
|
|
134
|
-
} else {
|
|
135
|
-
const range = item.range;
|
|
136
|
-
if (range === undefined) {
|
|
137
|
-
itemStart = undefined;
|
|
138
|
-
} else {
|
|
139
|
-
itemStart = range[0];
|
|
140
|
-
itemEnd = range[1];
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (itemStart === undefined) {
|
|
145
|
-
// holes or range-less nodes: scan the remaining window linearly
|
|
146
|
-
for (let i = low; i <= high; i++) {
|
|
147
|
-
const candidate = items[i];
|
|
148
|
-
if (candidate && coversRange(candidate, start, end)) return candidate;
|
|
149
|
-
}
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
if (itemStart > start) {
|
|
153
|
-
high = middle - 1;
|
|
154
|
-
} else if (start >= /** @type {number} */ (itemEnd)) {
|
|
155
|
-
low = middle + 1;
|
|
156
|
-
} else {
|
|
157
|
-
return /** @type {number} */ (itemEnd) >= end ? item : undefined;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return undefined;
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Collects the ancestors of `node` below `parent`, innermost first.
|
|
165
|
-
* Keeps scanning after a covering child turns out not to contain `node`:
|
|
166
|
-
* a shorthand `{ a }` holds two distinct identifiers with the same range.
|
|
167
|
-
* @param {Node} parent node to search in
|
|
168
|
-
* @param {number} start start of the searched range
|
|
169
|
-
* @param {number} end end of the searched range
|
|
170
|
-
* @param {Node} node node to find
|
|
171
|
-
* @param {Node[]} path collected ancestors
|
|
172
|
-
* @returns {boolean} whether the node was found
|
|
173
|
-
*/
|
|
174
|
-
const collectPathInNode = (parent, start, end, node, path) => {
|
|
175
|
-
for (const key in parent) {
|
|
176
|
-
// sit in front of the child keys on every node and never hold one, so
|
|
177
|
-
// skipping them by name is what keeps the per-level scan short
|
|
178
|
-
if (key === "type" || key === "start" || key === "end") continue;
|
|
179
|
-
const value = parent[/** @type {ChildKey} */ (key)];
|
|
180
|
-
if (value === null || typeof value !== "object") continue;
|
|
181
|
-
/** @type {Node | undefined} */
|
|
182
|
-
let child;
|
|
183
|
-
if (Array.isArray(value)) {
|
|
184
|
-
// `range` is a number pair on parsers that own the property
|
|
185
|
-
if (key === "range") continue;
|
|
186
|
-
child = findCoveringItem(value, start, end);
|
|
187
|
-
} else if (coversRange(value, start, end)) {
|
|
188
|
-
child = value;
|
|
189
|
-
}
|
|
190
|
-
if (
|
|
191
|
-
child !== undefined &&
|
|
192
|
-
(child === node || collectPathInNode(child, start, end, node, path))
|
|
193
|
-
) {
|
|
194
|
-
path.push(child);
|
|
195
|
-
return true;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return false;
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Returns the ancestors of `node` up to (but excluding) `ast`, innermost first.
|
|
203
|
-
* @param {Node | Node[]} ast ast
|
|
204
|
-
* @param {Node} node node
|
|
205
|
-
* @returns {undefined | Node[]} result
|
|
206
|
-
*/
|
|
207
|
-
const getPathInAst = (ast, node) => {
|
|
208
|
-
if (ast === node) {
|
|
209
|
-
return [];
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const nodeRange = /** @type {Range} */ (node.range);
|
|
213
|
-
const start = nodeRange[0];
|
|
214
|
-
const end = nodeRange[1];
|
|
215
|
-
/** @type {Node[]} */
|
|
216
|
-
const path = [];
|
|
217
|
-
|
|
218
|
-
if (Array.isArray(ast)) {
|
|
219
|
-
const item = findCoveringItem(ast, start, end);
|
|
220
|
-
if (item === undefined) return undefined;
|
|
221
|
-
if (item !== node && !collectPathInNode(item, start, end, node, path)) {
|
|
222
|
-
return undefined;
|
|
223
|
-
}
|
|
224
|
-
path.push(item);
|
|
225
|
-
return path;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
if (!ast || typeof ast !== "object") return undefined;
|
|
229
|
-
|
|
230
|
-
return collectPathInNode(ast, start, end, node, path) ? path : undefined;
|
|
231
|
-
};
|
|
232
|
-
|
|
233
90
|
/** @type {Map<string, string[]>} */
|
|
234
91
|
const splittedInfoCache = new Map();
|
|
235
92
|
|
|
@@ -302,6 +159,30 @@ function findNewName(oldName, usedNamed1, usedNamed2, extraInfo) {
|
|
|
302
159
|
return nameWithNumber;
|
|
303
160
|
}
|
|
304
161
|
|
|
162
|
+
// A string literal, kept whole, or an identifier that is not a property name;
|
|
163
|
+
const IDENTIFIER_OR_STRING_REGEXP =
|
|
164
|
+
/"(?:[^"\\]|\\.)*"|(?<![.\w$])[A-Za-z_$][\w$]*/g;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Renames every identifier of a printed expression that the map names, keeping
|
|
168
|
+
* property names and string contents as they are.
|
|
169
|
+
* @param {string} expression the expression as printed
|
|
170
|
+
* @param {Map<string, string>} renames original to new name
|
|
171
|
+
* @returns {string} the expression over the new names
|
|
172
|
+
* @example
|
|
173
|
+
* const renames = new Map([["store", "entry_store"], ["x", "entry_x"]]);
|
|
174
|
+
* renameIdentifiers("store.x", renames) === "entry_store.x"
|
|
175
|
+
* renameIdentifiers('store["a-b"]', renames) === 'entry_store["a-b"]'
|
|
176
|
+
* renameIdentifiers("store/* .x *\/.c", renames) === "entry_store/* .x *\/.c"
|
|
177
|
+
* renameIdentifiers("(store_default())", renames) === "(store_default())"
|
|
178
|
+
* renameIdentifiers("/* reads x *\/ x", renames) === "/* reads entry_x *\/ entry_x"
|
|
179
|
+
*/
|
|
180
|
+
const renameIdentifiers = (expression, renames) =>
|
|
181
|
+
expression.replace(IDENTIFIER_OR_STRING_REGEXP, (token) => {
|
|
182
|
+
const renamed = renames.get(token);
|
|
183
|
+
return renamed === undefined ? token : renamed;
|
|
184
|
+
});
|
|
185
|
+
|
|
305
186
|
/** @typedef {Set<Scope>} ScopeSet */
|
|
306
187
|
|
|
307
188
|
/**
|
|
@@ -408,7 +289,7 @@ module.exports = {
|
|
|
408
289
|
addScopeSymbols,
|
|
409
290
|
findNewName,
|
|
410
291
|
getAllReferences,
|
|
411
|
-
getPathInAst,
|
|
412
292
|
getUsedNamesInScopeInfo,
|
|
413
|
-
isCommonJsConcatenationEnabled
|
|
293
|
+
isCommonJsConcatenationEnabled,
|
|
294
|
+
renameIdentifiers
|
|
414
295
|
};
|
|
@@ -135,6 +135,117 @@ const encodeMappings = (lines) => {
|
|
|
135
135
|
return encodedLines.join(";");
|
|
136
136
|
};
|
|
137
137
|
|
|
138
|
+
/** @typedef {[number] | [number, number, number, number] | [number, number, number, number, number]} DecodedSegment generated column, then source index, original line and column, then name index, all 0-based */
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Decode a V3 `mappings` string into one array of segments per generated line,
|
|
142
|
+
* each sorted by generated column.
|
|
143
|
+
* @param {string} mappings a VLQ encoded `mappings` string
|
|
144
|
+
* @returns {DecodedSegment[][]} the segments of each generated line
|
|
145
|
+
*/
|
|
146
|
+
const decodeMappings = (mappings) => {
|
|
147
|
+
const { length } = mappings;
|
|
148
|
+
/** @type {DecodedSegment[][]} */
|
|
149
|
+
const lines = [];
|
|
150
|
+
let position = 0;
|
|
151
|
+
let sourceIndex = 0;
|
|
152
|
+
let originalLine = 0;
|
|
153
|
+
let originalColumn = 0;
|
|
154
|
+
let nameIndex = 0;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @returns {number} the value at `position`, which moves past it
|
|
158
|
+
*/
|
|
159
|
+
const read = () => {
|
|
160
|
+
const { value, end } = decodeVLQ(mappings, position);
|
|
161
|
+
// An invalid character reads as 0 and is skipped, so decoding ends.
|
|
162
|
+
position = end === position ? position + 1 : end;
|
|
163
|
+
// `B`, a negative zero, reads as -2^31 as source-map readers decode it,
|
|
164
|
+
// which sorts it before every column on its line.
|
|
165
|
+
return Object.is(value, -0) ? -2147483648 : value;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
do {
|
|
169
|
+
let lineEnd = mappings.indexOf(";", position);
|
|
170
|
+
if (lineEnd === -1) lineEnd = length;
|
|
171
|
+
/** @type {DecodedSegment[]} */
|
|
172
|
+
const line = [];
|
|
173
|
+
let sorted = true;
|
|
174
|
+
let generatedColumn = 0;
|
|
175
|
+
while (position < lineEnd) {
|
|
176
|
+
const previousColumn = generatedColumn;
|
|
177
|
+
generatedColumn += read();
|
|
178
|
+
if (generatedColumn < previousColumn) sorted = false;
|
|
179
|
+
if (position < lineEnd && mappings[position] !== ",") {
|
|
180
|
+
sourceIndex += read();
|
|
181
|
+
originalLine += read();
|
|
182
|
+
originalColumn += read();
|
|
183
|
+
if (position < lineEnd && mappings[position] !== ",") {
|
|
184
|
+
nameIndex += read();
|
|
185
|
+
line.push([
|
|
186
|
+
generatedColumn,
|
|
187
|
+
sourceIndex,
|
|
188
|
+
originalLine,
|
|
189
|
+
originalColumn,
|
|
190
|
+
nameIndex
|
|
191
|
+
]);
|
|
192
|
+
} else {
|
|
193
|
+
line.push([
|
|
194
|
+
generatedColumn,
|
|
195
|
+
sourceIndex,
|
|
196
|
+
originalLine,
|
|
197
|
+
originalColumn
|
|
198
|
+
]);
|
|
199
|
+
}
|
|
200
|
+
} else {
|
|
201
|
+
line.push([generatedColumn]);
|
|
202
|
+
}
|
|
203
|
+
position++;
|
|
204
|
+
}
|
|
205
|
+
if (!sorted) line.sort((a, b) => a[0] - b[0]);
|
|
206
|
+
lines.push(line);
|
|
207
|
+
position = lineEnd + 1;
|
|
208
|
+
} while (position <= length);
|
|
209
|
+
return lines;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Encode the segments `decodeMappings` reads back into a V3 `mappings` string.
|
|
214
|
+
* @param {DecodedSegment[][]} lines the segments of each generated line
|
|
215
|
+
* @returns {string} VLQ-encoded V3 mappings string
|
|
216
|
+
*/
|
|
217
|
+
const encodeDecodedMappings = (lines) => {
|
|
218
|
+
let sourceIndex = 0;
|
|
219
|
+
let originalLine = 0;
|
|
220
|
+
let originalColumn = 0;
|
|
221
|
+
let nameIndex = 0;
|
|
222
|
+
let result = "";
|
|
223
|
+
for (let i = 0; i < lines.length; i++) {
|
|
224
|
+
if (i > 0) result += ";";
|
|
225
|
+
const line = lines[i];
|
|
226
|
+
let generatedColumn = 0;
|
|
227
|
+
for (let j = 0; j < line.length; j++) {
|
|
228
|
+
const segment = line[j];
|
|
229
|
+
if (j > 0) result += ",";
|
|
230
|
+
result += encodeVLQ(segment[0] - generatedColumn);
|
|
231
|
+
generatedColumn = segment[0];
|
|
232
|
+
if (segment.length === 1) continue;
|
|
233
|
+
result += encodeVLQ(segment[1] - sourceIndex);
|
|
234
|
+
result += encodeVLQ(segment[2] - originalLine);
|
|
235
|
+
result += encodeVLQ(segment[3] - originalColumn);
|
|
236
|
+
sourceIndex = segment[1];
|
|
237
|
+
originalLine = segment[2];
|
|
238
|
+
originalColumn = segment[3];
|
|
239
|
+
if (segment.length === 4) continue;
|
|
240
|
+
result += encodeVLQ(segment[4] - nameIndex);
|
|
241
|
+
nameIndex = segment[4];
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
module.exports.decodeMappings = decodeMappings;
|
|
138
248
|
module.exports.decodeVLQ = decodeVLQ;
|
|
249
|
+
module.exports.encodeDecodedMappings = encodeDecodedMappings;
|
|
139
250
|
module.exports.encodeMappings = encodeMappings;
|
|
140
251
|
module.exports.encodeVLQ = encodeVLQ;
|
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
|
+
|
|
132
|
+
/**
|
|
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
|
+
|
|
127
157
|
/**
|
|
128
|
-
* The payload as text, or `null` when reading it would not round-trip. A
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* rewrite bytes nothing asked to change.
|
|
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
|
|
|
@@ -250,6 +327,8 @@ const askEmbeddedRenderer = async (render, hole, reported) => {
|
|
|
250
327
|
|
|
251
328
|
module.exports = {
|
|
252
329
|
EMBEDDED_LANGUAGES,
|
|
330
|
+
JSON_TYPE,
|
|
331
|
+
SVG_TYPE,
|
|
253
332
|
URIRegEx,
|
|
254
333
|
askEmbeddedRenderer,
|
|
255
334
|
buildDataURI,
|
|
@@ -257,7 +336,9 @@ module.exports = {
|
|
|
257
336
|
decodeDataURI,
|
|
258
337
|
decodeDataURIPayload,
|
|
259
338
|
embeddedText,
|
|
339
|
+
encodeDataURIPayload,
|
|
260
340
|
languageOfFilename,
|
|
261
341
|
languageOfMediaType,
|
|
262
|
-
parseDataURI
|
|
342
|
+
parseDataURI,
|
|
343
|
+
readEmbeddedDataURI
|
|
263
344
|
};
|
package/lib/util/deprecation.js
CHANGED
|
@@ -96,7 +96,7 @@ module.exports.arrayToSetDeprecation = (set, name) => {
|
|
|
96
96
|
`${name} was changed from Array to Set (using Array method '${method}' is deprecated)`,
|
|
97
97
|
"ARRAY_TO_SET"
|
|
98
98
|
);
|
|
99
|
-
/** @type {
|
|
99
|
+
/** @type {Set<T> & Record<COPY_METHODS_NAMES, (this: Set<T>) => void>} */
|
|
100
100
|
(set)[method] =
|
|
101
101
|
// eslint-disable-next-line func-names
|
|
102
102
|
function () {
|
|
@@ -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;
|
|
@@ -318,10 +318,11 @@ module.exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
|
|
|
318
318
|
set: util.deprecate(
|
|
319
319
|
/**
|
|
320
320
|
* Handles the callback logic for this hook.
|
|
321
|
+
* @template V
|
|
321
322
|
* @param {object} target target
|
|
322
323
|
* @param {string | symbol} property property
|
|
323
|
-
* @param {
|
|
324
|
-
* @param {
|
|
324
|
+
* @param {V} value value
|
|
325
|
+
* @param {T} receiver receiver
|
|
325
326
|
* @returns {boolean} result
|
|
326
327
|
*/
|
|
327
328
|
(target, property, value, receiver) =>
|
|
@@ -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;
|