@depup/webpack 5.110.1-depup.0 → 5.111.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.
Files changed (304) hide show
  1. package/README.md +7 -8
  2. package/changes.json +7 -11
  3. package/lib/APIPlugin.js +26 -11
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/Cache.js +8 -3
  6. package/lib/CacheFacade.js +1 -1
  7. package/lib/ChunkGraph.js +20 -18
  8. package/lib/CircularModulesPlugin.js +157 -55
  9. package/lib/CleanPlugin.js +2 -2
  10. package/lib/CompatibilityPlugin.js +3 -4
  11. package/lib/Compilation.js +337 -338
  12. package/lib/Compiler.js +213 -51
  13. package/lib/ConcatenationScope.js +25 -35
  14. package/lib/ConstPlugin.js +16 -132
  15. package/lib/CopyPlugin.js +1054 -0
  16. package/lib/DefinePlugin.js +24 -8
  17. package/lib/DependencyTemplate.js +2 -1
  18. package/lib/DotenvPlugin.js +64 -40
  19. package/lib/ErrorHelpers.js +113 -0
  20. package/lib/ExportsInfo.js +30 -16
  21. package/lib/ExternalModule.js +47 -22
  22. package/lib/FileSystemInfo.js +17 -14
  23. package/lib/FlagDependencyExportsPlugin.js +53 -34
  24. package/lib/FlagDependencyUsagePlugin.js +17 -15
  25. package/lib/Generator.js +24 -2
  26. package/lib/HotModuleReplacementPlugin.js +55 -7
  27. package/lib/IgnorePlugin.js +1 -1
  28. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  29. package/lib/LoaderOptionsPlugin.js +1 -1
  30. package/lib/MainTemplate.js +5 -1
  31. package/lib/Module.js +19 -10
  32. package/lib/ModuleGraph.js +6 -9
  33. package/lib/MultiCompiler.js +7 -17
  34. package/lib/MultiWatching.js +1 -1
  35. package/lib/NormalModule.js +148 -70
  36. package/lib/NormalModuleFactory.js +1 -1
  37. package/lib/RuntimeGlobals.js +21 -7
  38. package/lib/RuntimeModule.js +28 -12
  39. package/lib/RuntimePlugin.js +33 -3
  40. package/lib/RuntimeTemplate.js +1147 -847
  41. package/lib/SourceMapDevToolPlugin.js +54 -104
  42. package/lib/TemplatedPathPlugin.js +16 -59
  43. package/lib/Watching.js +9 -0
  44. package/lib/WebpackOptionsApply.js +84 -91
  45. package/lib/asset/AssetBytesGenerator.js +7 -1
  46. package/lib/asset/AssetGenerator.js +50 -24
  47. package/lib/asset/AssetModule.js +3 -0
  48. package/lib/asset/AssetSourceGenerator.js +7 -1
  49. package/lib/asset/WebManifestParser.js +7 -5
  50. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  51. package/lib/buildChunkGraph.js +11 -15
  52. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  53. package/lib/cache/IdleFileCachePlugin.js +2 -2
  54. package/lib/cache/MemoryCachePlugin.js +4 -4
  55. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  56. package/lib/cache/PackFileCacheStrategy.js +17 -19
  57. package/lib/cache/getLazyHashedEtag.js +3 -5
  58. package/lib/config/browserslistTargetHandler.js +17 -4
  59. package/lib/config/defaults.js +162 -142
  60. package/lib/config/getClaimedAssetTypes.js +10 -11
  61. package/lib/config/normalization.js +100 -20
  62. package/lib/config/target.js +13 -4
  63. package/lib/container/ContainerReferencePlugin.js +6 -0
  64. package/lib/container/RemoteRuntimeModule.js +9 -0
  65. package/lib/container/declaredRemotes.js +39 -0
  66. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  67. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  68. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  69. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  70. package/lib/css/CssGenerator.js +27 -11
  71. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  72. package/lib/css/CssLoadingRuntimeModule.js +92 -15
  73. package/lib/css/CssModule.js +1 -1
  74. package/lib/css/CssModulesPlugin.js +3 -10
  75. package/lib/css/CssParser.js +162 -31
  76. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  77. package/lib/css/cssMinify.js +43 -32
  78. package/lib/css/data.js +3526 -871
  79. package/lib/css/syntax.js +6455 -1237
  80. package/lib/debug/ProfilingPlugin.js +7 -4
  81. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  82. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  83. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  84. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  85. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  86. package/lib/dependencies/CommonJsPlugin.js +19 -3
  87. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  88. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  89. package/lib/dependencies/ContextDependency.js +1 -1
  90. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  91. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  92. package/lib/dependencies/ContextElementDependency.js +1 -1
  93. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  94. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  95. package/lib/dependencies/CssUrlDependency.js +3 -5
  96. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  97. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  98. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +10 -4
  99. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -7
  100. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  101. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +217 -34
  102. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  103. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  104. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  105. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +198 -25
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +117 -4
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  109. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  110. package/lib/dependencies/HtmlEntryDependency.js +136 -104
  111. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  112. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  113. package/lib/dependencies/ImportContextDependency.js +43 -3
  114. package/lib/dependencies/ImportDependency.js +8 -29
  115. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  116. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  117. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  118. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  119. package/lib/dependencies/ImportParserPlugin.js +25 -15
  120. package/lib/dependencies/LoaderPlugin.js +26 -1
  121. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  122. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  123. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  124. package/lib/dependencies/URLContextDependency.js +1 -1
  125. package/lib/dependencies/URLDependency.js +6 -5
  126. package/lib/dependencies/WorkerAndWorkletPlugin.js +16 -21
  127. package/lib/dependencies/WorkerDependency.js +12 -18
  128. package/lib/dependencies/WorkletDependency.js +12 -20
  129. package/lib/dependencies/importOptionsCheck.js +47 -0
  130. package/lib/dll/DelegatedModule.js +18 -1
  131. package/lib/dll/DllReferencePlugin.js +11 -8
  132. package/lib/dll/LibManifestPlugin.js +1 -1
  133. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  134. package/lib/errors/DotenvFileError.js +29 -0
  135. package/lib/errors/DuplicateModulesWarning.js +12 -7
  136. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  137. package/lib/errors/ExternalStarReexportError.js +44 -0
  138. package/lib/errors/HookWebpackError.js +3 -2
  139. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  140. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  141. package/lib/errors/ModuleParseError.js +2 -1
  142. package/lib/errors/UnusedAssetsWarning.js +36 -0
  143. package/lib/errors/UnusedFederationWarning.js +35 -0
  144. package/lib/errors/UnusedModulesWarning.js +38 -0
  145. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  146. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  147. package/lib/esm/ModuleChunkLoadingPlugin.js +21 -5
  148. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +91 -53
  149. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  150. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  151. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  152. package/lib/html/HtmlGenerator.js +72 -87
  153. package/lib/html/HtmlModulesPlugin.js +479 -215
  154. package/lib/html/HtmlParser.js +110 -147
  155. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  156. package/lib/html/data.js +142 -7
  157. package/lib/html/htmlMinify.js +92 -122
  158. package/lib/html/syntax.js +2031 -1556
  159. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  160. package/lib/index.js +49 -3
  161. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  162. package/lib/javascript/JavascriptGenerator.js +8 -1
  163. package/lib/javascript/JavascriptModule.js +1 -0
  164. package/lib/javascript/JavascriptModulesPlugin.js +76 -80
  165. package/lib/javascript/JavascriptParser.js +1970 -900
  166. package/lib/javascript/StartupHelpers.js +27 -3
  167. package/lib/javascript/data.js +172 -0
  168. package/lib/javascript/grammar.js +5546 -0
  169. package/lib/javascript/parser.js +1500 -0
  170. package/lib/javascript/regexp.js +1762 -0
  171. package/lib/javascript/regexpData.js +51 -0
  172. package/lib/javascript/syntax.js +9061 -5262
  173. package/lib/json/JsonGenerator.js +7 -1
  174. package/lib/library/ModuleLibraryPlugin.js +171 -132
  175. package/lib/loaders/LoaderRunner.js +170 -14
  176. package/lib/node/NodeWatchFileSystem.js +3 -9
  177. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  178. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +8 -15
  179. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  180. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  181. package/lib/optimize/ConcatenatedModule.js +222 -125
  182. package/lib/optimize/ConstExportsPlugin.js +50 -34
  183. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  184. package/lib/optimize/InlineExports.js +20 -2
  185. package/lib/optimize/InnerGraphPlugin.js +7 -13
  186. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  187. package/lib/optimize/MangleExportsPlugin.js +13 -4
  188. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  189. package/lib/optimize/RealContentHashPlugin.js +179 -44
  190. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  191. package/lib/optimize/SplitChunksPlugin.js +2 -4
  192. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  193. package/lib/performance/BroadContextsPlugin.js +1 -1
  194. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  195. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  196. package/lib/performance/EvalUsagePlugin.js +5 -2
  197. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  198. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  199. package/lib/performance/SizeLimitsPlugin.js +2 -4
  200. package/lib/performance/TopLevelThisPlugin.js +5 -4
  201. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  202. package/lib/performance/UnusedFederationPlugin.js +147 -0
  203. package/lib/performance/UnusedModulesPlugin.js +141 -0
  204. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  205. package/lib/performance/isOnlyReexported.js +65 -0
  206. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  207. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  208. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  209. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  210. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  211. package/lib/prefetch/ResourceHintPlugin.js +29 -35
  212. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  213. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  214. package/lib/rules/RuleSetCompiler.js +211 -4
  215. package/lib/runtime/AsyncModuleRuntimeModule.js +103 -67
  216. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  217. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  218. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  219. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  220. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  221. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  222. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  223. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  224. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  225. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  226. package/lib/runtime/HelperRuntimeModule.js +10 -0
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +313 -222
  228. package/lib/runtime/NonceRuntimeModule.js +9 -0
  229. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  230. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  231. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  232. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  233. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  234. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  235. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  236. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  237. package/lib/schemes/DataUriPlugin.js +3 -6
  238. package/lib/schemes/HttpUriPlugin.js +22 -5
  239. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  240. package/lib/serialization/BinaryMiddleware.js +9 -9
  241. package/lib/serialization/FileMiddleware.js +31 -18
  242. package/lib/serialization/ObjectMiddleware.js +168 -139
  243. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  244. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  245. package/lib/sharing/ShareRuntimeModule.js +9 -0
  246. package/lib/sharing/declaredShared.js +47 -0
  247. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  248. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  249. package/lib/typescript/TypeScriptPlugin.js +10 -13
  250. package/lib/url/URLParserPlugin.js +6 -8
  251. package/lib/util/ArrayQueue.js +3 -3
  252. package/lib/util/LocConverter.js +4 -7
  253. package/lib/util/SourceProcessor.js +115 -99
  254. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  255. package/lib/util/async.js +292 -0
  256. package/lib/util/buildDiagnostics.js +69 -0
  257. package/lib/util/chainedImports.js +3 -4
  258. package/lib/util/concatenate.js +4 -4
  259. package/lib/util/conventions.js +5 -1
  260. package/lib/util/createHooksRegistry.js +1 -2
  261. package/lib/util/createMappings.js +25 -3
  262. package/lib/util/dataURL.js +2 -3
  263. package/lib/util/deterministicGrouping.js +8 -13
  264. package/lib/util/findGraphRoots.js +6 -13
  265. package/lib/util/fs.js +27 -1
  266. package/lib/util/globUtils.js +1 -1
  267. package/lib/util/handlerKeys.js +40 -0
  268. package/lib/util/hash/wasm-hash.js +3 -4
  269. package/lib/util/identifier.js +20 -0
  270. package/lib/util/internalSerializables.js +7 -1
  271. package/lib/util/registerExternalSerializer.js +6 -45
  272. package/lib/util/removeBOM.js +82 -1
  273. package/lib/util/semver.js +5 -3
  274. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +14 -3
  275. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +14 -3
  276. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  277. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  278. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +7 -12
  279. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  280. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  281. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  282. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  283. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -6
  284. package/lib/web/FetchCompileWasmPlugin.js +4 -2
  285. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  286. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  287. package/package.json +55 -46
  288. package/schemas/WebpackOptions.check.js +1 -1
  289. package/schemas/WebpackOptions.json +388 -76
  290. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  291. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  292. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  293. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  294. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  295. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  296. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  297. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  298. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  299. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  300. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  301. package/types.d.ts +1795 -608
  302. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  303. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  304. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -8,9 +8,10 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const { InlinedUsedName } = require("../optimize/InlineExports");
