@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,142 @@
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 initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { getMandatoryNamedGroup } from "@mnaoumov/typescript-lib/reg-exp";
49
+ import { toTSESTreeNode } from "./ts-estree-node.mjs";
50
+ const TAG_NAME = "typeParam";
51
+ const MESSAGE_ID_MISSING_TEMPLATE = "missingTemplate";
52
+ const MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION = "missingTemplateDescription";
53
+ const requireMethodTemplate = {
54
+ create(context) {
55
+ const settings = context.settings["jsdoc"];
56
+ const preferredTagName = settings?.tagNamePreference?.["template"] ?? TAG_NAME;
57
+ return {
58
+ "MethodDefinition"(node) {
59
+ const methodNode = toTSESTreeNode(node);
60
+ const functionExpression = methodNode.value;
61
+ const typeParams = functionExpression.typeParameters?.params;
62
+ if (!typeParams || typeParams.length === 0) {
63
+ return;
64
+ }
65
+ const sourceCode = context.sourceCode;
66
+ const comments = sourceCode.getCommentsBefore(node);
67
+ const jsdocComment = findJsdocComment(comments);
68
+ if (!jsdocComment) {
69
+ return;
70
+ }
71
+ const parsedTags = parseTypeParameterTags({
72
+ commentBody: jsdocComment.value,
73
+ tagName: preferredTagName
74
+ });
75
+ for (const typeParameter of typeParams) {
76
+ const parameterName = typeParameter.name.name;
77
+ const matchingTag = parsedTags.find((tag) => tag.name === parameterName);
78
+ if (!matchingTag) {
79
+ context.report({
80
+ data: {
81
+ // eslint-disable-next-line unicorn/name-replacements -- `paramName` is the placeholder this rule's own message template reads.
82
+ paramName: parameterName,
83
+ tagName: preferredTagName
84
+ },
85
+ messageId: MESSAGE_ID_MISSING_TEMPLATE,
86
+ node
87
+ });
88
+ } else if (!matchingTag.hasDescription) {
89
+ context.report({
90
+ data: {
91
+ // eslint-disable-next-line unicorn/name-replacements -- `paramName` is the placeholder this rule's own message template reads.
92
+ paramName: parameterName,
93
+ tagName: preferredTagName
94
+ },
95
+ messageId: MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION,
96
+ node
97
+ });
98
+ }
99
+ }
100
+ }
101
+ };
102
+ },
103
+ meta: {
104
+ docs: {
105
+ description: "Require `@typeParam` tags with descriptions for generic method type parameters"
106
+ },
107
+ messages: {
108
+ [MESSAGE_ID_MISSING_TEMPLATE]: "Missing @{{ tagName }} {{ paramName }}",
109
+ [MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION]: "@{{ tagName }} {{ paramName }} is missing a description"
110
+ },
111
+ schema: [],
112
+ type: "suggestion"
113
+ }
114
+ };
115
+ function findJsdocComment(comments) {
116
+ for (let index = comments.length - 1; index >= 0; index--) {
117
+ const comment = comments[index];
118
+ if (comment?.type === "Block" && comment.value.startsWith("*")) {
119
+ return comment;
120
+ }
121
+ }
122
+ return void 0;
123
+ }
124
+ function parseTypeParameterTags(params) {
125
+ const { commentBody, tagName } = params;
126
+ const tags = [];
127
+ const tagPattern = new RegExp(String.raw`@(?:${tagName}|template|typeParam)\s+(?<typeName>[\w$]+)(?<rest>.*)`, "g");
128
+ let match;
129
+ while ((match = tagPattern.exec(commentBody)) !== null) {
130
+ const name = getMandatoryNamedGroup(match, "typeName");
131
+ const rest = getMandatoryNamedGroup(match, "rest").trim();
132
+ const hasDescription = rest.length > 0 && rest !== "-";
133
+ tags.push({ hasDescription, name });
134
+ }
135
+ return tags;
136
+ }
137
+ export {
138
+ MESSAGE_ID_MISSING_TEMPLATE,
139
+ MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION,
140
+ requireMethodTemplate
141
+ };
142
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlXG4gKlxuICogUmVxdWlyZXMgdGhhdCBnZW5lcmljIG1ldGhvZHMgKG1ldGhvZHMgd2l0aCB0eXBlIHBhcmFtZXRlcnMpIGhhdmVcbiAqIGNvcnJlc3BvbmRpbmcgYEB0eXBlUGFyYW1gIChvciBgQHRlbXBsYXRlYCkgSlNEb2MgdGFncyBmb3IgZWFjaCB0eXBlIHBhcmFtZXRlci5cbiAqXG4gKiBUaGlzIGZpbGxzIGEgZ2FwIGluIGBlc2xpbnQtcGx1Z2luLWpzZG9jYCdzIGByZXF1aXJlLXRlbXBsYXRlYCBydWxlLCB3aGljaFxuICogb25seSBjaGVja3MgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyAoZnVuY3Rpb25zLCBjbGFzc2VzLCBpbnRlcmZhY2VzLCB0eXBlIGFsaWFzZXMpXG4gKiBidXQgbm90IG1ldGhvZHMgd2l0aGluIGNsYXNzZXMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2dhanVzL2VzbGludC1wbHVnaW4tanNkb2MvaXNzdWVzLzEzODZ9XG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcbmltcG9ydCB0eXBlIHsgQ29tbWVudCB9IGZyb20gJ2VzdHJlZSc7XG5cbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbmludGVyZmFjZSBKc2RvY1NldHRpbmdzIHtcbiAgdGFnTmFtZVByZWZlcmVuY2U/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5jb25zdCBUQUdfTkFNRSA9ICd0eXBlUGFyYW0nO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCB0eXBlIHBhcmFtZXRlciBoYXMgbm8gbWF0Y2hpbmcgYEB0eXBlUGFyYW1gIHRhZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURSA9ICdtaXNzaW5nVGVtcGxhdGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCdzIGBAdHlwZVBhcmFtYCB0YWcgaXMgbWlzc2luZyBhIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OID0gJ21pc3NpbmdUZW1wbGF0ZURlc2NyaXB0aW9uJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgZXZlcnkgZ2VuZXJpYyBtZXRob2QgdHlwZSBwYXJhbWV0ZXIgdG8gY2FycnkgYSBgQHR5cGVQYXJhbWAgdGFnIHdpdGggYSBkZXNjcmlwdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVNZXRob2RUZW1wbGF0ZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gY29udGV4dC5zZXR0aW5nc1snanNkb2MnXSBhcyBKc2RvY1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZWZlcnJlZFRhZ05hbWUgPSBzZXR0aW5ncz8udGFnTmFtZVByZWZlcmVuY2U/LlsndGVtcGxhdGUnXSA/PyBUQUdfTkFNRTtcblxuICAgIHJldHVybiB7XG4gICAgICAnTWV0aG9kRGVmaW5pdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1ldGhvZE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5NZXRob2REZWZpbml0aW9uO1xuICAgICAgICBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBtZXRob2ROb2RlLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXMgPSBmdW5jdGlvbkV4cHJlc3Npb24udHlwZVBhcmFtZXRlcnM/LnBhcmFtcztcbiAgICAgICAgaWYgKCF0eXBlUGFyYW1zIHx8IHR5cGVQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKG5vZGUpO1xuICAgICAgICBjb25zdCBqc2RvY0NvbW1lbnQgPSBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzKTtcblxuICAgICAgICBpZiAoIWpzZG9jQ29tbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZFRhZ3MgPSBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHtcbiAgICAgICAgICBjb21tZW50Qm9keToganNkb2NDb21tZW50LnZhbHVlLFxuICAgICAgICAgIHRhZ05hbWU6IHByZWZlcnJlZFRhZ05hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdHlwZVBhcmFtZXRlci5uYW1lLm5hbWU7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUYWcgPSBwYXJzZWRUYWdzLmZpbmQoKHRhZykgPT4gdGFnLm5hbWUgPT09IHBhcmFtZXRlck5hbWUpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGluZ1RhZykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaGluZ1RhZy5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGBAdHlwZVBhcmFtYCB0YWdzIHdpdGggZGVzY3JpcHRpb25zIGZvciBnZW5lcmljIG1ldGhvZCB0eXBlIHBhcmFtZXRlcnMnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURV06ICdNaXNzaW5nIEB7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fScsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OXTogJ0B7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fSBpcyBtaXNzaW5nIGEgZGVzY3JpcHRpb24nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG5pbnRlcmZhY2UgUGFyc2VkVGFnIHtcbiAgaGFzRGVzY3JpcHRpb246IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGFyc2VUeXBlUGFyYW1ldGVyVGFnc30uXG4gKi9cbmludGVyZmFjZSBQYXJzZVR5cGVQYXJhbWV0ZXJUYWdzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByYXcgY29tbWVudCBib2R5ICh3aXRob3V0IHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBjb21tZW50IGRlbGltaXRlcnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudEJvZHk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCB0YWcgbmFtZSAoYHR5cGVQYXJhbWAgb3IgYHRlbXBsYXRlYCkuXG4gICAqL1xuICByZWFkb25seSB0YWdOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEpTRG9jIGJsb2NrIGNvbW1lbnQgZnJvbSBhIGxpc3Qgb2YgY29tbWVudHMuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRzIC0gVGhlIGNvbW1lbnRzIGJlZm9yZSB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBKU0RvYyBibG9jayBjb21tZW50LCBvciBgdW5kZWZpbmVkYCBpZiBub25lIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzOiByZWFkb25seSBDb21tZW50W10pOiBDb21tZW50IHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSBjb21tZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRzW2luZGV4XTtcbiAgICBpZiAoY29tbWVudD8udHlwZSA9PT0gJ0Jsb2NrJyAmJiBjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgcmV0dXJuIGNvbW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYEB0eXBlUGFyYW1gIC8gYEB0ZW1wbGF0ZWAgdGFncyBmcm9tIGEgSlNEb2MgY29tbWVudCBib2R5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyc2VkIHRhZyBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHBhcmFtczogUGFyc2VUeXBlUGFyYW1ldGVyVGFnc1BhcmFtcyk6IFBhcnNlZFRhZ1tdIHtcbiAgY29uc3QgeyBjb21tZW50Qm9keSwgdGFnTmFtZSB9ID0gcGFyYW1zO1xuICBjb25zdCB0YWdzOiBQYXJzZWRUYWdbXSA9IFtdO1xuICAvKlxuICAgKiBUaGUgYCRgIGNoYXJhY3RlciBpcyBhIGxlZ2FsIGlkZW50aWZpZXIgY2hhcmFjdGVyIHRoYXQgYFxcd2AgZXhjbHVkZXMsIHNvIGEgdGFnIGxpa2UgYEB0eXBlUGFyYW0gJE9iamVjdGBcbiAgICogd291bGQgZmFpbCB0byBtYXRjaCBhdCBhbGwgYW5kIHRoZSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSByZXBvcnRlZCBhcyB1bmRvY3VtZW50ZWQgZGVzcGl0ZSBoYXZpbmcgYSB0YWcuXG4gICAqL1xuICBjb25zdCB0YWdQYXR0ZXJuID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YEAoPzoke3RhZ05hbWV9fHRlbXBsYXRlfHR5cGVQYXJhbSlcXHMrKD88dHlwZU5hbWU+W1xcdyRdKykoPzxyZXN0Pi4qKWAsICdnJyk7XG5cbiAgbGV0IG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gdGFnUGF0dGVybi5leGVjKGNvbW1lbnRCb2R5KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgY29uc3QgcmVzdCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdyZXN0JykudHJpbSgpO1xuICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uID0gcmVzdC5sZW5ndGggPiAwICYmIHJlc3QgIT09ICctJztcbiAgICB0YWdzLnB1c2goeyBoYXNEZXNjcmlwdGlvbiwgbmFtZSB9KTtcbiAgfVxuXG4gIHJldHVybiB0YWdzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsU0FBUyw4QkFBOEI7QUFFdkMsU0FBUyxzQkFBc0I7QUFNL0IsTUFBTSxXQUFXO0FBS1YsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSwwQ0FBMEM7QUFLaEQsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxTQUFTLE9BQU87QUFDekMsVUFBTSxtQkFBbUIsVUFBVSxvQkFBb0IsVUFBVSxLQUFLO0FBRXRFLFdBQU87QUFBQSxNQUNMLG1CQUFtQixNQUF1QjtBQUN4QyxjQUFNLGFBQWEsZUFBZSxJQUFJO0FBQ3RDLGNBQU0scUJBQXFCLFdBQVc7QUFFdEMsY0FBTSxhQUFhLG1CQUFtQixnQkFBZ0I7QUFDdEQsWUFBSSxDQUFDLGNBQWMsV0FBVyxXQUFXLEdBQUc7QUFDMUM7QUFBQSxRQUNGO0FBRUEsY0FBTSxhQUFhLFFBQVE7QUFDM0IsY0FBTSxXQUFXLFdBQVcsa0JBQWtCLElBQUk7QUFDbEQsY0FBTSxlQUFlLGlCQUFpQixRQUFRO0FBRTlDLFlBQUksQ0FBQyxjQUFjO0FBQ2pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSx1QkFBdUI7QUFBQSxVQUN4QyxhQUFhLGFBQWE7QUFBQSxVQUMxQixTQUFTO0FBQUEsUUFDWCxDQUFDO0FBRUQsbUJBQVcsaUJBQWlCLFlBQVk7QUFDdEMsZ0JBQU0sZ0JBQWdCLGNBQWMsS0FBSztBQUN6QyxnQkFBTSxjQUFjLFdBQVcsS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLGFBQWE7QUFFdkUsY0FBSSxDQUFDLGFBQWE7QUFDaEIsb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTTtBQUFBO0FBQUEsZ0JBRUosV0FBVztBQUFBLGdCQUNYLFNBQVM7QUFBQSxjQUNYO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsV0FBVyxDQUFDLFlBQVksZ0JBQWdCO0FBQ3RDLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQTtBQUFBLGdCQUVKLFdBQVc7QUFBQSxnQkFDWCxTQUFTO0FBQUEsY0FDWDtBQUFBLGNBQ0EsV0FBVztBQUFBLGNBQ1g7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsMkJBQTJCLEdBQUc7QUFBQSxNQUMvQixDQUFDLHVDQUF1QyxHQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQTRCQSxTQUFTLGlCQUFpQixVQUFtRDtBQUMzRSxXQUFTLFFBQVEsU0FBUyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDekQsVUFBTSxVQUFVLFNBQVMsS0FBSztBQUM5QixRQUFJLFNBQVMsU0FBUyxXQUFXLFFBQVEsTUFBTSxXQUFXLEdBQUcsR0FBRztBQUM5RCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFRQSxTQUFTLHVCQUF1QixRQUFtRDtBQUNqRixRQUFNLEVBQUUsYUFBYSxRQUFRLElBQUk7QUFDakMsUUFBTSxPQUFvQixDQUFDO0FBSzNCLFFBQU0sYUFBYSxJQUFJLE9BQU8sT0FBTyxVQUFVLE9BQU8seURBQXlELEdBQUc7QUFFbEgsTUFBSTtBQUNKLFVBQVEsUUFBUSxXQUFXLEtBQUssV0FBVyxPQUFPLE1BQU07QUFDdEQsVUFBTSxPQUFPLHVCQUF1QixPQUFPLFVBQVU7QUFDckQsVUFBTSxPQUFPLHVCQUF1QixPQUFPLE1BQU0sRUFBRSxLQUFLO0FBQ3hELFVBQU0saUJBQWlCLEtBQUssU0FBUyxLQUFLLFNBQVM7QUFDbkQsU0FBSyxLQUFLLEVBQUUsZ0JBQWdCLEtBQUssQ0FBQztBQUFBLEVBQ3BDO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ import type { Rule } from 'eslint';
3
+ /**
4
+ Message ID reported when an `override` method does not access its `super` counterpart.
5
+ */
6
+ export declare const MESSAGE_ID = "requireSuperCall";
7
+ /**
8
+ * ESLint rule requiring `override` methods to call `super.methodName()`, so the base implementation is not silently skipped.
9
+ */
10
+ export declare const requireSuperCall: Rule.RuleModule;
@@ -0,0 +1,183 @@
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 initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { assert } from "@mnaoumov/typescript-lib/type-guards";
49
+ import {
50
+ canHaveModifiers,
51
+ getModifiers,
52
+ SyntaxKind
53
+ } from "typescript";
54
+ import { toTSESTreeNode } from "./ts-estree-node.mjs";
55
+ const MESSAGE_ID = "requireSuperCall";
56
+ const requireSuperCall = {
57
+ create(context) {
58
+ const methodStack = [];
59
+ return {
60
+ "AssignmentExpression"(node) {
61
+ const current = methodStack.at(-1);
62
+ if (current?.kind !== "set") {
63
+ return;
64
+ }
65
+ const assignNode = toTSESTreeNode(node);
66
+ if (isSuperPropertyAccess(assignNode.left, current.methodName)) {
67
+ current.hasSuperCall = true;
68
+ }
69
+ },
70
+ "CallExpression"(node) {
71
+ const current = methodStack.at(-1);
72
+ if (current?.kind !== "method") {
73
+ return;
74
+ }
75
+ const callNode = toTSESTreeNode(node);
76
+ if (isSuperMethodCall(callNode, current.methodName)) {
77
+ current.hasSuperCall = true;
78
+ }
79
+ },
80
+ "MemberExpression"(node) {
81
+ const current = methodStack.at(-1);
82
+ if (current?.kind !== "get") {
83
+ return;
84
+ }
85
+ const memberNode = toTSESTreeNode(node);
86
+ if (isSuperPropertyAccess(memberNode, current.methodName)) {
87
+ current.hasSuperCall = true;
88
+ }
89
+ },
90
+ "MethodDefinition"(node) {
91
+ const methodNode = toTSESTreeNode(node);
92
+ if (!methodNode.override || methodNode.key.type !== "Identifier") {
93
+ return;
94
+ }
95
+ const kind = methodNode.kind === "get" || methodNode.kind === "set" ? methodNode.kind : "method";
96
+ methodStack.push({
97
+ hasSuperCall: false,
98
+ kind,
99
+ methodName: methodNode.key.name,
100
+ node: methodNode,
101
+ reportNode: node
102
+ });
103
+ },
104
+ "MethodDefinition:exit"() {
105
+ const info = methodStack.at(-1);
106
+ if (!info) {
107
+ return;
108
+ }
109
+ methodStack.pop();
110
+ if (info.hasSuperCall || isParentMethodAbstract({
111
+ context,
112
+ methodName: info.methodName,
113
+ methodNode: info.node
114
+ })) {
115
+ return;
116
+ }
117
+ context.report({
118
+ data: { kind: info.kind, methodName: info.methodName },
119
+ messageId: MESSAGE_ID,
120
+ node: info.reportNode
121
+ });
122
+ }
123
+ };
124
+ },
125
+ meta: {
126
+ docs: {
127
+ description: "Require `override` methods to call `super.methodName()`"
128
+ },
129
+ messages: {
130
+ [MESSAGE_ID]: "Override {{ kind }} `{{ methodName }}` must access `super.{{ methodName }}`."
131
+ },
132
+ schema: [],
133
+ type: "problem"
134
+ }
135
+ };
136
+ function isAbstract(declaration) {
137
+ assert(canHaveModifiers(declaration), "Expected method declaration to support modifiers");
138
+ const modifiers = getModifiers(declaration);
139
+ return modifiers?.some(($module) => $module.kind === SyntaxKind.AbstractKeyword) ?? false;
140
+ }
141
+ function isParentMethodAbstract(params) {
142
+ const { context, methodName, methodNode } = params;
143
+ const services = context.sourceCode.parserServices;
144
+ if (!services.program || !services.esTreeNodeToTSNodeMap) {
145
+ return false;
146
+ }
147
+ const checker = services.program.getTypeChecker();
148
+ const classDeclaration = methodNode.parent.parent;
149
+ const tsClassNode = services.esTreeNodeToTSNodeMap.get(classDeclaration);
150
+ const classType = checker.getTypeAtLocation(tsClassNode);
151
+ const baseTypes = classType.getBaseTypes();
152
+ if (!baseTypes) {
153
+ return false;
154
+ }
155
+ for (const baseType of baseTypes) {
156
+ const property = baseType.getProperty(methodName);
157
+ if (!property) {
158
+ continue;
159
+ }
160
+ const declarations = property.getDeclarations();
161
+ if (!declarations) {
162
+ continue;
163
+ }
164
+ for (const declaration of declarations) {
165
+ if (isAbstract(declaration)) {
166
+ return true;
167
+ }
168
+ }
169
+ }
170
+ return false;
171
+ }
172
+ function isSuperMethodCall(node, methodName) {
173
+ const callee = node.callee;
174
+ return callee.type === "MemberExpression" && callee.object.type === "Super" && callee.property.type === "Identifier" && callee.property.name === methodName;
175
+ }
176
+ function isSuperPropertyAccess(node, propertyName) {
177
+ return node.type === "MemberExpression" && node.object.type === "Super" && node.property.type === "Identifier" && node.property.name === propertyName;
178
+ }
179
+ export {
180
+ MESSAGE_ID,
181
+ requireSuperCall
182
+ };
183
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtc3VwZXItY2FsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLXN1cGVyLWNhbGxcbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYW4gYG92ZXJyaWRlYCBtZXRob2QgZG9lcyBub3QgY2FsbCBgc3VwZXIubWV0aG9kTmFtZSgpYFxuICogYW55d2hlcmUgaW4gaXRzIGJvZHkuIE92ZXJyaWRpbmcgYSBtZXRob2Qgd2l0aG91dCBjYWxsaW5nIGBzdXBlcmAgaXMgYWxtb3N0XG4gKiBhbHdheXMgYSBtaXN0YWtlIHRoYXQgc2lsZW50bHkgYnJlYWtzIHBhcmVudC1jbGFzcyBiZWhhdmlvciAobGlmZWN5Y2xlIGhvb2tzLFxuICogaW5pdGlhbGl6YXRpb24sIGV2ZW50IHdpcmluZywgZXRjLikuXG4gKlxuICogVGhlIHN1cGVyIGNhbGwgY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgbWV0aG9kIGJvZHkgXHUyMDE0IGFzIGEgc3RhbmRhbG9uZVxuICogc3RhdGVtZW50LCBhd2FpdGVkLCBhc3NpZ25lZCB0byBhIHZhcmlhYmxlLCBvciBuZXN0ZWQgaW4gYW55IGV4cHJlc3Npb24uXG4gKlxuICogVGhlIHJ1bGUgYXV0b21hdGljYWxseSBza2lwcyBtZXRob2RzIHdoZXJlIHRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb24gaXNcbiAqIGBhYnN0cmFjdGAsIHNpbmNlIHRoZXJlIGlzIG5vIGNvbmNyZXRlIGBzdXBlcmAgdG8gY2FsbC5cbiAqXG4gKiBJZiB0aGUgb3ZlcnJpZGUgaW50ZW50aW9uYWxseSByZXBsYWNlcyB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9uLCBkaXNhYmxlIHRoZVxuICogcnVsZSBvbiB0aGF0IGxpbmUgd2l0aCBhbiBleHBsYW5hdG9yeSBjb21tZW50LlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IERlY2xhcmF0aW9uIH0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBjYW5IYXZlTW9kaWZpZXJzLFxuICBnZXRNb2RpZmllcnMsXG4gIFN5bnRheEtpbmRcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGBvdmVycmlkZWAgbWV0aG9kIGRvZXMgbm90IGFjY2VzcyBpdHMgYHN1cGVyYCBjb3VudGVycGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncmVxdWlyZVN1cGVyQ2FsbCc7XG5cbnR5cGUgTWV0aG9kS2luZCA9ICdnZXQnIHwgJ21ldGhvZCcgfCAnc2V0JztcblxuaW50ZXJmYWNlIE92ZXJyaWRlTWV0aG9kSW5mbyB7XG4gIGhhc1N1cGVyQ2FsbDogYm9vbGVhbjtcbiAga2luZDogTWV0aG9kS2luZDtcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBub2RlOiBUU0VTVHJlZS5NZXRob2REZWZpbml0aW9uO1xuICByZXBvcnROb2RlOiBSdWxlLk5vZGU7XG59XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIGBvdmVycmlkZWAgbWV0aG9kcyB0byBjYWxsIGBzdXBlci5tZXRob2ROYW1lKClgLCBzbyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc2lsZW50bHkgc2tpcHBlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVTdXBlckNhbGw6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRob2RTdGFjazogT3ZlcnJpZGVNZXRob2RJbmZvW10gPSBbXTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQXNzaWdubWVudEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gbWV0aG9kU3RhY2suYXQoLTEpO1xuICAgICAgICBpZiAoY3VycmVudD8ua2luZCAhPT0gJ3NldCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhc3NpZ25Ob2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQXNzaWdubWVudEV4cHJlc3Npb247XG4gICAgICAgIGlmIChpc1N1cGVyUHJvcGVydHlBY2Nlc3MoYXNzaWduTm9kZS5sZWZ0LCBjdXJyZW50Lm1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgY3VycmVudC5oYXNTdXBlckNhbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IG1ldGhvZFN0YWNrLmF0KC0xKTtcbiAgICAgICAgaWYgKGN1cnJlbnQ/LmtpbmQgIT09ICdtZXRob2QnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKGlzU3VwZXJNZXRob2RDYWxsKGNhbGxOb2RlLCBjdXJyZW50Lm1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgY3VycmVudC5oYXNTdXBlckNhbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ01lbWJlckV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gbWV0aG9kU3RhY2suYXQoLTEpO1xuICAgICAgICBpZiAoY3VycmVudD8ua2luZCAhPT0gJ2dldCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXJOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKGlzU3VwZXJQcm9wZXJ0eUFjY2VzcyhtZW1iZXJOb2RlLCBjdXJyZW50Lm1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgY3VycmVudC5oYXNTdXBlckNhbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ01ldGhvZERlZmluaXRpb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXRob2ROb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuTWV0aG9kRGVmaW5pdGlvbjtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICAgICAgICBpZiAoIW1ldGhvZE5vZGUub3ZlcnJpZGUgfHwgbWV0aG9kTm9kZS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2luZCA9IG1ldGhvZE5vZGUua2luZCA9PT0gJ2dldCcgfHwgbWV0aG9kTm9kZS5raW5kID09PSAnc2V0JyA/IG1ldGhvZE5vZGUua2luZCA6ICdtZXRob2QnO1xuXG4gICAgICAgIG1ldGhvZFN0YWNrLnB1c2goe1xuICAgICAgICAgIGhhc1N1cGVyQ2FsbDogZmFsc2UsXG4gICAgICAgICAga2luZCxcbiAgICAgICAgICBtZXRob2ROYW1lOiBtZXRob2ROb2RlLmtleS5uYW1lLFxuICAgICAgICAgIG5vZGU6IG1ldGhvZE5vZGUsXG4gICAgICAgICAgcmVwb3J0Tm9kZTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAnTWV0aG9kRGVmaW5pdGlvbjpleGl0JygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IG1ldGhvZFN0YWNrLmF0KC0xKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbWV0aG9kU3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZm8uaGFzU3VwZXJDYWxsIHx8IGlzUGFyZW50TWV0aG9kQWJzdHJhY3Qoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IGluZm8ubWV0aG9kTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZE5vZGU6IGluZm8ubm9kZVxuICAgICAgICAgIH0pXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBkYXRhOiB7IGtpbmQ6IGluZm8ua2luZCwgbWV0aG9kTmFtZTogaW5mby5tZXRob2ROYW1lIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGU6IGluZm8ucmVwb3J0Tm9kZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGBvdmVycmlkZWAgbWV0aG9kcyB0byBjYWxsIGBzdXBlci5tZXRob2ROYW1lKClgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ092ZXJyaWRlIHt7IGtpbmQgfX0gYHt7IG1ldGhvZE5hbWUgfX1gIG11c3QgYWNjZXNzIGBzdXBlci57eyBtZXRob2ROYW1lIH19YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc1BhcmVudE1ldGhvZEFic3RyYWN0fS5cbiAqL1xuaW50ZXJmYWNlIENoZWNrSXNQYXJlbnRNZXRob2RBYnN0cmFjdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbmFtZSB0byBsb29rIHVwIGluIHRoZSBwYXJlbnQgY2xhc3MuXG4gICAqL1xuICByZWFkb25seSBtZXRob2ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVycmlkZSBtZXRob2QgZGVmaW5pdGlvbiBBU1Qgbm9kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5vZGU6IFRTRVNUcmVlLk1ldGhvZERlZmluaXRpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBkZWNsYXJhdGlvbiBoYXMgdGhlIGBhYnN0cmFjdGAgbW9kaWZpZXIuXG4gKlxuICogQHBhcmFtIGRlY2xhcmF0aW9uIC0gVGhlIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGVjbGFyYXRpb24gaXMgYWJzdHJhY3QuXG4gKi9cbmZ1bmN0aW9uIGlzQWJzdHJhY3QoZGVjbGFyYXRpb246IERlY2xhcmF0aW9uKTogYm9vbGVhbiB7XG4gIGFzc2VydChjYW5IYXZlTW9kaWZpZXJzKGRlY2xhcmF0aW9uKSwgJ0V4cGVjdGVkIG1ldGhvZCBkZWNsYXJhdGlvbiB0byBzdXBwb3J0IG1vZGlmaWVycycpO1xuXG4gIGNvbnN0IG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyhkZWNsYXJhdGlvbik7XG4gIHJldHVybiBtb2RpZmllcnM/LnNvbWUoKCRtb2R1bGUpID0+ICRtb2R1bGUua2luZCA9PT0gU3ludGF4S2luZC5BYnN0cmFjdEtleXdvcmQpID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwYXJlbnQgY2xhc3MncyB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaXMgYGFic3RyYWN0YC5cbiAqXG4gKiBXaGVuIHR5cGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSAoZS5nLiwgcGFyc2VyIGNvbmZpZ3VyZWQgd2l0aG91dFxuICogYHByb2plY3RTZXJ2aWNlYCksIHJldHVybnMgYGZhbHNlYCBzbyB0aGUgcnVsZSBjb25zZXJ2YXRpdmVseSByZXBvcnRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXJlbnQgbWV0aG9kIGlzIGFic3RyYWN0LlxuICovXG5mdW5jdGlvbiBpc1BhcmVudE1ldGhvZEFic3RyYWN0KHBhcmFtczogQ2hlY2tJc1BhcmVudE1ldGhvZEFic3RyYWN0UGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWV0aG9kTmFtZSwgbWV0aG9kTm9kZSB9ID0gcGFyYW1zO1xuICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJ0aWFsPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbj47XG5cbiAgaWYgKCFzZXJ2aWNlcy5wcm9ncmFtIHx8ICFzZXJ2aWNlcy5lc1RyZWVOb2RlVG9UU05vZGVNYXApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjaGVja2VyID0gc2VydmljZXMucHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWV0aG9kTm9kZS5wYXJlbnQucGFyZW50O1xuICBjb25zdCB0c0NsYXNzTm9kZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoY2xhc3NEZWNsYXJhdGlvbik7XG4gIGNvbnN0IGNsYXNzVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24odHNDbGFzc05vZGUpO1xuICBjb25zdCBiYXNlVHlwZXMgPSBjbGFzc1R5cGUuZ2V0QmFzZVR5cGVzKCk7XG5cbiAgaWYgKCFiYXNlVHlwZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGJhc2VUeXBlIG9mIGJhc2VUeXBlcykge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gYmFzZVR5cGUuZ2V0UHJvcGVydHkobWV0aG9kTmFtZSk7XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eS5nZXREZWNsYXJhdGlvbnMoKTtcblxuICAgIGlmICghZGVjbGFyYXRpb25zKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKGlzQWJzdHJhY3QoZGVjbGFyYXRpb24pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGNhbGwgZXhwcmVzc2lvbiBpcyBgc3VwZXIubWV0aG9kTmFtZSguLi4pYC5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIGV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gVGhlIGV4cGVjdGVkIG1ldGhvZCBuYW1lLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgbWF0Y2hpbmcgc3VwZXIgbWV0aG9kIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzU3VwZXJNZXRob2RDYWxsKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uLCBtZXRob2ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy4gKi9cbiAgcmV0dXJuIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBjYWxsZWUub2JqZWN0LnR5cGUgPT09ICdTdXBlcidcbiAgICAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgJiYgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09IG1ldGhvZE5hbWU7XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gUmUtZW5hYmxlIGFmdGVyIG11bHRpLWxpbmUgc3RyaW5nIGNvbXBhcmlzb24gYmxvY2suICovXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGEgYHN1cGVyLnByb3BlcnR5TmFtZWAgbWVtYmVyIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgQVNUIG5vZGUgdG8gY2hlY2sgKE1lbWJlckV4cHJlc3Npb24gb3IgQXNzaWdubWVudEV4cHJlc3Npb24gbGVmdC1oYW5kIHNpZGUpLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSBuYW1lLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgbWF0Y2hpbmcgc3VwZXIgcHJvcGVydHkgYWNjZXNzLlxuICovXG5mdW5jdGlvbiBpc1N1cGVyUHJvcGVydHlBY2Nlc3Mobm9kZTogVFNFU1RyZWUuTm9kZSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLiAqL1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBub2RlLm9iamVjdC50eXBlID09PSAnU3VwZXInXG4gICAgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICAmJiBub2RlLnByb3BlcnR5Lm5hbWUgPT09IHByb3BlcnR5TmFtZTtcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBSZS1lbmFibGUgYWZ0ZXIgbXVsdGktbGluZSBzdHJpbmcgY29tcGFyaXNvbiBibG9jay4gKi9cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHNCQUFzQjtBQUt4QixNQUFNLGFBQWE7QUFlbkIsTUFBTSxtQkFBb0M7QUFBQSxFQUMvQyxPQUFPLFNBQVM7QUFDZCxVQUFNLGNBQW9DLENBQUM7QUFFM0MsV0FBTztBQUFBLE1BQ0wsdUJBQXVCLE1BQXVCO0FBQzVDLGNBQU0sVUFBVSxZQUFZLEdBQUcsRUFBRTtBQUNqQyxZQUFJLFNBQVMsU0FBUyxPQUFPO0FBQzNCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxlQUFlLElBQUk7QUFDdEMsWUFBSSxzQkFBc0IsV0FBVyxNQUFNLFFBQVEsVUFBVSxH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
@@ -0,0 +1,18 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Helper for bridging ESLint v10 rule types with `@typescript-eslint/rule-tester`.
6
+ */
7
+ import type { RuleTester } from '@typescript-eslint/rule-tester';
8
+ import type { Rule } from 'eslint';
9
+ /**
10
+ * Casts an ESLint v10 `Rule.RuleModule` to the type expected by
11
+ * `@typescript-eslint/rule-tester`. The types are incompatible at the type
12
+ * level because typescript-eslint hasn't updated for ESLint v10 yet, but
13
+ * they are compatible at runtime.
14
+ *
15
+ * @param rule - The ESLint rule module.
16
+ * @returns The same rule, typed for the rule tester.
17
+ */
18
+ export declare function toRuleTesterModule(rule: Rule.RuleModule): Parameters<RuleTester['run']>[1];
@@ -0,0 +1,55 @@
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 initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ function toRuleTesterModule(rule) {
49
+ const bridged = rule;
50
+ return bridged;
51
+ }
52
+ export {
53
+ toRuleTesterModule
54
+ };
55
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3J1bGUtdGVzdGVyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhlbHBlciBmb3IgYnJpZGdpbmcgRVNMaW50IHYxMCBydWxlIHR5cGVzIHdpdGggYEB0eXBlc2NyaXB0LWVzbGludC9ydWxlLXRlc3RlcmAuXG4gKi9cbmltcG9ydCB0eXBlIHsgUnVsZVRlc3RlciB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC9ydWxlLXRlc3Rlcic7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG4vKipcbiAqIENhc3RzIGFuIEVTTGludCB2MTAgYFJ1bGUuUnVsZU1vZHVsZWAgdG8gdGhlIHR5cGUgZXhwZWN0ZWQgYnlcbiAqIGBAdHlwZXNjcmlwdC1lc2xpbnQvcnVsZS10ZXN0ZXJgLiBUaGUgdHlwZXMgYXJlIGluY29tcGF0aWJsZSBhdCB0aGUgdHlwZVxuICogbGV2ZWwgYmVjYXVzZSB0eXBlc2NyaXB0LWVzbGludCBoYXNuJ3QgdXBkYXRlZCBmb3IgRVNMaW50IHYxMCB5ZXQsIGJ1dFxuICogdGhleSBhcmUgY29tcGF0aWJsZSBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBydWxlIC0gVGhlIEVTTGludCBydWxlIG1vZHVsZS5cbiAqIEByZXR1cm5zIFRoZSBzYW1lIHJ1bGUsIHR5cGVkIGZvciB0aGUgcnVsZSB0ZXN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1J1bGVUZXN0ZXJNb2R1bGUocnVsZTogUnVsZS5SdWxlTW9kdWxlKTogUGFyYW1ldGVyczxSdWxlVGVzdGVyWydydW4nXT5bMV0ge1xuICAvLyBCcmlkZ2UgRVNMaW50IHYxMCBSdWxlLlJ1bGVNb2R1bGUgdG8gQHR5cGVzY3JpcHQtZXNsaW50L3J1bGUtdGVzdGVyJ3MgUnVsZU1vZHVsZS5cbiAgLy8gU3RydWN0dXJhbGx5IGNvbXBhdGlibGUgYnV0IG5vbWluYWxseSBpbmNvbXBhdGlibGUgdW50aWwgdHlwZXNjcmlwdC1lc2xpbnQgdXBkYXRlcy5cbiAgY29uc3QgYnJpZGdlZDogdW5rbm93biA9IHJ1bGU7XG5cbiAgcmV0dXJuIGJyaWRnZWQgYXMgUGFyYW1ldGVyczxSdWxlVGVzdGVyWydydW4nXT5bMV07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCTyxTQUFTLG1CQUFtQixNQUF5RDtBQUcxRixRQUFNLFVBQW1CO0FBRXpCLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,23 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Views a node ESLint hands a rule as the TSESTree node it is.
6
+ *
7
+ * Under `@typescript-eslint/parser` every node a rule receives is a TSESTree node, but ESLint's own types describe
8
+ * it as an ESTree one. The two shapes disagree on how `type` is typed: ESTree uses string literals, TSESTree uses
9
+ * `AST_NODE_TYPES` enum members. So asserting straight from one to the other is an unsafe enum assignment
10
+ * (`@typescript-eslint/no-unsafe-enum-assignment`, since typescript-eslint 8.71). This module is the one place that
11
+ * crossing is made; a caller narrows the result within TSESTree, which is an ordinary downcast.
12
+ */
13
+ import type { TSESTree } from '@typescript-eslint/utils';
14
+ import type { Node as EstreeNode } from 'estree';
15
+ /**
16
+ * Views an ESLint (ESTree-typed) node as a TSESTree node.
17
+ *
18
+ * The node is returned unchanged: only its static type moves.
19
+ *
20
+ * @param node - The node ESLint passed to the rule.
21
+ * @returns The same node, typed as a TSESTree node.
22
+ */
23
+ export declare function toTSESTreeNode(node: EstreeNode): TSESTree.Node;
@@ -0,0 +1,55 @@
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 initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { castTo } from "@mnaoumov/typescript-lib/object-utils";
49
+ function toTSESTreeNode(node) {
50
+ return castTo(node);
51
+ }
52
+ export {
53
+ toTSESTreeNode
54
+ };
55
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3RzLWVzdHJlZS1ub2RlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmlld3MgYSBub2RlIEVTTGludCBoYW5kcyBhIHJ1bGUgYXMgdGhlIFRTRVNUcmVlIG5vZGUgaXQgaXMuXG4gKlxuICogVW5kZXIgYEB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJgIGV2ZXJ5IG5vZGUgYSBydWxlIHJlY2VpdmVzIGlzIGEgVFNFU1RyZWUgbm9kZSwgYnV0IEVTTGludCdzIG93biB0eXBlcyBkZXNjcmliZVxuICogaXQgYXMgYW4gRVNUcmVlIG9uZS4gVGhlIHR3byBzaGFwZXMgZGlzYWdyZWUgb24gaG93IGB0eXBlYCBpcyB0eXBlZDogRVNUcmVlIHVzZXMgc3RyaW5nIGxpdGVyYWxzLCBUU0VTVHJlZSB1c2VzXG4gKiBgQVNUX05PREVfVFlQRVNgIGVudW0gbWVtYmVycy4gU28gYXNzZXJ0aW5nIHN0cmFpZ2h0IGZyb20gb25lIHRvIHRoZSBvdGhlciBpcyBhbiB1bnNhZmUgZW51bSBhc3NpZ25tZW50XG4gKiAoYEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1hc3NpZ25tZW50YCwgc2luY2UgdHlwZXNjcmlwdC1lc2xpbnQgOC43MSkuIFRoaXMgbW9kdWxlIGlzIHRoZSBvbmUgcGxhY2UgdGhhdFxuICogY3Jvc3NpbmcgaXMgbWFkZTsgYSBjYWxsZXIgbmFycm93cyB0aGUgcmVzdWx0IHdpdGhpbiBUU0VTVHJlZSwgd2hpY2ggaXMgYW4gb3JkaW5hcnkgZG93bmNhc3QuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7IE5vZGUgYXMgRXN0cmVlTm9kZSB9IGZyb20gJ2VzdHJlZSc7XG5cbmltcG9ydCB7IGNhc3RUbyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuXG4vKipcbiAqIFZpZXdzIGFuIEVTTGludCAoRVNUcmVlLXR5cGVkKSBub2RlIGFzIGEgVFNFU1RyZWUgbm9kZS5cbiAqXG4gKiBUaGUgbm9kZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQ6IG9ubHkgaXRzIHN0YXRpYyB0eXBlIG1vdmVzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgRVNMaW50IHBhc3NlZCB0byB0aGUgcnVsZS5cbiAqIEByZXR1cm5zIFRoZSBzYW1lIG5vZGUsIHR5cGVkIGFzIGEgVFNFU1RyZWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVFNFU1RyZWVOb2RlKG5vZGU6IEVzdHJlZU5vZGUpOiBUU0VTVHJlZS5Ob2RlIHtcbiAgcmV0dXJuIGNhc3RUbzxUU0VTVHJlZS5Ob2RlPihub2RlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsU0FBUyxjQUFjO0FBVWhCLFNBQVMsZUFBZSxNQUFpQztBQUM5RCxTQUFPLE9BQXNCLElBQUk7QUFDbkM7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,20 @@
1
+ /// <reference path="../../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Fixed typings for the `@eslint-community/eslint-plugin-eslint-comments/configs` package.
6
+ *
7
+ * @see {@link https://www.npmjs.com/package/@eslint-community/eslint-plugin-eslint-comments} for more information.
8
+ */
9
+
10
+ declare module '@eslint-community/eslint-plugin-eslint-comments/configs' {
11
+ import type { Linter } from 'eslint';
12
+
13
+ interface EslintCommentsConfigs {
14
+ recommended: Linter.Config;
15
+ }
16
+
17
+ const configs: EslintCommentsConfigs;
18
+ // eslint-disable-next-line import-x/no-default-export -- That is the way library exports.
19
+ export default configs;
20
+ }
@@ -0,0 +1,17 @@
1
+ /// <reference path="../../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Fixed typings for the `eslint-plugin-verify-tsdoc` package.
6
+ *
7
+ * @see {@link https://www.npmjs.com/package/eslint-plugin-verify-tsdoc} for more information.
8
+ */
9
+
10
+ declare module 'eslint-plugin-verify-tsdoc' {
11
+ import type { ESLint } from 'eslint';
12
+
13
+ const plugin: ESLint.Plugin;
14
+
15
+ // eslint-disable-next-line import-x/no-default-export -- That is the way library exports.
16
+ export default plugin;
17
+ }
@@ -0,0 +1,74 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Linting utility for ESLint configuration with support for automatic fixing.
6
+ *
7
+ * This module provides a function to lint files based on the ESLint configuration defined in `eslint.config.ts`.
8
+ * It can automatically fix linting issues if specified, and logs results to the console.
9
+ *
10
+ * It also keeps a crashed linter apart from a red codebase. Handing ESLint's exit code straight to
11
+ * {@link execFromRoot} and letting it throw reports every non-zero code the same way -- `Command failed with
12
+ * exit code N` -- which puts a rule that threw, a broken config and an OS-level death in the same bucket as
13
+ * real findings. The reader then goes hunting for a defect in source code that was never judged at all.
14
+ */
15
+ import type { ExecResult } from '../exec.mjs';
16
+ /**
17
+ * What an ESLint run actually established.
18
+ *
19
+ * - `clean` -- it linted everything and found nothing, warnings included: see
20
+ * {@link ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS} for what makes the "included" half true.
21
+ * - `lint-problems` -- it linted everything and the SOURCE is red.
22
+ * - `did-not-lint` -- it never got through the lint, so the source has not been judged at all.
23
+ */
24
+ export type EslintExitKind = 'clean' | 'did-not-lint' | 'lint-problems';
25
+ /**
26
+ * The message thrown for real findings, kept apart from {@link describeFailureToLint}'s.
27
+ */
28
+ export declare const LINT_PROBLEMS_MESSAGE = "ESLint reported lint problems. The findings are printed above.";
29
+ /**
30
+ * Parameters for the {@link lint} function.
31
+ */
32
+ export interface LintOptions {
33
+ /**
34
+ * The configuration file copied to the project root when the project has none. Without it, ESLint runs
35
+ * against whatever it finds, and reports a missing configuration itself.
36
+ */
37
+ readonly defaultConfigFilePath?: string | undefined;
38
+ /**
39
+ * Optional file paths to lint. If omitted, lints the entire project.
40
+ */
41
+ readonly paths?: string[] | undefined;
42
+ /**
43
+ * Whether to fix linting issues automatically.
44
+ *
45
+ * @default `false`
46
+ */
47
+ readonly shouldFix?: boolean | undefined;
48
+ }
49
+ /**
50
+ * Decides which of the three things an ESLint run established.
51
+ *
52
+ * A killed process is `did-not-lint` whatever its exit code says, because a signal means it was stopped
53
+ * rather than that it finished. An exit `1` carrying ESLint's fatal-error banner is `did-not-lint` too: that
54
+ * is a crash npm relayed as a plain `1`, not a finding.
55
+ *
56
+ * @param result - What the ESLint child did.
57
+ * @returns The kind of ending it was.
58
+ */
59
+ export declare function classifyEslintExit(result: ExecResult): EslintExitKind;
60
+ /**
61
+ * Says which of the four failures to lint happened, and quotes back what ESLint said about it.
62
+ *
63
+ * @param result - What the ESLint child did.
64
+ * @returns The message to throw, which says outright that it is not a finding about the source.
65
+ */
66
+ export declare function describeFailureToLint(result: ExecResult): string;
67
+ /**
68
+ * Lint the project with ESLint.
69
+ *
70
+ * @param options - The {@link LintOptions}.
71
+ * @throws An `Error` carrying {@link LINT_PROBLEMS_MESSAGE} when the source is red, and
72
+ * {@link describeFailureToLint}'s message when ESLint never finished linting at all.
73
+ */
74
+ export declare function lint(options?: LintOptions): Promise<void>;