eslint-plugin-jsdoc 52.0.4 → 53.0.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 (359) hide show
  1. package/dist/WarnSettings.cjs +18 -35
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/WarnSettings.js +20 -0
  4. package/dist/WarnSettings.js.map +1 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +32 -0
  6. package/dist/_virtual/rolldown_runtime.js +11 -0
  7. package/dist/alignTransform.cjs +224 -305
  8. package/dist/alignTransform.cjs.map +1 -1
  9. package/dist/alignTransform.js +241 -0
  10. package/dist/alignTransform.js.map +1 -0
  11. package/dist/defaultTagOrder.cjs +132 -43
  12. package/dist/defaultTagOrder.cjs.map +1 -1
  13. package/dist/defaultTagOrder.js +134 -0
  14. package/dist/defaultTagOrder.js.map +1 -0
  15. package/dist/exportParser.cjs +478 -696
  16. package/dist/exportParser.cjs.map +1 -1
  17. package/dist/exportParser.js +518 -0
  18. package/dist/exportParser.js.map +1 -0
  19. package/dist/getDefaultTagStructureForMode.cjs +184 -288
  20. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.js +188 -0
  22. package/dist/getDefaultTagStructureForMode.js.map +1 -0
  23. package/dist/getJsdocProcessorPlugin.cjs +364 -550
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/getJsdocProcessorPlugin.d.cts +70 -0
  26. package/dist/getJsdocProcessorPlugin.d.cts.map +1 -0
  27. package/dist/getJsdocProcessorPlugin.d.ts +68 -65
  28. package/dist/getJsdocProcessorPlugin.d.ts.map +1 -1
  29. package/dist/getJsdocProcessorPlugin.js +383 -0
  30. package/dist/getJsdocProcessorPlugin.js.map +1 -0
  31. package/dist/index.cjs +2 -410
  32. package/dist/index.d.cts +2 -0
  33. package/dist/index.d.ts +2 -17
  34. package/dist/index.js +3 -0
  35. package/dist/iterateJsdoc.cjs +1528 -1988
  36. package/dist/iterateJsdoc.cjs.map +1 -1
  37. package/dist/iterateJsdoc.d.cts +471 -0
  38. package/dist/iterateJsdoc.d.cts.map +1 -0
  39. package/dist/iterateJsdoc.d.ts +358 -349
  40. package/dist/iterateJsdoc.d.ts.map +1 -1
  41. package/dist/iterateJsdoc.js +1617 -0
  42. package/dist/iterateJsdoc.js.map +1 -0
  43. package/dist/jsdocUtils.cjs +1009 -1376
  44. package/dist/jsdocUtils.cjs.map +1 -1
  45. package/dist/jsdocUtils.js +1123 -0
  46. package/dist/jsdocUtils.js.map +1 -0
  47. package/dist/plugin.cjs +427 -0
  48. package/dist/plugin.cjs.map +1 -0
  49. package/dist/plugin.js +427 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/rules/checkAccess.cjs +29 -36
  52. package/dist/rules/checkAccess.cjs.map +1 -1
  53. package/dist/rules/checkAccess.js +33 -0
  54. package/dist/rules/checkAccess.js.map +1 -0
  55. package/dist/rules/checkAlignment.cjs +41 -54
  56. package/dist/rules/checkAlignment.cjs.map +1 -1
  57. package/dist/rules/checkAlignment.js +47 -0
  58. package/dist/rules/checkAlignment.js.map +1 -0
  59. package/dist/rules/checkExamples.cjs +327 -484
  60. package/dist/rules/checkExamples.cjs.map +1 -1
  61. package/dist/rules/checkExamples.js +348 -0
  62. package/dist/rules/checkExamples.js.map +1 -0
  63. package/dist/rules/checkIndentation.cjs +50 -65
  64. package/dist/rules/checkIndentation.cjs.map +1 -1
  65. package/dist/rules/checkIndentation.js +59 -0
  66. package/dist/rules/checkIndentation.js.map +1 -0
  67. package/dist/rules/checkLineAlignment.cjs +220 -311
  68. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  69. package/dist/rules/checkLineAlignment.js +229 -0
  70. package/dist/rules/checkLineAlignment.js.map +1 -0
  71. package/dist/rules/checkParamNames.cjs +227 -335
  72. package/dist/rules/checkParamNames.cjs.map +1 -1
  73. package/dist/rules/checkParamNames.js +237 -0
  74. package/dist/rules/checkParamNames.js.map +1 -0
  75. package/dist/rules/checkPropertyNames.cjs +78 -106
  76. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  77. package/dist/rules/checkPropertyNames.js +88 -0
  78. package/dist/rules/checkPropertyNames.js.map +1 -0
  79. package/dist/rules/checkSyntax.cjs +21 -34
  80. package/dist/rules/checkSyntax.cjs.map +1 -1
  81. package/dist/rules/checkSyntax.js +25 -0
  82. package/dist/rules/checkSyntax.js.map +1 -0
  83. package/dist/rules/checkTagNames.cjs +188 -210
  84. package/dist/rules/checkTagNames.cjs.map +1 -1
  85. package/dist/rules/checkTagNames.js +191 -0
  86. package/dist/rules/checkTagNames.js.map +1 -0
  87. package/dist/rules/checkTemplateNames.cjs +121 -178
  88. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  89. package/dist/rules/checkTemplateNames.js +124 -0
  90. package/dist/rules/checkTemplateNames.js.map +1 -0
  91. package/dist/rules/checkTypes.cjs +291 -385
  92. package/dist/rules/checkTypes.cjs.map +1 -1
  93. package/dist/rules/checkTypes.js +299 -0
  94. package/dist/rules/checkTypes.js.map +1 -0
  95. package/dist/rules/checkValues.cjs +100 -146
  96. package/dist/rules/checkValues.cjs.map +1 -1
  97. package/dist/rules/checkValues.js +103 -0
  98. package/dist/rules/checkValues.js.map +1 -0
  99. package/dist/rules/convertToJsdocComments.cjs +228 -306
  100. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  101. package/dist/rules/convertToJsdocComments.js +231 -0
  102. package/dist/rules/convertToJsdocComments.js.map +1 -0
  103. package/dist/rules/emptyTags.cjs +62 -72
  104. package/dist/rules/emptyTags.cjs.map +1 -1
  105. package/dist/rules/emptyTags.js +67 -0
  106. package/dist/rules/emptyTags.js.map +1 -0
  107. package/dist/rules/implementsOnClasses.cjs +36 -56
  108. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  109. package/dist/rules/implementsOnClasses.js +40 -0
  110. package/dist/rules/implementsOnClasses.js.map +1 -0
  111. package/dist/rules/importsAsDependencies.cjs +62 -99
  112. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  113. package/dist/rules/importsAsDependencies.js +68 -0
  114. package/dist/rules/importsAsDependencies.js.map +1 -0
  115. package/dist/rules/informativeDocs.cjs +105 -142
  116. package/dist/rules/informativeDocs.cjs.map +1 -1
  117. package/dist/rules/informativeDocs.js +110 -0
  118. package/dist/rules/informativeDocs.js.map +1 -0
  119. package/dist/rules/linesBeforeBlock.cjs +70 -105
  120. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  121. package/dist/rules/linesBeforeBlock.js +75 -0
  122. package/dist/rules/linesBeforeBlock.js.map +1 -0
  123. package/dist/rules/matchDescription.cjs +160 -222
  124. package/dist/rules/matchDescription.cjs.map +1 -1
  125. package/dist/rules/matchDescription.js +167 -0
  126. package/dist/rules/matchDescription.js.map +1 -0
  127. package/dist/rules/matchName.cjs +73 -128
  128. package/dist/rules/matchName.cjs.map +1 -1
  129. package/dist/rules/matchName.js +77 -0
  130. package/dist/rules/matchName.js.map +1 -0
  131. package/dist/rules/multilineBlocks.cjs +235 -352
  132. package/dist/rules/multilineBlocks.cjs.map +1 -1
  133. package/dist/rules/multilineBlocks.js +245 -0
  134. package/dist/rules/multilineBlocks.js.map +1 -0
  135. package/dist/rules/noBadBlocks.cjs +63 -86
  136. package/dist/rules/noBadBlocks.cjs.map +1 -1
  137. package/dist/rules/noBadBlocks.js +68 -0
  138. package/dist/rules/noBadBlocks.js.map +1 -0
  139. package/dist/rules/noBlankBlockDescriptions.cjs +35 -57
  140. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  141. package/dist/rules/noBlankBlockDescriptions.js +41 -0
  142. package/dist/rules/noBlankBlockDescriptions.js.map +1 -0
  143. package/dist/rules/noBlankBlocks.cjs +26 -48
  144. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  145. package/dist/rules/noBlankBlocks.js +30 -0
  146. package/dist/rules/noBlankBlocks.js.map +1 -0
  147. package/dist/rules/noDefaults.cjs +52 -79
  148. package/dist/rules/noDefaults.cjs.map +1 -1
  149. package/dist/rules/noDefaults.js +56 -0
  150. package/dist/rules/noDefaults.js.map +1 -0
  151. package/dist/rules/noMissingSyntax.cjs +115 -165
  152. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  153. package/dist/rules/noMissingSyntax.js +126 -0
  154. package/dist/rules/noMissingSyntax.js.map +1 -0
  155. package/dist/rules/noMultiAsterisks.cjs +48 -89
  156. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  157. package/dist/rules/noMultiAsterisks.js +58 -0
  158. package/dist/rules/noMultiAsterisks.js.map +1 -0
  159. package/dist/rules/noRestrictedSyntax.cjs +45 -79
  160. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  161. package/dist/rules/noRestrictedSyntax.js +49 -0
  162. package/dist/rules/noRestrictedSyntax.js.map +1 -0
  163. package/dist/rules/noTypes.cjs +59 -80
  164. package/dist/rules/noTypes.cjs.map +1 -1
  165. package/dist/rules/noTypes.js +65 -0
  166. package/dist/rules/noTypes.js.map +1 -0
  167. package/dist/rules/noUndefinedTypes.cjs +297 -388
  168. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  169. package/dist/rules/noUndefinedTypes.js +303 -0
  170. package/dist/rules/noUndefinedTypes.js.map +1 -0
  171. package/dist/rules/requireAsteriskPrefix.cjs +108 -159
  172. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  173. package/dist/rules/requireAsteriskPrefix.js +112 -0
  174. package/dist/rules/requireAsteriskPrefix.js.map +1 -0
  175. package/dist/rules/requireDescription.cjs +89 -129
  176. package/dist/rules/requireDescription.cjs.map +1 -1
  177. package/dist/rules/requireDescription.js +95 -0
  178. package/dist/rules/requireDescription.js.map +1 -0
  179. package/dist/rules/requireDescriptionCompleteSentence.cjs +201 -262
  180. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  181. package/dist/rules/requireDescriptionCompleteSentence.js +220 -0
  182. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -0
  183. package/dist/rules/requireExample.cjs +73 -104
  184. package/dist/rules/requireExample.cjs.map +1 -1
  185. package/dist/rules/requireExample.js +77 -0
  186. package/dist/rules/requireExample.js.map +1 -0
  187. package/dist/rules/requireFileOverview.cjs +75 -129
  188. package/dist/rules/requireFileOverview.cjs.map +1 -1
  189. package/dist/rules/requireFileOverview.js +81 -0
  190. package/dist/rules/requireFileOverview.js.map +1 -0
  191. package/dist/rules/requireHyphenBeforeParamDescription.cjs +85 -133
  192. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  193. package/dist/rules/requireHyphenBeforeParamDescription.js +89 -0
  194. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -0
  195. package/dist/rules/requireJsdoc.cjs +384 -557
  196. package/dist/rules/requireJsdoc.cjs.map +1 -1
  197. package/dist/rules/requireJsdoc.js +404 -0
  198. package/dist/rules/requireJsdoc.js.map +1 -0
  199. package/dist/rules/requireParam.cjs +336 -526
  200. package/dist/rules/requireParam.cjs.map +1 -1
  201. package/dist/rules/requireParam.js +344 -0
  202. package/dist/rules/requireParam.js.map +1 -0
  203. package/dist/rules/requireParamDescription.cjs +55 -80
  204. package/dist/rules/requireParamDescription.cjs.map +1 -1
  205. package/dist/rules/requireParamDescription.js +59 -0
  206. package/dist/rules/requireParamDescription.js.map +1 -0
  207. package/dist/rules/requireParamName.cjs +32 -50
  208. package/dist/rules/requireParamName.cjs.map +1 -1
  209. package/dist/rules/requireParamName.js +36 -0
  210. package/dist/rules/requireParamName.js.map +1 -0
  211. package/dist/rules/requireParamType.cjs +55 -80
  212. package/dist/rules/requireParamType.cjs.map +1 -1
  213. package/dist/rules/requireParamType.js +59 -0
  214. package/dist/rules/requireParamType.js.map +1 -0
  215. package/dist/rules/requireProperty.cjs +31 -42
  216. package/dist/rules/requireProperty.cjs.map +1 -1
  217. package/dist/rules/requireProperty.js +35 -0
  218. package/dist/rules/requireProperty.js.map +1 -0
  219. package/dist/rules/requirePropertyDescription.cjs +17 -25
  220. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  221. package/dist/rules/requirePropertyDescription.js +21 -0
  222. package/dist/rules/requirePropertyDescription.js.map +1 -0
  223. package/dist/rules/requirePropertyName.cjs +17 -25
  224. package/dist/rules/requirePropertyName.cjs.map +1 -1
  225. package/dist/rules/requirePropertyName.js +21 -0
  226. package/dist/rules/requirePropertyName.js.map +1 -0
  227. package/dist/rules/requirePropertyType.cjs +17 -25
  228. package/dist/rules/requirePropertyType.cjs.map +1 -1
  229. package/dist/rules/requirePropertyType.js +21 -0
  230. package/dist/rules/requirePropertyType.js.map +1 -0
  231. package/dist/rules/requireReturns.cjs +125 -203
  232. package/dist/rules/requireReturns.cjs.map +1 -1
  233. package/dist/rules/requireReturns.js +131 -0
  234. package/dist/rules/requireReturns.js.map +1 -0
  235. package/dist/rules/requireReturnsCheck.cjs +60 -103
  236. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  237. package/dist/rules/requireReturnsCheck.js +66 -0
  238. package/dist/rules/requireReturnsCheck.js.map +1 -0
  239. package/dist/rules/requireReturnsDescription.cjs +39 -54
  240. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  241. package/dist/rules/requireReturnsDescription.js +43 -0
  242. package/dist/rules/requireReturnsDescription.js.map +1 -0
  243. package/dist/rules/requireReturnsType.cjs +32 -50
  244. package/dist/rules/requireReturnsType.cjs.map +1 -1
  245. package/dist/rules/requireReturnsType.js +36 -0
  246. package/dist/rules/requireReturnsType.js.map +1 -0
  247. package/dist/rules/requireTemplate.cjs +119 -178
  248. package/dist/rules/requireTemplate.cjs.map +1 -1
  249. package/dist/rules/requireTemplate.js +122 -0
  250. package/dist/rules/requireTemplate.js.map +1 -0
  251. package/dist/rules/requireThrows.cjs +61 -95
  252. package/dist/rules/requireThrows.cjs.map +1 -1
  253. package/dist/rules/requireThrows.js +67 -0
  254. package/dist/rules/requireThrows.js.map +1 -0
  255. package/dist/rules/requireYields.cjs +106 -166
  256. package/dist/rules/requireYields.cjs.map +1 -1
  257. package/dist/rules/requireYields.js +115 -0
  258. package/dist/rules/requireYields.js.map +1 -0
  259. package/dist/rules/requireYieldsCheck.cjs +96 -152
  260. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  261. package/dist/rules/requireYieldsCheck.js +105 -0
  262. package/dist/rules/requireYieldsCheck.js.map +1 -0
  263. package/dist/rules/sortTags.cjs +258 -444
  264. package/dist/rules/sortTags.cjs.map +1 -1
  265. package/dist/rules/sortTags.js +262 -0
  266. package/dist/rules/sortTags.js.map +1 -0
  267. package/dist/rules/tagLines.cjs +179 -266
  268. package/dist/rules/tagLines.cjs.map +1 -1
  269. package/dist/rules/tagLines.js +183 -0
  270. package/dist/rules/tagLines.js.map +1 -0
  271. package/dist/rules/textEscaping.cjs +92 -127
  272. package/dist/rules/textEscaping.cjs.map +1 -1
  273. package/dist/rules/textEscaping.js +102 -0
  274. package/dist/rules/textEscaping.js.map +1 -0
  275. package/dist/rules/validTypes.cjs +252 -265
  276. package/dist/rules/validTypes.cjs.map +1 -1
  277. package/dist/rules/validTypes.js +259 -0
  278. package/dist/rules/validTypes.js.map +1 -0
  279. package/dist/tagNames.cjs +134 -170
  280. package/dist/tagNames.cjs.map +1 -1
  281. package/dist/tagNames.js +144 -0
  282. package/dist/tagNames.js.map +1 -0
  283. package/dist/utils/hasReturnValue.cjs +246 -474
  284. package/dist/utils/hasReturnValue.cjs.map +1 -1
  285. package/dist/utils/hasReturnValue.js +265 -0
  286. package/dist/utils/hasReturnValue.js.map +1 -0
  287. package/package.json +40 -24
  288. package/dist/generateRule.cjs +0 -242
  289. package/dist/generateRule.cjs.map +0 -1
  290. package/dist/index.cjs.map +0 -1
  291. package/dist/index.d.ts.map +0 -1
  292. package/src/WarnSettings.js +0 -34
  293. package/src/alignTransform.js +0 -358
  294. package/src/defaultTagOrder.js +0 -169
  295. package/src/exportParser.js +0 -978
  296. package/src/getDefaultTagStructureForMode.js +0 -969
  297. package/src/getJsdocProcessorPlugin.js +0 -672
  298. package/src/index.js +0 -530
  299. package/src/iterateJsdoc.js +0 -2518
  300. package/src/jsdocUtils.js +0 -1896
  301. package/src/rules/checkAccess.js +0 -45
  302. package/src/rules/checkAlignment.js +0 -63
  303. package/src/rules/checkExamples.js +0 -589
  304. package/src/rules/checkIndentation.js +0 -75
  305. package/src/rules/checkLineAlignment.js +0 -372
  306. package/src/rules/checkParamNames.js +0 -474
  307. package/src/rules/checkPropertyNames.js +0 -152
  308. package/src/rules/checkSyntax.js +0 -30
  309. package/src/rules/checkTagNames.js +0 -314
  310. package/src/rules/checkTemplateNames.js +0 -204
  311. package/src/rules/checkTypes.js +0 -535
  312. package/src/rules/checkValues.js +0 -248
  313. package/src/rules/convertToJsdocComments.js +0 -398
  314. package/src/rules/emptyTags.js +0 -98
  315. package/src/rules/implementsOnClasses.js +0 -64
  316. package/src/rules/importsAsDependencies.js +0 -133
  317. package/src/rules/informativeDocs.js +0 -189
  318. package/src/rules/linesBeforeBlock.js +0 -134
  319. package/src/rules/matchDescription.js +0 -286
  320. package/src/rules/matchName.js +0 -151
  321. package/src/rules/multilineBlocks.js +0 -493
  322. package/src/rules/noBadBlocks.js +0 -119
  323. package/src/rules/noBlankBlockDescriptions.js +0 -69
  324. package/src/rules/noBlankBlocks.js +0 -53
  325. package/src/rules/noDefaults.js +0 -85
  326. package/src/rules/noMissingSyntax.js +0 -195
  327. package/src/rules/noMultiAsterisks.js +0 -134
  328. package/src/rules/noRestrictedSyntax.js +0 -91
  329. package/src/rules/noTypes.js +0 -93
  330. package/src/rules/noUndefinedTypes.js +0 -543
  331. package/src/rules/requireAsteriskPrefix.js +0 -190
  332. package/src/rules/requireDescription.js +0 -161
  333. package/src/rules/requireDescriptionCompleteSentence.js +0 -335
  334. package/src/rules/requireExample.js +0 -118
  335. package/src/rules/requireFileOverview.js +0 -154
  336. package/src/rules/requireHyphenBeforeParamDescription.js +0 -176
  337. package/src/rules/requireJsdoc.js +0 -743
  338. package/src/rules/requireParam.js +0 -602
  339. package/src/rules/requireParamDescription.js +0 -89
  340. package/src/rules/requireParamName.js +0 -55
  341. package/src/rules/requireParamType.js +0 -89
  342. package/src/rules/requireProperty.js +0 -48
  343. package/src/rules/requirePropertyDescription.js +0 -25
  344. package/src/rules/requirePropertyName.js +0 -25
  345. package/src/rules/requirePropertyType.js +0 -25
  346. package/src/rules/requireReturns.js +0 -238
  347. package/src/rules/requireReturnsCheck.js +0 -145
  348. package/src/rules/requireReturnsDescription.js +0 -59
  349. package/src/rules/requireReturnsType.js +0 -51
  350. package/src/rules/requireTemplate.js +0 -201
  351. package/src/rules/requireThrows.js +0 -111
  352. package/src/rules/requireYields.js +0 -216
  353. package/src/rules/requireYieldsCheck.js +0 -208
  354. package/src/rules/sortTags.js +0 -558
  355. package/src/rules/tagLines.js +0 -359
  356. package/src/rules/textEscaping.js +0 -154
  357. package/src/rules/validTypes.js +0 -401
  358. package/src/tagNames.js +0 -238
  359. package/src/utils/hasReturnValue.js +0 -572