10
10
  const makeSerializable = require("../util/makeSerializable");
11
- const memoize = require("../util/memoize");
12
- const ExportBindingInitFragment = require("./ExportBindingInitFragment");
13
11
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
12
+
13
+ const { ExportBindingType } = HarmonyExportInitFragment;
14
+
14
15
  const NullDependency = require("./NullDependency");
15
16
 
16
17
  /** @import { ReplaceSource } from "webpack-sources" */
@@ -28,11 +29,6 @@ const NullDependency = require("./NullDependency");
28
29
  * } from "../javascript/JavascriptModule"
29
30
  */
30
31
 
31
- // Required here rather than at the top: the plugin reaches back into the dependencies.
32
- const getJavascriptModulesPlugin = memoize(() =>
33
- require("../javascript/JavascriptModulesPlugin")
34
- );
35
-
36
32
  class HarmonyExportSpecifierDependency extends NullDependency {
37
33
  /**
38
34
  * Creates an instance of HarmonyExportSpecifierDependency.
@@ -147,14 +143,7 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
147
143
  apply(
148
144
  dependency,
149
145
  source,
150
- {
151
- module,
152
- moduleGraph,
153
- initFragments,
154
- runtime,
155
- runtimeTemplate,
156
- concatenationScope
157
- }
146
+ { module, moduleGraph, initFragments, runtime, concatenationScope }
158
147
  ) {
159
148
  const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency);
160
149
  // a wrapped module's bindings stay inside the wrapper, not in the shared scope
@@ -180,54 +169,32 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
180
169
  return;
181
170
  }
182
171
 
183
- const canUseValueBinding =
172
+ const valueFormat =
184
173
  dep.constValue !== undefined &&
185
174
  /** @type {import("../Module").BuildInfo} */ (module.buildInfo)
186
175
  .isCircular === false;
187
176
 
188
- // A library exporting the same bindings natively reads none of them back off the
189
- // exports object, so it takes the call over and emits it only where wrapped.
190
- const hooks = getJavascriptModulesPlugin().getCompilationHooks(
191
- runtimeTemplate.compilation
177
+ const meta = moduleGraph.getMetaIfExisting(module);
178
+
179
+ const onDemand =
180
+ !concatenationScope &&
181
+ meta !== undefined &&
182
+ meta.onDemandExports === true;
183
+
184
+ /** @type {ExportMap} */
185
+ const map = new Map();
186
+ map.set(used, {
187
+ value: `/* binding */ ${dep.id}`,
188
+ type: valueFormat ? ExportBindingType.Value : ExportBindingType.Getter
189
+ });
190
+ initFragments.push(
191
+ new HarmonyExportInitFragment(
192
+ module.exportsArgument,
193
+ map,
194
+ undefined,
195
+ onDemand
196
+ )
192
197
  );
193
- const onDemand = hooks.onDemandExportsGeneration.isUsed()
194
- ? (/** @type {string} */ definition, /** @type {boolean} */ placeAtEnd) =>
195
- hooks.onDemandExportsGeneration.call(
196
- module,
197
- runtime,
198
- definition,
199
- placeAtEnd
200
- ) === true
201
- : undefined;
202
-
203
- if (canUseValueBinding) {
204
- initFragments.push(
205
- new ExportBindingInitFragment(
206
- module.exportsArgument,
207
- [
208
- {
209
- name: used,
210
- value: `/* binding */ ${dep.id}`,
211
- bindingType: "value"
212
- }
213
- ],
214
- true,
215
- onDemand
216
- )
217
- );
218
- } else {
219
- /** @type {ExportMap} */
220
- const map = new Map();
221
- map.set(used, `/* binding */ ${dep.id}`);
222
- initFragments.push(
223
- new HarmonyExportInitFragment(
224
- module.exportsArgument,
225
- map,
226
- undefined,
227
- onDemand
228
- )
229
- );
230
- }
231
198
  }
232
199
  };
