webpack 5.76.1 → 5.88.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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +4 -0
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +12 -8
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +79 -44
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +20 -3
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +9 -1
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +42 -15
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +194 -194
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +6 -4
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +1 -0
- package/lib/library/UmdLibraryPlugin.js +4 -0
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +6 -0
- package/lib/util/StringXor.js +51 -0
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +14 -1
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +132 -5
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1608 -667
@@ -6,6 +6,7 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const Generator = require("../Generator");
|
9
|
+
const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
|
9
10
|
const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
|
10
11
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
11
12
|
const { compareModulesByIdentifier } = require("../util/comparators");
|
@@ -13,6 +14,7 @@ const memoize = require("../util/memoize");
|
|
13
14
|
const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
|
14
15
|
|
15
16
|
/** @typedef {import("webpack-sources").Source} Source */
|
17
|
+
/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
|
16
18
|
/** @typedef {import("../Compiler")} Compiler */
|
17
19
|
/** @typedef {import("../Module")} Module */
|
18
20
|
/** @typedef {import("../ModuleTemplate")} ModuleTemplate */
|
@@ -26,7 +28,17 @@ const getWebAssemblyJavascriptGenerator = memoize(() =>
|
|
26
28
|
);
|
27
29
|
const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
|
28
30
|
|
31
|
+
const PLUGIN_NAME = "WebAssemblyModulesPlugin";
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @typedef {Object} WebAssemblyModulesPluginOptions
|
35
|
+
* @property {boolean} [mangleImports] mangle imports
|
36
|
+
*/
|
37
|
+
|
29
38
|
class WebAssemblyModulesPlugin {
|
39
|
+
/**
|
40
|
+
* @param {WebAssemblyModulesPluginOptions} options options
|
41
|
+
*/
|
30
42
|
constructor(options) {
|
31
43
|
this.options = options;
|
32
44
|
}
|
@@ -38,7 +50,7 @@ class WebAssemblyModulesPlugin {
|
|
38
50
|
*/
|
39
51
|
apply(compiler) {
|
40
52
|
compiler.hooks.compilation.tap(
|
41
|
-
|
53
|
+
PLUGIN_NAME,
|
42
54
|
(compilation, { normalModuleFactory }) => {
|
43
55
|
compilation.dependencyFactories.set(
|
44
56
|
WebAssemblyImportDependency,
|
@@ -51,16 +63,16 @@ class WebAssemblyModulesPlugin {
|
|
51
63
|
);
|
52
64
|
|
53
65
|
normalModuleFactory.hooks.createParser
|
54
|
-
.for(
|
55
|
-
.tap(
|
66
|
+
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
|
67
|
+
.tap(PLUGIN_NAME, () => {
|
56
68
|
const WebAssemblyParser = getWebAssemblyParser();
|
57
69
|
|
58
70
|
return new WebAssemblyParser();
|
59
71
|
});
|
60
72
|
|
61
73
|
normalModuleFactory.hooks.createGenerator
|
62
|
-
.for(
|
63
|
-
.tap(
|
74
|
+
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
|
75
|
+
.tap(PLUGIN_NAME, () => {
|
64
76
|
const WebAssemblyJavascriptGenerator =
|
65
77
|
getWebAssemblyJavascriptGenerator();
|
66
78
|
const WebAssemblyGenerator = getWebAssemblyGenerator();
|
@@ -71,53 +83,51 @@ class WebAssemblyModulesPlugin {
|
|
71
83
|
});
|
72
84
|
});
|
73
85
|
|
74
|
-
compilation.hooks.renderManifest.tap(
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
codeGenerationResults.getSource(
|
91
|
-
module,
|
92
|
-
chunk.runtime,
|
93
|
-
"webassembly"
|
94
|
-
),
|
95
|
-
filenameTemplate,
|
96
|
-
pathOptions: {
|
86
|
+
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
87
|
+
const { chunkGraph } = compilation;
|
88
|
+
const { chunk, outputOptions, codeGenerationResults } = options;
|
89
|
+
|
90
|
+
for (const module of chunkGraph.getOrderedChunkModulesIterable(
|
91
|
+
chunk,
|
92
|
+
compareModulesByIdentifier
|
93
|
+
)) {
|
94
|
+
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
|
95
|
+
const filenameTemplate =
|
96
|
+
/** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
|
97
|
+
(outputOptions.webassemblyModuleFilename);
|
98
|
+
|
99
|
+
result.push({
|
100
|
+
render: () =>
|
101
|
+
codeGenerationResults.getSource(
|
97
102
|
module,
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
}
|
107
|
-
|
103
|
+
chunk.runtime,
|
104
|
+
"webassembly"
|
105
|
+
),
|
106
|
+
filenameTemplate,
|
107
|
+
pathOptions: {
|
108
|
+
module,
|
109
|
+
runtime: chunk.runtime,
|
110
|
+
chunkGraph
|
111
|
+
},
|
112
|
+
auxiliary: true,
|
113
|
+
identifier: `webassemblyModule${chunkGraph.getModuleId(
|
114
|
+
module
|
115
|
+
)}`,
|
116
|
+
hash: chunkGraph.getModuleHash(module, chunk.runtime)
|
117
|
+
});
|
108
118
|
}
|
109
|
-
|
110
|
-
return result;
|
111
119
|
}
|
112
|
-
);
|
113
120
|
|
114
|
-
|
121
|
+
return result;
|
122
|
+
});
|
123
|
+
|
124
|
+
compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
|
115
125
|
const chunkGraph = compilation.chunkGraph;
|
116
126
|
const initialWasmModules = new Set();
|
117
127
|
for (const chunk of compilation.chunks) {
|
118
128
|
if (chunk.canBeInitial()) {
|
119
129
|
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
120
|
-
if (module.type ===
|
130
|
+
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
|
121
131
|
initialWasmModules.add(module);
|
122
132
|
}
|
123
133
|
}
|
@@ -14,6 +14,8 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
|
|
14
14
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
15
15
|
|
16
16
|
/** @typedef {import("../Module")} Module */
|
17
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
18
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
17
19
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
18
20
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
19
21
|
|
@@ -61,6 +63,9 @@ const decoderOpts = {
|
|
61
63
|
};
|
62
64
|
|
63
65
|
class WebAssemblyParser extends Parser {
|
66
|
+
/**
|
67
|
+
* @param {{}=} options parser options
|
68
|
+
*/
|
64
69
|
constructor(options) {
|
65
70
|
super();
|
66
71
|
this.hooks = Object.freeze({});
|
@@ -78,8 +83,10 @@ class WebAssemblyParser extends Parser {
|
|
78
83
|
}
|
79
84
|
|
80
85
|
// flag it as ESM
|
81
|
-
|
82
|
-
state.module.
|
86
|
+
/** @type {BuildInfo} */
|
87
|
+
(state.module.buildInfo).strict = true;
|
88
|
+
/** @type {BuildMeta} */
|
89
|
+
(state.module.buildMeta).exportsType = "namespace";
|
83
90
|
|
84
91
|
// parse it
|
85
92
|
const program = decode(source, decoderOpts);
|
@@ -88,10 +95,12 @@ class WebAssemblyParser extends Parser {
|
|
88
95
|
const moduleContext = moduleContextFromModuleAST(module);
|
89
96
|
|
90
97
|
// extract imports and exports
|
98
|
+
/** @type {string[]} */
|
91
99
|
const exports = [];
|
92
100
|
let jsIncompatibleExports = (state.module.buildMeta.jsIncompatibleExports =
|
93
101
|
undefined);
|
94
102
|
|
103
|
+
/** @type {TODO[]} */
|
95
104
|
const importedGlobals = [];
|
96
105
|
t.traverse(module, {
|
97
106
|
ModuleExport({ node }) {
|
@@ -157,12 +166,14 @@ class WebAssemblyParser extends Parser {
|
|
157
166
|
} else if (t.isTable(node.descr) === true) {
|
158
167
|
onlyDirectImport = "Table";
|
159
168
|
} else if (t.isFuncImportDescr(node.descr) === true) {
|
160
|
-
const incompatibleType = getJsIncompatibleType(
|
169
|
+
const incompatibleType = getJsIncompatibleType(
|
170
|
+
/** @type {t.Signature} */ (node.descr.signature)
|
171
|
+
);
|
161
172
|
if (incompatibleType) {
|
162
173
|
onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
|
163
174
|
}
|
164
175
|
} else if (t.isGlobalType(node.descr) === true) {
|
165
|
-
const type = node.descr.valtype;
|
176
|
+
const type = /** @type {string} */ (node.descr.valtype);
|
166
177
|
if (!JS_COMPAT_TYPES.has(type)) {
|
167
178
|
onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
|
168
179
|
}
|
@@ -22,7 +22,7 @@ const MANGLED_MODULE = "a";
|
|
22
22
|
/**
|
23
23
|
* @param {ModuleGraph} moduleGraph the module graph
|
24
24
|
* @param {Module} module the module
|
25
|
-
* @param {boolean} mangle mangle module and export names
|
25
|
+
* @param {boolean | undefined} mangle mangle module and export names
|
26
26
|
* @returns {UsedWasmDependency[]} used dependencies and (mangled) name
|
27
27
|
*/
|
28
28
|
const getUsedDependencies = (moduleGraph, module, mangle) => {
|
@@ -5,9 +5,11 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
|
8
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
10
|
const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
|
10
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
13
|
/** @typedef {import("../Compiler")} Compiler */
|
12
14
|
|
13
15
|
class FetchCompileAsyncWasmPlugin {
|
@@ -21,6 +23,10 @@ class FetchCompileAsyncWasmPlugin {
|
|
21
23
|
"FetchCompileAsyncWasmPlugin",
|
22
24
|
compilation => {
|
23
25
|
const globalWasmLoading = compilation.outputOptions.wasmLoading;
|
26
|
+
/**
|
27
|
+
* @param {Chunk} chunk chunk
|
28
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
29
|
+
*/
|
24
30
|
const isEnabledForChunk = chunk => {
|
25
31
|
const options = chunk.getEntryOptions();
|
26
32
|
const wasmLoading =
|
@@ -29,6 +35,10 @@ class FetchCompileAsyncWasmPlugin {
|
|
29
35
|
: globalWasmLoading;
|
30
36
|
return wasmLoading === "fetch";
|
31
37
|
};
|
38
|
+
/**
|
39
|
+
* @param {string} path path to the wasm file
|
40
|
+
* @returns {string} code to load the wasm file
|
41
|
+
*/
|
32
42
|
const generateLoadBinaryCode = path =>
|
33
43
|
`fetch(${RuntimeGlobals.publicPath} + ${path})`;
|
34
44
|
|
@@ -40,7 +50,7 @@ class FetchCompileAsyncWasmPlugin {
|
|
40
50
|
if (
|
41
51
|
!chunkGraph.hasModuleInGraph(
|
42
52
|
chunk,
|
43
|
-
m => m.type ===
|
53
|
+
m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
|
44
54
|
)
|
45
55
|
) {
|
46
56
|
return;
|
@@ -5,16 +5,28 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
|
8
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
10
|
const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
|
10
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
13
|
/** @typedef {import("../Compiler")} Compiler */
|
12
14
|
|
13
15
|
// TODO webpack 6 remove
|
14
16
|
|
17
|
+
const PLUGIN_NAME = "FetchCompileWasmPlugin";
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @typedef {Object} FetchCompileWasmPluginOptions
|
21
|
+
* @property {boolean} [mangleImports] mangle imports
|
22
|
+
*/
|
23
|
+
|
15
24
|
class FetchCompileWasmPlugin {
|
16
|
-
|
17
|
-
|
25
|
+
/**
|
26
|
+
* @param {FetchCompileWasmPluginOptions} [options] options
|
27
|
+
*/
|
28
|
+
constructor(options = {}) {
|
29
|
+
this.options = options;
|
18
30
|
}
|
19
31
|
|
20
32
|
/**
|
@@ -23,48 +35,53 @@ class FetchCompileWasmPlugin {
|
|
23
35
|
* @returns {void}
|
24
36
|
*/
|
25
37
|
apply(compiler) {
|
26
|
-
compiler.hooks.thisCompilation.tap(
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
|
39
|
+
const globalWasmLoading = compilation.outputOptions.wasmLoading;
|
40
|
+
/**
|
41
|
+
* @param {Chunk} chunk chunk
|
42
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
43
|
+
*/
|
44
|
+
const isEnabledForChunk = chunk => {
|
45
|
+
const options = chunk.getEntryOptions();
|
46
|
+
const wasmLoading =
|
47
|
+
options && options.wasmLoading !== undefined
|
48
|
+
? options.wasmLoading
|
49
|
+
: globalWasmLoading;
|
50
|
+
return wasmLoading === "fetch";
|
51
|
+
};
|
52
|
+
/**
|
53
|
+
* @param {string} path path to the wasm file
|
54
|
+
* @returns {string} code to load the wasm file
|
55
|
+
*/
|
56
|
+
const generateLoadBinaryCode = path =>
|
57
|
+
`fetch(${RuntimeGlobals.publicPath} + ${path})`;
|
40
58
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
chunk,
|
49
|
-
m => m.type === "webassembly/sync"
|
50
|
-
)
|
51
|
-
) {
|
52
|
-
return;
|
53
|
-
}
|
54
|
-
set.add(RuntimeGlobals.moduleCache);
|
55
|
-
set.add(RuntimeGlobals.publicPath);
|
56
|
-
compilation.addRuntimeModule(
|
59
|
+
compilation.hooks.runtimeRequirementInTree
|
60
|
+
.for(RuntimeGlobals.ensureChunkHandlers)
|
61
|
+
.tap(PLUGIN_NAME, (chunk, set) => {
|
62
|
+
if (!isEnabledForChunk(chunk)) return;
|
63
|
+
const chunkGraph = compilation.chunkGraph;
|
64
|
+
if (
|
65
|
+
!chunkGraph.hasModuleInGraph(
|
57
66
|
chunk,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
67
|
+
m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
|
68
|
+
)
|
69
|
+
) {
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
set.add(RuntimeGlobals.moduleCache);
|
73
|
+
set.add(RuntimeGlobals.publicPath);
|
74
|
+
compilation.addRuntimeModule(
|
75
|
+
chunk,
|
76
|
+
new WasmChunkLoadingRuntimeModule({
|
77
|
+
generateLoadBinaryCode,
|
78
|
+
supportsStreaming: true,
|
79
|
+
mangleImports: this.options.mangleImports,
|
80
|
+
runtimeRequirements: set
|
81
|
+
})
|
82
|
+
);
|
83
|
+
});
|
84
|
+
});
|
68
85
|
}
|
69
86
|
}
|
70
87
|
|
@@ -8,6 +8,7 @@
|
|
8
8
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
9
|
const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
|
10
10
|
|
11
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
12
|
/** @typedef {import("../Compiler")} Compiler */
|
12
13
|
|
13
14
|
class JsonpChunkLoadingPlugin {
|
@@ -21,6 +22,10 @@ class JsonpChunkLoadingPlugin {
|
|
21
22
|
"JsonpChunkLoadingPlugin",
|
22
23
|
compilation => {
|
23
24
|
const globalChunkLoading = compilation.outputOptions.chunkLoading;
|
25
|
+
/**
|
26
|
+
* @param {Chunk} chunk chunk
|
27
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
28
|
+
*/
|
24
29
|
const isEnabledForChunk = chunk => {
|
25
30
|
const options = chunk.getEntryOptions();
|
26
31
|
const chunkLoading =
|
@@ -30,6 +35,10 @@ class JsonpChunkLoadingPlugin {
|
|
30
35
|
return chunkLoading === "jsonp";
|
31
36
|
};
|
32
37
|
const onceForChunkSet = new WeakSet();
|
38
|
+
/**
|
39
|
+
* @param {Chunk} chunk chunk
|
40
|
+
* @param {Set<string>} set runtime requirements
|
41
|
+
*/
|
33
42
|
const handler = (chunk, set) => {
|
34
43
|
if (onceForChunkSet.has(chunk)) return;
|
35
44
|
onceForChunkSet.add(chunk);
|
@@ -14,6 +14,7 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
|
|
14
14
|
const compileBooleanMatcher = require("../util/compileBooleanMatcher");
|
15
15
|
|
16
16
|
/** @typedef {import("../Chunk")} Chunk */
|
17
|
+
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
17
18
|
|
18
19
|
/**
|
19
20
|
* @typedef {Object} JsonpCompilationPluginHooks
|
@@ -46,6 +47,9 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
46
47
|
return hooks;
|
47
48
|
}
|
48
49
|
|
50
|
+
/**
|
51
|
+
* @param {Set<string>} runtimeRequirements runtime requirements
|
52
|
+
*/
|
49
53
|
constructor(runtimeRequirements) {
|
50
54
|
super("jsonp chunk loading", RuntimeModule.STAGE_ATTACH);
|
51
55
|
this._runtimeRequirements = runtimeRequirements;
|
@@ -66,10 +70,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
66
70
|
}
|
67
71
|
|
68
72
|
/**
|
69
|
-
* @returns {string} runtime code
|
73
|
+
* @returns {string | null} runtime code
|
70
74
|
*/
|
71
75
|
generate() {
|
72
|
-
const
|
76
|
+
const compilation = /** @type {Compilation} */ (this.compilation);
|
73
77
|
const {
|
74
78
|
runtimeTemplate,
|
75
79
|
outputOptions: {
|
@@ -105,9 +109,14 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
105
109
|
const withPreload = this._runtimeRequirements.has(
|
106
110
|
RuntimeGlobals.preloadChunkHandlers
|
107
111
|
);
|
112
|
+
const withFetchPriority = this._runtimeRequirements.has(
|
113
|
+
RuntimeGlobals.hasFetchPriority
|
114
|
+
);
|
108
115
|
const chunkLoadingGlobalExpr = `${globalObject}[${JSON.stringify(
|
109
116
|
chunkLoadingGlobal
|
110
117
|
)}]`;
|
118
|
+
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
119
|
+
const chunk = /** @type {Chunk} */ (this.chunk);
|
111
120
|
const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
|
112
121
|
const hasJsMatcher = compileBooleanMatcher(conditionMap);
|
113
122
|
const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
|
@@ -135,7 +144,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
135
144
|
withLoading
|
136
145
|
? Template.asString([
|
137
146
|
`${fn}.j = ${runtimeTemplate.basicFunction(
|
138
|
-
|
147
|
+
`chunkId, promises${withFetchPriority ? ", fetchPriority" : ""}`,
|
139
148
|
hasJsMatcher !== false
|
140
149
|
? Template.indent([
|
141
150
|
"// JSONP chunk loading for javascript",
|
@@ -187,9 +196,15 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
187
196
|
"}"
|
188
197
|
]
|
189
198
|
)};`,
|
190
|
-
`${
|
199
|
+
`${
|
200
|
+
RuntimeGlobals.loadScript
|
201
|
+
}(url, loadingEnded, "chunk-" + chunkId, chunkId${
|
202
|
+
withFetchPriority ? ", fetchPriority" : ""
|
203
|
+
});`
|
191
204
|
]),
|
192
|
-
|
205
|
+
hasJsMatcher === true
|
206
|
+
? "}"
|
207
|
+
: "} else installedChunks[chunkId] = 0;"
|
193
208
|
]),
|
194
209
|
"}"
|
195
210
|
]),
|
@@ -250,7 +265,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
250
265
|
linkPreload.call(
|
251
266
|
Template.asString([
|
252
267
|
"var link = document.createElement('link');",
|
253
|
-
scriptType
|
268
|
+
scriptType && scriptType !== "module"
|
254
269
|
? `link.type = ${JSON.stringify(scriptType)};`
|
255
270
|
: "",
|
256
271
|
"link.charset = 'utf-8';",
|
@@ -259,8 +274,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
259
274
|
`link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
|
260
275
|
),
|
261
276
|
"}",
|
262
|
-
|
263
|
-
|
277
|
+
scriptType === "module"
|
278
|
+
? 'link.rel = "modulepreload";'
|
279
|
+
: 'link.rel = "preload";',
|
280
|
+
scriptType === "module" ? "" : 'link.as = "script";',
|
264
281
|
`link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
|
265
282
|
crossOriginLoading
|
266
283
|
? crossOriginLoading === "use-credentials"
|
@@ -422,7 +439,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
|
|
422
439
|
"}"
|
423
440
|
]),
|
424
441
|
"}",
|
425
|
-
|
442
|
+
`if(runtime) var result = runtime(${RuntimeGlobals.require});`
|
426
443
|
]),
|
427
444
|
"}",
|
428
445
|
"if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);",
|
package/lib/webpack.js
CHANGED
@@ -61,7 +61,10 @@ const createMultiCompiler = (childOptions, options) => {
|
|
61
61
|
const createCompiler = rawOptions => {
|
62
62
|
const options = getNormalizedWebpackOptions(rawOptions);
|
63
63
|
applyWebpackOptionsBaseDefaults(options);
|
64
|
-
const compiler = new Compiler(
|
64
|
+
const compiler = new Compiler(
|
65
|
+
/** @type {string} */ (options.context),
|
66
|
+
options
|
67
|
+
);
|
65
68
|
new NodeEnvironmentPlugin({
|
66
69
|
infrastructureLogging: options.infrastructureLogging
|
67
70
|
}).apply(compiler);
|
@@ -69,7 +72,7 @@ const createCompiler = rawOptions => {
|
|
69
72
|
for (const plugin of options.plugins) {
|
70
73
|
if (typeof plugin === "function") {
|
71
74
|
plugin.call(compiler, compiler);
|
72
|
-
} else {
|
75
|
+
} else if (plugin) {
|
73
76
|
plugin.apply(compiler);
|
74
77
|
}
|
75
78
|
}
|
@@ -96,6 +99,11 @@ const createCompiler = rawOptions => {
|
|
96
99
|
* @returns {MultiCompiler} the multi compiler object
|
97
100
|
*/
|
98
101
|
|
102
|
+
/**
|
103
|
+
* @template T
|
104
|
+
* @param {Array<T> | T} options options
|
105
|
+
* @returns {Array<T>} array of options
|
106
|
+
*/
|
99
107
|
const asArray = options =>
|
100
108
|
Array.isArray(options) ? Array.from(options) : [options];
|
101
109
|
|
@@ -103,7 +111,7 @@ const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
|
|
103
111
|
/**
|
104
112
|
* @param {WebpackOptions | (ReadonlyArray<WebpackOptions> & MultiCompilerOptions)} options options
|
105
113
|
* @param {Callback<Stats> & Callback<MultiStats>=} callback callback
|
106
|
-
* @returns {Compiler | MultiCompiler}
|
114
|
+
* @returns {Compiler | MultiCompiler} Compiler or MultiCompiler
|
107
115
|
*/
|
108
116
|
(options, callback) => {
|
109
117
|
const create = () => {
|
@@ -117,6 +125,7 @@ const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
|
|
117
125
|
}
|
118
126
|
/** @type {MultiCompiler|Compiler} */
|
119
127
|
let compiler;
|
128
|
+
/** @type {boolean | undefined} */
|
120
129
|
let watch = false;
|
121
130
|
/** @type {WatchOptions|WatchOptions[]} */
|
122
131
|
let watchOptions;
|
@@ -9,6 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
9
9
|
const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
|
10
10
|
const ImportScriptsChunkLoadingRuntimeModule = require("./ImportScriptsChunkLoadingRuntimeModule");
|
11
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
12
13
|
/** @typedef {import("../Compiler")} Compiler */
|
13
14
|
|
14
15
|
class ImportScriptsChunkLoadingPlugin {
|
@@ -26,6 +27,10 @@ class ImportScriptsChunkLoadingPlugin {
|
|
26
27
|
"ImportScriptsChunkLoadingPlugin",
|
27
28
|
compilation => {
|
28
29
|
const globalChunkLoading = compilation.outputOptions.chunkLoading;
|
30
|
+
/**
|
31
|
+
* @param {Chunk} chunk chunk
|
32
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
33
|
+
*/
|
29
34
|
const isEnabledForChunk = chunk => {
|
30
35
|
const options = chunk.getEntryOptions();
|
31
36
|
const chunkLoading =
|
@@ -35,6 +40,10 @@ class ImportScriptsChunkLoadingPlugin {
|
|
35
40
|
return chunkLoading === "import-scripts";
|
36
41
|
};
|
37
42
|
const onceForChunkSet = new WeakSet();
|
43
|
+
/**
|
44
|
+
* @param {Chunk} chunk chunk
|
45
|
+
* @param {Set<string>} set runtime requirements
|
46
|
+
*/
|
38
47
|
const handler = (chunk, set) => {
|
39
48
|
if (onceForChunkSet.has(chunk)) return;
|
40
49
|
onceForChunkSet.add(chunk);
|