eslint-plugin-jsdoc 52.0.2 → 52.0.3

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 (357) 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 +398 -383
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +22 -0
  34. package/dist/index.d.cts.map +1 -0
  35. package/dist/index.d.ts +11 -6
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +425 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/iterateJsdoc.cjs +1528 -1988
  40. package/dist/iterateJsdoc.cjs.map +1 -1
  41. package/dist/iterateJsdoc.d.cts +471 -0
  42. package/dist/iterateJsdoc.d.cts.map +1 -0
  43. package/dist/iterateJsdoc.d.ts +358 -349
  44. package/dist/iterateJsdoc.d.ts.map +1 -1
  45. package/dist/iterateJsdoc.js +1617 -0
  46. package/dist/iterateJsdoc.js.map +1 -0
  47. package/dist/jsdocUtils.cjs +1009 -1376
  48. package/dist/jsdocUtils.cjs.map +1 -1
  49. package/dist/jsdocUtils.js +1123 -0
  50. package/dist/jsdocUtils.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/src/WarnSettings.js +0 -34
  291. package/src/alignTransform.js +0 -358
  292. package/src/defaultTagOrder.js +0 -169
  293. package/src/exportParser.js +0 -978
  294. package/src/getDefaultTagStructureForMode.js +0 -969
  295. package/src/getJsdocProcessorPlugin.js +0 -672
  296. package/src/index.js +0 -530
  297. package/src/iterateJsdoc.js +0 -2518
  298. package/src/jsdocUtils.js +0 -1896
  299. package/src/rules/checkAccess.js +0 -45
  300. package/src/rules/checkAlignment.js +0 -63
  301. package/src/rules/checkExamples.js +0 -589
  302. package/src/rules/checkIndentation.js +0 -75
  303. package/src/rules/checkLineAlignment.js +0 -372
  304. package/src/rules/checkParamNames.js +0 -474
  305. package/src/rules/checkPropertyNames.js +0 -152
  306. package/src/rules/checkSyntax.js +0 -30
  307. package/src/rules/checkTagNames.js +0 -314
  308. package/src/rules/checkTemplateNames.js +0 -204
  309. package/src/rules/checkTypes.js +0 -535
  310. package/src/rules/checkValues.js +0 -248
  311. package/src/rules/convertToJsdocComments.js +0 -398
  312. package/src/rules/emptyTags.js +0 -98
  313. package/src/rules/implementsOnClasses.js +0 -64
  314. package/src/rules/importsAsDependencies.js +0 -133
  315. package/src/rules/informativeDocs.js +0 -189
  316. package/src/rules/linesBeforeBlock.js +0 -134
  317. package/src/rules/matchDescription.js +0 -286
  318. package/src/rules/matchName.js +0 -151
  319. package/src/rules/multilineBlocks.js +0 -493
  320. package/src/rules/noBadBlocks.js +0 -119
  321. package/src/rules/noBlankBlockDescriptions.js +0 -69
  322. package/src/rules/noBlankBlocks.js +0 -53
  323. package/src/rules/noDefaults.js +0 -85
  324. package/src/rules/noMissingSyntax.js +0 -195
  325. package/src/rules/noMultiAsterisks.js +0 -134
  326. package/src/rules/noRestrictedSyntax.js +0 -91
  327. package/src/rules/noTypes.js +0 -93
  328. package/src/rules/noUndefinedTypes.js +0 -543
  329. package/src/rules/requireAsteriskPrefix.js +0 -190
  330. package/src/rules/requireDescription.js +0 -161
  331. package/src/rules/requireDescriptionCompleteSentence.js +0 -335
  332. package/src/rules/requireExample.js +0 -118
  333. package/src/rules/requireFileOverview.js +0 -154
  334. package/src/rules/requireHyphenBeforeParamDescription.js +0 -176
  335. package/src/rules/requireJsdoc.js +0 -743
  336. package/src/rules/requireParam.js +0 -602
  337. package/src/rules/requireParamDescription.js +0 -89
  338. package/src/rules/requireParamName.js +0 -55
  339. package/src/rules/requireParamType.js +0 -89
  340. package/src/rules/requireProperty.js +0 -48
  341. package/src/rules/requirePropertyDescription.js +0 -25
  342. package/src/rules/requirePropertyName.js +0 -25
  343. package/src/rules/requirePropertyType.js +0 -25
  344. package/src/rules/requireReturns.js +0 -238
  345. package/src/rules/requireReturnsCheck.js +0 -145
  346. package/src/rules/requireReturnsDescription.js +0 -59
  347. package/src/rules/requireReturnsType.js +0 -51
  348. package/src/rules/requireTemplate.js +0 -201
  349. package/src/rules/requireThrows.js +0 -111
  350. package/src/rules/requireYields.js +0 -216
  351. package/src/rules/requireYieldsCheck.js +0 -208
  352. package/src/rules/sortTags.js +0 -558
  353. package/src/rules/tagLines.js +0 -359
  354. package/src/rules/textEscaping.js +0 -154
  355. package/src/rules/validTypes.js +0 -401
  356. package/src/tagNames.js +0 -238
  357. package/src/utils/hasReturnValue.js +0 -572