233
200
 
@@ -0,0 +1,59 @@
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 { ASSET_TYPE } = require("../ModuleSourceTypeConstants");
9
+ const makeSerializable = require("../util/makeSerializable");
10
+ const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
11
+
12
+ /** @import Module from "../Module" */
13
+ /** @import ModuleGraph from "../ModuleGraph" */
14
+ /** @import { GetConditionFn } from "../Dependency" */
15
+
16
+ /**
17
+ * Whether a module is emitted as a file of its own, asked of the module so a
18
+ * plugin emitting the same way is treated alike. `buildInfo.filename` cannot
19
+ * serve here: generation sets it long after a connection has to know whether
20
+ * it is active.
21
+ * @param {Module} module the module to look up
22
+ * @returns {boolean} true when it emits a file
23
+ */
24
+ const emitsOwnFile = (module) => module.getSourceTypes().has(ASSET_TYPE);
25
+
26
+ /**
27
+ * An `import "..."` that declares no binding. It is a separate class rather
28
+ * than a flag so it costs nothing per instance, and the bound form — much the
29
+ * more common one — keeps the base class and its inline caches untouched.
30
+ */
31
+ class HarmonyImportBareSideEffectDependency extends HarmonyImportSideEffectDependency {
32
+ /**
33
+ * Returns function to determine if the connection is active.
34
+ * @param {ModuleGraph} moduleGraph module graph
35
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
36
+ */
37
+ getCondition(moduleGraph) {
38
+ return (connection) => {
39
+ const refModule = connection.resolvedModule;
40
+
41
+ if (!refModule) return true;
42
+ // Nothing reads the module, so emitting its file is the only thing the
43
+ // import can have been written for.
44
+ if (emitsOwnFile(refModule)) return true;
45
+
46
+ return refModule.getSideEffectsConnectionState(moduleGraph);
47
+ };
48
+ }
49
+ }
50
+
51
+ makeSerializable(
52
+ HarmonyImportBareSideEffectDependency,
53
+ "webpack/lib/dependencies/HarmonyImportBareSideEffectDependency"
54
+ );
55
+
56
+ HarmonyImportBareSideEffectDependency.Template =
57
+ HarmonyImportSideEffectDependency.Template;
58
+
59
+ module.exports = HarmonyImportBareSideEffectDependency;
@@ -11,11 +11,14 @@ const InitFragment = require("../InitFragment");
11
11
  const Template = require("../Template");
