@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -1
  3. package/bundlers/esbuild-impl/change-extension-plugin/package.json +6 -0
  4. package/bundlers/esbuild-impl/custom-esbuild-options-plugin/package.json +6 -0
  5. package/bundlers/esbuild-impl/fix-esm-plugin/package.json +6 -0
  6. package/bundlers/esbuild-impl/index/package.json +6 -0
  7. package/bundlers/esbuild-impl/package.json +6 -0
  8. package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
  9. package/bundlers/esbuild-impl/svelte-wrapper-plugin/package.json +6 -0
  10. package/bundlers/index/package.json +6 -0
  11. package/bundlers/package.json +6 -0
  12. package/dist/lib/cjs/build.cjs +191 -0
  13. package/dist/lib/cjs/build.d.cts +59 -0
  14. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +139 -0
  15. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +25 -0
  16. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +96 -0
  17. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +14 -0
  18. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +106 -0
  19. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +13 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +111 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +6 -0
  22. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +211 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +143 -0
  24. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +129 -0
  25. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +14 -0
  26. package/dist/lib/cjs/bundlers/index.cjs +99 -0
  27. package/dist/lib/cjs/bundlers/index.d.cts +2 -0
  28. package/dist/lib/cjs/check-project-types.cjs +163 -0
  29. package/dist/lib/cjs/check-project-types.d.cts +92 -0
  30. package/dist/lib/cjs/cli-utils.cjs +276 -0
  31. package/dist/lib/cjs/cli-utils.d.cts +123 -0
  32. package/dist/lib/cjs/code-generator.cjs +96 -0
  33. package/dist/lib/cjs/code-generator.d.cts +14 -0
  34. package/dist/lib/cjs/commitlint-config.cjs +110 -0
  35. package/dist/lib/cjs/commitlint-config.d.cts +14 -0
  36. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +110 -0
  37. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +37 -0
  38. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +126 -0
  39. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +40 -0
  40. package/dist/lib/cjs/env-toggle.cjs +133 -0
  41. package/dist/lib/cjs/env-toggle.d.cts +42 -0
  42. package/dist/lib/cjs/exec.cjs +455 -0
  43. package/dist/lib/cjs/exec.d.cts +162 -0
  44. package/dist/lib/cjs/forbidden-patterns.cjs +157 -0
  45. package/dist/lib/cjs/forbidden-patterns.d.cts +57 -0
  46. package/dist/lib/cjs/formatters/dprint.cjs +108 -0
  47. package/dist/lib/cjs/formatters/dprint.d.cts +33 -0
  48. package/dist/lib/cjs/formatters/index.cjs +99 -0
  49. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  50. package/dist/lib/cjs/fs.cjs +123 -0
  51. package/dist/lib/cjs/fs.d.cts +80 -0
  52. package/dist/lib/cjs/gate.cjs +140 -0
  53. package/dist/lib/cjs/gate.d.cts +93 -0
  54. package/dist/lib/cjs/git.cjs +109 -0
  55. package/dist/lib/cjs/git.d.cts +37 -0
  56. package/dist/lib/cjs/index.cjs +186 -0
  57. package/dist/lib/cjs/index.d.cts +35 -0
  58. package/dist/lib/cjs/json.cjs +141 -0
  59. package/dist/lib/cjs/json.d.cts +102 -0
  60. package/dist/lib/cjs/library-build.cjs +483 -0
  61. package/dist/lib/cjs/library-build.d.cts +101 -0
  62. package/dist/lib/cjs/library-references.d.cts +5 -0
  63. package/dist/lib/cjs/linters/cspell-content.cjs +124 -0
  64. package/dist/lib/cjs/linters/cspell-content.d.cts +46 -0
  65. package/dist/lib/cjs/linters/cspell.cjs +103 -0
  66. package/dist/lib/cjs/linters/cspell.d.cts +36 -0
  67. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +94 -0
  68. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +49 -0
  69. package/dist/lib/cjs/linters/eslint-config.cjs +1068 -0
  70. package/dist/lib/cjs/linters/eslint-config.d.cts +123 -0
  71. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +130 -0
  72. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +27 -0
  73. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +116 -0
  74. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +26 -0
  75. package/dist/lib/cjs/linters/eslint-rules/index.cjs +132 -0
  76. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +13 -0
  77. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +175 -0
  78. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +10 -0
  79. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +290 -0
  80. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +10 -0
  81. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +265 -0
  82. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +41 -0
  83. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +134 -0
  84. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +20 -0
  85. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +217 -0
  86. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +36 -0
  87. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +126 -0
  88. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +10 -0
  89. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +125 -0
  90. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +20 -0
  91. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +181 -0
  92. package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +14 -0
  93. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +217 -0
  94. package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +10 -0
  95. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +92 -0
  96. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +18 -0
  97. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +92 -0
  98. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +23 -0
  99. package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +20 -0
  100. package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +17 -0
  101. package/dist/lib/cjs/linters/eslint.cjs +196 -0
  102. package/dist/lib/cjs/linters/eslint.d.cts +74 -0
  103. package/dist/lib/cjs/linters/index.cjs +138 -0
  104. package/dist/lib/cjs/linters/index.d.cts +15 -0
  105. package/dist/lib/cjs/linters/lint-ignores.cjs +91 -0
  106. package/dist/lib/cjs/linters/lint-ignores.d.cts +30 -0
  107. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +169 -0
  108. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +11 -0
  109. package/dist/lib/cjs/linters/markdownlint-content.cjs +120 -0
  110. package/dist/lib/cjs/linters/markdownlint-content.d.cts +47 -0
  111. package/dist/lib/cjs/linters/markdownlint-ignores.cjs +95 -0
  112. package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +35 -0
  113. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +99 -0
  114. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  115. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +152 -0
  116. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +35 -0
  117. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1344 -0
  118. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +67 -0
  119. package/dist/lib/cjs/linters/markdownlint.cjs +151 -0
  120. package/dist/lib/cjs/linters/markdownlint.d.cts +32 -0
  121. package/dist/lib/cjs/linters/over-exposure.cjs +685 -0
  122. package/dist/lib/cjs/linters/over-exposure.d.cts +357 -0
  123. package/dist/lib/cjs/nano-staged-config.cjs +148 -0
  124. package/dist/lib/cjs/nano-staged-config.d.cts +54 -0
  125. package/dist/lib/cjs/npm-publish.cjs +93 -0
  126. package/dist/lib/cjs/npm-publish.d.cts +19 -0
  127. package/dist/lib/cjs/npm-run.cjs +120 -0
  128. package/dist/lib/cjs/npm-run.d.cts +34 -0
  129. package/dist/lib/cjs/npm.cjs +200 -0
  130. package/dist/lib/cjs/npm.d.cts +168 -0
  131. package/dist/lib/cjs/package-lock-integrity.cjs +134 -0
  132. package/dist/lib/cjs/package-lock-integrity.d.cts +38 -0
  133. package/dist/lib/cjs/package-manager.cjs +291 -0
  134. package/dist/lib/cjs/package-manager.d.cts +93 -0
  135. package/dist/lib/cjs/released-issues.cjs +178 -0
  136. package/dist/lib/cjs/released-issues.d.cts +79 -0
  137. package/dist/lib/cjs/repo-paths.cjs +167 -0
  138. package/dist/lib/cjs/repo-paths.d.cts +318 -0
  139. package/dist/lib/cjs/root.cjs +150 -0
  140. package/dist/lib/cjs/root.d.cts +107 -0
  141. package/dist/lib/cjs/test-runners/index.cjs +102 -0
  142. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  143. package/dist/lib/cjs/test-runners/vitest-config.cjs +126 -0
  144. package/dist/lib/cjs/test-runners/vitest-config.d.cts +90 -0
  145. package/dist/lib/cjs/test-runners/vitest.cjs +115 -0
  146. package/dist/lib/cjs/test-runners/vitest.d.cts +52 -0
  147. package/dist/lib/cjs/validate-declarations.cjs +120 -0
  148. package/dist/lib/cjs/validate-declarations.d.cts +37 -0
  149. package/dist/lib/cjs/version.cjs +758 -0
  150. package/dist/lib/cjs/version.d.cts +418 -0
  151. package/dist/lib/esm/build.d.mts +59 -0
  152. package/dist/lib/esm/build.mjs +165 -0
  153. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +25 -0
  154. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +101 -0
  155. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +14 -0
  156. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +59 -0
  157. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +13 -0
  158. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +69 -0
  159. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +6 -0
  160. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +60 -0
  161. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +143 -0
  162. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +176 -0
  163. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +14 -0
  164. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +82 -0
  165. package/dist/lib/esm/bundlers/index.d.mts +2 -0
  166. package/dist/lib/esm/bundlers/index.mjs +52 -0
  167. package/dist/lib/esm/check-project-types.d.mts +92 -0
  168. package/dist/lib/esm/check-project-types.mjs +123 -0
  169. package/dist/lib/esm/cli-utils.d.mts +123 -0
  170. package/dist/lib/esm/cli-utils.mjs +225 -0
  171. package/dist/lib/esm/code-generator.d.mts +14 -0
  172. package/dist/lib/esm/code-generator.mjs +59 -0
  173. package/dist/lib/esm/commitlint-config.d.mts +14 -0
  174. package/dist/lib/esm/commitlint-config.mjs +79 -0
  175. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +37 -0
  176. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +75 -0
  177. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +40 -0
  178. package/dist/lib/esm/commitlint-spellcheck-header.mjs +87 -0
  179. package/dist/lib/esm/env-toggle.d.mts +42 -0
  180. package/dist/lib/esm/env-toggle.mjs +84 -0
  181. package/dist/lib/esm/exec.d.mts +162 -0
  182. package/dist/lib/esm/exec.mjs +410 -0
  183. package/dist/lib/esm/forbidden-patterns.d.mts +57 -0
  184. package/dist/lib/esm/forbidden-patterns.mjs +108 -0
  185. package/dist/lib/esm/formatters/dprint.d.mts +33 -0
  186. package/dist/lib/esm/formatters/dprint.mjs +75 -0
  187. package/dist/lib/esm/formatters/index.d.mts +2 -0
  188. package/dist/lib/esm/formatters/index.mjs +52 -0
  189. package/dist/lib/esm/fs.d.mts +80 -0
  190. package/dist/lib/esm/fs.mjs +89 -0
  191. package/dist/lib/esm/gate.d.mts +93 -0
  192. package/dist/lib/esm/gate.mjs +106 -0
  193. package/dist/lib/esm/git.d.mts +37 -0
  194. package/dist/lib/esm/git.mjs +72 -0
  195. package/dist/lib/esm/index.d.mts +35 -0
  196. package/dist/lib/esm/index.mjs +110 -0
  197. package/dist/lib/esm/json.d.mts +102 -0
  198. package/dist/lib/esm/json.mjs +106 -0
  199. package/dist/lib/esm/library-build.d.mts +101 -0
  200. package/dist/lib/esm/library-build.mjs +443 -0
  201. package/dist/lib/esm/library-references.d.mts +5 -0
  202. package/dist/lib/esm/linters/cspell-content.d.mts +46 -0
  203. package/dist/lib/esm/linters/cspell-content.mjs +87 -0
  204. package/dist/lib/esm/linters/cspell.d.mts +36 -0
  205. package/dist/lib/esm/linters/cspell.mjs +69 -0
  206. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +49 -0
  207. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +57 -0
  208. package/dist/lib/esm/linters/eslint-config.d.mts +123 -0
  209. package/dist/lib/esm/linters/eslint-config.mjs +1022 -0
  210. package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +27 -0
  211. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +93 -0
  212. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +26 -0
  213. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +77 -0
  214. package/dist/lib/esm/linters/eslint-rules/index.d.mts +13 -0
  215. package/dist/lib/esm/linters/eslint-rules/index.mjs +74 -0
  216. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +10 -0
  217. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +144 -0
  218. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +10 -0
  219. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +277 -0
  220. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +41 -0
  221. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +227 -0
  222. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +20 -0
  223. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +96 -0
  224. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +36 -0
  225. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +179 -0
  226. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +10 -0
  227. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +88 -0
  228. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +20 -0
  229. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +87 -0
  230. package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +14 -0
  231. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +142 -0
  232. package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +10 -0
  233. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +183 -0
  234. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +18 -0
  235. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +55 -0
  236. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +23 -0
  237. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +55 -0
  238. package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +20 -0
  239. package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +17 -0
  240. package/dist/lib/esm/linters/eslint.d.mts +74 -0
  241. package/dist/lib/esm/linters/eslint.mjs +159 -0
  242. package/dist/lib/esm/linters/index.d.mts +15 -0
  243. package/dist/lib/esm/linters/index.mjs +78 -0
  244. package/dist/lib/esm/linters/lint-ignores.d.mts +30 -0
  245. package/dist/lib/esm/linters/lint-ignores.mjs +54 -0
  246. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +11 -0
  247. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +122 -0
  248. package/dist/lib/esm/linters/markdownlint-content.d.mts +47 -0
  249. package/dist/lib/esm/linters/markdownlint-content.mjs +83 -0
  250. package/dist/lib/esm/linters/markdownlint-ignores.d.mts +35 -0
  251. package/dist/lib/esm/linters/markdownlint-ignores.mjs +57 -0
  252. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  253. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +52 -0
  254. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +35 -0
  255. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +114 -0
  256. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1344 -0
  257. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +67 -0
  258. package/dist/lib/esm/linters/markdownlint.d.mts +32 -0
  259. package/dist/lib/esm/linters/markdownlint.mjs +124 -0
  260. package/dist/lib/esm/linters/over-exposure.d.mts +357 -0
  261. package/dist/lib/esm/linters/over-exposure.mjs +672 -0
  262. package/dist/lib/esm/nano-staged-config.d.mts +54 -0
  263. package/dist/lib/esm/nano-staged-config.mjs +103 -0
  264. package/dist/lib/esm/npm-publish.d.mts +19 -0
  265. package/dist/lib/esm/npm-publish.mjs +56 -0
  266. package/dist/lib/esm/npm-run.d.mts +34 -0
  267. package/dist/lib/esm/npm-run.mjs +81 -0
  268. package/dist/lib/esm/npm.d.mts +168 -0
  269. package/dist/lib/esm/npm.mjs +155 -0
  270. package/dist/lib/esm/package-lock-integrity.d.mts +38 -0
  271. package/dist/lib/esm/package-lock-integrity.mjs +99 -0
  272. package/dist/lib/esm/package-manager.d.mts +93 -0
  273. package/dist/lib/esm/package-manager.mjs +245 -0
  274. package/dist/lib/esm/released-issues.d.mts +79 -0
  275. package/dist/lib/esm/released-issues.mjs +143 -0
  276. package/dist/lib/esm/repo-paths.d.mts +318 -0
  277. package/dist/lib/esm/repo-paths.mjs +130 -0
  278. package/dist/lib/esm/root.d.mts +107 -0
  279. package/dist/lib/esm/root.mjs +115 -0
  280. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  281. package/dist/lib/esm/test-runners/index.mjs +54 -0
  282. package/dist/lib/esm/test-runners/vitest-config.d.mts +90 -0
  283. package/dist/lib/esm/test-runners/vitest-config.mjs +86 -0
  284. package/dist/lib/esm/test-runners/vitest.d.mts +52 -0
  285. package/dist/lib/esm/test-runners/vitest.mjs +76 -0
  286. package/dist/lib/esm/validate-declarations.d.mts +37 -0
  287. package/dist/lib/esm/validate-declarations.mjs +87 -0
  288. package/dist/lib/esm/version.d.mts +418 -0
  289. package/dist/lib/esm/version.mjs +723 -0
  290. package/formatters/dprint/package.json +6 -0
  291. package/formatters/index/package.json +6 -0
  292. package/formatters/package.json +6 -0
  293. package/linters/cspell/package.json +6 -0
  294. package/linters/cspell-content/package.json +6 -0
  295. package/linters/eslint/package.json +6 -0
  296. package/linters/eslint-agnostic-core-boundary/package.json +6 -0
  297. package/linters/eslint-config/package.json +6 -0
  298. package/linters/eslint-no-restricted-syntax/package.json +6 -0
  299. package/linters/eslint-rules/in-house-plugin/package.json +6 -0
  300. package/linters/eslint-rules/index/package.json +6 -0
  301. package/linters/eslint-rules/no-async-callback-to-unsafe-return/package.json +6 -0
  302. package/linters/eslint-rules/no-unresolved-jsdoc-link/package.json +6 -0
  303. package/linters/eslint-rules/no-unused-params-members/package.json +6 -0
  304. package/linters/eslint-rules/no-used-underscore-variables/package.json +6 -0
  305. package/linters/eslint-rules/package.json +6 -0
  306. package/linters/eslint-rules/params-options-name-match/package.json +6 -0
  307. package/linters/eslint-rules/prefer-noop-async/package.json +6 -0
  308. package/linters/eslint-rules/readonly-params-options-result-members/package.json +6 -0
  309. package/linters/eslint-rules/require-method-template/package.json +6 -0
  310. package/linters/eslint-rules/require-super-call/package.json +6 -0
  311. package/linters/eslint-rules/rule-tester-helper/package.json +6 -0
  312. package/linters/eslint-rules/ts-estree-node/package.json +6 -0
  313. package/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs/package.json +4 -0
  314. package/linters/eslint-types/@types/eslint-plugin-verify-tsdoc/package.json +4 -0
  315. package/linters/index/package.json +6 -0
  316. package/linters/lint-ignores/package.json +6 -0
  317. package/linters/markdownlint/package.json +6 -0
  318. package/linters/markdownlint-cli2-config/package.json +6 -0
  319. package/linters/markdownlint-content/package.json +6 -0
  320. package/linters/markdownlint-ignores/package.json +6 -0
  321. package/linters/markdownlint-rules/index/package.json +6 -0
  322. package/linters/markdownlint-rules/no-soft-break-in-paragraph/package.json +6 -0
  323. package/linters/markdownlint-rules/package.json +6 -0
  324. package/linters/markdownlint-types/@types/markdownlint-cli2/package.json +4 -0
  325. package/linters/markdownlint-types/@types/markdownlint-cli2-config-schema/package.json +4 -0
  326. package/linters/over-exposure/package.json +6 -0
  327. package/linters/package.json +6 -0
  328. package/package.json +329 -13
  329. package/test-runners/index/package.json +6 -0
  330. package/test-runners/package.json +6 -0
  331. package/test-runners/vitest/package.json +6 -0
  332. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,175 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ const existingProcess = globalThis.process;
