@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,265 @@
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_unused_params_members_exports = {};
80
+ __export(no_unused_params_members_exports, {
81
+ MESSAGE_ID: () => MESSAGE_ID,
82
+ noUnusedParamsMembers: () => noUnusedParamsMembers
83
+ });
84
+ module.exports = __toCommonJS(no_unused_params_members_exports);
85
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
86
+ const PARAMS_OPTIONS_SUFFIX_PATTERN = /(?:Params|Options)$/;
87
+ const MESSAGE_ID = "unusedParamsMember";
88
+ const noUnusedParamsMembers = {
89
+ create(context) {
90
+ const interfaceKeyNodes = /* @__PURE__ */ new Map();
91
+ const usageByInterface = /* @__PURE__ */ new Map();
92
+ return {
93
+ ":function"(node) {
94
+ for (const parameter of record(node)["params"]) {
95
+ const info = getParameterInfo(parameter);
96
+ if (!info) {
97
+ continue;
98
+ }
99
+ const usage = getOrCreateUsage(info.typeName);
100
+ if (info.binding.type === "pattern") {
101
+ collectPatternMembers(info.binding.pattern, usage);
102
+ } else {
103
+ collectReferenceMembers({
104
+ parameterName: info.binding.name,
105
+ scope: context.sourceCode.getScope(node),
106
+ usage
107
+ });
108
+ }
109
+ }
110
+ },
111
+ "Program:exit"() {
112
+ for (const [typeName, keyNodes] of interfaceKeyNodes) {
113
+ const usage = usageByInterface.get(typeName);
114
+ if (!usage || usage.usesAll) {
115
+ continue;
116
+ }
117
+ for (const [memberName, keyNode] of keyNodes) {
118
+ if (!usage.used.has(memberName)) {
119
+ context.report({
120
+ data: {
121
+ interfaceName: typeName,
122
+ member: memberName
123
+ },
124
+ messageId: MESSAGE_ID,
125
+ node: keyNode
126
+ });
127
+ }
128
+ }
129
+ }
130
+ },
131
+ TSInterfaceDeclaration(node) {
132
+ const name = getInterfaceName(node);
133
+ if (!PARAMS_OPTIONS_SUFFIX_PATTERN.test(name)) {
134
+ return;
135
+ }
136
+ interfaceKeyNodes.set(name, getInterfaceMembers(node));
137
+ }
138
+ };
139
+ function getOrCreateUsage(typeName) {
140
+ let usage = usageByInterface.get(typeName);
141
+ if (!usage) {
142
+ usage = { used: /* @__PURE__ */ new Set(), usesAll: false };
143
+ usageByInterface.set(typeName, usage);
144
+ }
145
+ return usage;
146
+ }
147
+ },
148
+ meta: {
149
+ docs: {
150
+ description: "Flag `*Params`/`*Options` interface members never accessed by the function that receives them"
151
+ },
152
+ messages: {
153
+ [MESSAGE_ID]: 'Member "{{ member }}" of "{{ interfaceName }}" is never accessed by the function that receives it. Remove it (the compiler will catch it if it is still needed elsewhere).'
154
+ },
155
+ schema: [],
156
+ type: "suggestion"
157
+ }
158
+ };
159
+ function classifyReference(reference, usage) {
160
+ const parent = record(reference)["parent"];
161
+ if (parent.type === "MemberExpression" && record(parent)["object"] === reference) {
162
+ collectMemberAccess(parent, usage);
163
+ return;
164
+ }
165
+ if (parent.type === "VariableDeclarator" && record(parent)["init"] === reference && record(parent)["id"].type === "ObjectPattern") {
166
+ collectPatternMembers(record(parent)["id"], usage);
167
+ return;
168
+ }
169
+ usage.usesAll = true;
170
+ }
171
+ function collectMemberAccess(node, usage) {
172
+ const isComputed = record(node)["computed"] === true;
173
+ const property = record(node)["property"];
174
+ if (property.type === "Identifier") {
175
+ if (!isComputed) {
176
+ usage.used.add(record(property)["name"]);
177
+ }
178
+ return;
179
+ }
180
+ if (property.type !== "Literal") {
181
+ return;
182
+ }
183
+ const value = record(property)["value"];
184
+ if (typeof value === "string") {
185
+ usage.used.add(value);
186
+ }
187
+ }
188
+ function collectPatternMembers(pattern, usage) {
189
+ for (const property of record(pattern)["properties"]) {
190
+ if (property.type !== "Property") {
191
+ usage.usesAll = true;
192
+ continue;
193
+ }
194
+ if (record(property)["computed"] === true) {
195
+ continue;
196
+ }
197
+ const key = record(property)["key"];
198
+ if (key.type === "Identifier") {
199
+ usage.used.add(record(key)["name"]);
200
+ }
201
+ }
202
+ }
203
+ function collectReferenceMembers(params) {
204
+ const { parameterName, scope, usage } = params;
205
+ const variable = (0, import_type_guards.ensureNonNullable)(scope.set.get(parameterName));
206
+ for (const reference of variable.references) {
207
+ classifyReference(reference.identifier, usage);
208
+ }
209
+ }
210
+ function getInterfaceMembers(node) {
211
+ const members = /* @__PURE__ */ new Map();
212
+ const interfaceBody = record(node)["body"];
213
+ for (const signature of record(interfaceBody)["body"]) {
214
+ if (nodeType(signature) !== "TSPropertySignature" && nodeType(signature) !== "TSMethodSignature" || record(signature)["computed"] === true) {
215
+ continue;
216
+ }
217
+ const key = record(signature)["key"];
218
+ if (key.type === "Identifier") {
219
+ members.set(record(key)["name"], key);
220
+ }
221
+ }
222
+ return members;
223
+ }
224
+ function getInterfaceName(node) {
225
+ const id = record(node)["id"];
226
+ return record(id)["name"];
227
+ }
228
+ function getParameterInfo(parameter) {
229
+ const actualParameter = nodeType(parameter) === "TSParameterProperty" ? record(parameter)["parameter"] : parameter;
230
+ const typeName = getTypeReferenceName(actualParameter);
231
+ if (!typeName || !PARAMS_OPTIONS_SUFFIX_PATTERN.test(typeName)) {
232
+ return void 0;
233
+ }
234
+ if (actualParameter.type === "Identifier") {
235
+ return { binding: { name: record(actualParameter)["name"], type: "identifier" }, typeName };
236
+ }
237
+ return actualParameter.type === "ObjectPattern" ? { binding: { pattern: actualParameter, type: "pattern" }, typeName } : void 0;
238
+ }
239
+ function getTypeReferenceName(parameter) {
240
+ const annotation = record(parameter)["typeAnnotation"];
241
+ if (!isNode(annotation)) {
242
+ return void 0;
243
+ }
244
+ const typeNode = record(annotation)["typeAnnotation"];
245
+ if (nodeType(typeNode) !== "TSTypeReference") {
246
+ return void 0;
247
+ }
248
+ const typeName = record(typeNode)["typeName"];
249
+ return typeName.type === "Identifier" ? record(typeName)["name"] : void 0;
250
+ }
251
+ function isNode(value) {
252
+ return typeof value === "object" && value !== null && typeof value.type === "string";
253
+ }
254
+ function nodeType(node) {
255
+ return record(node)["type"];
256
+ }
257
+ function record(node) {
258
+ return node;
259
+ }
260
+ // Annotate the CommonJS export names for ESM import in node:
261
+ 0 && (module.exports = {
262
+ MESSAGE_ID,
263
+ noUnusedParamsMembers
264
+ });
265
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnVzZWQtcGFyYW1zLW1lbWJlcnNcbiAqXG4gKiBGbGFncyBtZW1iZXJzIG9mIGEgYCpQYXJhbXNgIC8gYCpPcHRpb25zYCBwYXJhbWV0ZXItYmFnIGludGVyZmFjZSB0aGF0IGFyZVxuICogbmV2ZXIgYWNjZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi9tZXRob2QvY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGVcbiAqIGludGVyZmFjZSBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBEZXRlY3Rpb24gaXMgcGVyLWZ1bmN0aW9uLCB1c2luZyBzY29wZSBhbmFseXNpcyB0byBmaW5kIHRoZSByZWFsIHJlZmVyZW5jZXNcbiAqIHRvIHRoZSBwYXJhbWV0ZXIgKG5vdCB1bnJlbGF0ZWQgc2FtZS1uYW1lZCBpZGVudGlmaWVycykuIEEgbWVtYmVyIGNvdW50cyBhc1xuICogdXNlZCB3aGVuIGl0IGlzIHJlZmVyZW5jZWQgYnkgbmFtZSBcdTIwMTQgYHBhcmFtcy5tZW1iZXJgLCBgcGFyYW1zWydtZW1iZXInXWAsIG9yXG4gKiBgY29uc3QgeyBtZW1iZXIgfSA9IHBhcmFtc2AgKHBsdXMgYSBkZXN0cnVjdHVyZWQgc2lnbmF0dXJlXG4gKiBgZm4oeyBtZW1iZXIgfTogRm9vUGFyYW1zKWApLlxuICpcbiAqIENydWNpYWxseSwgaWYgdGhlIG9iamVjdCBldmVyIEVTQ0FQRVMgd2hvbGUgXHUyMDE0IHNwcmVhZCAoYHsgLi4ucGFyYW1zIH1gKSwgcmVzdFxuICogKGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2ApLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgKGBmKHBhcmFtcylgKSwgcmV0dXJuZWQsXG4gKiBvciBzdG9yZWQgKGB0aGlzLnBhcmFtcyA9IHBhcmFtc2ApIFx1MjAxNCBldmVyeSBtZW1iZXIgaXMgdHJlYXRlZCBhcyB1c2VkIGFuZFxuICogbm90aGluZyBpcyByZXBvcnRlZCBmb3IgdGhhdCBpbnRlcmZhY2UuIFN1Y2ggYW4gZXNjYXBlIGVpdGhlciByZWFkcyBldmVyeVxuICogbWVtYmVyIChzcHJlYWQvcmVzdCkgb3IgaGFuZHMgdGhlIG9iamVjdCB0byBjb2RlIHRoaXMgcnVsZSBjYW5ub3Qgc2VlLCBzb1xuICogbWVtYmVyIGRlYWRuZXNzIGNhbm5vdCBiZSBkZWNpZGVkIGxvY2FsbHkuXG4gKlxuICogQSBtZW1iZXIgaXMgdGhlcmVmb3JlIGZsYWdnZWQgb25seSB3aGVuIGl0IGlzIG5ldmVyIHJlZmVyZW5jZWQgYnkgbmFtZSBBTkRcbiAqIHRoZSBvYmplY3QgbmV2ZXIgZXNjYXBlcyBcdTIwMTQgaS5lLiB0aGUgXCJhIGBwYXJhbXMueGAgdXNhZ2Ugd2FzIGRlbGV0ZWQgYnV0IGB4YFxuICogd2FzIGxlZnQgb24gdGhlIGludGVyZmFjZVwiIGNhc2UuIEEgbWVtYmVyIHRoYXQgaXMgYWN0dWFsbHkgc3RpbGwgbmVlZGVkIChyZWFkXG4gKiB2aWEgYW4gZXNjYXBlKSBpcyBuZXZlciB3cm9uZ2x5IGZsYWdnZWQ7IGEgbWVtYmVyIHRoYXQgaXMgZXNjYXBlZCBidXQgZGVhZFxuICogZG93bnN0cmVhbSBpcyBhIHRvbGVyYXRlZCBmYWxzZSBuZWdhdGl2ZSAoaXRzIGRlYWRuZXNzIGlzIG5vdCBsb2NhbCkuXG4gKlxuICogT25seSBpbnRlcmZhY2VzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGZpbGUgYXJlIGNoZWNrZWQ7IGFuIGltcG9ydGVkIHBhcmFtZXRlclxuICogdHlwZSBpcyBza2lwcGVkLiBPbmx5IGlkZW50aWZpZXItbmFtZWQgbWVtYmVycyBhcmUgdHJhY2tlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlciBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICB1c2VzQWxsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTWF5YmVUeXBlZE5vZGUge1xuICB0eXBlPzogdW5rbm93bjtcbn1cblxudHlwZSBQYXJhbWV0ZXJCaW5kaW5nID0gSWRlbnRpZmllckJpbmRpbmcgfCBQYXR0ZXJuQmluZGluZztcblxuaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICByZWFkb25seSBiaW5kaW5nOiBQYXJhbWV0ZXJCaW5kaW5nO1xuICByZWFkb25seSB0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGF0dGVybkJpbmRpbmcge1xuICBwYXR0ZXJuOiBSdWxlLk5vZGU7XG4gIHR5cGU6ICdwYXR0ZXJuJztcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBmbGFnZ2luZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyB0aGF0IHRoZSBmdW5jdGlvbiByZWNlaXZpbmcgdGhlbSBuZXZlciBhY2Nlc3Nlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW51c2VkUGFyYW1zTWVtYmVyczogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGludGVyZmFjZUtleU5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4+KCk7XG4gICAgY29uc3QgdXNhZ2VCeUludGVyZmFjZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcmZhY2VVc2FnZT4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnOmZ1bmN0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcmVjb3JkKG5vZGUpWydwYXJhbXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRQYXJhbWV0ZXJJbmZvKHBhcmFtZXRlcik7XG4gICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGdldE9yQ3JlYXRlVXNhZ2UoaW5mby50eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKGluZm8uYmluZGluZy50eXBlID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhpbmZvLmJpbmRpbmcucGF0dGVybiwgdXNhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyh7XG4gICAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IGluZm8uYmluZGluZy5uYW1lLFxuICAgICAgICAgICAgICBzY29wZTogY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpLFxuICAgICAgICAgICAgICB1c2FnZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGVOYW1lLCBrZXlOb2Rlc10gb2YgaW50ZXJmYWNlS2V5Tm9kZXMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgICAgICBpZiAoIXVzYWdlIHx8IHVzYWdlLnVzZXNBbGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgW21lbWJlck5hbWUsIGtleU5vZGVdIG9mIGtleU5vZGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzYWdlLnVzZWQuaGFzKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1lbWJlcjogbWVtYmVyTmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICAgIG5vZGU6IGtleU5vZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldEludGVyZmFjZU5hbWUobm9kZSk7XG4gICAgICAgIGlmICghUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcmZhY2VLZXlOb2Rlcy5zZXQobmFtZSwgZ2V0SW50ZXJmYWNlTWVtYmVycyhub2RlKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldE9yQ3JlYXRlVXNhZ2UodHlwZU5hbWU6IHN0cmluZyk6IEludGVyZmFjZVVzYWdlIHtcbiAgICAgIGxldCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgIGlmICghdXNhZ2UpIHtcbiAgICAgICAgdXNhZ2UgPSB7IHVzZWQ6IG5ldyBTZXQ8c3RyaW5nPigpLCB1c2VzQWxsOiBmYWxzZSB9O1xuICAgICAgICB1c2FnZUJ5SW50ZXJmYWNlLnNldCh0eXBlTmFtZSwgdXNhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzYWdlO1xuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmxhZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGVtJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ01lbWJlciBcInt7IG1lbWJlciB9fVwiIG9mIFwie3sgaW50ZXJmYWNlTmFtZSB9fVwiIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiBSZW1vdmUgaXQgKHRoZSBjb21waWxlciB3aWxsIGNhdGNoIGl0IGlmIGl0IGlzIHN0aWxsIG5lZWRlZCBlbHNld2hlcmUpLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbGxlY3RSZWZlcmVuY2VNZW1iZXJzfS5cbiAqL1xuaW50ZXJmYWNlIENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgd2hvc2UgcmVmZXJlbmNlcyBhcmUgaW5zcGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgaW4gd2hpY2ggdGhlIHBhcmFtZXRlciBpcyBib3VuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBTY29wZS5TY29wZTtcblxuICAvKipcbiAgICogVGhlIHVzYWdlIGFjY3VtdWxhdG9yIHRvIHJlY29yZCBhY2Nlc3NlZCBtZW1iZXJzIGludG8uXG4gICAqL1xuICByZWFkb25seSB1c2FnZTogSW50ZXJmYWNlVXNhZ2U7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZTogb2JqZWN0LCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gcmVjb3JkKHJlZmVyZW5jZSlbJ3BhcmVudCddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgcmVjb3JkKHBhcmVudClbJ29iamVjdCddID09PSByZWZlcmVuY2UpIHtcbiAgICBjb2xsZWN0TWVtYmVyQWNjZXNzKHBhcmVudCwgdXNhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiYgcmVjb3JkKHBhcmVudClbJ2luaXQnXSA9PT0gcmVmZXJlbmNlICYmIChyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUpLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJykge1xuICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgb2JqZWN0IGVzY2FwZXMgd2hvbGUgKHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgcmV0dXJuZWQsIHN0b3JlZCwgc3ByZWFkLCAuLi4pOiBldmVyeSBtZW1iZXIgbWF5IGJlIHJlYWQgZWxzZXdoZXJlLlxuICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdE1lbWJlckFjY2Vzcyhub2RlOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBjb25zdCBpc0NvbXB1dGVkID0gcmVjb3JkKG5vZGUpWydjb21wdXRlZCddID09PSB0cnVlO1xuICBjb25zdCBwcm9wZXJ0eSA9IHJlY29yZChub2RlKVsncHJvcGVydHknXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICBpZiAoIWlzQ29tcHV0ZWQpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChwcm9wZXJ0eSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydHkudHlwZSAhPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdmFsdWUgPSByZWNvcmQocHJvcGVydHkpWyd2YWx1ZSddO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHVzYWdlLnVzZWQuYWRkKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UGF0dGVybk1lbWJlcnMocGF0dGVybjogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiByZWNvcmQocGF0dGVybilbJ3Byb3BlcnRpZXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmIChwcm9wZXJ0eS50eXBlICE9PSAnUHJvcGVydHknKSB7XG4gICAgICAvLyBgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgIHJlYWRzIGV2ZXJ5IHJlbWFpbmluZyBtZW1iZXIuXG4gICAgICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVjb3JkKHByb3BlcnR5KVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJlY29yZChwcm9wZXJ0eSlbJ2tleSddIGFzIFJ1bGUuTm9kZTtcbiAgICBpZiAoa2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgdXNhZ2UudXNlZC5hZGQocmVjb3JkKGtleSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyhwYXJhbXM6IENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyTmFtZSwgc2NvcGUsIHVzYWdlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhcmlhYmxlID0gZW5zdXJlTm9uTnVsbGFibGUoc2NvcGUuc2V0LmdldChwYXJhbWV0ZXJOYW1lKSk7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHZhcmlhYmxlLnJlZmVyZW5jZXMpIHtcbiAgICBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2UuaWRlbnRpZmllciwgdXNhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU1lbWJlcnMobm9kZTogUnVsZS5Ob2RlKTogTWFwPHN0cmluZywgUnVsZS5Ob2RlPiB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWFwPHN0cmluZywgUnVsZS5Ob2RlPigpO1xuICBjb25zdCBpbnRlcmZhY2VCb2R5ID0gcmVjb3JkKG5vZGUpWydib2R5J10gYXMgUnVsZS5Ob2RlO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiByZWNvcmQoaW50ZXJmYWNlQm9keSlbJ2JvZHknXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmICgobm9kZVR5cGUoc2lnbmF0dXJlKSAhPT0gJ1RTUHJvcGVydHlTaWduYXR1cmUnICYmIG5vZGVUeXBlKHNpZ25hdHVyZSkgIT09ICdUU01ldGhvZFNpZ25hdHVyZScpIHx8IChyZWNvcmQoc2lnbmF0dXJlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSByZWNvcmQoc2lnbmF0dXJlKVsna2V5J10gYXMgUnVsZS5Ob2RlO1xuICAgIGlmIChrZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBtZW1iZXJzLnNldChyZWNvcmQoa2V5KVsnbmFtZSddIGFzIHN0cmluZywga2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbWJlcnM7XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU5hbWUobm9kZTogUnVsZS5Ob2RlKTogc3RyaW5nIHtcbiAgY29uc3QgaWQgPSByZWNvcmQobm9kZSlbJ2lkJ10gYXMgUnVsZS5Ob2RlO1xuICByZXR1cm4gcmVjb3JkKGlkKVsnbmFtZSddIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhwYXJhbWV0ZXI6IFJ1bGUuTm9kZSk6IFBhcmFtZXRlckluZm8gfCB1bmRlZmluZWQge1xuICBjb25zdCBhY3R1YWxQYXJhbWV0ZXIgPSBub2RlVHlwZShwYXJhbWV0ZXIpID09PSAnVFNQYXJhbWV0ZXJQcm9wZXJ0eScgPyByZWNvcmQocGFyYW1ldGVyKVsncGFyYW1ldGVyJ10gYXMgUnVsZS5Ob2RlIDogcGFyYW1ldGVyO1xuXG4gIGNvbnN0IHR5cGVOYW1lID0gZ2V0VHlwZVJlZmVyZW5jZU5hbWUoYWN0dWFsUGFyYW1ldGVyKTtcbiAgaWYgKCF0eXBlTmFtZSB8fCAhUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdCh0eXBlTmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdHVhbFBhcmFtZXRlci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4geyBiaW5kaW5nOiB7IG5hbWU6IHJlY29yZChhY3R1YWxQYXJhbWV0ZXIpWyduYW1lJ10gYXMgc3RyaW5nLCB0eXBlOiAnaWRlbnRpZmllcicgfSwgdHlwZU5hbWUgfTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQYXJhbWV0ZXIudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nID8geyBiaW5kaW5nOiB7IHBhdHRlcm46IGFjdHVhbFBhcmFtZXRlciwgdHlwZTogJ3BhdHRlcm4nIH0sIHR5cGVOYW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVSZWZlcmVuY2VOYW1lKHBhcmFtZXRlcjogUnVsZS5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW5ub3RhdGlvbiA9IHJlY29yZChwYXJhbWV0ZXIpWyd0eXBlQW5ub3RhdGlvbiddO1xuICBpZiAoIWlzTm9kZShhbm5vdGF0aW9uKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0eXBlTm9kZSA9IHJlY29yZChhbm5vdGF0aW9uKVsndHlwZUFubm90YXRpb24nXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChub2RlVHlwZSh0eXBlTm9kZSkgIT09ICdUU1R5cGVSZWZlcmVuY2UnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gcmVjb3JkKHR5cGVOb2RlKVsndHlwZU5hbWUnXSBhcyBSdWxlLk5vZGU7XG4gIHJldHVybiB0eXBlTmFtZS50eXBlID09PSAnSWRlbnRpZmllcicgPyAocmVjb3JkKHR5cGVOYW1lKVsnbmFtZSddIGFzIHN0cmluZykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1bGUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiAodmFsdWUgYXMgTWF5YmVUeXBlZE5vZGUpLnR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkKG5vZGUpWyd0eXBlJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiByZWNvcmQobm9kZTogb2JqZWN0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFDQSx5QkFBa0M7QUFFbEMsTUFBTSxnQ0FBZ0M7QUFLL0IsTUFBTSxhQUFhO0FBK0JuQixNQUFNLHdCQUF5QztBQUFBLEVBQ3BELE9BQU8sU0FBUztBQUNkLFVBQU0sb0JBQW9CLG9CQUFJLElBQW9DO0FBQ2xFLFVBQU0sbUJBQW1CLG9CQUFJLElBQTRCO0FBRXpELFdBQU87QUFBQSxNQUNMLFlBQVksTUFBdUI7QUFDakMsbUJBQVcsYUFBYSxPQUFPLElBQUksRUFBRSxRQUFRLEdBQWtCO0FBQzdELGdCQUFNLE9BQU8saUJBQWlCLFNBQVM7QUFDdkMsY0FBSSxDQUFDLE1BQU07QUFDVDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxRQUFRLGlCQUFpQixLQUFLLFFBQVE7QUFDNUMsY0FBSSxLQUFLLFFBQVEsU0FBUyxXQUFXO0FBQ25DLGtDQUFzQixLQUFLLFFBQVEsU0FBUyxLQUFLO0FBQUEsVUFDbkQsT0FBTztBQUNMLG9DQUF3QjtBQUFBLGNBQ3RCLGVBQWUsS0FBSyxRQUFRO0FBQUEsY0FDNUIsT0FBTyxRQUFRLFdBQVcsU0FBUyxJQUFJO0FBQUEsY0FDdkM7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUF1QjtBQUNyQixtQkFBVyxDQUFDLFVBQVUsUUFBUSxLQUFLLG1CQUFtQjtBQUNwRCxnQkFBTSxRQUFRLGlCQUFpQixJQUFJLFFBQVE7QUFDM0MsY0FBSSxDQUFDLFNBQVMsTUFBTSxTQUFTO0FBQzNCO0FBQUEsVUFD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
@@ -0,0 +1,41 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: no-unused-params-members
6
+ *
7
+ * Flags members of a `*Params` / `*Options` parameter-bag interface that are
8
+ * never accessed within the function/method/constructor that receives the
9
+ * interface as a parameter.
10
+ *
11
+ * Detection is per-function, using scope analysis to find the real references
12
+ * to the parameter (not unrelated same-named identifiers). A member counts as
13
+ * used when it is referenced by name — `params.member`, `params['member']`, or
14
+ * `const { member } = params` (plus a destructured signature
15
+ * `fn({ member }: FooParams)`).
16
+ *
17
+ * Crucially, if the object ever ESCAPES whole — spread (`{ ...params }`), rest
18
+ * (`const { ...rest } = params`), passed as an argument (`f(params)`), returned,
19
+ * or stored (`this.params = params`) — every member is treated as used and
20
+ * nothing is reported for that interface. Such an escape either reads every
21
+ * member (spread/rest) or hands the object to code this rule cannot see, so
22
+ * member deadness cannot be decided locally.
23
+ *
24
+ * A member is therefore flagged only when it is never referenced by name AND
25
+ * the object never escapes — i.e. the "a `params.x` usage was deleted but `x`
26
+ * was left on the interface" case. A member that is actually still needed (read
27
+ * via an escape) is never wrongly flagged; a member that is escaped but dead
28
+ * downstream is a tolerated false negative (its deadness is not local).
29
+ *
30
+ * Only interfaces declared in the same file are checked; an imported parameter
31
+ * type is skipped. Only identifier-named members are tracked.
32
+ */
33
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
34
+ /**
35
+ Message ID reported when a `*Params`/`*Options` interface member is never accessed by the function that receives it.
36
+ */
37
+ export declare const MESSAGE_ID = "unusedParamsMember";
38
+ /**
39
+ * ESLint rule flagging `*Params`/`*Options` interface members that the function receiving them never accesses.
40
+ */
41
+ export declare const noUnusedParamsMembers: Rule.RuleModule;
@@ -0,0 +1,134 @@
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_used_underscore_variables_exports = {};
80
+ __export(no_used_underscore_variables_exports, {
81
+ MESSAGE_ID: () => MESSAGE_ID,
82
+ noUsedUnderscoreVariables: () => noUsedUnderscoreVariables
83
+ });
84
+ module.exports = __toCommonJS(no_used_underscore_variables_exports);
85
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
86
+ const MESSAGE_ID = "noUsedUnderscoreVariables";
87
+ const noUsedUnderscoreVariables = {
88
+ create(context) {
89
+ return {
90
+ ":function"(node) {
91
+ const scope = context.sourceCode.getScope(node);
92
+ for (const variable of scope.variables) {
93
+ if (!variable.name.startsWith("_")) {
94
+ continue;
95
+ }
96
+ const definitionNode = variable.defs[0];
97
+ (0, import_type_guards.assertNonNullable)(definitionNode, "User-declared _-prefixed variables always have at least one definition");
98
+ const functionBody = node.body;
99
+ const bodyRange = functionBody?.range;
100
+ const isParameter = definitionNode.type === "Parameter";
101
+ const hasBodyReferences = variable.references.some((reference) => {
102
+ if (!reference.isRead()) {
103
+ return false;
104
+ }
105
+ return !isParameter || !bodyRange || !reference.identifier.range || reference.identifier.range[0] >= bodyRange[0] && reference.identifier.range[1] <= bodyRange[1];
106
+ });
107
+ if (hasBodyReferences) {
108
+ context.report({
109
+ data: { name: variable.name },
110
+ messageId: MESSAGE_ID,
111
+ node: definitionNode.name
112
+ });
113
+ }
114
+ }
115
+ }
116
+ };
117
+ },
118
+ meta: {
119
+ docs: {
120
+ description: "Disallow `_`-prefixed parameters and local variables that are actually used"
121
+ },
122
+ messages: {
123
+ [MESSAGE_ID]: '"{{ name }}" has a `_` prefix but is used. Remove the `_` prefix since it is not unused.'
124
+ },
125
+ schema: [],
126
+ type: "problem"
127
+ }
128
+ };
129
+ // Annotate the CommonJS export names for ESM import in node:
130
+ 0 && (module.exports = {
131
+ MESSAGE_ID,
132
+ noUsedUnderscoreVariables
133
+ });
134
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlc1xuICpcbiAqIFJlcG9ydHMgYW4gZXJyb3Igd2hlbiBhIHBhcmFtZXRlciBvciBsb2NhbCB2YXJpYWJsZSB3aXRoIGEgYF9gIHByZWZpeCBpc1xuICogYWN0dWFsbHkgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGBfYCBwcmVmaXggY29udmVudGlvbiBzaWduYWxzXG4gKiBcInRoaXMgaWRlbnRpZmllciBpcyBpbnRlbnRpb25hbGx5IHVudXNlZFwiIFx1MjAxNCBpZiBpdCBJUyB1c2VkLCB0aGUgcHJlZml4IGlzXG4gKiBtaXNsZWFkaW5nIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbnRlcmZhY2UgTm9kZVdpdGhCb2R5IHtcbiAgYm9keT86IFJ1bGUuTm9kZTtcbn1cblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSB2YXJpYWJsZSBjYXJyaWVzIGEgYF9gIHByZWZpeCAoc2lnbmFsbGluZyB1bnVzZWQpIGJ1dCBpcyBhY3R1YWxseSB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQsIHNpbmNlIHRoZSBwcmVmaXggYWR2ZXJ0aXNlcyB0aGVtIGFzIHVudXNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2Ygc2NvcGUudmFyaWFibGVzKSB7XG4gICAgICAgICAgaWYgKCF2YXJpYWJsZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB2YXJpYWJsZS5kZWZzWzBdO1xuICAgICAgICAgIGFzc2VydE5vbk51bGxhYmxlKGRlZmluaXRpb25Ob2RlLCAnVXNlci1kZWNsYXJlZCBfLXByZWZpeGVkIHZhcmlhYmxlcyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmaW5pdGlvbicpO1xuXG4gICAgICAgICAgLy8gRm9yIHBhcmFtZXRlcnMsIG9ubHkgY291bnQgcmVmZXJlbmNlcyBpbnNpZGUgdGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgICAgICAvLyAobm90IGluIHR5cGUgYW5ub3RhdGlvbnMgbGlrZSBgYXNzZXJ0cyBfb2JqIGlzIFRgKS5cbiAgICAgICAgICAvLyBGb3IgbG9jYWwgdmFyaWFibGVzLCBhbnkgcmVhZCByZWZlcmVuY2UgY291bnRzLlxuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9IChub2RlIGFzIE5vZGVXaXRoQm9keSkuYm9keTtcbiAgICAgICAgICBjb25zdCBib2R5UmFuZ2UgPSBmdW5jdGlvbkJvZHk/LnJhbmdlO1xuICAgICAgICAgIGNvbnN0IGlzUGFyYW1ldGVyID0gZGVmaW5pdGlvbk5vZGUudHlwZSA9PT0gJ1BhcmFtZXRlcic7XG4gICAgICAgICAgY29uc3QgaGFzQm9keVJlZmVyZW5jZXMgPSB2YXJpYWJsZS5yZWZlcmVuY2VzLnNvbWUoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UuaXNSZWFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzIG9yIGZhbGxiYWNrOiBjb3VudCBhbGwgcmVhZHNcbiAgICAgICAgICAgIHJldHVybiAhaXNQYXJhbWV0ZXIgfHwgIWJvZHlSYW5nZSB8fCAhcmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VcbiAgICAgICAgICAgICAgfHwgKHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzBdID49IGJvZHlSYW5nZVswXSAmJiByZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSA8PSBib2R5UmFuZ2VbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNCb2R5UmVmZXJlbmNlcykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICBub2RlOiBkZWZpbml0aW9uTm9kZS5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnXCJ7eyBuYW1lIH19XCIgaGFzIGEgYF9gIHByZWZpeCBidXQgaXMgdXNlZC4gUmVtb3ZlIHRoZSBgX2AgcHJlZml4IHNpbmNlIGl0IGlzIG5vdCB1bnVzZWQuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHlCQUFrQztBQVMzQixNQUFNLGFBQWE7QUFLbkIsTUFBTSw0QkFBNkM7QUFBQSxFQUN4RCxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxZQUFZLE1BQXVCO0FBQ2pDLGNBQU0sUUFBUSxRQUFRLFdBQVcsU0FBUyxJQUFJO0FBRTlDLG1CQUFXLFlBQVksTUFBTSxXQUFXO0FBQ3RDLGNBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFDbEM7QUFBQSxVQUNGO0FBRUEsZ0JBQU0saUJBQWlCLFNBQVMsS0FBSyxDQUFDO0FBQ3RDLG9EQUFrQixnQkFBZ0Isd0VBQXdFO0FBSzFHLGdCQUFNLGVBQWdCLEtBQXNCO0FBQzVDLGdCQUFNLFlBQVksY0FBYztBQUNoQyxnQkFBTSxjQUFjLGVBQWUsU0FBUztBQUM1QyxnQkFBTSxvQkFBb0IsU0FBUyxXQUFXLEtBQUssQ0FBQyxjQUFjO0FBQ2hFLGdCQUFJLENBQUMsVUFBVSxPQUFPLEdBQUc7QUFDdkIscUJBQU87QUFBQSxZQUNUO0FBRUEsbUJBQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsV0FBVyxTQUNyRCxVQUFVLFdBQVcsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUFBLFVBQ3JHLENBQUM7QUFDRCxjQUFJLG1CQUFtQjtBQUNyQixvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNLEVBQUUsTUFBTSxTQUFTLEtBQUs7QUFBQSxjQUM1QixXQUFXO0FBQUEsY0FDWCxNQUFNLGVBQWU7QUFBQSxZQUN2QixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,20 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: no-used-underscore-variables
6
+ *
7
+ * Reports an error when a parameter or local variable with a `_` prefix is
8
+ * actually referenced in the function body. The `_` prefix convention signals
9
+ * "this identifier is intentionally unused" — if it IS used, the prefix is
10
+ * misleading and should be removed.
11
+ */
12
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
13
+ /**
14
+ Message ID reported when a variable carries a `_` prefix (signalling unused) but is actually used.
15
+ */
16
+ export declare const MESSAGE_ID = "noUsedUnderscoreVariables";
17
+ /**
18
+ * ESLint rule disallowing `_`-prefixed parameters and local variables that are actually used, since the prefix advertises them as unused.
19
+ */
20
+ export declare const noUsedUnderscoreVariables: Rule.RuleModule;