@@ -1,229 +1,167 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- // If supporting Node >= 10, we could loosen the default to this for the
10
- // initial letter: \\p{Upper}
11
- const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$';
1
+ const require_iterateJsdoc = require('../iterateJsdoc.cjs');
12
2
 
3
+ //#region src/rules/matchDescription.js
4
+ const matchDescriptionDefault = "^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$";
13
5
  /**
14
- * @param {string} value
15
- * @param {string} userDefault
16
- * @returns {string}
17
- */
6
+ * @param {string} value
7
+ * @param {string} userDefault
8
+ * @returns {string}
9
+ */
18
10
  const stringOrDefault = (value, userDefault) => {
19
- return typeof value === 'string' ? value : userDefault || matchDescriptionDefault;
11
+ return typeof value === "string" ? value : userDefault || matchDescriptionDefault;
20
12
  };
21
- var _default = exports.default = (0, _iterateJsdoc.default)(({
22
- context,
23
- jsdoc,
24
- report,
25
- utils
26
- }) => {
27
- const {
28
- mainDescription,
29
- matchDescription,
30
- message,
31
- nonemptyTags = true,
32
- tags = {}
33
- } = context.options[0] || {};
34
-
35
- /**
36
- * @param {string} desc
37
- * @param {import('comment-parser').Spec} [tag]
38
- * @returns {void}
39
- */
40
- const validateDescription = (desc, tag) => {
41
- let mainDescriptionMatch = mainDescription;
42
- let errorMessage = message;
43
- if (typeof mainDescription === 'object') {
44
- mainDescriptionMatch = mainDescription.match;
45
- errorMessage = mainDescription.message;
46
- }
47
- if (mainDescriptionMatch === false && (!tag || !Object.hasOwn(tags, tag.tag))) {
48
- return;
49
- }
50
- let tagValue = mainDescriptionMatch;
51
- if (tag) {
52
- const tagName = tag.tag;
53
- if (typeof tags[tagName] === 'object') {
54
- tagValue = tags[tagName].match;
55
- errorMessage = tags[tagName].message;
56
- } else {
57
- tagValue = tags[tagName];
58
- }
59
- }
60
- const regex = utils.getRegexFromString(stringOrDefault(tagValue, matchDescription));
61
- if (!regex.test(desc)) {
62
- report(errorMessage || 'JSDoc description does not satisfy the regex pattern.', null, tag || {
63
- // Add one as description would typically be into block
64
- line: jsdoc.source[0].number + 1
65
- });
66
- }
67
- };
68
- const {
69
- description
70
- } = utils.getDescription();
71
- if (description) {
72
- validateDescription(description);
73
- }
74
-
75
- /**
76
- * @param {string} tagName
77
- * @returns {boolean}
78
- */
79
- const hasNoTag = tagName => {
80
- return !tags[tagName];
81
- };
82
- for (const tag of ['description', 'summary', 'file', 'classdesc']) {
83
- utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
84
- const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
85
- if (hasNoTag(targetTagName)) {
86
- validateDescription(desc, matchingJsdocTag);
87
- }
88
- }, true);
89
- }
90
- if (nonemptyTags) {
91
- for (const tag of ['copyright', 'example', 'see', 'todo']) {
92
- utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
93
- const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
94
- if (hasNoTag(targetTagName) && !/.+/v.test(desc)) {
95
- report('JSDoc description must not be empty.', null, matchingJsdocTag);
96
- }
97
- });
98
- }
99
- }
100
- if (!Object.keys(tags).length) {
101
- return;
102
- }
103
-
104
- /**
105
- * @param {string} tagName
106
- * @returns {boolean}
107
- */
108
- const hasOptionTag = tagName => {
109
- return Boolean(tags[tagName]);
110
- };
111
- const whitelistedTags = utils.filterTags(({
112
- tag: tagName
113
- }) => {
114
- return hasOptionTag(tagName);
115
- });
116
- const {
117
- tagsWithNames,
118
- tagsWithoutNames
119
- } = utils.getTagsByType(whitelistedTags);
120
- tagsWithNames.some(tag => {
121
- const desc = /** @type {string} */utils.getTagDescription(tag).replace(/^[\- ]*/v, '').trim();
122
- return validateDescription(desc, tag);
123
- });
124
- tagsWithoutNames.some(tag => {
125
- const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();
126
- return validateDescription(desc, tag);
127
- });
13
+ var matchDescription_default = require_iterateJsdoc.default(({ context, jsdoc, report, utils }) => {
14
+ const { mainDescription, matchDescription, message, nonemptyTags = true, tags = {} } = context.options[0] || {};
15
+ /**
16
+ * @param {string} desc
17
+ * @param {import('comment-parser').Spec} [tag]
18
+ * @returns {void}
19
+ */
20
+ const validateDescription = (desc, tag) => {
21
+ let mainDescriptionMatch = mainDescription;
22
+ let errorMessage = message;
23
+ if (typeof mainDescription === "object") {
24
+ mainDescriptionMatch = mainDescription.match;
25
+ errorMessage = mainDescription.message;
26
+ }
27
+ if (mainDescriptionMatch === false && (!tag || !Object.hasOwn(tags, tag.tag))) return;
28
+ let tagValue = mainDescriptionMatch;
29
+ if (tag) {
30
+ const tagName = tag.tag;
31
+ if (typeof tags[tagName] === "object") {
32
+ tagValue = tags[tagName].match;
33
+ errorMessage = tags[tagName].message;
34
+ } else tagValue = tags[tagName];
35
+ }
36
+ const regex = utils.getRegexFromString(stringOrDefault(tagValue, matchDescription));
37
+ if (!regex.test(desc)) report(errorMessage || "JSDoc description does not satisfy the regex pattern.", null, tag || { line: jsdoc.source[0].number + 1 });
38
+ };
39
+ const { description } = utils.getDescription();
40
+ if (description) validateDescription(description);
41
+ /**
42
+ * @param {string} tagName
43
+ * @returns {boolean}
44
+ */
45
+ const hasNoTag = (tagName) => {
46
+ return !tags[tagName];
47
+ };
48
+ for (const tag of [
49
+ "description",
50
+ "summary",
51
+ "file",
52
+ "classdesc"
53
+ ]) utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
54
+ const desc = (matchingJsdocTag.name + " " + utils.getTagDescription(matchingJsdocTag)).trim();
55
+ if (hasNoTag(targetTagName)) validateDescription(desc, matchingJsdocTag);
56
+ }, true);
57
+ if (nonemptyTags) for (const tag of [
58
+ "copyright",
59
+ "example",
60
+ "see",
61
+ "todo"
62
+ ]) utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
63
+ const desc = (matchingJsdocTag.name + " " + utils.getTagDescription(matchingJsdocTag)).trim();
64
+ if (hasNoTag(targetTagName) && !/.+/v.test(desc)) report("JSDoc description must not be empty.", null, matchingJsdocTag);
65
+ });
66
+ if (!Object.keys(tags).length) return;
67
+ /**
68
+ * @param {string} tagName
69
+ * @returns {boolean}
70
+ */
71
+ const hasOptionTag = (tagName) => {
72
+ return Boolean(tags[tagName]);
73
+ };
74
+ const whitelistedTags = utils.filterTags(({ tag: tagName }) => {
75
+ return hasOptionTag(tagName);
76
+ });
77
+ const { tagsWithNames, tagsWithoutNames } = utils.getTagsByType(whitelistedTags);
78
+ tagsWithNames.some((tag) => {
79
+ const desc = utils.getTagDescription(tag).replace(/^[\- ]*/v, "").trim();
80
+ return validateDescription(desc, tag);
81
+ });
82
+ tagsWithoutNames.some((tag) => {
83
+ const desc = (tag.name + " " + utils.getTagDescription(tag)).trim();
84
+ return validateDescription(desc, tag);
85
+ });
128
86
  }, {
129
- contextDefaults: true,
130
- meta: {
131
- docs: {
132
- description: 'Enforces a regular expression pattern on descriptions.',
133
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header'
134
- },
135
- schema: [{
136
- additionalProperties: false,
137
- properties: {
138
- contexts: {
139
- items: {
140
- anyOf: [{
141
- type: 'string'
142
- }, {
143
- additionalProperties: false,
144
- properties: {
145
- comment: {
146
- type: 'string'
147
- },
148
- context: {
149
- type: 'string'
150
- }
151
- },
152
- type: 'object'
153
- }]
154
- },
155
- type: 'array'
156
- },
157
- mainDescription: {
158
- oneOf: [{
159
- format: 'regex',
160
- type: 'string'
161
- }, {
162
- type: 'boolean'
163
- }, {
164
- additionalProperties: false,
165
- properties: {
166
- match: {
167
- oneOf: [{
168
- format: 'regex',
169
- type: 'string'
170
- }, {
171
- type: 'boolean'
172
- }]
173
- },
174
- message: {
175
- type: 'string'
176
- }
177
- },
178
- type: 'object'
179
- }]
180
- },
181
- matchDescription: {
182
- format: 'regex',
183
- type: 'string'
184
- },
185
- message: {
186
- type: 'string'
187
- },
188
- nonemptyTags: {
189
- type: 'boolean'
190
- },
191
- tags: {
192
- patternProperties: {
193
- '.*': {
194
- oneOf: [{
195
- format: 'regex',
196
- type: 'string'
197
- }, {
198
- enum: [true],
199
- type: 'boolean'
200
- }, {
201
- additionalProperties: false,
202
- properties: {
203
- match: {
204
- oneOf: [{
205
- format: 'regex',
206
- type: 'string'
207
- }, {
208
- enum: [true],
209
- type: 'boolean'
210
- }]
211
- },
212
- message: {
213
- type: 'string'
214
- }
215
- },
216
- type: 'object'
217
- }]
218
- }
219
- },
220
- type: 'object'
221
- }
222
- },
223
- type: 'object'
224
- }],
225
- type: 'suggestion'
226
- }
87
+ contextDefaults: true,
88
+ meta: {
89
+ docs: {
90
+ description: "Enforces a regular expression pattern on descriptions.",
91
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header"
92
+ },
93
+ schema: [{
94
+ additionalProperties: false,
95
+ properties: {
96
+ contexts: {
97
+ items: { anyOf: [{ type: "string" }, {
98
+ additionalProperties: false,
99
+ properties: {
100
+ comment: { type: "string" },
101
+ context: { type: "string" }
102
+ },
103
+ type: "object"
104
+ }] },
105
+ type: "array"
106
+ },
107
+ mainDescription: { oneOf: [
108
+ {
109
+ format: "regex",
110
+ type: "string"
111
+ },
112
+ { type: "boolean" },
113
+ {
114
+ additionalProperties: false,
115
+ properties: {
116
+ match: { oneOf: [{
117
+ format: "regex",
118
+ type: "string"
119
+ }, { type: "boolean" }] },
120
+ message: { type: "string" }
121
+ },
122
+ type: "object"
123
+ }
124
+ ] },
125
+ matchDescription: {
126
+ format: "regex",
127
+ type: "string"
128
+ },
129
+ message: { type: "string" },
130
+ nonemptyTags: { type: "boolean" },
131
+ tags: {
132
+ patternProperties: { ".*": { oneOf: [
133
+ {
134
+ format: "regex",
135
+ type: "string"
136
+ },
137
+ {
138
+ enum: [true],
139
+ type: "boolean"
140
+ },
141
+ {
142
+ additionalProperties: false,
143
+ properties: {
144
+ match: { oneOf: [{
145
+ format: "regex",
146
+ type: "string"
147
+ }, {
148
+ enum: [true],
149
+ type: "boolean"
150
+ }] },
151
+ message: { type: "string" }
152
+ },
153
+ type: "object"
154
+ }
155
+ ] } },
156
+ type: "object"
157
+ }
158
+ },
159
+ type: "object"
160
+ }],
161
+ type: "suggestion"
162
+ }
227
163
  });
