@depup/webpack 5.110.3-depup.0 → 5.111.1-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/README.md +7 -8
  2. package/changes.json +7 -11
  3. package/lib/APIPlugin.js +26 -11
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/Cache.js +8 -3
  6. package/lib/CacheFacade.js +1 -1
  7. package/lib/CircularModulesPlugin.js +157 -55
  8. package/lib/CleanPlugin.js +2 -2
  9. package/lib/CompatibilityPlugin.js +3 -4
  10. package/lib/Compilation.js +336 -337
  11. package/lib/Compiler.js +213 -51
  12. package/lib/ConstPlugin.js +16 -132
  13. package/lib/CopyPlugin.js +1054 -0
  14. package/lib/DefinePlugin.js +24 -8
  15. package/lib/DependencyTemplate.js +2 -1
  16. package/lib/DotenvPlugin.js +24 -28
  17. package/lib/ErrorHelpers.js +113 -0
  18. package/lib/ExportsInfo.js +20 -16
  19. package/lib/ExternalModule.js +47 -22
  20. package/lib/FileSystemInfo.js +17 -14
  21. package/lib/FlagDependencyExportsPlugin.js +53 -34
  22. package/lib/FlagDependencyUsagePlugin.js +9 -13
  23. package/lib/Generator.js +24 -2
  24. package/lib/HotModuleReplacementPlugin.js +55 -7
  25. package/lib/IgnorePlugin.js +1 -1
  26. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  27. package/lib/LoaderOptionsPlugin.js +1 -1
  28. package/lib/MainTemplate.js +5 -1
  29. package/lib/Module.js +19 -10
  30. package/lib/ModuleGraph.js +6 -9
  31. package/lib/MultiCompiler.js +7 -17
  32. package/lib/MultiWatching.js +1 -1
  33. package/lib/NormalModule.js +135 -50
  34. package/lib/NormalModuleFactory.js +1 -1
  35. package/lib/RuntimeGlobals.js +21 -7
  36. package/lib/RuntimeModule.js +28 -12
  37. package/lib/RuntimePlugin.js +30 -3
  38. package/lib/RuntimeTemplate.js +813 -518
  39. package/lib/SourceMapDevToolPlugin.js +54 -104
  40. package/lib/TemplatedPathPlugin.js +16 -59
  41. package/lib/Watching.js +9 -0
  42. package/lib/WebpackOptionsApply.js +84 -91
  43. package/lib/asset/AssetBytesGenerator.js +7 -1
  44. package/lib/asset/AssetGenerator.js +50 -24
  45. package/lib/asset/AssetModule.js +3 -0
  46. package/lib/asset/AssetSourceGenerator.js +7 -1
  47. package/lib/asset/WebManifestParser.js +7 -5
  48. package/lib/buildChunkGraph.js +11 -15
  49. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  50. package/lib/cache/IdleFileCachePlugin.js +2 -2
  51. package/lib/cache/MemoryCachePlugin.js +4 -4
  52. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  53. package/lib/cache/PackFileCacheStrategy.js +17 -19
  54. package/lib/cache/getLazyHashedEtag.js +3 -5
  55. package/lib/config/browserslistTargetHandler.js +17 -4
  56. package/lib/config/defaults.js +138 -128
  57. package/lib/config/getClaimedAssetTypes.js +10 -11
  58. package/lib/config/normalization.js +82 -12
  59. package/lib/config/target.js +13 -4
  60. package/lib/container/ContainerReferencePlugin.js +6 -0
  61. package/lib/container/RemoteRuntimeModule.js +9 -0
  62. package/lib/container/declaredRemotes.js +39 -0
  63. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  64. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  65. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  66. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  67. package/lib/css/CssGenerator.js +27 -11
  68. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  69. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  70. package/lib/css/CssModule.js +1 -1
  71. package/lib/css/CssModulesPlugin.js +7 -6
  72. package/lib/css/CssParser.js +162 -31
  73. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  74. package/lib/css/cssMinify.js +43 -32
  75. package/lib/css/data.js +3514 -869
  76. package/lib/css/syntax.js +6370 -1220
  77. package/lib/debug/ProfilingPlugin.js +7 -4
  78. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  79. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  80. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  81. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  82. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  83. package/lib/dependencies/CommonJsPlugin.js +19 -3
  84. package/lib/dependencies/CommonJsRequireDependency.js +14 -5
  85. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  86. package/lib/dependencies/ContextDependency.js +1 -1
  87. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  88. package/lib/dependencies/ContextElementDependency.js +1 -1
  89. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  90. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  91. package/lib/dependencies/CssUrlDependency.js +3 -5
  92. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  93. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  94. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  95. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  96. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
  97. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  98. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  99. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  100. package/lib/dependencies/HarmonyImportDependency.js +6 -1
  101. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
  102. package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
  103. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  104. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  105. package/lib/dependencies/HtmlEntryDependency.js +124 -102
  106. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  107. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  108. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  109. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  110. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  111. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  112. package/lib/dependencies/ImportParserPlugin.js +1 -1
  113. package/lib/dependencies/LoaderPlugin.js +26 -1
  114. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  115. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  116. package/lib/dependencies/URLContextDependency.js +1 -1
  117. package/lib/dependencies/URLDependency.js +6 -5
  118. package/lib/dependencies/WorkerAndWorkletPlugin.js +15 -21
  119. package/lib/dependencies/WorkerDependency.js +7 -7
  120. package/lib/dependencies/WorkletDependency.js +7 -11
  121. package/lib/dll/DelegatedModule.js +18 -1
  122. package/lib/dll/DllReferencePlugin.js +11 -8
  123. package/lib/dll/LibManifestPlugin.js +1 -1
  124. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  125. package/lib/errors/DuplicateModulesWarning.js +12 -7
  126. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  127. package/lib/errors/ExternalStarReexportError.js +44 -0
  128. package/lib/errors/HookWebpackError.js +3 -2
  129. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  130. package/lib/errors/ModuleParseError.js +2 -1
  131. package/lib/errors/UnusedAssetsWarning.js +36 -0
  132. package/lib/errors/UnusedFederationWarning.js +35 -0
  133. package/lib/errors/UnusedModulesWarning.js +38 -0
  134. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  135. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  136. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  137. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  138. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  139. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  140. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  141. package/lib/html/HtmlGenerator.js +72 -87
  142. package/lib/html/HtmlModulesPlugin.js +418 -200
  143. package/lib/html/HtmlParser.js +110 -147
  144. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  145. package/lib/html/data.js +142 -7
  146. package/lib/html/htmlMinify.js +92 -122
  147. package/lib/html/syntax.js +1618 -1391
  148. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  149. package/lib/index.js +49 -3
  150. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  151. package/lib/javascript/JavascriptGenerator.js +8 -1
  152. package/lib/javascript/JavascriptModule.js +1 -0
  153. package/lib/javascript/JavascriptModulesPlugin.js +73 -72
  154. package/lib/javascript/JavascriptParser.js +1970 -900
  155. package/lib/javascript/StartupHelpers.js +27 -3
  156. package/lib/javascript/data.js +172 -0
  157. package/lib/javascript/grammar.js +5546 -0
  158. package/lib/javascript/parser.js +1500 -0
  159. package/lib/javascript/regexp.js +1762 -0
  160. package/lib/javascript/regexpData.js +51 -0
  161. package/lib/javascript/syntax.js +9061 -5262
  162. package/lib/json/JsonGenerator.js +7 -1
  163. package/lib/library/ModuleLibraryPlugin.js +171 -132
  164. package/lib/loaders/LoaderRunner.js +137 -9
  165. package/lib/node/NodeWatchFileSystem.js +3 -9
  166. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  167. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  168. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  169. package/lib/optimize/ConcatenatedModule.js +178 -120
  170. package/lib/optimize/ConstExportsPlugin.js +50 -39
  171. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  172. package/lib/optimize/InlineExports.js +20 -123
  173. package/lib/optimize/InnerGraphPlugin.js +7 -13
  174. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  175. package/lib/optimize/MangleExportsPlugin.js +13 -4
  176. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  177. package/lib/optimize/RealContentHashPlugin.js +68 -9
  178. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  179. package/lib/optimize/SplitChunksPlugin.js +2 -4
  180. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  181. package/lib/performance/BroadContextsPlugin.js +1 -1
  182. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  183. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  184. package/lib/performance/EvalUsagePlugin.js +5 -2
  185. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  186. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  187. package/lib/performance/SizeLimitsPlugin.js +2 -4
  188. package/lib/performance/TopLevelThisPlugin.js +5 -4
  189. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  190. package/lib/performance/UnusedFederationPlugin.js +147 -0
  191. package/lib/performance/UnusedModulesPlugin.js +141 -0
  192. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  193. package/lib/performance/isOnlyReexported.js +65 -0
  194. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  195. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  196. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  197. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  198. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  199. package/lib/prefetch/ResourceHintPlugin.js +18 -23
  200. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  201. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  202. package/lib/rules/RuleSetCompiler.js +211 -4
  203. package/lib/runtime/AsyncModuleRuntimeModule.js +98 -66
  204. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  205. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  206. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  207. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  208. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  209. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  210. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  211. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  212. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  213. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  214. package/lib/runtime/HelperRuntimeModule.js +10 -0
  215. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +305 -224
  216. package/lib/runtime/NonceRuntimeModule.js +9 -0
  217. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  218. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  219. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  220. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  221. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  222. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  223. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  224. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  225. package/lib/schemes/DataUriPlugin.js +3 -6
  226. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  227. package/lib/serialization/BinaryMiddleware.js +9 -9
  228. package/lib/serialization/FileMiddleware.js +16 -16
  229. package/lib/serialization/ObjectMiddleware.js +168 -139
  230. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  231. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  232. package/lib/sharing/ShareRuntimeModule.js +9 -0
  233. package/lib/sharing/declaredShared.js +47 -0
  234. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  235. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  236. package/lib/typescript/TypeScriptPlugin.js +2 -3
  237. package/lib/url/URLParserPlugin.js +6 -8
  238. package/lib/util/LocConverter.js +4 -7
  239. package/lib/util/SourceProcessor.js +91 -91
  240. package/lib/util/async.js +292 -0
  241. package/lib/util/buildDiagnostics.js +69 -0
  242. package/lib/util/chainedImports.js +3 -4
  243. package/lib/util/concatenate.js +4 -4
  244. package/lib/util/createHooksRegistry.js +1 -2
  245. package/lib/util/dataURL.js +2 -3
  246. package/lib/util/deterministicGrouping.js +8 -13
  247. package/lib/util/findGraphRoots.js +6 -13
  248. package/lib/util/fs.js +27 -1
  249. package/lib/util/globUtils.js +1 -1
  250. package/lib/util/handlerKeys.js +40 -0
  251. package/lib/util/hash/wasm-hash.js +3 -4
  252. package/lib/util/identifier.js +20 -0
  253. package/lib/util/internalSerializables.js +5 -1
  254. package/lib/util/registerExternalSerializer.js +6 -45
  255. package/lib/util/semver.js +5 -3
  256. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  257. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  258. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  259. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  260. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  261. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  262. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  263. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  264. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  265. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  266. package/package.json +55 -46
  267. package/schemas/WebpackOptions.check.js +1 -1
  268. package/schemas/WebpackOptions.json +379 -66
  269. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  270. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  271. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  272. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  273. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  274. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  275. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  276. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  277. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  278. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  279. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  280. package/types.d.ts +1723 -604
  281. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  282. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  283. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -1,191 +0,0 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Natsu @xiaoxiaojx
