eslint-plugin-jsdoc 52.0.4 → 53.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +1539 -1988
  36. package/dist/iterateJsdoc.cjs.map +1 -1
  37. package/dist/iterateJsdoc.d.cts +472 -0
  38. package/dist/iterateJsdoc.d.cts.map +1 -0
  39. package/dist/iterateJsdoc.d.ts +359 -349
  40. package/dist/iterateJsdoc.d.ts.map +1 -1
  41. package/dist/iterateJsdoc.js +1628 -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,135 +1,81 @@
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
- const defaultTags = {
10
- file: {
11
- initialCommentsOnly: true,
12
- mustExist: true,
13
- preventDuplicates: true
14
- }
15
- };
1
+ const require_iterateJsdoc = require('../iterateJsdoc.cjs');
16
2
 
3
+ //#region src/rules/requireFileOverview.js
4
+ const defaultTags = { file: {
5
+ initialCommentsOnly: true,
6
+ mustExist: true,
7
+ preventDuplicates: true
8
+ } };
17
9
  /**
18
- * @param {import('../iterateJsdoc.js').StateObject} state
19
- * @returns {void}
20
- */
21
- const setDefaults = state => {
22
- // First iteration
23
- if (!state.globalTags) {
24
- state.globalTags = {};
25
- state.hasDuplicates = {};
26
- state.hasTag = {};
27
- state.hasNonCommentBeforeTag = {};
28
- }
10
+ * @param {import('../iterateJsdoc.js').StateObject} state
11
+ * @returns {void}
12
+ */
13
+ const setDefaults = (state) => {
14
+ if (!state.globalTags) {
15
+ state.globalTags = {};
16
+ state.hasDuplicates = {};
17
+ state.hasTag = {};
18
+ state.hasNonCommentBeforeTag = {};
19
+ }
29
20
  };
30
- var _default = exports.default = (0, _iterateJsdoc.default)(({
31
- context,
32
- jsdocNode,
33
- state,
34
- utils
35
- }) => {
36
- const {
37
- tags = defaultTags
38
- } = context.options[0] || {};
39
- setDefaults(state);
40
- for (const tagName of Object.keys(tags)) {
41
- const targetTagName = /** @type {string} */utils.getPreferredTagName({
42
- tagName
43
- });
44
- const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));
45
- state.hasTag[tagName] = hasTag || state.hasTag[tagName];
46
- const hasDuplicate = state.hasDuplicates[tagName];
47
- if (hasDuplicate === false) {
48
- // Was marked before, so if a tag now, is a dupe
49
- state.hasDuplicates[tagName] = hasTag;
50
- } else if (!hasDuplicate && hasTag) {
51
- // No dupes set before, but has first tag, so change state
52
- // from `undefined` to `false` so can detect next time
53
- state.hasDuplicates[tagName] = false;
54
- state.hasNonCommentBeforeTag[tagName] = state.hasNonComment && state.hasNonComment < jsdocNode.range[0];
55
- }
56
- }
21
+ var requireFileOverview_default = require_iterateJsdoc.default(({ context, jsdocNode, state, utils }) => {
22
+ const { tags = defaultTags } = context.options[0] || {};
23
+ setDefaults(state);
24
+ for (const tagName of Object.keys(tags)) {
25
+ const targetTagName = utils.getPreferredTagName({ tagName });
26
+ const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));
27
+ state.hasTag[tagName] = hasTag || state.hasTag[tagName];
28
+ const hasDuplicate = state.hasDuplicates[tagName];
29
+ if (hasDuplicate === false) state.hasDuplicates[tagName] = hasTag;
30
+ else if (!hasDuplicate && hasTag) {
31
+ state.hasDuplicates[tagName] = false;
32
+ state.hasNonCommentBeforeTag[tagName] = state.hasNonComment && state.hasNonComment < jsdocNode.range[0];
33
+ }
34
+ }
57
35
  }, {
58
- exit({
59
- context,
60
- state,
61
- utils
62
- }) {
63
- setDefaults(state);
64
- const {
65
- tags = defaultTags
66
- } = context.options[0] || {};
67
- for (const [tagName, {
68
- initialCommentsOnly = false,
69
- mustExist = false,
70
- preventDuplicates = false
71
- }] of Object.entries(tags)) {
72
- const obj = utils.getPreferredTagNameObject({
73
- tagName
74
- });
75
- if (obj && typeof obj === 'object' && 'blocked' in obj) {
76
- utils.reportSettings(`\`settings.jsdoc.tagNamePreference\` cannot block @${obj.tagName} ` + 'for the `require-file-overview` rule');
77
- } else {
78
- const targetTagName = obj && typeof obj === 'object' && obj.replacement || obj;
79
- if (mustExist && !state.hasTag[tagName]) {
80
- utils.reportSettings(`Missing @${targetTagName}`);
81
- }
82
- if (preventDuplicates && state.hasDuplicates[tagName]) {
83
- utils.reportSettings(`Duplicate @${targetTagName}`);
84
- }
85
- if (initialCommentsOnly && state.hasNonCommentBeforeTag[tagName]) {
86
- utils.reportSettings(`@${targetTagName} should be at the beginning of the file`);
87
- }
88
- }
89
- }
90
- },
91
- iterateAllJsdocs: true,
92
- meta: {
93
- docs: {
94
- description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.',
95
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header'
96
- },
97
- schema: [{
98
- additionalProperties: false,
99
- properties: {
100
- tags: {
101
- patternProperties: {
102
- '.*': {
103
- additionalProperties: false,
104
- properties: {
105
- initialCommentsOnly: {
106
- type: 'boolean'
107
- },
108
- mustExist: {
109
- type: 'boolean'
110
- },
111
- preventDuplicates: {
112
- type: 'boolean'
113
- }
114
- },
115
- type: 'object'
116
- }
117
- },
118
- type: 'object'
119
- }
120
- },
121
- type: 'object'
122
- }],
123
- type: 'suggestion'
124
- },
125
- nonComment({
126
- node,
127
- state
128
- }) {
129
- if (!state.hasNonComment) {
130
- state.hasNonComment = node.range[0];
131
- }
132
- }
36
+ exit({ context, state, utils }) {
37
+ setDefaults(state);
38
+ const { tags = defaultTags } = context.options[0] || {};
39
+ for (const [tagName, { initialCommentsOnly = false, mustExist = false, preventDuplicates = false }] of Object.entries(tags)) {
40
+ const obj = utils.getPreferredTagNameObject({ tagName });
41
+ if (obj && typeof obj === "object" && "blocked" in obj) utils.reportSettings(`\`settings.jsdoc.tagNamePreference\` cannot block @${obj.tagName} for the \`require-file-overview\` rule`);
42
+ else {
43
+ const targetTagName = obj && typeof obj === "object" && obj.replacement || obj;
44
+ if (mustExist && !state.hasTag[tagName]) utils.reportSettings(`Missing @${targetTagName}`);
45
+ if (preventDuplicates && state.hasDuplicates[tagName]) utils.reportSettings(`Duplicate @${targetTagName}`);
46
+ if (initialCommentsOnly && state.hasNonCommentBeforeTag[tagName]) utils.reportSettings(`@${targetTagName} should be at the beginning of the file`);
47
+ }
48
+ }
49
+ },
50
+ iterateAllJsdocs: true,
51
+ meta: {
52
+ docs: {
53
+ description: "Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.",
54
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header"
55
+ },
56
+ schema: [{
57
+ additionalProperties: false,
58
+ properties: { tags: {
59
+ patternProperties: { ".*": {
60
+ additionalProperties: false,
61
+ properties: {
62
+ initialCommentsOnly: { type: "boolean" },
63
+ mustExist: { type: "boolean" },
64
+ preventDuplicates: { type: "boolean" }
65
+ },
66
+ type: "object"
67
+ } },
68
+ type: "object"
69
+ } },
70
+ type: "object"
71
+ }],
72
+ type: "suggestion"
73
+ },
74
+ nonComment({ node, state }) {
75
+ if (!state.hasNonComment) state.hasNonComment = node.range[0];
76
+ }
133
77
  });
