webpack 5.106.1 → 5.107.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 +2 -2
- package/lib/APIPlugin.js +4 -2
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +10 -1
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +26 -0
- package/lib/Chunk.js +46 -0
- package/lib/ChunkGraph.js +111 -0
- package/lib/ChunkGroup.js +57 -13
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CleanPlugin.js +14 -1
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +23 -8
- package/lib/Compilation.js +161 -27
- package/lib/Compiler.js +41 -17
- package/lib/ConcatenationScope.js +24 -1
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +4 -1
- package/lib/ContextExclusionPlugin.js +2 -1
- package/lib/ContextModule.js +14 -2
- package/lib/ContextModuleFactory.js +10 -0
- package/lib/ContextReplacementPlugin.js +4 -1
- package/lib/DefinePlugin.js +22 -9
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +48 -4
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +3 -0
- package/lib/EntryPlugin.js +2 -1
- package/lib/Entrypoint.js +4 -0
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -10
- package/lib/ExportsInfo.js +56 -2
- package/lib/ExportsInfoApiPlugin.js +2 -1
- package/lib/ExternalModule.js +114 -15
- package/lib/ExternalModuleFactoryPlugin.js +15 -0
- package/lib/ExternalsPlugin.js +2 -1
- package/lib/FileSystemInfo.js +291 -71
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
- package/lib/FlagDependencyExportsPlugin.js +4 -1
- package/lib/FlagDependencyUsagePlugin.js +5 -1
- package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
- package/lib/Generator.js +16 -3
- package/lib/HotModuleReplacementPlugin.js +35 -9
- package/lib/IgnorePlugin.js +4 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +10 -0
- package/lib/JavascriptMetaInfoPlugin.js +2 -1
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +2 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +101 -19
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +3 -0
- package/lib/ModuleGraph.js +66 -0
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleSourceTypeConstants.js +32 -1
- package/lib/ModuleTemplate.js +8 -0
- package/lib/ModuleTypeConstants.js +12 -3
- package/lib/MultiCompiler.js +30 -2
- package/lib/MultiStats.js +8 -0
- package/lib/MultiWatching.js +3 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +11 -2
- package/lib/NormalModule.js +43 -33
- package/lib/NormalModuleFactory.js +35 -2
- package/lib/NormalModuleReplacementPlugin.js +1 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +2 -1
- package/lib/ProgressPlugin.js +158 -68
- package/lib/ProvidePlugin.js +3 -1
- package/lib/RawModule.js +12 -0
- package/lib/RecordIdsPlugin.js +8 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +6 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +13 -0
- package/lib/RuntimeTemplate.js +35 -1
- package/lib/SelfModuleFactory.js +2 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +3 -1
- package/lib/Stats.js +5 -0
- package/lib/Template.js +20 -0
- package/lib/TemplatedPathPlugin.js +10 -3
- package/lib/UseStrictPlugin.js +2 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
- package/lib/WarnDeprecatedOptionPlugin.js +2 -2
- package/lib/WarnNoModeSetPlugin.js +17 -2
- package/lib/WatchIgnorePlugin.js +4 -1
- package/lib/Watching.js +16 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +3 -1
- package/lib/WebpackOptionsApply.js +14 -1
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +12 -2
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +42 -10
- package/lib/asset/AssetModulesPlugin.js +7 -2
- package/lib/asset/AssetParser.js +2 -0
- package/lib/asset/AssetSourceGenerator.js +12 -2
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +11 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +19 -6
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
- package/lib/cache/AddManagedPathsPlugin.js +2 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
- package/lib/cache/PackFileCacheStrategy.js +33 -4
- package/lib/cache/ResolverCachePlugin.js +10 -1
- package/lib/cache/getLazyHashedEtag.js +4 -0
- package/lib/cache/mergeEtags.js +2 -0
- package/lib/cli.js +33 -1
- package/lib/config/browserslistTargetHandler.js +2 -0
- package/lib/config/defaults.js +232 -12
- package/lib/config/normalization.js +15 -1
- package/lib/config/target.js +11 -0
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +12 -0
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +4 -0
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +2 -1
- package/lib/container/FallbackDependency.js +4 -0
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +12 -0
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/ModuleFederationPlugin.js +3 -1
- package/lib/container/RemoteModule.js +13 -0
- package/lib/container/RemoteRuntimeModule.js +1 -0
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +336 -100
- package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
- package/lib/css/CssLoadingRuntimeModule.js +23 -4
- package/lib/{CssModule.js → css/CssModule.js} +21 -15
- package/lib/css/CssModulesPlugin.js +235 -89
- package/lib/css/CssParser.js +616 -261
- package/lib/css/walkCssTokens.js +179 -2
- package/lib/debug/ProfilingPlugin.js +19 -1
- package/lib/dependencies/AMDDefineDependency.js +7 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
- package/lib/dependencies/AMDPlugin.js +4 -1
- package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
- package/lib/dependencies/AMDRequireContextDependency.js +3 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
- package/lib/dependencies/AMDRequireDependency.js +4 -0
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +6 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
- package/lib/dependencies/CommonJsExportsDependency.js +4 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
- package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
- package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
- package/lib/dependencies/CommonJsPlugin.js +4 -1
- package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
- package/lib/dependencies/CommonJsRequireDependency.js +70 -4
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
- package/lib/dependencies/ConstDependency.js +6 -1
- package/lib/dependencies/ContextDependency.js +9 -2
- package/lib/dependencies/ContextDependencyHelpers.js +4 -1
- package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +4 -0
- package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
- package/lib/dependencies/CriticalDependencyWarning.js +2 -1
- package/lib/dependencies/CssIcssExportDependency.js +339 -66
- package/lib/dependencies/CssIcssImportDependency.js +53 -8
- package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
- package/lib/dependencies/CssImportDependency.js +12 -0
- package/lib/dependencies/CssUrlDependency.js +32 -0
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +3 -0
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportsInfoDependency.js +6 -0
- package/lib/dependencies/ExternalModuleDependency.js +5 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
- package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
- package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
- package/lib/dependencies/HarmonyExports.js +2 -0
- package/lib/dependencies/HarmonyImportDependency.js +21 -2
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
- package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
- package/lib/dependencies/HtmlSourceDependency.js +127 -0
- package/lib/dependencies/ImportContextDependency.js +4 -0
- package/lib/dependencies/ImportDependency.js +5 -0
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
- package/lib/dependencies/ImportMetaPlugin.js +6 -0
- package/lib/dependencies/ImportParserPlugin.js +9 -2
- package/lib/dependencies/ImportPhase.js +7 -3
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +2 -0
- package/lib/dependencies/JsonExportsDependency.js +6 -1
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +2 -0
- package/lib/dependencies/LoaderPlugin.js +4 -1
- package/lib/dependencies/LocalModule.js +4 -0
- package/lib/dependencies/LocalModuleDependency.js +4 -0
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
- package/lib/dependencies/ModuleDependency.js +7 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +6 -1
- package/lib/dependencies/PureExpressionDependency.js +7 -1
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
- package/lib/dependencies/RequireEnsureDependency.js +4 -0
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +4 -0
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +3 -0
- package/lib/dependencies/RequireResolveDependency.js +1 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
- package/lib/dependencies/StaticExportsDependency.js +3 -0
- package/lib/dependencies/SystemPlugin.js +5 -2
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/URLContextDependency.js +3 -0
- package/lib/dependencies/URLDependency.js +6 -0
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +4 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
- package/lib/dependencies/WorkerDependency.js +6 -1
- package/lib/dependencies/WorkerPlugin.js +11 -3
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +1 -0
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
- package/lib/{DllModule.js → dll/DllModule.js} +35 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
- package/lib/electron/ElectronTargetPlugin.js +2 -1
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
- package/lib/errors/JSONParseError.js +114 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
- package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
- package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
- package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
- package/lib/errors/NonErrorEmittedError.js +28 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +20 -1
- package/lib/hmr/lazyCompilationBackend.js +2 -0
- package/lib/html/HtmlGenerator.js +379 -0
- package/lib/html/HtmlModulesPlugin.js +433 -0
- package/lib/html/HtmlParser.js +1489 -0
- package/lib/html/walkHtmlTokens.js +2733 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +22 -1
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +39 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
- package/lib/javascript/BasicEvaluatedExpression.js +4 -2
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
- package/lib/javascript/JavascriptGenerator.js +10 -0
- package/lib/javascript/JavascriptModulesPlugin.js +112 -9
- package/lib/javascript/JavascriptParser.js +360 -16
- package/lib/javascript/JavascriptParserHelpers.js +7 -1
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +14 -25
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +16 -0
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +86 -1
- package/lib/library/SystemLibraryPlugin.js +8 -0
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +2 -1
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +2 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +62 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
- package/lib/optimize/InnerGraph.js +16 -1
- package/lib/optimize/InnerGraphPlugin.js +14 -2
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
- package/lib/optimize/RealContentHashPlugin.js +104 -26
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
- package/lib/optimize/SplitChunksPlugin.js +50 -2
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +18 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
- package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
- package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +43 -1
- package/lib/schemes/VirtualUrlPlugin.js +7 -2
- package/lib/serialization/AggregateErrorSerializer.js +2 -0
- package/lib/serialization/ArraySerializer.js +2 -0
- package/lib/serialization/BinaryMiddleware.js +20 -1
- package/lib/serialization/DateObjectSerializer.js +2 -0
- package/lib/serialization/ErrorObjectSerializer.js +3 -0
- package/lib/serialization/FileMiddleware.js +21 -0
- package/lib/serialization/MapObjectSerializer.js +2 -0
- package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
- package/lib/serialization/ObjectMiddleware.js +23 -0
- package/lib/serialization/PlainObjectSerializer.js +7 -0
- package/lib/serialization/RegExpObjectSerializer.js +2 -0
- package/lib/serialization/Serializer.js +5 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +2 -0
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +15 -0
- package/lib/sharing/ConsumeSharedPlugin.js +8 -3
- package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +4 -0
- package/lib/sharing/ProvideSharedModule.js +12 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +5 -2
- package/lib/sharing/SharePlugin.js +2 -1
- package/lib/sharing/ShareRuntimeModule.js +1 -0
- package/lib/sharing/resolveMatchedConfigs.js +4 -1
- package/lib/sharing/utils.js +8 -0
- package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
- package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
- package/lib/stats/StatsFactory.js +13 -1
- package/lib/stats/StatsPrinter.js +7 -0
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +8 -2
- package/lib/util/AppendOnlyStackedSet.js +15 -0
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +22 -2
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +21 -0
- package/lib/util/LazySet.js +39 -0
- package/lib/util/LocConverter.js +53 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +14 -1
- package/lib/util/SetHelpers.js +3 -0
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +45 -0
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +13 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +33 -0
- package/lib/util/binarySearchBounds.js +1 -0
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +34 -3
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +9 -3
- package/lib/util/conventions.js +46 -1
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +1 -0
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +20 -0
- package/lib/util/extractSourceMap.js +1 -0
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +5 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
- package/lib/util/fs.js +71 -8
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/hash-digest.js +8 -0
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +67 -0
- package/lib/util/internalSerializables.js +35 -19
- package/lib/util/magicComment.js +10 -6
- package/lib/util/makeSerializable.js +6 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +1 -0
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +1 -0
- package/lib/util/registerExternalSerializer.js +20 -0
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
- package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
- package/lib/wasm-sync/WebAssemblyParser.js +2 -0
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
- package/lib/web/FetchCompileWasmPlugin.js +13 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +13 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/package.json +31 -31
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +161 -57
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +22 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +5325 -353
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
package/lib/util/identifier.js
CHANGED
|
@@ -11,6 +11,7 @@ const SEGMENTS_SPLIT_REGEXP = /([|!])/;
|
|
|
11
11
|
const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
+
* Relative path to request.
|
|
14
15
|
* @param {string} relativePath relative path
|
|
15
16
|
* @returns {string} request
|
|
16
17
|
*/
|
|
@@ -22,6 +23,7 @@ const relativePathToRequest = (relativePath) => {
|
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
/**
|
|
26
|
+
* Absolute to request.
|
|
25
27
|
* @param {string} context context for relative path
|
|
26
28
|
* @param {string} maybeAbsolutePath path to make relative
|
|
27
29
|
* @returns {string} relative path in request style
|
|
@@ -70,6 +72,7 @@ const absoluteToRequest = (context, maybeAbsolutePath) => {
|
|
|
70
72
|
};
|
|
71
73
|
|
|
72
74
|
/**
|
|
75
|
+
* Request to absolute.
|
|
73
76
|
* @param {string} context context for relative path
|
|
74
77
|
* @param {string} relativePath path
|
|
75
78
|
* @returns {string} absolute path
|
|
@@ -84,27 +87,32 @@ const requestToAbsolute = (context, relativePath) => {
|
|
|
84
87
|
/** @typedef {EXPECTED_OBJECT} AssociatedObjectForCache */
|
|
85
88
|
|
|
86
89
|
/**
|
|
90
|
+
* Defines the make cacheable result type used by this module.
|
|
87
91
|
* @template T
|
|
88
92
|
* @typedef {(value: string, cache?: AssociatedObjectForCache) => T} MakeCacheableResult
|
|
89
93
|
*/
|
|
90
94
|
|
|
91
95
|
/**
|
|
96
|
+
* Defines the bind cache result fn type used by this module.
|
|
92
97
|
* @template T
|
|
93
98
|
* @typedef {(value: string) => T} BindCacheResultFn
|
|
94
99
|
*/
|
|
95
100
|
|
|
96
101
|
/**
|
|
102
|
+
* Defines the bind cache type used by this module.
|
|
97
103
|
* @template T
|
|
98
104
|
* @typedef {(cache: AssociatedObjectForCache) => BindCacheResultFn<T>} BindCache
|
|
99
105
|
*/
|
|
100
106
|
|
|
101
107
|
/**
|
|
108
|
+
* Returns } cacheable function.
|
|
102
109
|
* @template T
|
|
103
110
|
* @param {((value: string) => T)} realFn real function
|
|
104
111
|
* @returns {MakeCacheableResult<T> & { bindCache: BindCache<T> }} cacheable function
|
|
105
112
|
*/
|
|
106
113
|
const makeCacheable = (realFn) => {
|
|
107
114
|
/**
|
|
115
|
+
* Defines the cache item type used by this module.
|
|
108
116
|
* @template T
|
|
109
117
|
* @typedef {Map<string, T>} CacheItem
|
|
110
118
|
*/
|
|
@@ -112,6 +120,7 @@ const makeCacheable = (realFn) => {
|
|
|
112
120
|
const cache = new WeakMap();
|
|
113
121
|
|
|
114
122
|
/**
|
|
123
|
+
* Returns cache item.
|
|
115
124
|
* @param {AssociatedObjectForCache} associatedObjectForCache an object to which the cache will be attached
|
|
116
125
|
* @returns {CacheItem<T>} cache item
|
|
117
126
|
*/
|
|
@@ -139,6 +148,7 @@ const makeCacheable = (realFn) => {
|
|
|
139
148
|
fn.bindCache = (associatedObjectForCache) => {
|
|
140
149
|
const cache = getCache(associatedObjectForCache);
|
|
141
150
|
/**
|
|
151
|
+
* Returns value.
|
|
142
152
|
* @param {string} str string
|
|
143
153
|
* @returns {T} value
|
|
144
154
|
*/
|
|
@@ -161,6 +171,7 @@ const makeCacheable = (realFn) => {
|
|
|
161
171
|
/** @typedef {(value: string, associatedObjectForCache?: AssociatedObjectForCache) => BindContextCacheForContextResultFn} BindContextCacheForContext */
|
|
162
172
|
|
|
163
173
|
/**
|
|
174
|
+
* Creates cacheable with context.
|
|
164
175
|
* @param {(context: string, identifier: string) => string} fn function
|
|
165
176
|
* @returns {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} cacheable function with context
|
|
166
177
|
*/
|
|
@@ -211,6 +222,7 @@ const makeCacheableWithContext = (fn) => {
|
|
|
211
222
|
}
|
|
212
223
|
|
|
213
224
|
/**
|
|
225
|
+
* Returns the returned relative path.
|
|
214
226
|
* @param {string} context context used to create relative path
|
|
215
227
|
* @param {string} identifier identifier used to create relative path
|
|
216
228
|
* @returns {string} the returned relative path
|
|
@@ -256,6 +268,7 @@ const makeCacheableWithContext = (fn) => {
|
|
|
256
268
|
}
|
|
257
269
|
|
|
258
270
|
/**
|
|
271
|
+
* Returns the returned relative path.
|
|
259
272
|
* @param {string} identifier identifier used to create relative path
|
|
260
273
|
* @returns {string} the returned relative path
|
|
261
274
|
*/
|
|
@@ -276,6 +289,7 @@ const makeCacheableWithContext = (fn) => {
|
|
|
276
289
|
};
|
|
277
290
|
|
|
278
291
|
/**
|
|
292
|
+
* Make paths relative.
|
|
279
293
|
* @param {string} context context for relative path
|
|
280
294
|
* @param {string} identifier identifier for path
|
|
281
295
|
* @returns {string} a converted relative path
|
|
@@ -287,6 +301,7 @@ const _makePathsRelative = (context, identifier) =>
|
|
|
287
301
|
.join("");
|
|
288
302
|
|
|
289
303
|
/**
|
|
304
|
+
* Make paths absolute.
|
|
290
305
|
* @param {string} context context for relative path
|
|
291
306
|
* @param {string} identifier identifier for path
|
|
292
307
|
* @returns {string} a converted relative path
|
|
@@ -298,6 +313,7 @@ const _makePathsAbsolute = (context, identifier) =>
|
|
|
298
313
|
.join("");
|
|
299
314
|
|
|
300
315
|
/**
|
|
316
|
+
* Returns a new request string avoiding absolute paths when possible.
|
|
301
317
|
* @param {string} context absolute context path
|
|
302
318
|
* @param {string} request any request string may containing absolute paths, query string, etc.
|
|
303
319
|
* @returns {string} a new request string avoiding absolute paths when possible
|
|
@@ -311,6 +327,7 @@ const _contextify = (context, request) =>
|
|
|
311
327
|
const contextify = makeCacheableWithContext(_contextify);
|
|
312
328
|
|
|
313
329
|
/**
|
|
330
|
+
* Returns a new request string using absolute paths when possible.
|
|
314
331
|
* @param {string} context absolute context path
|
|
315
332
|
* @param {string} request any request string
|
|
316
333
|
* @returns {string} a new request string using absolute paths when possible
|
|
@@ -332,6 +349,7 @@ const ZERO_ESCAPE_REGEXP = /\0(.)/g;
|
|
|
332
349
|
/** @typedef {{ resource: string, path: string, query: string }} ParsedResourceWithoutFragment */
|
|
333
350
|
|
|
334
351
|
/**
|
|
352
|
+
* Returns parsed parts.
|
|
335
353
|
* @param {string} str the path with query and fragment
|
|
336
354
|
* @returns {ParsedResource} parsed parts
|
|
337
355
|
*/
|
|
@@ -428,6 +446,7 @@ const _parseResourceWithoutFragment = (str) => {
|
|
|
428
446
|
};
|
|
429
447
|
|
|
430
448
|
/**
|
|
449
|
+
* Returns repeated ../ to leave the directory of the provided filename to be back on output dir.
|
|
431
450
|
* @param {string} filename the filename which should be undone
|
|
432
451
|
* @param {string} outputPath the output path that is restored (only relevant when filename contains "..")
|
|
433
452
|
* @param {boolean} enforceRelative true returns ./ for empty paths
|
|
@@ -460,9 +479,57 @@ const getUndoPath = (filename, outputPath, enforceRelative) => {
|
|
|
460
479
|
: append;
|
|
461
480
|
};
|
|
462
481
|
|
|
482
|
+
const HASH_REGEXP = /(?<!\0)#/g;
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Escape `#` characters that appear inside a path request's directory portion
|
|
486
|
+
* with the `\0#` escape recognized by enhanced-resolve, so a project located at
|
|
487
|
+
* a path like `/home/user/proj#1/` (or `./proj#1/`) resolves correctly. Applies
|
|
488
|
+
* to absolute paths (Unix or Windows) and relative paths (starting with `./` or
|
|
489
|
+
* `../`). Only triggers when a query string is present, because that is the case
|
|
490
|
+
* where the resolver's parseIdentifier fails (without a `?`, the resolver
|
|
491
|
+
* handles directory `#` via its own fallback). A `#` after the last path
|
|
492
|
+
* separator is left alone so that explicit fragment requests like
|
|
493
|
+
* `/abs/path/file.js#fragment` still behave the same. Bare module specifiers
|
|
494
|
+
* are not touched. Already-escaped `\0#` sequences are preserved so the
|
|
495
|
+
* explicit opt-out remains stable.
|
|
496
|
+
* @param {string} request request to potentially escape
|
|
497
|
+
* @returns {string} request with directory `#` characters escaped
|
|
498
|
+
*/
|
|
499
|
+
const escapeHashInPathRequest = (request) => {
|
|
500
|
+
if (request.length === 0) return request;
|
|
501
|
+
const queryStart = request.indexOf("?");
|
|
502
|
+
if (queryStart < 0) return request;
|
|
503
|
+
const hashStart = request.indexOf("#");
|
|
504
|
+
if (hashStart < 0 || hashStart >= queryStart) return request;
|
|
505
|
+
const c0 = request.charCodeAt(0);
|
|
506
|
+
const isAbsolute =
|
|
507
|
+
c0 === 47 /* "/" */ || WINDOWS_ABS_PATH_REGEXP.test(request);
|
|
508
|
+
let isRelative = false;
|
|
509
|
+
if (!isAbsolute && c0 === 46 /* "." */) {
|
|
510
|
+
const c1 = request.charCodeAt(1);
|
|
511
|
+
if (c1 === 47 || c1 === 92 /* "/" or "\" */) {
|
|
512
|
+
isRelative = true;
|
|
513
|
+
} else if (c1 === 46 /* "." */) {
|
|
514
|
+
const c2 = request.charCodeAt(2);
|
|
515
|
+
if (c2 === 47 || c2 === 92) isRelative = true;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
if (!isAbsolute && !isRelative) return request;
|
|
519
|
+
const lastSep = Math.max(
|
|
520
|
+
request.lastIndexOf("/", queryStart - 1),
|
|
521
|
+
request.lastIndexOf("\\", queryStart - 1)
|
|
522
|
+
);
|
|
523
|
+
if (hashStart >= lastSep) return request;
|
|
524
|
+
const pathPart = request.slice(0, lastSep);
|
|
525
|
+
return pathPart.replace(HASH_REGEXP, "\0#") + request.slice(lastSep);
|
|
526
|
+
};
|
|
527
|
+
|
|
463
528
|
module.exports.absolutify = absolutify;
|
|
464
529
|
module.exports.contextify = contextify;
|
|
530
|
+
module.exports.escapeHashInPathRequest = escapeHashInPathRequest;
|
|
465
531
|
module.exports.getUndoPath = getUndoPath;
|
|
532
|
+
module.exports.makeCacheable = makeCacheable;
|
|
466
533
|
module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
|
|
467
534
|
module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
|
|
468
535
|
module.exports.parseResource = makeCacheable(_parseResource);
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
// to process this
|
|
13
13
|
module.exports = {
|
|
14
14
|
AsyncDependenciesBlock: () => require("../AsyncDependenciesBlock"),
|
|
15
|
-
CommentCompilationWarning: () => require("../CommentCompilationWarning"),
|
|
16
15
|
ContextModule: () => require("../ContextModule"),
|
|
17
16
|
"cache/PackFileCacheStrategy": () =>
|
|
18
17
|
require("../cache/PackFileCacheStrategy"),
|
|
@@ -109,6 +108,14 @@ module.exports = {
|
|
|
109
108
|
require("../dependencies/HarmonyImportSpecifierDependency"),
|
|
110
109
|
"dependencies/HarmonyEvaluatedImportSpecifierDependency": () =>
|
|
111
110
|
require("../dependencies/HarmonyEvaluatedImportSpecifierDependency"),
|
|
111
|
+
"dependencies/HtmlInlineScriptDependency": () =>
|
|
112
|
+
require("../dependencies/HtmlInlineScriptDependency"),
|
|
113
|
+
"dependencies/HtmlInlineStyleDependency": () =>
|
|
114
|
+
require("../dependencies/HtmlInlineStyleDependency"),
|
|
115
|
+
"dependencies/HtmlScriptSrcDependency": () =>
|
|
116
|
+
require("../dependencies/HtmlScriptSrcDependency"),
|
|
117
|
+
"dependencies/HtmlSourceDependency": () =>
|
|
118
|
+
require("../dependencies/HtmlSourceDependency"),
|
|
112
119
|
"dependencies/ImportContextDependency": () =>
|
|
113
120
|
require("../dependencies/ImportContextDependency"),
|
|
114
121
|
"dependencies/ImportDependency": () =>
|
|
@@ -179,23 +186,14 @@ module.exports = {
|
|
|
179
186
|
"json/JsonData": () => require("../json/JsonData"),
|
|
180
187
|
"optimize/ConcatenatedModule": () =>
|
|
181
188
|
require("../optimize/ConcatenatedModule"),
|
|
182
|
-
|
|
189
|
+
|
|
183
190
|
DependenciesBlock: () => require("../DependenciesBlock"),
|
|
184
|
-
DllModule: () => require("../DllModule"),
|
|
185
191
|
ExternalModule: () => require("../ExternalModule"),
|
|
186
192
|
FileSystemInfo: () => require("../FileSystemInfo"),
|
|
187
193
|
InitFragment: () => require("../InitFragment"),
|
|
188
|
-
InvalidDependenciesModuleWarning: () =>
|
|
189
|
-
require("../InvalidDependenciesModuleWarning"),
|
|
190
|
-
Module: () => require("../Module"),
|
|
191
|
-
ModuleBuildError: () => require("../ModuleBuildError"),
|
|
192
|
-
ModuleDependencyWarning: () => require("../ModuleDependencyWarning"),
|
|
193
|
-
ModuleError: () => require("../ModuleError"),
|
|
194
194
|
ModuleGraph: () => require("../ModuleGraph"),
|
|
195
|
-
ModuleParseError: () => require("../ModuleParseError"),
|
|
196
|
-
ModuleWarning: () => require("../ModuleWarning"),
|
|
197
195
|
NormalModule: () => require("../NormalModule"),
|
|
198
|
-
CssModule: () => require("../CssModule"),
|
|
196
|
+
CssModule: () => require("../css/CssModule"),
|
|
199
197
|
RawDataUrlModule: () => require("../asset/RawDataUrlModule"),
|
|
200
198
|
RawModule: () => require("../RawModule"),
|
|
201
199
|
"sharing/ConsumeSharedModule": () =>
|
|
@@ -208,14 +206,32 @@ module.exports = {
|
|
|
208
206
|
require("../sharing/ProvideSharedDependency"),
|
|
209
207
|
"sharing/ProvideForSharedDependency": () =>
|
|
210
208
|
require("../sharing/ProvideForSharedDependency"),
|
|
211
|
-
UnsupportedFeatureWarning: () => require("../UnsupportedFeatureWarning"),
|
|
212
|
-
"util/LazySet": () => require("../util/LazySet"),
|
|
213
|
-
UnhandledSchemeError: () => require("../UnhandledSchemeError"),
|
|
214
|
-
NodeStuffInWebError: () => require("../NodeStuffInWebError"),
|
|
215
|
-
EnvironmentNotSupportAsyncWarning: () =>
|
|
216
|
-
require("../EnvironmentNotSupportAsyncWarning"),
|
|
217
|
-
WebpackError: () => require("../WebpackError"),
|
|
218
209
|
|
|
210
|
+
"errors/WebpackError": () => require("../errors/WebpackError"),
|
|
211
|
+
"errors/InvalidDependenciesModuleWarning": () =>
|
|
212
|
+
require("../errors/InvalidDependenciesModuleWarning"),
|
|
213
|
+
"errors/Module": () => require("../Module"),
|
|
214
|
+
"errors/ModuleParseError": () => require("../errors/ModuleParseError"),
|
|
215
|
+
"errors/ModuleWarning": () => require("../errors/ModuleWarning"),
|
|
216
|
+
"errors/ModuleBuildError": () => require("../errors/ModuleBuildError"),
|
|
217
|
+
"errors/ModuleDependencyWarning": () =>
|
|
218
|
+
require("../errors/ModuleDependencyWarning"),
|
|
219
|
+
"errors/ModuleError": () => require("../errors/ModuleError"),
|
|
220
|
+
"errors/UnhandledSchemeError": () =>
|
|
221
|
+
require("../errors/UnhandledSchemeError"),
|
|
222
|
+
"errors/UnsupportedFeatureWarning": () =>
|
|
223
|
+
require("../errors/UnsupportedFeatureWarning"),
|
|
224
|
+
"errors/EnvironmentNotSupportAsyncWarning": () =>
|
|
225
|
+
require("../errors/EnvironmentNotSupportAsyncWarning"),
|
|
226
|
+
"errors/CommentCompilationWarning": () =>
|
|
227
|
+
require("../errors/CommentCompilationWarning"),
|
|
228
|
+
"errors/NodeStuffInWebError": () => require("../errors/NodeStuffInWebError"),
|
|
229
|
+
"errors/JSONParseError": () => require("../errors/JSONParseError"),
|
|
230
|
+
|
|
231
|
+
"dll/DelegatedModule": () => require("../dll/DelegatedModule"),
|
|
232
|
+
"dll/DllModule": () => require("../dll/DllModule"),
|
|
233
|
+
|
|
234
|
+
"util/LazySet": () => require("../util/LazySet"),
|
|
219
235
|
"util/registerExternalSerializer": () => {
|
|
220
236
|
// already registered
|
|
221
237
|
}
|
package/lib/util/magicComment.js
CHANGED
|
@@ -9,17 +9,21 @@ const memoize = require("./memoize");
|
|
|
9
9
|
|
|
10
10
|
const getVm = memoize(() => require("vm"));
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
module.exports.CompilerHintNotationRegExp = Object.freeze({
|
|
13
|
+
Pure: /^\s*(?:#|@)__PURE__\s*$/,
|
|
14
|
+
NoSideEffects: /^\s*[#@]__NO_SIDE_EFFECTS__\s*$/
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* regexp to match at least one "magic comment"
|
|
19
|
+
* @returns {import("vm").Context} magic comment context
|
|
20
|
+
*/
|
|
13
21
|
module.exports.createMagicCommentContext = () =>
|
|
14
22
|
getVm().createContext(undefined, {
|
|
15
23
|
name: "Webpack Magic Comment Parser",
|
|
16
24
|
codeGeneration: { strings: false, wasm: false }
|
|
17
25
|
});
|
|
26
|
+
|
|
18
27
|
module.exports.webpackCommentRegExp = new RegExp(
|
|
19
28
|
/(^|\W)webpack[A-Z][A-Za-z]+:/
|
|
20
29
|
);
|
|
21
|
-
|
|
22
|
-
// regexp to match at least one "magic comment"
|
|
23
|
-
/**
|
|
24
|
-
* @returns {import("vm").Context} magic comment context
|
|
25
|
-
*/
|
|
@@ -12,15 +12,18 @@ const { register } = require("./serialization");
|
|
|
12
12
|
|
|
13
13
|
/** @typedef {{ serialize: (context: ObjectSerializerContext) => void, deserialize: (context: ObjectDeserializerContext) => void }} SerializableClass */
|
|
14
14
|
/**
|
|
15
|
+
* Defines the serializable class constructor type used by this module.
|
|
15
16
|
* @template {SerializableClass} T
|
|
16
17
|
* @typedef {(new (...params: EXPECTED_ANY[]) => T) & { deserialize?: (context: ObjectDeserializerContext) => T }} SerializableClassConstructor
|
|
17
18
|
*/
|
|
18
19
|
|
|
19
20
|
/**
|
|
21
|
+
* Represents ClassSerializer.
|
|
20
22
|
* @template {SerializableClass} T
|
|
21
23
|
*/
|
|
22
24
|
class ClassSerializer {
|
|
23
25
|
/**
|
|
26
|
+
* Creates an instance of ClassSerializer.
|
|
24
27
|
* @param {SerializableClassConstructor<T>} Constructor constructor
|
|
25
28
|
*/
|
|
26
29
|
constructor(Constructor) {
|
|
@@ -28,6 +31,7 @@ class ClassSerializer {
|
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
/**
|
|
34
|
+
* Serializes this instance into the provided serializer context.
|
|
31
35
|
* @param {T} obj obj
|
|
32
36
|
* @param {ObjectSerializerContext} context context
|
|
33
37
|
*/
|
|
@@ -36,6 +40,7 @@ class ClassSerializer {
|
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
/**
|
|
43
|
+
* Restores this instance from the provided deserializer context.
|
|
39
44
|
* @param {ObjectDeserializerContext} context context
|
|
40
45
|
* @returns {T} obj
|
|
41
46
|
*/
|
|
@@ -50,6 +55,7 @@ class ClassSerializer {
|
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
/**
|
|
58
|
+
* Processes the provided constructor.
|
|
53
59
|
* @template {Constructor} T
|
|
54
60
|
* @param {T} Constructor the constructor
|
|
55
61
|
* @param {string} request the request which will be required when deserializing
|
package/lib/util/memoize.js
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
+
* Defines the function returning type used by this module.
|
|
8
9
|
* @template T
|
|
9
10
|
* @typedef {() => T} FunctionReturning
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
13
|
/**
|
|
14
|
+
* Returns new function.
|
|
13
15
|
* @template T
|
|
14
16
|
* @param {FunctionReturning<T>} fn memorized function
|
|
15
17
|
* @returns {FunctionReturning<T>} new function
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const { extname } = require("path");
|
|
8
|
+
const db = require("mime-db");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* RegExp to match type in RFC 6838
|
|
12
|
+
*
|
|
13
|
+
* type-name = restricted-name
|
|
14
|
+
* subtype-name = restricted-name
|
|
15
|
+
* restricted-name = restricted-name-first *126restricted-name-chars
|
|
16
|
+
* restricted-name-first = ALPHA / DIGIT
|
|
17
|
+
* restricted-name-chars = ALPHA / DIGIT / "!" / "#" / "$" / "&" / "-" / "^" / "_"
|
|
18
|
+
* restricted-name-chars =/ "." ; Characters before first dot always specify a facet name
|
|
19
|
+
* restricted-name-chars =/ "+" ; Characters after last plus always specify a structured syntax suffix
|
|
20
|
+
* ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
|
21
|
+
* DIGIT = %x30-39 ; 0-9
|
|
22
|
+
*/
|
|
23
|
+
const TYPE_REGEXP =
|
|
24
|
+
/^ *(([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126})) *(?:;.*)?$/;
|
|
25
|
+
const extensions = Object.create(null);
|
|
26
|
+
const types = Object.create(null);
|
|
27
|
+
|
|
28
|
+
// Score RFC facets (see https://tools.ietf.org/html/rfc6838#section-3)
|
|
29
|
+
|
|
30
|
+
/** @type {Record<string, number>} */
|
|
31
|
+
const FACET_SCORES = {
|
|
32
|
+
"prs.": 100,
|
|
33
|
+
"x-": 200,
|
|
34
|
+
"x.": 300,
|
|
35
|
+
"vnd.": 400,
|
|
36
|
+
default: 900
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** @typedef {"nginx" | "apache" | "iana" | "default"} SourceScore */
|
|
40
|
+
|
|
41
|
+
// Score mime source (Logic originally from `jshttp/mime-types` module)
|
|
42
|
+
/** @type {Record<SourceScore, number>} */
|
|
43
|
+
const SOURCE_SCORES = {
|
|
44
|
+
nginx: 10,
|
|
45
|
+
apache: 20,
|
|
46
|
+
iana: 40,
|
|
47
|
+
default: 30
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** @type {Record<string, number>} */
|
|
51
|
+
const TYPE_SCORES = {
|
|
52
|
+
// prefer application/xml over text/xml
|
|
53
|
+
// prefer application/rtf over text/rtf
|
|
54
|
+
application: 1,
|
|
55
|
+
|
|
56
|
+
// prefer font/woff over application/font-woff
|
|
57
|
+
font: 2,
|
|
58
|
+
|
|
59
|
+
// prefer video/mp4 over audio/mp4 over application/mp4
|
|
60
|
+
// See https://www.rfc-editor.org/rfc/rfc4337.html#section-2
|
|
61
|
+
audio: 2,
|
|
62
|
+
video: 3,
|
|
63
|
+
|
|
64
|
+
default: 0
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param {string} mimeType mime type
|
|
69
|
+
* @param {SourceScore=} source source
|
|
70
|
+
* @returns {number} min score
|
|
71
|
+
*/
|
|
72
|
+
function mimeScore(mimeType, source = "default") {
|
|
73
|
+
if (mimeType === "application/octet-stream") {
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const [type, subtype] = mimeType.split("/");
|
|
78
|
+
|
|
79
|
+
const facet = subtype.replace(/(\.|x-).*/, "$1");
|
|
80
|
+
|
|
81
|
+
const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
|
|
82
|
+
const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
|
|
83
|
+
const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
|
|
84
|
+
|
|
85
|
+
// All else being equal prefer shorter types
|
|
86
|
+
const lengthScore = 1 - mimeType.length / 100;
|
|
87
|
+
|
|
88
|
+
return facetScore + sourceScore + typeScore + lengthScore;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @param {string} ext extension
|
|
93
|
+
* @param {string} type0 the first type
|
|
94
|
+
* @param {string} type1 the second type
|
|
95
|
+
* @returns {string} preferred type
|
|
96
|
+
*/
|
|
97
|
+
const preferredType = (ext, type0, type1) => {
|
|
98
|
+
const score0 = type0 ? mimeScore(type0, db[type0].source) : 0;
|
|
99
|
+
const score1 = type1 ? mimeScore(type1, db[type1].source) : 0;
|
|
100
|
+
|
|
101
|
+
return score0 > score1 ? type0 : type1;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @param {Record<string, readonly string[]>} extensions extensions
|
|
106
|
+
* @param {Record<string, string>} types types
|
|
107
|
+
*/
|
|
108
|
+
const populate = (extensions, types) => {
|
|
109
|
+
for (const type of Object.keys(db)) {
|
|
110
|
+
const mime = db[type];
|
|
111
|
+
const foundExtensions = mime.extensions;
|
|
112
|
+
|
|
113
|
+
if (!foundExtensions || foundExtensions.length === 0) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// mime -> extensions
|
|
118
|
+
extensions[type] = foundExtensions;
|
|
119
|
+
|
|
120
|
+
// extension -> mime
|
|
121
|
+
for (let i = 0; i < foundExtensions.length; i++) {
|
|
122
|
+
const extension = foundExtensions[i];
|
|
123
|
+
|
|
124
|
+
types[extension] = preferredType(extension, types[extension], type);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
populate(extensions, types);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get the default extension for a MIME type.
|
|
133
|
+
* @param {string} type type
|
|
134
|
+
* @returns {undefined | string} resolve extension
|
|
135
|
+
*/
|
|
136
|
+
const extension = (type) => {
|
|
137
|
+
if (!type) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const match = TYPE_REGEXP.exec(type);
|
|
142
|
+
|
|
143
|
+
if (!match) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const possibleExtensions = extensions[match[1].toLowerCase()];
|
|
148
|
+
|
|
149
|
+
if (!possibleExtensions || possibleExtensions.length === 0) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return possibleExtensions[0];
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Lookup the MIME type for a file path/extension.
|
|
158
|
+
* @param {string} path path
|
|
159
|
+
* @returns {undefined | string} resolved MIME type
|
|
160
|
+
*/
|
|
161
|
+
const lookup = (path) => {
|
|
162
|
+
if (!path) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// get the extension ("ext" or ".ext" or full path)
|
|
167
|
+
const extension = extname(`x.${path}`).toLowerCase().slice(1);
|
|
168
|
+
|
|
169
|
+
if (!extension) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return types[extension];
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
module.exports = { extension, lookup };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const JSONParseError = require("../errors/JSONParseError");
|
|
8
|
+
|
|
9
|
+
/** @typedef {import("../util/fs").JsonValue} JsonValue */
|
|
10
|
+
|
|
11
|
+
// Inspired by https://github.com/npm/json-parse-even-better-errors
|
|
12
|
+
|
|
13
|
+
// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
|
|
14
|
+
// because the buffer-to-string conversion in `fs.readFileSync()`
|
|
15
|
+
// translates it to FEFF, the UTF-16 BOM.
|
|
16
|
+
/**
|
|
17
|
+
* @param {string | Buffer} txt text
|
|
18
|
+
* @returns {string} text without BOM
|
|
19
|
+
*/
|
|
20
|
+
const stripBOM = (txt) => String(txt).replace(/^\uFEFF/, "");
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @template [R=JsonValue]
|
|
24
|
+
* @callback ParseJsonFn
|
|
25
|
+
* @param {string} raw text
|
|
26
|
+
* @param {(this: EXPECTED_ANY, key: string, value: EXPECTED_ANY) => EXPECTED_ANY=} reviver reviver
|
|
27
|
+
* @returns {R} parsed JSON
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/** @type {ParseJsonFn} */
|
|
31
|
+
const parseJson = (raw, reviver) => {
|
|
32
|
+
const txt = stripBOM(raw);
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(txt, reviver);
|
|
36
|
+
} catch (err) {
|
|
37
|
+
throw new JSONParseError(/** @type {Error} */ (err), raw, txt);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
module.exports = parseJson;
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
+
* Walks a dynamically expanding async work tree with bounded concurrency.
|
|
10
|
+
* Each processed item may enqueue more items through `push`, allowing callers
|
|
11
|
+
* to model breadth-first or depth-first discovery without managing the queue
|
|
12
|
+
* themselves.
|
|
9
13
|
* @template T
|
|
10
14
|
* @template {Error} E
|
|
11
15
|
* @param {Iterable<T>} items initial items
|
|
@@ -22,6 +26,8 @@ const processAsyncTree = (items, concurrency, processor, callback) => {
|
|
|
22
26
|
let processScheduled = true;
|
|
23
27
|
|
|
24
28
|
/**
|
|
29
|
+
* Enqueues a newly discovered item and schedules queue processing when the
|
|
30
|
+
* current concurrency budget allows more work to start.
|
|
25
31
|
* @param {T} item item
|
|
26
32
|
*/
|
|
27
33
|
const push = (item) => {
|
|
@@ -33,6 +39,8 @@ const processAsyncTree = (items, concurrency, processor, callback) => {
|
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
/**
|
|
42
|
+
* Handles completion of a single processor call, propagating the first
|
|
43
|
+
* error and scheduling more queued work when possible.
|
|
36
44
|
* @param {E | null | undefined} err error
|
|
37
45
|
*/
|
|
38
46
|
const processorCallback = (err) => {
|
package/lib/util/property.js
CHANGED