webpack 5.59.0 → 5.94.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 +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const EventEmitter = require("events");
|
8
9
|
const { extname, basename } = require("path");
|
9
10
|
const { URL } = require("url");
|
10
11
|
const { createGunzip, createBrotliDecompress, createInflate } = require("zlib");
|
@@ -14,14 +15,73 @@ const createHash = require("../util/createHash");
|
|
14
15
|
const { mkdirp, dirname, join } = require("../util/fs");
|
15
16
|
const memoize = require("../util/memoize");
|
16
17
|
|
18
|
+
/** @typedef {import("http").IncomingMessage} IncomingMessage */
|
19
|
+
/** @typedef {import("http").RequestOptions} RequestOptions */
|
20
|
+
/** @typedef {import("net").Socket} Socket */
|
21
|
+
/** @typedef {import("stream").Readable} Readable */
|
17
22
|
/** @typedef {import("../../declarations/plugins/schemes/HttpUriPlugin").HttpUriPluginOptions} HttpUriPluginOptions */
|
18
23
|
/** @typedef {import("../Compiler")} Compiler */
|
24
|
+
/** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
|
25
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
26
|
+
/** @typedef {import("../NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
|
27
|
+
/** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
|
19
28
|
|
20
29
|
const getHttp = memoize(() => require("http"));
|
21
30
|
const getHttps = memoize(() => require("https"));
|
22
31
|
|
23
|
-
/**
|
24
|
-
|
32
|
+
/**
|
33
|
+
* @param {typeof import("http") | typeof import("https")} request request
|
34
|
+
* @param {string | { toString: () => string } | undefined} proxy proxy
|
35
|
+
* @returns {function(URL, RequestOptions, function(IncomingMessage): void): EventEmitter} fn
|
36
|
+
*/
|
37
|
+
const proxyFetch = (request, proxy) => (url, options, callback) => {
|
38
|
+
const eventEmitter = new EventEmitter();
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @param {Socket=} socket socket
|
42
|
+
* @returns {void}
|
43
|
+
*/
|
44
|
+
const doRequest = socket => {
|
45
|
+
request
|
46
|
+
.get(url, { ...options, ...(socket && { socket }) }, callback)
|
47
|
+
.on("error", eventEmitter.emit.bind(eventEmitter, "error"));
|
48
|
+
};
|
49
|
+
|
50
|
+
if (proxy) {
|
51
|
+
const { hostname: host, port } = new URL(proxy);
|
52
|
+
|
53
|
+
getHttp()
|
54
|
+
.request({
|
55
|
+
host, // IP address of proxy server
|
56
|
+
port, // port of proxy server
|
57
|
+
method: "CONNECT",
|
58
|
+
path: url.host
|
59
|
+
})
|
60
|
+
.on("connect", (res, socket) => {
|
61
|
+
if (res.statusCode === 200) {
|
62
|
+
// connected to proxy server
|
63
|
+
doRequest(socket);
|
64
|
+
}
|
65
|
+
})
|
66
|
+
.on("error", err => {
|
67
|
+
eventEmitter.emit(
|
68
|
+
"error",
|
69
|
+
new Error(
|
70
|
+
`Failed to connect to proxy server "${proxy}": ${err.message}`
|
71
|
+
)
|
72
|
+
);
|
73
|
+
})
|
74
|
+
.end();
|
75
|
+
} else {
|
76
|
+
doRequest();
|
77
|
+
}
|
78
|
+
|
79
|
+
return eventEmitter;
|
80
|
+
};
|
81
|
+
|
82
|
+
/** @typedef {() => void} InProgressWriteItem */
|
83
|
+
/** @type {InProgressWriteItem[] | undefined} */
|
84
|
+
let inProgressWrite;
|
25
85
|
|
26
86
|
const validate = createSchemaValidation(
|
27
87
|
require("../../schemas/plugins/schemes/HttpUriPlugin.check.js"),
|
@@ -32,18 +92,31 @@ const validate = createSchemaValidation(
|
|
32
92
|
}
|
33
93
|
);
|
34
94
|
|
95
|
+
/**
|
96
|
+
* @param {string} str path
|
97
|
+
* @returns {string} safe path
|
98
|
+
*/
|
35
99
|
const toSafePath = str =>
|
36
100
|
str
|
37
101
|
.replace(/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/g, "")
|
38
102
|
.replace(/[^a-zA-Z0-9._-]+/g, "_");
|
39
103
|
|
104
|
+
/**
|
105
|
+
* @param {Buffer} content content
|
106
|
+
* @returns {string} integrity
|
107
|
+
*/
|
40
108
|
const computeIntegrity = content => {
|
41
109
|
const hash = createHash("sha512");
|
42
110
|
hash.update(content);
|
43
|
-
const integrity =
|
111
|
+
const integrity = `sha512-${hash.digest("base64")}`;
|
44
112
|
return integrity;
|
45
113
|
};
|
46
114
|
|
115
|
+
/**
|
116
|
+
* @param {Buffer} content content
|
117
|
+
* @param {string} integrity integrity
|
118
|
+
* @returns {boolean} true, if integrity matches
|
119
|
+
*/
|
47
120
|
const verifyIntegrity = (content, integrity) => {
|
48
121
|
if (integrity === "ignore") return true;
|
49
122
|
return computeIntegrity(content) === integrity;
|
@@ -71,6 +144,11 @@ const parseKeyValuePairs = str => {
|
|
71
144
|
return result;
|
72
145
|
};
|
73
146
|
|
147
|
+
/**
|
148
|
+
* @param {string | undefined} cacheControl Cache-Control header
|
149
|
+
* @param {number} requestTime timestamp of request
|
150
|
+
* @returns {{storeCache: boolean, storeLock: boolean, validUntil: number}} Logic for storing in cache and lockfile cache
|
151
|
+
*/
|
74
152
|
const parseCacheControl = (cacheControl, requestTime) => {
|
75
153
|
// When false resource is not stored in cache
|
76
154
|
let storeCache = true;
|
@@ -81,8 +159,8 @@ const parseCacheControl = (cacheControl, requestTime) => {
|
|
81
159
|
if (cacheControl) {
|
82
160
|
const parsed = parseKeyValuePairs(cacheControl);
|
83
161
|
if (parsed["no-cache"]) storeCache = storeLock = false;
|
84
|
-
if (parsed["max-age"] && !isNaN(
|
85
|
-
validUntil = requestTime +
|
162
|
+
if (parsed["max-age"] && !Number.isNaN(Number(parsed["max-age"]))) {
|
163
|
+
validUntil = requestTime + Number(parsed["max-age"]) * 1000;
|
86
164
|
}
|
87
165
|
if (parsed["must-revalidate"]) validUntil = 0;
|
88
166
|
}
|
@@ -94,23 +172,28 @@ const parseCacheControl = (cacheControl, requestTime) => {
|
|
94
172
|
};
|
95
173
|
|
96
174
|
/**
|
97
|
-
* @typedef {
|
175
|
+
* @typedef {object} LockfileEntry
|
98
176
|
* @property {string} resolved
|
99
177
|
* @property {string} integrity
|
100
178
|
* @property {string} contentType
|
101
179
|
*/
|
102
180
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
181
|
+
/**
|
182
|
+
* @param {LockfileEntry} a first lockfile entry
|
183
|
+
* @param {LockfileEntry} b second lockfile entry
|
184
|
+
* @returns {boolean} true when equal, otherwise false
|
185
|
+
*/
|
186
|
+
const areLockfileEntriesEqual = (a, b) =>
|
187
|
+
a.resolved === b.resolved &&
|
188
|
+
a.integrity === b.integrity &&
|
189
|
+
a.contentType === b.contentType;
|
110
190
|
|
111
|
-
|
112
|
-
|
113
|
-
}
|
191
|
+
/**
|
192
|
+
* @param {LockfileEntry} entry lockfile entry
|
193
|
+
* @returns {`resolved: ${string}, integrity: ${string}, contentType: ${*}`} stringified entry
|
194
|
+
*/
|
195
|
+
const entryToString = entry =>
|
196
|
+
`resolved: ${entry.resolved}, integrity: ${entry.integrity}, contentType: ${entry.contentType}`;
|
114
197
|
|
115
198
|
class Lockfile {
|
116
199
|
constructor() {
|
@@ -119,6 +202,10 @@ class Lockfile {
|
|
119
202
|
this.entries = new Map();
|
120
203
|
}
|
121
204
|
|
205
|
+
/**
|
206
|
+
* @param {string} content content of the lockfile
|
207
|
+
* @returns {Lockfile} lockfile
|
208
|
+
*/
|
122
209
|
static parse(content) {
|
123
210
|
// TODO handle merge conflicts
|
124
211
|
const data = JSON.parse(content);
|
@@ -135,12 +222,15 @@ class Lockfile {
|
|
135
222
|
: {
|
136
223
|
resolved: key,
|
137
224
|
...entry
|
138
|
-
|
225
|
+
}
|
139
226
|
);
|
140
227
|
}
|
141
228
|
return lockfile;
|
142
229
|
}
|
143
230
|
|
231
|
+
/**
|
232
|
+
* @returns {string} stringified lockfile
|
233
|
+
*/
|
144
234
|
toString() {
|
145
235
|
let str = "{\n";
|
146
236
|
const entries = Array.from(this.entries).sort(([a], [b]) =>
|
@@ -165,17 +255,17 @@ class Lockfile {
|
|
165
255
|
|
166
256
|
/**
|
167
257
|
* @template R
|
168
|
-
* @param {function(function(Error
|
169
|
-
* @returns {function(function(Error
|
258
|
+
* @param {function(function(Error | null, R=): void): void} fn function
|
259
|
+
* @returns {function(function(Error | null, R=): void): void} cached function
|
170
260
|
*/
|
171
261
|
const cachedWithoutKey = fn => {
|
172
262
|
let inFlight = false;
|
173
263
|
/** @type {Error | undefined} */
|
174
|
-
let cachedError
|
264
|
+
let cachedError;
|
175
265
|
/** @type {R | undefined} */
|
176
|
-
let cachedResult
|
177
|
-
/** @type {(function(Error
|
178
|
-
let cachedCallbacks
|
266
|
+
let cachedResult;
|
267
|
+
/** @type {(function(Error| null, R=): void)[] | undefined} */
|
268
|
+
let cachedCallbacks;
|
179
269
|
return callback => {
|
180
270
|
if (inFlight) {
|
181
271
|
if (cachedResult !== undefined) return callback(null, cachedResult);
|
@@ -199,14 +289,22 @@ const cachedWithoutKey = fn => {
|
|
199
289
|
/**
|
200
290
|
* @template T
|
201
291
|
* @template R
|
202
|
-
* @param {function(T, function(Error
|
203
|
-
* @param {function(T, function(Error
|
204
|
-
* @returns {(function(T, function(Error
|
292
|
+
* @param {function(T, function(Error | null, R=): void): void} fn function
|
293
|
+
* @param {function(T, function(Error | null, R=): void): void=} forceFn function for the second try
|
294
|
+
* @returns {(function(T, function(Error | null, R=): void): void) & { force: function(T, function(Error | null, R=): void): void }} cached function
|
205
295
|
*/
|
206
296
|
const cachedWithKey = (fn, forceFn = fn) => {
|
207
|
-
/**
|
208
|
-
|
297
|
+
/**
|
298
|
+
* @template R
|
299
|
+
* @typedef {{ result?: R, error?: Error, callbacks?: (function(Error | null, R=): void)[], force?: true }} CacheEntry
|
300
|
+
*/
|
301
|
+
/** @type {Map<T, CacheEntry<R>>} */
|
209
302
|
const cache = new Map();
|
303
|
+
/**
|
304
|
+
* @param {T} arg arg
|
305
|
+
* @param {function(Error | null, R=): void} callback callback
|
306
|
+
* @returns {void}
|
307
|
+
*/
|
210
308
|
const resultFn = (arg, callback) => {
|
211
309
|
const cacheEntry = cache.get(arg);
|
212
310
|
if (cacheEntry !== undefined) {
|
@@ -217,7 +315,7 @@ const cachedWithKey = (fn, forceFn = fn) => {
|
|
217
315
|
else cacheEntry.callbacks.push(callback);
|
218
316
|
return;
|
219
317
|
}
|
220
|
-
/** @type {CacheEntry} */
|
318
|
+
/** @type {CacheEntry<R>} */
|
221
319
|
const newCacheEntry = {
|
222
320
|
result: undefined,
|
223
321
|
error: undefined,
|
@@ -233,6 +331,11 @@ const cachedWithKey = (fn, forceFn = fn) => {
|
|
233
331
|
if (callbacks !== undefined) for (const cb of callbacks) cb(err, result);
|
234
332
|
});
|
235
333
|
};
|
334
|
+
/**
|
335
|
+
* @param {T} arg arg
|
336
|
+
* @param {function(Error | null, R=): void} callback callback
|
337
|
+
* @returns {void}
|
338
|
+
*/
|
236
339
|
resultFn.force = (arg, callback) => {
|
237
340
|
const cacheEntry = cache.get(arg);
|
238
341
|
if (cacheEntry !== undefined && cacheEntry.force) {
|
@@ -243,7 +346,7 @@ const cachedWithKey = (fn, forceFn = fn) => {
|
|
243
346
|
else cacheEntry.callbacks.push(callback);
|
244
347
|
return;
|
245
348
|
}
|
246
|
-
/** @type {CacheEntry} */
|
349
|
+
/** @type {CacheEntry<R>} */
|
247
350
|
const newCacheEntry = {
|
248
351
|
result: undefined,
|
249
352
|
error: undefined,
|
@@ -263,6 +366,24 @@ const cachedWithKey = (fn, forceFn = fn) => {
|
|
263
366
|
return resultFn;
|
264
367
|
};
|
265
368
|
|
369
|
+
/**
|
370
|
+
* @typedef {object} LockfileCache
|
371
|
+
* @property {Lockfile} lockfile lockfile
|
372
|
+
* @property {Snapshot} snapshot snapshot
|
373
|
+
*/
|
374
|
+
|
375
|
+
/**
|
376
|
+
* @typedef {object} ResolveContentResult
|
377
|
+
* @property {LockfileEntry} entry lockfile entry
|
378
|
+
* @property {Buffer} content content
|
379
|
+
* @property {boolean} storeLock need store lockfile
|
380
|
+
*/
|
381
|
+
|
382
|
+
/** @typedef {{ storeCache: boolean, storeLock: boolean, validUntil: number, etag: string | undefined, fresh: boolean }} FetchResultMeta */
|
383
|
+
/** @typedef {FetchResultMeta & { location: string }} RedirectFetchResult */
|
384
|
+
/** @typedef {FetchResultMeta & { entry: LockfileEntry, content: Buffer }} ContentFetchResult */
|
385
|
+
/** @typedef {RedirectFetchResult | ContentFetchResult} FetchResult */
|
386
|
+
|
266
387
|
class HttpUriPlugin {
|
267
388
|
/**
|
268
389
|
* @param {HttpUriPluginOptions} options options
|
@@ -274,6 +395,7 @@ class HttpUriPlugin {
|
|
274
395
|
this._upgrade = options.upgrade;
|
275
396
|
this._frozen = options.frozen;
|
276
397
|
this._allowedUris = options.allowedUris;
|
398
|
+
this._proxy = options.proxy;
|
277
399
|
}
|
278
400
|
|
279
401
|
/**
|
@@ -282,25 +404,30 @@ class HttpUriPlugin {
|
|
282
404
|
* @returns {void}
|
283
405
|
*/
|
284
406
|
apply(compiler) {
|
407
|
+
const proxy =
|
408
|
+
this._proxy || process.env.http_proxy || process.env.HTTP_PROXY;
|
285
409
|
const schemes = [
|
286
410
|
{
|
287
411
|
scheme: "http",
|
288
|
-
fetch: (
|
412
|
+
fetch: proxyFetch(getHttp(), proxy)
|
289
413
|
},
|
290
414
|
{
|
291
415
|
scheme: "https",
|
292
|
-
fetch: (
|
293
|
-
getHttps().get(url, options, callback)
|
416
|
+
fetch: proxyFetch(getHttps(), proxy)
|
294
417
|
}
|
295
418
|
];
|
419
|
+
/** @type {LockfileCache} */
|
296
420
|
let lockfileCache;
|
297
421
|
compiler.hooks.compilation.tap(
|
298
422
|
"HttpUriPlugin",
|
299
423
|
(compilation, { normalModuleFactory }) => {
|
300
|
-
const intermediateFs =
|
424
|
+
const intermediateFs =
|
425
|
+
/** @type {IntermediateFileSystem} */
|
426
|
+
(compiler.intermediateFileSystem);
|
301
427
|
const fs = compilation.inputFileSystem;
|
302
428
|
const cache = compilation.getCache("webpack.HttpUriPlugin");
|
303
429
|
const logger = compilation.getLogger("webpack.HttpUriPlugin");
|
430
|
+
/** @type {string} */
|
304
431
|
const lockfileLocation =
|
305
432
|
this._lockfileLocation ||
|
306
433
|
join(
|
@@ -310,10 +437,11 @@ class HttpUriPlugin {
|
|
310
437
|
? `${toSafePath(compiler.name)}.webpack.lock`
|
311
438
|
: "webpack.lock"
|
312
439
|
);
|
440
|
+
/** @type {string | false} */
|
313
441
|
const cacheLocation =
|
314
442
|
this._cacheLocation !== undefined
|
315
443
|
? this._cacheLocation
|
316
|
-
: lockfileLocation
|
444
|
+
: `${lockfileLocation}.data`;
|
317
445
|
const upgrade = this._upgrade || false;
|
318
446
|
const frozen = this._frozen || false;
|
319
447
|
const hashFunction = "sha512";
|
@@ -323,6 +451,7 @@ class HttpUriPlugin {
|
|
323
451
|
|
324
452
|
let warnedAboutEol = false;
|
325
453
|
|
454
|
+
/** @type {Map<string, string>} */
|
326
455
|
const cacheKeyCache = new Map();
|
327
456
|
/**
|
328
457
|
* @param {string} url the url
|
@@ -358,7 +487,7 @@ class HttpUriPlugin {
|
|
358
487
|
|
359
488
|
const getLockfile = cachedWithoutKey(
|
360
489
|
/**
|
361
|
-
* @param {function(Error
|
490
|
+
* @param {function(Error | null, Lockfile=): void} callback callback
|
362
491
|
* @returns {void}
|
363
492
|
*/
|
364
493
|
callback => {
|
@@ -375,14 +504,14 @@ class HttpUriPlugin {
|
|
375
504
|
[],
|
376
505
|
buffer ? [] : [lockfileLocation],
|
377
506
|
{ timestamp: true },
|
378
|
-
(err,
|
507
|
+
(err, s) => {
|
379
508
|
if (err) return callback(err);
|
380
509
|
const lockfile = buffer
|
381
510
|
? Lockfile.parse(buffer.toString("utf-8"))
|
382
511
|
: new Lockfile();
|
383
512
|
lockfileCache = {
|
384
513
|
lockfile,
|
385
|
-
snapshot
|
514
|
+
snapshot: /** @type {Snapshot} */ (s)
|
386
515
|
};
|
387
516
|
callback(null, lockfile);
|
388
517
|
}
|
@@ -404,8 +533,16 @@ class HttpUriPlugin {
|
|
404
533
|
}
|
405
534
|
);
|
406
535
|
|
407
|
-
/** @
|
408
|
-
|
536
|
+
/** @typedef {Map<string, LockfileEntry | "ignore" | "no-cache">} LockfileUpdates */
|
537
|
+
|
538
|
+
/** @type {LockfileUpdates | undefined} */
|
539
|
+
let lockfileUpdates;
|
540
|
+
|
541
|
+
/**
|
542
|
+
* @param {Lockfile} lockfile lockfile instance
|
543
|
+
* @param {string} url url to store
|
544
|
+
* @param {LockfileEntry | "ignore" | "no-cache"} entry lockfile entry
|
545
|
+
*/
|
409
546
|
const storeLockEntry = (lockfile, url, entry) => {
|
410
547
|
const oldEntry = lockfile.entries.get(url);
|
411
548
|
if (lockfileUpdates === undefined) lockfileUpdates = new Map();
|
@@ -440,6 +577,13 @@ class HttpUriPlugin {
|
|
440
577
|
}
|
441
578
|
};
|
442
579
|
|
580
|
+
/**
|
581
|
+
* @param {Lockfile} lockfile lockfile
|
582
|
+
* @param {string} url url
|
583
|
+
* @param {ResolveContentResult} result result
|
584
|
+
* @param {function(Error | null, ResolveContentResult=): void} callback callback
|
585
|
+
* @returns {void}
|
586
|
+
*/
|
443
587
|
const storeResult = (lockfile, url, result, callback) => {
|
444
588
|
if (result.storeLock) {
|
445
589
|
storeLockEntry(lockfile, url, result.entry);
|
@@ -462,12 +606,16 @@ class HttpUriPlugin {
|
|
462
606
|
|
463
607
|
for (const { scheme, fetch } of schemes) {
|
464
608
|
/**
|
465
|
-
*
|
466
609
|
* @param {string} url URL
|
467
|
-
* @param {string} integrity integrity
|
468
|
-
* @param {function(Error
|
610
|
+
* @param {string | null} integrity integrity
|
611
|
+
* @param {function(Error | null, ResolveContentResult=): void} callback callback
|
469
612
|
*/
|
470
613
|
const resolveContent = (url, integrity, callback) => {
|
614
|
+
/**
|
615
|
+
* @param {Error | null} err error
|
616
|
+
* @param {TODO} result result result
|
617
|
+
* @returns {void}
|
618
|
+
*/
|
471
619
|
const handleResult = (err, result) => {
|
472
620
|
if (err) return callback(err);
|
473
621
|
if ("location" in result) {
|
@@ -476,41 +624,37 @@ class HttpUriPlugin {
|
|
476
624
|
integrity,
|
477
625
|
(err, innerResult) => {
|
478
626
|
if (err) return callback(err);
|
627
|
+
const { entry, content, storeLock } =
|
628
|
+
/** @type {ResolveContentResult} */ (innerResult);
|
479
629
|
callback(null, {
|
480
|
-
entry
|
481
|
-
content
|
482
|
-
storeLock:
|
630
|
+
entry,
|
631
|
+
content,
|
632
|
+
storeLock: storeLock && result.storeLock
|
483
633
|
});
|
484
634
|
}
|
485
635
|
);
|
486
|
-
} else {
|
487
|
-
if (
|
488
|
-
!result.fresh &&
|
489
|
-
integrity &&
|
490
|
-
result.entry.integrity !== integrity &&
|
491
|
-
!verifyIntegrity(result.content, integrity)
|
492
|
-
) {
|
493
|
-
return fetchContent.force(url, handleResult);
|
494
|
-
}
|
495
|
-
return callback(null, {
|
496
|
-
entry: result.entry,
|
497
|
-
content: result.content,
|
498
|
-
storeLock: result.storeLock
|
499
|
-
});
|
500
636
|
}
|
637
|
+
if (
|
638
|
+
!result.fresh &&
|
639
|
+
integrity &&
|
640
|
+
result.entry.integrity !== integrity &&
|
641
|
+
!verifyIntegrity(result.content, integrity)
|
642
|
+
) {
|
643
|
+
return fetchContent.force(url, handleResult);
|
644
|
+
}
|
645
|
+
return callback(null, {
|
646
|
+
entry: result.entry,
|
647
|
+
content: result.content,
|
648
|
+
storeLock: result.storeLock
|
649
|
+
});
|
501
650
|
};
|
502
651
|
fetchContent(url, handleResult);
|
503
652
|
};
|
504
653
|
|
505
|
-
/** @typedef {{ storeCache: boolean, storeLock: boolean, validUntil: number, etag: string | undefined, fresh: boolean }} FetchResultMeta */
|
506
|
-
/** @typedef {FetchResultMeta & { location: string }} RedirectFetchResult */
|
507
|
-
/** @typedef {FetchResultMeta & { entry: LockfileEntry, content: Buffer }} ContentFetchResult */
|
508
|
-
/** @typedef {RedirectFetchResult | ContentFetchResult} FetchResult */
|
509
|
-
|
510
654
|
/**
|
511
655
|
* @param {string} url URL
|
512
|
-
* @param {FetchResult} cachedResult result from cache
|
513
|
-
* @param {function(Error
|
656
|
+
* @param {FetchResult | RedirectFetchResult | undefined} cachedResult result from cache
|
657
|
+
* @param {function(Error | null, FetchResult=): void} callback callback
|
514
658
|
* @returns {void}
|
515
659
|
*/
|
516
660
|
const fetchContentRaw = (url, cachedResult, callback) => {
|
@@ -521,14 +665,14 @@ class HttpUriPlugin {
|
|
521
665
|
headers: {
|
522
666
|
"accept-encoding": "gzip, deflate, br",
|
523
667
|
"user-agent": "webpack",
|
524
|
-
"if-none-match":
|
525
|
-
? cachedResult.etag || null
|
526
|
-
|
668
|
+
"if-none-match": /** @type {TODO} */ (
|
669
|
+
cachedResult ? cachedResult.etag || null : null
|
670
|
+
)
|
527
671
|
}
|
528
672
|
},
|
529
673
|
res => {
|
530
|
-
const etag = res.headers
|
531
|
-
const location = res.headers
|
674
|
+
const etag = res.headers.etag;
|
675
|
+
const location = res.headers.location;
|
532
676
|
const cacheControl = res.headers["cache-control"];
|
533
677
|
const { storeLock, storeCache, validUntil } = parseCacheControl(
|
534
678
|
cacheControl,
|
@@ -583,34 +727,54 @@ class HttpUriPlugin {
|
|
583
727
|
);
|
584
728
|
};
|
585
729
|
if (res.statusCode === 304) {
|
730
|
+
const result = /** @type {FetchResult} */ (cachedResult);
|
586
731
|
if (
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
732
|
+
result.validUntil < validUntil ||
|
733
|
+
result.storeLock !== storeLock ||
|
734
|
+
result.storeCache !== storeCache ||
|
735
|
+
result.etag !== etag
|
591
736
|
) {
|
592
|
-
return finishWith(
|
593
|
-
} else {
|
594
|
-
logger.debug(`GET ${url} [${res.statusCode}] (unchanged)`);
|
595
|
-
return callback(null, {
|
596
|
-
...cachedResult,
|
597
|
-
fresh: true
|
598
|
-
});
|
737
|
+
return finishWith(result);
|
599
738
|
}
|
739
|
+
logger.debug(`GET ${url} [${res.statusCode}] (unchanged)`);
|
740
|
+
return callback(null, { ...result, fresh: true });
|
600
741
|
}
|
601
742
|
if (
|
602
743
|
location &&
|
744
|
+
res.statusCode &&
|
603
745
|
res.statusCode >= 301 &&
|
604
746
|
res.statusCode <= 308
|
605
747
|
) {
|
606
|
-
|
748
|
+
const result = {
|
607
749
|
location: new URL(location, url).href
|
750
|
+
};
|
751
|
+
if (
|
752
|
+
!cachedResult ||
|
753
|
+
!("location" in cachedResult) ||
|
754
|
+
cachedResult.location !== result.location ||
|
755
|
+
cachedResult.validUntil < validUntil ||
|
756
|
+
cachedResult.storeLock !== storeLock ||
|
757
|
+
cachedResult.storeCache !== storeCache ||
|
758
|
+
cachedResult.etag !== etag
|
759
|
+
) {
|
760
|
+
return finishWith(result);
|
761
|
+
}
|
762
|
+
logger.debug(`GET ${url} [${res.statusCode}] (unchanged)`);
|
763
|
+
return callback(null, {
|
764
|
+
...result,
|
765
|
+
fresh: true,
|
766
|
+
storeLock,
|
767
|
+
storeCache,
|
768
|
+
validUntil,
|
769
|
+
etag
|
608
770
|
});
|
609
771
|
}
|
610
772
|
const contentType = res.headers["content-type"] || "";
|
773
|
+
/** @type {Buffer[]} */
|
611
774
|
const bufferArr = [];
|
612
775
|
|
613
776
|
const contentEncoding = res.headers["content-encoding"];
|
777
|
+
/** @type {Readable} */
|
614
778
|
let stream = res;
|
615
779
|
if (contentEncoding === "gzip") {
|
616
780
|
stream = stream.pipe(createGunzip());
|
@@ -662,9 +826,10 @@ class HttpUriPlugin {
|
|
662
826
|
const fetchContent = cachedWithKey(
|
663
827
|
/**
|
664
828
|
* @param {string} url URL
|
665
|
-
* @param {function(Error
|
829
|
+
* @param {function(Error | null, { validUntil: number, etag?: string, entry: LockfileEntry, content: Buffer, fresh: boolean } | { validUntil: number, etag?: string, location: string, fresh: boolean }=): void} callback callback
|
666
830
|
* @returns {void}
|
667
|
-
*/
|
831
|
+
*/
|
832
|
+
(url, callback) => {
|
668
833
|
cache.get(url, null, (err, cachedResult) => {
|
669
834
|
if (err) return callback(err);
|
670
835
|
if (cachedResult) {
|
@@ -677,25 +842,32 @@ class HttpUriPlugin {
|
|
677
842
|
(url, callback) => fetchContentRaw(url, undefined, callback)
|
678
843
|
);
|
679
844
|
|
845
|
+
/**
|
846
|
+
* @param {string} uri uri
|
847
|
+
* @returns {boolean} true when allowed, otherwise false
|
848
|
+
*/
|
680
849
|
const isAllowed = uri => {
|
681
850
|
for (const allowed of allowedUris) {
|
682
851
|
if (typeof allowed === "string") {
|
683
852
|
if (uri.startsWith(allowed)) return true;
|
684
853
|
} else if (typeof allowed === "function") {
|
685
854
|
if (allowed(uri)) return true;
|
686
|
-
} else {
|
687
|
-
|
855
|
+
} else if (allowed.test(uri)) {
|
856
|
+
return true;
|
688
857
|
}
|
689
858
|
}
|
690
859
|
return false;
|
691
860
|
};
|
692
861
|
|
862
|
+
/** @typedef {{ entry: LockfileEntry, content: Buffer }} Info */
|
863
|
+
|
693
864
|
const getInfo = cachedWithKey(
|
694
865
|
/**
|
695
866
|
* @param {string} url the url
|
696
|
-
* @param {function(Error
|
867
|
+
* @param {function(Error | null, Info=): void} callback callback
|
697
868
|
* @returns {void}
|
698
869
|
*/
|
870
|
+
// eslint-disable-next-line no-loop-func
|
699
871
|
(url, callback) => {
|
700
872
|
if (!isAllowed(url)) {
|
701
873
|
return callback(
|
@@ -706,8 +878,9 @@ class HttpUriPlugin {
|
|
706
878
|
)
|
707
879
|
);
|
708
880
|
}
|
709
|
-
getLockfile((err,
|
881
|
+
getLockfile((err, _lockfile) => {
|
710
882
|
if (err) return callback(err);
|
883
|
+
const lockfile = /** @type {Lockfile} */ (_lockfile);
|
711
884
|
const entryOrString = lockfile.entries.get(url);
|
712
885
|
if (!entryOrString) {
|
713
886
|
if (frozen) {
|
@@ -719,14 +892,24 @@ class HttpUriPlugin {
|
|
719
892
|
}
|
720
893
|
resolveContent(url, null, (err, result) => {
|
721
894
|
if (err) return callback(err);
|
722
|
-
storeResult(
|
895
|
+
storeResult(
|
896
|
+
/** @type {Lockfile} */
|
897
|
+
(lockfile),
|
898
|
+
url,
|
899
|
+
/** @type {ResolveContentResult} */
|
900
|
+
(result),
|
901
|
+
callback
|
902
|
+
);
|
723
903
|
});
|
724
904
|
return;
|
725
905
|
}
|
726
906
|
if (typeof entryOrString === "string") {
|
727
907
|
const entryTag = entryOrString;
|
728
|
-
resolveContent(url, null, (err,
|
908
|
+
resolveContent(url, null, (err, _result) => {
|
729
909
|
if (err) return callback(err);
|
910
|
+
const result =
|
911
|
+
/** @type {ResolveContentResult} */
|
912
|
+
(_result);
|
730
913
|
if (!result.storeLock || entryTag === "ignore")
|
731
914
|
return callback(null, result);
|
732
915
|
if (frozen) {
|
@@ -750,8 +933,11 @@ Remove this line from the lockfile to force upgrading.`
|
|
750
933
|
return;
|
751
934
|
}
|
752
935
|
let entry = entryOrString;
|
936
|
+
/**
|
937
|
+
* @param {Buffer=} lockedContent locked content
|
938
|
+
*/
|
753
939
|
const doFetch = lockedContent => {
|
754
|
-
resolveContent(url, entry.integrity, (err,
|
940
|
+
resolveContent(url, entry.integrity, (err, _result) => {
|
755
941
|
if (err) {
|
756
942
|
if (lockedContent) {
|
757
943
|
logger.warn(
|
@@ -765,6 +951,9 @@ Remove this line from the lockfile to force upgrading.`
|
|
765
951
|
}
|
766
952
|
return callback(err);
|
767
953
|
}
|
954
|
+
const result =
|
955
|
+
/** @type {ResolveContentResult} */
|
956
|
+
(_result);
|
768
957
|
if (!result.storeLock) {
|
769
958
|
// When the lockfile entry should be no-cache
|
770
959
|
// we need to update the lockfile
|
@@ -819,12 +1008,16 @@ Remove this line from the lockfile to force upgrading.`
|
|
819
1008
|
const key = getCacheKey(entry.resolved);
|
820
1009
|
const filePath = join(intermediateFs, cacheLocation, key);
|
821
1010
|
fs.readFile(filePath, (err, result) => {
|
822
|
-
const content = /** @type {Buffer} */ (result);
|
823
1011
|
if (err) {
|
824
1012
|
if (err.code === "ENOENT") return doFetch();
|
825
1013
|
return callback(err);
|
826
1014
|
}
|
827
|
-
const
|
1015
|
+
const content = /** @type {Buffer} */ (result);
|
1016
|
+
/**
|
1017
|
+
* @param {Buffer | undefined} _result result
|
1018
|
+
* @returns {void}
|
1019
|
+
*/
|
1020
|
+
const continueWithCachedContent = _result => {
|
828
1021
|
if (!upgrade) {
|
829
1022
|
// When not in upgrade mode, we accept the result from the lockfile cache
|
830
1023
|
return callback(null, { entry, content });
|
@@ -832,6 +1025,7 @@ Remove this line from the lockfile to force upgrading.`
|
|
832
1025
|
return doFetch(content);
|
833
1026
|
};
|
834
1027
|
if (!verifyIntegrity(content, entry.integrity)) {
|
1028
|
+
/** @type {Buffer | undefined} */
|
835
1029
|
let contentWithChangedEol;
|
836
1030
|
let isEolChanged = false;
|
837
1031
|
try {
|
@@ -842,7 +1036,7 @@ Remove this line from the lockfile to force upgrading.`
|
|
842
1036
|
contentWithChangedEol,
|
843
1037
|
entry.integrity
|
844
1038
|
);
|
845
|
-
} catch (
|
1039
|
+
} catch (_err) {
|
846
1040
|
// ignore
|
847
1041
|
}
|
848
1042
|
if (isEolChanged) {
|
@@ -869,10 +1063,14 @@ This will avoid that the end of line sequence is changed by git on Windows.`;
|
|
869
1063
|
);
|
870
1064
|
intermediateFs.writeFile(
|
871
1065
|
filePath,
|
872
|
-
|
1066
|
+
/** @type {Buffer} */
|
1067
|
+
(contentWithChangedEol),
|
873
1068
|
err => {
|
874
1069
|
if (err) return callback(err);
|
875
|
-
continueWithCachedContent(
|
1070
|
+
continueWithCachedContent(
|
1071
|
+
/** @type {Buffer} */
|
1072
|
+
(contentWithChangedEol)
|
1073
|
+
);
|
876
1074
|
}
|
877
1075
|
);
|
878
1076
|
return;
|
@@ -894,15 +1092,14 @@ Lockfile corrupted (${
|
|
894
1092
|
Run build with un-frozen lockfile to automatically fix lockfile.`
|
895
1093
|
)
|
896
1094
|
);
|
897
|
-
} else {
|
898
|
-
// "fix" the lockfile entry to the correct integrity
|
899
|
-
// the content has priority over the integrity value
|
900
|
-
entry = {
|
901
|
-
...entry,
|
902
|
-
integrity: computeIntegrity(content)
|
903
|
-
};
|
904
|
-
storeLockEntry(lockfile, url, entry);
|
905
1095
|
}
|
1096
|
+
// "fix" the lockfile entry to the correct integrity
|
1097
|
+
// the content has priority over the integrity value
|
1098
|
+
entry = {
|
1099
|
+
...entry,
|
1100
|
+
integrity: computeIntegrity(content)
|
1101
|
+
};
|
1102
|
+
storeLockEntry(lockfile, url, entry);
|
906
1103
|
}
|
907
1104
|
continueWithCachedContent(result);
|
908
1105
|
});
|
@@ -913,9 +1110,15 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
913
1110
|
}
|
914
1111
|
);
|
915
1112
|
|
1113
|
+
/**
|
1114
|
+
* @param {URL} url url
|
1115
|
+
* @param {ResourceDataWithData} resourceData resource data
|
1116
|
+
* @param {function(Error | null, true | void): void} callback callback
|
1117
|
+
*/
|
916
1118
|
const respondWithUrlModule = (url, resourceData, callback) => {
|
917
|
-
getInfo(url.href, (err,
|
1119
|
+
getInfo(url.href, (err, _result) => {
|
918
1120
|
if (err) return callback(err);
|
1121
|
+
const result = /** @type {Info} */ (_result);
|
919
1122
|
resourceData.resource = url.href;
|
920
1123
|
resourceData.path = url.origin + url.pathname;
|
921
1124
|
resourceData.query = url.search;
|
@@ -951,7 +1154,7 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
951
1154
|
return callback();
|
952
1155
|
}
|
953
1156
|
respondWithUrlModule(
|
954
|
-
new URL(resourceData.resource, data.context
|
1157
|
+
new URL(resourceData.resource, `${data.context}/`),
|
955
1158
|
resourceData,
|
956
1159
|
callback
|
957
1160
|
);
|
@@ -959,13 +1162,15 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
959
1162
|
const hooks = NormalModule.getCompilationHooks(compilation);
|
960
1163
|
hooks.readResourceForScheme
|
961
1164
|
.for(scheme)
|
962
|
-
.tapAsync("HttpUriPlugin", (resource, module, callback) =>
|
963
|
-
|
1165
|
+
.tapAsync("HttpUriPlugin", (resource, module, callback) =>
|
1166
|
+
getInfo(resource, (err, _result) => {
|
964
1167
|
if (err) return callback(err);
|
965
|
-
|
1168
|
+
const result = /** @type {Info} */ (_result);
|
1169
|
+
/** @type {BuildInfo} */
|
1170
|
+
(module.buildInfo).resourceIntegrity = result.entry.integrity;
|
966
1171
|
callback(null, result.content);
|
967
|
-
})
|
968
|
-
|
1172
|
+
})
|
1173
|
+
);
|
969
1174
|
hooks.needBuild.tapAsync(
|
970
1175
|
"HttpUriPlugin",
|
971
1176
|
(module, context, callback) => {
|
@@ -973,11 +1178,13 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
973
1178
|
module.resource &&
|
974
1179
|
module.resource.startsWith(`${scheme}://`)
|
975
1180
|
) {
|
976
|
-
getInfo(module.resource, (err,
|
1181
|
+
getInfo(module.resource, (err, _result) => {
|
977
1182
|
if (err) return callback(err);
|
1183
|
+
const result = /** @type {Info} */ (_result);
|
978
1184
|
if (
|
979
1185
|
result.entry.integrity !==
|
980
|
-
|
1186
|
+
/** @type {BuildInfo} */
|
1187
|
+
(module.buildInfo).resourceIntegrity
|
981
1188
|
) {
|
982
1189
|
return callback(null, true);
|
983
1190
|
}
|
@@ -1003,7 +1210,9 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
1003
1210
|
);
|
1004
1211
|
|
1005
1212
|
const writeDone = () => {
|
1006
|
-
const nextOperation =
|
1213
|
+
const nextOperation =
|
1214
|
+
/** @type {InProgressWriteItem[]} */
|
1215
|
+
(inProgressWrite).shift();
|
1007
1216
|
if (nextOperation) {
|
1008
1217
|
nextOperation();
|
1009
1218
|
} else {
|
@@ -1019,19 +1228,25 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
1019
1228
|
const lockfile = buffer
|
1020
1229
|
? Lockfile.parse(buffer.toString("utf-8"))
|
1021
1230
|
: new Lockfile();
|
1022
|
-
for (const [key, value] of
|
1231
|
+
for (const [key, value] of /** @type {LockfileUpdates} */ (
|
1232
|
+
lockfileUpdates
|
1233
|
+
)) {
|
1023
1234
|
lockfile.entries.set(key, value);
|
1024
1235
|
}
|
1025
1236
|
intermediateFs.writeFile(tempFile, lockfile.toString(), err => {
|
1026
1237
|
if (err) {
|
1027
1238
|
writeDone();
|
1028
|
-
return
|
1239
|
+
return (
|
1240
|
+
/** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
|
1241
|
+
(intermediateFs.unlink)(tempFile, () => callback(err))
|
1242
|
+
);
|
1029
1243
|
}
|
1030
1244
|
intermediateFs.rename(tempFile, lockfileLocation, err => {
|
1031
1245
|
if (err) {
|
1032
1246
|
writeDone();
|
1033
|
-
return
|
1034
|
-
|
1247
|
+
return (
|
1248
|
+
/** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
|
1249
|
+
(intermediateFs.unlink)(tempFile, () => callback(err))
|
1035
1250
|
);
|
1036
1251
|
}
|
1037
1252
|
writeDone();
|
@@ -1044,6 +1259,7 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
|
|
1044
1259
|
inProgressWrite.push(runWrite);
|
1045
1260
|
} else {
|
1046
1261
|
inProgressWrite = [];
|
1262
|
+
runWrite();
|
1047
1263
|
}
|
1048
1264
|
}
|
1049
1265
|
);
|