134
- module.exports = exports.default;
78
+
79
+ //#endregion
80
+ exports.default = requireFileOverview_default;
135
81
  //# sourceMappingURL=requireFileOverview.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireFileOverview.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","defaultTags","file","initialCommentsOnly","mustExist","preventDuplicates","setDefaults","state","globalTags","hasDuplicates","hasTag","hasNonCommentBeforeTag","_default","exports","iterateJsdoc","context","jsdocNode","utils","tags","options","tagName","Object","keys","targetTagName","getPreferredTagName","Boolean","hasDuplicate","hasNonComment","range","exit","entries","obj","getPreferredTagNameObject","reportSettings","replacement","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","patternProperties","type","nonComment","node","module"],"sources":["../../src/rules/requireFileOverview.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultTags = {\n file: {\n initialCommentsOnly: true,\n mustExist: true,\n preventDuplicates: true,\n },\n};\n\n/**\n * @param {import('../iterateJsdoc.js').StateObject} state\n * @returns {void}\n */\nconst setDefaults = (state) => {\n // First iteration\n if (!state.globalTags) {\n state.globalTags = {};\n state.hasDuplicates = {};\n state.hasTag = {};\n state.hasNonCommentBeforeTag = {};\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n state,\n utils,\n}) => {\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n setDefaults(state);\n\n for (const tagName of Object.keys(tags)) {\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n\n const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));\n\n state.hasTag[tagName] = hasTag || state.hasTag[tagName];\n\n const hasDuplicate = state.hasDuplicates[tagName];\n\n if (hasDuplicate === false) {\n // Was marked before, so if a tag now, is a dupe\n state.hasDuplicates[tagName] = hasTag;\n } else if (!hasDuplicate && hasTag) {\n // No dupes set before, but has first tag, so change state\n // from `undefined` to `false` so can detect next time\n state.hasDuplicates[tagName] = false;\n state.hasNonCommentBeforeTag[tagName] = state.hasNonComment &&\n state.hasNonComment < jsdocNode.range[0];\n }\n }\n}, {\n exit ({\n context,\n state,\n utils,\n }) {\n setDefaults(state);\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n for (const [\n tagName,\n {\n initialCommentsOnly = false,\n mustExist = false,\n preventDuplicates = false,\n },\n ] of Object.entries(tags)) {\n const obj = utils.getPreferredTagNameObject({\n tagName,\n });\n if (obj && typeof obj === 'object' && 'blocked' in obj) {\n utils.reportSettings(\n `\\`settings.jsdoc.tagNamePreference\\` cannot block @${obj.tagName} ` +\n 'for the `require-file-overview` rule',\n );\n } else {\n const targetTagName = (\n obj && typeof obj === 'object' && obj.replacement\n ) || obj;\n if (mustExist && !state.hasTag[tagName]) {\n utils.reportSettings(`Missing @${targetTagName}`);\n }\n\n if (preventDuplicates && state.hasDuplicates[tagName]) {\n utils.reportSettings(\n `Duplicate @${targetTagName}`,\n );\n }\n\n if (initialCommentsOnly &&\n state.hasNonCommentBeforeTag[tagName]\n ) {\n utils.reportSettings(\n `@${targetTagName} should be at the beginning of the file`,\n );\n }\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n initialCommentsOnly: {\n type: 'boolean',\n },\n mustExist: {\n type: 'boolean',\n },\n preventDuplicates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n nonComment ({\n node,\n state,\n }) {\n if (!state.hasNonComment) {\n state.hasNonComment = node.range[0];\n }\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireFileOverview.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/requireFileOverview.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultTags = {\n file: {\n initialCommentsOnly: true,\n mustExist: true,\n preventDuplicates: true,\n },\n};\n\n/**\n * @param {import('../iterateJsdoc.js').StateObject} state\n * @returns {void}\n */\nconst setDefaults = (state) => {\n // First iteration\n if (!state.globalTags) {\n state.globalTags = {};\n state.hasDuplicates = {};\n state.hasTag = {};\n state.hasNonCommentBeforeTag = {};\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n state,\n utils,\n}) => {\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n setDefaults(state);\n\n for (const tagName of Object.keys(tags)) {\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n\n const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));\n\n state.hasTag[tagName] = hasTag || state.hasTag[tagName];\n\n const hasDuplicate = state.hasDuplicates[tagName];\n\n if (hasDuplicate === false) {\n // Was marked before, so if a tag now, is a dupe\n state.hasDuplicates[tagName] = hasTag;\n } else if (!hasDuplicate && hasTag) {\n // No dupes set before, but has first tag, so change state\n // from `undefined` to `false` so can detect next time\n state.hasDuplicates[tagName] = false;\n state.hasNonCommentBeforeTag[tagName] = state.hasNonComment &&\n state.hasNonComment < jsdocNode.range[0];\n }\n }\n}, {\n exit ({\n context,\n state,\n utils,\n }) {\n setDefaults(state);\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n for (const [\n tagName,\n {\n initialCommentsOnly = false,\n mustExist = false,\n preventDuplicates = false,\n },\n ] of Object.entries(tags)) {\n const obj = utils.getPreferredTagNameObject({\n tagName,\n });\n if (obj && typeof obj === 'object' && 'blocked' in obj) {\n utils.reportSettings(\n `\\`settings.jsdoc.tagNamePreference\\` cannot block @${obj.tagName} ` +\n 'for the `require-file-overview` rule',\n );\n } else {\n const targetTagName = (\n obj && typeof obj === 'object' && obj.replacement\n ) || obj;\n if (mustExist && !state.hasTag[tagName]) {\n utils.reportSettings(`Missing @${targetTagName}`);\n }\n\n if (preventDuplicates && state.hasDuplicates[tagName]) {\n utils.reportSettings(\n `Duplicate @${targetTagName}`,\n );\n }\n\n if (initialCommentsOnly &&\n state.hasNonCommentBeforeTag[tagName]\n ) {\n utils.reportSettings(\n `@${targetTagName} should be at the beginning of the file`,\n );\n }\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n initialCommentsOnly: {\n type: 'boolean',\n },\n mustExist: {\n type: 'boolean',\n },\n preventDuplicates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n nonComment ({\n node,\n state,\n }) {\n if (!state.hasNonComment) {\n state.hasNonComment = node.range[0];\n }\n },\n});\n"],"mappings":";;;AAEA,MAAM,cAAc,EAClB,MAAM;CACJ,qBAAqB;CACrB,WAAW;CACX,mBAAmB;AACpB,EACF;;;;;AAMD,MAAM,cAAc,CAAC,UAAU;AAE7B,KAAI,CAAC,MAAM,YAAY;EACrB,MAAM,aAAa,CAAE;EACrB,MAAM,gBAAgB,CAAE;EACxB,MAAM,SAAS,CAAE;EACjB,MAAM,yBAAyB,CAAE;CAClC;AACF;AAED,kCAAeA,6BAAa,CAAC,EAC3B,SACA,WACA,OACA,OACD,KAAK;CACJ,MAAM,EACJ,OAAO,aACR,GAAG,QAAQ,QAAQ,MAAM,CAAE;CAE5B,YAAY,MAAM;AAElB,MAAK,MAAM,WAAW,OAAO,KAAK,KAAK,EAAE;EACvC,MAAM,gBAAuC,MAAM,oBAAoB,EACrE,QACD,EAAC;EAEF,MAAM,SAAS,QAAQ,iBAAiB,MAAM,OAAO,cAAc,CAAC;EAEpE,MAAM,OAAO,WAAW,UAAU,MAAM,OAAO;EAE/C,MAAM,eAAe,MAAM,cAAc;AAEzC,MAAI,iBAAiB,OAEnB,MAAM,cAAc,WAAW;WACtB,CAAC,gBAAgB,QAAQ;GAGlC,MAAM,cAAc,WAAW;GAC/B,MAAM,uBAAuB,WAAW,MAAM,iBAC5C,MAAM,gBAAgB,UAAU,MAAM;EACzC;CACF;AACF,GAAE;CACD,KAAM,EACJ,SACA,OACA,OACD,EAAE;EACD,YAAY,MAAM;EAClB,MAAM,EACJ,OAAO,aACR,GAAG,QAAQ,QAAQ,MAAM,CAAE;AAE5B,OAAK,MAAM,CACT,SACA,EACE,sBAAsB,OACtB,YAAY,OACZ,oBAAoB,OACrB,CACF,IAAI,OAAO,QAAQ,KAAK,EAAE;GACzB,MAAM,MAAM,MAAM,0BAA0B,EAC1C,QACD,EAAC;AACF,OAAI,OAAO,OAAO,QAAQ,YAAY,aAAa,KACjD,MAAM,eACJ,CAAC,mDAAmD,EAAE,IAAI,QAAQ,uCAAC,CAC7B,CACvC;QACI;IACL,MAAM,gBACJ,OAAO,OAAO,QAAQ,YAAY,IAAI,eACnC;AACL,QAAI,aAAa,CAAC,MAAM,OAAO,UAC7B,MAAM,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC;AAGnD,QAAI,qBAAqB,MAAM,cAAc,UAC3C,MAAM,eACJ,CAAC,WAAW,EAAE,eAAe,CAC9B;AAGH,QAAI,uBACA,MAAM,uBAAuB,UAE/B,MAAM,eACJ,CAAC,CAAC,EAAE,cAAc,uCAAuC,CAAC,CAC3D;GAEJ;EACF;CACF;CACD,kBAAkB;CAClB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,QAAQ,CACN;GACE,sBAAsB;GACtB,YAAY,EACV,MAAM;IACJ,mBAAmB,EACjB,MAAM;KACJ,sBAAsB;KACtB,YAAY;MACV,qBAAqB,EACnB,MAAM,UACP;MACD,WAAW,EACT,MAAM,UACP;MACD,mBAAmB,EACjB,MAAM,UACP;KACF;KACD,MAAM;IACP,EACF;IACD,MAAM;GACP,EACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;CACD,WAAY,EACV,MACA,OACD,EAAE;AACD,MAAI,CAAC,MAAM,eACT,MAAM,gBAAgB,KAAK,MAAM;CAEpC;AACF,EAAC"}
