@depup/webpack 5.110.3-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 (283) 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/CircularModulesPlugin.js +157 -55
  8. package/lib/CleanPlugin.js +2 -2
  9. package/lib/CompatibilityPlugin.js +3 -4
  10. package/lib/Compilation.js +336 -337
  11. package/lib/Compiler.js +213 -51
  12. package/lib/ConstPlugin.js +16 -132
  13. package/lib/CopyPlugin.js +1054 -0
  14. package/lib/DefinePlugin.js +24 -8
  15. package/lib/DependencyTemplate.js +2 -1
  16. package/lib/DotenvPlugin.js +24 -28
  17. package/lib/ErrorHelpers.js +113 -0
  18. package/lib/ExportsInfo.js +20 -16
  19. package/lib/ExternalModule.js +47 -22
  20. package/lib/FileSystemInfo.js +17 -14
  21. package/lib/FlagDependencyExportsPlugin.js +53 -34
  22. package/lib/FlagDependencyUsagePlugin.js +9 -13
  23. package/lib/Generator.js +24 -2
  24. package/lib/HotModuleReplacementPlugin.js +55 -7
  25. package/lib/IgnorePlugin.js +1 -1
  26. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  27. package/lib/LoaderOptionsPlugin.js +1 -1
  28. package/lib/MainTemplate.js +5 -1
  29. package/lib/Module.js +19 -10
  30. package/lib/ModuleGraph.js +6 -9
  31. package/lib/MultiCompiler.js +7 -17
  32. package/lib/MultiWatching.js +1 -1
  33. package/lib/NormalModule.js +135 -50
  34. package/lib/NormalModuleFactory.js +1 -1
  35. package/lib/RuntimeGlobals.js +21 -7
  36. package/lib/RuntimeModule.js +28 -12
  37. package/lib/RuntimePlugin.js +30 -3
  38. package/lib/RuntimeTemplate.js +813 -518
  39. package/lib/SourceMapDevToolPlugin.js +54 -104
  40. package/lib/TemplatedPathPlugin.js +16 -59
  41. package/lib/Watching.js +9 -0
  42. package/lib/WebpackOptionsApply.js +84 -91
  43. package/lib/asset/AssetBytesGenerator.js +7 -1
  44. package/lib/asset/AssetGenerator.js +50 -24
  45. package/lib/asset/AssetModule.js +3 -0
  46. package/lib/asset/AssetSourceGenerator.js +7 -1
  47. package/lib/asset/WebManifestParser.js +7 -5
  48. package/lib/buildChunkGraph.js +11 -15
  49. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  50. package/lib/cache/IdleFileCachePlugin.js +2 -2
  51. package/lib/cache/MemoryCachePlugin.js +4 -4
  52. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  53. package/lib/cache/PackFileCacheStrategy.js +17 -19
  54. package/lib/cache/getLazyHashedEtag.js +3 -5
  55. package/lib/config/browserslistTargetHandler.js +17 -4
  56. package/lib/config/defaults.js +138 -128
  57. package/lib/config/getClaimedAssetTypes.js +10 -11
  58. package/lib/config/normalization.js +82 -12
  59. package/lib/config/target.js +13 -4
  60. package/lib/container/ContainerReferencePlugin.js +6 -0
  61. package/lib/container/RemoteRuntimeModule.js +9 -0
  62. package/lib/container/declaredRemotes.js +39 -0
  63. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  64. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  65. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  66. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  67. package/lib/css/CssGenerator.js +27 -11
  68. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  69. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  70. package/lib/css/CssModule.js +1 -1
  71. package/lib/css/CssModulesPlugin.js +7 -6
  72. package/lib/css/CssParser.js +162 -31
  73. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  74. package/lib/css/cssMinify.js +43 -32
  75. package/lib/css/data.js +3514 -869
  76. package/lib/css/syntax.js +6370 -1220
  77. package/lib/debug/ProfilingPlugin.js +7 -4
  78. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  79. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  80. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  81. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  82. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  83. package/lib/dependencies/CommonJsPlugin.js +19 -3
  84. package/lib/dependencies/CommonJsRequireDependency.js +14 -5
  85. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  86. package/lib/dependencies/ContextDependency.js +1 -1
  87. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  88. package/lib/dependencies/ContextElementDependency.js +1 -1
  89. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  90. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  91. package/lib/dependencies/CssUrlDependency.js +3 -5
  92. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  93. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  94. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  95. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  96. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
  97. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  98. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  99. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  100. package/lib/dependencies/HarmonyImportDependency.js +6 -1
  101. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
  102. package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
  103. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  104. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  105. package/lib/dependencies/HtmlEntryDependency.js +124 -102
  106. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  107. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  108. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  109. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  110. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  111. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  112. package/lib/dependencies/ImportParserPlugin.js +1 -1
  113. package/lib/dependencies/LoaderPlugin.js +26 -1
  114. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  115. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  116. package/lib/dependencies/URLContextDependency.js +1 -1
  117. package/lib/dependencies/URLDependency.js +6 -5
  118. package/lib/dependencies/WorkerAndWorkletPlugin.js +15 -21
  119. package/lib/dependencies/WorkerDependency.js +7 -7
  120. package/lib/dependencies/WorkletDependency.js +7 -11
  121. package/lib/dll/DelegatedModule.js +18 -1
  122. package/lib/dll/DllReferencePlugin.js +11 -8
  123. package/lib/dll/LibManifestPlugin.js +1 -1
  124. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  125. package/lib/errors/DuplicateModulesWarning.js +12 -7
  126. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  127. package/lib/errors/ExternalStarReexportError.js +44 -0
  128. package/lib/errors/HookWebpackError.js +3 -2
  129. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  130. package/lib/errors/ModuleParseError.js +2 -1
  131. package/lib/errors/UnusedAssetsWarning.js +36 -0
  132. package/lib/errors/UnusedFederationWarning.js +35 -0
  133. package/lib/errors/UnusedModulesWarning.js +38 -0
  134. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  135. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  136. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  137. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  138. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  139. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  140. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  141. package/lib/html/HtmlGenerator.js +72 -87
  142. package/lib/html/HtmlModulesPlugin.js +418 -200
  143. package/lib/html/HtmlParser.js +110 -147
  144. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  145. package/lib/html/data.js +142 -7
  146. package/lib/html/htmlMinify.js +92 -122
  147. package/lib/html/syntax.js +1618 -1391
  148. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  149. package/lib/index.js +49 -3
  150. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  151. package/lib/javascript/JavascriptGenerator.js +8 -1
  152. package/lib/javascript/JavascriptModule.js +1 -0
  153. package/lib/javascript/JavascriptModulesPlugin.js +73 -72
  154. package/lib/javascript/JavascriptParser.js +1970 -900
  155. package/lib/javascript/StartupHelpers.js +27 -3
  156. package/lib/javascript/data.js +172 -0
  157. package/lib/javascript/grammar.js +5546 -0
  158. package/lib/javascript/parser.js +1500 -0
  159. package/lib/javascript/regexp.js +1762 -0
  160. package/lib/javascript/regexpData.js +51 -0
  161. package/lib/javascript/syntax.js +9061 -5262
  162. package/lib/json/JsonGenerator.js +7 -1
  163. package/lib/library/ModuleLibraryPlugin.js +171 -132
  164. package/lib/loaders/LoaderRunner.js +137 -9
  165. package/lib/node/NodeWatchFileSystem.js +3 -9
  166. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  167. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  168. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  169. package/lib/optimize/ConcatenatedModule.js +178 -120
  170. package/lib/optimize/ConstExportsPlugin.js +50 -39
  171. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  172. package/lib/optimize/InlineExports.js +20 -123
  173. package/lib/optimize/InnerGraphPlugin.js +7 -13
  174. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  175. package/lib/optimize/MangleExportsPlugin.js +13 -4
  176. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  177. package/lib/optimize/RealContentHashPlugin.js +68 -9
  178. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  179. package/lib/optimize/SplitChunksPlugin.js +2 -4
  180. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  181. package/lib/performance/BroadContextsPlugin.js +1 -1
  182. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  183. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  184. package/lib/performance/EvalUsagePlugin.js +5 -2
  185. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  186. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  187. package/lib/performance/SizeLimitsPlugin.js +2 -4
  188. package/lib/performance/TopLevelThisPlugin.js +5 -4
  189. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  190. package/lib/performance/UnusedFederationPlugin.js +147 -0
  191. package/lib/performance/UnusedModulesPlugin.js +141 -0
  192. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  193. package/lib/performance/isOnlyReexported.js +65 -0
  194. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  195. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  196. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  197. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  198. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  199. package/lib/prefetch/ResourceHintPlugin.js +18 -23
  200. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  201. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  202. package/lib/rules/RuleSetCompiler.js +211 -4
  203. package/lib/runtime/AsyncModuleRuntimeModule.js +98 -66
  204. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  205. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  206. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  207. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  208. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  209. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  210. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  211. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  212. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  213. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  214. package/lib/runtime/HelperRuntimeModule.js +10 -0
  215. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +305 -224
  216. package/lib/runtime/NonceRuntimeModule.js +9 -0
  217. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  218. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  219. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  220. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  221. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  222. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  223. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  224. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  225. package/lib/schemes/DataUriPlugin.js +3 -6
  226. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  227. package/lib/serialization/BinaryMiddleware.js +9 -9
  228. package/lib/serialization/FileMiddleware.js +16 -16
  229. package/lib/serialization/ObjectMiddleware.js +168 -139
  230. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  231. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  232. package/lib/sharing/ShareRuntimeModule.js +9 -0
  233. package/lib/sharing/declaredShared.js +47 -0
  234. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  235. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  236. package/lib/typescript/TypeScriptPlugin.js +2 -3
  237. package/lib/url/URLParserPlugin.js +6 -8
  238. package/lib/util/LocConverter.js +4 -7
  239. package/lib/util/SourceProcessor.js +91 -91
  240. package/lib/util/async.js +292 -0
  241. package/lib/util/buildDiagnostics.js +69 -0
  242. package/lib/util/chainedImports.js +3 -4
  243. package/lib/util/concatenate.js +4 -4
  244. package/lib/util/createHooksRegistry.js +1 -2
  245. package/lib/util/dataURL.js +2 -3
  246. package/lib/util/deterministicGrouping.js +8 -13
  247. package/lib/util/findGraphRoots.js +6 -13
  248. package/lib/util/fs.js +27 -1
  249. package/lib/util/globUtils.js +1 -1
  250. package/lib/util/handlerKeys.js +40 -0
  251. package/lib/util/hash/wasm-hash.js +3 -4
  252. package/lib/util/identifier.js +20 -0
  253. package/lib/util/internalSerializables.js +5 -1
  254. package/lib/util/registerExternalSerializer.js +6 -45
  255. package/lib/util/semver.js +5 -3
  256. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  257. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  258. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  259. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  260. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  261. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  262. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  263. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  264. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  265. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  266. package/package.json +55 -46
  267. package/schemas/WebpackOptions.check.js +1 -1
  268. package/schemas/WebpackOptions.json +379 -66
  269. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  270. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  271. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  272. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  273. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  274. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  275. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  276. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  277. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  278. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  279. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  280. package/types.d.ts +1723 -604
  281. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  282. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  283. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -12,8 +12,11 @@ const RuntimeGlobals = require("../RuntimeGlobals");