228
- module.exports = exports.default;
164
+
165
+ //#endregion
166
+ exports.default = matchDescription_default;
229
167
  //# sourceMappingURL=matchDescription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","matchDescriptionDefault","stringOrDefault","value","userDefault","_default","exports","iterateJsdoc","context","jsdoc","report","utils","mainDescription","matchDescription","message","nonemptyTags","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","hasOwn","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","hasNoTag","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","keys","length","hasOptionTag","Boolean","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum","module"],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`\\\\p{RGI_Emoji}]\\\\s*)?$';\n\n/**\n * @param {string} value\n * @param {string} userDefault\n * @returns {string}\n */\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n nonemptyTags = true,\n tags = {},\n } = context.options[0] || {};\n\n /**\n * @param {string} desc\n * @param {import('comment-parser').Spec} [tag]\n * @returns {void}\n */\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.hasOwn(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasNoTag = (tagName) => {\n return !tags[tagName];\n };\n\n for (const tag of [\n 'description',\n 'summary',\n 'file',\n 'classdesc',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasNoTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n }\n\n if (nonemptyTags) {\n for (const tag of [\n 'copyright',\n 'example',\n 'see',\n 'todo',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n\n if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {\n report(\n 'JSDoc description must not be empty.',\n null,\n matchingJsdocTag,\n );\n }\n });\n }\n }\n\n if (!Object.keys(tags).length) {\n return;\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^[\\- ]*/v, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n nonemptyTags: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C;AACA;AACA,MAAMG,uBAAuB,GAAG,qDAAqD;;AAErF;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAGA,CAACC,KAAK,EAAEC,WAAW,KAAK;EAC9C,OAAO,OAAOD,KAAK,KAAK,QAAQ,GAC9BA,KAAK,GACLC,WAAW,IAAIH,uBAAuB;AAC1C,CAAC;AAAC,IAAAI,QAAA,GAAAC,OAAA,CAAAN,OAAA,GAEa,IAAAO,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,eAAe;IACfC,gBAAgB;IAChBC,OAAO;IACPC,YAAY,GAAG,IAAI;IACnBC,IAAI,GAAG,CAAC;EACV,CAAC,GAAGR,OAAO,CAACS,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;AACF;AACA;AACA;AACA;EACE,MAAMC,mBAAmB,GAAGA,CAACC,IAAI,EAAEC,GAAG,KAAK;IACzC,IAAIC,oBAAoB,GAAGT,eAAe;IAC1C,IAAIU,YAAY,GAAGR,OAAO;IAC1B,IAAI,OAAOF,eAAe,KAAK,QAAQ,EAAE;MACvCS,oBAAoB,GAAGT,eAAe,CAACW,KAAK;MAC5CD,YAAY,GAAGV,eAAe,CAACE,OAAO;IACxC;IAEA,IAAIO,oBAAoB,KAAK,KAAK,KAChC,CAACD,GAAG,IAAI,CAACI,MAAM,CAACC,MAAM,CAACT,IAAI,EAAEI,GAAG,CAACA,GAAG,CAAC,CAAC,EACtC;MACA;IACF;IAEA,IAAIM,QAAQ,GAAGL,oBAAoB;IACnC,IAAID,GAAG,EAAE;MACP,MAAMO,OAAO,GAAGP,GAAG,CAACA,GAAG;MACvB,IAAI,OAAOJ,IAAI,CAACW,OAAO,CAAC,KAAK,QAAQ,EAAE;QACrCD,QAAQ,GAAGV,IAAI,CAACW,OAAO,CAAC,CAACJ,KAAK;QAC9BD,YAAY,GAAGN,IAAI,CAACW,OAAO,CAAC,CAACb,OAAO;MACtC,CAAC,MAAM;QACLY,QAAQ,GAAGV,IAAI,CAACW,OAAO,CAAC;MAC1B;IACF;IAEA,MAAMC,KAAK,GAAGjB,KAAK,CAACkB,kBAAkB,CACpC3B,eAAe,CAACwB,QAAQ,EAAEb,gBAAgB,CAC5C,CAAC;IAED,IAAI,CAACe,KAAK,CAACE,IAAI,CAACX,IAAI,CAAC,EAAE;MACrBT,MAAM,CACJY,YAAY,IAAI,uDAAuD,EACvE,IAAI,EACJF,GAAG,IAAI;QACL;QACAW,IAAI,EAAEtB,KAAK,CAACuB,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,GAAG;MACjC,CACF,CAAC;IACH;EACF,CAAC;EAED,MAAM;IACJC;EACF,CAAC,GAAGvB,KAAK,CAACwB,cAAc,CAAC,CAAC;EAC1B,IAAID,WAAW,EAAE;IACfhB,mBAAmB,CAACgB,WAAW,CAAC;EAClC;;EAEA;AACF;AACA;AACA;EACE,MAAME,QAAQ,GAAIT,OAAO,IAAK;IAC5B,OAAO,CAACX,IAAI,CAACW,OAAO,CAAC;EACvB,CAAC;EAED,KAAK,MAAMP,GAAG,IAAI,CAChB,aAAa,EACb,SAAS,EACT,MAAM,EACN,WAAW,CACZ,EAAE;IACDT,KAAK,CAAC0B,mBAAmB,CAACjB,GAAG,EAAE,CAACkB,gBAAgB,EAAEC,aAAa,KAAK;MAClE,MAAMpB,IAAI,GAAG,CAACmB,gBAAgB,CAACE,IAAI,GAAG,GAAG,GAAG7B,KAAK,CAAC8B,iBAAiB,CAACH,gBAAgB,CAAC,EAAEI,IAAI,CAAC,CAAC;MAC7F,IAAIN,QAAQ,CAACG,aAAa,CAAC,EAAE;QAC3BrB,mBAAmB,CAACC,IAAI,EAAEmB,gBAAgB,CAAC;MAC7C;IACF,CAAC,EAAE,IAAI,CAAC;EACV;EAEA,IAAIvB,YAAY,EAAE;IAChB,KAAK,MAAMK,GAAG,IAAI,CAChB,WAAW,EACX,SAAS,EACT,KAAK,EACL,MAAM,CACP,EAAE;MACDT,KAAK,CAAC0B,mBAAmB,CAACjB,GAAG,EAAE,CAACkB,gBAAgB,EAAEC,aAAa,KAAK;QAClE,MAAMpB,IAAI,GAAG,CAACmB,gBAAgB,CAACE,IAAI,GAAG,GAAG,GAAG7B,KAAK,CAAC8B,iBAAiB,CAACH,gBAAgB,CAAC,EAAEI,IAAI,CAAC,CAAC;QAE7F,IAAIN,QAAQ,CAACG,aAAa,CAAC,IAAI,CAAE,KAAK,CAAET,IAAI,CAACX,IAAI,CAAC,EAAE;UAClDT,MAAM,CACJ,sCAAsC,EACtC,IAAI,EACJ4B,gBACF,CAAC;QACH;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IAAI,CAACd,MAAM,CAACmB,IAAI,CAAC3B,IAAI,CAAC,CAAC4B,MAAM,EAAE;IAC7B;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAMC,YAAY,GAAIlB,OAAO,IAAK;IAChC,OAAOmB,OAAO,CAAC9B,IAAI,CAACW,OAAO,CAAC,CAAC;EAC/B,CAAC;EAED,MAAMoB,eAAe,GAAGpC,KAAK,CAACqC,UAAU,CAAC,CAAC;IACxC5B,GAAG,EAAEO;EACP,CAAC,KAAK;IACJ,OAAOkB,YAAY,CAAClB,OAAO,CAAC;EAC9B,CAAC,CAAC;EACF,MAAM;IACJsB,aAAa;IACbC;EACF,CAAC,GAAGvC,KAAK,CAACwC,aAAa,CAACJ,eAAe,CAAC;EAExCE,aAAa,CAACG,IAAI,CAAEhC,GAAG,IAAK;IAC1B,MAAMD,IAAI,GAAG,qBACXR,KAAK,CAAC8B,iBAAiB,CAACrB,GAAG,CAAC,CAC5BiC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACtBX,IAAI,CAAC,CAAC;IAET,OAAOxB,mBAAmB,CAACC,IAAI,EAAEC,GAAG,CAAC;EACvC,CAAC,CAAC;EAEF8B,gBAAgB,CAACE,IAAI,CAAEhC,GAAG,IAAK;IAC7B,MAAMD,IAAI,GAAG,CAACC,GAAG,CAACoB,IAAI,GAAG,GAAG,GAAG7B,KAAK,CAAC8B,iBAAiB,CAACrB,GAAG,CAAC,EAAEsB,IAAI,CAAC,CAAC;IAEnE,OAAOxB,mBAAmB,CAACC,IAAI,EAAEC,GAAG,CAAC;EACvC,CAAC,CAAC;AACJ,CAAC,EAAE;EACDkC,eAAe,EAAE,IAAI;EACrBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJtB,WAAW,EAAE,wDAAwD;MACrEuB,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVC,QAAQ,EAAE;UACRC,KAAK,EAAE;YACLC,KAAK,EAAE,CACL;cACEC,IAAI,EAAE;YACR,CAAC,EACD;cACEL,oBAAoB,EAAE,KAAK;cAC3BC,UAAU,EAAE;gBACVK,OAAO,EAAE;kBACPD,IAAI,EAAE;gBACR,CAAC;gBACDxD,OAAO,EAAE;kBACPwD,IAAI,EAAE;gBACR;cACF,CAAC;cACDA,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDpD,eAAe,EAAE;UACfsD,KAAK,EAAE,CACL;YACEC,MAAM,EAAE,OAAO;YACfH,IAAI,EAAE;UACR,CAAC,EACD;YACEA,IAAI,EAAE;UACR,CAAC,EACD;YACEL,oBAAoB,EAAE,KAAK;YAC3BC,UAAU,EAAE;cACVrC,KAAK,EAAE;gBACL2C,KAAK,EAAE,CACL;kBACEC,MAAM,EAAE,OAAO;kBACfH,IAAI,EAAE;gBACR,CAAC,EACD;kBACEA,IAAI,EAAE;gBACR,CAAC;cAEL,CAAC;cACDlD,OAAO,EAAE;gBACPkD,IAAI,EAAE;cACR;YACF,CAAC;YACDA,IAAI,EAAE;UACR,CAAC;QAEL,CAAC;QACDnD,gBAAgB,EAAE;UAChBsD,MAAM,EAAE,OAAO;UACfH,IAAI,EAAE;QACR,CAAC;QACDlD,OAAO,EAAE;UACPkD,IAAI,EAAE;QACR,CAAC;QACDjD,YAAY,EAAE;UACZiD,IAAI,EAAE;QACR,CAAC;QACDhD,IAAI,EAAE;UACJoD,iBAAiB,EAAE;YACjB,IAAI,EAAE;cACJF,KAAK,EAAE,CACL;gBACEC,MAAM,EAAE,OAAO;gBACfH,IAAI,EAAE;cACR,CAAC,EACD;gBACEK,IAAI,EAAE,CACJ,IAAI,CACL;gBACDL,IAAI,EAAE;cACR,CAAC,EACD;gBACEL,oBAAoB,EAAE,KAAK;gBAC3BC,UAAU,EAAE;kBACVrC,KAAK,EAAE;oBACL2C,KAAK,EAAE,CACL;sBACEC,MAAM,EAAE,OAAO;sBACfH,IAAI,EAAE;oBACR,CAAC,EACD;sBACEK,IAAI,EAAE,CACJ,IAAI,CACL;sBACDL,IAAI,EAAE;oBACR,CAAC;kBAEL,CAAC;kBACDlD,OAAO,EAAE;oBACPkD,IAAI,EAAE;kBACR;gBACF,CAAC;gBACDA,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAM,MAAA,CAAAhE,OAAA,GAAAA,OAAA,CAAAN,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"matchDescription.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`\\\\p{RGI_Emoji}]\\\\s*)?$';\n\n/**\n * @param {string} value\n * @param {string} userDefault\n * @returns {string}\n */\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n nonemptyTags = true,\n tags = {},\n } = context.options[0] || {};\n\n /**\n * @param {string} desc\n * @param {import('comment-parser').Spec} [tag]\n * @returns {void}\n */\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.hasOwn(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasNoTag = (tagName) => {\n return !tags[tagName];\n };\n\n for (const tag of [\n 'description',\n 'summary',\n 'file',\n 'classdesc',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasNoTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n }\n\n if (nonemptyTags) {\n for (const tag of [\n 'copyright',\n 'example',\n 'see',\n 'todo',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n\n if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {\n report(\n 'JSDoc description must not be empty.',\n null,\n matchingJsdocTag,\n );\n }\n });\n }\n }\n\n if (!Object.keys(tags).length) {\n return;\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^[\\- ]*/v, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n nonemptyTags: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import iterateJsdoc from "../iterateJsdoc.js";