@@ -0,0 +1,81 @@
1
+ import iterateJsdoc from "../iterateJsdoc.js";
2
+
3
+ //#region src/rules/requireFileOverview.js
4
+ const defaultTags = { file: {
5
+ initialCommentsOnly: true,
6
+ mustExist: true,
7
+ preventDuplicates: true
8
+ } };
9
+ /**
10
+ * @param {import('../iterateJsdoc.js').StateObject} state
11
+ * @returns {void}
12
+ */
13
+ const setDefaults = (state) => {
14
+ if (!state.globalTags) {
15
+ state.globalTags = {};
16
+ state.hasDuplicates = {};
17
+ state.hasTag = {};
18
+ state.hasNonCommentBeforeTag = {};
19
+ }
20
+ };
21
+ var requireFileOverview_default = iterateJsdoc(({ context, jsdocNode, state, utils }) => {
22
+ const { tags = defaultTags } = context.options[0] || {};
23
+ setDefaults(state);
24
+ for (const tagName of Object.keys(tags)) {
25
+ const targetTagName = utils.getPreferredTagName({ tagName });
26
+ const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));
27
+ state.hasTag[tagName] = hasTag || state.hasTag[tagName];
28
+ const hasDuplicate = state.hasDuplicates[tagName];
29
+ if (hasDuplicate === false) state.hasDuplicates[tagName] = hasTag;
30
+ else if (!hasDuplicate && hasTag) {
31
+ state.hasDuplicates[tagName] = false;
32
+ state.hasNonCommentBeforeTag[tagName] = state.hasNonComment && state.hasNonComment < jsdocNode.range[0];
33
+ }
34
+ }
35
+ }, {
36
+ exit({ context, state, utils }) {
37
+ setDefaults(state);
38
+ const { tags = defaultTags } = context.options[0] || {};
39
+ for (const [tagName, { initialCommentsOnly = false, mustExist = false, preventDuplicates = false }] of Object.entries(tags)) {
40
+ const obj = utils.getPreferredTagNameObject({ tagName });
41
+ if (obj && typeof obj === "object" && "blocked" in obj) utils.reportSettings(`\`settings.jsdoc.tagNamePreference\` cannot block @${obj.tagName} for the \`require-file-overview\` rule`);
42
+ else {
43
+ const targetTagName = obj && typeof obj === "object" && obj.replacement || obj;
44
+ if (mustExist && !state.hasTag[tagName]) utils.reportSettings(`Missing @${targetTagName}`);
45
+ if (preventDuplicates && state.hasDuplicates[tagName]) utils.reportSettings(`Duplicate @${targetTagName}`);
46
+ if (initialCommentsOnly && state.hasNonCommentBeforeTag[tagName]) utils.reportSettings(`@${targetTagName} should be at the beginning of the file`);
47
+ }
48
+ }
49
+ },
50
+ iterateAllJsdocs: true,
51
+ meta: {
52
+ docs: {
53
+ description: "Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.",
54
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header"
55
+ },
56
+ schema: [{
57
+ additionalProperties: false,
58
+ properties: { tags: {
59
+ patternProperties: { ".*": {
60
+ additionalProperties: false,
61
+ properties: {
62
+ initialCommentsOnly: { type: "boolean" },
63
+ mustExist: { type: "boolean" },
64
+ preventDuplicates: { type: "boolean" }
65
+ },
66
+ type: "object"
67
+ } },
68
+ type: "object"
69
+ } },
70
+ type: "object"
71
+ }],
72
+ type: "suggestion"
73
+ },
74
+ nonComment({ node, state }) {
75
+ if (!state.hasNonComment) state.hasNonComment = node.range[0];
76
+ }
77
+ });
78
+
79
+ //#endregion
80
+ export { requireFileOverview_default as default };
81
+ //# sourceMappingURL=requireFileOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requireFileOverview.js","names":[],"sources":["../../src/rules/requireFileOverview.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultTags = {\n file: {\n initialCommentsOnly: true,\n mustExist: true,\n preventDuplicates: true,\n },\n};\n\n/**\n * @param {import('../iterateJsdoc.js').StateObject} state\n * @returns {void}\n */\nconst setDefaults = (state) => {\n // First iteration\n if (!state.globalTags) {\n state.globalTags = {};\n state.hasDuplicates = {};\n state.hasTag = {};\n state.hasNonCommentBeforeTag = {};\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n state,\n utils,\n}) => {\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n setDefaults(state);\n\n for (const tagName of Object.keys(tags)) {\n const targetTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n\n const hasTag = Boolean(targetTagName && utils.hasTag(targetTagName));\n\n state.hasTag[tagName] = hasTag || state.hasTag[tagName];\n\n const hasDuplicate = state.hasDuplicates[tagName];\n\n if (hasDuplicate === false) {\n // Was marked before, so if a tag now, is a dupe\n state.hasDuplicates[tagName] = hasTag;\n } else if (!hasDuplicate && hasTag) {\n // No dupes set before, but has first tag, so change state\n // from `undefined` to `false` so can detect next time\n state.hasDuplicates[tagName] = false;\n state.hasNonCommentBeforeTag[tagName] = state.hasNonComment &&\n state.hasNonComment < jsdocNode.range[0];\n }\n }\n}, {\n exit ({\n context,\n state,\n utils,\n }) {\n setDefaults(state);\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n for (const [\n tagName,\n {\n initialCommentsOnly = false,\n mustExist = false,\n preventDuplicates = false,\n },\n ] of Object.entries(tags)) {\n const obj = utils.getPreferredTagNameObject({\n tagName,\n });\n if (obj && typeof obj === 'object' && 'blocked' in obj) {\n utils.reportSettings(\n `\\`settings.jsdoc.tagNamePreference\\` cannot block @${obj.tagName} ` +\n 'for the `require-file-overview` rule',\n );\n } else {\n const targetTagName = (\n obj && typeof obj === 'object' && obj.replacement\n ) || obj;\n if (mustExist && !state.hasTag[tagName]) {\n utils.reportSettings(`Missing @${targetTagName}`);\n }\n\n if (preventDuplicates && state.hasDuplicates[tagName]) {\n utils.reportSettings(\n `Duplicate @${targetTagName}`,\n );\n }\n\n if (initialCommentsOnly &&\n state.hasNonCommentBeforeTag[tagName]\n ) {\n utils.reportSettings(\n `@${targetTagName} should be at the beginning of the file`,\n );\n }\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-file-overview.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n initialCommentsOnly: {\n type: 'boolean',\n },\n mustExist: {\n type: 'boolean',\n },\n preventDuplicates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n nonComment ({\n node,\n state,\n }) {\n if (!state.hasNonComment) {\n state.hasNonComment = node.range[0];\n }\n },\n});\n"],"mappings":";;;AAEA,MAAM,cAAc,EAClB,MAAM;CACJ,qBAAqB;CACrB,WAAW;CACX,mBAAmB;AACpB,EACF;;;;;AAMD,MAAM,cAAc,CAAC,UAAU;AAE7B,KAAI,CAAC,MAAM,YAAY;EACrB,MAAM,aAAa,CAAE;EACrB,MAAM,gBAAgB,CAAE;EACxB,MAAM,SAAS,CAAE;EACjB,MAAM,yBAAyB,CAAE;CAClC;AACF;AAED,kCAAe,aAAa,CAAC,EAC3B,SACA,WACA,OACA,OACD,KAAK;CACJ,MAAM,EACJ,OAAO,aACR,GAAG,QAAQ,QAAQ,MAAM,CAAE;CAE5B,YAAY,MAAM;AAElB,MAAK,MAAM,WAAW,OAAO,KAAK,KAAK,EAAE;EACvC,MAAM,gBAAuC,MAAM,oBAAoB,EACrE,QACD,EAAC;EAEF,MAAM,SAAS,QAAQ,iBAAiB,MAAM,OAAO,cAAc,CAAC;EAEpE,MAAM,OAAO,WAAW,UAAU,MAAM,OAAO;EAE/C,MAAM,eAAe,MAAM,cAAc;AAEzC,MAAI,iBAAiB,OAEnB,MAAM,cAAc,WAAW;WACtB,CAAC,gBAAgB,QAAQ;GAGlC,MAAM,cAAc,WAAW;GAC/B,MAAM,uBAAuB,WAAW,MAAM,iBAC5C,MAAM,gBAAgB,UAAU,MAAM;EACzC;CACF;AACF,GAAE;CACD,KAAM,EACJ,SACA,OACA,OACD,EAAE;EACD,YAAY,MAAM;EAClB,MAAM,EACJ,OAAO,aACR,GAAG,QAAQ,QAAQ,MAAM,CAAE;AAE5B,OAAK,MAAM,CACT,SACA,EACE,sBAAsB,OACtB,YAAY,OACZ,oBAAoB,OACrB,CACF,IAAI,OAAO,QAAQ,KAAK,EAAE;GACzB,MAAM,MAAM,MAAM,0BAA0B,EAC1C,QACD,EAAC;AACF,OAAI,OAAO,OAAO,QAAQ,YAAY,aAAa,KACjD,MAAM,eACJ,CAAC,mDAAmD,EAAE,IAAI,QAAQ,uCAAC,CAC7B,CACvC;QACI;IACL,MAAM,gBACJ,OAAO,OAAO,QAAQ,YAAY,IAAI,eACnC;AACL,QAAI,aAAa,CAAC,MAAM,OAAO,UAC7B,MAAM,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC;AAGnD,QAAI,qBAAqB,MAAM,cAAc,UAC3C,MAAM,eACJ,CAAC,WAAW,EAAE,eAAe,CAC9B;AAGH,QAAI,uBACA,MAAM,uBAAuB,UAE/B,MAAM,eACJ,CAAC,CAAC,EAAE,cAAc,uCAAuC,CAAC,CAC3D;GAEJ;EACF;CACF;CACD,kBAAkB;CAClB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,QAAQ,CACN;GACE,sBAAsB;GACtB,YAAY,EACV,MAAM;IACJ,mBAAmB,EACjB,MAAM;KACJ,sBAAsB;KACtB,YAAY;MACV,qBAAqB,EACnB,MAAM,UACP;MACD,WAAW,EACT,MAAM,UACP;MACD,mBAAmB,EACjB,MAAM,UACP;KACF;KACD,MAAM;IACP,EACF;IACD,MAAM;GACP,EACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;CACD,WAAY,EACV,MACA,OACD,EAAE;AACD,MAAI,CAAC,MAAM,eACT,MAAM,gBAAgB,KAAK,MAAM;CAEpC;AACF,EAAC"}
@@ -1,137 +1,89 @@
1
- "use strict";
1
+ const require_iterateJsdoc = require('../iterateJsdoc.cjs');
2
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
- var _default = exports.default = (0, _iterateJsdoc.default)(({
10
- context,
11
- jsdoc,
12
- utils
13
- }) => {
14
- const [mainCircumstance, {
15
- tags = null
16
- } = {}] = context.options;
17
- const tgs =
18
- /**
19
- * @type {null|"any"|{[key: string]: "always"|"never"}}
20
- */
21
- tags;
22
-
23
- /**
24
- * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag
25
- * @param {string} targetTagName
26
- * @param {"always"|"never"} [circumstance]
27
- * @returns {void}
28
- */
29
- const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {
30
- const always = !circumstance || circumstance === 'always';
31
- const desc = /** @type {string} */utils.getTagDescription(jsdocTag);
32
- if (!desc.trim()) {
33
- return;
34
- }
35
- const startsWithHyphen = /^\s*-/v.test(desc);
36
- let lines = 0;
37
- for (const {
38
- tokens
39
- } of jsdocTag.source) {
40
- if (tokens.description) {
41
- break;
42
- }
43
- lines++;
44
- }
45
- if (always) {
46
- if (!startsWithHyphen) {
47
- utils.reportJSDoc(`There must be a hyphen before @${targetTagName} description.`, {
48
- line: jsdocTag.source[0].number + lines
49
- }, () => {
50
- for (const {
51
- tokens
52
- } of jsdocTag.source) {
53
- if (tokens.description) {
54
- tokens.description = tokens.description.replace(/^(\s*)/v, '$1- ');
55
- break;
56
- }
57
- }
58
- });
59
- }
60
- } else if (startsWithHyphen) {
61
- utils.reportJSDoc(`There must be no hyphen before @${targetTagName} description.`, {
62
- line: jsdocTag.source[0].number + lines
63
- }, () => {
64
- for (const {
65
- tokens
66
- } of jsdocTag.source) {
67
- if (tokens.description) {
68
- tokens.description = tokens.description.replace(/^\s*-\s*/v, '');
69
- break;
70
- }
71
- }
72
- }, true);
73
- }
74
- };
75
- utils.forEachPreferredTag('param', checkHyphens);
76
- if (tgs) {
77
- const tagEntries = Object.entries(tgs);
78
- for (const [tagName, circumstance] of tagEntries) {
79
- if (tagName === '*') {
80
- const preferredParamTag = utils.getPreferredTagName({
81
- tagName: 'param'
82
- });
83
- for (const {
84
- tag
85
- } of jsdoc.tags) {
86
- if (tag === preferredParamTag || tagEntries.some(([tagNme]) => {
87
- return tagNme !== '*' && tagNme === tag;
88
- })) {
89
- continue;
90
- }
91
- utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {
92
- checkHyphens(jsdocTag, targetTagName, /** @type {"always"|"never"} */circumstance);
93
- });
94
- }
95
- continue;
96
- }
97
- utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {
98
- checkHyphens(jsdocTag, targetTagName, /** @type {"always"|"never"} */circumstance);
99
- });
100
- }
101
- }
3
+ //#region src/rules/requireHyphenBeforeParamDescription.js
4
+ var requireHyphenBeforeParamDescription_default = require_iterateJsdoc.default(({ context, jsdoc, utils }) => {
5
+ const [mainCircumstance, { tags = null } = {}] = context.options;
6
+ const tgs = tags;
7
+ /**
8
+ * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag
9
+ * @param {string} targetTagName
10
+ * @param {"always"|"never"} [circumstance]
11
+ * @returns {void}
12
+ */
13
+ const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {
14
+ const always = !circumstance || circumstance === "always";
15
+ const desc = utils.getTagDescription(jsdocTag);
16
+ if (!desc.trim()) return;
17
+ const startsWithHyphen = /^\s*-/v.test(desc);
18
+ let lines = 0;
19
+ for (const { tokens } of jsdocTag.source) {
20
+ if (tokens.description) break;
21
+ lines++;
22
+ }
23
+ if (always) {
24
+ if (!startsWithHyphen) utils.reportJSDoc(`There must be a hyphen before @${targetTagName} description.`, { line: jsdocTag.source[0].number + lines }, () => {
25
+ for (const { tokens } of jsdocTag.source) if (tokens.description) {
26
+ tokens.description = tokens.description.replace(/^(\s*)/v, "$1- ");
27
+ break;
28
+ }
29
+ });
30
+ } else if (startsWithHyphen) utils.reportJSDoc(`There must be no hyphen before @${targetTagName} description.`, { line: jsdocTag.source[0].number + lines }, () => {
31
+ for (const { tokens } of jsdocTag.source) if (tokens.description) {
32
+ tokens.description = tokens.description.replace(/^\s*-\s*/v, "");
33
+ break;
34
+ }
35
+ }, true);
36
+ };
37
+ utils.forEachPreferredTag("param", checkHyphens);
38
+ if (tgs) {
39
+ const tagEntries = Object.entries(tgs);
40
+ for (const [tagName, circumstance] of tagEntries) {
41
+ if (tagName === "*") {
42
+ const preferredParamTag = utils.getPreferredTagName({ tagName: "param" });
43
+ for (const { tag } of jsdoc.tags) {
44
+ if (tag === preferredParamTag || tagEntries.some(([tagNme]) => {
45
+ return tagNme !== "*" && tagNme === tag;
46
+ })) continue;
47
+ utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {
48
+ checkHyphens(jsdocTag, targetTagName, circumstance);
49
+ });
50
+ }
51
+ continue;
52
+ }
53
+ utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {
54
+ checkHyphens(jsdocTag, targetTagName, circumstance);
55
+ });
56
+ }
57
+ }
102
58
  }, {
103
- iterateAllJsdocs: true,
104
- meta: {
105
- docs: {
106
- description: 'Requires a hyphen before the `@param` description.',
107
- url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header'
108
- },
109
- fixable: 'code',
110
- schema: [{
111
- enum: ['always', 'never'],
112
- type: 'string'
113
- }, {
114
- additionalProperties: false,
115
- properties: {
116
- tags: {
117
- anyOf: [{
118
- patternProperties: {
119
- '.*': {
120
- enum: ['always', 'never'],
121
- type: 'string'
122
- }
123
- },
124
- type: 'object'
125
- }, {
126
- enum: ['any'],
127
- type: 'string'
128
- }]
129
- }
130
- },
131
- type: 'object'
132
- }],
133
- type: 'layout'
134
- }
59
+ iterateAllJsdocs: true,
60
+ meta: {
61
+ docs: {
62
+ description: "Requires a hyphen before the `@param` description.",
63
+ url: "https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header"
64
+ },
65
+ fixable: "code",
66
+ schema: [{
67
+ enum: ["always", "never"],
68
+ type: "string"
69
+ }, {
70
+ additionalProperties: false,
71
+ properties: { tags: { anyOf: [{
72
+ patternProperties: { ".*": {
73
+ enum: ["always", "never"],
74
+ type: "string"
75
+ } },
76
+ type: "object"
77
+ }, {
78
+ enum: ["any"],
79
+ type: "string"
80
+ }] } },
81
+ type: "object"
82
+ }],
83
+ type: "layout"
84
+ }
135
85
  });