12
12
  const { InlinedUsedName } = require("../optimize/InlineExports");
13
13
  const makeSerializable = require("../util/makeSerializable");
14
14
  const { propertyAccess } = require("../util/property");
15
- const ExportBindingInitFragment = require("./ExportBindingInitFragment");
15
+
16
16
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
17
+
18
+ const { ExportBindingType } = HarmonyExportInitFragment;
19
+
17
20
  const NullDependency = require("./NullDependency");
18
21
 
19
22
  const DEFAULT_EXPORT_NAME = "default";
@@ -26,8 +29,8 @@ const DEFAULT_EXPORT_NAME = "default";
26
29
  /** @import { InlinedValue } from "../optimize/InlineExports" */
27
30
  /** @import { Range } from "../javascript/JavascriptParser" */
28
31
  /** @typedef {string | { id?: string | undefined, range: Range, prefix: string, suffix: string }} DeclarationId */
29
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, Range, string, DeclarationId | undefined, boolean]>} ObjectDeserializerContext */
30
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, Range, string, DeclarationId | undefined, boolean]>} ObjectSerializerContext */
32
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, Range, string, DeclarationId | undefined, boolean, boolean]>} ObjectDeserializerContext */
33
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, Range, string, DeclarationId | undefined, boolean, boolean]>} ObjectSerializerContext */
31
34
  /** @import { ExportMap } from "./HarmonyExportInitFragment" */
