webpack 5.93.0 → 5.95.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 (344) 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 +33 -20
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +75 -68
  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 +6 -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 +41 -15
  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 +130 -69
  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 +21 -13
  94. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  95. package/lib/WatchIgnorePlugin.js +26 -9
  96. package/lib/Watching.js +10 -5
  97. package/lib/WebpackOptionsApply.js +84 -62
  98. package/lib/asset/AssetGenerator.js +107 -42
  99. package/lib/asset/AssetModulesPlugin.js +29 -23
  100. package/lib/asset/AssetSourceGenerator.js +2 -7
  101. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  102. package/lib/buildChunkGraph.js +93 -81
  103. package/lib/cache/IdleFileCachePlugin.js +4 -4
  104. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  105. package/lib/cache/PackFileCacheStrategy.js +51 -50
  106. package/lib/cache/ResolverCachePlugin.js +6 -6
  107. package/lib/cache/mergeEtags.js +16 -21
  108. package/lib/cli.js +148 -104
  109. package/lib/config/browserslistTargetHandler.js +16 -13
  110. package/lib/config/defaults.js +32 -28
  111. package/lib/config/normalization.js +335 -344
  112. package/lib/config/target.js +42 -52
  113. package/lib/container/ContainerEntryModule.js +2 -2
  114. package/lib/container/ContainerPlugin.js +1 -1
  115. package/lib/container/RemoteRuntimeModule.js +11 -8
  116. package/lib/container/options.js +18 -4
  117. package/lib/css/CssExportsGenerator.js +26 -24
  118. package/lib/css/CssGenerator.js +9 -4
  119. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  120. package/lib/css/CssModulesPlugin.js +127 -47
  121. package/lib/css/CssParser.js +20 -18
  122. package/lib/css/walkCssTokens.js +80 -95
  123. package/lib/debug/ProfilingPlugin.js +19 -20
  124. package/lib/dependencies/AMDDefineDependency.js +1 -1
  125. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  126. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  127. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  128. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  129. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  130. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  131. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  132. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  133. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  134. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  135. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  136. package/lib/dependencies/ConstDependency.js +1 -1
  137. package/lib/dependencies/ContextDependency.js +7 -2
  138. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  139. package/lib/dependencies/ContextElementDependency.js +35 -8
  140. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  141. package/lib/dependencies/CssExportDependency.js +7 -7
  142. package/lib/dependencies/CssImportDependency.js +0 -2
  143. package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
  144. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  145. package/lib/dependencies/CssUrlDependency.js +4 -5
  146. package/lib/dependencies/DynamicExports.js +5 -5
  147. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  148. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  149. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  151. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  153. package/lib/dependencies/HarmonyExports.js +2 -2
  154. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  155. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
  157. package/lib/dependencies/ImportDependency.js +1 -1
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  159. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  160. package/lib/dependencies/ImportParserPlugin.js +39 -44
  161. package/lib/dependencies/JsonExportsDependency.js +22 -18
  162. package/lib/dependencies/LoaderPlugin.js +47 -36
  163. package/lib/dependencies/LocalModule.js +1 -1
  164. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  165. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  166. package/lib/dependencies/ProvidedDependency.js +1 -1
  167. package/lib/dependencies/PureExpressionDependency.js +6 -6
  168. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  169. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  170. package/lib/dependencies/SystemPlugin.js +1 -1
  171. package/lib/dependencies/URLDependency.js +3 -3
  172. package/lib/dependencies/URLPlugin.js +66 -12
  173. package/lib/dependencies/WorkerPlugin.js +25 -24
  174. package/lib/dependencies/processExportInfo.js +3 -1
  175. package/lib/electron/ElectronTargetPlugin.js +1 -0
  176. package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
  177. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  178. package/lib/formatLocation.js +1 -2
  179. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  180. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  181. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  182. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  183. package/lib/hmr/lazyCompilationBackend.js +64 -40
  184. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  185. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  186. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  187. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  188. package/lib/ids/IdHelpers.js +29 -39
  189. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  190. package/lib/index.js +1 -5
  191. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
  192. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  193. package/lib/javascript/ChunkHelpers.js +1 -1
  194. package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
  195. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  196. package/lib/javascript/JavascriptGenerator.js +23 -7
  197. package/lib/javascript/JavascriptModulesPlugin.js +133 -86
  198. package/lib/javascript/JavascriptParser.js +179 -200
  199. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  200. package/lib/javascript/StartupHelpers.js +41 -13
  201. package/lib/json/JsonGenerator.js +7 -13
  202. package/lib/json/JsonModulesPlugin.js +1 -4
  203. package/lib/json/JsonParser.js +5 -3
  204. package/lib/library/AmdLibraryPlugin.js +12 -16
  205. package/lib/library/AssignLibraryPlugin.js +8 -10
  206. package/lib/library/EnableLibraryPlugin.js +15 -14
  207. package/lib/library/JsonpLibraryPlugin.js +2 -1
  208. package/lib/library/ModernModuleLibraryPlugin.js +8 -6
  209. package/lib/library/ModuleLibraryPlugin.js +2 -1
  210. package/lib/library/SystemLibraryPlugin.js +2 -1
  211. package/lib/library/UmdLibraryPlugin.js +66 -92
  212. package/lib/logging/Logger.js +32 -4
  213. package/lib/logging/createConsoleLogger.js +12 -13
  214. package/lib/logging/runtime.js +7 -8
  215. package/lib/logging/truncateArgs.js +5 -8
  216. package/lib/node/NodeWatchFileSystem.js +3 -18
  217. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  218. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  219. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/nodeConsole.js +22 -22
  221. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  222. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  223. package/lib/optimize/ConcatenatedModule.js +81 -51
  224. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  225. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  226. package/lib/optimize/InnerGraph.js +17 -17
  227. package/lib/optimize/InnerGraphPlugin.js +8 -7
  228. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  229. package/lib/optimize/MangleExportsPlugin.js +1 -0
  230. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
  231. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  232. package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
  233. package/lib/optimize/RealContentHashPlugin.js +7 -10
  234. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  235. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  236. package/lib/optimize/SplitChunksPlugin.js +34 -30
  237. package/lib/performance/SizeLimitsPlugin.js +2 -2
  238. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  239. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  240. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  241. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  242. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  243. package/lib/rules/RuleSetCompiler.js +41 -22
  244. package/lib/rules/UseEffectRulePlugin.js +36 -32
  245. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  246. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  247. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  248. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  249. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  250. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  251. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  252. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  253. package/lib/schemes/DataUriPlugin.js +1 -1
  254. package/lib/schemes/HttpUriPlugin.js +241 -126
  255. package/lib/serialization/BinaryMiddleware.js +44 -28
  256. package/lib/serialization/DateObjectSerializer.js +1 -0
  257. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  258. package/lib/serialization/FileMiddleware.js +154 -106
  259. package/lib/serialization/MapObjectSerializer.js +2 -1
  260. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  261. package/lib/serialization/ObjectMiddleware.js +52 -56
  262. package/lib/serialization/PlainObjectSerializer.js +32 -6
  263. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  264. package/lib/serialization/Serializer.js +4 -5
  265. package/lib/serialization/SerializerMiddleware.js +6 -6
  266. package/lib/serialization/SetObjectSerializer.js +2 -1
  267. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  268. package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
  269. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  270. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  271. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  272. package/lib/sharing/utils.js +15 -27
  273. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  274. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  275. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  276. package/lib/stats/StatsFactory.js +127 -56
  277. package/lib/stats/StatsPrinter.js +75 -44
  278. package/lib/util/ArrayHelpers.js +8 -4
  279. package/lib/util/ArrayQueue.js +1 -1
  280. package/lib/util/AsyncQueue.js +31 -12
  281. package/lib/util/IterableHelpers.js +3 -4
  282. package/lib/util/LazyBucketSortedSet.js +60 -44
  283. package/lib/util/LazySet.js +13 -0
  284. package/lib/util/MapHelpers.js +1 -3
  285. package/lib/util/ParallelismFactorCalculator.js +1 -1
  286. package/lib/util/Queue.js +1 -1
  287. package/lib/util/Semaphore.js +4 -7
  288. package/lib/util/SetHelpers.js +5 -5
  289. package/lib/util/SortableSet.js +4 -3
  290. package/lib/util/StackedCacheMap.js +4 -6
  291. package/lib/util/StackedMap.js +1 -3
  292. package/lib/util/StringXor.js +0 -5
  293. package/lib/util/TupleQueue.js +1 -1
  294. package/lib/util/TupleSet.js +15 -5
  295. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  296. package/lib/util/WeakTupleMap.js +19 -21
  297. package/lib/util/binarySearchBounds.js +5 -12
  298. package/lib/util/chainedImports.js +1 -1
  299. package/lib/util/cleverMerge.js +21 -19
  300. package/lib/util/comparators.js +57 -52
  301. package/lib/util/compileBooleanMatcher.js +3 -6
  302. package/lib/util/conventions.js +8 -11
  303. package/lib/util/createHash.js +9 -6
  304. package/lib/util/deprecation.js +22 -12
  305. package/lib/util/deterministicGrouping.js +19 -26
  306. package/lib/util/findGraphRoots.js +2 -2
  307. package/lib/util/fs.js +32 -32
  308. package/lib/util/hash/md4.js +2 -2
  309. package/lib/util/hash/wasm-hash.js +7 -7
  310. package/lib/util/hash/xxhash64.js +2 -2
  311. package/lib/util/identifier.js +81 -59
  312. package/lib/util/memoize.js +8 -10
  313. package/lib/util/mergeScope.js +6 -9
  314. package/lib/util/nonNumericOnlyHash.js +2 -2
  315. package/lib/util/numberHash.js +1 -6
  316. package/lib/util/objectToMap.js +0 -1
  317. package/lib/util/propertyAccess.js +2 -5
  318. package/lib/util/propertyName.js +1 -3
  319. package/lib/util/registerExternalSerializer.js +1 -1
  320. package/lib/util/runtime.js +109 -113
  321. package/lib/util/semver.js +29 -27
  322. package/lib/util/serialization.js +16 -1
  323. package/lib/util/smartGrouping.js +5 -5
  324. package/lib/util/source.js +1 -1
  325. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  326. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  327. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  328. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  329. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  330. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  331. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  333. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  334. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  335. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  336. package/package.json +18 -17
  337. package/schemas/WebpackOptions.check.js +1 -1
  338. package/schemas/WebpackOptions.json +5 -0
  339. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  340. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  341. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  342. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  343. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  344. package/types.d.ts +681 -355
