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
@@ -5,16 +5,23 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { cssExportConvention } = require("../util/conventions");
8
9
  const makeSerializable = require("../util/makeSerializable");
9
10
  const NullDependency = require("./NullDependency");
10
11
 
11
12
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
14
+ /** @typedef {import("../CssModule")} CssModule */
12
15
  /** @typedef {import("../Dependency")} Dependency */
13
16
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
17
+ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
14
18
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
15
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
+ /** @typedef {import("../css/CssExportsGenerator")} CssExportsGenerator */
21
+ /** @typedef {import("../css/CssGenerator")} CssGenerator */
16
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
23
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
24
+ /** @typedef {import("../util/Hash")} Hash */
18
25
 
19
26
  class CssExportDependency extends NullDependency {
20
27
  /**
@@ -31,24 +38,60 @@ class CssExportDependency extends NullDependency {
31
38
  return "css :export";
32
39
  }
33
40
 
41
+ /**
42
+ * @param {string} name export name
43
+ * @param {CssGeneratorExportsConvention} convention convention of the export name
44
+ * @returns {string[]} convention results
45
+ */
46
+ getExportsConventionNames(name, convention) {
47
+ if (this._conventionNames) {
48
+ return this._conventionNames;
49
+ }
50
+ this._conventionNames = cssExportConvention(name, convention);
51
+ return this._conventionNames;
52
+ }
53
+
34
54
  /**
35
55
  * Returns the exported names
36
56
  * @param {ModuleGraph} moduleGraph module graph
37
57
  * @returns {ExportsSpec | undefined} export names
38
58
  */
39
59
  getExports(moduleGraph) {
40
- const name = this.name;
60
+ const module = /** @type {CssModule} */ (moduleGraph.getParentModule(this));
61
+ const convention =
62
+ /** @type {CssGenerator | CssExportsGenerator} */
63
+ (module.generator).convention;
64
+ const names = this.getExportsConventionNames(this.name, convention);
41
65
  return {
42
- exports: [
43
- {
44
- name,
45
- canMangle: true
46
- }
47
- ],
66
+ exports: names.map(name => ({
67
+ name,
68
+ canMangle: true
69
+ })),
48
70
  dependencies: undefined
49
71
  };
50
72
  }
51
73
 
74
+ /**
75
+ * Update the hash
76
+ * @param {Hash} hash hash to be updated
77
+ * @param {UpdateHashContext} context context
78
+ * @returns {void}
79
+ */
80
+ updateHash(hash, { chunkGraph }) {
81
+ const module = /** @type {CssModule} */ (
82
+ chunkGraph.moduleGraph.getParentModule(this)
83
+ );
84
+ const generator =
85
+ /** @type {CssGenerator | CssExportsGenerator} */
86
+ (module.generator);
87
+ const names = this.getExportsConventionNames(
88
+ this.name,
89
+ generator.convention
90
+ );
91
+ hash.update("exportsConvention");
92
+ hash.update(JSON.stringify(names));
93
+ }
94
+
52
95
  /**
53
96
  * @param {ObjectSerializerContext} context context
54
97
  */
@@ -79,9 +122,29 @@ CssExportDependency.Template = class CssExportDependencyTemplate extends (
79
122
  * @param {DependencyTemplateContext} templateContext the context object
80
123
  * @returns {void}
81
124
  */
82
- apply(dependency, source, { cssExportsData }) {
125
+ apply(
126
+ dependency,
127
+ source,
128
+ { cssExportsData, module: m, runtime, moduleGraph }
129
+ ) {
83
130
  const dep = /** @type {CssExportDependency} */ (dependency);
84
- cssExportsData.exports.set(dep.name, dep.value);
131
+ const module = /** @type {CssModule} */ (m);
132
+ const convention = /** @type {CssGenerator | CssExportsGenerator} */ (
133
+ module.generator
134
+ ).convention;
135
+ const names = dep.getExportsConventionNames(dep.name, convention);
136
+ const usedNames = /** @type {string[]} */ (
137
+ names
138
+ .map(name =>
139
+ moduleGraph.getExportInfo(module, name).getUsedName(name, runtime)
140
+ )
141
+ .filter(Boolean)
142
+ );
143
+ if (usedNames.length === 0) return;
144
+
145
+ for (const used of usedNames) {
146
+ cssExportsData.exports.set(used, dep.value);
147
+ }
85
148
  }
86
149
  };
87
150
 
@@ -26,9 +26,7 @@ const ModuleDependency = require("./ModuleDependency");
26
26
  class CssImportDependency extends ModuleDependency {
27
27
  /**
28
28
  * Example of dependency:
29
- *
30
29
  * \@import url("landscape.css") layer(forms) screen and (orientation: landscape) screen and (orientation: landscape);
31
- *
32
30
  * @param {string} request request
33
31
  * @param {Range} range range of the argument
34
32
  * @param {string | undefined} layer layer
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { cssExportConvention } = require("../util/conventions");
8
9
  const createHash = require("../util/createHash");
9
10
  const { makePathsRelative } = require("../util/identifier");
10
11
  const makeSerializable = require("../util/makeSerializable");
@@ -17,6 +18,7 @@ const NullDependency = require("./NullDependency");
17
18
  /** @typedef {import("../CssModule")} CssModule */
18
19
  /** @typedef {import("../Dependency")} Dependency */
19
20
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
21
+ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
20
22
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
21
23
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
22
24
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
@@ -25,6 +27,7 @@ const NullDependency = require("./NullDependency");
25
27
  /** @typedef {import("../css/CssParser").Range} Range */
26
28
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
27
29
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
30
+ /** @typedef {import("../util/Hash")} Hash */
28
31
 
29
32
  /**
30
33
  * @param {string} local css local
@@ -88,24 +91,62 @@ class CssLocalIdentifierDependency extends NullDependency {
88
91
  return "css local identifier";
89
92
  }
90
93
 
94
+ /**
95
+ * @param {string} name export name
96
+ * @param {CssGeneratorExportsConvention} convention convention of the export name
97
+ * @returns {string[]} convention results
98
+ */
99
+ getExportsConventionNames(name, convention) {
100
+ if (this._conventionNames) {
101
+ return this._conventionNames;
102
+ }
103
+ this._conventionNames = cssExportConvention(this.name, convention);
104
+ return this._conventionNames;
105
+ }
106
+
91
107
  /**
92
108
  * Returns the exported names
93
109
  * @param {ModuleGraph} moduleGraph module graph
94
110
  * @returns {ExportsSpec | undefined} export names
95
111
  */
96
112
  getExports(moduleGraph) {
97
- const name = this.name;
113
+ const module = /** @type {CssModule} */ (moduleGraph.getParentModule(this));
114
+ const convention = /** @type {CssGenerator | CssExportsGenerator} */ (
115
+ module.generator
116
+ ).convention;
117
+ const names = this.getExportsConventionNames(this.name, convention);
98
118
  return {
99
- exports: [
100
- {
101
- name,
102
- canMangle: true
103
- }
104
- ],
119
+ exports: names.map(name => ({
120
+ name,
121
+ canMangle: true
122
+ })),
105
123
  dependencies: undefined
106
124
  };
107
125
  }
108
126
 
127
+ /**
128
+ * Update the hash
129
+ * @param {Hash} hash hash to be updated
130
+ * @param {UpdateHashContext} context context
131
+ * @returns {void}
132
+ */
133
+ updateHash(hash, { chunkGraph }) {
134
+ const module = /** @type {CssModule} */ (
135
+ chunkGraph.moduleGraph.getParentModule(this)
136
+ );
137
+ const generator = /** @type {CssGenerator | CssExportsGenerator} */ (
138
+ module.generator
139
+ );
140
+ const names = this.getExportsConventionNames(
141
+ this.name,
142
+ generator.convention
143
+ );
144
+ hash.update("exportsConvention");
145
+ hash.update(JSON.stringify(names));
146
+ hash.update("localIdentName");
147
+ hash.update(generator.localIdentName);
148
+ }
149
+
109
150
  /**
110
151
  * @param {ObjectSerializerContext} context context
111
152
  */
@@ -137,7 +178,7 @@ class CssLocalIdentifierDependency extends NullDependency {
137
178
  const escapeCssIdentifier = (str, omitUnderscore) => {
138
179
  const escaped = `${str}`.replace(
139
180
  // cspell:word uffff
140
- /[^a-zA-Z0-9_\u0081-\uffff-]/g,
181
+ /[^a-zA-Z0-9_\u0081-\uFFFF-]/g,
141
182
  s => `\\${s}`
142
183
  );
143
184
  return !omitUnderscore && /^(?!--)[0-9-]/.test(escaped)
@@ -158,7 +199,7 @@ CssLocalIdentifierDependency.Template = class CssLocalIdentifierDependencyTempla
158
199
  dependency,
159
200
  source,
160
201
  {
161
- module,
202
+ module: m,
162
203
  moduleGraph,
163
204
  chunkGraph,
164
205
  runtime,
@@ -167,26 +208,32 @@ CssLocalIdentifierDependency.Template = class CssLocalIdentifierDependencyTempla
167
208
  }
168
209
  ) {
169
210
  const dep = /** @type {CssLocalIdentifierDependency} */ (dependency);
170
- const used = moduleGraph
171
- .getExportInfo(module, dep.name)
172
- .getUsedName(dep.name, runtime);
173
-
174
- if (!used) return;
211
+ const module = /** @type {CssModule} */ (m);
212
+ const convention = /** @type {CssGenerator | CssExportsGenerator} */ (
213
+ module.generator
214
+ ).convention;
215
+ const names = dep.getExportsConventionNames(dep.name, convention);
216
+ const usedNames = /** @type {string[]} */ (
217
+ names
218
+ .map(name =>
219
+ moduleGraph.getExportInfo(module, name).getUsedName(name, runtime)
220
+ )
221
+ .filter(Boolean)
222
+ );
223
+ if (usedNames.length === 0) return;
175
224
 
225
+ // use the first usedName to generate localIdent, it's shorter when mangle exports enabled
176
226
  const localIdent =
177
227
  dep.prefix +
178
- getLocalIdent(
179
- used,
180
- /** @type {CssModule} */ (module),
181
- chunkGraph,
182
- runtimeTemplate
183
- );
228
+ getLocalIdent(usedNames[0], module, chunkGraph, runtimeTemplate);
184
229
  source.replace(
185
230
  dep.range[0],
186
231
  dep.range[1] - 1,
187
232
  escapeCssIdentifier(localIdent, dep.prefix)
188
233
  );
189
- if (used) cssExportsData.exports.set(used, localIdent);
234
+ for (const used of usedNames) {
235
+ cssExportsData.exports.set(used, localIdent);
236
+ }
190
237
  }
191
238
  };
192
239
 
@@ -43,8 +43,9 @@ class CssSelfLocalIdentifierDependency extends CssLocalIdentifierDependency {
43
43
  * @returns {string | null} an identifier to merge equal requests
44
44
  */
45
45
  getResourceIdentifier() {
46
- return `self`;
46
+ return "self";
47
47
  }
48
+
48
49
  /**
49
50
  * Returns the exported names
50
51
  * @param {ModuleGraph} moduleGraph module graph
@@ -25,9 +25,9 @@ const ModuleDependency = require("./ModuleDependency");
25
25
  /** @typedef {import("../util/Hash")} Hash */
26
26
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
27
 
28
- const getIgnoredRawDataUrlModule = memoize(() => {
29
- return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
30
- });
28
+ const getIgnoredRawDataUrlModule = memoize(
29
+ () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
30
+ );
31
31
 
32
32
  class CssUrlDependency extends ModuleDependency {
33
33
  /**
@@ -106,9 +106,8 @@ const cssEscapeString = str => {
106
106
  return str.replace(/[\n\t ()'"\\]/g, m => `\\${m}`);
107
107
  } else if (countQuotation <= countApostrophe) {
108
108
  return `"${str.replace(/[\n"\\]/g, m => `\\${m}`)}"`;
109
- } else {
110
- return `'${str.replace(/[\n'\\]/g, m => `\\${m}`)}'`;
111
109
  }
110
+ return `'${str.replace(/[\n'\\]/g, m => `\\${m}`)}'`;
112
111
  };
113
112
 
114
113
  CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
@@ -15,7 +15,7 @@ const parserStateExportsState = new WeakMap();
15
15
  * @param {ParserState} parserState parser state
16
16
  * @returns {void}
17
17
  */
18
- exports.bailout = parserState => {
18
+ module.exports.bailout = parserState => {
19
19
  const value = parserStateExportsState.get(parserState);
20
20
  parserStateExportsState.set(parserState, false);
21
21
  if (value === true) {
@@ -29,7 +29,7 @@ exports.bailout = parserState => {
29
29
  * @param {ParserState} parserState parser state
30
30
  * @returns {void}
31
31
  */
32
- exports.enable = parserState => {
32
+ module.exports.enable = parserState => {
33
33
  const value = parserStateExportsState.get(parserState);
34
34
  if (value === false) return;
35
35
  parserStateExportsState.set(parserState, true);
@@ -44,7 +44,7 @@ exports.enable = parserState => {
44
44
  * @param {ParserState} parserState parser state
45
45
  * @returns {void}
46
46
  */
47
- exports.setFlagged = parserState => {
47
+ module.exports.setFlagged = parserState => {
48
48
  const value = parserStateExportsState.get(parserState);
49
49
  if (value !== true) return;
50
50
  const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
@@ -56,7 +56,7 @@ exports.setFlagged = parserState => {
56
56
  * @param {ParserState} parserState parser state
57
57
  * @returns {void}
58
58
  */
59
- exports.setDynamic = parserState => {
59
+ module.exports.setDynamic = parserState => {
60
60
  const value = parserStateExportsState.get(parserState);
61
61
  if (value !== true) return;
62
62
  /** @type {BuildMeta} */
@@ -67,7 +67,7 @@ exports.setDynamic = parserState => {
67
67
  * @param {ParserState} parserState parser state
68
68
  * @returns {boolean} true, when enabled
69
69
  */
70
- exports.isEnabled = parserState => {
70
+ module.exports.isEnabled = parserState => {
71
71
  const value = parserStateExportsState.get(parserState);
72
72
  return value === true;
73
73
  };
@@ -72,7 +72,7 @@ const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
72
72
  case UsageState.Unused:
73
73
  return false;
74
74
  case UsageState.NoInfo:
75
- return undefined;
75
+ return;
76
76
  case UsageState.Unknown:
77
77
  return null;
78
78
  default:
@@ -82,7 +82,6 @@ const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
82
82
  case "provideInfo":
83
83
  return moduleGraph.getExportsInfo(module).isExportProvided(exportName);
84
84
  }
85
- return undefined;
86
85
  };
87
86
 
88
87
  class ExportsInfoDependency extends NullDependency {
@@ -18,7 +18,7 @@ class HarmonyAcceptImportDependency extends HarmonyImportDependency {
18
18
  * @param {string} request the request string
19
19
  */
20
20
  constructor(request) {
21
- super(request, NaN);
21
+ super(request, Number.NaN);
22
22
  this.weak = true;
23
23
  }
24
24
 
@@ -112,11 +112,10 @@ HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImpor
112
112
  break;
113
113
  }
114
114
  case "namespace": {
115
- if (ids[0] === "__esModule") {
116
- value = ids.length === 1 || undefined;
117
- } else {
118
- value = exportsInfo.isExportProvided(ids);
119
- }
115
+ value =
116
+ ids[0] === "__esModule"
117
+ ? ids.length === 1 || undefined
118
+ : exportsInfo.isExportProvided(ids);
120
119
  break;
121
120
  }
122
121
  case "dynamic": {
@@ -145,30 +145,34 @@ module.exports = class HarmonyExportDependencyParserPlugin {
145
145
  "HarmonyExportDependencyParserPlugin",
146
146
  (statement, id, name, idx) => {
147
147
  const settings = parser.getTagData(id, harmonySpecifierTag);
148
- let dep;
149
148
  const harmonyNamedExports = (parser.state.harmonyNamedExports =
150
149
  parser.state.harmonyNamedExports || new Set());
151
150
  harmonyNamedExports.add(name);
152
151
  InnerGraph.addVariableUsage(parser, id, name);
153
- if (settings) {
154
- dep = new HarmonyExportImportedSpecifierDependency(
155
- settings.source,
156
- settings.sourceOrder,
157
- settings.ids,
158
- name,
159
- harmonyNamedExports,
160
- null,
161
- exportPresenceMode,
162
- null,
163
- settings.assertions
164
- );
165
- } else {
166
- dep = new HarmonyExportSpecifierDependency(id, name);
167
- }
152
+ const dep = settings
153
+ ? new HarmonyExportImportedSpecifierDependency(
154
+ settings.source,
155
+ settings.sourceOrder,
156
+ settings.ids,
157
+ name,
158
+ harmonyNamedExports,
159
+ null,
160
+ exportPresenceMode,
161
+ null,
162
+ settings.assertions
163
+ )
164
+ : new HarmonyExportSpecifierDependency(id, name);
168
165
  dep.loc = Object.create(
169
166
  /** @type {DependencyLocation} */ (statement.loc)
170
167
  );
171
168
  dep.loc.index = idx;
169
+ const isAsiSafe = !parser.isAsiPosition(
170
+ /** @type {Range} */
171
+ (statement.range)[0]
172
+ );
173
+ if (!isAsiSafe) {
174
+ parser.setAsiPosition(/** @type {Range} */ (statement.range)[1]);
175
+ }
172
176
  parser.state.current.addDependency(dep);
173
177
  return true;
174
178
  }
@@ -202,6 +206,13 @@ module.exports = class HarmonyExportDependencyParserPlugin {
202
206
  /** @type {DependencyLocation} */ (statement.loc)
203
207
  );
204
208
  dep.loc.index = idx;
209
+ const isAsiSafe = !parser.isAsiPosition(
210
+ /** @type {Range} */
211
+ (statement.range)[0]
212
+ );
213
+ if (!isAsiSafe) {
214
+ parser.setAsiPosition(/** @type {Range} */ (statement.range)[1]);
215
+ }
205
216
  parser.state.current.addDependency(dep);
206
217
  return true;
207
218
  }
@@ -193,7 +193,7 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
193
193
  source.replace(
194
194
  dep.rangeStatement[0],
195
195
  dep.range[0] - 1,
196
- content + "(" + dep.prefix
196
+ `${content}(${dep.prefix}`
197
197
  );
198
198
  source.replace(dep.range[1], dep.rangeStatement[1] - 0.5, ");");
199
199
  return;