32
35
  /**
33
36
  * @import {
@@ -54,6 +57,8 @@ class HarmonyExportExpressionDependency extends NullDependency {
54
57
  this.constValue = constValue;
55
58
  /** @type {boolean} */
56
59
  this.isAnonymousDefault = false;
60
+ /** @type {boolean} */
61
+ this.isAnonymousDefaultClass = false;
57
62
  }
58
63
 
59
64
  get type() {
@@ -126,6 +131,7 @@ class HarmonyExportExpressionDependency extends NullDependency {
126
131
  .write(this.prefix)
127
132
  .write(this.declarationId)
128
133
  .write(this.isAnonymousDefault)
134
+ .write(this.isAnonymousDefaultClass)
129
135
  .write(this.constValue);
130
136
  super.serialize(context);
131
137
  }
@@ -145,8 +151,10 @@ class HarmonyExportExpressionDependency extends NullDependency {
145
151
  const c4 = c3.rest;
146
152
  this.isAnonymousDefault = c4.read();
147
153
  const c5 = c4.rest;
148
- this.constValue = c5.read();
149
- super.deserialize(c5.rest);
154
+ this.isAnonymousDefaultClass = c5.read();
155
+ const c6 = c5.rest;
156
+ this.constValue = c6.read();
157
+ super.deserialize(c6.rest);
150
158
  }
151
159
  }