@@ -0,0 +1,518 @@
1
+ import { findJSDocComment } from "@es-joy/jsdoccomment";
2
+ import debugModule from "debug";
3
+
4
+ //#region src/exportParser.js
5
+ const debug = debugModule("requireExportJsdoc");
6
+ /**
7
+ * @typedef {{
8
+ * value: string
9
+ * }} ValueObject
10
+ */
11
+ /**
12
+ * @typedef {{
13
+ * type?: string,
14
+ * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,
15
+ * props: {
16
+ * [key: string]: CreatedNode|null,
17
+ * },
18
+ * special?: true,
19
+ * globalVars?: CreatedNode,
20
+ * exported?: boolean,
21
+ * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node
22
+ * }} CreatedNode
23
+ */
24
+ /**
25
+ * @returns {CreatedNode}
26
+ */
27
+ const createNode = function() {
28
+ return { props: {} };
29
+ };
30
+ /**
31
+ * @param {CreatedNode|null} symbol
32
+ * @returns {string|null}
33
+ */
34
+ const getSymbolValue = function(symbol) {
35
+ /* c8 ignore next 3 */
36
+ if (!symbol) return null;
37
+ /* c8 ignore else */
38
+ if (symbol.type === "literal") return symbol.value.value;
39
+ /* c8 ignore next 2 */
40
+ return null;
41
+ };
42
+ /**
43
+ *
44
+ * @param {import('estree').Identifier} node
45
+ * @param {CreatedNode} globals
46
+ * @param {CreatedNode} scope
47
+ * @param {SymbolOptions} opts
48
+ * @returns {CreatedNode|null}
49
+ */
50
+ const getIdentifier = function(node, globals, scope, opts) {
51
+ if (opts.simpleIdentifier) {
52
+ const identifierLiteral = createNode();
53
+ identifierLiteral.type = "literal";
54
+ identifierLiteral.value = { value: node.name };
55
+ return identifierLiteral;
56
+ }
57
+ /* c8 ignore next */
58
+ const block = scope || globals;
59
+ if (block.props[node.name]) return block.props[node.name];
60
+ /* c8 ignore next 3 */
61
+ if (globals.props[node.name]) return globals.props[node.name];
62
+ return null;
63
+ };
64
+ /**
65
+ * @callback CreateSymbol
66
+ * @param {import('eslint').Rule.Node|null} node
67
+ * @param {CreatedNode} globals
68
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value
69
+ * @param {CreatedNode} [scope]
70
+ * @param {boolean|SymbolOptions} [isGlobal]
71
+ * @returns {CreatedNode|null}
72
+ */
73
+ /** @type {CreateSymbol} */
74
+ let createSymbol;
75
+ /**
76
+ * @typedef {{
77
+ * simpleIdentifier?: boolean
78
+ * }} SymbolOptions
79
+ */
80
+ /**
81
+ *
82
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node
83
+ * @param {CreatedNode} globals
84
+ * @param {CreatedNode} scope
85
+ * @param {SymbolOptions} [opt]
86
+ * @returns {CreatedNode|null}
87
+ */
88
+ const getSymbol = function(node, globals, scope, opt) {
89
+ const opts = opt || {};
90
+ /* c8 ignore next */
91
+ switch (node.type) {
92
+ case "ArrowFunctionExpression":
93
+ case "ClassDeclaration":
94
+ case "FunctionDeclaration":
95
+ case "FunctionExpression":
96
+ case "TSEnumDeclaration":
97
+ case "TSInterfaceDeclaration":
98
+ case "TSTypeAliasDeclaration": {
99
+ const val = createNode();
100
+ val.props.prototype = createNode();
101
+ val.props.prototype.type = "object";
102
+ val.type = "object";
103
+ val.value = node;
104
+ return val;
105
+ }
106
+ case "AssignmentExpression": return createSymbol(node.left, globals, node.right, scope, opts);
107
+ case "ClassBody": {
108
+ const val = createNode();
109
+ for (const method of node.body) {
110
+ if (!("key" in method)) continue;
111
+ val.props[method.key.name] = createNode();
112
+ /** @type {{[key: string]: CreatedNode}} */ val.props[method.key.name].type = "object";
113
+ /** @type {{[key: string]: CreatedNode}} */ val.props[method.key.name].value = method.value;
114
+ }
115
+ val.type = "object";
116
+ val.value = node.parent;
117
+ return val;
118
+ }
119
+ case "ClassExpression": return getSymbol(node.body, globals, scope, opts);
120
+ case "Identifier": return getIdentifier(node, globals, scope, opts);
121
+ case "Literal": {
122
+ const val = createNode();
123
+ val.type = "literal";
124
+ val.value = node;
125
+ return val;
126
+ }
127
+ case "MemberExpression": {
128
+ const obj = getSymbol(node.object, globals, scope, opts);
129
+ const propertySymbol = getSymbol(node.property, globals, scope, { simpleIdentifier: !node.computed });
130
+ const propertyValue = getSymbolValue(propertySymbol);
131
+ /* c8 ignore else */
132
+ if (obj && propertyValue && obj.props[propertyValue]) {
133
+ const block = obj.props[propertyValue];
134
+ return block;
135
+ }
136
+ /* c8 ignore next 11 */
137
+ debug(`MemberExpression: Missing property ${node.property.name}`);
138
+ /* c8 ignore next 2 */
139
+ return null;
140
+ }
141
+ case "ObjectExpression": {
142
+ const val = createNode();
143
+ val.type = "object";
144
+ for (const prop of node.properties) {
145
+ if (["ExperimentalSpreadProperty", "SpreadElement"].includes(prop.type)) continue;
146
+ const propVal = getSymbol(
147
+ /** @type {import('estree').Property} */
148
+ prop.value,
149
+ globals,
150
+ scope,
151
+ opts
152
+ );
153
+ /* c8 ignore next 8 */
154
+ if (propVal) val.props[prop.key.name] = propVal;
155
+ }
156
+ return val;
157
+ }
158
+ }
159
+ /* c8 ignore next 2 */
160
+ return null;
161
+ };
162
+ /**
163
+ *
164
+ * @param {CreatedNode} block
165
+ * @param {string} name
166
+ * @param {CreatedNode|null} value
167
+ * @param {CreatedNode} globals
168
+ * @param {boolean|SymbolOptions|undefined} isGlobal
169
+ * @returns {void}
170
+ */
171
+ const createBlockSymbol = function(block, name, value, globals, isGlobal) {
172
+ block.props[name] = value;
173
+ if (isGlobal && globals.props.window && globals.props.window.special) globals.props.window.props[name] = value;
174
+ };
175
+ createSymbol = function(node, globals, value, scope, isGlobal) {
176
+ const block = scope || globals;
177
+ /* c8 ignore next 3 */
178
+ if (!node) return null;
179
+ let symbol;
180
+ switch (node.type) {
181
+ case "ClassDeclaration":
182
+ case "FunctionDeclaration":
183
+ case "TSEnumDeclaration":
184
+ case "TSInterfaceDeclaration":
185
+ case "TSTypeAliasDeclaration": {
186
+ const nde = node;
187
+ /* c8 ignore else */
188
+ if (nde.id && nde.id.type === "Identifier") return createSymbol(nde.id, globals, node, globals);
189
+ /* c8 ignore next 3 */
190
+ break;
191
+ }
192
+ case "Identifier": {
193
+ const nde = node;
194
+ if (value) {
195
+ const valueSymbol = getSymbol(value, globals, block);
196
+ /* c8 ignore else */
197
+ if (valueSymbol) {
198
+ createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);
199
+ return block.props[nde.name];
200
+ }
201
+ /* c8 ignore next 2 */
202
+ debug("Identifier: Missing value symbol for %s", nde.name);
203
+ } else {
204
+ createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);
205
+ return block.props[nde.name];
206
+ }
207
+ /* c8 ignore next 3 */
208
+ break;
209
+ }
210
+ case "MemberExpression": {
211
+ const nde = node;
212
+ symbol = getSymbol(nde.object, globals, block);
213
+ const propertySymbol = getSymbol(nde.property, globals, block, { simpleIdentifier: !nde.computed });
214
+ const propertyValue = getSymbolValue(propertySymbol);
215
+ if (symbol && propertyValue) {
216
+ createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);
217
+ return symbol.props[propertyValue];
218
+ }
219
+ debug(
220
+ "MemberExpression: Missing symbol: %s",
221
+ /** @type {import('estree').Identifier} */
222
+ nde.property.name
223
+ );
224
+ break;
225
+ }
226
+ }
227
+ return null;
228
+ };
229
+ /**
230
+ * Creates variables from variable definitions
231
+ * @param {import('eslint').Rule.Node} node
232
+ * @param {CreatedNode} globals
233
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts
234
+ * @returns {void}
235
+ */
236
+ const initVariables = function(node, globals, opts) {
237
+ switch (node.type) {
238
+ case "ExportNamedDeclaration":
239
+ if (node.declaration) initVariables(node.declaration, globals, opts);
240
+ break;
241
+ case "ExpressionStatement":
242
+ initVariables(node.expression, globals, opts);
243
+ break;
244
+ case "Program":
245
+ for (const childNode of node.body) initVariables(childNode, globals, opts);
246
+ break;
247
+ case "VariableDeclaration":
248
+ for (const declaration of node.declarations) {
249
+ const symbol = createSymbol(declaration.id, globals, null, globals);
250
+ if (opts.initWindow && node.kind === "var" && globals.props.window) globals.props.window.props[declaration.id.name] = symbol;
251
+ }
252
+ break;
253
+ }
254
+ };
255
+ /**
256
+ * Populates variable maps using AST
257
+ * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node
258
+ * @param {CreatedNode} globals
259
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
260
+ * @param {true} [isExport]
261
+ * @returns {boolean}
262
+ */
263
+ const mapVariables = function(node, globals, opt, isExport) {
264
+ /* c8 ignore next */
265
+ const opts = opt || {};
266
+ /* c8 ignore next */
267
+ switch (node.type) {
268
+ case "AssignmentExpression":
269
+ createSymbol(node.left, globals, node.right);
270
+ break;
271
+ case "ClassDeclaration":
272
+ createSymbol(node.id, globals, node.body, globals);
273
+ break;
274
+ case "ExportDefaultDeclaration": {
275
+ const symbol = createSymbol(node.declaration, globals, node.declaration);
276
+ if (symbol) symbol.exported = true;
277
+ else globals.ANONYMOUS_DEFAULT = node.declaration;
278
+ break;
279
+ }
280
+ case "ExportNamedDeclaration":
281
+ if (node.declaration) if (node.declaration.type === "VariableDeclaration") mapVariables(node.declaration, globals, opts, true);
282
+ else {
283
+ const symbol = createSymbol(node.declaration, globals, node.declaration);
284
+ /* c8 ignore next 3 */
285
+ if (symbol) symbol.exported = true;
286
+ }
287
+ for (const specifier of node.specifiers) mapVariables(specifier, globals, opts);
288
+ break;
289
+ case "ExportSpecifier": {
290
+ const symbol = getSymbol(node.local, globals, globals);
291
+ /* c8 ignore next 3 */
292
+ if (symbol) symbol.exported = true;
293
+ break;
294
+ }
295
+ case "ExpressionStatement":
296
+ mapVariables(node.expression, globals, opts);
297
+ break;
298
+ case "FunctionDeclaration":
299
+ case "TSTypeAliasDeclaration":
300
+ /* c8 ignore next 10 */
301
+ if (node.id.type === "Identifier") createSymbol(node.id, globals, node, globals, true);
302
+ break;
303
+ case "Program":
304
+ if (opts.ancestorsOnly) return false;
305
+ for (const childNode of node.body) mapVariables(childNode, globals, opts);
306
+ break;
307
+ case "VariableDeclaration":
308
+ for (const declaration of node.declarations) {
309
+ const isGlobal = Boolean(opts.initWindow && node.kind === "var" && globals.props.window);
310
+ const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);
311
+ if (symbol && isExport) symbol.exported = true;
312
+ }
313
+ break;
314
+ default:
315
+ /* c8 ignore next */
316
+ return false;
317
+ }
318
+ return true;
319
+ };
320
+ /**
321
+ *
322
+ * @param {import('eslint').Rule.Node} node
323
+ * @param {CreatedNode|ValueObject|string|undefined|
324
+ * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block
325
+ * @param {(CreatedNode|ValueObject|string|
326
+ * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]
327
+ * @returns {boolean}
328
+ */
329
+ const findNode = function(node, block, cache) {
330
+ let blockCache = cache || [];
331
+ if (!block || blockCache.includes(block)) return false;
332
+ blockCache = blockCache.slice();
333
+ blockCache.push(block);
334
+ if (typeof block === "object" && "type" in block && (block.type === "object" || block.type === "MethodDefinition") && block.value === node) return true;
335
+ if (typeof block !== "object") return false;
336
+ const props = "props" in block && block.props || "body" in block && block.body;
337
+ for (const propval of Object.values(props || {})) if (Array.isArray(propval)) {
338
+ /* c8 ignore next 5 */
339
+ if (propval.some((val) => {
340
+ return findNode(node, val, blockCache);
341
+ })) return true;
342
+ } else if (findNode(node, propval, blockCache)) return true;
343
+ return false;
344
+ };
345
+ const exportTypes = new Set(["ExportDefaultDeclaration", "ExportNamedDeclaration"]);
346
+ const ignorableNestedTypes = new Set([
347
+ "ArrowFunctionExpression",
348
+ "FunctionDeclaration",
349
+ "FunctionExpression"
350
+ ]);
351
+ /**
352
+ * @param {import('eslint').Rule.Node} nde
353
+ * @returns {import('eslint').Rule.Node|false}
354
+ */
355
+ const getExportAncestor = function(nde) {
356
+ let node = nde;
357
+ let idx = 0;
358
+ const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);
359
+ while (node) {
360
+ if (idx >= 2 && ignorableIfDeep) break;
361
+ if (exportTypes.has(node.type)) return node;
362
+ node = node.parent;
363
+ idx++;
364
+ }
365
+ return false;
366
+ };
367
+ const canBeExportedByAncestorType = new Set([
368
+ "ClassProperty",
369
+ "Method",
370
+ "PropertyDefinition",
371
+ "TSMethodSignature",
372
+ "TSPropertySignature"
373
+ ]);
374
+ const canExportChildrenType = new Set([
375
+ "ClassBody",
376
+ "ClassDeclaration",
377
+ "ClassDefinition",
378
+ "ClassExpression",
379
+ "Program",
380
+ "TSInterfaceBody",
381
+ "TSInterfaceDeclaration",
382
+ "TSTypeAliasDeclaration",
383
+ "TSTypeLiteral",
384
+ "TSTypeParameterInstantiation",
385
+ "TSTypeReference"
386
+ ]);
387
+ /**
388
+ * @param {import('eslint').Rule.Node} nde
389
+ * @returns {false|import('eslint').Rule.Node}
390
+ */
391
+ const isExportByAncestor = function(nde) {
392
+ if (!canBeExportedByAncestorType.has(nde.type)) return false;
393
+ let node = nde.parent;
394
+ while (node) {
395
+ if (exportTypes.has(node.type)) return node;
396
+ if (!canExportChildrenType.has(node.type)) return false;
397
+ node = node.parent;
398
+ }
399
+ return false;
400
+ };
401
+ /**
402
+ *
403
+ * @param {CreatedNode} block
404
+ * @param {import('eslint').Rule.Node} node
405
+ * @param {CreatedNode[]} [cache] Currently unused
406
+ * @returns {boolean}
407
+ */
408
+ const findExportedNode = function(block, node, cache) {
409
+ /* c8 ignore next 3 */
410
+ if (block === null) return false;
411
+ const blockCache = cache || [];
412
+ const { props } = block;
413
+ for (const propval of Object.values(props)) {
414
+ const pval = propval;
415
+ blockCache.push(pval);
416
+ if (pval.exported && (node === pval.value || findNode(node, pval.value))) return true;
417
+ }
418
+ return false;
419
+ };
420
+ /**
421
+ *
422
+ * @param {import('eslint').Rule.Node} node
423
+ * @param {CreatedNode} globals
424
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
425
+ * @returns {boolean}
426
+ */
427
+ const isNodeExported = function(node, globals, opt) {
428
+ const moduleExports = globals.props.module?.props?.exports;
429
+ if (opt.initModuleExports && moduleExports && findNode(node, moduleExports)) return true;
430
+ if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) return true;
431
+ if (opt.esm && findExportedNode(globals, node)) return true;
432
+ return false;
433
+ };
434
+ /**
435
+ *
436
+ * @param {import('eslint').Rule.Node} node
437
+ * @param {CreatedNode} globalVars
438
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts
439
+ * @returns {boolean}
440
+ */
441
+ const parseRecursive = function(node, globalVars, opts) {
442
+ if (node.parent && parseRecursive(node.parent, globalVars, opts)) return true;
443
+ return mapVariables(node, globalVars, opts);
444
+ };
445
+ /**
446
+ *
447
+ * @param {import('eslint').Rule.Node} ast
448
+ * @param {import('eslint').Rule.Node} node
449
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
450
+ * @returns {CreatedNode}
451
+ */
452
+ const parse$1 = function(ast, node, opt) {
453
+ /* c8 ignore next 6 */
454
+ const opts = opt || {
455
+ ancestorsOnly: false,
456
+ esm: true,
457
+ initModuleExports: true,
458
+ initWindow: true
459
+ };
460
+ const globalVars = createNode();
461
+ if (opts.initModuleExports) {
462
+ globalVars.props.module = createNode();
463
+ globalVars.props.module.props.exports = createNode();
464
+ globalVars.props.exports = globalVars.props.module.props.exports;
465
+ }
466
+ if (opts.initWindow) {
467
+ globalVars.props.window = createNode();
468
+ globalVars.props.window.special = true;
469
+ }
470
+ if (opts.ancestorsOnly) parseRecursive(node, globalVars, opts);
471
+ else {
472
+ initVariables(ast, globalVars, opts);
473
+ mapVariables(ast, globalVars, opts);
474
+ }
475
+ return {
476
+ globalVars,
477
+ props: {}
478
+ };
479
+ };
480
+ const accessibilityNodes = new Set(["MethodDefinition", "PropertyDefinition"]);
481
+ /**
482
+ *
483
+ * @param {import('eslint').Rule.Node} node
484
+ * @returns {boolean}
485
+ */
486
+ const isPrivate = (node) => {
487
+ return accessibilityNodes.has(node.type) && "accessibility" in node && node.accessibility !== "public" && node.accessibility !== void 0 || "key" in node && node.key.type === "PrivateIdentifier";
488
+ };
489
+ /**
490
+ *
491
+ * @param {import('eslint').Rule.Node} node
492
+ * @param {import('eslint').SourceCode} sourceCode
493
+ * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt
494
+ * @param {import('./iterateJsdoc.js').Settings} settings
495
+ * @returns {boolean}
496
+ */
497
+ const isUncommentedExport = function(node, sourceCode, opt, settings) {
498
+ if (opt.esm) {
499
+ if (isPrivate(node) || node.parent && isPrivate(node.parent)) return false;
500
+ const exportNode = getExportAncestor(node);
501
+ if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) return true;
502
+ /**
503
+ * Some typescript types are not in variable map, but inherit exported (interface property and method)
504
+ */
505
+ if (isExportByAncestor(node) && !findJSDocComment(node, sourceCode, settings)) return true;
506
+ }
507
+ const ast = sourceCode.ast;
508
+ const parseResult = parse$1(ast, node, opt);
509
+ return isNodeExported(node, parseResult.globalVars, opt);
510
+ };
511
+ var exportParser_default = {
512
+ isUncommentedExport,
513
+ parse: parse$1
514
+ };
515
+
516
+ //#endregion
517
+ export { exportParser_default as default };
518
+ //# sourceMappingURL=exportParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportParser.js","names":["parse"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* c8 ignore next 3 */\n if (!symbol) {\n return null;\n }\n\n /* c8 ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* c8 ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* c8 ignore next 3 */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n /* eslint-enable complexity -- Temporary */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n /* c8 ignore next 4 -- No longer needed? */\n case 'ArrowFunctionExpression':\n\n // Fallthrough\n case 'ClassDeclaration':\n\n case 'FunctionDeclaration':\n\n case 'FunctionExpression':\n case 'TSEnumDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n // StaticBlock\n if (!('key' in method)) {\n continue;\n }\n\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* c8 ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n /* c8 ignore next 11 */\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n /* c8 ignore next 2 */\n return null;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n\n // typescript-eslint, espree, acorn, etc.\n 'SpreadElement',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* c8 ignore next 8 */\n if (propVal) {\n val.props[\n /** @type {import('estree').PrivateIdentifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* c8 ignore next 3 */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'FunctionDeclaration': case 'TSEnumDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* c8 ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* c8 ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n }\n};\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* eslint-enable complexity -- Temporary */\n /* c8 ignore next */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n /* c8 ignore next 6 */\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'FunctionDeclaration':\n\n case 'TSTypeAliasDeclaration': {\n /* c8 ignore next 10 */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n default: {\n /* c8 ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* c8 ignore next 5 */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'ClassProperty',\n 'Method',\n 'PropertyDefinition',\n 'TSMethodSignature',\n 'TSPropertySignature',\n]);\n\nconst canExportChildrenType = new Set([\n 'ClassBody',\n 'ClassDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeAliasDeclaration',\n 'TSTypeLiteral',\n 'TSTypeParameterInstantiation',\n 'TSTypeReference',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* c8 ignore next 3 */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* c8 ignore next 6 */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'MethodDefinition',\n 'PropertyDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst isPrivate = (node) => {\n return accessibilityNodes.has(node.type) &&\n (\n 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined\n ) ||\n 'key' in node &&\n node.key.type === 'PrivateIdentifier';\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (isPrivate(node) ||\n node.parent && isPrivate(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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"}