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
@@ -0,0 +1,144 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { ConcatSource } = require("webpack-sources");
9
+ const ConcatenatedModule = require("../optimize/ConcatenatedModule");
10
+ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
11
+
12
+ /** @typedef {import("webpack-sources").Source} Source */
13
+ /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
14
+ /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
15
+ /** @typedef {import("../Chunk")} Chunk */
16
+ /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
17
+ /** @typedef {import("../Compiler")} Compiler */
18
+ /** @typedef {import("../Module")} Module */
19
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
20
+ /** @typedef {import("../javascript/JavascriptModulesPlugin").StartupRenderContext} StartupRenderContext */
21
+ /** @typedef {import("../util/Hash")} Hash */
22
+ /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
23
+
24
+ /**
25
+ * @typedef {object} ModernModuleLibraryPluginOptions
26
+ * @property {LibraryType} type
27
+ */
28
+
29
+ /**
30
+ * @typedef {object} ModernModuleLibraryPluginParsed
31
+ * @property {string} name
32
+ */
33
+
34
+ /**
35
+ * @typedef {ModernModuleLibraryPluginParsed} T
36
+ * @extends {AbstractLibraryPlugin<ModernModuleLibraryPluginParsed>}
37
+ */
38
+ class ModernModuleLibraryPlugin extends AbstractLibraryPlugin {
39
+ /**
40
+ * Apply the plugin
41
+ * @param {Compiler} compiler the compiler instance
42
+ * @returns {void}
43
+ */
44
+ apply(compiler) {
45
+ super.apply(compiler);
46
+
47
+ compiler.hooks.compilation.tap("ModernModuleLibraryPlugin", compilation => {
48
+ const { exportsDefinitions } =
49
+ ConcatenatedModule.getCompilationHooks(compilation);
50
+ exportsDefinitions.tap("ModernModuleLibraryPlugin", () => true);
51
+ });
52
+ }
53
+
54
+ /**
55
+ * @param {ModernModuleLibraryPluginOptions} options the plugin options
56
+ */
57
+ constructor(options) {
58
+ super({
59
+ pluginName: "ModernModuleLibraryPlugin",
60
+ type: options.type
61
+ });
62
+ }
63
+
64
+ /**
65
+ * @param {LibraryOptions} library normalized library option
66
+ * @returns {T | false} preprocess as needed by overriding
67
+ */
68
+ parseOptions(library) {
69
+ const { name } = library;
70
+ if (name) {
71
+ throw new Error(
72
+ `Library name must be unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
73
+ );
74
+ }
75
+ const _name = /** @type {string} */ (name);
76
+ return {
77
+ name: _name
78
+ };
79
+ }
80
+
81
+ /**
82
+ * @param {Source} source source
83
+ * @param {Module} module module
84
+ * @param {StartupRenderContext} renderContext render context
85
+ * @param {LibraryContext<T>} libraryContext context
86
+ * @returns {Source} source with library export
87
+ */
88
+ renderStartup(
89
+ source,
90
+ module,
91
+ { moduleGraph, chunk },
92
+ { options, compilation }
93
+ ) {
94
+ const result = new ConcatSource(source);
95
+ const exportsInfo = moduleGraph.getExportsInfo(module);
96
+ const definitions =
97
+ /** @type {BuildMeta} */
98
+ (module.buildMeta).exportsFinalName;
99
+ const exports = [];
100
+
101
+ for (const exportInfo of exportsInfo.orderedExports) {
102
+ let shouldContinue = false;
103
+ const reexport = exportInfo.findTarget(moduleGraph, _m => true);
104
+
105
+ if (reexport) {
106
+ const exp = moduleGraph.getExportsInfo(reexport.module);
107
+
108
+ for (const reexportInfo of exp.orderedExports) {
109
+ if (
110
+ !reexportInfo.provided &&
111
+ reexportInfo.name === /** @type {string[]} */ (reexport.export)[0]
112
+ ) {
113
+ shouldContinue = true;
114
+ }
115
+ }
116
+ }
117
+
118
+ if (shouldContinue) continue;
119
+
120
+ const webpackExportsProperty = exportInfo.getUsedName(
121
+ exportInfo.name,
122
+ chunk.runtime
123
+ );
124
+ const finalName =
125
+ definitions[
126
+ /** @type {string} */
127
+ (webpackExportsProperty)
128
+ ];
129
+ exports.push(
130
+ finalName === exportInfo.name
131
+ ? finalName
132
+ : `${finalName} as ${exportInfo.name}`
133
+ );
134
+ }
135
+
136
+ if (exports.length > 0) {
137
+ result.add(`export { ${exports.join(", ")} };\n`);
138
+ }
139
+
140
+ return result;
141
+ }
142
+ }
143
+
144
+ module.exports = ModernModuleLibraryPlugin;
@@ -58,8 +58,9 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
58
58
  `Library name must be unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
59
59
  );
60
60
  }
61
+ const _name = /** @type {string} */ (name);
61
62
  return {
62
- name: /** @type {string} */ (name)
63
+ name: _name
63
64
  };
64
65
  }
65
66
 
@@ -58,8 +58,9 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
58
58
  `System.js library name must be a simple string or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
59
59
  );
60
60
  }
61
+ const _name = /** @type {string} */ (name);
61
62
  return {
62
- name: /** @type {string} */ (name)
63
+ name: _name
63
64
  };
64
65
  }
65
66
 
@@ -30,9 +30,8 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
30
30
  * @param {string[]} accessor the accessor to convert to path
31
31
  * @returns {string} the path
32
32
  */
33
- const accessorToObjectAccess = accessor => {
34
- return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
35
- };
33
+ const accessorToObjectAccess = accessor =>
34
+ accessor.map(a => `[${JSON.stringify(a)}]`).join("");
36
35
 
37
36
  /**
38
37
  * @param {string|undefined} base the path prefix
@@ -157,18 +156,17 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
157
156
  * @param {string} str the string to replace
158
157
  * @returns {string} the replaced keys
159
158
  */
160
- const replaceKeys = str => {
161
- return compilation.getPath(str, {
159
+ const replaceKeys = str =>
160
+ compilation.getPath(str, {
162
161
  chunk
163
162
  });
164
- };
165
163
 
166
164
  /**
167
165
  * @param {ExternalModule[]} modules external modules
168
166
  * @returns {string} result
169
167
  */
170
- const externalsDepsArray = modules => {
171
- return `[${replaceKeys(
168
+ const externalsDepsArray = modules =>
169
+ `[${replaceKeys(
172
170
  modules
173
171
  .map(m =>
174
172
  JSON.stringify(
@@ -180,14 +178,13 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
180
178
  )
181
179
  .join(", ")
182
180
  )}]`;
183
- };
184
181
 
185
182
  /**
186
183
  * @param {ExternalModule[]} modules external modules
187
184
  * @returns {string} result
188
185
  */
189
- const externalsRootArray = modules => {
190
- return replaceKeys(
186
+ const externalsRootArray = modules =>
187
+ replaceKeys(
191
188
  modules
192
189
  .map(m => {
193
190
  let request = m.request;
@@ -199,14 +196,13 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
199
196
  })
200
197
  .join(", ")
201
198
  );
202
- };
203
199
 
204
200
  /**
205
201
  * @param {string} type the type
206
202
  * @returns {string} external require array
207
203
  */
208
- const externalsRequireArray = type => {
209
- return replaceKeys(
204
+ const externalsRequireArray = type =>
205
+ replaceKeys(
210
206
  externals
211
207
  .map(m => {
212
208
  let expr;
@@ -218,16 +214,14 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
218
214
  }
219
215
  if (request === undefined) {
220
216
  throw new Error(
221
- "Missing external configuration for type:" + type
217
+ `Missing external configuration for type:${type}`
222
218
  );
223
219
  }
224
- if (Array.isArray(request)) {
225
- expr = `require(${JSON.stringify(
226
- request[0]
227
- )})${accessorToObjectAccess(request.slice(1))}`;
228
- } else {
229
- expr = `require(${JSON.stringify(request)})`;
230
- }
220
+ expr = Array.isArray(request)
221
+ ? `require(${JSON.stringify(
222
+ request[0]
223
+ )})${accessorToObjectAccess(request.slice(1))}`
224
+ : `require(${JSON.stringify(request)})`;
231
225
  if (m.isOptional(moduleGraph)) {
232
226
  expr = `(function webpackLoadOptionalExternalModule() { try { return ${expr}; } catch(e) {} }())`;
233
227
  }
@@ -235,14 +229,13 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
235
229
  })
236
230
  .join(", ")
237
231
  );
238
- };
239
232
 
240
233
  /**
241
234
  * @param {ExternalModule[]} modules external modules
242
235
  * @returns {string} arguments
243
236
  */
244
- const externalsArguments = modules => {
245
- return modules
237
+ const externalsArguments = modules =>
238
+ modules
246
239
  .map(
247
240
  m =>
248
241
  `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(
@@ -250,26 +243,24 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
250
243
  )}__`
251
244
  )
252
245
  .join(", ");
253
- };
254
246
 
255
247
  /**
256
248
  * @param {string| string[]} library library name
257
249
  * @returns {string} stringified library name
258
250
  */
259
- const libraryName = library => {
260
- return JSON.stringify(
251
+ const libraryName = library =>
252
+ JSON.stringify(
261
253
  replaceKeys(/** @type {string[]} */ ([]).concat(library).pop())
262
254
  );
263
- };
264
255
 
265
256
  let amdFactory;
266
257
  if (optionalExternals.length > 0) {
267
258
  const wrapperArguments = externalsArguments(requiredExternals);
268
259
  const factoryArguments =
269
260
  requiredExternals.length > 0
270
- ? externalsArguments(requiredExternals) +
271
- ", " +
272
- externalsRootArray(optionalExternals)
261
+ ? `${externalsArguments(requiredExternals)}, ${externalsRootArray(
262
+ optionalExternals
263
+ )}`
273
264
  : externalsRootArray(optionalExternals);
274
265
  amdFactory =
275
266
  `function webpackLoadOptionalExternalModuleAmd(${wrapperArguments}) {\n` +
@@ -288,72 +279,55 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
288
279
  const getAuxiliaryComment = type => {
289
280
  if (auxiliaryComment) {
290
281
  if (typeof auxiliaryComment === "string")
291
- return "\t//" + auxiliaryComment + "\n";
292
- if (auxiliaryComment[type])
293
- return "\t//" + auxiliaryComment[type] + "\n";
282
+ return `\t//${auxiliaryComment}\n`;
283
+ if (auxiliaryComment[type]) return `\t//${auxiliaryComment[type]}\n`;
294
284
  }
295
285
  return "";
296
286
  };
297
287
 
298
288
  return new ConcatSource(
299
289
  new OriginalSource(
300
- "(function webpackUniversalModuleDefinition(root, factory) {\n" +
301
- getAuxiliaryComment("commonjs2") +
302
- " if(typeof exports === 'object' && typeof module === 'object')\n" +
303
- " module.exports = factory(" +
304
- externalsRequireArray("commonjs2") +
305
- ");\n" +
306
- getAuxiliaryComment("amd") +
307
- " else if(typeof define === 'function' && define.amd)\n" +
308
- (requiredExternals.length > 0
309
- ? names.amd && namedDefine === true
310
- ? " define(" +
311
- libraryName(names.amd) +
312
- ", " +
313
- externalsDepsArray(requiredExternals) +
314
- ", " +
315
- amdFactory +
316
- ");\n"
317
- : " define(" +
318
- externalsDepsArray(requiredExternals) +
319
- ", " +
320
- amdFactory +
321
- ");\n"
322
- : names.amd && namedDefine === true
323
- ? " define(" +
324
- libraryName(names.amd) +
325
- ", [], " +
326
- amdFactory +
327
- ");\n"
328
- : " define([], " + amdFactory + ");\n") +
329
- (names.root || names.commonjs
330
- ? getAuxiliaryComment("commonjs") +
331
- " else if(typeof exports === 'object')\n" +
332
- " exports[" +
333
- libraryName(names.commonjs || names.root) +
334
- "] = factory(" +
335
- externalsRequireArray("commonjs") +
336
- ");\n" +
337
- getAuxiliaryComment("root") +
338
- " else\n" +
339
- " " +
340
- replaceKeys(
341
- accessorAccess("root", names.root || names.commonjs)
342
- ) +
343
- " = factory(" +
344
- externalsRootArray(externals) +
345
- ");\n"
346
- : " else {\n" +
347
- (externals.length > 0
348
- ? " var a = typeof exports === 'object' ? factory(" +
349
- externalsRequireArray("commonjs") +
350
- ") : factory(" +
351
- externalsRootArray(externals) +
352
- ");\n"
353
- : " var a = factory();\n") +
354
- " for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n" +
355
- " }\n") +
356
- `})(${runtimeTemplate.outputOptions.globalObject}, ${
290
+ `(function webpackUniversalModuleDefinition(root, factory) {\n${getAuxiliaryComment(
291
+ "commonjs2"
292
+ )} if(typeof exports === 'object' && typeof module === 'object')\n` +
293
+ ` module.exports = factory(${externalsRequireArray(
294
+ "commonjs2"
295
+ )});\n${getAuxiliaryComment(
296
+ "amd"
297
+ )} else if(typeof define === 'function' && define.amd)\n${
298
+ requiredExternals.length > 0
299
+ ? names.amd && namedDefine === true
300
+ ? ` define(${libraryName(names.amd)}, ${externalsDepsArray(
301
+ requiredExternals
302
+ )}, ${amdFactory});\n`
303
+ : ` define(${externalsDepsArray(requiredExternals)}, ${
304
+ amdFactory
305
+ });\n`
306
+ : names.amd && namedDefine === true
307
+ ? ` define(${libraryName(names.amd)}, [], ${amdFactory});\n`
308
+ : ` define([], ${amdFactory});\n`
309
+ }${
310
+ names.root || names.commonjs
311
+ ? `${getAuxiliaryComment(
312
+ "commonjs"
313
+ )} else if(typeof exports === 'object')\n` +
314
+ ` exports[${libraryName(
315
+ names.commonjs || names.root
316
+ )}] = factory(${externalsRequireArray(
317
+ "commonjs"
318
+ )});\n${getAuxiliaryComment("root")} else\n` +
319
+ ` ${replaceKeys(
320
+ accessorAccess("root", names.root || names.commonjs)
321
+ )} = factory(${externalsRootArray(externals)});\n`
322
+ : ` else {\n${
323
+ externals.length > 0
324
+ ? ` var a = typeof exports === 'object' ? factory(${externalsRequireArray(
325
+ "commonjs"
326
+ )}) : factory(${externalsRootArray(externals)});\n`
327
+ : " var a = factory();\n"
328
+ } for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n` +
329
+ " }\n"
330
+ }})(${runtimeTemplate.outputOptions.globalObject}, ${
357
331
  runtimeTemplate.supportsArrowFunction()
358
332
  ? `(${externalsArguments(externals)}) =>`
359
333
  : `function(${externalsArguments(externals)})`
@@ -27,7 +27,7 @@ const LogType = Object.freeze({
27
27
  status: /** @type {"status"} */ ("status") // message, arguments
28
28
  });
29
29
 
30
- exports.LogType = LogType;
30
+ module.exports.LogType = LogType;
31
31
 
32
32
  /** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */
33
33
 
@@ -45,26 +45,45 @@ class WebpackLogger {
45
45
  this.getChildLogger = getChildLogger;
46
46
  }
47
47
 
48
+ /**
49
+ * @param {...any} args args
50
+ */
48
51
  error(...args) {
49
52
  this[LOG_SYMBOL](LogType.error, args);
50
53
  }
51
54
 
55
+ /**
56
+ * @param {...any} args args
57
+ */
52
58
  warn(...args) {
53
59
  this[LOG_SYMBOL](LogType.warn, args);
54
60
  }
55
61
 
62
+ /**
63
+ * @param {...any} args args
64
+ */
56
65
  info(...args) {
57
66
  this[LOG_SYMBOL](LogType.info, args);
58
67
  }
59
68
 
69
+ /**
70
+ * @param {...any} args args
71
+ */
60
72
  log(...args) {
61
73
  this[LOG_SYMBOL](LogType.log, args);
62
74
  }
63
75
 
76
+ /**
77
+ * @param {...any} args args
78
+ */
64
79
  debug(...args) {
65
80
  this[LOG_SYMBOL](LogType.debug, args);
66
81
  }
67
82
 
83
+ /**
84
+ * @param {any} assertion assertion
85
+ * @param {...any} args args
86
+ */
68
87
  assert(assertion, ...args) {
69
88
  if (!assertion) {
70
89
  this[LOG_SYMBOL](LogType.error, args);
@@ -79,20 +98,29 @@ class WebpackLogger {
79
98
  this[LOG_SYMBOL](LogType.clear);
80
99
  }
81
100
 
101
+ /**
102
+ * @param {...any} args args
103
+ */
82
104
  status(...args) {
83
105
  this[LOG_SYMBOL](LogType.status, args);
84
106
  }
85
107
 
108
+ /**
109
+ * @param {...any} args args
110
+ */
86
111
  group(...args) {
87
112
  this[LOG_SYMBOL](LogType.group, args);
88
113
  }
89
114
 
115
+ /**
116
+ * @param {...any} args args
117
+ */
90
118
  groupCollapsed(...args) {
91
119
  this[LOG_SYMBOL](LogType.groupCollapsed, args);
92
120
  }
93
121
 
94
- groupEnd(...args) {
95
- this[LOG_SYMBOL](LogType.groupEnd, args);
122
+ groupEnd() {
123
+ this[LOG_SYMBOL](LogType.groupEnd);
96
124
  }
97
125
 
98
126
  /**
@@ -185,4 +213,4 @@ class WebpackLogger {
185
213
  }
186
214
  }
187
215
 
188
- exports.Logger = WebpackLogger;
216
+ module.exports.Logger = WebpackLogger;
@@ -12,7 +12,7 @@ const { LogType } = require("./Logger");
12
12
  /** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */
13
13
 
14
14
  /** @typedef {function(string): boolean} FilterFunction */
15
- /** @typedef {function(string, LogTypeEnum, any[]): void} LoggingFunction */
15
+ /** @typedef {function(string, LogTypeEnum, any[]=): void} LoggingFunction */
16
16
 
17
17
  /**
18
18
  * @typedef {object} LoggerConsole
@@ -95,7 +95,7 @@ module.exports = ({ level = "info", debug = false, console }) => {
95
95
  /**
96
96
  * @param {string} name name of the logger
97
97
  * @param {LogTypeEnum} type type of the log entry
98
- * @param {any[]} args arguments of the log entry
98
+ * @param {any[]=} args arguments of the log entry
99
99
  * @returns {void}
100
100
  */
101
101
  const logger = (name, type, args) => {
@@ -103,12 +103,10 @@ module.exports = ({ level = "info", debug = false, console }) => {
103
103
  if (Array.isArray(args)) {
104
104
  if (args.length > 0 && typeof args[0] === "string") {
105
105
  return [`[${name}] ${args[0]}`, ...args.slice(1)];
106
- } else {
107
- return [`[${name}]`, ...args];
108
106
  }
109
- } else {
110
- return [];
107
+ return [`[${name}]`, ...args];
111
108
  }
109
+ return [];
112
110
  };
113
111
  const debug = debugFilters.some(f => f(name));
114
112
  switch (type) {
@@ -167,8 +165,11 @@ module.exports = ({ level = "info", debug = false, console }) => {
167
165
  break;
168
166
  case LogType.time: {
169
167
  if (!debug && loglevel > LogLevel.log) return;
170
- const ms = args[1] * 1000 + args[2] / 1000000;
171
- const msg = `[${name}] ${args[0]}: ${ms} ms`;
168
+ const [label, start, end] =
169
+ /** @type {[string, number, number]} */
170
+ (args);
171
+ const ms = start * 1000 + end / 1000000;
172
+ const msg = `[${name}] ${label}: ${ms} ms`;
172
173
  if (typeof console.logTime === "function") {
173
174
  console.logTime(msg);
174
175
  } else {
@@ -195,15 +196,13 @@ module.exports = ({ level = "info", debug = false, console }) => {
195
196
  case LogType.status:
196
197
  if (!debug && loglevel > LogLevel.info) return;
197
198
  if (typeof console.status === "function") {
198
- if (args.length === 0) {
199
+ if (!args || args.length === 0) {
199
200
  console.status();
200
201
  } else {
201
202
  console.status(...labeledArgs());
202
203
  }
203
- } else {
204
- if (args.length !== 0) {
205
- console.info(...labeledArgs());
206
- }
204
+ } else if (args && args.length !== 0) {
205
+ console.info(...labeledArgs());
207
206
  }
208
207
  break;
209
208
  default:
@@ -10,7 +10,7 @@ const { Logger } = require("./Logger");
10
10
  const createConsoleLogger = require("./createConsoleLogger");
11
11
 
12
12
  /** @type {createConsoleLogger.LoggerOptions} */
13
- let currentDefaultLoggerOptions = {
13
+ const currentDefaultLoggerOptions = {
14
14
  level: "info",
15
15
  debug: false,
16
16
  console
@@ -21,26 +21,25 @@ let currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);
21
21
  * @param {string} name name of the logger
22
22
  * @returns {Logger} a logger
23
23
  */
24
- exports.getLogger = name => {
25
- return new Logger(
24
+ module.exports.getLogger = name =>
25
+ new Logger(
26
26
  (type, args) => {
27
- if (exports.hooks.log.call(name, type, args) === undefined) {
27
+ if (module.exports.hooks.log.call(name, type, args) === undefined) {
28
28
  currentDefaultLogger(name, type, args);
29
29
  }
30
30
  },
31
- childName => exports.getLogger(`${name}/${childName}`)
31
+ childName => module.exports.getLogger(`${name}/${childName}`)
32
32
  );
33
- };
34
33
 
35
34
  /**
36
35
  * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options
37
36
  * @returns {void}
38
37
  */
39
- exports.configureDefaultLogger = options => {
38
+ module.exports.configureDefaultLogger = options => {
40
39
  Object.assign(currentDefaultLoggerOptions, options);
41
40
  currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);
42
41
  };
43
42
 
44
- exports.hooks = {
43
+ module.exports.hooks = {
45
44
  log: new SyncBailHook(["origin", "type", "args"])
46
45
  };
@@ -28,17 +28,15 @@ const truncateArgs = (args, maxLength) => {
28
28
  if (availableLength >= args[0].length) {
29
29
  return args;
30
30
  } else if (availableLength > 3) {
31
- return ["..." + args[0].slice(-availableLength + 3)];
32
- } else {
33
- return [args[0].slice(-availableLength)];
31
+ return [`...${args[0].slice(-availableLength + 3)}`];
34
32
  }
33
+ return [args[0].slice(-availableLength)];
35
34
  }
36
35
 
37
36
  // Check if there is space for at least 4 chars per arg
38
37
  if (availableLength < arraySum(lengths.map(i => Math.min(i, 6)))) {
39
38
  // remove args
40
- if (args.length > 1)
41
- return truncateArgs(args.slice(0, args.length - 1), maxLength);
39
+ if (args.length > 1) return truncateArgs(args.slice(0, -1), maxLength);
42
40
  return [];
43
41
  }
44
42
 
@@ -74,12 +72,11 @@ const truncateArgs = (args, maxLength) => {
74
72
  if (str.length === length) {
75
73
  return str;
76
74
  } else if (length > 5) {
77
- return "..." + str.slice(-length + 3);
75
+ return `...${str.slice(-length + 3)}`;
78
76
  } else if (length > 0) {
79
77
  return str.slice(-length);
80
- } else {
81
- return "";
82
78
  }
79
+ return "";
83
80
  });
84
81
  };
85
82