152
160
 
@@ -208,7 +216,10 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
208
216
  } else if (used) {
209
217
  /** @type {ExportMap} */
210
218
  const map = new Map();
211
- map.set(used, `/* export default binding */ ${name}`);
219
+ map.set(used, {
220
+ value: `/* export default binding */ ${name}`,
221
+ type: ExportBindingType.Getter
222
+ });
212
223
  initFragments.push(new HarmonyExportInitFragment(exportsName, map));
213
224
  }
214
225
 
@@ -253,31 +264,19 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
253
264
  defaultIsUsed = true;
254
265
  runtimeRequirements.add(RuntimeGlobals.exports);
255
266
  // `export default <expr>` binds an immutable const declaration
256
- const canUseValueBinding =
267
+ const valueFormat =
257
268
  /** @type {import("../Module").BuildInfo} */ (module.buildInfo)
258
269
  .isCircular === false;
259
- if (canUseValueBinding) {
260
- initFragments.push(
261
- new ExportBindingInitFragment(
262
- exportsName,
263
- [
264
- {
265
- name: used,
266
- value: `/* export default binding */ ${name}`,
267
- bindingType: "value"
268
- }
269
- ],
270
- true
271
- )
272
- );
273
- } else {
274
- /** @type {ExportMap} */
275
- const map = new Map();
276
- map.set(used, name);
277
- initFragments.push(
278
- new HarmonyExportInitFragment(exportsName, map)
279
- );
280
- }
270
+
271
+ /** @type {ExportMap} */
272
+ const map = new Map();
273
+ map.set(used, {
274
+ value: name,
275
+ type: valueFormat
276
+ ? ExportBindingType.Value
277
+ : ExportBindingType.Getter
278
+ });
279
+ initFragments.push(new HarmonyExportInitFragment(exportsName, map));
281
280
  } else {
282
281
  content = `/* unused harmony default export */ var ${name} = `;
283
282
  }
@@ -294,10 +293,9 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
294
293
  } else if (used) {
295
294
  defaultIsUsed = true;
296
295
  runtimeRequirements.add(RuntimeGlobals.exports);
297
- // This is a little bit incorrect as TDZ is not correct, but we can't use const.
298
- // No local `__WEBPACK_DEFAULT_EXPORT__` binding is created in this path,
299
- // so the anonymous-default `.name` fix-up below must reference the actual
300
- // assignment target instead. See issue #20793.
296
+ // The TDZ is not reproduced here, `const` being unavailable. No local
297
+ // binding is created either, so the anonymous-default `.name` fix-up
298
+ // below names the assignment target instead. See issue #20793.
301
299
  name = `${exportsName}${propertyAccess(
302
300
  typeof used === "string" ? [used] : used
303
301
  )}`;
@@ -308,6 +306,22 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
308
306
  }
309
307
 
