webpack 5.101.3 → 5.102.1

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 (339) hide show
  1. package/README.md +21 -26
  2. package/lib/APIPlugin.js +30 -36
  3. package/lib/AsyncDependenciesBlock.js +1 -4
  4. package/lib/BannerPlugin.js +0 -1
  5. package/lib/Cache.js +7 -6
  6. package/lib/CacheFacade.js +0 -1
  7. package/lib/Chunk.js +49 -31
  8. package/lib/ChunkGraph.js +37 -27
  9. package/lib/ChunkGroup.js +8 -10
  10. package/lib/ChunkTemplate.js +1 -1
  11. package/lib/CleanPlugin.js +3 -3
  12. package/lib/CodeGenerationResults.js +3 -2
  13. package/lib/CompatibilityPlugin.js +29 -12
  14. package/lib/Compilation.js +209 -196
  15. package/lib/Compiler.js +36 -35
  16. package/lib/ConcatenationScope.js +6 -1
  17. package/lib/ConditionalInitFragment.js +1 -1
  18. package/lib/ConstPlugin.js +6 -5
  19. package/lib/ContextExclusionPlugin.js +0 -1
  20. package/lib/ContextModule.js +25 -21
  21. package/lib/ContextModuleFactory.js +30 -11
  22. package/lib/ContextReplacementPlugin.js +38 -15
  23. package/lib/DefinePlugin.js +5 -9
  24. package/lib/DelegatedModule.js +7 -11
  25. package/lib/DependenciesBlock.js +0 -2
  26. package/lib/Dependency.js +9 -11
  27. package/lib/DependencyTemplates.js +2 -4
  28. package/lib/DllModule.js +1 -7
  29. package/lib/DllReferencePlugin.js +2 -4
  30. package/lib/DynamicEntryPlugin.js +0 -2
  31. package/lib/EntryOptionPlugin.js +0 -5
  32. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  33. package/lib/EvalDevToolModulePlugin.js +4 -3
  34. package/lib/EvalSourceMapDevToolPlugin.js +3 -4
  35. package/lib/ExportsInfo.js +50 -49
  36. package/lib/ExternalModule.js +84 -52
  37. package/lib/ExternalModuleFactoryPlugin.js +27 -7
  38. package/lib/ExternalsPlugin.js +24 -17
  39. package/lib/FileSystemInfo.js +105 -90
  40. package/lib/FlagDependencyUsagePlugin.js +3 -4
  41. package/lib/Generator.js +2 -13
  42. package/lib/GraphHelpers.js +0 -3
  43. package/lib/HookWebpackError.js +0 -2
  44. package/lib/HotModuleReplacementPlugin.js +22 -24
  45. package/lib/HotUpdateChunk.js +0 -3
  46. package/lib/IgnorePlugin.js +5 -2
  47. package/lib/InitFragment.js +41 -29
  48. package/lib/InvalidDependenciesModuleWarning.js +0 -1
  49. package/lib/LibManifestPlugin.js +4 -6
  50. package/lib/LoaderOptionsPlugin.js +1 -10
  51. package/lib/MainTemplate.js +8 -19
  52. package/lib/Module.js +32 -20
  53. package/lib/ModuleFactory.js +1 -1
  54. package/lib/ModuleFilenameHelpers.js +42 -25
  55. package/lib/ModuleGraph.js +30 -16
  56. package/lib/ModuleInfoHeaderPlugin.js +0 -1
  57. package/lib/ModuleTemplate.js +0 -2
  58. package/lib/ModuleTypeConstants.js +11 -1
  59. package/lib/MultiCompiler.js +23 -15
  60. package/lib/MultiWatching.js +6 -10
  61. package/lib/NodeStuffPlugin.js +2 -10
  62. package/lib/NormalModule.js +146 -89
  63. package/lib/NormalModuleFactory.js +132 -42
  64. package/lib/OptionsApply.js +1 -1
  65. package/lib/Parser.js +1 -1
  66. package/lib/ProgressPlugin.js +6 -10
  67. package/lib/ProvidePlugin.js +5 -7
  68. package/lib/RawModule.js +1 -6
  69. package/lib/RecordIdsPlugin.js +10 -6
  70. package/lib/ResolverFactory.js +0 -2
  71. package/lib/RuntimeGlobals.js +5 -0
  72. package/lib/RuntimeModule.js +1 -3
  73. package/lib/RuntimePlugin.js +26 -22
  74. package/lib/RuntimeTemplate.js +22 -12
  75. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -2
  76. package/lib/SourceMapDevToolPlugin.js +11 -18
  77. package/lib/Stats.js +0 -1
  78. package/lib/Template.js +6 -11
  79. package/lib/TemplatedPathPlugin.js +2 -1
  80. package/lib/WatchIgnorePlugin.js +2 -3
  81. package/lib/Watching.js +15 -15
  82. package/lib/WebpackIsIncludedPlugin.js +0 -2
  83. package/lib/WebpackOptionsApply.js +74 -107
  84. package/lib/asset/AssetBytesGenerator.js +167 -0
  85. package/lib/asset/AssetBytesParser.js +37 -0
  86. package/lib/asset/AssetGenerator.js +22 -37
  87. package/lib/asset/AssetModulesPlugin.js +34 -16
  88. package/lib/asset/AssetParser.js +7 -3
  89. package/lib/asset/AssetSourceGenerator.js +1 -1
  90. package/lib/asset/RawDataUrlModule.js +3 -2
  91. package/lib/async-modules/AsyncModuleHelpers.js +6 -4
  92. package/lib/buildChunkGraph.js +0 -1
  93. package/lib/cache/MemoryCachePlugin.js +0 -2
  94. package/lib/cache/MemoryWithGcCachePlugin.js +0 -2
  95. package/lib/cache/PackFileCacheStrategy.js +14 -1
  96. package/lib/cache/ResolverCachePlugin.js +9 -15
  97. package/lib/cache/getLazyHashedEtag.js +1 -1
  98. package/lib/config/browserslistTargetHandler.js +77 -76
  99. package/lib/config/defaults.js +162 -23
  100. package/lib/config/normalization.js +18 -3
  101. package/lib/config/target.js +1 -1
  102. package/lib/container/ContainerEntryDependency.js +0 -1
  103. package/lib/container/ContainerEntryModule.js +3 -7
  104. package/lib/container/ContainerPlugin.js +1 -2
  105. package/lib/container/ContainerReferencePlugin.js +0 -1
  106. package/lib/container/FallbackDependency.js +2 -1
  107. package/lib/container/FallbackModule.js +6 -7
  108. package/lib/container/ModuleFederationPlugin.js +0 -1
  109. package/lib/container/RemoteModule.js +8 -8
  110. package/lib/container/RemoteRuntimeModule.js +2 -2
  111. package/lib/css/CssGenerator.js +3 -6
  112. package/lib/css/CssLoadingRuntimeModule.js +6 -9
  113. package/lib/css/CssModulesPlugin.js +13 -19
  114. package/lib/css/CssParser.js +3 -3
  115. package/lib/css/walkCssTokens.js +2 -2
  116. package/lib/debug/ProfilingPlugin.js +35 -8
  117. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -17
  118. package/lib/dependencies/AMDPlugin.js +2 -2
  119. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -2
  120. package/lib/dependencies/CachedConstDependency.js +0 -4
  121. package/lib/dependencies/CommonJsExportRequireDependency.js +20 -14
  122. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  123. package/lib/dependencies/CommonJsExportsParserPlugin.js +20 -5
  124. package/lib/dependencies/CommonJsFullRequireDependency.js +6 -4
  125. package/lib/dependencies/CommonJsImportsParserPlugin.js +16 -7
  126. package/lib/dependencies/CommonJsRequireContextDependency.js +1 -1
  127. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  128. package/lib/dependencies/ConstDependency.js +2 -2
  129. package/lib/dependencies/ContextDependency.js +9 -4
  130. package/lib/dependencies/ContextDependencyHelpers.js +2 -2
  131. package/lib/dependencies/ContextDependencyTemplateAsId.js +9 -9
  132. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +9 -9
  133. package/lib/dependencies/ContextElementDependency.js +22 -11
  134. package/lib/dependencies/CssIcssImportDependency.js +0 -2
  135. package/lib/dependencies/CssIcssSymbolDependency.js +2 -2
  136. package/lib/dependencies/CssImportDependency.js +0 -8
  137. package/lib/dependencies/CssLocalIdentifierDependency.js +4 -7
  138. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -2
  139. package/lib/dependencies/CssUrlDependency.js +0 -6
  140. package/lib/dependencies/ExportsInfoDependency.js +7 -9
  141. package/lib/dependencies/ExternalModuleDependency.js +0 -3
  142. package/lib/dependencies/ExternalModuleInitFragment.js +1 -1
  143. package/lib/dependencies/HarmonyAcceptDependency.js +1 -1
  144. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -4
  145. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  146. package/lib/dependencies/HarmonyDetectionParserPlugin.js +0 -14
  147. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +3 -3
  148. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +4 -1
  149. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +29 -35
  150. package/lib/dependencies/HarmonyImportDependency.js +33 -14
  151. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +20 -23
  152. package/lib/dependencies/HarmonyImportSideEffectDependency.js +0 -4
  153. package/lib/dependencies/HarmonyImportSpecifierDependency.js +46 -31
  154. package/lib/dependencies/HarmonyModulesPlugin.js +3 -3
  155. package/lib/dependencies/ImportContextDependency.js +13 -0
  156. package/lib/dependencies/ImportDependency.js +18 -6
  157. package/lib/dependencies/ImportEagerDependency.js +2 -3
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +8 -5
  159. package/lib/dependencies/ImportMetaContextPlugin.js +0 -1
  160. package/lib/dependencies/ImportMetaPlugin.js +3 -2
  161. package/lib/dependencies/ImportParserPlugin.js +288 -45
  162. package/lib/dependencies/ImportWeakDependency.js +2 -3
  163. package/lib/dependencies/JsonExportsDependency.js +0 -1
  164. package/lib/dependencies/LoaderDependency.js +0 -3
  165. package/lib/dependencies/LoaderImportDependency.js +0 -3
  166. package/lib/dependencies/LoaderPlugin.js +11 -5
  167. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  168. package/lib/dependencies/ModuleDependency.js +3 -9
  169. package/lib/dependencies/NullDependency.js +2 -0
  170. package/lib/dependencies/ProvidedDependency.js +6 -8
  171. package/lib/dependencies/PureExpressionDependency.js +0 -1
  172. package/lib/dependencies/RequireEnsureDependenciesBlock.js +0 -1
  173. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -2
  174. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  175. package/lib/dependencies/RequireResolveDependency.js +2 -2
  176. package/lib/dependencies/RuntimeRequirementsDependency.js +2 -3
  177. package/lib/dependencies/StaticExportsDependency.js +3 -5
  178. package/lib/dependencies/URLDependency.js +2 -7
  179. package/lib/dependencies/URLPlugin.js +1 -2
  180. package/lib/dependencies/WebAssemblyExportImportedDependency.js +2 -2
  181. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  182. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  183. package/lib/dependencies/WorkerDependency.js +2 -3
  184. package/lib/dependencies/WorkerPlugin.js +4 -12
  185. package/lib/dependencies/processExportInfo.js +2 -3
  186. package/lib/esm/ModuleChunkFormatPlugin.js +0 -3
  187. package/lib/esm/ModuleChunkLoadingPlugin.js +2 -1
  188. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -7
  189. package/lib/hmr/LazyCompilationPlugin.js +6 -4
  190. package/lib/hmr/lazyCompilationBackend.js +13 -10
  191. package/lib/ids/DeterministicChunkIdsPlugin.js +0 -1
  192. package/lib/ids/HashedModuleIdsPlugin.js +5 -7
  193. package/lib/ids/IdHelpers.js +1 -1
  194. package/lib/ids/NamedChunkIdsPlugin.js +1 -6
  195. package/lib/ids/NamedModuleIdsPlugin.js +1 -5
  196. package/lib/ids/NaturalChunkIdsPlugin.js +0 -1
  197. package/lib/ids/NaturalModuleIdsPlugin.js +0 -1
  198. package/lib/ids/OccurrenceChunkIdsPlugin.js +0 -1
  199. package/lib/ids/OccurrenceModuleIdsPlugin.js +0 -1
  200. package/lib/ids/SyncModuleIdsPlugin.js +4 -3
  201. package/lib/index.js +8 -7
  202. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -1
  203. package/lib/javascript/BasicEvaluatedExpression.js +13 -6
  204. package/lib/javascript/ChunkFormatHelpers.js +1 -1
  205. package/lib/javascript/CommonJsChunkFormatPlugin.js +0 -1
  206. package/lib/javascript/JavascriptGenerator.js +2 -3
  207. package/lib/javascript/JavascriptModulesPlugin.js +46 -24
  208. package/lib/javascript/JavascriptParser.js +120 -55
  209. package/lib/javascript/JavascriptParserHelpers.js +2 -2
  210. package/lib/javascript/StartupHelpers.js +2 -4
  211. package/lib/json/JsonData.js +1 -1
  212. package/lib/json/JsonGenerator.js +4 -5
  213. package/lib/json/JsonModulesPlugin.js +0 -3
  214. package/lib/json/JsonParser.js +4 -2
  215. package/lib/library/AbstractLibraryPlugin.js +2 -2
  216. package/lib/library/AmdLibraryPlugin.js +0 -1
  217. package/lib/library/AssignLibraryPlugin.js +23 -12
  218. package/lib/library/EnableLibraryPlugin.js +7 -11
  219. package/lib/library/ExportPropertyLibraryPlugin.js +8 -20
  220. package/lib/library/JsonpLibraryPlugin.js +5 -2
  221. package/lib/library/ModuleLibraryPlugin.js +88 -43
  222. package/lib/library/SystemLibraryPlugin.js +15 -6
  223. package/lib/library/UmdLibraryPlugin.js +12 -18
  224. package/lib/logging/Logger.js +12 -10
  225. package/lib/logging/createConsoleLogger.js +15 -14
  226. package/lib/logging/truncateArgs.js +1 -1
  227. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -1
  228. package/lib/node/NodeWatchFileSystem.js +4 -4
  229. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  230. package/lib/node/RequireChunkLoadingRuntimeModule.js +5 -2
  231. package/lib/node/nodeConsole.js +2 -2
  232. package/lib/optimize/AggressiveSplittingPlugin.js +2 -0
  233. package/lib/optimize/ConcatenatedModule.js +142 -100
  234. package/lib/optimize/InnerGraph.js +17 -11
  235. package/lib/optimize/InnerGraphPlugin.js +0 -3
  236. package/lib/optimize/ModuleConcatenationPlugin.js +3 -4
  237. package/lib/optimize/RealContentHashPlugin.js +5 -3
  238. package/lib/optimize/RuntimeChunkPlugin.js +0 -1
  239. package/lib/optimize/SideEffectsFlagPlugin.js +3 -10
  240. package/lib/optimize/SplitChunksPlugin.js +46 -40
  241. package/lib/performance/SizeLimitsPlugin.js +2 -1
  242. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  243. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +0 -2
  244. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +0 -1
  245. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  246. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  247. package/lib/rules/BasicMatcherRulePlugin.js +0 -2
  248. package/lib/rules/ObjectMatcherRulePlugin.js +0 -1
  249. package/lib/rules/RuleSetCompiler.js +8 -6
  250. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  251. package/lib/runtime/CompatRuntimeModule.js +0 -1
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +8 -9
  253. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  254. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +1 -1
  255. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  256. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  257. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  258. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  259. package/lib/schemes/DataUriPlugin.js +2 -28
  260. package/lib/schemes/FileUriPlugin.js +5 -2
  261. package/lib/schemes/HttpUriPlugin.js +4 -2
  262. package/lib/schemes/VirtualUrlPlugin.js +11 -11
  263. package/lib/serialization/FileMiddleware.js +1 -1
  264. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  265. package/lib/serialization/ObjectMiddleware.js +31 -20
  266. package/lib/serialization/SerializerMiddleware.js +1 -3
  267. package/lib/serialization/types.js +1 -1
  268. package/lib/sharing/ConsumeSharedModule.js +3 -5
  269. package/lib/sharing/ConsumeSharedPlugin.js +2 -4
  270. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -6
  271. package/lib/sharing/ProvideSharedModule.js +3 -7
  272. package/lib/sharing/SharePlugin.js +0 -2
  273. package/lib/sharing/ShareRuntimeModule.js +4 -1
  274. package/lib/sharing/resolveMatchedConfigs.js +14 -6
  275. package/lib/sharing/utils.js +0 -6
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +179 -95
  277. package/lib/stats/DefaultStatsPresetPlugin.js +15 -9
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +77 -113
  279. package/lib/stats/StatsFactory.js +14 -11
  280. package/lib/url/URLParserPlugin.js +2 -4
  281. package/lib/util/ArrayHelpers.js +4 -4
  282. package/lib/util/AsyncQueue.js +1 -0
  283. package/lib/util/Hash.js +35 -5
  284. package/lib/util/LazySet.js +2 -2
  285. package/lib/util/StackedCacheMap.js +0 -2
  286. package/lib/util/TupleSet.js +9 -4
  287. package/lib/util/URLAbsoluteSpecifier.js +0 -1
  288. package/lib/util/WeakTupleMap.js +1 -1
  289. package/lib/util/chainedImports.js +3 -1
  290. package/lib/util/cleverMerge.js +15 -18
  291. package/lib/util/comparators.js +2 -4
  292. package/lib/util/compileBooleanMatcher.js +11 -9
  293. package/lib/util/concatenate.js +1 -2
  294. package/lib/util/create-schema-validation.js +1 -2
  295. package/lib/util/createHash.js +85 -15
  296. package/lib/util/dataURL.js +39 -0
  297. package/lib/util/deprecation.js +29 -31
  298. package/lib/util/deterministicGrouping.js +34 -30
  299. package/lib/util/extractSourceMap.js +319 -0
  300. package/lib/util/findGraphRoots.js +15 -5
  301. package/lib/util/fs.js +29 -8
  302. package/lib/util/hash/BatchedHash.js +47 -8
  303. package/lib/util/hash/wasm-hash.js +53 -13
  304. package/lib/util/semver.js +9 -8
  305. package/lib/util/smartGrouping.js +41 -26
  306. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  307. package/lib/wasm/EnableWasmLoadingPlugin.js +3 -2
  308. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +5 -1
  309. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +2 -13
  310. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +2 -9
  311. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  312. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -4
  313. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -3
  314. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -4
  315. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +2 -7
  316. package/lib/wasm-sync/WebAssemblyParser.js +1 -13
  317. package/lib/web/JsonpChunkLoadingPlugin.js +2 -1
  318. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
  319. package/lib/web/JsonpTemplatePlugin.js +0 -1
  320. package/lib/webpack.js +21 -8
  321. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +2 -1
  322. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  323. package/package.json +21 -21
  324. package/schemas/WebpackOptions.check.js +1 -1
  325. package/schemas/WebpackOptions.json +93 -96
  326. package/schemas/plugins/BannerPlugin.check.js +1 -1
  327. package/schemas/plugins/BannerPlugin.json +4 -0
  328. package/schemas/plugins/IgnorePlugin.json +1 -1
  329. package/schemas/plugins/ProgressPlugin.json +1 -1
  330. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  331. package/schemas/plugins/SourceMapDevToolPlugin.json +5 -1
  332. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  333. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  334. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  335. package/schemas/plugins/schemes/VirtualUrlPlugin.json +3 -3
  336. package/types.d.ts +1699 -706
  337. package/SECURITY.md +0 -9
  338. package/schemas/plugins/HashedModuleIdsPlugin.check.d.ts +0 -7
  339. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