@@ -20,7 +20,11 @@ const { addLocalModule, getLocalModule } = require("./LocalModulesHelpers");
20
20
  /** @typedef {import("estree").CallExpression} CallExpression */
21
21
  /** @typedef {import("estree").Expression} Expression */
22
22
  /** @typedef {import("estree").FunctionExpression} FunctionExpression */
23
+ /** @typedef {import("estree").Identifier} Identifier */
23
24
  /** @typedef {import("estree").Literal} Literal */
25
+ /** @typedef {import("estree").MemberExpression} MemberExpression */
26
+ /** @typedef {import("estree").ObjectExpression} ObjectExpression */
27
+ /** @typedef {import("estree").SimpleCallExpression} SimpleCallExpression */
24
28
  /** @typedef {import("estree").SpreadElement} SpreadElement */
25
29
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
26
30
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
@@ -30,7 +34,7 @@ const { addLocalModule, getLocalModule } = require("./LocalModulesHelpers");
30
34
 
31
35
  /**
32
36
  * @param {Expression | SpreadElement} expr expression
33
- * @returns {boolean} true if it's a bound function expression
37
+ * @returns {expr is CallExpression} true if it's a bound function expression
34
38
  */
35
39
  const isBoundFunctionExpression = expr => {
36
40
  if (expr.type !== "CallExpression") return false;
@@ -46,7 +50,7 @@ const isBoundFunctionExpression = expr => {
46
50
 
47
51
  /**
48
52
  * @param {Expression | SpreadElement} expr expression
49
- * @returns {boolean} true when unbound function expression
53
+ * @returns {expr is FunctionExpression | ArrowFunctionExpression} true when unbound function expression
50
54
  */
51
55
  const isUnboundFunctionExpression = expr => {
52
56
  if (expr.type === "FunctionExpression") return true;
@@ -56,7 +60,7 @@ const isUnboundFunctionExpression = expr => {
56
60
 
57
61
  /**
58
62
  * @param {Expression | SpreadElement} expr expression
59
- * @returns {boolean} true when callable
63
+ * @returns {expr is FunctionExpression | ArrowFunctionExpression | CallExpression} true when callable
60
64
  */
61
65
  const isCallable = expr => {
62
66
  if (isUnboundFunctionExpression(expr)) return true;
@@ -95,26 +99,28 @@ class AMDDefineDependencyParserPlugin {
95
99
  */
96
100
  processArray(parser, expr, param, identifiers, namedModule) {
97
101
  if (param.isArray()) {
98
- /** @type {BasicEvaluatedExpression[]} */
99
- (param.items).forEach((param, idx) => {
102
+ const items = /** @type {BasicEvaluatedExpression[]} */ (param.items);
103
+ for (const [idx, item] of items.entries()) {
100
104
  if (
101
- param.isString() &&
105
+ item.isString() &&
102
106
  ["require", "module", "exports"].includes(
103
- /** @type {string} */ (param.string)
107
+ /** @type {string} */ (item.string)
104
108
  )
105
109
  )
106
- identifiers[/** @type {number} */ (idx)] = param.string;
107
- const result = this.processItem(parser, expr, param, namedModule);
110
+ identifiers[/** @type {number} */ (idx)] = /** @type {string} */ (
111
+ item.string
112
+ );
113
+ const result = this.processItem(parser, expr, item, namedModule);
108
114
  if (result === undefined) {
109
- this.processContext(parser, expr, param);
115
+ this.processContext(parser, expr, item);
110
116
  }
111
- });
117
+ }
112
118
  return true;
113
119
  } else if (param.isConstArray()) {
114
120
  /** @type {(string | LocalModuleDependency | AMDRequireItemDependency)[]} */
115
121
  const deps = [];
116
- /** @type {string[]} */
117
- (param.array).forEach((request, idx) => {
122
+ const array = /** @type {string[]} */ (param.array);
123
+ for (const [idx, request] of array.entries()) {
118
124
  let dep;
119
125
  let localModule;
120
126
  if (request === "require") {
@@ -131,17 +137,17 @@ class AMDDefineDependencyParserPlugin {
131
137
  } else {
132
138
  dep = this.newRequireItemDependency(request);
133
139
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
134
- dep.optional = !!parser.scope.inTry;
140
+ dep.optional = Boolean(parser.scope.inTry);
135
141
  parser.state.current.addDependency(dep);
136
142
  }
137
143
  deps.push(dep);
138
- });
144
+ }
139
145
  const dep = this.newRequireArrayDependency(
140
146
  deps,
141
147
  /** @type {Range} */ (param.range)
142
148
  );
143
149
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
144
- dep.optional = !!parser.scope.inTry;
150
+ dep.optional = Boolean(parser.scope.inTry);
145
151
  parser.state.module.addPresentationalDependency(dep);
146
152
  return true;
147
153
  }
@@ -156,16 +162,19 @@ class AMDDefineDependencyParserPlugin {
156
162
  */
157
163
  processItem(parser, expr, param, namedModule) {
158
164
  if (param.isConditional()) {
159
- /** @type {BasicEvaluatedExpression[]} */
160
- (param.options).forEach(param => {
161
- const result = this.processItem(parser, expr, param);
165
+ const options = /** @type {BasicEvaluatedExpression[]} */ (param.options);
166
+ for (const item of options) {
167
+ const result = this.processItem(parser, expr, item);
162
168
  if (result === undefined) {
163
- this.processContext(parser, expr, param);
169
+ this.processContext(parser, expr, item);
164
170
  }
165
- });
171
+ }
172
+
166
173
  return true;
167
174
  } else if (param.isString()) {
168
- let dep, localModule;
175
+ let dep;
176
+ let localModule;
177
+
169
178
  if (param.string === "require") {
170
179
  dep = new ConstDependency(
171
180
  RuntimeGlobals.require,
@@ -198,7 +207,7 @@ class AMDDefineDependencyParserPlugin {
198
207
  /** @type {string} */ (param.string),
199
208
  param.range
200
209
  );
201
- dep.optional = !!parser.scope.inTry;
210
+ dep.optional = Boolean(parser.scope.inTry);
202
211
  parser.state.current.addDependency(dep);
203
212
  return true;
204
213
  }
@@ -228,7 +237,7 @@ class AMDDefineDependencyParserPlugin {
228
237
  );
229
238
  if (!dep) return;
230
239
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
231
- dep.optional = !!parser.scope.inTry;
240
+ dep.optional = Boolean(parser.scope.inTry);
232
241
  parser.state.current.addDependency(dep);
233
242
  return true;
234
243
  }
@@ -239,7 +248,14 @@ class AMDDefineDependencyParserPlugin {
239
248
  * @returns {boolean | undefined} result
240
249
  */
241
250
  processCallDefine(parser, expr) {
242
- let array, fn, obj, namedModule;
251
+ /** @type {TODO} */
252
+ let array;
253
+ /** @type {FunctionExpression | ArrowFunctionExpression | CallExpression | Identifier | undefined} */
254
+ let fn;
255
+ /** @type {ObjectExpression | Identifier | undefined} */
256
+ let obj;
257
+ /** @type {string | undefined} */
258
+ let namedModule;
243
259
  switch (expr.arguments.length) {
244
260
  case 1:
245
261
  if (isCallable(expr.arguments[0])) {
@@ -251,12 +267,12 @@ class AMDDefineDependencyParserPlugin {
251
267
  } else {
252
268
  // define(expr)
253
269
  // unclear if function or object
254
- obj = fn = expr.arguments[0];
270
+ obj = fn = /** @type {Identifier} */ (expr.arguments[0]);
255
271
  }
256
272
  break;
257
273
  case 2:
258
274
  if (expr.arguments[0].type === "Literal") {
259
- namedModule = expr.arguments[0].value;
275
+ namedModule = /** @type {string} */ (expr.arguments[0].value);
260
276
  // define("…", …)
261
277
  if (isCallable(expr.arguments[1])) {
262
278
  // define("…", f() {…})
@@ -267,7 +283,7 @@ class AMDDefineDependencyParserPlugin {
267
283
  } else {
268
284
  // define("…", expr)
269
285
  // unclear if function or object
270
- obj = fn = expr.arguments[1];
286
+ obj = fn = /** @type {Identifier} */ (expr.arguments[1]);
271
287
  }
272
288
  } else {
273
289
  array = expr.arguments[0];
@@ -280,13 +296,18 @@ class AMDDefineDependencyParserPlugin {
280
296
  } else {
281
297
  // define([…], expr)
282
298
  // unclear if function or object
283
- obj = fn = expr.arguments[1];
299
+ obj = fn = /** @type {Identifier} */ (expr.arguments[1]);
284
300
  }
285
301
  }
286
302
  break;
287
303
  case 3:
288
304
  // define("…", […], f() {…})
289
- namedModule = /** @type {TODO} */ (expr).arguments[0].value;
305
+ namedModule =
306
+ /** @type {string} */
307
+ (
308
+ /** @type {Literal} */
309
+ (expr.arguments[0]).value
310
+ );
290
311
  array = expr.arguments[1];
291
312
  if (isCallable(expr.arguments[2])) {
292
313
  // define("…", […], f() {})
@@ -297,27 +318,36 @@ class AMDDefineDependencyParserPlugin {
297
318
  } else {
298
319
  // define("…", […], expr)
299
320
  // unclear if function or object
300
- obj = fn = expr.arguments[2];
321
+ obj = fn = /** @type {Identifier} */ (expr.arguments[2]);
301
322
  }
302
323
  break;
303
324
  default:
304
325
  return;
305
326
  }
306
327
  DynamicExports.bailout(parser.state);
328
+ /** @type {Identifier[] | null} */
307
329
  let fnParams = null;
308
330
  let fnParamsOffset = 0;
309
331
  if (fn) {
310
332
  if (isUnboundFunctionExpression(fn)) {
311
- fnParams = /** @type {UnboundFunctionExpression} */ (fn).params;
333
+ fnParams =
334
+ /** @type {Identifier[]} */
335
+ (fn.params);
312
336
  } else if (isBoundFunctionExpression(fn)) {
313
- fnParams = /** @type {TODO} */ (fn).callee.object.params;
314
- fnParamsOffset = /** @type {TODO} */ (fn).arguments.length - 1;
337
+ const object =
338
+ /** @type {FunctionExpression} */
339
+ (/** @type {MemberExpression} */ (fn.callee).object);
340
+
341
+ fnParams =
342
+ /** @type {Identifier[]} */
343
+ (object.params);
344
+ fnParamsOffset = fn.arguments.length - 1;
315
345
  if (fnParamsOffset < 0) {
316
346
  fnParamsOffset = 0;
317
347
  }
318
348
  }
319
349
  }
320
- let fnRenames = new Map();
350
+ const fnRenames = new Map();
321
351
  if (array) {
322
352
  /** @type {Record<number, string>} */
323
353
  const identifiers = {};
@@ -372,9 +402,14 @@ class AMDDefineDependencyParserPlugin {
372
402
  });
373
403
  } else if (fn && isBoundFunctionExpression(fn)) {
374
404
  inTry = parser.scope.inTry;
405
+
406
+ const object =
407
+ /** @type {FunctionExpression} */
408
+ (/** @type {MemberExpression} */ (fn.callee).object);
409
+
375
410
  parser.inScope(
376
- /** @type {TODO} */
377
- (fn).callee.object.params.filter(
411
+ /** @type {Identifier[]} */
412
+ (object.params).filter(
378
413
  i => !["require", "module", "exports"].includes(i.name)
379
414
  ),
380
415
  () => {
@@ -382,19 +417,20 @@ class AMDDefineDependencyParserPlugin {
382
417
  parser.setVariable(name, varInfo);
383
418
  }
384
419
  parser.scope.inTry = /** @type {boolean} */ (inTry);
385
- if (fn.callee.object.body.type === "BlockStatement") {
386
- parser.detectMode(fn.callee.object.body.body);
420
+
421
+ if (object.body.type === "BlockStatement") {
422
+ parser.detectMode(object.body.body);
387
423
  const prev = parser.prevStatement;
388
- parser.preWalkStatement(fn.callee.object.body);
424
+ parser.preWalkStatement(object.body);
389
425
  parser.prevStatement = prev;
390
- parser.walkStatement(fn.callee.object.body);
426
+ parser.walkStatement(object.body);
391
427
  } else {
392
- parser.walkExpression(fn.callee.object.body);
428
+ parser.walkExpression(object.body);
393
429
  }
394
430
  }
395
431
  );
396
- if (/** @type {TODO} */ (fn).arguments) {
397
- parser.walkExpressions(/** @type {TODO} */ (fn).arguments);
432
+ if (fn.arguments) {
433
+ parser.walkExpressions(fn.arguments);
398
434
  }
399
435
  } else if (fn || obj) {
400
436
  parser.walkExpression(fn || obj);
@@ -405,7 +441,7 @@ class AMDDefineDependencyParserPlugin {
405
441
  array ? /** @type {Range} */ (array.range) : null,
406
442
  fn ? /** @type {Range} */ (fn.range) : null,
407
443
  obj ? /** @type {Range} */ (obj.range) : null,
408
- namedModule ? namedModule : null
444
+ namedModule || null
409
445
  );
410
446
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
411
447
  if (namedModule) {
@@ -420,7 +456,7 @@ class AMDDefineDependencyParserPlugin {
420
456
  * @param {Range | null} arrayRange array range
421
457
  * @param {Range | null} functionRange function range
422
458
  * @param {Range | null} objectRange object range
423
- * @param {boolean | null} namedModule true, when define is called with a name
459
+ * @param {string | null} namedModule true, when define is called with a name
424
460
  * @returns {AMDDefineDependency} AMDDefineDependency
425
461
  */
426
462
  newDefineDependency(
@@ -440,7 +476,7 @@ class AMDDefineDependencyParserPlugin {
440
476
  }
441
477
 
442
478
  /**
443
- * @param {TODO[]} depsArray deps array
479
+ * @param {(string | LocalModuleDependency | AMDRequireItemDependency)[]} depsArray deps array
444
480
  * @param {Range} range range
445
481
  * @returns {AMDRequireArrayDependency} AMDRequireArrayDependency
446
482
  */
@@ -89,9 +89,9 @@ AMDRequireArrayDependency.Template = class AMDRequireArrayDependencyTemplate ext
89
89
  * @returns {string} content
90
90
  */
91
91
  getContent(dep, templateContext) {
92
- const requires = dep.depsArray.map(dependency => {
93
- return this.contentForDependency(dependency, templateContext);
94
- });
92
+ const requires = dep.depsArray.map(dependency =>
93
+ this.contentForDependency(dependency, templateContext)
94
+ );
95
95
  return `[${requires.join(", ")}]`;
96
96
  }
97
97
 
@@ -110,14 +110,13 @@ AMDRequireArrayDependency.Template = class AMDRequireArrayDependencyTemplate ext
110
110
 
111
111
  if (dep.localModule) {
112
112
  return dep.localModule.variableName();
113
- } else {
114
- return runtimeTemplate.moduleExports({
115
- module: moduleGraph.getModule(dep),
116
- chunkGraph,
117
- request: dep.request,
118
- runtimeRequirements
119
- });
120
113
  }
114
+ return runtimeTemplate.moduleExports({
115
+ module: moduleGraph.getModule(dep),
116
+ chunkGraph,
117
+ request: dep.request,
118
+ runtimeRequirements
119
+ });
121
120
  }
122
121
  };
123
122
 
@@ -49,11 +49,12 @@ class AMDRequireDependenciesBlockParserPlugin {
49
49
  const fnData = getFunctionExpression(expression);
50
50
  if (fnData) {
51
51
  parser.inScope(
52
- fnData.fn.params.filter(i => {
53
- return !["require", "module", "exports"].includes(
54
- /** @type {Identifier} */ (i).name
55
- );
56
- }),
52
+ fnData.fn.params.filter(
53
+ i =>
54
+ !["require", "module", "exports"].includes(
55
+ /** @type {Identifier} */ (i).name
56
+ )
57
+ ),
57
58
  () => {
58
59
  if (fnData.fn.body.type === "BlockStatement") {
59
60
  parser.walkStatement(fnData.fn.body);
@@ -104,7 +105,8 @@ class AMDRequireDependenciesBlockParserPlugin {
104
105
  /** @type {(string | LocalModuleDependency | AMDRequireItemDependency)[]} */
105
106
  const deps = [];
106
107
  for (const request of /** @type {any[]} */ (param.array)) {
107
- let dep, localModule;
108
+ let dep;
109
+ let localModule;
108
110
  if (request === "require") {
109
111
  dep = RuntimeGlobals.require;
110
112
  } else if (["exports", "module"].includes(request)) {
@@ -117,7 +119,7 @@ class AMDRequireDependenciesBlockParserPlugin {
117
119
  } else {
118
120
  dep = this.newRequireItemDependency(request);
119
121
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
120
- dep.optional = !!parser.scope.inTry;
122
+ dep.optional = Boolean(parser.scope.inTry);
121
123
  parser.state.current.addDependency(dep);
122
124
  }
123
125
  deps.push(dep);
@@ -127,7 +129,7 @@ class AMDRequireDependenciesBlockParserPlugin {
127
129
  /** @type {Range} */ (param.range)
128
130
  );
129
131
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
130
- dep.optional = !!parser.scope.inTry;
132
+ dep.optional = Boolean(parser.scope.inTry);
131
133
  parser.state.module.addPresentationalDependency(dep);
132
134
  return true;
133
135
  }
@@ -151,7 +153,8 @@ class AMDRequireDependenciesBlockParserPlugin {
151
153
  }
152
154
  return true;
153
155
  } else if (param.isString()) {
154
- let dep, localModule;
156
+ let dep;
157
+ let localModule;
155
158
  if (param.string === "require") {
156
159
  dep = new ConstDependency(
157
160
  RuntimeGlobals.require,
@@ -186,7 +189,7 @@ class AMDRequireDependenciesBlockParserPlugin {
186
189
  param.range
187
190
  );
188
191
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
189
- dep.optional = !!parser.scope.inTry;
192
+ dep.optional = Boolean(parser.scope.inTry);
190
193
  parser.state.current.addDependency(dep);
191
194
  return true;
192
195
  }
@@ -216,7 +219,7 @@ class AMDRequireDependenciesBlockParserPlugin {
216
219
  );
217
220
  if (!dep) return;
218
221
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
219
- dep.optional = !!parser.scope.inTry;
222
+ dep.optional = Boolean(parser.scope.inTry);
220
223
  parser.state.current.addDependency(dep);
221
224
  return true;
222
225
  }
@@ -269,10 +272,12 @@ class AMDRequireDependenciesBlockParserPlugin {
269
272
  const old = parser.state.current;
270
273
 
271
274
  if (expr.arguments.length >= 1) {
272
- param = parser.evaluateExpression(expr.arguments[0]);
275
+ param = parser.evaluateExpression(
276
+ /** @type {Expression} */ (expr.arguments[0])
277
+ );
273
278
  depBlock = this.newRequireDependenciesBlock(
274
279
  /** @type {DependencyLocation} */ (expr.loc),
275
- /** @type {string} */ (this.processArrayForRequestString(param))
280
+ this.processArrayForRequestString(param)
276
281
  );
277
282
  dep = this.newRequireDependency(
278
283
  /** @type {Range} */ (expr.range),
@@ -324,8 +329,9 @@ class AMDRequireDependenciesBlockParserPlugin {
324
329
  if (parser.state.module) {
325
330
  parser.state.module.addError(
326
331
  new UnsupportedFeatureWarning(
327
- "Cannot statically analyse 'require(…, …)' in line " +
328
- /** @type {SourceLocation} */ (expr.loc).start.line,
332
+ `Cannot statically analyse 'require(…, …)' in line ${
333
+ /** @type {SourceLocation} */ (expr.loc).start.line
334
+ }`,
329
335
  /** @type {DependencyLocation} */ (expr.loc)
330
336
  )
331
337
  );
@@ -355,7 +361,7 @@ class AMDRequireDependenciesBlockParserPlugin {
355
361
 
356
362
  /**
357
363
  * @param {DependencyLocation} loc location
358
- * @param {string} request request
364
+ * @param {string=} request request
359
365
  * @returns {AMDRequireDependenciesBlock} AMDRequireDependenciesBlock
360
366
  */
361
367
  newRequireDependenciesBlock(loc, request) {
@@ -44,5 +44,5 @@ class AMDOptionsRuntimeModule extends RuntimeModule {
44
44
  }
45
45
  }
46
46
 
47
- exports.AMDDefineRuntimeModule = AMDDefineRuntimeModule;
48
- exports.AMDOptionsRuntimeModule = AMDOptionsRuntimeModule;
47
+ module.exports.AMDDefineRuntimeModule = AMDDefineRuntimeModule;
48
+ module.exports.AMDOptionsRuntimeModule = AMDOptionsRuntimeModule;
@@ -17,8 +17,12 @@ const RuntimeGlobals = require("../RuntimeGlobals");
17
17
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
18
18
  * @returns {[string, string]} type and base
19
19
  */
20
- exports.handleDependencyBase = (depBase, module, runtimeRequirements) => {
21
- let base = undefined;
20
+ module.exports.handleDependencyBase = (
21
+ depBase,
22
+ module,
23
+ runtimeRequirements
24
+ ) => {
25
+ let base;
22
26
  let type;
23
27
  switch (depBase) {
24
28
  case "exports":
@@ -96,14 +96,13 @@ class CommonJsExportRequireDependency extends ModuleDependency {
96
96
  const getFullResult = () => {
97
97
  if (ids.length === 0) {
98
98
  return Dependency.EXPORTS_OBJECT_REFERENCED;
99
- } else {
100
- return [
101
- {
102
- name: ids,
103
- canMangle: false
104
- }
105
- ];
106
99
  }
100
+ return [
101
+ {
102
+ name: ids,
103
+ canMangle: false
104
+ }
105
+ ];
107
106
  };
108
107
  if (this.resultUsed) return getFullResult();
109
108
  /** @type {ExportsInfo | undefined} */
@@ -146,8 +145,8 @@ class CommonJsExportRequireDependency extends ModuleDependency {
146
145
  * @returns {ExportsSpec | undefined} export names
147
146
  */
148
147
  getExports(moduleGraph) {
149
- const ids = this.getIds(moduleGraph);
150
148
  if (this.names.length === 1) {
149
+ const ids = this.getIds(moduleGraph);
151
150
  const name = this.names[0];
152
151
  const from = moduleGraph.getConnection(this);
153
152
  if (!from) return;
@@ -179,39 +178,36 @@ class CommonJsExportRequireDependency extends ModuleDependency {
179
178
  ],
180
179
  dependencies: undefined
181
180
  };
182
- } else {
183
- const from = moduleGraph.getConnection(this);
184
- if (!from) return;
185
- const reexportInfo = this.getStarReexports(
186
- moduleGraph,
187
- undefined,
188
- from.module
189
- );
190
- if (reexportInfo) {
191
- return {
192
- exports: Array.from(
193
- /** @type {TODO} */ (reexportInfo).exports,
194
- name => {
195
- return {
196
- name,
197
- from,
198
- export: ids.concat(name),
199
- canMangle: !(name in EMPTY_OBJECT) && false
200
- };
201
- }
202
- ),
203
- // TODO handle deep reexports
204
- dependencies: [from.module]
205
- };
206
- } else {
207
- return {
208
- exports: true,
209
- from: ids.length === 0 ? from : undefined,
210
- canMangle: false,
211
- dependencies: [from.module]
212
- };
213
- }
214
181
  }
182
+ const from = moduleGraph.getConnection(this);
183
+ if (!from) return;
184
+ const reexportInfo = this.getStarReexports(
185
+ moduleGraph,
186
+ undefined,
187
+ from.module
188
+ );
189
+ const ids = this.getIds(moduleGraph);
190
+ if (reexportInfo) {
191
+ return {
192
+ exports: Array.from(
193
+ /** @type {TODO} */ (reexportInfo).exports,
194
+ name => ({
195
+ name,
196
+ from,
197
+ export: ids.concat(name),
198
+ canMangle: !(name in EMPTY_OBJECT) && false
199
+ })
200
+ ),
201
+ // TODO handle deep reexports
202
+ dependencies: [from.module]
203
+ };
204
+ }
205
+ return {
206
+ exports: true,
207
+ from: ids.length === 0 ? from : undefined,
208
+ canMangle: false,
209
+ dependencies: [from.module]
210
+ };
215
211
  }
216
212
 
217
213
  /**
@@ -382,7 +378,7 @@ CommonJsExportRequireDependency.Template = class CommonJsExportRequireDependency
382
378
  if (usedImported) {
383
379
  const comment = equals(usedImported, ids)
384
380
  ? ""
385
- : Template.toNormalComment(propertyAccess(ids)) + " ";
381
+ : `${Template.toNormalComment(propertyAccess(ids))} `;
386
382
  requireExpr += `${comment}${propertyAccess(usedImported)}`;
387
383
  }
388
384
  }
@@ -176,7 +176,6 @@ CommonJsExportsDependency.Template = class CommonJsExportsDependencyTemplate ext
176
176
  dep.range[1] - 1,
177
177
  "))"
178
178
  );
179
- return;
180
179
  }
181
180
  }
182
181
  };