310
308
  if (dep.range) {
309
+ // `export default class {}` names the class "default", and a static
310
+ // initializer reads that name before any later fix-up could run, so
311
+ // the class is created as a property of that name instead.
312
+ if (dep.isAnonymousDefaultClass) {
313
+ source.replace(
314
+ dep.rangeStatement[0],
315
+ dep.range[0] - 1,
316
+ `${content}{ ${DEFAULT_EXPORT_NAME}: (${dep.prefix}`
317
+ );
318
+ source.replace(
319
+ dep.range[1],
320
+ dep.rangeStatement[1] - 0.5,
321
+ `) }.${DEFAULT_EXPORT_NAME};`
322
+ );
323
+ return;
324
+ }
311
325
  source.replace(
312
326
  dep.rangeStatement[0],
313
327
  dep.range[0] - 1,
@@ -14,9 +14,11 @@ const Template = require("../Template");
14
14
  const {
15
15
  InlinedUsedName,
16
16
  isExportInlined,
17
- isInlineEnabled
17
+ isInlineEnabled,
18
+ isInlineExportsEnabled
18
19
  } = require("../optimize/InlineExports");
19
20
  const {
21
+ getKnownExportNames,
20
22
  getMakeDeferredNamespaceModeFromExportsType
21
23
  } = require("../runtime/MakeDeferredNamespaceObjectRuntime");
22
24
  const { countIterable } = require("../util/IterableHelpers");
@@ -29,6 +31,9 @@ const {
29
31
  keyToRuntime
30
32
  } = require("../util/runtime");
31
33
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
34
+
35
+ const { ExportBindingType } = HarmonyExportInitFragment;
36
+
32
37
  const HarmonyImportDependency = require("./HarmonyImportDependency");
33
38
  const HarmonyLinkingError = require("./HarmonyLinkingError");
34
39
  const { ImportPhaseUtils } = require("./ImportPhase");
@@ -44,7 +49,8 @@ const processExportInfo = require("./processExportInfo");
44
49
  * RawReferencedExports,
45
50
  * ReferencedExports,
46
51
  * TRANSITIVE,
47
- * ExportInfoName
52
+ * ExportInfoName,
53
+ * UpdateHashContext
48
54
  * } from "../Dependency"
49
55
  */
50
56
  /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
@@ -58,6 +64,7 @@ const processExportInfo = require("./processExportInfo");
58
64
  * } from "../Module"
59
65
  */
60
66
  /** @import ModuleGraph from "../ModuleGraph" */
67
+ /** @import Hash from "../util/Hash" */
61
68
  /**
62
69
  * @import ModuleGraphConnection, {
63
70
  * ConnectionState
@@ -829,6 +836,31 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
829
836
  };
830
837
  }
831
838
 
839
+ /**
840
+ * Updates the hash with the data contributed by this instance.
841
+ * @param {Hash} hash hash to be updated
842
+ * @param {UpdateHashContext} context context
843
+ * @returns {void}
844
+ */
845
+ updateHash(hash, context) {
846
+ const { chunkGraph, runtime } = context;
847
+ const moduleGraph = chunkGraph.moduleGraph;
848
+ if (!isInlineExportsEnabled(moduleGraph)) return;
849
+ const module = moduleGraph.getModule(this);
850
+ if (!module || !isInlineEnabled(module)) return;
851
+ const mode = this.getMode(moduleGraph, runtime);
852
+ if (mode.type !== "normal-reexport") return;
853
+ const exportsInfo = moduleGraph.getExportsInfo(module);
854
+ for (const item of /** @type {NormalReexportItem[]} */ (mode.items)) {
855
+ if (item.hidden || item.checked) continue;
856
+ const usedName = exportsInfo.getUsedName(item.ids, runtime);
857
+ if (usedName instanceof InlinedUsedName) {
858
+ hash.update(`${item.name}:${item.ids.join(".")}:`);
859
+ usedName.updateHash(hash);
860
+ }
861
+ }
862
+ }
863
+
832
864
  /**
833
865
  * Gets module evaluation side effects state.
834
866
  * @param {ModuleGraph} moduleGraph the module graph
@@ -1515,10 +1547,9 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1515
1547
  }
1516
1548
 
1517
1549
  case "reexport-fake-namespace-object":
1518
- // `${name}_namespace_cache` needs an identifier to suffix, but an
1519
- // in-scope target is an expression. The concatenation already builds
1520
- // the same object, memoized: its interop namespace picks the mode from
1521
- // the exports type, which is what `fakeType` mirrors.
1550
+ // `${name}_namespace_cache` needs an identifier to suffix, and an in-scope
1551
+ // target is an expression. The concatenation already memoizes the same
1552
+ // object, its interop namespace taking the mode `fakeType` mirrors.
1522
1553
  if (inScope) {
1523
1554
  initFragments.push(
1524
1555
  this.getReexportFragment(
@@ -1581,7 +1612,19 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1581
1612
  );
1582
1613
  break;
1583
1614
 
1584
- case "reexport-namespace-object":
1615
+ case "reexport-namespace-object": {
1616
+ let value = namespaceImportVar;
1617
+
1618
+ // The re-exported binding is the namespace itself, so it has to be
1619
+ // the same object every importer of that module is handed.
1620
+ if (
1621
+ importedModule.buildInfo &&
1622
+ importedModule.buildInfo.specNamespaceObject
1623
+ ) {
1624
+ runtimeRequirements.add(RuntimeGlobals.specNamespaceObject);
1625
+ value = `${RuntimeGlobals.specNamespaceObject}(${value})`;
1626
+ }
1627
+
1585
1628
  initFragments.push(
1586
1629
  this.getReexportFragment(
1587
1630
  module,
@@ -1589,12 +1632,13 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1589
1632
  moduleGraph
1590
1633
  .getExportsInfo(module)
1591
1634
  .getUsedName(/** @type {string} */ (mode.name), runtime),