23
+
24
+ if (!existingProcess) {
25
+ globalThis.process = browserProcess;
26
+ return;
27
+ }
28
+
29
+ if (existingProcess.versions?.node) {
30
+ return;
31
+ }
32
+
33
+ const existingProcessRecord = existingProcess;
34
+
35
+ for (const [key, value] of Object.entries(browserProcess)) {
36
+ existingProcessRecord[key] ??= value;
37
+ }
38
+
39
+ existingProcessRecord['browser'] = true;
40
+ }
41
+
42
+ function keepName($unknown) {
43
+ return $unknown;
44
+ }
45
+
46
+ (function initCjs() {
47
+ const globalThisRecord = globalThis;
48
+ ensureDisposeSymbols();
49
+ globalThisRecord['__name'] ??= keepName;
50
+ globalThisRecord['__extractDefault'] ??= extractDefault;
51
+
52
+ ensureBrowserProcess();
53
+
54
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
+ function extractDefault(module) {
56
+ return module && module.__esModule && 'default' in module ? module.default : module;
57
+ }
58
+ })();
59
+ })();
60
+
61
+ "use strict";
62
+ var __defProp = Object.defineProperty;
63
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
64
+ var __getOwnPropNames = Object.getOwnPropertyNames;
65
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
66
+ var __export = (target, all) => {
67
+ for (var name in all)
68
+ __defProp(target, name, { get: all[name], enumerable: true });
69
+ };
70
+ var __copyProps = (to, from, except, desc) => {
71
+ if (from && typeof from === "object" || typeof from === "function") {
72
+ for (let key of __getOwnPropNames(from))
73
+ if (!__hasOwnProp.call(to, key) && key !== except)
74
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
75
+ }
76
+ return to;
77
+ };
78
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
79
+ var no_async_callback_to_unsafe_return_exports = {};
80
+ __export(no_async_callback_to_unsafe_return_exports, {
81
+ MESSAGE_ID: () => MESSAGE_ID,
82
+ noAsyncCallbackToUnsafeReturn: () => noAsyncCallbackToUnsafeReturn
83
+ });
84
+ module.exports = __toCommonJS(no_async_callback_to_unsafe_return_exports);
85
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
86
+ var import_typescript = require('typescript');
87
+ var import_ts_estree_node = require('./ts-estree-node.cjs');
88
+ const MESSAGE_ID = "noAsyncCallbackToUnsafeReturn";
89
+ function hasUnsafeReturnCallSignature(checker, type) {
90
+ return type.getCallSignatures().some((sig) => isUnsafeReturnSignature(checker, sig));
91
+ }
92
+ function isAsyncFunctionNode(node) {
93
+ return (node.type === "ArrowFunctionExpression" || node.type === "FunctionExpression") && node.async;
94
+ }
95
+ const UNSAFE_RETURN_FLAGS = import_typescript.TypeFlags.Any | import_typescript.TypeFlags.Unknown;
96
+ const PROMISE_TYPE_NAMES = /* @__PURE__ */ new Set(["Promise", "PromiseLike"]);
97
+ function containsPromiseReference(checker, node) {
98
+ if ((0, import_typescript.isUnionTypeNode)(node)) {
99
+ return node.types.some((member) => containsPromiseReference(checker, member));
100
+ }
101
+ if ((0, import_typescript.isTypeReferenceNode)(node)) {
102
+ const name = (0, import_typescript.isIdentifier)(node.typeName) ? node.typeName.text : "";
103
+ if (PROMISE_TYPE_NAMES.has(name)) {
104
+ return true;
105
+ }
106
+ let $symbol = checker.getSymbolAtLocation(node.typeName);
107
+ if ($symbol && $symbol.flags & import_typescript.SymbolFlags.Alias) {
108
+ $symbol = checker.getAliasedSymbol($symbol);
109
+ }
110
+ const declaration = $symbol?.declarations?.[0];
111
+ if (declaration && (0, import_typescript.isTypeAliasDeclaration)(declaration)) {
112
+ return containsPromiseReference(checker, declaration.type);
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+ function isUnsafeReturnSignature(checker, sig) {
118
+ const returnType = checker.getReturnTypeOfSignature(sig);
119
+ if (!(returnType.flags & UNSAFE_RETURN_FLAGS)) {
120
+ return false;
121
+ }
122
+ const declaration = sig.getDeclaration();
123
+ const returnTypeNode = declaration.type;
124
+ (0, import_type_guards.assertNonNullable)(returnTypeNode, "Signature declarations with any/unknown return always have a return type annotation");
125
+ return !containsPromiseReference(checker, returnTypeNode);
126
+ }
127
+ const noAsyncCallbackToUnsafeReturn = {
128
+ create(context) {
129
+ const services = context.sourceCode.parserServices;
130
+ const checker = services.program.getTypeChecker();
131
+ return {
132
+ CallExpression(node) {
133
+ const callNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
134
+ for (let index = 0; index < callNode.arguments.length; index++) {
135
+ const argument = callNode.arguments[index];
136
+ if (!argument || !isAsyncFunctionNode(argument)) {
137
+ continue;
138
+ }
139
+ const tsCalleeNode = services.esTreeNodeToTSNodeMap.get(callNode.callee);
140
+ const calleeType = checker.getTypeAtLocation(tsCalleeNode);
141
+ for (const sig of calleeType.getCallSignatures()) {
142
+ const parameter = sig.getParameters()[index];
143
+ if (!parameter) {
144
+ continue;
145
+ }
146
+ const parameterType = checker.getTypeOfSymbol(parameter);
147
+ if (hasUnsafeReturnCallSignature(checker, parameterType)) {
148
+ context.report({
149
+ messageId: MESSAGE_ID,
150
+ node: argument
151
+ });
152
+ break;
153
+ }
154
+ }
155
+ }
156
+ }
157
+ };
158
+ },
159
+ meta: {
160
+ docs: {
161
+ description: "Disallow passing async functions as callbacks to parameters with `any` or `unknown` return type"
162
+ },
163
+ messages: {
164
+ [MESSAGE_ID]: "Async function passed as callback to a parameter with `any`/`unknown` return type. This may cause unhandled promise rejections. Wrap the call: `(...args) => { yourAsyncFn(...args); }`."
165
+ },
166
+ schema: [],
167
+ type: "problem"
168
+ }
169
+ };
170
+ // Annotate the CommonJS export names for ESM import in node:
171
+ 0 && (module.exports = {
172
+ MESSAGE_ID,
173
+ noAsyncCallbackToUnsafeReturn
174
+ });
175
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVyblxuICpcbiAqIFJlcG9ydHMgYW4gZXJyb3Igd2hlbiBhbiBhc3luYyBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjayBhcmd1bWVudFxuICogdG8gYSBmdW5jdGlvbiBwYXJhbWV0ZXIgd2hvc2UgcmV0dXJuIHR5cGUgaXMgYGFueWAgb3IgYHVua25vd25gLiBCZWNhdXNlXG4gKiB0aGVzZSB0eXBlcyBzaWxlbnRseSBhY2NlcHQgYFByb21pc2U8VD5gLCB0aGUgY2FsbGVyIHdvbid0IGF3YWl0IHRoZVxuICogcmVzdWx0LCBsZWFkaW5nIHRvIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnMgYXQgcnVudGltZS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gb25DbGljayhmbjogKGV2dDogTW91c2VFdmVudCkgPT4gYW55KVxuICogYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICogICBhd2FpdCBzb21lRm4oKTsgLy8gVW5oYW5kbGVkIHJlamVjdGlvbiBpZiBzb21lRm4gdGhyb3dzXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc2Agb25seSBjYXRjaGVzIGA9PiB2b2lkYCBjYWxsYmFja3MuXG4gKiBUaGlzIHJ1bGUgY2xvc2VzIHRoZSBnYXAgZm9yIGA9PiBhbnlgIGFuZCBgPT4gdW5rbm93bmAgY2FsbGJhY2tzLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIFNpZ25hdHVyZSxcbiAgVHlwZSxcbiAgVHlwZUNoZWNrZXIsXG4gIFR5cGVOb2RlXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBpc0lkZW50aWZpZXIsXG4gIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24sXG4gIGlzVHlwZVJlZmVyZW5jZU5vZGUsXG4gIGlzVW5pb25UeXBlTm9kZSxcbiAgU3ltYm9sRmxhZ3MsXG4gIFR5cGVGbGFnc1xufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYW4gYXN5bmMgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2sgdG8gYSBwYXJhbWV0ZXIgd2hvc2UgcmV0dXJuIHR5cGUgaXMgYGFueWAvYHVua25vd25gLCByaXNraW5nIGFuIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAnbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4nO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBUeXBlU2NyaXB0IHR5cGUgaXMgYSBmdW5jdGlvbiB0eXBlIHdpdGggYW4gdW5zYWZlXG4gKiByZXR1cm4gdHlwZSBmb3IgYXN5bmMgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSBjaGVja2VyIC0gVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHR5cGUgaGFzIGF0IGxlYXN0IG9uZSBjYWxsIHNpZ25hdHVyZSB3aXRoIGFuIHVuc2FmZSByZXR1cm4uXG4gKi9cbmZ1bmN0aW9uIGhhc1Vuc2FmZVJldHVybkNhbGxTaWduYXR1cmUoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHR5cGU6IFR5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGUuZ2V0Q2FsbFNpZ25hdHVyZXMoKS5zb21lKChzaWcpID0+IGlzVW5zYWZlUmV0dXJuU2lnbmF0dXJlKGNoZWNrZXIsIHNpZykpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBleHByZXNzaW9uIChhcnJvdyBvciByZWd1bGFyKS5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIEFTVCBub2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGFuIGFzeW5jIGFycm93IG9yIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGlzQXN5bmNGdW5jdGlvbk5vZGUobm9kZTogVFNFU1RyZWUuTm9kZSk6IG5vZGUgaXMgVFNFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfCBUU0VTVHJlZS5GdW5jdGlvbkV4cHJlc3Npb24ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gKG5vZGUudHlwZSA9PT0gJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSAmJiBub2RlLmFzeW5jO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgbWFzayBpcyBpZGlvbWF0aWMgZm9yIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuY29uc3QgVU5TQUZFX1JFVFVSTl9GTEFHUyA9IFR5cGVGbGFncy5BbnkgfCBUeXBlRmxhZ3MuVW5rbm93bjtcblxuY29uc3QgUFJPTUlTRV9UWVBFX05BTUVTID0gbmV3IFNldChbJ1Byb21pc2UnLCAnUHJvbWlzZUxpa2UnXSk7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIG5vZGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYFByb21pc2VgIG9yIGBQcm9taXNlTGlrZWAsXG4gKiBlaXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIHR5cGUgYWxpYXMuIFRoaXMgaW5kaWNhdGVzIHRoZSBjYWxsZXIgZXhwbGljaXRseVxuICogYWNjb3VudHMgZm9yIHByb21pc2UgcmV0dXJucy5cbiAqXG4gKiBAcGFyYW0gY2hlY2tlciAtIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG5vZGUgLSBUaGUgdHlwZSBub2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgcmVmZXJlbmNlcyBgUHJvbWlzZWAgb3IgYFByb21pc2VMaWtlYC5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNQcm9taXNlUmVmZXJlbmNlKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBub2RlOiBUeXBlTm9kZSk6IGJvb2xlYW4ge1xuICBpZiAoaXNVbmlvblR5cGVOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZXMuc29tZSgobWVtYmVyKSA9PiBjb250YWluc1Byb21pc2VSZWZlcmVuY2UoY2hlY2tlciwgbWVtYmVyKSk7XG4gIH1cblxuICBpZiAoaXNUeXBlUmVmZXJlbmNlTm9kZShub2RlKSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBRdWFsaWZpZWQgbmFtZXMgKGUuZy4sIG5zLlByb21pc2UpIGFuZCBpbXBvcnQgYWxpYXNlcyByZXF1aXJlIG11bHRpLWZpbGUgc2V0dXAgbm90IGF2YWlsYWJsZSBpbiBSdWxlVGVzdGVyLiAqL1xuICAgIGNvbnN0IG5hbWUgPSBpc0lkZW50aWZpZXIobm9kZS50eXBlTmFtZSkgPyBub2RlLnR5cGVOYW1lLnRleHQgOiAnJztcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGlmIChQUk9NSVNFX1RZUEVfTkFNRVMuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIHR5cGUgYWxpYXMgKGZvbGxvd2luZyBpbXBvcnRzKSBhbmQgY2hlY2sgaXRzIGRlZmluaXRpb24gYm9keVxuICAgIGxldCAkc3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUudHlwZU5hbWUpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbXBvcnQgYWxpYXNlcyByZXF1aXJlIG11bHRpLWZpbGUgc2V0dXAgbm90IGF2YWlsYWJsZSBpbiBSdWxlVGVzdGVyLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyBjaGVjayBpcyBpZGlvbWF0aWMgZm9yIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICAgIGlmICgkc3ltYm9sICYmICRzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykge1xuICAgICAgJHN5bWJvbCA9IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbCgkc3ltYm9sKTtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9ICRzeW1ib2w/LmRlY2xhcmF0aW9ucz8uWzBdO1xuICAgIGlmIChkZWNsYXJhdGlvbiAmJiBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy1yZWN1cnNpb24gLS0gVGhpcyBmdW5jdGlvbiByZWN1cnNlcyBpbiB0d28gcGxhY2VzOiBoZXJlLCBmb2xsb3dpbmcgYSB0eXBlIGFsaWFzLCBhbmQgYWJvdmUsIGZhbm5pbmcgb3V0IG92ZXIgdGhlIG1lbWJlcnMgb2YgYSB1bmlvbi4gT25seSB0aGlzIG9uZSBpcyBhIHRhaWwgY2FsbCwgc28gdHVybmluZyBpdCBpbnRvIGEgbG9vcCB3b3VsZCBsZWF2ZSB0aGUgZnVuY3Rpb24gaGFsZiByZWN1cnNpdmUgYW5kIGhhbGYgaXRlcmF0aXZlIG92ZXIgdGhlIHNhbWUgdHJlZS5cbiAgICAgIHJldHVybiBjb250YWluc1Byb21pc2VSZWZlcmVuY2UoY2hlY2tlciwgZGVjbGFyYXRpb24udHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCBzaWduYXR1cmUgaGFzIGFuIHVuc2FmZSByZXR1cm4gdHlwZSAoYGFueWAgb3IgYHVua25vd25gKVxuICogd2l0aG91dCBleHBsaWNpdGx5IGFjY291bnRpbmcgZm9yIHByb21pc2VzLlxuICpcbiAqIEZsYWdzIGJhcmUgYGFueWAsIGB1bmtub3duYCwgYW5kIHVuaW9ucyBsaWtlIGBhbnkgfCBzdHJpbmdgIHRoYXQgcmVzb2x2ZSB0b1xuICogYGFueWAvYHVua25vd25gIHdpdGhvdXQgaW5jbHVkaW5nIGBQcm9taXNlYC9gUHJvbWlzZUxpa2VgLiBEb2VzIE5PVCBmbGFnIHR5cGVcbiAqIGFsaWFzZXMgbGlrZSBgQXdhaXRhYmxlPFQ+YCBvciB1bmlvbnMgbGlrZSBgYW55IHwgUHJvbWlzZTxhbnk+YCB0aGF0IGV4cGxpY2l0bHlcbiAqIGhhbmRsZSBwcm9taXNlIHJldHVybnMuXG4gKlxuICogQHBhcmFtIGNoZWNrZXIgLSBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBzaWcgLSBUaGUgY2FsbCBzaWduYXR1cmUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmV0dXJuIHR5cGUgaXMgdW5zYWZlIGZvciBhc3luYyBjYWxsYmFja3MuXG4gKi9cbmZ1bmN0aW9uIGlzVW5zYWZlUmV0dXJuU2lnbmF0dXJlKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzaWc6IFNpZ25hdHVyZSk6IGJvb2xlYW4ge1xuICBjb25zdCByZXR1cm5UeXBlID0gY2hlY2tlci5nZXRSZXR1cm5UeXBlT2ZTaWduYXR1cmUoc2lnKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgY2hlY2sgaXMgaWRpb21hdGljIGZvciBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgaWYgKCEocmV0dXJuVHlwZS5mbGFncyAmIFVOU0FGRV9SRVRVUk5fRkxBR1MpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIHN5bnRhY3RpYyByZXR1cm4gdHlwZSBhbm5vdGF0aW9uLiBJZiBpdCBjb250YWlucyBhIHJlZmVyZW5jZSB0b1xuICAvLyBQcm9taXNlL1Byb21pc2VMaWtlIChkaXJlY3RseSBvciB2aWEgYSB0eXBlIGFsaWFzKSwgdGhlIGNhbGxlciBleHBsaWNpdGx5XG4gIC8vIGhhbmRsZXMgYXN5bmMgcmV0dXJucyBhbmQgc2hvdWxkIG5vdCBiZSBmbGFnZ2VkLlxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHNpZy5nZXREZWNsYXJhdGlvbigpO1xuICBjb25zdCByZXR1cm5UeXBlTm9kZSA9IGRlY2xhcmF0aW9uLnR5cGU7XG4gIGFzc2VydE5vbk51bGxhYmxlKHJldHVyblR5cGVOb2RlLCAnU2lnbmF0dXJlIGRlY2xhcmF0aW9ucyB3aXRoIGFueS91bmtub3duIHJldHVybiBhbHdheXMgaGF2ZSBhIHJldHVybiB0eXBlIGFubm90YXRpb24nKTtcblxuICByZXR1cm4gIWNvbnRhaW5zUHJvbWlzZVJlZmVyZW5jZShjaGVja2VyLCByZXR1cm5UeXBlTm9kZSk7XG59XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgZGlzYWxsb3dpbmcgYXN5bmMgZnVuY3Rpb25zIHBhc3NlZCBhcyBjYWxsYmFja3MgdG8gcGFyYW1ldGVycyB3aXRoIGFuIGBhbnlgIG9yIGB1bmtub3duYCByZXR1cm4gdHlwZSwgd2hlcmUgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2lsZW50bHkgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBjb250ZXh0LnNvdXJjZUNvZGUucGFyc2VyU2VydmljZXMgYXMgUGFyc2VyU2VydmljZXNXaXRoVHlwZUluZm9ybWF0aW9uO1xuICAgIGNvbnN0IGNoZWNrZXIgPSBzZXJ2aWNlcy5wcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbGxOb2RlLmFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBhcmd1bWVudCA9IGNhbGxOb2RlLmFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgaWYgKCFhcmd1bWVudCB8fCAhaXNBc3luY0Z1bmN0aW9uTm9kZShhcmd1bWVudCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRzQ2FsbGVlTm9kZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoY2FsbE5vZGUuY2FsbGVlKTtcbiAgICAgICAgICBjb25zdCBjYWxsZWVUeXBlID0gY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbih0c0NhbGxlZU5vZGUpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBzaWcgb2YgY2FsbGVlVHlwZS5nZXRDYWxsU2lnbmF0dXJlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBzaWcuZ2V0UGFyYW1ldGVycygpW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghcGFyYW1ldGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gY2hlY2tlci5nZXRUeXBlT2ZTeW1ib2wocGFyYW1ldGVyKTtcblxuICAgICAgICAgICAgaWYgKGhhc1Vuc2FmZVJldHVybkNhbGxTaWduYXR1cmUoY2hlY2tlciwgcGFyYW1ldGVyVHlwZSkpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICAgICAgICBub2RlOiBhcmd1bWVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgcGFzc2luZyBhc3luYyBmdW5jdGlvbnMgYXMgY2FsbGJhY2tzIHRvIHBhcmFtZXRlcnMgd2l0aCBgYW55YCBvciBgdW5rbm93bmAgcmV0dXJuIHR5cGUnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnQXN5bmMgZnVuY3Rpb24gcGFzc2VkIGFzIGNhbGxiYWNrIHRvIGEgcGFyYW1ldGVyIHdpdGggYGFueWAvYHVua25vd25gIHJldHVybiB0eXBlLiBUaGlzIG1heSBjYXVzZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zLiBXcmFwIHRoZSBjYWxsOiBgKC4uLmFyZ3MpID0+IHsgeW91ckFzeW5jRm4oLi4uYXJncyk7IH1gLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EseUJBQWtDO0FBQ2xDLHdCQU9PO0FBRVAsNEJBQStCO0FBS3hCLE1BQU0sYUFBYTtBQVUxQixTQUFTLDZCQUE2QixTQUFzQixNQUFxQjtBQUMvRSxTQUFPLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFFBQVEsd0JBQXdCLFNBQVMsR0FBRyxDQUFDO0FBQ3JGO0FBUUEsU0FBUyxvQkFBb0IsTUFBNkY7QUFFeEgsVUFBUSxLQUFLLFNBQVMsNkJBQTZCLEtBQUssU0FBUyx5QkFBeUIsS0FBSztBQUNqRztBQUdBLE1BQU0sc0JBQXNCLDRCQUFVLE1BQU0sNEJBQVU7QUFFdEQsTUFBTSxxQkFBcUIsb0JBQUksSUFBSSxDQUFDLFdBQVcsYUFBYSxDQUFDO0FBVzdELFNBQVMseUJBQXlCLFNBQXNCLE1BQXlCO0FBQy9FLFVBQUksbUNBQWdCLElBQUksR0FBRztBQUN6QixXQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsV0FBVyx5QkFBeUIsU0FBUyxNQUFNLENBQUM7QUFBQSxFQUM5RTtBQUVBLFVBQUksdUNBQW9CLElBQUksR0FBRztBQUU3QixVQUFNLFdBQU8sZ0NBQWEsS0FBSyxRQUFRLElBQUksS0FBSyxTQUFTLE9BQU87QUFFaEUsUUFBSSxtQkFBbUIsSUFBSSxJQUFJLEdBQUc7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLFVBQVUsUUFBUSxvQkFBb0IsS0FBSyxRQUFRO0FBR3ZELFFBQUksV0FBVyxRQUFRLFFBQVEsOEJBQVksT0FBTztBQUNoRCxnQkFBVSxRQUFRLGlCQUFpQixPQUFPO0FBQUEsSUFDNUM7QUFFQSxVQUFNLGNBQWMsU0FBUyxlQUFlLENBQUM7QUFDN0MsUUFBSSxtQkFBZSwwQ0FBdUIsV0FBVyxHQUFHO0FBRXRELGFBQU8seUJBQXlCLFNBQVMsWUFBWSxJQUFJO0FBQUEsSUFDM0Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBZUEsU0FBUyx3QkFBd0IsU0FBc0IsS0FBeUI7QUFDOUUsUUFBTSxhQUFhLFFBQVEseUJBQXlCLEdBQUc7QUFHdkQsTUFBSSxFQUFFLFdBQVcsUUFBUSxzQkFBc0I7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFLQSxRQUFNLGNBQWMsSUFBSSxlQUFlO0FBQ3ZDLFFBQU0saUJBQWlCLFlBQVk7QUFDbkMsNENBQWtCLGdCQUFnQixxRkFBcUY7QUFFdkgsU0FBTyxDQUFDLHlCQUF5QixTQUFTLGNBQWM7QUFDMUQ7QUFLTyxNQUFNLGdDQUFpRDtBQUFBLEVBQzVELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFDcEMsVUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBRWhELFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBdUI7QUFDcEMsY0FBTSxlQUFXLHNDQUFlLElBQUk7QUFFcEMsaUJBQVMsUUFBUSxHQUFHLFFBQVEsU0FBUyxVQUFVLFFBQVEsU0FBUztBQUM5RCxnQkFBTSxXQUFXLFNBQVMsVUFBVSxLQUFLO0FBQ3pDLGNBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLFFBQVEsR0FBRztBQUMvQztBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxlQUFlLFNBQVMsc0JBQXNCLElBQUksU0FBUyxNQUFNO0FBQ3ZFLGdCQUFNLGFBQWEsUUFBUSxrQkFBa0IsWUFBWTtBQUV6RCxxQkFBVyxPQUFPLFdBQVcsa0JBQWtCLEdBQUc7QUFDaEQsa0JBQU0sWUFBWSxJQUFJLGNBQWMsRUFBRSxLQUFLO0FBQzNDLGdCQUFJLENBQUMsV0FBVztBQUNkO0FBQUEsWUFDRjtBQUVBLGtCQUFNLGdCQUFnQixRQUFRLGdCQUFnQixTQUFTO0FBRXZELGdCQUFJLDZCQUE2QixTQUFTLGFBQWEsR0FBRztBQUN4RCxzQkFBUSxPQUFPO0FBQUEsZ0JBQ2IsV0FBVztBQUFBLGdCQUNYLE1BQU07QUFBQSxjQUNSLENBQUM7QUFDRDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsVUFBVSxHQUFHO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
3
+ /**
4
+ Message ID reported when an async function is passed as a callback to a parameter whose return type is `any`/`unknown`, risking an unhandled promise rejection.
5
+ */
6
+ export declare const MESSAGE_ID = "noAsyncCallbackToUnsafeReturn";
7
+ /**
8
+ * ESLint rule disallowing async functions passed as callbacks to parameters with an `any` or `unknown` return type, where the returned promise is silently dropped.
9
+ */
10
+ export declare const noAsyncCallbackToUnsafeReturn: Rule.RuleModule;
@@ -0,0 +1,290 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ const existingProcess = globalThis.process;
23
+
24
+ if (!existingProcess) {
25
+ globalThis.process = browserProcess;
26
+ return;
27
+ }
28
+
29
+ if (existingProcess.versions?.node) {
30
+ return;
31
+ }
32
+
33
+ const existingProcessRecord = existingProcess;
34
+
35
+ for (const [key, value] of Object.entries(browserProcess)) {
36
+ existingProcessRecord[key] ??= value;
37
+ }
38
+
39
+ existingProcessRecord['browser'] = true;
40
+ }
41
+
42
+ function keepName($unknown) {
43
+ return $unknown;
44
+ }
45
+
46
+ (function initCjs() {
47
+ const globalThisRecord = globalThis;
48
+ ensureDisposeSymbols();
49
+ globalThisRecord['__name'] ??= keepName;
50
+ globalThisRecord['__extractDefault'] ??= extractDefault;
51
+
52
+ ensureBrowserProcess();
53
+
54
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
+ function extractDefault(module) {
56
+ return module && module.__esModule && 'default' in module ? module.default : module;
57
+ }
58
+ })();
59
+ })();
60
+
61
+ "use strict";
62
+ var __defProp = Object.defineProperty;
63
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
64
+ var __getOwnPropNames = Object.getOwnPropertyNames;
65
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
66
+ var __export = (target, all) => {
67
+ for (var name in all)
68
+ __defProp(target, name, { get: all[name], enumerable: true });
69
+ };
70
+ var __copyProps = (to, from, except, desc) => {
71
+ if (from && typeof from === "object" || typeof from === "function") {
72
+ for (let key of __getOwnPropNames(from))
73
+ if (!__hasOwnProp.call(to, key) && key !== except)
74
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
75
+ }
76
+ return to;
77
+ };
78
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
79
+ var no_unresolved_jsdoc_link_exports = {};
80
+ __export(no_unresolved_jsdoc_link_exports, {
81
+ MESSAGE_ID: () => MESSAGE_ID,
82
+ noUnresolvedJsdocLink: () => noUnresolvedJsdocLink
83
+ });
84
+ module.exports = __toCommonJS(no_unresolved_jsdoc_link_exports);
85
+ var import_typescript = require('typescript');
86
+ var import_ts_estree_node = require('./ts-estree-node.cjs');
87
+ const MESSAGE_ID = "noUnresolvedJsdocLink";
88
+ const MODULE_PATH_REG_EXP = /^(?<modulePath>[^\s!|}]*)!(?<memberPath>[\w$.#]+)/;
89
+ const IMPORT_TYPE_REG_EXP = /^import\(\s*(?<quote>['"])(?<modulePath>[^'"]+)\k<quote>\s*\)\.(?<memberPath>[\w$.#]+)/;
90
+ const RELATIVE_PATH_PREFIX_REG_EXP = /^(?:\.\.?\/)+/;
91
+ const MEMBER_SEPARATOR_REG_EXP = /[.#]/;
92
+ const SOURCE_FILE_EXTENSION_REG_EXP = /(?:\.d)?\.[cm]?tsx?$/;
93
+ const INDEX_SUFFIX = "/index";
94
+ const programIndexCache = /* @__PURE__ */ new WeakMap();
95
+ const noUnresolvedJsdocLink = {
96
+ create(context) {
97
+ const services = context.sourceCode.parserServices;
98
+ return {
99
+ Program(node) {
100
+ const program = services.program;
101
+ const checker = program.getTypeChecker();
102
+ const tsSourceFile = services.esTreeNodeToTSNodeMap.get((0, import_ts_estree_node.toTSESTreeNode)(node));
103
+ const links = /* @__PURE__ */ new Set();
104
+ const localDeclarationNamesByName = /* @__PURE__ */ new Map();
105
+ function visitJsDocNode(jsDocNode) {
106
+ if (isJSDocLinkLike(jsDocNode)) {
107
+ links.add(jsDocNode);
108
+ return;
109
+ }
110
+ (0, import_typescript.forEachChild)(jsDocNode, visitJsDocNode);
111
+ }
112
+ function visitNode(tsNode) {
113
+ collectLocalDeclarationName(tsNode, localDeclarationNamesByName);
114
+ for (const jsDocNode of (0, import_typescript.getJSDocCommentsAndTags)(tsNode)) {
115
+ visitJsDocNode(jsDocNode);
116
+ }
117
+ (0, import_typescript.forEachChild)(tsNode, visitNode);
118
+ }
119
+ function reportIfUnresolved(link) {
120
+ if (!link.name || link.text.startsWith(":")) {
121
+ return;
122
+ }
123
+ const nameText = link.name.getText();
124
+ const fullTarget = nameText + link.text;
125
+ const moduleMatch = IMPORT_TYPE_REG_EXP.exec(fullTarget) ?? MODULE_PATH_REG_EXP.exec(fullTarget);
126
+ let reportedName = nameText;
127
+ let isResolved;
128
+ if (moduleMatch?.groups) {
129
+ const { memberPath, modulePath } = moduleMatch.groups;
130
+ reportedName = moduleMatch[0];
131
+ const moduleSymbol = findModule(program, checker, modulePath, tsSourceFile.fileName);
132
+ isResolved = !!resolveMemberPath(checker, moduleSymbol, memberPath.split(MEMBER_SEPARATOR_REG_EXP));
133
+ } else {
134
+ isResolved = isResolvedName({
135
+ checker,
136
+ containingFileName: tsSourceFile.fileName,
137
+ localDeclarationNamesByName,
138
+ name: link.name,
139
+ program
140
+ });
141
+ }
142
+ if (isResolved) {
143
+ return;
144
+ }
145
+ context.report({
146
+ data: {
147
+ name: reportedName
148
+ },
149
+ loc: {
150
+ end: context.sourceCode.getLocFromIndex(link.name.getEnd()),
151
+ start: context.sourceCode.getLocFromIndex(link.name.getStart())
152
+ },
153
+ messageId: MESSAGE_ID
154
+ });
155
+ }
156
+ visitNode(tsSourceFile);
157
+ for (const link of links) {
158
+ reportIfUnresolved(link);
159
+ }
160
+ }
161
+ };
162
+ },
163
+ meta: {
164
+ docs: {
165
+ description: "Disallow JSDoc link tags whose target does not resolve to a symbol"
166
+ },
167
+ messages: {
168
+ [MESSAGE_ID]: "JSDoc link target `{{name}}` does not resolve. Was it renamed or removed?"
169
+ },
170
+ schema: [],
171
+ type: "problem"
172
+ }
173
+ };
174
+ function collectLocalDeclarationName(node, localDeclarationNamesByName) {
175
+ if (!isLocalDeclaration(node) || !node.name || !(0, import_typescript.isIdentifier)(node.name)) {
176
+ return;
177
+ }
178
+ const names = localDeclarationNamesByName.get(node.name.text) ?? [];
179
+ names.push(node.name);
180
+ localDeclarationNamesByName.set(node.name.text, names);
181
+ }
182
+ function findModule(program, checker, specifier, containingFileName) {
183
+ const ambientModule = getProgramIndex(program, checker).modulesByPath.get(specifier);
184
+ if (ambientModule) {
185
+ return ambientModule;
186
+ }
187
+ const resolvedFileName = (0, import_typescript.resolveModuleName)(specifier, containingFileName, program.getCompilerOptions(), import_typescript.sys).resolvedModule?.resolvedFileName;
188
+ const resolvedSourceFile = resolvedFileName === void 0 ? void 0 : program.getSourceFile(resolvedFileName);
189
+ const resolvedModule = resolvedSourceFile && checker.getSymbolAtLocation(resolvedSourceFile);
190
+ return resolvedModule ?? findModuleByPathSuffix(program, checker, specifier);
191
+ }
192
+ function findModuleByPathSuffix(program, checker, modulePath) {
193
+ const normalizedPath = modulePath.replace(RELATIVE_PATH_PREFIX_REG_EXP, "").replace(SOURCE_FILE_EXTENSION_REG_EXP, "");
194
+ const suffixes = [`/${normalizedPath}`, `/${normalizedPath}${INDEX_SUFFIX}`];
195
+ for (const sourceFile of program.getSourceFiles()) {
196
+ const pathWithoutExtension = sourceFile.fileName.replace(SOURCE_FILE_EXTENSION_REG_EXP, "");
197
+ if (suffixes.every((suffix) => !pathWithoutExtension.endsWith(suffix))) {
198
+ continue;
199
+ }
200
+ const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
201
+ if (moduleSymbol) {
202
+ return moduleSymbol;
203
+ }
204
+ }
205
+ return void 0;
206
+ }
207
+ function flattenName(name) {
208
+ return (0, import_typescript.isIdentifier)(name) ? [name.text] : [...flattenName(name.left), name.right.text];
209
+ }
210
+ function getMember(checker, symbol, memberName) {
211
+ const escapedName = (0, import_typescript.escapeLeadingUnderscores)(memberName);
212
+ const target = resolveAlias(checker, symbol);
213
+ const moduleExport = (target.flags & import_typescript.SymbolFlags.Module) === 0 ? void 0 : checker.tryGetMemberInModuleExports(memberName, target);
214
+ return moduleExport ?? target.exports?.get(escapedName) ?? target.members?.get(escapedName) ?? checker.getPropertyOfType(checker.getDeclaredTypeOfSymbol(target), memberName) ?? checker.getPropertyOfType(checker.getTypeOfSymbol(target), memberName);
215
+ }
216
+ function getProgramIndex(program, checker) {
217
+ let index = programIndexCache.get(program);
218
+ if (index) {
219
+ return index;
220
+ }
221
+ index = {
222
+ exportsByName: /* @__PURE__ */ new Map(),
223
+ modulesByPath: /* @__PURE__ */ new Map()
224
+ };
225
+ const moduleSymbols = [];
226
+ for (const ambientModule of checker.getAmbientModules()) {
227
+ index.modulesByPath.set(ambientModule.name.replaceAll('"', ""), ambientModule);
228
+ moduleSymbols.push(ambientModule);
229
+ }
230
+ for (const sourceFile of program.getSourceFiles()) {
231
+ const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
232
+ if (moduleSymbol) {
233
+ moduleSymbols.push(moduleSymbol);
234
+ }
235
+ }
236
+ for (const moduleSymbol of moduleSymbols) {
237
+ for (const exportSymbol of checker.getExportsOfModule(moduleSymbol)) {
238
+ const symbols = index.exportsByName.get(exportSymbol.name) ?? [];
239
+ symbols.push(exportSymbol);
240
+ index.exportsByName.set(exportSymbol.name, symbols);
241
+ }
242
+ }
243
+ programIndexCache.set(program, index);
244
+ return index;
245
+ }
246
+ function isJSDocLinkLike(node) {
247
+ return (0, import_typescript.isJSDocLink)(node) || (0, import_typescript.isJSDocLinkCode)(node) || (0, import_typescript.isJSDocLinkPlain)(node);
248
+ }
249
+ function isLocalDeclaration(node) {
250
+ return (0, import_typescript.isClassDeclaration)(node) || (0, import_typescript.isEnumDeclaration)(node) || (0, import_typescript.isFunctionDeclaration)(node) || (0, import_typescript.isGetAccessorDeclaration)(node) || (0, import_typescript.isInterfaceDeclaration)(node) || (0, import_typescript.isMethodDeclaration)(node) || (0, import_typescript.isMethodSignature)(node) || (0, import_typescript.isModuleDeclaration)(node) || (0, import_typescript.isPropertyDeclaration)(node) || (0, import_typescript.isPropertySignature)(node) || (0, import_typescript.isSetAccessorDeclaration)(node) || (0, import_typescript.isTypeAliasDeclaration)(node) || (0, import_typescript.isVariableDeclaration)(node);
251
+ }
252
+ function isResolvedName(params) {
253
+ const {
254
+ checker,
255
+ containingFileName,
256
+ localDeclarationNamesByName,
257
+ name,
258
+ program
259
+ } = params;
260
+ if (checker.getSymbolAtLocation(name)) {
261
+ return true;
262
+ }
263
+ if ((0, import_typescript.isJSDocMemberName)(name) && checker.getSymbolAtLocation(name.right)) {
264
+ return true;
265
+ }
266
+ const [rootName = "", ...memberNames] = flattenName(name);
267
+ const index = getProgramIndex(program, checker);
268
+ const localRoots = (localDeclarationNamesByName.get(rootName) ?? []).map((declarationName) => checker.getSymbolAtLocation(declarationName));
269
+ const roots = [...localRoots, ...index.exportsByName.get(rootName) ?? [], findModule(program, checker, rootName, containingFileName)];
270
+ return roots.some((root) => !!resolveMemberPath(checker, root, memberNames));
271
+ }
272
+ function resolveAlias(checker, symbol) {
273
+ return (symbol.flags & import_typescript.SymbolFlags.Alias) === 0 ? symbol : checker.getAliasedSymbol(symbol);
274
+ }
275
+ function resolveMemberPath(checker, root, memberNames) {
276
+ let current = root;
277
+ for (const memberName of memberNames) {
278
+ if (!current) {
279
+ return void 0;
280
+ }
281
+ current = getMember(checker, current, memberName);
282
+ }
283
+ return current;
284
+ }
285
+ // Annotate the CommonJS export names for ESM import in node:
286
+ 0 && (module.exports = {
287
+ MESSAGE_ID,
288
+ noUnresolvedJsdocLink
289
+ });
290
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVucmVzb2x2ZWQtanNkb2MtbGluay50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyBcdTIwMTQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIFx1MjAxNCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIFx1MjAxNCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSBcdTIwMTQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSBcdTIwMTQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgc3ltYm9sOiBUc1N5bWJvbCwgbWVtYmVyTmFtZTogc3RyaW5nKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZUxlYWRpbmdVbmRlcnNjb3JlcyhtZW1iZXJOYW1lKTtcbiAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyB0ZXN0IGlzIGlkaW9tYXRpYyBmb3IgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBjb25zdCBtb2R1bGVFeHBvcnQgPSAodGFyZ2V0LmZsYWdzICYgU3ltYm9sRmxhZ3MuTW9kdWxlKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGNoZWNrZXIudHJ5R2V0TWVtYmVySW5Nb2R1bGVFeHBvcnRzKG1lbWJlck5hbWUsIHRhcmdldCk7XG4gIHJldHVybiBtb2R1bGVFeHBvcnRcbiAgICA/PyB0YXJnZXQuZXhwb3J0cz8uZ2V0KGVzY2FwZWROYW1lKVxuICAgID8/IHRhcmdldC5tZW1iZXJzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldFR5cGVPZlN5bWJvbCh0YXJnZXQpLCBtZW1iZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUluZGV4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUHJvZ3JhbUluZGV4IHtcbiAgbGV0IGluZGV4ID0gcHJvZ3JhbUluZGV4Q2FjaGUuZ2V0KHByb2dyYW0pO1xuICBpZiAoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpbmRleCA9IHtcbiAgICBleHBvcnRzQnlOYW1lOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2xbXT4oKSxcbiAgICBtb2R1bGVzQnlQYXRoOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2w+KClcbiAgfTtcblxuICBjb25zdCBtb2R1bGVTeW1ib2xzOiBUc1N5bWJvbFtdID0gW107XG4gIGZvciAoY29uc3QgYW1iaWVudE1vZHVsZSBvZiBjaGVja2VyLmdldEFtYmllbnRNb2R1bGVzKCkpIHtcbiAgICBpbmRleC5tb2R1bGVzQnlQYXRoLnNldChhbWJpZW50TW9kdWxlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnJyksIGFtYmllbnRNb2R1bGUpO1xuICAgIG1vZHVsZVN5bWJvbHMucHVzaChhbWJpZW50TW9kdWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIG1vZHVsZVN5bWJvbHMucHVzaChtb2R1bGVTeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kdWxlU3ltYm9sIG9mIG1vZHVsZVN5bWJvbHMpIHtcbiAgICBmb3IgKGNvbnN0IGV4cG9ydFN5bWJvbCBvZiBjaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpKSB7XG4gICAgICBjb25zdCBzeW1ib2xzID0gaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQoZXhwb3J0U3ltYm9sLm5hbWUpID8/IFtdO1xuICAgICAgc3ltYm9scy5wdXNoKGV4cG9ydFN5bWJvbCk7XG4gICAgICBpbmRleC5leHBvcnRzQnlOYW1lLnNldChleHBvcnRTeW1ib2wubmFtZSwgc3ltYm9scyk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3JhbUluZGV4Q2FjaGUuc2V0KHByb2dyYW0sIGluZGV4KTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0pTRG9jTGlua0xpa2Uobm9kZTogTm9kZSk6IG5vZGUgaXMgSlNEb2NMaW5rTGlrZSB7XG4gIHJldHVybiBpc0pTRG9jTGluayhub2RlKSB8fCBpc0pTRG9jTGlua0NvZGUobm9kZSkgfHwgaXNKU0RvY0xpbmtQbGFpbihub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbERlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBub2RlIGlzIExvY2FsRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2REZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzTWV0aG9kU2lnbmF0dXJlKG5vZGUpXG4gICAgfHwgaXNNb2R1bGVEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmVkTmFtZShwYXJhbXM6IElzUmVzb2x2ZWROYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VyLFxuICAgIGNvbnRhaW5pbmdGaWxlTmFtZSxcbiAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgbmFtZSxcbiAgICBwcm9ncmFtXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gYEZvbyNiYXJgIGlzIGEgYEpTRG9jTWVtYmVyTmFtZWAsIHdoaWNoIHRoZSBjaGVja2VyIHJlc29sdmVzIG9ubHkgdGhyb3VnaCBpdHMgcmlnaHQtaGFuZCBtZW1iZXIuXG4gIGlmIChpc0pTRG9jTWVtYmVyTmFtZShuYW1lKSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZS5yaWdodCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IFtyb290TmFtZSA9ICcnLCAuLi5tZW1iZXJOYW1lc10gPSBmbGF0dGVuTmFtZShuYW1lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcik7XG4gIGNvbnN0IGxvY2FsUm9vdHMgPSAobG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChyb290TmFtZSkgPz8gW10pLm1hcCgoZGVjbGFyYXRpb25OYW1lKSA9PiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyYXRpb25OYW1lKSk7XG4gIGNvbnN0IHJvb3RzID0gWy4uLmxvY2FsUm9vdHMsIC4uLmluZGV4LmV4cG9ydHNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSwgZmluZE1vZHVsZShwcm9ncmFtLCBjaGVja2VyLCByb290TmFtZSwgY29udGFpbmluZ0ZpbGVOYW1lKV07XG5cbiAgcmV0dXJuIHJvb3RzLnNvbWUoKHJvb3QpID0+ICEhcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlciwgcm9vdCwgbWVtYmVyTmFtZXMpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdFQSx3QkF5Qk87QUFFUCw0QkFBK0I7QUFLeEIsTUFBTSxhQUFhO0FBa0MxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLCtCQUErQjtBQUNyQyxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGVBQWU7QUFFckIsTUFBTSxvQkFBb0Isb0JBQUksUUFBK0I7QUFLdEQsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxX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
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
3
+ /**
4
+ * Message ID reported when a JSDoc link target does not resolve to a symbol.
5
+ */
6
+ export declare const MESSAGE_ID = "noUnresolvedJsdocLink";
7
+ /**
8
+ * The ESLint rule that reports JSDoc links whose target does not resolve.
9
+ */
10
+ export declare const noUnresolvedJsdocLink: Rule.RuleModule;