webpack 5.92.1 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +5 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +104 -64
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +132 -70
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
@@ -53,7 +53,7 @@ const { register } = require("./util/serialization");
53
53
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
54
54
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
55
55
 
56
- /** @typedef {{ attributes?: ImportAttributes }} ImportDependencyMeta */
56
+ /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
57
57
  /** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
58
58
 
59
59
  /** @typedef {ImportDependencyMeta | CssImportDependencyMeta} DependencyMeta */
@@ -164,7 +164,10 @@ const getSourceForImportExternal = (
164
164
  dependencyMeta
165
165
  ) => {
166
166
  const importName = runtimeTemplate.outputOptions.importFunctionName;
167
- if (!runtimeTemplate.supportsDynamicImport() && importName === "import") {
167
+ if (
168
+ !runtimeTemplate.supportsDynamicImport() &&
169
+ (importName === "import" || importName === "module-import")
170
+ ) {
168
171
  throw new Error(
169
172
  "The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
170
173
  );
@@ -210,7 +213,7 @@ const getSourceForImportExternal = (
210
213
  */
211
214
  const importAssertionReplacer = (key, value) => {
212
215
  if (key === "_isLegacyAssert") {
213
- return undefined;
216
+ return;
214
217
  }
215
218
 
216
219
  return value;
@@ -353,7 +356,7 @@ const getSourceForModuleExternal = (
353
356
  runtime,
354
357
  runtimeTemplate
355
358
  );
356
- let expression = moduleRemapping || baseAccess;
359
+ const expression = moduleRemapping || baseAccess;
357
360
  return {
358
361
  expression,
359
362
  init: moduleRemapping
@@ -415,11 +418,10 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
415
418
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
416
419
  * @returns {string} the generated source
417
420
  */
418
- const checkExternalVariable = (variableName, request, runtimeTemplate) => {
419
- return `if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
421
+ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
422
+ `if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
420
423
  { request }
421
424
  )} }\n`;
422
- };
423
425
 
424
426
  /**
425
427
  * @param {string|number} id the module id
@@ -532,7 +534,7 @@ class ExternalModule extends Module {
532
534
  * @returns {string} a user readable identifier of the module
533
535
  */
534
536
  readableIdentifier(requestShortener) {
535
- return "external " + JSON.stringify(this.request);
537
+ return `external ${JSON.stringify(this.request)}`;
536
538
  }
537
539
 
538
540
  /**
@@ -544,6 +546,25 @@ class ExternalModule extends Module {
544
546
  return callback(null, !this.buildMeta);
545
547
  }
546
548
 
549
+ /**
550
+ * @param {string} externalType raw external type
551
+ * @returns {string} resolved external type
552
+ */
553
+ getModuleImportType(externalType) {
554
+ if (externalType === "module-import") {
555
+ if (
556
+ this.dependencyMeta &&
557
+ /** @type {ImportDependencyMeta} */ (this.dependencyMeta).externalType
558
+ ) {
559
+ return /** @type {ImportDependencyMeta} */ (this.dependencyMeta)
560
+ .externalType;
561
+ }
562
+ return "module";
563
+ }
564
+
565
+ return externalType;
566
+ }
567
+
547
568
  /**
548
569
  * @param {WebpackOptions} options webpack options
549
570
  * @param {Compilation} compilation the compilation
@@ -576,25 +597,6 @@ class ExternalModule extends Module {
576
597
  canMangle = true;
577
598
  }
578
599
  break;
579
- case "module":
580
- if (this.buildInfo.module) {
581
- if (!Array.isArray(request) || request.length === 1) {
582
- this.buildMeta.exportsType = "namespace";
583
- canMangle = true;
584
- }
585
- } else {
586
- this.buildMeta.async = true;
587
- EnvironmentNotSupportAsyncWarning.check(
588
- this,
589
- compilation.runtimeTemplate,
590
- "external module"
591
- );
592
- if (!Array.isArray(request) || request.length === 1) {
593
- this.buildMeta.exportsType = "namespace";
594
- canMangle = false;
595
- }
596
- }
597
- break;
598
600
  case "script":
599
601
  this.buildMeta.async = true;
600
602
  EnvironmentNotSupportAsyncWarning.check(
@@ -611,18 +613,45 @@ class ExternalModule extends Module {
611
613
  "external promise"
612
614
  );
613
615
  break;
616
+ case "module":
614
617
  case "import":
615
- this.buildMeta.async = true;
616
- EnvironmentNotSupportAsyncWarning.check(
617
- this,
618
- compilation.runtimeTemplate,
619
- "external import"
620
- );
621
- if (!Array.isArray(request) || request.length === 1) {
622
- this.buildMeta.exportsType = "namespace";
623
- canMangle = false;
618
+ case "module-import": {
619
+ const type = this.getModuleImportType(externalType);
620
+ if (type === "module") {
621
+ if (this.buildInfo.module) {
622
+ if (!Array.isArray(request) || request.length === 1) {
623
+ this.buildMeta.exportsType = "namespace";
624
+ canMangle = true;
625
+ }
626
+ } else {
627
+ this.buildMeta.async = true;
628
+ EnvironmentNotSupportAsyncWarning.check(
629
+ this,
630
+ compilation.runtimeTemplate,
631
+ "external module"
632
+ );
633
+ if (!Array.isArray(request) || request.length === 1) {
634
+ this.buildMeta.exportsType = "namespace";
635
+ canMangle = false;
636
+ }
637
+ }
624
638
  }
639
+
640
+ if (type === "import") {
641
+ this.buildMeta.async = true;
642
+ EnvironmentNotSupportAsyncWarning.check(
643
+ this,
644
+ compilation.runtimeTemplate,
645
+ "external import"
646
+ );
647
+ if (!Array.isArray(request) || request.length === 1) {
648
+ this.buildMeta.exportsType = "namespace";
649
+ canMangle = false;
650
+ }
651
+ }
652
+
625
653
  break;
654
+ }
626
655
  }
627
656
  this.addDependency(new StaticExportsDependency(true, canMangle));
628
657
  callback();
@@ -702,7 +731,8 @@ class ExternalModule extends Module {
702
731
  request,
703
732
  /** @type {string} */
704
733
  (runtimeTemplate.outputOptions.importMetaName),
705
- runtimeTemplate.supportNodePrefixForCoreModules()
734
+ /** @type {boolean} */
735
+ (runtimeTemplate.supportNodePrefixForCoreModules())
706
736
  )
707
737
  : getSourceForCommonJsExternal(request);
708
738
  case "amd":
@@ -719,42 +749,52 @@ class ExternalModule extends Module {
719
749
  runtimeTemplate
720
750
  );
721
751
  }
722
- case "import":
723
- return getSourceForImportExternal(
724
- request,
725
- runtimeTemplate,
726
- /** @type {ImportDependencyMeta} */ (dependencyMeta)
727
- );
728
752
  case "script":
729
753
  return getSourceForScriptExternal(request, runtimeTemplate);
730
- case "module": {
731
- if (!(/** @type {BuildInfo} */ (this.buildInfo).module)) {
732
- if (!runtimeTemplate.supportsDynamicImport()) {
733
- throw new Error(
734
- "The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script" +
735
- (runtimeTemplate.supportsEcmaScriptModuleSyntax()
736
- ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
737
- : "")
738
- );
739
- }
754
+ case "module":
755
+ case "import":
756
+ case "module-import": {
757
+ const type = this.getModuleImportType(externalType);
758
+ if (type === "import") {
740
759
  return getSourceForImportExternal(
741
760
  request,
742
761
  runtimeTemplate,
743
762
  /** @type {ImportDependencyMeta} */ (dependencyMeta)
744
763
  );
745
764
  }
746
- if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
747
- throw new Error(
748
- "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
765
+
766
+ if (type === "module") {
767
+ if (!(/** @type {BuildInfo} */ (this.buildInfo).module)) {
768
+ if (!runtimeTemplate.supportsDynamicImport()) {
769
+ throw new Error(
770
+ `The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
771
+ runtimeTemplate.supportsEcmaScriptModuleSyntax()
772
+ ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
773
+ : ""
774
+ }`
775
+ );
776
+ }
777
+ return getSourceForImportExternal(
778
+ request,
779
+ runtimeTemplate,
780
+ /** @type {ImportDependencyMeta} */ (dependencyMeta)
781
+ );
782
+ }
783
+ if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
784
+ throw new Error(
785
+ "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
786
+ );
787
+ }
788
+ return getSourceForModuleExternal(
789
+ request,
790
+ moduleGraph.getExportsInfo(this),
791
+ runtime,
792
+ runtimeTemplate,
793
+ /** @type {ImportDependencyMeta} */ (dependencyMeta)
749
794
  );
750
795
  }
751
- return getSourceForModuleExternal(
752
- request,
753
- moduleGraph.getExportsInfo(this),
754
- runtime,
755
- runtimeTemplate,
756
- /** @type {ImportDependencyMeta} */ (dependencyMeta)
757
- );
796
+
797
+ break;
758
798
  }
759
799
  case "var":
760
800
  case "promise":
@@ -846,7 +886,7 @@ class ExternalModule extends Module {
846
886
  if (sourceData.init)
847
887
  sourceString = `${sourceData.init}\n${sourceString}`;
848
888
 
849
- let data = undefined;
889
+ let data;
850
890
  if (sourceData.chunkInitFragments) {
851
891
  data = new Map();
852
892
  data.set("chunkInitFragments", sourceData.chunkInitFragments);
@@ -25,6 +25,7 @@ const EMPTY_RESOLVE_OPTIONS = {};
25
25
  // TODO webpack 6 remove this
26
26
  const callDeprecatedExternals = util.deprecate(
27
27
  (externalsFunction, context, request, cb) => {
28
+ // eslint-disable-next-line no-useless-call
28
29
  externalsFunction.call(null, context, request, cb);
29
30
  },
30
31
  "The externals-function should be defined like ({context, request}, cb) => { ... }",
@@ -33,6 +34,11 @@ const callDeprecatedExternals = util.deprecate(
33
34
 
34
35
  const cache = new WeakMap();
35
36
 
37
+ /**
38
+ * @param {object} obj obj
39
+ * @param {TODO} layer layer
40
+ * @returns {object} result
41
+ */
36
42
  const resolveLayer = (obj, layer) => {
37
43
  let map = cache.get(obj);
38
44
  if (map === undefined) {
@@ -47,6 +53,9 @@ const resolveLayer = (obj, layer) => {
47
53
  return result;
48
54
  };
49
55
 
56
+ /** @typedef {string|string[]|boolean|Record<string, string|string[]>} ExternalValue */
57
+ /** @typedef {string|undefined} ExternalType */
58
+
50
59
  class ExternalModuleFactoryPlugin {
51
60
  /**
52
61
  * @param {string | undefined} type default external type
@@ -72,8 +81,8 @@ class ExternalModuleFactoryPlugin {
72
81
  const dependencyType = data.dependencyType;
73
82
 
74
83
  /**
75
- * @param {string|string[]|boolean|Record<string, string|string[]>} value the external config
76
- * @param {string|undefined} type type of external
84
+ * @param {ExternalValue} value the external config
85
+ * @param {ExternalType | undefined} type type of external
77
86
  * @param {function((Error | null)=, ExternalModule=): void} callback callback
78
87
  * @returns {void}
79
88
  */
@@ -83,12 +92,7 @@ class ExternalModuleFactoryPlugin {
83
92
  return callback();
84
93
  }
85
94
  /** @type {string | string[] | Record<string, string|string[]>} */
86
- let externalConfig;
87
- if (value === true) {
88
- externalConfig = dependency.request;
89
- } else {
90
- externalConfig = value;
91
- }
95
+ let externalConfig = value === true ? dependency.request : value;
92
96
  // When no explicit type is specified, extract it from the externalConfig
93
97
  if (type === undefined) {
94
98
  if (
@@ -122,8 +126,16 @@ class ExternalModuleFactoryPlugin {
122
126
  dependency instanceof ImportDependency ||
123
127
  dependency instanceof ContextElementDependency
124
128
  ) {
129
+ const externalType =
130
+ dependency instanceof HarmonyImportDependency
131
+ ? "module"
132
+ : dependency instanceof ImportDependency
133
+ ? "import"
134
+ : undefined;
135
+
125
136
  dependencyMeta = {
126
- attributes: dependency.assertions
137
+ attributes: dependency.assertions,
138
+ externalType
127
139
  };
128
140
  } else if (dependency instanceof CssImportDependency) {
129
141
  dependencyMeta = {
@@ -137,7 +149,8 @@ class ExternalModuleFactoryPlugin {
137
149
  null,
138
150
  new ExternalModule(
139
151
  externalConfig,
140
- type || globalType,
152
+ /** @type {string} */
153
+ (type || globalType),
141
154
  dependency.request,
142
155
  dependencyMeta
143
156
  )