@depup/webpack 5.109.2-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 +5 -5
- package/changes.json +7 -7
- 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 +26 -17
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +4 -7
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +7 -7
- package/lib/Compilation.js +688 -409
- package/lib/Compiler.js +53 -38
- 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 +121 -37
- 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 +101 -14
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +232 -77
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +44 -70
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +32 -47
- 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 +8 -4
- 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 +9 -4
- 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 +141 -85
- package/lib/NormalModuleFactory.js +555 -110
- 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 +332 -169
- 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 +32 -22
- 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 +30 -23
- 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 +261 -79
- 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 +6 -11
- package/lib/container/ModuleFederationPlugin.js +7 -24
- 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 +171 -43
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +57 -24
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +168 -88
- package/lib/css/CssParser.js +1113 -568
- 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 +9579 -232
- 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 +121 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
- 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 +13 -10
- 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 +143 -63
- 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 +27 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
- 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 +155 -62
- 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 +9 -6
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +277 -77
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +282 -162
- 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 +5557 -1155
- 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 +7 -8
- 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 +98 -113
- package/lib/javascript/JavascriptParser.js +242 -99
- 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 +2678 -232
- 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 +72 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +985 -470
- 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 +51 -35
- package/lib/optimize/RealContentHashPlugin.js +10 -6
- 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 +86 -24
- 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 +295 -78
- 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 +4 -4
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +7 -7
- 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 +50 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
- package/lib/stats/StatsFactory.js +25 -26
- 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 +4 -0
- 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 +32 -25
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +670 -36
- 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 +3144 -454
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
package/lib/util/globUtils.js
CHANGED
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const { join: joinPath } = require("./fs");
|
|
10
|
+
const {
|
|
11
|
+
ABSOLUTE_PATH_REGEXP,
|
|
12
|
+
WINDOWS_PATH_SEPARATOR_REGEXP
|
|
13
|
+
} = require("./identifier");
|
|
10
14
|
const memoize = require("./memoize");
|
|
11
15
|
|
|
12
|
-
// watchpack
|
|
16
|
+
// watchpack's glob-to-regexp core, loaded only when a glob is translated
|
|
13
17
|
const getGlobToRegExpSource = memoize(
|
|
14
18
|
() =>
|
|
15
19
|
/** @type {{ util: { globToRegExp: (glob: string) => string } }} */ (
|
|
@@ -68,7 +72,9 @@ const normalizePathSeparators = (s) => {
|
|
|
68
72
|
* @param {string} s string
|
|
69
73
|
* @returns {string} normalized path separators for filesystem paths
|
|
70
74
|
*/
|
|
71
|
-
const normalizePathSeparatorsForPath = (s) =>
|
|
75
|
+
const normalizePathSeparatorsForPath = (s) =>
|
|
76
|
+
// the scan is cheaper than the replace, and most paths have no `\`
|
|
77
|
+
s.includes("\\") ? s.replace(WINDOWS_PATH_SEPARATOR_REGEXP, "/") : s;
|
|
72
78
|
|
|
73
79
|
/**
|
|
74
80
|
* @param {string} s string
|
|
@@ -149,9 +155,26 @@ const extractGlobBaseDir = (pattern) => {
|
|
|
149
155
|
*/
|
|
150
156
|
const quoteRegExpChar = (c) => (/[$()*+\-./?[\\\]^{|}]/.test(c) ? `\\${c}` : c);
|
|
151
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Skips a character class: a `]` right after the `[`, or after its `!`/`^`, is
|
|
160
|
+
* a member rather than the terminator.
|
|
161
|
+
* @param {string} str string
|
|
162
|
+
* @param {number} start index of the `[`
|
|
163
|
+
* @returns {number} index of the closing `]`, or `start` when unterminated
|
|
164
|
+
*/
|
|
165
|
+
const skipCharacterClass = (str, start) => {
|
|
166
|
+
let i = start + 1;
|
|
167
|
+
if (str[i] === "!" || str[i] === "^") i++;
|
|
168
|
+
if (str[i] === "]") i++;
|
|
169
|
+
while (i < str.length && str[i] !== "]") i += str[i] === "\\" ? 2 : 1;
|
|
170
|
+
return i < str.length ? i : start;
|
|
171
|
+
};
|
|
172
|
+
|
|
152
173
|
/**
|
|
153
174
|
* Expands `{a,b}` alternations (escape- and class-aware, nested) into
|
|
154
|
-
* brace-free globs; unmatched braces are kept as literal characters.
|
|
175
|
+
* brace-free globs; unmatched braces are kept as literal characters. A `,`
|
|
176
|
+
* inside a class is a member, as `braces` and picomatch read it, so
|
|
177
|
+
* `import.meta.glob` patterns mean here what they mean to fast-glob.
|
|
155
178
|
* @param {string} glob glob
|
|
156
179
|
* @returns {string[]} brace-free globs
|
|
157
180
|
*/
|
|
@@ -164,10 +187,7 @@ const expandGlobBraces = (glob) => {
|
|
|
164
187
|
if (c === "\\") {
|
|
165
188
|
i++;
|
|
166
189
|
} else if (c === "[") {
|
|
167
|
-
|
|
168
|
-
i += glob[i + 1] === "\\" ? 2 : 1;
|
|
169
|
-
}
|
|
170
|
-
i++;
|
|
190
|
+
i = skipCharacterClass(glob, i);
|
|
171
191
|
} else if (c === "{") {
|
|
172
192
|
if (depth === 0) braceStart = i;
|
|
173
193
|
depth++;
|
|
@@ -199,10 +219,7 @@ const expandGlobBraces = (glob) => {
|
|
|
199
219
|
if (c === "\\") {
|
|
200
220
|
i++;
|
|
201
221
|
} else if (c === "[") {
|
|
202
|
-
|
|
203
|
-
i += inner[i + 1] === "\\" ? 2 : 1;
|
|
204
|
-
}
|
|
205
|
-
i++;
|
|
222
|
+
i = skipCharacterClass(inner, i);
|
|
206
223
|
} else if (c === "{") {
|
|
207
224
|
altDepth++;
|
|
208
225
|
} else if (c === "}") {
|
|
@@ -240,7 +257,6 @@ const fixupGlobRegExpSource = (source) =>
|
|
|
240
257
|
* @returns {string} regexp source without anchors
|
|
241
258
|
*/
|
|
242
259
|
const braceFreeGlobToRegExpSource = (glob) => {
|
|
243
|
-
const globToRegExpSource = getGlobToRegExpSource();
|
|
244
260
|
let source = "";
|
|
245
261
|
let runStart = 0;
|
|
246
262
|
/**
|
|
@@ -249,7 +265,7 @@ const braceFreeGlobToRegExpSource = (glob) => {
|
|
|
249
265
|
const flushRun = (end) => {
|
|
250
266
|
if (runStart < end) {
|
|
251
267
|
source += fixupGlobRegExpSource(
|
|
252
|
-
|
|
268
|
+
getGlobToRegExpSource()(glob.slice(runStart, end))
|
|
253
269
|
);
|
|
254
270
|
}
|
|
255
271
|
};
|
|
@@ -261,18 +277,11 @@ const braceFreeGlobToRegExpSource = (glob) => {
|
|
|
261
277
|
i++;
|
|
262
278
|
runStart = i + 1;
|
|
263
279
|
} else if (c === "[") {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
negated = true;
|
|
268
|
-
end++;
|
|
269
|
-
}
|
|
270
|
-
const bodyStart = end;
|
|
271
|
-
while (end < glob.length && glob[end] !== "]") {
|
|
272
|
-
end += glob[end] === "\\" ? 2 : 1;
|
|
273
|
-
}
|
|
280
|
+
const negated = glob[i + 1] === "!" || glob[i + 1] === "^";
|
|
281
|
+
const bodyStart = i + (negated ? 2 : 1);
|
|
282
|
+
const end = skipCharacterClass(glob, i);
|
|
274
283
|
flushRun(i);
|
|
275
|
-
if (end
|
|
284
|
+
if (end === i) {
|
|
276
285
|
// unterminated class: literal `[`
|
|
277
286
|
source += "\\[";
|
|
278
287
|
runStart = i + 1;
|
|
@@ -326,6 +335,269 @@ const globMatchWithOptions = (pattern, str, options = {}) => {
|
|
|
326
335
|
return regexp !== null && regexp.test(str);
|
|
327
336
|
};
|
|
328
337
|
|
|
338
|
+
// a segment starting with a dot is only reachable by a pattern spelling it out
|
|
339
|
+
const NON_DOT_PREFIX = "(?!\\.)";
|
|
340
|
+
const NON_DOT_SEGMENT = "(?!\\.)[^/]+";
|
|
341
|
+
const CONSECUTIVE_STARS_REGEXP = /\*{2,}/g;
|
|
342
|
+
// a `//` or `/./` the path has to lose before it can be matched
|
|
343
|
+
const UNNORMALIZED_PATH_REGEXP = /\/\/|(?:^|\/)\.(?:\/|$)/;
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Drops the `.` and empty segments of a pattern or a path — they always name
|
|
347
|
+
* the same file. The first and last segment stay, so a leading `./`, a leading
|
|
348
|
+
* `/` and a trailing `/` keep their meaning. A `..` is left alone: resolving it
|
|
349
|
+
* textually is what `path.matchesGlob` does, and it is wrong through a symlink,
|
|
350
|
+
* where `dir/link/../b` is not `dir/b`.
|
|
351
|
+
* @param {string[]} parts segments
|
|
352
|
+
* @returns {string[]} normalized segments
|
|
353
|
+
*/
|
|
354
|
+
const optimizeGlobSegments = (parts) => {
|
|
355
|
+
let changed = false;
|
|
356
|
+
do {
|
|
357
|
+
changed = false;
|
|
358
|
+
for (let i = 1; i < parts.length - 1; i++) {
|
|
359
|
+
if (parts[i] === "." || parts[i] === "") {
|
|
360
|
+
parts.splice(i, 1);
|
|
361
|
+
i--;
|
|
362
|
+
changed = true;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
if (
|
|
366
|
+
parts[0] === "." &&
|
|
367
|
+
parts.length === 2 &&
|
|
368
|
+
(parts[1] === "." || parts[1] === "")
|
|
369
|
+
) {
|
|
370
|
+
parts.pop();
|
|
371
|
+
changed = true;
|
|
372
|
+
}
|
|
373
|
+
} while (changed);
|
|
374
|
+
return parts.length === 0 ? [""] : parts;
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* @param {string} segment segment
|
|
379
|
+
* @param {number} start index of the `(`
|
|
380
|
+
* @returns {number} index of the matching `)`, -1 when unmatched
|
|
381
|
+
*/
|
|
382
|
+
const findExtendedGlobEnd = (segment, start) => {
|
|
383
|
+
let depth = 0;
|
|
384
|
+
for (let i = start; i < segment.length; i++) {
|
|
385
|
+
const c = segment[i];
|
|
386
|
+
if (c === "[") {
|
|
387
|
+
i = skipCharacterClass(segment, i);
|
|
388
|
+
} else if (c === "(") {
|
|
389
|
+
depth++;
|
|
390
|
+
} else if (c === ")" && --depth === 0) {
|
|
391
|
+
return i;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return -1;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* @param {string} inner group body
|
|
399
|
+
* @returns {string[]} top-level `|` alternatives
|
|
400
|
+
*/
|
|
401
|
+
const splitExtendedGlobAlternatives = (inner) => {
|
|
402
|
+
/** @type {string[]} */
|
|
403
|
+
const alternatives = [];
|
|
404
|
+
let start = 0;
|
|
405
|
+
let depth = 0;
|
|
406
|
+
for (let i = 0; i < inner.length; i++) {
|
|
407
|
+
const c = inner[i];
|
|
408
|
+
if (c === "[") {
|
|
409
|
+
i = skipCharacterClass(inner, i);
|
|
410
|
+
} else if (c === "(") {
|
|
411
|
+
depth++;
|
|
412
|
+
} else if (c === ")") {
|
|
413
|
+
depth--;
|
|
414
|
+
} else if (c === "|" && depth === 0) {
|
|
415
|
+
alternatives.push(inner.slice(start, i));
|
|
416
|
+
start = i + 1;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
alternatives.push(inner.slice(start));
|
|
420
|
+
return alternatives;
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* @param {string} segment segment
|
|
425
|
+
* @returns {number} index of the first extended glob prefix, -1 when there is none
|
|
426
|
+
*/
|
|
427
|
+
const findExtendedGlobStart = (segment) => {
|
|
428
|
+
for (let i = 0; i < segment.length - 1; i++) {
|
|
429
|
+
const c = segment[i];
|
|
430
|
+
if (c === "[") {
|
|
431
|
+
i = skipCharacterClass(segment, i);
|
|
432
|
+
} else if (
|
|
433
|
+
segment[i + 1] === "(" &&
|
|
434
|
+
(c === "?" || c === "*" || c === "+" || c === "@" || c === "!")
|
|
435
|
+
) {
|
|
436
|
+
return i;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return -1;
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Whether the segment can match a leading dot, which it does when the dot is
|
|
444
|
+
* literal in the pattern — after an extended glob that matched nothing
|
|
445
|
+
* included, as `*(a).b` matching `.b`.
|
|
446
|
+
* @param {string} segment segment without separators
|
|
447
|
+
* @returns {boolean} segment may match a dot segment
|
|
448
|
+
*/
|
|
449
|
+
const segmentGlobMatchesLeadingDot = (segment) => {
|
|
450
|
+
if (segment.startsWith(".")) return true;
|
|
451
|
+
if (findExtendedGlobStart(segment) !== 0) return false;
|
|
452
|
+
const end = findExtendedGlobEnd(segment, 1);
|
|
453
|
+
if (end === -1) return false;
|
|
454
|
+
const type = segment[0];
|
|
455
|
+
const emptyMatch =
|
|
456
|
+
type === "*" ||
|
|
457
|
+
type === "?" ||
|
|
458
|
+
((type === "@" || type === "+") &&
|
|
459
|
+
splitExtendedGlobAlternatives(segment.slice(2, end)).includes(""));
|
|
460
|
+
return emptyMatch && segmentGlobMatchesLeadingDot(segment.slice(end + 1));
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Whether the segment matches an empty path segment, which only the extended
|
|
465
|
+
* globs that quantify their group do — `!(x)/a` matches `/a`, `@(a|)/a` does
|
|
466
|
+
* not, and neither does a bare `*`.
|
|
467
|
+
* @param {string} segment segment without separators
|
|
468
|
+
* @returns {boolean} segment may match nothing
|
|
469
|
+
*/
|
|
470
|
+
const segmentGlobMatchesEmpty = (segment) => {
|
|
471
|
+
if (segment === "") return true;
|
|
472
|
+
if (findExtendedGlobStart(segment) !== 0) return false;
|
|
473
|
+
const type = segment[0];
|
|
474
|
+
if (type !== "!" && type !== "*" && type !== "?") return false;
|
|
475
|
+
const end = findExtendedGlobEnd(segment, 1);
|
|
476
|
+
return end !== -1 && segmentGlobMatchesEmpty(segment.slice(end + 1));
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Compiles one path segment, extended globs (`+(a|b)`, `!(a)`, …) included.
|
|
481
|
+
* `!(a)` is "anything but `a`", so it is a lookahead over what the rest of the
|
|
482
|
+
* segment matches, not over `a` alone.
|
|
483
|
+
* @param {string} segment segment without separators
|
|
484
|
+
* @returns {string} regexp source
|
|
485
|
+
*/
|
|
486
|
+
const segmentGlobToRegExpSource = (segment) => {
|
|
487
|
+
const start = findExtendedGlobStart(segment);
|
|
488
|
+
const end = start === -1 ? -1 : findExtendedGlobEnd(segment, start + 1);
|
|
489
|
+
if (end === -1) {
|
|
490
|
+
// no extended glob here, and `**` within a segment is a plain `*`
|
|
491
|
+
return braceFreeGlobToRegExpSource(
|
|
492
|
+
segment.replace(CONSECUTIVE_STARS_REGEXP, "*")
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
const prefix = segmentGlobToRegExpSource(segment.slice(0, start));
|
|
496
|
+
const rest = segmentGlobToRegExpSource(segment.slice(end + 1));
|
|
497
|
+
const group = `(?:${splitExtendedGlobAlternatives(
|
|
498
|
+
segment.slice(start + 2, end)
|
|
499
|
+
)
|
|
500
|
+
.map(segmentGlobToRegExpSource)
|
|
501
|
+
.join("|")})`;
|
|
502
|
+
switch (segment[start]) {
|
|
503
|
+
case "?":
|
|
504
|
+
return `${prefix}${group}?${rest}`;
|
|
505
|
+
case "*":
|
|
506
|
+
return `${prefix}${group}*${rest}`;
|
|
507
|
+
case "+":
|
|
508
|
+
return `${prefix}${group}+${rest}`;
|
|
509
|
+
case "@":
|
|
510
|
+
return `${prefix}${group}${rest}`;
|
|
511
|
+
default:
|
|
512
|
+
return `${prefix}(?!${group}${rest}(?:/|$))[^/]*?${rest}`;
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Compiles one brace-free `/`-separated glob to a regexp source with
|
|
518
|
+
* `path.matchesGlob` semantics: `*`, `?` and classes stay within a segment,
|
|
519
|
+
* a whole-segment `**` spans segments, and neither crosses a dot segment.
|
|
520
|
+
* @param {string} glob brace-free glob
|
|
521
|
+
* @returns {string} regexp source without anchors
|
|
522
|
+
*/
|
|
523
|
+
const braceFreeGlobToPathRegExpSource = (glob) => {
|
|
524
|
+
const segments = optimizeGlobSegments(glob.split("/"));
|
|
525
|
+
let source = "";
|
|
526
|
+
let needSeparator = false;
|
|
527
|
+
for (let i = 0; i < segments.length; i++) {
|
|
528
|
+
const segment = segments[i];
|
|
529
|
+
const isLast = i === segments.length - 1;
|
|
530
|
+
if (segment === "") {
|
|
531
|
+
// leading separator (absolute) and trailing one (directory)
|
|
532
|
+
source += "/";
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
if (segment === "**") {
|
|
536
|
+
source += isLast
|
|
537
|
+
? `${needSeparator ? "/" : ""}(?:${NON_DOT_SEGMENT}(?:/${NON_DOT_SEGMENT})*)?`
|
|
538
|
+
: needSeparator
|
|
539
|
+
? `(?:/${NON_DOT_SEGMENT})*`
|
|
540
|
+
: `/?(?:${NON_DOT_SEGMENT}/)*`;
|
|
541
|
+
needSeparator = !isLast && needSeparator;
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
if (needSeparator) source += "/";
|
|
545
|
+
// a segment matches at least one character
|
|
546
|
+
if (!segmentGlobMatchesEmpty(segment)) source += "(?=[^/])";
|
|
547
|
+
if (!segmentGlobMatchesLeadingDot(segment)) source += NON_DOT_PREFIX;
|
|
548
|
+
source += segmentGlobToRegExpSource(segment);
|
|
549
|
+
needSeparator = true;
|
|
550
|
+
}
|
|
551
|
+
// a pattern without a trailing separator still matches a directory path
|
|
552
|
+
return glob.endsWith("/") ? source : `${source}/?`;
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Compiles a glob into a matcher over OS-independent paths: `\` is a path
|
|
557
|
+
* separator in both the pattern and the tested path (never an escape, so a
|
|
558
|
+
* pattern built with `path.resolve` works everywhere; use `[*]` to match a
|
|
559
|
+
* literal `*`), and a relative pattern matches at any depth. Matching follows
|
|
560
|
+
* `path.matchesGlob`, except where its minimatch shows through — see the
|
|
561
|
+
* divergences listed above the corpus in `test/globUtils.unittest.js`.
|
|
562
|
+
* @param {string} pattern glob pattern
|
|
563
|
+
* @param {GlobMatchOptions=} options options
|
|
564
|
+
* @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
|
|
565
|
+
*/
|
|
566
|
+
const createPathGlobMatcher = (pattern, options = {}) => {
|
|
567
|
+
let normalizedPattern = normalizePathSeparatorsForPath(pattern);
|
|
568
|
+
while (normalizedPattern.startsWith("./")) {
|
|
569
|
+
normalizedPattern = normalizedPattern.slice(2);
|
|
570
|
+
}
|
|
571
|
+
if (
|
|
572
|
+
!ABSOLUTE_PATH_REGEXP.test(normalizedPattern) &&
|
|
573
|
+
!normalizedPattern.startsWith("**/")
|
|
574
|
+
) {
|
|
575
|
+
normalizedPattern = `**/${normalizedPattern}`;
|
|
576
|
+
}
|
|
577
|
+
const sources = expandGlobBraces(normalizedPattern).map(
|
|
578
|
+
braceFreeGlobToPathRegExpSource
|
|
579
|
+
);
|
|
580
|
+
const source = sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`;
|
|
581
|
+
/** @type {RegExp} */
|
|
582
|
+
let regexp;
|
|
583
|
+
try {
|
|
584
|
+
regexp = new RegExp(
|
|
585
|
+
`^${source}$`,
|
|
586
|
+
options.caseSensitive === false ? "i" : ""
|
|
587
|
+
);
|
|
588
|
+
} catch (_err) {
|
|
589
|
+
return null;
|
|
590
|
+
}
|
|
591
|
+
return (str) => {
|
|
592
|
+
const normalizedPath = normalizePathSeparatorsForPath(str);
|
|
593
|
+
return regexp.test(
|
|
594
|
+
UNNORMALIZED_PATH_REGEXP.test(normalizedPath)
|
|
595
|
+
? optimizeGlobSegments(normalizedPath.split("/")).join("/")
|
|
596
|
+
: normalizedPath
|
|
597
|
+
);
|
|
598
|
+
};
|
|
599
|
+
};
|
|
600
|
+
|
|
329
601
|
/**
|
|
330
602
|
* @param {string} path path
|
|
331
603
|
* @param {string} baseDir base directory
|
|
@@ -689,8 +961,10 @@ const globPatternBaseReachesDir = (patterns, dirPath) => {
|
|
|
689
961
|
|
|
690
962
|
module.exports = {
|
|
691
963
|
commonGlobBaseDir,
|
|
964
|
+
createPathGlobMatcher,
|
|
692
965
|
escapeGlobPattern,
|
|
693
966
|
extractGlobBaseDir,
|
|
967
|
+
getGlobToRegExpSource,
|
|
694
968
|
globMatchNormalizedWithExplicitDot,
|
|
695
969
|
globMatchWithExplicitDot,
|
|
696
970
|
globMatchWithOptions,
|
|
@@ -10,7 +10,11 @@ const { digest, update } = require("./hash-digest");
|
|
|
10
10
|
/** @type {number} */
|
|
11
11
|
const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING;
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* @import {
|
|
15
|
+
* HashDigest as Encoding
|
|
16
|
+
* } from "../../../declarations/WebpackOptions"
|
|
17
|
+
*/
|
|
14
18
|
|
|
15
19
|
class BatchedHash extends Hash {
|
|
16
20
|
/**
|
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
const Hash = require("../Hash");
|
|
9
9
|
const { digest, update } = require("./hash-digest");
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* @import {
|
|
13
|
+
* HashDigest as Encoding
|
|
14
|
+
* } from "../../../declarations/WebpackOptions"
|
|
15
|
+
*/
|
|
12
16
|
/** @typedef {() => Hash} HashFactory */
|
|
13
17
|
|
|
14
18
|
const BULK_SIZE = 3;
|
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
const Hash = require("../Hash");
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* @import {
|
|
12
|
+
* HashDigest as Encoding
|
|
13
|
+
* } from "../../../declarations/WebpackOptions"
|
|
14
|
+
*/
|
|
11
15
|
|
|
12
16
|
/* istanbul ignore next */
|
|
13
17
|
class DebugHash extends Hash {
|
|
@@ -5,8 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/** @
|
|
9
|
-
/**
|
|
8
|
+
/** @import Hash from "../Hash" */
|
|
9
|
+
/**
|
|
10
|
+
* @import {
|
|
11
|
+
* HashDigest as Encoding
|
|
12
|
+
* } from "../../../declarations/WebpackOptions"
|
|
13
|
+
*/
|
|
10
14
|
|
|
11
15
|
/** @typedef {"26" | "32" | "36" | "49" | "52" | "58" | "62"} Base */
|
|
12
16
|
|
package/lib/util/identifier.js
CHANGED
|
@@ -14,6 +14,7 @@ const ABSOLUTE_PATH_REGEXP = /^(?:[a-z]:)?[\\/]/i;
|
|
|
14
14
|
const WINDOWS_ABS_PATH_REGEXP = /^[a-z]:[\\/]/i;
|
|
15
15
|
const SEGMENTS_SPLIT_REGEXP = /([|!])/;
|
|
16
16
|
const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g;
|
|
17
|
+
const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Relative path to request.
|
|
@@ -566,7 +567,9 @@ const toJsStringLiteral = (str) =>
|
|
|
566
567
|
);
|
|
567
568
|
|
|
568
569
|
module.exports.ABSOLUTE_PATH_REGEXP = ABSOLUTE_PATH_REGEXP;
|
|
570
|
+
module.exports.NODE_MODULES_REGEXP = NODE_MODULES_REGEXP;
|
|
569
571
|
module.exports.WINDOWS_ABS_PATH_REGEXP = WINDOWS_ABS_PATH_REGEXP;
|
|
572
|
+
module.exports.WINDOWS_PATH_SEPARATOR_REGEXP = WINDOWS_PATH_SEPARATOR_REGEXP;
|
|
570
573
|
module.exports.absolutify = absolutify;
|
|
571
574
|
module.exports.contextify = contextify;
|
|
572
575
|
module.exports.contextifySourceUrl = contextifySourceUrl;
|
|
@@ -579,4 +582,5 @@ module.exports.parseResource = makeCacheable(_parseResource);
|
|
|
579
582
|
module.exports.parseResourceWithoutFragment = makeCacheable(
|
|
580
583
|
_parseResourceWithoutFragment
|
|
581
584
|
);
|
|
585
|
+
module.exports.relativePathToRequest = relativePathToRequest;
|
|
582
586
|
module.exports.toJsStringLiteral = toJsStringLiteral;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("../ModuleTypeConstants");
|
|
9
9
|
const { parseResource } = require("./identifier");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
11
|
+
/** @import NormalModuleFactory from "../NormalModuleFactory" */
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* When a built-in module type is only enabled implicitly (`experiments.css` /
|
|
@@ -43,6 +43,8 @@ module.exports = {
|
|
|
43
43
|
require("../dependencies/AMDRequireDependency"),
|
|
44
44
|
"dependencies/AMDRequireItemDependency": () =>
|
|
45
45
|
require("../dependencies/AMDRequireItemDependency"),
|
|
46
|
+
"dependencies/BuildTimeConstDependency": () =>
|
|
47
|
+
require("../dependencies/BuildTimeConstDependency"),
|
|
46
48
|
"dependencies/CachedConstDependency": () =>
|
|
47
49
|
require("../dependencies/CachedConstDependency"),
|
|
48
50
|
"dependencies/CommonJsExportRequireDependency": () =>
|
|
@@ -51,6 +53,8 @@ module.exports = {
|
|
|
51
53
|
require("../dependencies/CommonJsExportsDependency"),
|
|
52
54
|
"dependencies/CommonJsFullRequireDependency": () =>
|
|
53
55
|
require("../dependencies/CommonJsFullRequireDependency"),
|
|
56
|
+
"dependencies/CommonJsObjectExportDependency": () =>
|
|
57
|
+
require("../dependencies/CommonJsObjectExportDependency"),
|
|
54
58
|
"dependencies/CommonJsRequireContextDependency": () =>
|
|
55
59
|
require("../dependencies/CommonJsRequireContextDependency"),
|
|
56
60
|
"dependencies/CommonJsRequireDependency": () =>
|
|
@@ -211,6 +215,8 @@ module.exports = {
|
|
|
211
215
|
require("../errors/InvalidDependenciesModuleWarning"),
|
|
212
216
|
"errors/JSONParseError": () => require("../errors/JSONParseError"),
|
|
213
217
|
"errors/ModuleBuildError": () => require("../errors/ModuleBuildError"),
|
|
218
|
+
"errors/ModuleDependencyError": () =>
|
|
219
|
+
require("../errors/ModuleDependencyError"),
|
|
214
220
|
"errors/ModuleDependencyWarning": () =>
|
|
215
221
|
require("../errors/ModuleDependencyWarning"),
|
|
216
222
|
"errors/ModuleError": () => require("../errors/ModuleError"),
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Declares a module that loads on first use, in the shape a dynamic `import()`
|
|
10
|
+
* has: the accessor resolves to the module and the caller awaits it. The thunk
|
|
11
|
+
* is a `require` until `lib/` moves to ecma modules, which changes that keyword
|
|
12
|
+
* and nothing else — `Promise.resolve` already passes an `import()` promise
|
|
13
|
+
* through. It is never called outside the promise, so nothing here needs a
|
|
14
|
+
* synchronous load.
|
|
15
|
+
*
|
|
16
|
+
* `loaded` reads the module back for a consumer with nowhere to await — a
|
|
17
|
+
* synchronous hook, a dependency template, a generator. It throws until an
|
|
18
|
+
* awaited call has resolved, so every such consumer must sit behind one
|
|
19
|
+
* (`NormalModuleFactory`'s `prepareModuleType`, `Compilation`'s pending runtime
|
|
20
|
+
* modules). A module with no such boundary is required at the top of its file
|
|
21
|
+
* instead of being declared here.
|
|
22
|
+
* @template T
|
|
23
|
+
* @param {() => T | Promise<T>} load loads the module
|
|
24
|
+
* @returns {LazyModuleAccessor<T>} resolves the module, loading it once
|
|
25
|
+
*/
|
|
26
|
+
const lazyModule = (load) => {
|
|
27
|
+
/** @type {Promise<T> | undefined} */
|
|
28
|
+
let promise;
|
|
29
|
+
/** @type {T | undefined} */
|
|
30
|
+
let value;
|
|
31
|
+
const get = () => {
|
|
32
|
+
if (promise === undefined) {
|
|
33
|
+
promise = Promise.resolve(load()).then((module) => (value = module));
|
|
34
|
+
// release the loader and everything it holds
|
|
35
|
+
/** @type {(() => T | Promise<T>) | undefined} */
|
|
36
|
+
(load) = undefined;
|
|
37
|
+
}
|
|
38
|
+
return promise;
|
|
39
|
+
};
|
|
40
|
+
get.loaded = () => {
|
|
41
|
+
if (value === undefined) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
"Lazy module was read before an awaited call resolved it; preload it at the nearest async boundary"
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
};
|
|
48
|
+
return get;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @template T
|
|
53
|
+
* @typedef {(() => Promise<T>) & { loaded: () => T }} LazyModuleAccessor
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
module.exports = lazyModule;
|
|
@@ -6,9 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
const { register } = require("./serialization");
|
|
8
8
|
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @import {
|
|
11
|
+
* Constructor,
|
|
12
|
+
* ObjectDeserializerContext,
|
|
13
|
+
* ObjectSerializerContext
|
|
14
|
+
* } from "../serialization/ObjectMiddleware"
|
|
15
|
+
*/
|
|
12
16
|
|
|
13
17
|
/** @typedef {{ serialize: (context: ObjectSerializerContext) => void, deserialize: (context: ObjectDeserializerContext) => void }} SerializableClass */
|
|
14
18
|
/**
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const SLASH_CHAR_CODE = 47;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Whether a `resolve.alias` name applies to a request. Mirrors `AliasPlugin`:
|
|
12
|
+
* a name matches the whole request or a leading segment of it, and
|
|
13
|
+
* `onlyModule` restricts it to the former.
|
|
14
|
+
* @param {string} request the request as written
|
|
15
|
+
* @param {string} name the alias name, already normalized by enhanced-resolve
|
|
16
|
+
* @param {boolean=} onlyModule whether the alias only matches the whole request
|
|
17
|
+
* @returns {boolean} true when the alias applies to the request
|
|
18
|
+
*/
|
|
19
|
+
const matchAlias = (request, name, onlyModule) => {
|
|
20
|
+
if (!request.startsWith(name)) return false;
|
|
21
|
+
if (request.length === name.length) return true;
|
|
22
|
+
return !onlyModule && request.charCodeAt(name.length) === SLASH_CHAR_CODE;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
module.exports = matchAlias;
|
package/lib/util/mimeTypes.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
const { extname } = require("path");
|
|
8
8
|
const db = require("mime-db");
|
|
9
|
+
const memoize = require("./memoize");
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* RegExp to match type in RFC 6838
|
|
@@ -22,8 +23,6 @@ const db = require("mime-db");
|
|
|
22
23
|
*/
|
|
23
24
|
const TYPE_REGEXP =
|
|
24
25
|
/^ *(([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
26
|
|
|
28
27
|
// Score RFC facets (see https://tools.ietf.org/html/rfc6838#section-3)
|
|
29
28
|
|
|
@@ -126,7 +125,14 @@ const populate = (extensions, types) => {
|
|
|
126
125
|
}
|
|
127
126
|
};
|
|
128
127
|
|
|
129
|
-
|
|
128
|
+
// ~2500 mime-db entries scored against each other; only a build that resolves
|
|
129
|
+
// a type pays for the tables
|
|
130
|
+
const getTables = memoize(() => {
|
|
131
|
+
const extensions = Object.create(null);
|
|
132
|
+
const types = Object.create(null);
|
|
133
|
+
populate(extensions, types);
|
|
134
|
+
return { extensions, types };
|
|
135
|
+
});
|
|
130
136
|
|
|
131
137
|
/**
|
|
132
138
|
* Get the default extension for a MIME type.
|
|
@@ -144,7 +150,7 @@ const extension = (type) => {
|
|
|
144
150
|
return;
|
|
145
151
|
}
|
|
146
152
|
|
|
147
|
-
const possibleExtensions = extensions[match[1].toLowerCase()];
|
|
153
|
+
const possibleExtensions = getTables().extensions[match[1].toLowerCase()];
|
|
148
154
|
|
|
149
155
|
if (!possibleExtensions || possibleExtensions.length === 0) {
|
|
150
156
|
return;
|
|
@@ -170,7 +176,7 @@ const lookup = (path) => {
|
|
|
170
176
|
return;
|
|
171
177
|
}
|
|
172
178
|
|
|
173
|
-
return types[extension];
|
|
179
|
+
return getTables().types[extension];
|
|
174
180
|
};
|
|
175
181
|
|
|
176
182
|
module.exports = { extension, lookup };
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/** @
|
|
8
|
+
/** @import Hash from "./Hash" */
|
|
9
9
|
|
|
10
10
|
const A_CODE = "a".charCodeAt(0);
|
|
11
11
|
|
|
@@ -47,6 +47,7 @@ const digestNonNumericOnlyWithFull = (hash, hashDigest, hashDigestLength) => {
|
|
|
47
47
|
return [nonNumericOnlyHash(full, hashDigestLength), full];
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
+
nonNumericOnlyHash.digestNonNumericOnly = digestNonNumericOnly;
|
|
51
|
+
nonNumericOnlyHash.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;
|
|
52
|
+
|
|
50
53
|
module.exports = nonNumericOnlyHash;
|
|
51
|
-
module.exports.digestNonNumericOnly = digestNonNumericOnly;
|
|
52
|
-
module.exports.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;
|