136
- module.exports = exports.default;
86
+
87
+ //#endregion
88
+ exports.default = requireHyphenBeforeParamDescription_default;
137
89
  //# sourceMappingURL=requireHyphenBeforeParamDescription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireHyphenBeforeParamDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","mainCircumstance","tags","options","tgs","checkHyphens","jsdocTag","targetTagName","circumstance","always","desc","getTagDescription","trim","startsWithHyphen","test","lines","tokens","source","description","reportJSDoc","line","number","replace","forEachPreferredTag","tagEntries","Object","entries","tagName","preferredParamTag","getPreferredTagName","tag","some","tagNme","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","anyOf","patternProperties","module"],"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n mainCircumstance,\n {\n tags = null,\n } = {},\n ] = context.options;\n\n const tgs = /**\n * @type {null|\"any\"|{[key: string]: \"always\"|\"never\"}}\n */ (tags);\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag\n * @param {string} targetTagName\n * @param {\"always\"|\"never\"} [circumstance]\n * @returns {void}\n */\n const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {\n const always = !circumstance || circumstance === 'always';\n const desc = /** @type {string} */ (utils.getTagDescription(jsdocTag));\n if (!desc.trim()) {\n return;\n }\n\n const startsWithHyphen = (/^\\s*-/v).test(desc);\n let lines = 0;\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n break;\n }\n\n lines++;\n }\n\n if (always) {\n if (!startsWithHyphen) {\n utils.reportJSDoc(\n `There must be a hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^(\\s*)/v, '$1- ',\n );\n break;\n }\n }\n },\n );\n }\n } else if (startsWithHyphen) {\n utils.reportJSDoc(\n `There must be no hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^\\s*-\\s*/v, '',\n );\n break;\n }\n }\n },\n true,\n );\n }\n };\n\n utils.forEachPreferredTag('param', checkHyphens);\n if (tgs) {\n const tagEntries = Object.entries(tgs);\n for (const [\n tagName,\n circumstance,\n ] of tagEntries) {\n if (tagName === '*') {\n const preferredParamTag = utils.getPreferredTagName({\n tagName: 'param',\n });\n for (const {\n tag,\n } of jsdoc.tags) {\n if (tag === preferredParamTag || tagEntries.some(([\n tagNme,\n ]) => {\n return tagNme !== '*' && tagNme === tag;\n })) {\n continue;\n }\n\n utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n\n continue;\n }\n\n utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires a hyphen before the `@param` description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n anyOf: [\n {\n patternProperties: {\n '.*': {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n {\n enum: [\n 'any',\n ],\n type: 'string',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"requireHyphenBeforeParamDescription.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n mainCircumstance,\n {\n tags = null,\n } = {},\n ] = context.options;\n\n const tgs = /**\n * @type {null|\"any\"|{[key: string]: \"always\"|\"never\"}}\n */ (tags);\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag\n * @param {string} targetTagName\n * @param {\"always\"|\"never\"} [circumstance]\n * @returns {void}\n */\n const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {\n const always = !circumstance || circumstance === 'always';\n const desc = /** @type {string} */ (utils.getTagDescription(jsdocTag));\n if (!desc.trim()) {\n return;\n }\n\n const startsWithHyphen = (/^\\s*-/v).test(desc);\n let lines = 0;\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n break;\n }\n\n lines++;\n }\n\n if (always) {\n if (!startsWithHyphen) {\n utils.reportJSDoc(\n `There must be a hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^(\\s*)/v, '$1- ',\n );\n break;\n }\n }\n },\n );\n }\n } else if (startsWithHyphen) {\n utils.reportJSDoc(\n `There must be no hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^\\s*-\\s*/v, '',\n );\n break;\n }\n }\n },\n true,\n );\n }\n };\n\n utils.forEachPreferredTag('param', checkHyphens);\n if (tgs) {\n const tagEntries = Object.entries(tgs);\n for (const [\n tagName,\n circumstance,\n ] of tagEntries) {\n if (tagName === '*') {\n const preferredParamTag = utils.getPreferredTagName({\n tagName: 'param',\n });\n for (const {\n tag,\n } of jsdoc.tags) {\n if (tag === preferredParamTag || tagEntries.some(([\n tagNme,\n ]) => {\n return tagNme !== '*' && tagNme === tag;\n })) {\n continue;\n }\n\n utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n\n continue;\n }\n\n utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires a hyphen before the `@param` description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n anyOf: [\n {\n patternProperties: {\n '.*': {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n {\n enum: [\n 'any',\n ],\n type: 'string',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":";;;AAEA,kDAAeA,6BAAa,CAAC,EAC3B,SACA,OACA,OACD,KAAK;CACJ,MAAM,CACJ,kBACA,EACE,OAAO,MACR,GAAG,CAAE,EACP,GAAG,QAAQ;CAEZ,MAAM,MAEW;;;;;;;CAQjB,MAAM,eAAe,CAAC,UAAU,eAAe,eAAe,qBAAqB;EACjF,MAAM,SAAS,CAAC,gBAAgB,iBAAiB;EACjD,MAAM,OAA8B,MAAM,kBAAkB,SAAS;AACrE,MAAI,CAAC,KAAK,MAAM,CACd;EAGF,MAAM,mBAAoB,SAAU,KAAK,KAAK;EAC9C,IAAI,QAAQ;AACZ,OAAK,MAAM,EACT,QACD,IAAI,SAAS,QAAQ;AACpB,OAAI,OAAO,YACT;GAGF;EACD;AAED,MAAI,QACF;OAAI,CAAC,kBACH,MAAM,YACJ,CAAC,+BAA+B,EAAE,cAAc,aAAa,CAAC,EAC9D,EACE,MAAM,SAAS,OAAO,GAAG,SAAS,MACnC,GACD,MAAM;AACJ,SAAK,MAAM,EACT,QACD,IAAI,SAAS,OACZ,KAAI,OAAO,aAAa;KACtB,OAAO,cAAc,OAAO,YAAY,QACtC,WAAW,OACZ;AACD;IACD;GAEJ,EACF;EACF,WACQ,kBACT,MAAM,YACJ,CAAC,gCAAgC,EAAE,cAAc,aAAa,CAAC,EAC/D,EACE,MAAM,SAAS,OAAO,GAAG,SAAS,MACnC,GACD,MAAM;AACJ,QAAK,MAAM,EACT,QACD,IAAI,SAAS,OACZ,KAAI,OAAO,aAAa;IACtB,OAAO,cAAc,OAAO,YAAY,QACtC,aAAa,GACd;AACD;GACD;EAEJ,GACD,KACD;CAEJ;CAED,MAAM,oBAAoB,SAAS,aAAa;AAChD,KAAI,KAAK;EACP,MAAM,aAAa,OAAO,QAAQ,IAAI;AACtC,OAAK,MAAM,CACT,SACA,aACD,IAAI,YAAY;AACf,OAAI,YAAY,KAAK;IACnB,MAAM,oBAAoB,MAAM,oBAAoB,EAClD,SAAS,QACV,EAAC;AACF,SAAK,MAAM,EACT,KACD,IAAI,MAAM,MAAM;AACf,SAAI,QAAQ,qBAAqB,WAAW,KAAK,CAAC,CAChD,OACD,KAAK;AACJ,aAAO,WAAW,OAAO,WAAW;KACrC,EAAC,CACA;KAGF,MAAM,oBAAoB,KAAK,CAAC,UAAU,kBAAkB;MAC1D,aACE,UACA,eACiC,aAClC;KACF,EAAC;IACH;AAED;GACD;GAED,MAAM,oBAAoB,SAAS,CAAC,UAAU,kBAAkB;IAC9D,aACE,UACA,eACiC,aAClC;GACF,EAAC;EACH;CACF;AACF,GAAE;CACD,kBAAkB;CAClB,MAAM;EACJ,MAAM;GACJ,aAAa;GACb,KAAK;EACN;EACD,SAAS;EACT,QAAQ,CACN;GACE,MAAM,CACJ,UAAU,OACX;GACD,MAAM;EACP,GACD;GACE,sBAAsB;GACtB,YAAY,EACV,MAAM,EACJ,OAAO,CACL;IACE,mBAAmB,EACjB,MAAM;KACJ,MAAM,CACJ,UAAU,OACX;KACD,MAAM;IACP,EACF;IACD,MAAM;GACP,GACD;IACE,MAAM,CACJ,KACD;IACD,MAAM;GACP,CACF,EACF,EACF;GACD,MAAM;EACP,CACF;EACD,MAAM;CACP;AACF,EAAC"}