1592
- namespaceImportVar,
1635
+ value,
1593
1636
  "",
1594
1637
  runtimeRequirements
1595
1638
  )
1596
1639
  );
1597
1640
  break;
1641
+ }
1598
1642
 
1599
1643
  case "normal-reexport": {
1600
1644
  // loop-invariants hoisted out of the per-item loop below (a barrel
@@ -1729,7 +1773,10 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1729
1773
 
1730
1774
  /** @type {ExportMap} */
1731
1775
  const map = new Map();
1732
- map.set(key, `/* ${comment} */ ${returnValue}`);
1776
+ map.set(key, {
1777
+ value: `/* ${comment} */ ${returnValue}`,
1778
+ type: ExportBindingType.Getter
1779
+ });
1733
1780
 
1734
1781
  return new HarmonyExportInitFragment(module.exportsArgument, map);
1735
1782
  }
@@ -1756,12 +1803,12 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1756
1803
 
1757
1804
  /** @type {ExportMap} */
1758
1805
  const map = new Map();
1759
- map.set(
1760
- key,
1761
- `/* reexport fake namespace object from non-harmony */ ${name}_namespace_cache || (${name}_namespace_cache = ${
1806
+ map.set(key, {
1807
+ value: `/* reexport fake namespace object from non-harmony */ ${name}_namespace_cache || (${name}_namespace_cache = ${
1762
1808
  RuntimeGlobals.createFakeNamespaceObject
1763
- }(${name}${fakeType ? `, ${fakeType}` : ""}))`
1764
- );
1809
+ }(${name}${fakeType ? `, ${fakeType}` : ""}))`,
1810
+ type: ExportBindingType.Getter
1811
+ });
1765
1812
 