2
+
3
+ //#region src/rules/matchDescription.js
4
+ const matchDescriptionDefault = "^\n?([A-Z`\\d_][\\s\\S]*[.?!`\\p{RGI_Emoji}]\\s*)?$";
5
+ /**
6
+ * @param {string} value
7
+ * @param {string} userDefault
8
+ * @returns {string}
9
+ */
10
+ const stringOrDefault = (value, userDefault) => {
11
+ return typeof value === "string" ? value : userDefault || matchDescriptionDefault;
12
+ };
13
+ var matchDescription_default = iterateJsdoc(({ context, jsdoc, report, utils }) => {
14
+ const { mainDescription, matchDescription, message, nonemptyTags = true, tags = {} } = context.options[0] || {};
15
+ /**
16
+ * @param {string} desc
17
+ * @param {import('comment-parser').Spec} [tag]
18
+ * @returns {void}
19
+ */
20
+ const validateDescription = (desc, tag) => {
21
+ let mainDescriptionMatch = mainDescription;
22
+ let errorMessage = message;
23
+ if (typeof mainDescription === "object") {
24
+ mainDescriptionMatch = mainDescription.match;
25
+ errorMessage = mainDescription.message;
26
+ }
27
+ if (mainDescriptionMatch === false && (!tag || !Object.hasOwn(tags, tag.tag))) return;
28
+ let tagValue = mainDescriptionMatch;
29
+ if (tag) {
30
+ const tagName = tag.tag;
31
+ if (typeof tags[tagName] === "object") {
32
+ tagValue = tags[tagName].match;
33
+ errorMessage = tags[tagName].message;
34
+ } else tagValue = tags[tagName];
35
+ }
36
+ const regex = utils.getRegexFromString(stringOrDefault(tagValue, matchDescription));
37
+ if (!regex.test(desc)) report(errorMessage || "JSDoc description does not satisfy the regex pattern.", null, tag || { line: jsdoc.source[0].number + 1 });
38
+ };
39
+ const { description } = utils.getDescription();
40
+ if (description) validateDescription(description);
41
+ /**
42
+ * @param {string} tagName
43
+ * @returns {boolean}
44
+ */
45
+ const hasNoTag = (tagName) => {
46
+ return !tags[tagName];
47
+ };
48
+ for (const tag of [
49
+ "description",
50
+ "summary",
51
+ "file",
52
+ "classdesc"
53
+ ]) utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
54
+ const desc = (matchingJsdocTag.name + " " + utils.getTagDescription(matchingJsdocTag)).trim();
55
+ if (hasNoTag(targetTagName)) validateDescription(desc, matchingJsdocTag);
56
+ }, true);
57
+ if (nonemptyTags) for (const tag of [
58
+ "copyright",
59
+ "example",
60
+ "see",
61
+ "todo"
62
+ ]) utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {
63
+ const desc = (matchingJsdocTag.name + " " + utils.getTagDescription(matchingJsdocTag)).trim();
64
+ if (hasNoTag(targetTagName) && !/.+/v.test(desc)) report("JSDoc description must not be empty.", null, matchingJsdocTag);
65
+ });
66
+ if (!Object.keys(tags).length) return;
67
+ /**
68
+ * @param {string} tagName
69
+ * @returns {boolean}
70
+ */
71
+ const hasOptionTag = (tagName) => {
72
+ return Boolean(tags[tagName]);
73
+ };
74
+ const whitelistedTags = utils.filterTags(({ tag: tagName }) => {
75
+ return hasOptionTag(tagName);
76
+ });
77
+ const { tagsWithNames, tagsWithoutNames } = utils.getTagsByType(whitelistedTags);
78
+ tagsWithNames.some((tag) => {
79
+ const desc = utils.getTagDescription(tag).replace(/^[\- ]*/v, "").trim();
80
+ return validateDescription(desc, tag);
81
+ });
82
+ tagsWithoutNames.some((tag) => {
83
+ const desc = (tag.name + " " + utils.getTagDescription(tag)).trim();
84
+ return validateDescription(desc, tag);
85
+ });
86
+ }, {
87
+ contextDefaults: true,
88
+ meta: {
89
+ docs: {
90
+ description: "Enforces a regular expression pattern on descriptions.",
91
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header"
92
+ },
93
+ schema: [{
94
+ additionalProperties: false,
95
+ properties: {
96
+ contexts: {
97
+ items: { anyOf: [{ type: "string" }, {
98
+ additionalProperties: false,
99
+ properties: {
100
+ comment: { type: "string" },
101
+ context: { type: "string" }
102
+ },
103
+ type: "object"
104
+ }] },
105
+ type: "array"
106
+ },
107
+ mainDescription: { oneOf: [
108
+ {
109
+ format: "regex",
110
+ type: "string"
111
+ },
112
+ { type: "boolean" },
113
+ {
114
+ additionalProperties: false,
115
+ properties: {
116
+ match: { oneOf: [{
117
+ format: "regex",
118
+ type: "string"
119
+ }, { type: "boolean" }] },
120
+ message: { type: "string" }
121
+ },
122
+ type: "object"
123
+ }
124
+ ] },
125
+ matchDescription: {
126
+ format: "regex",
127
+ type: "string"
128
+ },
129
+ message: { type: "string" },
130
+ nonemptyTags: { type: "boolean" },
131
+ tags: {
132
+ patternProperties: { ".*": { oneOf: [
133
+ {
134
+ format: "regex",
135
+ type: "string"
136
+ },
137
+ {
138
+ enum: [true],
139
+ type: "boolean"
140
+ },
141
+ {
142
+ additionalProperties: false,
143
+ properties: {
144
+ match: { oneOf: [{
145
+ format: "regex",
146
+ type: "string"
147
+ }, {
148
+ enum: [true],
149
+ type: "boolean"
150
+ }] },
151
+ message: { type: "string" }
152
+ },
153
+ type: "object"
154
+ }
155
+ ] } },
156
+ type: "object"
157
+ }
158
+ },
159
+ type: "object"
160
+ }],
161
+ type: "suggestion"
162
+ }
163
+ });
164
+
165
+ //#endregion
166
+ export { matchDescription_default as default };
167
+ //# sourceMappingURL=matchDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchDescription.js","names":[],"sources":["../../src/rules/matchDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`\\\\p{RGI_Emoji}]\\\\s*)?$';\n\n/**\n * @param {string} value\n * @param {string} userDefault\n * @returns {string}\n */\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n nonemptyTags = true,\n tags = {},\n } = context.options[0] || {};\n\n /**\n * @param {string} desc\n * @param {import('comment-parser').Spec} [tag]\n * @returns {void}\n */\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.hasOwn(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasNoTag = (tagName) => {\n return !tags[tagName];\n };\n\n for (const tag of [\n 'description',\n 'summary',\n 'file',\n 'classdesc',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasNoTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n }\n\n if (nonemptyTags) {\n for (const tag of [\n 'copyright',\n 'example',\n 'see',\n 'todo',\n ]) {\n utils.forEachPreferredTag(tag, (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n\n if (hasNoTag(targetTagName) && !(/.+/v).test(desc)) {\n report(\n 'JSDoc description must not be empty.',\n null,\n matchingJsdocTag,\n );\n }\n });\n }\n }\n\n if (!Object.keys(tags).length) {\n return;\n }\n\n /**\n * @param {string} tagName\n * @returns {boolean}\n */\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(/^[\\- ]*/v, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-description.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n nonemptyTags: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}