@@ -54,54 +54,49 @@ const {
54
54
  const makeSerializable = require("./util/makeSerializable");
55
55
  const memoize = require("./util/memoize");
56
56
 
57
+ /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
58
+ /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
57
59
  /** @typedef {import("webpack-sources").Source} Source */
58
60
  /** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
59
- /** @typedef {import("../declarations/WebpackOptions").Mode} Mode */
60
61
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
61
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
62
62
  /** @typedef {import("../declarations/WebpackOptions").NoParse} NoParse */
63
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
64
- /** @typedef {import("./Compiler")} Compiler */
63
+ /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
65
64
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
66
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
67
65
  /** @typedef {import("./Generator")} Generator */
68
66
  /** @typedef {import("./Generator").GenerateErrorFn} GenerateErrorFn */
69
- /** @typedef {import("./Generator").GenerateContextData} GenerateContextData */
70
67
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
68
+ /** @typedef {import("./Module").FileSystemDependencies} FileSystemDependencies */
71
69
  /** @typedef {import("./Module").BuildMeta} BuildMeta */
72
70
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
73
71
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
72
+ /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
74
73
  /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
75
74
  /** @typedef {import("./Module").KnownBuildInfo} KnownBuildInfo */
76
75
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
76
+ /** @typedef {import("./Module").LibIdent} LibIdent */
77
+ /** @typedef {import("./Module").NameForCondition} NameForCondition */
77
78
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
78
79
  /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
79
80
  /** @typedef {import("./Module").BuildCallback} BuildCallback */
81
+ /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
80
82
  /** @typedef {import("./Generator").SourceTypes} SourceTypes */
81
83
  /** @typedef {import("./Module").UnsafeCacheData} UnsafeCacheData */
82
84
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
83
85
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
84
- /** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */
85
86
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
86
- /** @typedef {import("./NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
87
+ /** @typedef {import("./NormalModuleFactory").NormalModuleTypes} NormalModuleTypes */
87
88
  /** @typedef {import("./NormalModuleFactory").ResourceSchemeData} ResourceSchemeData */
88
89
  /** @typedef {import("./Parser")} Parser */
89
90
  /** @typedef {import("./Parser").PreparsedAst} PreparsedAst */
90
91
  /** @typedef {import("./RequestShortener")} RequestShortener */
91
- /** @typedef {import("./ResolverFactory").ResolveContext} ResolveContext */
92
92
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
93
- /** @typedef {import("./ResolverFactory").ResolveRequest} ResolveRequest */
94
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
95
- /** @typedef {import("./logging/Logger").Logger} WebpackLogger */
96
93
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
97
94
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
98
95
  /** @typedef {import("./util/Hash")} Hash */
99
96
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
100
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
101
97
  /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
102
98
  /** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
103
- /** @typedef {import("./dependencies/HarmonyImportSideEffectDependency")} HarmonyImportSideEffectDependency */
104
- /** @typedef {import("./dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
99
+ /** @typedef {import("../declarations/WebpackOptions").RuleSetRule["extractSourceMap"]} ExtractSourceMapOptions */
105
100
  /**
106
101
  * @template T
107
102
  * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook
@@ -123,6 +118,9 @@ const memoize = require("./util/memoize");
123
118
  const getInvalidDependenciesModuleWarning = memoize(() =>
124
119
  require("./InvalidDependenciesModuleWarning")
125
120
  );
121
+
122
+ const getExtractSourceMap = memoize(() => require("./util/extractSourceMap"));
123
+
126
124
  const getValidate = memoize(() => require("schema-utils").validate);
127
125
 
128
126
  const ABSOLUTE_PATH_REGEX = /^([a-zA-Z]:\\|\\\\|\/)/;
@@ -131,8 +129,8 @@ const ABSOLUTE_PATH_REGEX = /^([a-zA-Z]:\\|\\\\|\/)/;
131
129
  * @typedef {object} LoaderItem
132
130
  * @property {string} loader
133
131
  * @property {string | null | undefined | Record<string, EXPECTED_ANY>} options
134
- * @property {string?} ident
135
- * @property {string?} type
132
+ * @property {string | null=} ident
133
+ * @property {string | null=} type
136
134
  */
137
135
 
138
136
  /**
@@ -226,14 +224,16 @@ makeSerializable(
226
224
 
227
225
  /** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]} Result */
228
226
 
227
+ /** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
228
+
229
229
  /**
230
230
  * @typedef {object} NormalModuleCompilationHooks
231
- * @property {SyncHook<[LoaderContext<EXPECTED_ANY>, NormalModule]>} loader
232
- * @property {SyncHook<[LoaderItem[], NormalModule, LoaderContext<EXPECTED_ANY>]>} beforeLoaders
231
+ * @property {SyncHook<[AnyLoaderContext, NormalModule]>} loader
232
+ * @property {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} beforeLoaders
233
233
  * @property {SyncHook<[NormalModule]>} beforeParse
234
234
  * @property {SyncHook<[NormalModule]>} beforeSnapshot
235
235
  * @property {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} readResourceForScheme
236
- * @property {HookMap<AsyncSeriesBailHook<[LoaderContext<EXPECTED_ANY>], string | Buffer | null>>} readResource
236
+ * @property {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} readResource
237
237
  * @property {SyncWaterfallHook<[Result, NormalModule]>} processResult
238
238
  * @property {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>} needBuild
239
239
  */
@@ -241,7 +241,7 @@ makeSerializable(
241
241
  /**
242
242
  * @typedef {object} NormalModuleCreateData
243
243
  * @property {string=} layer an optional layer in which the module is
244
- * @property {ModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
244
+ * @property {NormalModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
245
245
  * @property {string} request request string
246
246
  * @property {string} userRequest request intended by user (without loaders from config)
247
247
  * @property {string} rawRequest request without resolving
@@ -255,6 +255,11 @@ makeSerializable(
255
255
  * @property {Generator} generator the generator used
256
256
  * @property {GeneratorOptions=} generatorOptions the options of the generator used
257
257
  * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
258
+ * @property {boolean=} extractSourceMap enable/disable extracting source map
259
+ */
260
+
261
+ /**
262
+ * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
258
263
  */
259
264
 
260
265
  /** @type {WeakMap<Compilation, NormalModuleCompilationHooks>} */
@@ -342,7 +347,8 @@ class NormalModule extends Module {
342
347
  parserOptions,
343
348
  generator,
344
349
  generatorOptions,
345
- resolveOptions
350
+ resolveOptions,
351
+ extractSourceMap
346
352
  }) {
347
353
  super(type, context || getContext(resource), layer);
348
354
 
@@ -374,6 +380,8 @@ class NormalModule extends Module {
374
380
  // already declared in super class
375
381
  this.resolveOptions = resolveOptions;
376
382
  }
383
+ /** @type {ExtractSourceMapOptions} */
384
+ this.extractSourceMap = extractSourceMap;
377
385
 
378
386
  // Info from Build
379
387
  /** @type {WebpackError | null} */
@@ -400,7 +408,7 @@ class NormalModule extends Module {
400
408
  this._isEvaluatingSideEffects = false;
401
409
  /** @type {WeakSet<ModuleGraph> | undefined} */
402
410
  this._addedSideEffectsBailout = undefined;
403
- /** @type {GenerateContextData} */
411
+ /** @type {CodeGenerationResultData} */
404
412
  this._codeGeneratorData = new Map();
405
413
  }
406
414
 
@@ -425,9 +433,16 @@ class NormalModule extends Module {
425
433
  return /** @type {string} */ (requestShortener.shorten(this.userRequest));
426
434
  }
427
435
 
436
+ /**
437
+ * @returns {string | null} return the resource path
438
+ */
439
+ getResource() {
440
+ return this.matchResource || this.resource;
441
+ }
442
+
428
443
  /**
429
444
  * @param {LibIdentOptions} options options
430
- * @returns {string | null} an identifier for library inclusion
445
+ * @returns {LibIdent | null} an identifier for library inclusion
431
446
  */
432
447
  libIdent(options) {
433
448
  let ident = contextify(
@@ -440,10 +455,10 @@ class NormalModule extends Module {
440
455
  }
441
456
 
442
457
  /**
443
- * @returns {string | null} absolute path which should be used for condition matching (usually the resource path)
458
+ * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
444
459
  */
445
460
  nameForCondition() {
446
- const resource = this.matchResource || this.resource;
461
+ const resource = /** @type {string} */ (this.getResource());
447
462
  const idx = resource.indexOf("?");
448
463
  if (idx >= 0) return resource.slice(0, idx);
449
464
  return resource;
@@ -589,7 +604,8 @@ class NormalModule extends Module {
589
604
  const { requestShortener } = compilation.runtimeTemplate;
590
605
  const getCurrentLoaderName = () => {
591
606
  const currentLoader = this.getCurrentLoader(
592
- /** @type {LoaderContext<EXPECTED_ANY>} */ (loaderContext)
607
+ /** @type {AnyLoaderContext} */
608
+ (loaderContext)
593
609
  );
594
610
  if (!currentLoader) return "(not in loader scope)";
595
611
  return requestShortener.shorten(currentLoader.loader);
@@ -600,21 +616,18 @@ class NormalModule extends Module {
600
616
  const getResolveContext = () => ({
601
617
  fileDependencies: {
602
618
  add: (d) =>
603
- /** @type {LoaderContext<EXPECTED_ANY>} */ (
604
- loaderContext
605
- ).addDependency(d)
619
+ /** @type {AnyLoaderContext} */
620
+ (loaderContext).addDependency(d)
606
621
  },
607
622
  contextDependencies: {
608
623
  add: (d) =>
609
- /** @type {LoaderContext<EXPECTED_ANY>} */ (
610
- loaderContext
611
- ).addContextDependency(d)
624
+ /** @type {AnyLoaderContext} */
625
+ (loaderContext).addContextDependency(d)
612
626
  },
613
627
  missingDependencies: {
614
628
  add: (d) =>
615
- /** @type {LoaderContext<EXPECTED_ANY>} */ (
616
- loaderContext
617
- ).addMissingDependency(d)
629
+ /** @type {AnyLoaderContext} */
630
+ (loaderContext).addMissingDependency(d)
618
631
  }
619
632
  });
620
633
  const getAbsolutify = memoize(() =>
@@ -661,13 +674,9 @@ class NormalModule extends Module {
661
674
  * @returns {Hash} hash
662
675
  */
663
676
  createHash: (type) =>
664
- createHash(
665
- type ||
666
- /** @type {HashFunction} */
667
- (compilation.outputOptions.hashFunction)
668
- )
677
+ createHash(type || compilation.outputOptions.hashFunction)
669
678
  };
670
- /** @type {import("../declarations/LoaderContext").NormalModuleLoaderContext<T>} */
679
+ /** @type {NormalModuleLoaderContext<T>} */
671
680
  const loaderContext = {
672
681
  version: 2,
673
682
  /**
@@ -676,7 +685,8 @@ class NormalModule extends Module {
676
685
  */
677
686
  getOptions: (schema) => {
678
687
  const loader = this.getCurrentLoader(
679
- /** @type {LoaderContext<EXPECTED_ANY>} */ (loaderContext)
688
+ /** @type {AnyLoaderContext} */
689
+ (loaderContext)
680
690
  );
681
691
 
682
692
  let { options } = /** @type {LoaderItem} */ (loader);
@@ -738,7 +748,8 @@ class NormalModule extends Module {
738
748
  },
739
749
  getLogger: (name) => {
740
750
  const currentLoader = this.getCurrentLoader(
741
- /** @type {LoaderContext<EXPECTED_ANY>} */ (loaderContext)
751
+ /** @type {AnyLoaderContext} */
752
+ (loaderContext)
742
753
  );
743
754
  return compilation.getLogger(() =>
744
755
  [currentLoader && currentLoader.loader, name, this.identifier()]
@@ -794,7 +805,7 @@ class NormalModule extends Module {
794
805
  (buildInfo.assetsInfo);
795
806
 
796
807
  assets[name] = this.createSourceForAsset(
797
- /** @type {string} */ (options.context),
808
+ options.context,
798
809
  name,
799
810
  content,
800
811
  sourceMap,
@@ -811,14 +822,14 @@ class NormalModule extends Module {
811
822
  buildInfo.buildDependencies.add(dep);
812
823
  },
813
824
  utils,
814
- rootContext: /** @type {string} */ (options.context),
825
+ rootContext: options.context,
815
826
  webpack: true,
816
827
  sourceMap: Boolean(this.useSourceMap),
817
828
  mode: options.mode || "production",
818
- hashFunction: /** @type {string} */ (options.output.hashFunction),
819
- hashDigest: /** @type {string} */ (options.output.hashDigest),
820
- hashDigestLength: /** @type {number} */ (options.output.hashDigestLength),
821
- hashSalt: /** @type {string} */ (options.output.hashSalt),
829
+ hashFunction: options.output.hashFunction,
830
+ hashDigest: options.output.hashDigest,
831
+ hashDigestLength: options.output.hashDigestLength,
832
+ hashSalt: options.output.hashSalt,
822
833
  _module: this,
823
834
  _compilation: compilation,
824
835
  _compiler: compilation.compiler,
@@ -827,19 +838,18 @@ class NormalModule extends Module {
827
838
 
828
839
  Object.assign(loaderContext, options.loader);
829
840
 
830
- // After `hooks.loader.call` is called, the loaderContext is typed as LoaderContext<EXPECTED_ANY>
831
841
  hooks.loader.call(
832
- /** @type {LoaderContext<EXPECTED_ANY>} */
842
+ /** @type {AnyLoaderContext} */
833
843
  (loaderContext),
834
844
  this
835
845
  );
836
846
 
837
- return /** @type {LoaderContext<EXPECTED_ANY>} */ (loaderContext);
847
+ return /** @type {AnyLoaderContext} */ (loaderContext);
838
848
  }
839
849
 
840
850
  // TODO remove `loaderContext` in webpack@6
841
851
  /**
842
- * @param {LoaderContext<EXPECTED_ANY>} loaderContext loader context
852
+ * @param {AnyLoaderContext} loaderContext loader context
843
853
  * @param {number} index index
844
854
  * @returns {LoaderItem | null} loader
845
855
  */
@@ -962,7 +972,7 @@ class NormalModule extends Module {
962
972
  : this.binary;
963
973
 
964
974
  this._source = this.createSource(
965
- /** @type {string} */ (options.context),
975
+ options.context,
966
976
  isBinaryModule ? asBuffer(source) : asString(source),
967
977
  sourceMap,
968
978
  compilation.compiler.root
@@ -988,7 +998,7 @@ class NormalModule extends Module {
988
998
  hooks.beforeLoaders.call(
989
999
  this.loaders,
990
1000
  this,
991
- /** @type {LoaderContext<EXPECTED_ANY>} */
1001
+ /** @type {AnyLoaderContext} */
992
1002
  (loaderContext)
993
1003
  );
994
1004
  } catch (err) {
@@ -1007,28 +1017,80 @@ class NormalModule extends Module {
1007
1017
  loaders: this.loaders,
1008
1018
  context: loaderContext,
1009
1019
  /**
1010
- * @param {LoaderContext<EXPECTED_ANY>} loaderContext the loader context
1020
+ * @param {AnyLoaderContext} loaderContext the loader context
1011
1021
  * @param {string} resourcePath the resource Path
1012
- * @param {(err: Error | null, result?: string | Buffer) => void} callback callback
1022
+ * @param {(err: Error | null, result?: string | Buffer, sourceMap?: Result[1]) => void} callback callback
1023
+ * @returns {Promise<void>}
1013
1024
  */
1014
- processResource: (loaderContext, resourcePath, callback) => {
1015
- const resource = loaderContext.resource;
1016
- const scheme = getScheme(resource);
1017
- hooks.readResource
1018
- .for(scheme)
1019
- .callAsync(loaderContext, (err, result) => {
1020
- if (err) return callback(err);
1021
- if (typeof result !== "string" && !result) {
1022
- return callback(
1023
- new UnhandledSchemeError(
1024
- /** @type {string} */
1025
- (scheme),
1026
- resource
1027
- )
1025
+ processResource: async (loaderContext, resourcePath, callback) => {
1026
+ /** @type {ReadResource} */
1027
+ const readResource = (resourcePath, getLoaderContext) => {
1028
+ const scheme = getScheme(resourcePath);
1029
+ return new Promise((resolve, reject) => {
1030
+ hooks.readResource
1031
+ .for(scheme)
1032
+ .callAsync(getLoaderContext(resourcePath), (err, result) => {
1033
+ if (err) {
1034
+ reject(err);
1035
+ } else {
1036
+ if (typeof result !== "string" && !result) {
1037
+ return reject(
1038
+ new UnhandledSchemeError(
1039
+ /** @type {string} */
1040
+ (scheme),
1041
+ resourcePath
1042
+ )
1043
+ );
1044
+ }
1045
+ resolve(result);
1046
+ }
1047
+ });
1048
+ });
1049
+ };
1050
+ try {
1051
+ const result = await readResource(
1052
+ resourcePath,
1053
+ () => loaderContext
1054
+ );
1055
+ if (
1056
+ this.extractSourceMap &&
1057
+ (this.useSourceMap || this.useSimpleSourceMap)
1058
+ ) {
1059
+ try {
1060
+ const { source, sourceMap } = await getExtractSourceMap()(
1061
+ result,
1062
+ resourcePath,
1063
+ /** @type {ReadResource} */
1064
+ (resourcePath) =>
1065
+ readResource(
1066
+ resourcePath,
1067
+ (resourcePath) =>
1068
+ /** @type {AnyLoaderContext} */
1069
+ ({
1070
+ addDependency(dependency) {
1071
+ loaderContext.addDependency(dependency);
1072
+ },
1073
+ fs: loaderContext.fs,
1074
+ _module: undefined,
1075
+ resourcePath,
1076
+ resource: resourcePath
1077
+ })
1078
+ ).catch((err) => {
1079
+ throw new Error(
1080
+ `Failed to parse source map. ${/** @type {Error} */ (err).message}`
1081
+ );
1082
+ })
1028
1083
  );
1084
+ return callback(null, source, sourceMap);
1085
+ } catch (err) {
1086
+ this.addWarning(new ModuleWarning(/** @type {Error} */ (err)));
1087
+ return callback(null, result);
1029
1088
  }
1030
- return callback(null, result);
1031
- });
1089
+ }
1090
+ return callback(null, result);
1091
+ } catch (error) {
1092
+ return callback(/** @type {Error} */ (error));
1093
+ }
1032
1094
  }
1033
1095
  },
1034
1096
  (err, result) => {
@@ -1141,10 +1203,7 @@ class NormalModule extends Module {
1141
1203
  * @private
1142
1204
  */
1143
1205
  _initBuildHash(compilation) {
1144
- const hash = createHash(
1145
- /** @type {HashFunction} */
1146
- (compilation.outputOptions.hashFunction)
1147
- );
1206
+ const hash = createHash(compilation.outputOptions.hashFunction);
1148
1207
  if (this._source) {
1149
1208
  hash.update("source");
1150
1209
  this._source.updateHash(hash);
@@ -1152,7 +1211,7 @@ class NormalModule extends Module {
1152
1211
  hash.update("meta");
1153
1212
  hash.update(JSON.stringify(this.buildMeta));
1154
1213
  /** @type {BuildInfo} */
1155
- (this.buildInfo).hash = /** @type {string} */ (hash.digest("hex"));
1214
+ (this.buildInfo).hash = hash.digest("hex");
1156
1215
  }
1157
1216
 
1158
1217
  /**
@@ -1205,11 +1264,7 @@ class NormalModule extends Module {
1205
1264
  const handleParseError = (e) => {
1206
1265
  const source = /** @type {Source} */ (this._source).source();
1207
1266
  const loaders = this.loaders.map((item) =>
1208
- contextify(
1209
- /** @type {string} */ (options.context),
1210
- item.loader,
1211
- compilation.compiler.root
1212
- )
1267
+ contextify(options.context, item.loader, compilation.compiler.root)
1213
1268
  );
1214
1269
  const error = new ModuleParseError(source, e, loaders, this.type);
1215
1270
  this.markModuleAsErrored(error);
@@ -1446,7 +1501,7 @@ class NormalModule extends Module {
1446
1501
  codeGenerationResults,
1447
1502
  sourceTypes
1448
1503
  }) {
1449
- /** @type {Set<string>} */
1504
+ /** @type {RuntimeRequirements} */
1450
1505
  const runtimeRequirements = new Set();
1451
1506
 
1452
1507
  const { parsed } = /** @type {BuildInfo} */ (this.buildInfo);
@@ -1604,10 +1659,10 @@ class NormalModule extends Module {
1604
1659
  }
1605
1660
 
1606
1661
  /**
1607
- * @param {LazySet<string>} fileDependencies set where file dependencies are added to
1608
- * @param {LazySet<string>} contextDependencies set where context dependencies are added to
1609
- * @param {LazySet<string>} missingDependencies set where missing dependencies are added to
1610
- * @param {LazySet<string>} buildDependencies set where build dependencies are added to
1662
+ * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
1663
+ * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
1664
+ * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
1665
+ * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
1611
1666
  */
1612
1667
  addCacheDependencies(
1613
1668
  fileDependencies,
@@ -1666,6 +1721,7 @@ class NormalModule extends Module {
1666
1721
  write(this._lastSuccessfulBuildMeta);
1667
1722
  write(this._forceBuild);
1668
1723
  write(this._codeGeneratorData);
1724
+ write(this.extractSourceMap);
1669
1725
  super.serialize(context);
1670
1726
  }
1671
1727
 
@@ -1706,6 +1762,7 @@ class NormalModule extends Module {
1706
1762
  this._lastSuccessfulBuildMeta = read();
1707
1763
  this._forceBuild = read();
1708
1764
  this._codeGeneratorData = read();
1765
+ this.extractSourceMap = read();
1709
1766
  super.deserialize(context);
1710
1767
  }
1711
1768
  }