12
12
  const AwaitDependenciesInitFragment = require("../async-modules/AwaitDependenciesInitFragment");
13
13
  const isGeneratorLowered = require("../async-modules/isGeneratorLowered");
14
+ const memoize = require("../util/memoize");
14
15
  const { filterRuntime, mergeRuntime } = require("../util/runtime");
15
16
  const HarmonyLinkingError = require("./HarmonyLinkingError");
16
17
  const { ImportPhase, ImportPhaseUtils } = require("./ImportPhase");
17
18
  const ModuleDependency = require("./ModuleDependency");
18
19
 
20
+ const getExternalModule = memoize(() => require("../ExternalModule"));
21
+
19
22
  /** @import { ReplaceSource } from "webpack-sources" */
20
23
  /**
21
24
  * @import {
@@ -97,6 +100,36 @@ const getNonOptionalPart = (members, membersOptionals) => {
97
100
 
98
101
  /** @typedef {string[]} Ids */
99
102
 
103
+ /**
104
+ * Export names a lazy barrel still defers, so they are missing from its provided
105
+ * exports without being absent from the module.
106
+ * @param {Module} module the imported module
107
+ * @returns {Set<string> | true | undefined} deferred names, true when a deferred star re-export may provide any name, undefined when none
108
+ */
109
+ const getDeferredExports = (module) => {
110
+ const factoryMeta = module.factoryMeta;
111
+ if (factoryMeta === undefined || !factoryMeta.sideEffectFree) return;
112
+ /** @type {Set<string> | undefined} */
113
+ let names;
114
+ for (const dep of module.dependencies) {
115
+ // TODO remove in webpack 6
116
+ // These may be missing on custom dependency types not extending the base Dependency
117
+ if (
118
+ typeof dep.getLazyUntil !== "function" ||
119
+ typeof dep.isLazy !== "function"
120
+ ) {
121
+ continue;
122
+ }
123
+ if (!dep.isLazy()) continue;
124
+ const until = dep.getLazyUntil();
125
+ if (until === Dependency.LAZY_UNTIL_FALLBACK) return true;
126
+ if (until !== Dependency.LAZY_UNTIL_ID) continue;
127
+ if (names === undefined) names = new Set();
128
+ names.add(/** @type {string} */ (dep.getLazyName()));
129
+ }
130
+ return names;
131
+ };
132
+
100
133
  class HarmonyImportDependency extends ModuleDependency {
101
134
  /**
102
135
  * Creates an instance of HarmonyImportDependency.
@@ -185,9 +218,14 @@ class HarmonyImportDependency extends ModuleDependency {
185
218
  const importedModule = /** @type {Module} */ (moduleGraph.getModule(this));
186
219
  const meta = moduleGraph.getMeta(module);
187
220
 
221
+ // An async external is a promise webpack awaits, not a module record with
222
+ // an evaluating state, so deferring its namespace would never throw.
188
223
  const isDeferred =
189
224
  ImportPhaseUtils.isDefer(this.phase) &&
190
- !(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
225
+ !(
226
+ /** @type {BuildMeta} */ (importedModule.buildMeta).async &&
227
+ importedModule instanceof getExternalModule()
228
+ );
191
229
 
192
230
  const metaKey = isDeferred ? "deferredImportVarMap" : "importVarMap";
193
231
  let importVarMap = meta[metaKey];
@@ -283,48 +321,63 @@ class HarmonyImportDependency extends ModuleDependency {
283
321
  (exportsType !== "default-with-named" || ids[0] !== "default") &&
284
322
  moduleGraph.isExportProvided(importedModule, ids) === false
285
323
  ) {
286
- // We are sure that it's not provided
287
-
288
- // Try to provide detailed info in the error message
289
- let pos = 0;
290
- let exportsInfo = moduleGraph.getExportsInfo(importedModule);
291
- while (pos < ids.length && exportsInfo) {
292
- const id = ids[pos++];
293
- const exportInfo = exportsInfo.getReadOnlyExportInfo(id);
294
- if (exportInfo.provided === false) {
295
- // We are sure that it's not provided
296
- const providedExports = exportsInfo.getProvidedExports();
297
- const moreInfo = !Array.isArray(providedExports)
298
- ? " (possible exports unknown)"
299
- : providedExports.length === 0
300
- ? " (module has no exports)"
301
- : ` (possible exports: ${providedExports.join(", ")})`;
302
- return [
303
- new HarmonyLinkingError(
304
- `export ${ids
305
- .slice(0, pos)
306
- .map((id) => `'${id}'`)
307
- .join(".")} ${additionalMessage} was not found in '${
308
- this.userRequest
309
- }'${moreInfo}`
310
- )
311
- ];
324
+ const deferredExports = getDeferredExports(importedModule);
325
+
326
+ if (
327
+ deferredExports !== true &&
328
+ (deferredExports === undefined || !deferredExports.has(ids[0]))
329
+ ) {
330
+ // We are sure that it's not provided
331
+
332
+ // Try to provide detailed info in the error message
333
+ let pos = 0;
334
+ let exportsInfo = moduleGraph.getExportsInfo(importedModule);
335
+ while (pos < ids.length && exportsInfo) {
336
+ const id = ids[pos++];
337
+ const exportInfo = exportsInfo.getReadOnlyExportInfo(id);
338
+ if (exportInfo.provided === false) {
339
+ // We are sure that it's not provided
340
+ let providedExports = exportsInfo.getProvidedExports();
341
+ // only the first level names the imported module itself
342
+ if (
343
+ pos === 1 &&
344
+ deferredExports !== undefined &&
345
+ Array.isArray(providedExports)
346
+ ) {
347
+ providedExports = [...providedExports, ...deferredExports];
348
+ }
349
+ const moreInfo = !Array.isArray(providedExports)
350
+ ? " (possible exports unknown)"
351
+ : providedExports.length === 0
352
+ ? " (module has no exports)"
353
+ : ` (possible exports: ${providedExports.join(", ")})`;
354
+ return [
355
+ new HarmonyLinkingError(
356
+ `export ${ids
357
+ .slice(0, pos)
358
+ .map((id) => `'${id}'`)
359
+ .join(".")} ${additionalMessage} was not found in '${
360
+ this.userRequest
361
+ }'${moreInfo}`
362
+ )
363
+ ];
364
+ }
365
+ exportsInfo =
366
+ /** @type {ExportsInfo} */
367
+ (exportInfo.getNestedExportsInfo());
312
368
  }
313
- exportsInfo =
314
- /** @type {ExportsInfo} */
315
- (exportInfo.getNestedExportsInfo());
316
- }
317
369
 
318
- // General error message
319
- return [
320
- new HarmonyLinkingError(
321
- `export ${ids
322
- .map((id) => `'${id}'`)
323
- .join(".")} ${additionalMessage} was not found in '${
324
- this.userRequest
325
- }'`
326
- )
327
- ];
370
+ // General error message
371
+ return [
372
+ new HarmonyLinkingError(
373
+ `export ${ids
374
+ .map((id) => `'${id}'`)
375
+ .join(".")} ${additionalMessage} was not found in '${
376
+ this.userRequest
377
+ }'`
378
+ )
379
+ ];
380
+ }
328
381
  }
329
382
  }
330
383
  switch (exportsType) {
@@ -468,8 +521,13 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
468
521
  }
469
522
 
470
523
  const importStatement = dep.getImportStatement(false, templateContext);
524
+ // A module deferring itself is already evaluating: awaiting it would probe
525
+ // the deferred namespace and force the evaluation it must not trigger.
526
+ const isSelfDeferred =
527
+ ImportPhaseUtils.isDefer(dep.phase) && referencedModule === module;
471
528
  if (
472
529
  referencedModule &&
530
+ !isSelfDeferred &&
473
531
  templateContext.moduleGraph.isAsync(referencedModule)
474
532
  ) {
475
533
  templateContext.initFragments.push(