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
@@ -21,8 +21,8 @@ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
21
21
  * @param {(string[] | null)=} runtimeRequirements runtime requirements
22
22
  * @returns {function(Expression): true} plugin function
23
23
  */
24
- exports.toConstantDependency = (parser, value, runtimeRequirements) => {
25
- return function constDependency(expr) {
24
+ module.exports.toConstantDependency = (parser, value, runtimeRequirements) =>
25
+ function constDependency(expr) {
26
26
  const dep = new ConstDependency(
27
27
  value,
28
28
  /** @type {Range} */ (expr.range),
@@ -32,43 +32,39 @@ exports.toConstantDependency = (parser, value, runtimeRequirements) => {
32
32
  parser.state.module.addPresentationalDependency(dep);
33
33
  return true;
34
34
  };
35
- };
36
35
 
37
36
  /**
38
37
  * @param {string} value the string value
39
38
  * @returns {function(Expression): BasicEvaluatedExpression} plugin function
40
39
  */
41
- exports.evaluateToString = value => {
42
- return function stringExpression(expr) {
40
+ module.exports.evaluateToString = value =>
41
+ function stringExpression(expr) {
43
42
  return new BasicEvaluatedExpression()
44
43
  .setString(value)
45
44
  .setRange(/** @type {Range} */ (expr.range));
46
45
  };
47
- };
48
46
 
49
47
  /**
50
48
  * @param {number} value the number value
51
49
  * @returns {function(Expression): BasicEvaluatedExpression} plugin function
52
50
  */
53
- exports.evaluateToNumber = value => {
54
- return function stringExpression(expr) {
51
+ module.exports.evaluateToNumber = value =>
52
+ function stringExpression(expr) {
55
53
  return new BasicEvaluatedExpression()
56
54
  .setNumber(value)
57
55
  .setRange(/** @type {Range} */ (expr.range));
58
56
  };
59
- };
60
57
 
61
58
  /**
62
59
  * @param {boolean} value the boolean value
63
60
  * @returns {function(Expression): BasicEvaluatedExpression} plugin function
64
61
  */
65
- exports.evaluateToBoolean = value => {
66
- return function booleanExpression(expr) {
62
+ module.exports.evaluateToBoolean = value =>
63
+ function booleanExpression(expr) {
67
64
  return new BasicEvaluatedExpression()
68
65
  .setBoolean(value)
69
66
  .setRange(/** @type {Range} */ (expr.range));
70
67
  };
71
- };
72
68
 
73
69
  /**
74
70
  * @param {string} identifier identifier
@@ -77,9 +73,14 @@ exports.evaluateToBoolean = value => {
77
73
  * @param {boolean|null=} truthy is truthy, null if nullish
78
74
  * @returns {function(Expression): BasicEvaluatedExpression} callback
79
75
  */
80
- exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
81
- return function identifierExpression(expr) {
82
- let evaluatedExpression = new BasicEvaluatedExpression()
76
+ module.exports.evaluateToIdentifier = (
77
+ identifier,
78
+ rootInfo,
79
+ getMembers,
80
+ truthy
81
+ ) =>
82
+ function identifierExpression(expr) {
83
+ const evaluatedExpression = new BasicEvaluatedExpression()
83
84
  .setIdentifier(identifier, rootInfo, getMembers)
84
85
  .setSideEffects(false)
85
86
  .setRange(/** @type {Range} */ (expr.range));
@@ -97,15 +98,14 @@ exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
97
98
 
98
99
  return evaluatedExpression;
99
100
  };
100
- };
101
101
 
102
102
  /**
103
103
  * @param {JavascriptParser} parser the parser
104
104
  * @param {string} message the message
105
105
  * @returns {function(Expression): boolean | undefined} callback to handle unsupported expression
106
106
  */
107
- exports.expressionIsUnsupported = (parser, message) => {
108
- return function unsupportedExpression(expr) {
107
+ module.exports.expressionIsUnsupported = (parser, message) =>
108
+ function unsupportedExpression(expr) {
109
109
  const dep = new ConstDependency(
110
110
  "(void 0)",
111
111
  /** @type {Range} */ (expr.range),
@@ -122,8 +122,7 @@ exports.expressionIsUnsupported = (parser, message) => {
122
122
  );
123
123
  return true;
124
124
  };
125
- };
126
125
 
127
- exports.skipTraversal = () => true;
126
+ module.exports.skipTraversal = () => true;
128
127
 
129
- exports.approve = () => true;
128
+ module.exports.approve = () => true;
@@ -15,6 +15,7 @@ const { getAllChunks } = require("./ChunkHelpers");
15
15
  /** @typedef {import("../Chunk").ChunkId} ChunkId */
16
16
  /** @typedef {import("../Compilation")} Compilation */
17
17
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
18
19
  /** @typedef {import("../Entrypoint")} Entrypoint */
19
20
  /** @typedef {import("../ChunkGraph").EntryModuleWithChunkGroup} EntryModuleWithChunkGroup */
20
21
  /** @typedef {import("../ChunkGroup")} ChunkGroup */
@@ -23,6 +24,9 @@ const { getAllChunks } = require("./ChunkHelpers");
23
24
 
24
25
  const EXPORT_PREFIX = `var ${RuntimeGlobals.exports} = `;
25
26
 
27
+ /** @typedef {Set<Chunk>} Chunks */
28
+ /** @typedef {ModuleId[]} ModuleIds */
29
+
26
30
  /**
27
31
  * @param {ChunkGraph} chunkGraph chunkGraph
28
32
  * @param {RuntimeTemplate} runtimeTemplate runtimeTemplate
@@ -31,7 +35,7 @@ const EXPORT_PREFIX = `var ${RuntimeGlobals.exports} = `;
31
35
  * @param {boolean} passive true: passive startup with on chunks loaded
32
36
  * @returns {string} runtime code
33
37
  */
34
- exports.generateEntryStartup = (
38
+ module.exports.generateEntryStartup = (
35
39
  chunkGraph,
36
40
  runtimeTemplate,
37
41
  entries,
@@ -46,9 +50,16 @@ exports.generateEntryStartup = (
46
50
  )}`
47
51
  ];
48
52
 
49
- const runModule = id => {
50
- return `__webpack_exec__(${JSON.stringify(id)})`;
51
- };
53
+ /**
54
+ * @param {ModuleId} id id
55
+ * @returns {string} fn to execute
56
+ */
57
+ const runModule = id => `__webpack_exec__(${JSON.stringify(id)})`;
58
+ /**
59
+ * @param {Chunks} chunks chunks
60
+ * @param {ModuleIds} moduleIds module ids
61
+ * @param {boolean=} final true when final, otherwise false
62
+ */
52
63
  const outputCombination = (chunks, moduleIds, final) => {
53
64
  if (chunks.size === 0) {
54
65
  runtime.push(
@@ -71,16 +82,19 @@ exports.generateEntryStartup = (
71
82
  }
72
83
  };
73
84
 
74
- let currentChunks = undefined;
75
- let currentModuleIds = undefined;
85
+ /** @type {Chunks | undefined} */
86
+ let currentChunks;
87
+ /** @type {ModuleIds | undefined} */
88
+ let currentModuleIds;
76
89
 
77
90
  for (const [module, entrypoint] of entries) {
78
91
  const runtimeChunk =
79
92
  /** @type {Entrypoint} */
80
93
  (entrypoint).getRuntimeChunk();
81
- const moduleId = chunkGraph.getModuleId(module);
94
+ const moduleId = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
82
95
  const chunks = getAllChunks(
83
- /** @type {Entrypoint} */ (entrypoint),
96
+ /** @type {Entrypoint} */
97
+ (entrypoint),
84
98
  chunk,
85
99
  runtimeChunk
86
100
  );
@@ -89,10 +103,14 @@ exports.generateEntryStartup = (
89
103
  currentChunks.size === chunks.size &&
90
104
  isSubset(currentChunks, chunks)
91
105
  ) {
92
- currentModuleIds.push(moduleId);
106
+ /** @type {ModuleIds} */
107
+ (currentModuleIds).push(moduleId);
93
108
  } else {
94
109
  if (currentChunks) {
95
- outputCombination(currentChunks, currentModuleIds);
110
+ outputCombination(
111
+ currentChunks,
112
+ /** @type {ModuleIds} */ (currentModuleIds)
113
+ );
96
114
  }
97
115
  currentChunks = chunks;
98
116
  currentModuleIds = [moduleId];
@@ -101,7 +119,12 @@ exports.generateEntryStartup = (
101
119
 
102
120
  // output current modules with export prefix
103
121
  if (currentChunks) {
104
- outputCombination(currentChunks, currentModuleIds, true);
122
+ outputCombination(
123
+ currentChunks,
124
+ /** @type {ModuleIds} */
125
+ (currentModuleIds),
126
+ true
127
+ );
105
128
  }
106
129
  runtime.push("");
107
130
  return Template.asString(runtime);
@@ -114,7 +137,12 @@ exports.generateEntryStartup = (
114
137
  * @param {Chunk} chunk chunk
115
138
  * @returns {void}
116
139
  */
117
- exports.updateHashForEntryStartup = (hash, chunkGraph, entries, chunk) => {
140
+ module.exports.updateHashForEntryStartup = (
141
+ hash,
142
+ chunkGraph,
143
+ entries,
144
+ chunk
145
+ ) => {
118
146
  for (const [module, entrypoint] of entries) {
119
147
  const runtimeChunk =
120
148
  /** @type {Entrypoint} */
@@ -137,7 +165,7 @@ exports.updateHashForEntryStartup = (hash, chunkGraph, entries, chunk) => {
137
165
  * @param {function(Chunk, ChunkGraph): boolean} filterFn filter function
138
166
  * @returns {Set<number | string>} initially fulfilled chunk ids
139
167
  */
140
- exports.getInitialChunkIds = (chunk, chunkGraph, filterFn) => {
168
+ module.exports.getInitialChunkIds = (chunk, chunkGraph, filterFn) => {
141
169
  const initialChunkIds = new Set(chunk.ids);
142
170
  for (const c of chunk.getAllInitialChunks()) {
143
171
  if (c === chunk || filterFn(c, chunkGraph)) continue;
@@ -27,7 +27,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
27
27
  const stringifySafe = data => {
28
28
  const stringified = JSON.stringify(data);
29
29
  if (!stringified) {
30
- return undefined; // Invalid JSON
30
+ return; // Invalid JSON
31
31
  }
32
32
 
33
33
  return stringified.replace(/\u2028|\u2029/g, str =>
@@ -53,22 +53,16 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
53
53
  if (used === UsageState.Unused) continue;
54
54
 
55
55
  /** @type {RawJsonData} */
56
- let value;
57
- if (used === UsageState.OnlyPropertiesUsed && exportInfo.exportsInfo) {
58
- value = createObjectForExportsInfo(
59
- data[key],
60
- exportInfo.exportsInfo,
61
- runtime
62
- );
63
- } else {
64
- value = data[key];
65
- }
56
+ const value =
57
+ used === UsageState.OnlyPropertiesUsed && exportInfo.exportsInfo
58
+ ? createObjectForExportsInfo(data[key], exportInfo.exportsInfo, runtime)
59
+ : data[key];
66
60
 
67
61
  const name = /** @type {string} */ (exportInfo.getUsedName(key, runtime));
68
62
  /** @type {Record<string, RawJsonData>} */ (reducedData)[name] = value;
69
63
  }
70
64
  if (isArray) {
71
- let arrayLengthWhenUsed =
65
+ const arrayLengthWhenUsed =
72
66
  exportsInfo.getReadOnlyExportInfo("length").getUsed(runtime) !==
73
67
  UsageState.Unused
74
68
  ? data.length
@@ -173,7 +167,7 @@ class JsonGenerator extends Generator {
173
167
  }
174
168
  const exportsInfo = moduleGraph.getExportsInfo(module);
175
169
  /** @type {RawJsonData} */
176
- let finalJson =
170
+ const finalJson =
177
171
  typeof data === "object" &&
178
172
  data &&
179
173
  exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused
@@ -33,7 +33,6 @@ class JsonModulesPlugin {
33
33
  * Apply the plugin
34
34
  * @param {Compiler} compiler the compiler instance
35
35
  * @returns {void}
36
- *
37
36
  */
38
37
  apply(compiler) {
39
38
  compiler.hooks.compilation.tap(
@@ -48,9 +47,7 @@ class JsonModulesPlugin {
48
47
  });
49
48
  normalModuleFactory.hooks.createGenerator
50
49
  .for(JSON_MODULE_TYPE)
51
- .tap(PLUGIN_NAME, () => {
52
- return new JsonGenerator();
53
- });
50
+ .tap(PLUGIN_NAME, () => new JsonGenerator());
54
51
  }
55
52
  );
56
53
  }
@@ -49,9 +49,11 @@ class JsonParser extends Parser {
49
49
  data =
50
50
  typeof source === "object"
51
51
  ? source
52
- : parseFn(source[0] === "\ufeff" ? source.slice(1) : source);
53
- } catch (e) {
54
- throw new Error(`Cannot parse JSON: ${/** @type {Error} */ (e).message}`);
52
+ : parseFn(source[0] === "\uFEFF" ? source.slice(1) : source);
53
+ } catch (err) {
54
+ throw new Error(
55
+ `Cannot parse JSON: ${/** @type {Error} */ (err).message}`
56
+ );
55
57
  }
56
58
  const jsonData = new JsonData(/** @type {Buffer | RawJsonData} */ (data));
57
59
  const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
@@ -60,17 +60,14 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
60
60
  `AMD library name must be unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
61
61
  );
62
62
  }
63
- } else {
64
- if (name && typeof name !== "string") {
65
- throw new Error(
66
- `AMD library name must be a simple string or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
67
- );
68
- }
63
+ } else if (name && typeof name !== "string") {
64
+ throw new Error(
65
+ `AMD library name must be a simple string or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
66
+ );
69
67
  }
70
- return {
71
- name: /** @type {string} */ (name),
72
- amdContainer: /** @type {string} */ (amdContainer)
73
- };
68
+ const _name = /** @type {string} */ (name);
69
+ const _amdContainer = /** @type {string} */ (amdContainer);
70
+ return { name: _name, amdContainer: _amdContainer };
74
71
  }
75
72
 
76
73
  /**
@@ -146,13 +143,12 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
146
143
  source,
147
144
  `${fnEnd});`
148
145
  );
149
- } else {
150
- return new ConcatSource(
151
- `${amdContainerPrefix}define(${fnStart}`,
152
- source,
153
- `${fnEnd});`
154
- );
155
146
  }
147
+ return new ConcatSource(
148
+ `${amdContainerPrefix}define(${fnStart}`,
149
+ source,
150
+ `${fnEnd});`
151
+ );
156
152
  }
157
153
 
158
154
  /**
@@ -36,9 +36,8 @@ const IDENTIFIER_REGEX =
36
36
  * @param {string} name name to be validated
37
37
  * @returns {boolean} true, when valid
38
38
  */
39
- const isNameValid = name => {
40
- return !KEYWORD_REGEX.test(name) && IDENTIFIER_REGEX.test(name);
41
- };
39
+ const isNameValid = name =>
40
+ !KEYWORD_REGEX.test(name) && IDENTIFIER_REGEX.test(name);
42
41
 
43
42
  /**
44
43
  * @param {string[]} accessor variable plus properties
@@ -136,15 +135,14 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
136
135
  `Library name must be a string or string array. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
137
136
  );
138
137
  }
139
- } else {
140
- if (name && typeof name !== "string" && !Array.isArray(name)) {
141
- throw new Error(
142
- `Library name must be a string, string array or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
143
- );
144
- }
138
+ } else if (name && typeof name !== "string" && !Array.isArray(name)) {
139
+ throw new Error(
140
+ `Library name must be a string, string array or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
141
+ );
145
142
  }
143
+ const _name = /** @type {string | string[]} */ (name);
146
144
  return {
147
- name: /** @type {string | string[]} */ (name),
145
+ name: _name,
148
146
  export: library.export
149
147
  };
150
148
  }
@@ -356,7 +354,7 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
356
354
  * @returns {void}
357
355
  */
358
356
  runtimeRequirements(chunk, set, libraryContext) {
359
- // we don't need to return exports from runtime
357
+ set.add(RuntimeGlobals.exports);
360
358
  }
361
359
 
362
360
  /**
@@ -52,10 +52,11 @@ class EnableLibraryPlugin {
52
52
  throw new Error(
53
53
  `Library type "${type}" is not enabled. ` +
54
54
  "EnableLibraryPlugin need to be used to enable this type of library. " +
55
- 'This usually happens through the "output.enabledLibraryTypes" option. ' +
56
- 'If you are using a function as entry which sets "library", you need to add all potential library types to "output.enabledLibraryTypes". ' +
57
- "These types are enabled: " +
58
- Array.from(getEnabledTypes(compiler)).join(", ")
55
+ `This usually happens through the "output.enabledLibraryTypes" option. ` +
56
+ `If you are using a function as entry which sets "library", you need to add all potential library types to "output.enabledLibraryTypes". ` +
57
+ `These types are enabled: ${Array.from(
58
+ getEnabledTypes(compiler)
59
+ ).join(", ")}`
59
60
  );
60
61
  }
61
62
  }
@@ -78,12 +79,13 @@ class EnableLibraryPlugin {
78
79
  const ExportPropertyTemplatePlugin = require("./ExportPropertyLibraryPlugin");
79
80
  new ExportPropertyTemplatePlugin({
80
81
  type,
81
- nsObjectUsed: type !== "module"
82
+ nsObjectUsed: !["module", "modern-module"].includes(type),
83
+ runtimeExportsUsed: type !== "modern-module"
82
84
  }).apply(compiler);
83
85
  };
84
86
  switch (type) {
85
87
  case "var": {
86
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
88
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
87
89
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
88
90
  new AssignLibraryPlugin({
89
91
  type,
@@ -94,7 +96,7 @@ class EnableLibraryPlugin {
94
96
  break;
95
97
  }
96
98
  case "assign-properties": {
97
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
99
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
98
100
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
99
101
  new AssignLibraryPlugin({
100
102
  type,
@@ -106,7 +108,7 @@ class EnableLibraryPlugin {
106
108
  break;
107
109
  }
108
110
  case "assign": {
109
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
111
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
110
112
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
111
113
  new AssignLibraryPlugin({
112
114
  type,
@@ -117,7 +119,7 @@ class EnableLibraryPlugin {
117
119
  break;
118
120
  }
119
121
  case "this": {
120
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
122
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
121
123
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
122
124
  new AssignLibraryPlugin({
123
125
  type,
@@ -128,7 +130,7 @@ class EnableLibraryPlugin {
128
130
  break;
129
131
  }
130
132
  case "window": {
131
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
133
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
132
134
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
133
135
  new AssignLibraryPlugin({
134
136
  type,
@@ -139,7 +141,7 @@ class EnableLibraryPlugin {
139
141
  break;
140
142
  }
141
143
  case "self": {
142
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
144
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
143
145
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
144
146
  new AssignLibraryPlugin({
145
147
  type,
@@ -150,7 +152,7 @@ class EnableLibraryPlugin {
150
152
  break;
151
153
  }
152
154
  case "global": {
153
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
155
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
154
156
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
155
157
  new AssignLibraryPlugin({
156
158
  type,
@@ -161,7 +163,7 @@ class EnableLibraryPlugin {
161
163
  break;
162
164
  }
163
165
  case "commonjs": {
164
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
166
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
165
167
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
166
168
  new AssignLibraryPlugin({
167
169
  type,
@@ -172,7 +174,7 @@ class EnableLibraryPlugin {
172
174
  break;
173
175
  }
174
176
  case "commonjs-static": {
175
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
177
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
176
178
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
177
179
  new AssignLibraryPlugin({
178
180
  type,
@@ -184,7 +186,7 @@ class EnableLibraryPlugin {
184
186
  }
185
187
  case "commonjs2":
186
188
  case "commonjs-module": {
187
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
189
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
188
190
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
189
191
  new AssignLibraryPlugin({
190
192
  type,
@@ -238,6 +240,14 @@ class EnableLibraryPlugin {
238
240
  }).apply(compiler);
239
241
  break;
240
242
  }
243
+ case "modern-module": {
244
+ enableExportProperty();
245
+ const ModernModuleLibraryPlugin = require("./ModernModuleLibraryPlugin");
246
+ new ModernModuleLibraryPlugin({
247
+ type
248
+ }).apply(compiler);
249
+ break;
250
+ }
241
251
  default:
242
252
  throw new Error(`Unsupported library type ${type}.
243
253
  Plugins which provide custom library types must call EnableLibraryPlugin.setEnabled(compiler, type) to disable this error.`);
@@ -30,6 +30,7 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
30
30
  * @typedef {object} ExportPropertyLibraryPluginOptions
31
31
  * @property {LibraryType} type
32
32
  * @property {boolean} nsObjectUsed the namespace object is used
33
+ * @property {boolean} runtimeExportsUsed runtime exports are used
33
34
  */
34
35
  /**
35
36
  * @typedef {ExportPropertyLibraryPluginParsed} T
@@ -39,12 +40,13 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
39
40
  /**
40
41
  * @param {ExportPropertyLibraryPluginOptions} options options
41
42
  */
42
- constructor({ type, nsObjectUsed }) {
43
+ constructor({ type, nsObjectUsed, runtimeExportsUsed }) {
43
44
  super({
44
45
  pluginName: "ExportPropertyLibraryPlugin",
45
46
  type
46
47
  });
47
48
  this.nsObjectUsed = nsObjectUsed;
49
+ this.runtimeExportsUsed = runtimeExportsUsed;
48
50
  }
49
51
 
50
52
  /**
@@ -93,7 +95,11 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
93
95
  * @param {LibraryContext<T>} libraryContext context
94
96
  * @returns {void}
95
97
  */
96
- runtimeRequirements(chunk, set, libraryContext) {}
98
+ runtimeRequirements(chunk, set, libraryContext) {
99
+ if (this.runtimeExportsUsed) {
100
+ set.add(RuntimeGlobals.exports);
101
+ }
102
+ }
97
103
 
98
104
  /**
99
105
  * @param {Source} source source
@@ -54,8 +54,9 @@ class JsonpLibraryPlugin extends AbstractLibraryPlugin {
54
54
  `Jsonp library name must be a simple string. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
55
55
  );
56
56
  }
57
+ const _name = /** @type {string} */ (name);
57
58
  return {
58
- name: /** @type {string} */ (name)
59
+ name: _name
59
60
  };
60
61
  }
61
62