1766
1813
  return [
1767
1814
  new InitFragment(
@@ -1800,10 +1847,20 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1800
1847
  const map = new Map();
1801
1848
  const moduleId = JSON.stringify(chunkGraph.getModuleId(module));
1802
1849
  const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
1803
- map.set(
1804
- key,
1805
- `/* reexport deferred namespace object */ ${name}_deferred_namespace_cache || (${name}_deferred_namespace_cache = ${RuntimeGlobals.makeDeferredNamespaceObject}(${moduleId}, ${mode}))`
1850
+ const names = getKnownExportNames(
1851
+ chunkGraph.moduleGraph,
1852
+ module,
1853
+ exportsType
1854
+ );
1855
+ runtimeRequirements.add(
1856
+ names
1857
+ ? RuntimeGlobals.hasSealedDeferredNamespace
1858
+ : RuntimeGlobals.hasSynthesizedDeferredNamespace
1806
1859
  );
1860
+ map.set(key, {
1861
+ value: `/* reexport deferred namespace object */ ${name}_deferred_namespace_cache || (${name}_deferred_namespace_cache = ${RuntimeGlobals.makeDeferredNamespaceObject}(${moduleId}, ${mode}${names ? `, ${JSON.stringify(names)}` : ""}))`,
1862
+ type: ExportBindingType.Getter
1863
+ });
1807
1864
 
1808
1865
  return [
1809
1866
  new InitFragment(
@@ -35,9 +35,13 @@ const joinIterableWithComma = (iterable) => {
35
35
  return str;
36
36
  };
37
37
 
38
- /** @typedef {Map<UsedName, string>} ExportMap */
38
+ const ExportBindingType = Object.freeze({
39
+ Getter: 0b00,
40
+ Value: 0b01
41
+ });
42
+
43
+ /** @typedef {Map<UsedName, { value: string, type: typeof ExportBindingType.Getter | typeof ExportBindingType.Value }>} ExportMap */
39
44
  /** @typedef {Set<string>} UnusedExports */
40
- /** @import { OnDemandGeneration } from "./ExportBindingInitFragment" */
41
45
 
42
46
  /** @type {ExportMap} */
43
47
  const EMPTY_MAP = new Map();
@@ -54,13 +58,13 @@ class HarmonyExportInitFragment extends InitFragment {
54
58
  * @param {string} exportsArgument the exports identifier
55
59
  * @param {ExportMap} exportMap mapping from used name to exposed variable name
56
60
  * @param {UnusedExports} unusedExports list of unused export names
57
- * @param {OnDemandGeneration=} onDemand offered the call instead of emitting it
61
+ * @param {boolean} onDemand leave the call out of the source and hand it over in the code generation data (see `KnownMeta.onDemandExports`)
58
62
  */
59
63
  constructor(
60
64
  exportsArgument,
61
65
  exportMap = EMPTY_MAP,
62
66
  unusedExports = EMPTY_SET,
63
- onDemand = undefined
67
+ onDemand = false
64
68
  ) {
65
69
  super(undefined, InitFragment.STAGE_HARMONY_EXPORTS, 1, "harmony-exports");
66
70
  /** @type {string} */
@@ -69,8 +73,51 @@ class HarmonyExportInitFragment extends InitFragment {
69
73
  this.exportMap = exportMap;
70
74
  /** @type {UnusedExports} */
71
75
  this.unusedExports = unusedExports;
72
- /** @type {OnDemandGeneration | undefined} */
76
+ /** @type {boolean} */
73
77
  this.onDemand = onDemand;
78
+
79
+ this._generated = false;
80
+ this._defsValue = undefined;
81
+ this._defsGetter = undefined;
82
+ }
83
+
84
+ /**
85
+ * Returns the source code that will be included as initialization code.
86
+ * @param {GenerateContext} context context
87
+ * @returns {void}
88
+ */
89
+ _generate({ runtimeTemplate }) {
90
+ if (this._generated) return;
91
+ this._generated = true;
92
+
93
+ if (this.exportMap.size > 0) {
94
+ /** @type {string[]} */
95
+ const _defsValue = [];
96
+ const _defsGetter = [];
97
+ const orderedExportMap =
98
+ this.exportMap.size > 1
99
+ ? [...this.exportMap].sort(([a], [b]) => (a < b ? -1 : 1))
100
+ : this.exportMap;
101
+ for (const [key, { value, type }] of orderedExportMap) {
102
+ switch (type) {
103
+ case ExportBindingType.Getter:
104
+ _defsGetter.push(
105
+ `\n/* harmony export */ ${propertyName(
106
+ /** @type {string} */ (key)
107
+ )}: ${runtimeTemplate.returningFunction(value)}`
108
+ );
109
+ break;
110
+
111
+ case ExportBindingType.Value:
112
+ _defsValue.push(
113
+ `\n/* harmony export */ ${JSON.stringify(key)}, 0, ${value}`
114
+ );
115
+ }
116
+ }
117
+
118
+ this._defsGetter = _defsGetter;
119
+ this._defsValue = _defsValue;
120
+ }
74
121
  }
75
122
 
76
123
  /**
@@ -85,12 +132,15 @@ class HarmonyExportInitFragment extends InitFragment {
85
132
  /** @type {undefined | UnusedExports} */
86
133
  let unusedExports;
87
134
  let unusedExportsOwned = false;
135
+ /** @type {boolean} */
136
+ let onDemand = false;
88
137
 
89
138
  for (const fragment of fragments) {
90
139
  if (fragment.exportMap.size !== 0) {
91
140
  if (exportMap === undefined) {
92
141
  exportMap = fragment.exportMap;
93
142
  exportMapOwned = false;
143
+ onDemand = fragment.onDemand;
94
144
  } else {
95
145
  if (!exportMapOwned) {
96
146
  exportMap = new Map(exportMap);
@@ -98,6 +148,7 @@ class HarmonyExportInitFragment extends InitFragment {
98
148
  }
99
149
  for (const [key, value] of fragment.exportMap) {
100
150
  if (!exportMap.has(key)) exportMap.set(key, value);
151
+ onDemand = onDemand || fragment.onDemand;
101
152
  }
102
153
  }
103
154
  }
@@ -120,7 +171,7 @@ class HarmonyExportInitFragment extends InitFragment {
120
171
  this.exportsArgument,
121
172
  exportMap,
122
173
  unusedExports,
123
- this.onDemand
174
+ onDemand
124
175
  );
125
176
  }
126
177
 
@@ -167,7 +218,10 @@ class HarmonyExportInitFragment extends InitFragment {
167
218
  * @param {GenerateContext} context context
168
219
  * @returns {string | Source | undefined} the source code that will be included as initialization code
169
220
  */
170
- getContent({ runtimeTemplate, runtimeRequirements }) {
221
+ getContent(context) {
222
+ this._generate(context);
223
+
224
+ const { runtimeRequirements, getData } = context;
171
225
  const unusedPart =
172
226
  this.unusedExports.size > 1
173
227
  ? `/* unused harmony exports ${joinIterableWithComma(
@@ -177,35 +231,68 @@ class HarmonyExportInitFragment extends InitFragment {
177
231
  ? `/* unused harmony export ${first(this.unusedExports)} */\n`
178
232
  : "";
179
233
  let definePart = "";
180
- if (this.exportMap.size > 0) {
181
- /** @type {string[]} */
182
- const definitions = [];
183
- const orderedExportMap =
184
- this.exportMap.size > 1
185
- ? [...this.exportMap].sort(([a], [b]) => (a < b ? -1 : 1))
186
- : this.exportMap;
187
- for (const [key, value] of orderedExportMap) {
188
- definitions.push(
189
- `\n/* harmony export */ ${propertyName(
190
- /** @type {string} */ (key)
191
- )}: ${runtimeTemplate.returningFunction(value)}`
192
- );
193
- }
234
+
235
+ if (this._defsGetter && this._defsGetter.length) {
194
236
  // Requested even when the call is taken over below: whoever took it may still
195
237
  // emit it, and by then the requirement set is closed.
196
238
  runtimeRequirements.add(RuntimeGlobals.exports);
197
239
  runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
198
240
  definePart = `/* harmony export */ ${
199
241
  RuntimeGlobals.definePropertyGetters
200
- }(${this.exportsArgument}, {${definitions.join(
242
+ }(${this.exportsArgument}, {${this._defsGetter.join(
201
243
  ","
202
244
  )}\n/* harmony export */ });\n`;
203
- if (this.onDemand !== undefined && this.onDemand(definePart, false)) {
245
+ if (this.onDemand && getData !== undefined) {
246
+ const data = getData();
247
+ const before = data.get("exportsSource");
248
+ data.set(
249
+ "exportsSource",
250
+ before ? `${before}${definePart}` : definePart
251
+ );
204
252
  definePart = "";
205
253
  }
206
254
  }
255
+
207
256
  return `${definePart}${unusedPart}`;
208
257
  }
258
+
259
+ /**
260
+ * Returns the source code that will be included at the end of the module.
261
+ * @param {GenerateContext} context context
262
+ * @returns {string | Source | undefined} the source code that will be included at the end of the module
263
+ */
264
+ getEndContent({ runtimeRequirements, getData }) {
265
+ let definePart = "";
266
+
267
+ if (this._defsValue && this._defsValue.length) {
268
+ // Requested even when the call is taken over below: whoever took it may still
269
+ // emit it, and by then the requirement set is closed.
270
+ runtimeRequirements.add(RuntimeGlobals.exports);
271
+ runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
272
+ // Only this fragment emits the array form, so the runtime helper drops the
273
+ // branch reading it unless this asks for it.
274
+ runtimeRequirements.add(RuntimeGlobals.definePropertyGettersFromArray);
275
+ definePart = `/* harmony export */ ${
276
+ RuntimeGlobals.definePropertyGetters
277
+ }(${this.exportsArgument}, [${this._defsValue.join(",")}\n/* harmony export */ ]);\n`;
278
+
279
+ if (this.onDemand && getData !== undefined) {
280
+ const data = getData();
281
+ const before = data.get("exportsBindingSource");
282
+ data.set(
283
+ "exportsBindingSource",
284
+ before ? `${before}${definePart}` : definePart
285
+ );
286
+ definePart = "";
287
+ } else {
288
+ definePart = `\n${definePart}`;
289
+ }
290
+ }
291
+
292
+ return definePart;
293
+ }
209
294
  }
210
295
 
211
296
  module.exports = HarmonyExportInitFragment;
297
+
298
+ HarmonyExportInitFragment.ExportBindingType = ExportBindingType;
@@ -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