@depup/webpack 5.109.0-depup.0 → 5.110.1-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/bin/webpack.js +12 -0
- package/changes.json +10 -10
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +43 -32
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +15 -16
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +38 -7
- package/lib/Compilation.js +709 -414
- package/lib/Compiler.js +69 -42
- package/lib/ConcatenationScope.js +117 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +168 -57
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +50 -13
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +123 -19
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +242 -84
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +116 -42
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +63 -57
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +28 -36
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +22 -6
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +221 -156
- package/lib/NormalModuleFactory.js +563 -112
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +346 -256
- package/lib/RuntimeTemplate.js +2792 -352
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +55 -25
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +2 -2
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +289 -28
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +282 -81
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +36 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +53 -66
- package/lib/container/ModuleFederationPlugin.js +7 -18
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +178 -44
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +82 -36
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +197 -106
- package/lib/css/CssParser.js +1248 -618
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5324 -0
- package/lib/css/syntax.js +10396 -952
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +156 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +28 -20
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +21 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +37 -29
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +2 -2
- package/lib/dependencies/ImportDependency.js +24 -20
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +49 -35
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +51 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
- package/lib/dependencies/WorkerDependency.js +28 -22
- package/lib/dependencies/WorkletDependency.js +15 -14
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +28 -10
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +299 -79
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +312 -174
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +7819 -3331
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +31 -18
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +181 -162
- package/lib/javascript/JavascriptParser.js +291 -112
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +3403 -300
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +14 -1
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
- package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +21 -17
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +996 -477
- package/lib/optimize/ConstExportsPlugin.js +11 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +9 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
- package/lib/optimize/RealContentHashPlugin.js +20 -13
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +232 -68
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +377 -136
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +24 -15
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +274 -942
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +305 -66
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
- package/lib/stats/StatsFactory.js +56 -35
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +12 -14
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1050 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +5 -1
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +25 -1
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +6 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
- package/lib/web/FetchCompileWasmPlugin.js +46 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +37 -30
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +780 -91
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +4013 -738
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const FileSystemInfo = require("../FileSystemInfo");
|
|
9
9
|
const ProgressPlugin = require("../ProgressPlugin");
|
|
10
|
+
const { getReferencedFilenames } = require("../serialization/FileMiddleware");
|
|
10
11
|
const SerializerMiddleware = require("../serialization/SerializerMiddleware");
|
|
11
12
|
const LazySet = require("../util/LazySet");
|
|
12
13
|
const formatSize = require("../util/formatSize");
|
|
@@ -17,33 +18,51 @@ const {
|
|
|
17
18
|
createFileSerializer
|
|
18
19
|
} = require("../util/serialization");
|
|
19
20
|
|
|
20
|
-
/** @
|
|
21
|
-
/** @
|
|
22
|
-
/** @
|
|
23
|
-
/** @
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/** @
|
|
32
|
-
/**
|
|
21
|
+
/** @import { SnapshotOptions } from "../../declarations/WebpackOptions" */
|
|
22
|
+
/** @import { FileSystemDependencies } from "../Compilation" */
|
|
23
|
+
/** @import { Data, Etag } from "../Cache" */
|
|
24
|
+
/** @import Compiler from "../Compiler" */
|
|
25
|
+
/**
|
|
26
|
+
* @import {
|
|
27
|
+
* ResolveBuildDependenciesResult,
|
|
28
|
+
* ResolveResults,
|
|
29
|
+
* Snapshot
|
|
30
|
+
* } from "../FileSystemInfo"
|
|
31
|
+
*/
|
|
32
|
+
/** @import { Logger } from "../logging/Logger" */
|
|
33
|
+
/**
|
|
34
|
+
* @import {
|
|
35
|
+
* ObjectDeserializerContext,
|
|
36
|
+
* ObjectSerializerContext
|
|
37
|
+
* } from "../serialization/ObjectMiddleware"
|
|
38
|
+
*/
|
|
39
|
+
/** @import { HashFunction } from "../util/Hash" */
|
|
40
|
+
/** @import { IntermediateFileSystem } from "../util/fs" */
|
|
33
41
|
|
|
34
42
|
/** @typedef {Set<string>} Items */
|
|
35
43
|
/** @typedef {Set<string>} BuildDependencies */
|
|
36
44
|
/** @typedef {Map<string, PackItemInfo>} ItemInfo */
|
|
45
|
+
/** @typedef {{ firstSeen: number, size: number }} UnreferencedFile */
|
|
46
|
+
/** @typedef {Map<string, UnreferencedFile>} UnreferencedFiles */
|
|
47
|
+
|
|
48
|
+
// Unreferenced files are kept for this long to not race concurrent builds sharing the cache directory.
|
|
49
|
+
const CLEANUP_GRACE_PERIOD = 30 * 60 * 1000;
|
|
50
|
+
// Records when each unreferenced file was first seen. Aging by recorded time keeps
|
|
51
|
+
// orphans expiring across caches restored with refreshed modification times.
|
|
52
|
+
const UNREFERENCED_FILE = "unreferenced.json";
|
|
53
|
+
// A file written this recently may belong to a concurrent build that reused the name,
|
|
54
|
+
// in which case the recorded time describes the previous file and must not be trusted.
|
|
55
|
+
const CLEANUP_RECENT_WRITE_PERIOD = 60 * 1000;
|
|
37
56
|
|
|
38
57
|
class PackContainer {
|
|
39
58
|
/**
|
|
40
59
|
* Creates an instance of PackContainer.
|
|
41
60
|
* @param {Pack} data stored data
|
|
42
61
|
* @param {string} version version identifier
|
|
43
|
-
* @param {Snapshot} buildSnapshot snapshot of all build dependencies
|
|
62
|
+
* @param {InstanceType<Snapshot>} buildSnapshot snapshot of all build dependencies
|
|
44
63
|
* @param {BuildDependencies} buildDependencies list of all unresolved build dependencies captured
|
|
45
64
|
* @param {ResolveResults} resolveResults result of the resolved build dependencies
|
|
46
|
-
* @param {Snapshot} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
|
|
65
|
+
* @param {InstanceType<Snapshot>} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
|
|
47
66
|
*/
|
|
48
67
|
constructor(
|
|
49
68
|
data,
|
|
@@ -57,13 +76,13 @@ class PackContainer {
|
|
|
57
76
|
this.data = data;
|
|
58
77
|
/** @type {string} */
|
|
59
78
|
this.version = version;
|
|
60
|
-
/** @type {Snapshot} */
|
|
79
|
+
/** @type {InstanceType<Snapshot>} */
|
|
61
80
|
this.buildSnapshot = buildSnapshot;
|
|
62
81
|
/** @type {BuildDependencies} */
|
|
63
82
|
this.buildDependencies = buildDependencies;
|
|
64
83
|
/** @type {ResolveResults} */
|
|
65
84
|
this.resolveResults = resolveResults;
|
|
66
|
-
/** @type {Snapshot} */
|
|
85
|
+
/** @type {InstanceType<Snapshot>} */
|
|
67
86
|
this.resolveBuildDependenciesSnapshot = resolveBuildDependenciesSnapshot;
|
|
68
87
|
}
|
|
69
88
|
|
|
@@ -569,6 +588,41 @@ class Pack {
|
|
|
569
588
|
}
|
|
570
589
|
}
|
|
571
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Drops every content whose items all expired. Unlike a partial collection this
|
|
593
|
+
* never unpacks, so it is not limited to a single content per store and lets a
|
|
594
|
+
* long unused cache shrink in one go instead of one pack per build.
|
|
595
|
+
*/
|
|
596
|
+
_gcExpiredContent() {
|
|
597
|
+
const now = Date.now();
|
|
598
|
+
let packCount = 0;
|
|
599
|
+
let itemCount = 0;
|
|
600
|
+
for (let loc = 0; loc < this.content.length; loc++) {
|
|
601
|
+
const content = this.content[loc];
|
|
602
|
+
if (!content) continue;
|
|
603
|
+
let expired = true;
|
|
604
|
+
for (const identifier of content.items) {
|
|
605
|
+
const info = this.itemInfo.get(identifier);
|
|
606
|
+
if (info !== undefined && now - info.lastAccess <= this.maxAge) {
|
|
607
|
+
expired = false;
|
|
608
|
+
break;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
if (!expired) continue;
|
|
612
|
+
for (const identifier of content.items) this.itemInfo.delete(identifier);
|
|
613
|
+
this.content[loc] = undefined;
|
|
614
|
+
packCount++;
|
|
615
|
+
itemCount += content.items.size;
|
|
616
|
+
}
|
|
617
|
+
if (packCount > 0) {
|
|
618
|
+
this.logger.log(
|
|
619
|
+
"Garbage Collected %d completely expired packs with %d items",
|
|
620
|
+
packCount,
|
|
621
|
+
itemCount
|
|
622
|
+
);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
572
626
|
/**
|
|
573
627
|
* Find the content with the oldest item and run GC on that.
|
|
574
628
|
* Only runs for one content to avoid large invalidation.
|
|
@@ -581,11 +635,10 @@ class Pack {
|
|
|
581
635
|
oldest = info;
|
|
582
636
|
}
|
|
583
637
|
}
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
const loc = /** @type {PackItemInfo} */ (oldest).location;
|
|
638
|
+
// collecting expired content may have left no items at all
|
|
639
|
+
if (oldest === undefined) return;
|
|
640
|
+
if (Date.now() - oldest.lastAccess > this.maxAge) {
|
|
641
|
+
const loc = oldest.location;
|
|
589
642
|
if (loc < 0) return;
|
|
590
643
|
const content = /** @type {PackContent} */ (this.content[loc]);
|
|
591
644
|
const items = new Set(content.items);
|
|
@@ -621,6 +674,7 @@ class Pack {
|
|
|
621
674
|
this._persistFreshContent();
|
|
622
675
|
this._optimizeSmallContent();
|
|
623
676
|
this._optimizeUnusedContent();
|
|
677
|
+
this._gcExpiredContent();
|
|
624
678
|
this._gcOldestContent();
|
|
625
679
|
for (const identifier of this.itemInfo.keys()) {
|
|
626
680
|
write(identifier);
|
|
@@ -1166,6 +1220,8 @@ class PackFileCacheStrategy {
|
|
|
1166
1220
|
});
|
|
1167
1221
|
/** @type {Compiler} */
|
|
1168
1222
|
this.compiler = compiler;
|
|
1223
|
+
/** @type {IntermediateFileSystem} */
|
|
1224
|
+
this.fs = fs;
|
|
1169
1225
|
/** @type {string} */
|
|
1170
1226
|
this.context = context;
|
|
1171
1227
|
/** @type {string} */
|
|
@@ -1182,6 +1238,10 @@ class PackFileCacheStrategy {
|
|
|
1182
1238
|
this.readonly = readonly;
|
|
1183
1239
|
/** @type {boolean | undefined} */
|
|
1184
1240
|
this.allowCollectingMemory = allowCollectingMemory;
|
|
1241
|
+
// referenced names per on-disk file, versioned by mtime since concurrent
|
|
1242
|
+
// processes may rewrite packs in place under the same name
|
|
1243
|
+
/** @type {Map<string, { mtimeMs: number, referenced: string[] }>} */
|
|
1244
|
+
this._referencedFilesCache = new Map();
|
|
1185
1245
|
/** @type {false | "gzip" | "brotli" | "zstd" | undefined} */
|
|
1186
1246
|
this.compression = compression;
|
|
1187
1247
|
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
@@ -1203,11 +1263,11 @@ class PackFileCacheStrategy {
|
|
|
1203
1263
|
this.buildDependencies = new Set();
|
|
1204
1264
|
/** @type {FileSystemDependencies} */
|
|
1205
1265
|
this.newBuildDependencies = new LazySet();
|
|
1206
|
-
/** @type {Snapshot | undefined} */
|
|
1266
|
+
/** @type {InstanceType<Snapshot> | undefined} */
|
|
1207
1267
|
this.resolveBuildDependenciesSnapshot = undefined;
|
|
1208
1268
|
/** @type {ResolveResults | undefined} */
|
|
1209
1269
|
this.resolveResults = undefined;
|
|
1210
|
-
/** @type {Snapshot | undefined} */
|
|
1270
|
+
/** @type {InstanceType<Snapshot> | undefined} */
|
|
1211
1271
|
this.buildSnapshot = undefined;
|
|
1212
1272
|
/** @type {Promise<Pack> | undefined} */
|
|
1213
1273
|
this.packPromise = this._openPack();
|
|
@@ -1232,13 +1292,13 @@ class PackFileCacheStrategy {
|
|
|
1232
1292
|
*/
|
|
1233
1293
|
_openPack() {
|
|
1234
1294
|
const { logger, profile, cacheLocation, version } = this;
|
|
1235
|
-
/** @type {Snapshot} */
|
|
1295
|
+
/** @type {InstanceType<Snapshot>} */
|
|
1236
1296
|
let buildSnapshot;
|
|
1237
1297
|
/** @type {BuildDependencies} */
|
|
1238
1298
|
let buildDependencies;
|
|
1239
1299
|
/** @type {BuildDependencies} */
|
|
1240
1300
|
let newBuildDependencies;
|
|
1241
|
-
/** @type {Snapshot} */
|
|
1301
|
+
/** @type {InstanceType<Snapshot>} */
|
|
1242
1302
|
let resolveBuildDependenciesSnapshot;
|
|
1243
1303
|
/** @type {ResolveResults | undefined} */
|
|
1244
1304
|
let resolveResults;
|
|
@@ -1580,18 +1640,25 @@ class PackFileCacheStrategy {
|
|
|
1580
1640
|
const content = new PackContainer(
|
|
1581
1641
|
pack,
|
|
1582
1642
|
this.version,
|
|
1583
|
-
/** @type {Snapshot} */
|
|
1643
|
+
/** @type {InstanceType<Snapshot>} */
|
|
1584
1644
|
(this.buildSnapshot),
|
|
1585
1645
|
updatedBuildDependencies,
|
|
1586
1646
|
/** @type {ResolveResults} */
|
|
1587
1647
|
(this.resolveResults),
|
|
1588
|
-
/** @type {Snapshot} */
|
|
1648
|
+
/** @type {InstanceType<Snapshot>} */
|
|
1589
1649
|
(this.resolveBuildDependenciesSnapshot)
|
|
1590
1650
|
);
|
|
1651
|
+
const cleanup = this.fs.unlink !== undefined;
|
|
1652
|
+
/** @type {Set<string> | undefined} */
|
|
1653
|
+
const writtenFiles = cleanup ? new Set() : undefined;
|
|
1654
|
+
/** @type {Set<string> | undefined} */
|
|
1655
|
+
const retainedFiles = cleanup ? new Set() : undefined;
|
|
1591
1656
|
return this.fileSerializer
|
|
1592
1657
|
.serialize(content, {
|
|
1593
1658
|
filename: `${this.cacheLocation}/index${this._extension}`,
|
|
1594
1659
|
extension: `${this._extension}`,
|
|
1660
|
+
writtenFiles,
|
|
1661
|
+
retainedFiles,
|
|
1595
1662
|
logger: this.logger,
|
|
1596
1663
|
profile: this.profile
|
|
1597
1664
|
})
|
|
@@ -1608,9 +1675,17 @@ class PackFileCacheStrategy {
|
|
|
1608
1675
|
stats.count,
|
|
1609
1676
|
Math.round(stats.size / 1024 / 1024)
|
|
1610
1677
|
);
|
|
1678
|
+
if (writtenFiles !== undefined) {
|
|
1679
|
+
return this._cleanupUnusedFiles(
|
|
1680
|
+
writtenFiles,
|
|
1681
|
+
/** @type {Set<string>} */ (retainedFiles)
|
|
1682
|
+
);
|
|
1683
|
+
}
|
|
1611
1684
|
})
|
|
1612
1685
|
.catch((err) => {
|
|
1613
1686
|
this.logger.timeEnd("store pack");
|
|
1687
|
+
// files may be in an unknown state after a failed store
|
|
1688
|
+
this._referencedFilesCache.clear();
|
|
1614
1689
|
this.logger.warn(`Caching failed for pack: ${err}`);
|
|
1615
1690
|
this.logger.debug(err.stack);
|
|
1616
1691
|
});
|
|
@@ -1622,6 +1697,192 @@ class PackFileCacheStrategy {
|
|
|
1622
1697
|
}));
|
|
1623
1698
|
}
|
|
1624
1699
|
|
|
1700
|
+
/**
|
|
1701
|
+
* Reads when the currently unreferenced files were first seen. A missing or
|
|
1702
|
+
* unreadable file just restarts the grace period for every orphan.
|
|
1703
|
+
* @returns {Promise<UnreferencedFiles>} first seen time and size per file name
|
|
1704
|
+
*/
|
|
1705
|
+
_readUnreferencedFiles() {
|
|
1706
|
+
return new Promise((resolve) => {
|
|
1707
|
+
this.fs.readFile(
|
|
1708
|
+
`${this.cacheLocation}/${UNREFERENCED_FILE}`,
|
|
1709
|
+
(err, content) => {
|
|
1710
|
+
/** @type {UnreferencedFiles} */
|
|
1711
|
+
const result = new Map();
|
|
1712
|
+
if (err) return resolve(result);
|
|
1713
|
+
try {
|
|
1714
|
+
const data = JSON.parse(
|
|
1715
|
+
/** @type {Buffer} */ (content).toString("utf8")
|
|
1716
|
+
);
|
|
1717
|
+
for (const [file, entry] of Object.entries(data)) {
|
|
1718
|
+
const { firstSeen, size } = /** @type {UnreferencedFile} */ (
|
|
1719
|
+
entry
|
|
1720
|
+
);
|
|
1721
|
+
if (typeof firstSeen === "number" && typeof size === "number") {
|
|
1722
|
+
result.set(file, { firstSeen, size });
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1725
|
+
} catch (_err) {
|
|
1726
|
+
result.clear();
|
|
1727
|
+
}
|
|
1728
|
+
resolve(result);
|
|
1729
|
+
}
|
|
1730
|
+
);
|
|
1731
|
+
});
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
/**
|
|
1735
|
+
* Persists when the still unreferenced files were first seen. Failing to write
|
|
1736
|
+
* only costs the orphans another grace period, so errors are ignored.
|
|
1737
|
+
* @param {UnreferencedFiles} unreferenced first seen time and size per file name
|
|
1738
|
+
* @param {boolean} hadEntries whether a previous state exists that must be replaced
|
|
1739
|
+
* @returns {Promise<void>} promise
|
|
1740
|
+
*/
|
|
1741
|
+
_writeUnreferencedFiles(unreferenced, hadEntries) {
|
|
1742
|
+
if (unreferenced.size === 0 && !hadEntries) return Promise.resolve();
|
|
1743
|
+
/** @type {Record<string, UnreferencedFile>} */
|
|
1744
|
+
const data = {};
|
|
1745
|
+
for (const [file, entry] of unreferenced) data[file] = entry;
|
|
1746
|
+
return new Promise((resolve) => {
|
|
1747
|
+
this.fs.writeFile(
|
|
1748
|
+
`${this.cacheLocation}/${UNREFERENCED_FILE}`,
|
|
1749
|
+
JSON.stringify(data),
|
|
1750
|
+
() => resolve()
|
|
1751
|
+
);
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
/**
|
|
1756
|
+
* Deletes files from the cache directory that are no longer referenced by the
|
|
1757
|
+
* stored pack. Retained files are walked on disk since nested lazy segments
|
|
1758
|
+
* reference files not visible during serialization. Errors only log a warning.
|
|
1759
|
+
* @param {Set<string>} writtenNames names (without extension) written by this store
|
|
1760
|
+
* @param {Set<string>} retainedNames names (without extension) referenced but not rewritten
|
|
1761
|
+
* @returns {Promise<void>} promise
|
|
1762
|
+
*/
|
|
1763
|
+
async _cleanupUnusedFiles(writtenNames, retainedNames) {
|
|
1764
|
+
this.logger.time("cleanup unused cache files");
|
|
1765
|
+
const fs = this.fs;
|
|
1766
|
+
const extension = this._extension;
|
|
1767
|
+
const cacheLocation = this.cacheLocation;
|
|
1768
|
+
const referencedFilesCache = this._referencedFilesCache;
|
|
1769
|
+
try {
|
|
1770
|
+
// rewritten files may reference different names now
|
|
1771
|
+
for (const name of writtenNames) referencedFilesCache.delete(name);
|
|
1772
|
+
/** @type {Set<string>} */
|
|
1773
|
+
const liveFiles = new Set([`index${extension}`, UNREFERENCED_FILE]);
|
|
1774
|
+
for (const name of writtenNames) liveFiles.add(`${name}${extension}`);
|
|
1775
|
+
/** @type {string[]} */
|
|
1776
|
+
const queue = [];
|
|
1777
|
+
/**
|
|
1778
|
+
* Marks a file live and queues it for walking its references.
|
|
1779
|
+
* @param {string} name file name without extension
|
|
1780
|
+
*/
|
|
1781
|
+
const enqueue = (name) => {
|
|
1782
|
+
const file = `${name}${extension}`;
|
|
1783
|
+
if (liveFiles.has(file)) return;
|
|
1784
|
+
liveFiles.add(file);
|
|
1785
|
+
queue.push(name);
|
|
1786
|
+
};
|
|
1787
|
+
for (const name of retainedNames) enqueue(name);
|
|
1788
|
+
while (queue.length > 0) {
|
|
1789
|
+
const name = /** @type {string} */ (queue.pop());
|
|
1790
|
+
const file = `${cacheLocation}/${name}${extension}`;
|
|
1791
|
+
// an unchanged mtime proves the memo entry still matches the disk
|
|
1792
|
+
const mtimeMs = await new Promise((resolve, reject) => {
|
|
1793
|
+
fs.stat(file, (err, stats) => {
|
|
1794
|
+
if (err) return reject(err);
|
|
1795
|
+
resolve(
|
|
1796
|
+
/** @type {number} */ (
|
|
1797
|
+
/** @type {import("../util/fs").IStats} */ (stats).mtimeMs
|
|
1798
|
+
)
|
|
1799
|
+
);
|
|
1800
|
+
});
|
|
1801
|
+
});
|
|
1802
|
+
const entry = referencedFilesCache.get(name);
|
|
1803
|
+
let referenced;
|
|
1804
|
+
if (entry !== undefined && entry.mtimeMs === mtimeMs) {
|
|
1805
|
+
referenced = entry.referenced;
|
|
1806
|
+
} else {
|
|
1807
|
+
referenced = await getReferencedFilenames(fs, file);
|
|
1808
|
+
referencedFilesCache.set(name, { mtimeMs, referenced });
|
|
1809
|
+
}
|
|
1810
|
+
for (const referencedName of referenced) enqueue(referencedName);
|
|
1811
|
+
}
|
|
1812
|
+
const files = await new Promise((resolve, reject) => {
|
|
1813
|
+
fs.readdir(cacheLocation, (err, files) => {
|
|
1814
|
+
if (err) return reject(err);
|
|
1815
|
+
resolve(/** @type {string[]} */ (files));
|
|
1816
|
+
});
|
|
1817
|
+
});
|
|
1818
|
+
const seenFiles = await this._readUnreferencedFiles();
|
|
1819
|
+
const now = Date.now();
|
|
1820
|
+
// every store rewrites the index backup, so a recorded time would age a file
|
|
1821
|
+
// that is in fact new; renaming carries the previous index mtime onto it
|
|
1822
|
+
const indexBackup = `index${extension}.old`;
|
|
1823
|
+
/** @type {UnreferencedFiles} */
|
|
1824
|
+
const stillUnreferenced = new Map();
|
|
1825
|
+
let deletedCount = 0;
|
|
1826
|
+
for (const file of files) {
|
|
1827
|
+
if (typeof file !== "string" || liveFiles.has(file)) continue;
|
|
1828
|
+
const path = `${cacheLocation}/${file}`;
|
|
1829
|
+
const stats = await new Promise((resolve) => {
|
|
1830
|
+
fs.stat(path, (err, stats) => {
|
|
1831
|
+
resolve(
|
|
1832
|
+
err
|
|
1833
|
+
? undefined
|
|
1834
|
+
: /** @type {import("../util/fs").IStats} */ (stats)
|
|
1835
|
+
);
|
|
1836
|
+
});
|
|
1837
|
+
});
|
|
1838
|
+
if (stats === undefined || !stats.isFile()) continue;
|
|
1839
|
+
const size = /** @type {number} */ (stats.size);
|
|
1840
|
+
const seen = seenFiles.get(file);
|
|
1841
|
+
// a differing size means the name was rewritten, so it is a new orphan
|
|
1842
|
+
const firstSeen =
|
|
1843
|
+
seen !== undefined && seen.size === size ? seen.firstSeen : now;
|
|
1844
|
+
const expireTime = now - CLEANUP_GRACE_PERIOD;
|
|
1845
|
+
const mtimeMs = /** @type {number} */ (stats.mtimeMs);
|
|
1846
|
+
// either signal is enough: modification times are lost when a cache is
|
|
1847
|
+
// restored, and recorded times are lost when the cache directory is new
|
|
1848
|
+
const expired =
|
|
1849
|
+
mtimeMs <= expireTime ||
|
|
1850
|
+
(file !== indexBackup &&
|
|
1851
|
+
firstSeen <= expireTime &&
|
|
1852
|
+
mtimeMs <= now - CLEANUP_RECENT_WRITE_PERIOD);
|
|
1853
|
+
if (expired) {
|
|
1854
|
+
const deleted = await new Promise((resolve) => {
|
|
1855
|
+
/** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
|
|
1856
|
+
(fs.unlink)(path, (err) => resolve(!err));
|
|
1857
|
+
});
|
|
1858
|
+
if (deleted) {
|
|
1859
|
+
deletedCount++;
|
|
1860
|
+
continue;
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
if (file !== indexBackup) {
|
|
1864
|
+
stillUnreferenced.set(file, { firstSeen, size });
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
await this._writeUnreferencedFiles(stillUnreferenced, seenFiles.size > 0);
|
|
1868
|
+
// drop entries of files that are no longer alive
|
|
1869
|
+
for (const name of referencedFilesCache.keys()) {
|
|
1870
|
+
if (!liveFiles.has(`${name}${extension}`)) {
|
|
1871
|
+
referencedFilesCache.delete(name);
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
if (deletedCount > 0) {
|
|
1875
|
+
this.logger.log("Deleted %d unused cache files", deletedCount);
|
|
1876
|
+
}
|
|
1877
|
+
} catch (err) {
|
|
1878
|
+
this.logger.warn(
|
|
1879
|
+
`Cleanup of unused cache files failed: ${/** @type {Error} */ (err)}`
|
|
1880
|
+
);
|
|
1881
|
+
this.logger.debug(/** @type {Error} */ (err).stack);
|
|
1882
|
+
}
|
|
1883
|
+
this.logger.timeEnd("cleanup unused cache files");
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1625
1886
|
clear() {
|
|
1626
1887
|
this.fileSystemInfo.clear();
|
|
1627
1888
|
this.buildDependencies.clear();
|
|
@@ -8,18 +8,29 @@
|
|
|
8
8
|
const LazySet = require("../util/LazySet");
|
|
9
9
|
const makeSerializable = require("../util/makeSerializable");
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** @
|
|
20
|
-
/** @
|
|
21
|
-
/**
|
|
22
|
-
|
|
11
|
+
/**
|
|
12
|
+
* @import {
|
|
13
|
+
* ResolveContext,
|
|
14
|
+
* ResolveOptions,
|
|
15
|
+
* ResolveRequest,
|
|
16
|
+
* Resolver
|
|
17
|
+
* } from "enhanced-resolve"
|
|
18
|
+
*/
|
|
19
|
+
/** @import { ItemCacheFacade } from "../CacheFacade" */
|
|
20
|
+
/** @import Compiler from "../Compiler" */
|
|
21
|
+
/**
|
|
22
|
+
* @import FileSystemInfo, {
|
|
23
|
+
* Snapshot,
|
|
24
|
+
* SnapshotOptions
|
|
25
|
+
* } from "../FileSystemInfo"
|
|
26
|
+
*/
|
|
27
|
+
/** @import { ResolveOptionsWithDependencyType } from "../ResolverFactory" */
|
|
28
|
+
/**
|
|
29
|
+
* @import {
|
|
30
|
+
* ObjectDeserializerContext,
|
|
31
|
+
* ObjectSerializerContext
|
|
32
|
+
* } from "../serialization/ObjectMiddleware"
|
|
33
|
+
*/
|
|
23
34
|
|
|
24
35
|
/**
|
|
25
36
|
* Defines the sync hook type used by this module.
|
|
@@ -33,12 +44,12 @@ class CacheEntry {
|
|
|
33
44
|
/**
|
|
34
45
|
* Creates an instance of CacheEntry.
|
|
35
46
|
* @param {ResolveRequest} result result
|
|
36
|
-
* @param {Snapshot} snapshot snapshot
|
|
47
|
+
* @param {InstanceType<Snapshot>} snapshot snapshot
|
|
37
48
|
*/
|
|
38
49
|
constructor(result, snapshot) {
|
|
39
50
|
/** @type {ResolveRequest} */
|
|
40
51
|
this.result = result;
|
|
41
|
-
/** @type {Snapshot} */
|
|
52
|
+
/** @type {InstanceType<Snapshot>} */
|
|
42
53
|
this.snapshot = snapshot;
|
|
43
54
|
}
|
|
44
55
|
|
|
@@ -112,7 +123,7 @@ class ResolverCachePlugin {
|
|
|
112
123
|
*/
|
|
113
124
|
apply(compiler) {
|
|
114
125
|
const cache = compiler.getCache(PLUGIN_NAME);
|
|
115
|
-
/** @type {FileSystemInfo} */
|
|
126
|
+
/** @type {FileSystemInfo | undefined} */
|
|
116
127
|
let fileSystemInfo;
|
|
117
128
|
/** @type {SnapshotOptions | undefined} */
|
|
118
129
|
let snapshotOptions;
|
|
@@ -120,6 +131,12 @@ class ResolverCachePlugin {
|
|
|
120
131
|
let cachedResolves = 0;
|
|
121
132
|
let cacheInvalidResolves = 0;
|
|
122
133
|
let concurrentResolves = 0;
|
|
134
|
+
// FileSystemInfo reaches the whole Compilation through its logger, so this
|
|
135
|
+
// compiler-lifetime closure would outlive what `Compiler.close()` releases.
|
|
136
|
+
compiler.hooks.shutdown.tap(PLUGIN_NAME, () => {
|
|
137
|
+
fileSystemInfo = undefined;
|
|
138
|
+
snapshotOptions = undefined;
|
|
139
|
+
});
|
|
123
140
|
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
124
141
|
snapshotOptions = compilation.options.snapshot.resolve;
|
|
125
142
|
fileSystemInfo = compilation.fileSystemInfo;
|
|
@@ -144,7 +161,7 @@ class ResolverCachePlugin {
|
|
|
144
161
|
|
|
145
162
|
/**
|
|
146
163
|
* Processes the provided item cache.
|
|
147
|
-
* @param {ItemCacheFacade} itemCache cache
|
|
164
|
+
* @param {InstanceType<ItemCacheFacade>} itemCache cache
|
|
148
165
|
* @param {Resolver} resolver the resolver
|
|
149
166
|
* @param {ResolveContext} resolveContext context for resolving meta info
|
|
150
167
|
* @param {ResolveRequest} request the request info object
|
|
@@ -209,7 +226,9 @@ class ResolverCachePlugin {
|
|
|
209
226
|
const fileDependencies = newResolveContext.fileDependencies;
|
|
210
227
|
const contextDependencies = newResolveContext.contextDependencies;
|
|
211
228
|
const missingDependencies = newResolveContext.missingDependencies;
|
|
212
|
-
fileSystemInfo.
|
|
229
|
+
// Only reachable past the `!fileSystemInfo` guard on the resolve tap.
|
|
230
|
+
const fsInfo = /** @type {FileSystemInfo} */ (fileSystemInfo);
|
|
231
|
+
fsInfo.createSnapshot(
|
|
213
232
|
resolveTime,
|
|
214
233
|
/** @type {Dependencies} */
|
|
215
234
|
(fileDependencies),
|
|
@@ -395,7 +414,8 @@ class ResolverCachePlugin {
|
|
|
395
414
|
|
|
396
415
|
if (cacheEntry) {
|
|
397
416
|
const { snapshot, result } = cacheEntry;
|
|
398
|
-
|
|
417
|
+
const fsInfo = /** @type {FileSystemInfo} */ (fileSystemInfo);
|
|
418
|
+
fsInfo.checkSnapshotValid(snapshot, (err, valid) => {
|
|
399
419
|
if (err || !valid) {
|
|
400
420
|
cacheInvalidResolves++;
|
|
401
421
|
return doRealResolve(
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
const { DEFAULTS } = require("../config/defaults");
|
|
9
9
|
const createHash = require("../util/createHash");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
11
|
+
/** @import Hash, { HashFunction } from "../util/Hash" */
|
|
12
12
|
/** @typedef {typeof import("../util/Hash")} HashConstructor */
|
|
13
|
-
/** @typedef {import("../util/Hash").HashFunction} HashFunction */
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Represents the lazy hashed etag runtime component.
|
package/lib/cache/mergeEtags.js
CHANGED
package/lib/cli.js
CHANGED
|
@@ -11,9 +11,7 @@ const webpackSchema =
|
|
|
11
11
|
/** @type {EXPECTED_ANY} */
|
|
12
12
|
(require("../schemas/WebpackOptions.json"));
|
|
13
13
|
|
|
14
|
-
/** @
|
|
15
|
-
/** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */
|
|
16
|
-
/** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */
|
|
14
|
+
/** @import { JSONSchema4, JSONSchema6, JSONSchema7 } from "json-schema" */
|
|
17
15
|
/** @typedef {JSONSchema4 | JSONSchema6 | JSONSchema7} JSONSchema */
|
|
18
16
|
/** @typedef {JSONSchema & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean, description?: string, negatedDescription?: string, resetDescription?: string } }} Schema */
|
|
19
17
|
|
|
@@ -8,13 +8,23 @@
|
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const browserslist = require("browserslist");
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
/**
|
|
12
|
+
* @import {
|
|
13
|
+
* ApiTargetProperties,
|
|
14
|
+
* EcmaTargetProperties,
|
|
15
|
+
* PlatformTargetProperties
|
|
16
|
+
* } from "./target"
|
|
17
|
+
*/
|
|
14
18
|
|
|
15
19
|
// [[C:]/path/to/config][:env]
|
|
16
20
|
const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i;
|
|
17
21
|
|
|
22
|
+
// One resolution per `[input, context]` — several callers ask for the same
|
|
23
|
+
// target, and each miss re-reads the config and re-runs the queries. The list is
|
|
24
|
+
// handed out as it stands, so no caller may write to it.
|
|
25
|
+
/** @type {Map<string, string[] | undefined> | null} */
|
|
26
|
+
const cache = process.env.BROWSERSLIST_DISABLE_CACHE ? null : new Map();
|
|
27
|
+
|
|
18
28
|
/**
|
|
19
29
|
* Returns selected browsers.
|
|
20
30
|
* @param {string | null | undefined} input input string
|
|
@@ -22,6 +32,25 @@ const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i;
|
|
|
22
32
|
* @returns {string[] | undefined} selected browsers
|
|
23
33
|
*/
|
|
24
34
|
const load = (input, context) => {
|
|
35
|
+
if (cache === null) return loadBrowsers(input, context);
|
|
36
|
+
// A newline separates the two: an input carries a config path, an env or a
|
|
37
|
+
// query, and a directory carries none.
|
|
38
|
+
const key = `${input || ""}\n${context}`;
|
|
39
|
+
let browsers = cache.get(key);
|
|
40
|
+
if (browsers === undefined && !cache.has(key)) {
|
|
41
|
+
browsers = loadBrowsers(input, context);
|
|
42
|
+
cache.set(key, browsers);
|
|
43
|
+
}
|
|
44
|
+
return browsers;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Read the selection out of the browserslist config or query.
|
|
49
|
+
* @param {string | null | undefined} input input string
|
|
50
|
+
* @param {string} context the context directory
|
|
51
|
+
* @returns {string[] | undefined} selected browsers
|
|
52
|
+
*/
|
|
53
|
+
const loadBrowsers = (input, context) => {
|
|
25
54
|
// browserslist:path-to-config
|
|
26
55
|
// browserslist:path-to-config:env
|
|
27
56
|
if (input && path.isAbsolute(input)) {
|
|
@@ -69,8 +98,15 @@ const resolve = (browsers) => {
|
|
|
69
98
|
* @param {Record<string, number | [number, number]>} versions first supported version
|
|
70
99
|
* @returns {boolean} true if supports
|
|
71
100
|
*/
|
|
72
|
-
const rawChecker = (versions) =>
|
|
73
|
-
|
|
101
|
+
const rawChecker = (versions) => checkAll(browsers, versions);
|
|
102
|
+
/**
|
|
103
|
+
* Checks a subset of the list against a version number
|
|
104
|
+
* @param {string[]} list the browsers to check
|
|
105
|
+
* @param {Record<string, number | [number, number]>} versions first supported version
|
|
106
|
+
* @returns {boolean} true if all support
|
|
107
|
+
*/
|
|
108
|
+
const checkAll = (list, versions) =>
|
|
109
|
+
list.every((v) => {
|
|
74
110
|
const [name, parsedVersion] = v.split(" ");
|
|
75
111
|
if (!name) return false;
|
|
76
112
|
const requiredVersion = versions[name];
|