4
- */
5
-
6
- "use strict";
7
-
8
- const InitFragment = require("../InitFragment");
9
- const RuntimeGlobals = require("../RuntimeGlobals");
10
-
11
- /** @import { Source } from "webpack-sources" */
12
- /** @import { GenerateContext } from "../Generator" */
13
- /** @import { UsedName } from "../ExportsInfo" */
14
-
15
- /**
16
- * @typedef {object} ExportBinding
17
- * @property {UsedName} name the used export name
18
- * @property {string} value the variable expression
19
- * @property {"getter" | "value"=} bindingType "value" for value binding, defaults to "getter"
20
- */
21
-
22
- /**
23
- * Offered the rendered `d()` call and where it sits, and answers whether it took it
24
- * over. A consumer that does emits the call itself where it is actually read — or
25
- * leaves it out. Value bindings read the declarations above them, so one placed at
26
- * the end cannot be moved before the module body.
27
- * @typedef {(source: string, placeAtEnd: boolean) => boolean} OnDemandGeneration
28
- */
29
-
30
- /**
31
- * Init fragment for const export bindings.
32
- * Generates a flat-array __webpack_require__.d() call.
33
- * Getter bindings: "key", () => expr (2 items).
34
- * Value bindings: "key", 0, expr (3 items, 0 is sentinel).
35
- *
36
- * Uses a separate key ("harmony-export-bindings") from HarmonyExportInitFragment
37
- * so the two fragment types do not merge and cannot interfere with each
38
- * other's placement (top vs bottom).
39
- * @extends {InitFragment<GenerateContext>} Context
40
- */
41
- class ExportBindingInitFragment extends InitFragment {
42
- /**
43
- * @param {string} exportsArgument the exports identifier
44
- * @param {ExportBinding[]} bindings list of export bindings
45
- * @param {boolean=} placeAtEnd when true, place the d() call at the end of the module
46
- * @param {OnDemandGeneration=} onDemand offered the call instead of emitting it
47
- */
48
- constructor(
49
- exportsArgument,
50
- bindings,
51
- placeAtEnd = false,
52
- onDemand = undefined
53
- ) {
54
- super(
55
- undefined,
56
- InitFragment.STAGE_HARMONY_EXPORTS,
57
- 1,
58
- "harmony-export-bindings"
59
- );
60
- /** @type {string} */
61
- this.exportsArgument = exportsArgument;
62
- /** @type {ExportBinding[]} */
63
- this.bindings = bindings;
64
- /** @type {boolean} */
65
- this.placeAtEnd = placeAtEnd;
66
- /** @type {OnDemandGeneration | undefined} */
67
- this.onDemand = onDemand;
68
- }
69
-
70
- /**
71
- * @param {ExportBindingInitFragment[]} fragments all fragments to merge
72
- * @returns {ExportBindingInitFragment} merged fragment
73
- */
74
- mergeAll(fragments) {
75
- /** @type {ExportBinding[]} */
76
- const bindings = [];
77
- /** @type {Set<string>} */
78
- const seenNames = new Set();
79
- let placeAtEnd = false;
80
-
81
- for (const fragment of fragments) {
82
- for (const binding of fragment.bindings) {
83
- const key = /** @type {string} */ (binding.name);
84
- if (!seenNames.has(key)) {
85
- seenNames.add(key);
86
- bindings.push(binding);
87
- }
88
- }
89
- if (fragment.placeAtEnd) placeAtEnd = true;
90
- }
91
- return new ExportBindingInitFragment(
92
- this.exportsArgument,
93
- bindings,
94
- placeAtEnd,
95
- this.onDemand
96
- );
97
- }
98
-
99
- /**
100
- * @param {ExportBindingInitFragment} other other
101
- * @returns {ExportBindingInitFragment} merged result
102
- */
103
- merge(other) {
104
- /** @type {ExportBinding[]} */
105
- const bindings = [];
106
- /** @type {Set<string>} */
107
- const seenNames = new Set();
108
- for (const binding of other.bindings) {
109
- const key = /** @type {string} */ (binding.name);
110
- seenNames.add(key);
111
- bindings.push(binding);
112
- }
113
- for (const binding of this.bindings) {
114
- const key = /** @type {string} */ (binding.name);
115
- if (!seenNames.has(key)) {
116
- seenNames.add(key);
117
- bindings.push(binding);
118
- }
119
- }
120
- return new ExportBindingInitFragment(
121
- this.exportsArgument,
122
- bindings,
123
- this.placeAtEnd || other.placeAtEnd,
124
- this.onDemand || other.onDemand
125
- );
126
- }
127
-
128
- /**
129
- * @param {GenerateContext} context context
130
- * @returns {string} the d() call or empty string
131
- */
132
- _generateDefinition({ runtimeTemplate, runtimeRequirements }) {
133
- if (this.bindings.length === 0) return "";
134
-
135
- const sorted = [...this.bindings].sort((a, b) =>
136
- /** @type {string} */ (a.name) < /** @type {string} */ (b.name) ? -1 : 1
137
- );
138
-
139
- /** @type {string[]} */
140
- const items = [];
141
- for (const binding of sorted) {
142
- const key = JSON.stringify(/** @type {string} */ (binding.name));
143
- if (binding.bindingType === "value") {
144
- items.push(`\n/* harmony export */ ${key}, 0, ${binding.value}`);
145
- } else {
146
- items.push(
147
- `\n/* harmony export */ ${key}, ${runtimeTemplate.returningFunction(binding.value)}`
148
- );
149
- }
150
- }
151
-
152
- // Requested even when the call is taken over below: whoever took it may still
153
- // emit it, and by then the requirement set is closed.
154
- runtimeRequirements.add(RuntimeGlobals.exports);
155
- runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
156
- // Only this fragment emits the array form, so the runtime helper drops the
157
- // branch reading it unless this asks for it.
158
- runtimeRequirements.add(RuntimeGlobals.definePropertyGettersFromArray);
159
- const definition = `/* harmony export */ ${
160
- RuntimeGlobals.definePropertyGetters
161
- }(${this.exportsArgument}, [${items.join(",")}\n/* harmony export */ ]);\n`;
162
- return this.onDemand !== undefined &&
163
- this.onDemand(definition, this.placeAtEnd)
164
- ? ""
165
- : definition;
166
- }
167
-
168
- /**
169
- * Returns the source code that will be included as initialization code.
170
- * @param {GenerateContext} context context
171
- * @returns {string | Source | undefined} the source code that will be included as initialization code
172
- */
173
- getContent(context) {
174
- if (this.placeAtEnd) return undefined;
175
- return this._generateDefinition(context);
176
- }
177
-
178
- /**
179
- * Returns the source code that will be included at the end of the module.
180
- * @param {GenerateContext} context context
181
- * @returns {string | Source | undefined} the source code that will be included at the end of the module
182
- */
183
- getEndContent(context) {
184
- if (!this.placeAtEnd) return undefined;
185
- const definePart = this._generateDefinition(context);
186
- if (!definePart) return undefined;
187
- return `\n${definePart}`;
188
- }
189
- }
190
-
191
- module.exports = ExportBindingInitFragment;
@@ -1,45 +0,0 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Alexander Akait @alexander-akait
4
- */
5
-
6
- "use strict";
7
-
8
- const formatSize = require("../util/formatSize");
9
- const WebpackError = require("./WebpackError");
10
-
11
- /**
12
- * @typedef {object} EntrypointOverlapDetails
13
- * @property {string} name
14
- * @property {string[]} entrypoints the entrypoints that each ship a copy
15
- * @property {number} wasted bytes the copies past the first cost
16
- */
17
-
18
- class EntrypointOverlapWarning extends WebpackError {
19
- /**
20
- * Creates an instance of EntrypointOverlapWarning.
21
- * @param {EntrypointOverlapDetails[]} modules the worst offenders, largest waste first
22
- * @param {number} wasted bytes all overlapping copies cost together
23
- */
24
- constructor(modules, wasted) {
25
- const list = modules
26
- .map(
27
- (module) =>
28
- `\n ${module.name} (in ${module.entrypoints.join(", ")}, ${formatSize(
29
- module.wasted
30
- )} extra)`
31
- )
32
- .join("");
33
-
34
- super(
35
- `entrypoint overlap: modules shipped by more than one entrypoint add ${formatSize(
36
- wasted
37
- )}:${list}\nEach entrypoint downloads its own copy. 'optimization.splitChunks' with 'chunks: "all"' can move them into a chunk every entrypoint shares.\nFor more info visit https://webpack.js.org/plugins/split-chunks-plugin/`
38
- );
39
-
40
- /** @type {string} */
41
- this.name = "EntrypointOverlapWarning";
42
- }
43
- }
44
-
45
- module.exports = EntrypointOverlapWarning;
@@ -1,122 +0,0 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Alexander Akait @alexander-akait
4
- */
5
-
6
- "use strict";
7
-
8
- const EntrypointOverlapWarning = require("../errors/EntrypointOverlapWarning");
9
- const { compareStrings } = require("../util/comparators");
10
- const getModuleSize = require("./getModuleSize");
11
- const getSourceModules = require("./getSourceModules");
12
-
13
- /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
14
- /** @import Chunk from "../Chunk" */
15
- /** @import Compiler from "../Compiler" */
16
- /** @import Module from "../Module" */
17
- /**
18
- * @import {
19
- * EntrypointOverlapDetails
20
- * } from "../errors/EntrypointOverlapWarning"
21
- */
22
-
23
- const PLUGIN_NAME = "EntrypointOverlapPlugin";
24
-
25
- // Enough to name the offenders without printing the module graph.
26
- const MAX_REPORTED_MODULES = 5;
27
-
28
- class EntrypointOverlapPlugin {
29
- /**
30
- * Creates an instance of EntrypointOverlapPlugin.
31
- * @param {PerformanceOptions} options the plugin options
32
- */
33
- constructor(options) {
34
- /** @type {PerformanceOptions["hints"]} */
35
- this.hints = options.hints;
36
- }
37
-
38
- /**
39
- * Applies the plugin by registering its hooks on the compiler.
40
- * @param {Compiler} compiler the compiler instance
41
- * @returns {void}
42
- */
43
- apply(compiler) {
44
- const hints = this.hints;
45
-
46
- if (!hints) return;
47
-
48
- compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
49
- compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
50
- const { chunkGraph, entrypoints, requestShortener } = compilation;
51
-
52
- if (entrypoints.size < 2) return;
53
-
54
- /** @type {Map<Module, { chunks: Set<Chunk>, entrypoints: Set<string> }>} */
55
- const reach = new Map();
56
-
57
- for (const [name, entrypoint] of entrypoints) {
58
- for (const chunk of entrypoint.chunks) {
59
- for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
60
- // Through scope hoisting: two entrypoints concatenating the same
61
- // file produce two modules, so the chunk graph alone shows none.
62
- for (const inner of getSourceModules(module)) {
63
- let entry = reach.get(inner);
64
-
65
- if (entry === undefined) {
66
- reach.set(
67
- inner,
68
- (entry = { chunks: new Set(), entrypoints: new Set() })
69
- );
70
- }
71
-
72
- entry.chunks.add(chunk);
73
- entry.entrypoints.add(name);
74
- }
75
- }
76
- }
77
- }
78
-
79
- /** @type {EntrypointOverlapDetails[]} */
80
- const overlapping = [];
81
- let wasted = 0;
82
-
83
- for (const [module, { chunks, entrypoints: names }] of reach) {
84
- // One chunk reached from several entrypoints is downloaded once, so
85
- // only separate copies cost anything.
86
- if (chunks.size < 2 || names.size < 2) continue;
87
-
88
- const extra = getModuleSize(module) * (chunks.size - 1);
89
-
90
- wasted += extra;
91
- overlapping.push({
92
- name: module.readableIdentifier(requestShortener),
93
- entrypoints: [...names].sort(compareStrings),
94
- wasted: extra
95
- });
96
- }
97
-
98
- if (overlapping.length === 0) return;
99
-
100
- // Ties break by name: which modules finish first is not stable.
101
- overlapping.sort(
102
- (a, b) => b.wasted - a.wasted || compareStrings(a.name, b.name)
103
- );
104
-
105
- const warning = new EntrypointOverlapWarning(
106
- overlapping.slice(0, MAX_REPORTED_MODULES),
107
- wasted
108
- );
109
-
110
- if (hints === "error") {
111
- compilation.errors.push(warning);
112
- } else if (hints === "stats") {
113
- compilation.hints.push(warning);
114
- } else {
115
- compilation.warnings.push(warning);
116
- }
117
- });
118
- });
119
- }
120
- }
121
-
122
- module.exports = EntrypointOverlapPlugin;