@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.0.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 (330) 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 +475 -0
  61. package/dist/lib/cjs/library-build.d.cts +97 -0
  62. package/dist/lib/cjs/linters/cspell-content.cjs +124 -0
  63. package/dist/lib/cjs/linters/cspell-content.d.cts +46 -0
  64. package/dist/lib/cjs/linters/cspell.cjs +103 -0
  65. package/dist/lib/cjs/linters/cspell.d.cts +36 -0
  66. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +94 -0
  67. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +49 -0
  68. package/dist/lib/cjs/linters/eslint-config.cjs +1068 -0
  69. package/dist/lib/cjs/linters/eslint-config.d.cts +123 -0
  70. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +130 -0
  71. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +27 -0
  72. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +116 -0
  73. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +26 -0
  74. package/dist/lib/cjs/linters/eslint-rules/index.cjs +132 -0
  75. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +13 -0
  76. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +175 -0
  77. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +10 -0
  78. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +290 -0
  79. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +10 -0
  80. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +265 -0
  81. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +41 -0
  82. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +134 -0
  83. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +20 -0
  84. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +217 -0
  85. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +36 -0
  86. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +126 -0
  87. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +10 -0
  88. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +125 -0
  89. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +20 -0
  90. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +181 -0
  91. package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +14 -0
  92. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +217 -0
  93. package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +10 -0
  94. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +92 -0
  95. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +18 -0
  96. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +92 -0
  97. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +23 -0
  98. package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +20 -0
  99. package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +17 -0
  100. package/dist/lib/cjs/linters/eslint.cjs +122 -0
  101. package/dist/lib/cjs/linters/eslint.d.cts +35 -0
  102. package/dist/lib/cjs/linters/index.cjs +138 -0
  103. package/dist/lib/cjs/linters/index.d.cts +15 -0
  104. package/dist/lib/cjs/linters/lint-ignores.cjs +91 -0
  105. package/dist/lib/cjs/linters/lint-ignores.d.cts +30 -0
  106. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +169 -0
  107. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +11 -0
  108. package/dist/lib/cjs/linters/markdownlint-content.cjs +120 -0
  109. package/dist/lib/cjs/linters/markdownlint-content.d.cts +47 -0
  110. package/dist/lib/cjs/linters/markdownlint-ignores.cjs +95 -0
  111. package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +35 -0
  112. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +99 -0
  113. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  114. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +152 -0
  115. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +35 -0
  116. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1344 -0
  117. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +67 -0
  118. package/dist/lib/cjs/linters/markdownlint.cjs +151 -0
  119. package/dist/lib/cjs/linters/markdownlint.d.cts +32 -0
  120. package/dist/lib/cjs/linters/over-exposure.cjs +685 -0
  121. package/dist/lib/cjs/linters/over-exposure.d.cts +357 -0
  122. package/dist/lib/cjs/nano-staged-config.cjs +148 -0
  123. package/dist/lib/cjs/nano-staged-config.d.cts +54 -0
  124. package/dist/lib/cjs/npm-publish.cjs +93 -0
  125. package/dist/lib/cjs/npm-publish.d.cts +19 -0
  126. package/dist/lib/cjs/npm-run.cjs +120 -0
  127. package/dist/lib/cjs/npm-run.d.cts +34 -0
  128. package/dist/lib/cjs/npm.cjs +200 -0
  129. package/dist/lib/cjs/npm.d.cts +168 -0
  130. package/dist/lib/cjs/package-lock-integrity.cjs +134 -0
  131. package/dist/lib/cjs/package-lock-integrity.d.cts +38 -0
  132. package/dist/lib/cjs/package-manager.cjs +291 -0
  133. package/dist/lib/cjs/package-manager.d.cts +93 -0
  134. package/dist/lib/cjs/released-issues.cjs +178 -0
  135. package/dist/lib/cjs/released-issues.d.cts +79 -0
  136. package/dist/lib/cjs/repo-paths.cjs +167 -0
  137. package/dist/lib/cjs/repo-paths.d.cts +318 -0
  138. package/dist/lib/cjs/root.cjs +150 -0
  139. package/dist/lib/cjs/root.d.cts +107 -0
  140. package/dist/lib/cjs/test-runners/index.cjs +102 -0
  141. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  142. package/dist/lib/cjs/test-runners/vitest-config.cjs +126 -0
  143. package/dist/lib/cjs/test-runners/vitest-config.d.cts +90 -0
  144. package/dist/lib/cjs/test-runners/vitest.cjs +115 -0
  145. package/dist/lib/cjs/test-runners/vitest.d.cts +52 -0
  146. package/dist/lib/cjs/validate-declarations.cjs +120 -0
  147. package/dist/lib/cjs/validate-declarations.d.cts +37 -0
  148. package/dist/lib/cjs/version.cjs +758 -0
  149. package/dist/lib/cjs/version.d.cts +418 -0
  150. package/dist/lib/esm/build.d.mts +59 -0
  151. package/dist/lib/esm/build.mjs +165 -0
  152. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +25 -0
  153. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +101 -0
  154. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +14 -0
  155. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +59 -0
  156. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +13 -0
  157. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +69 -0
  158. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +6 -0
  159. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +60 -0
  160. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +143 -0
  161. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +176 -0
  162. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +14 -0
  163. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +82 -0
  164. package/dist/lib/esm/bundlers/index.d.mts +2 -0
  165. package/dist/lib/esm/bundlers/index.mjs +52 -0
  166. package/dist/lib/esm/check-project-types.d.mts +92 -0
  167. package/dist/lib/esm/check-project-types.mjs +123 -0
  168. package/dist/lib/esm/cli-utils.d.mts +123 -0
  169. package/dist/lib/esm/cli-utils.mjs +225 -0
  170. package/dist/lib/esm/code-generator.d.mts +14 -0
  171. package/dist/lib/esm/code-generator.mjs +59 -0
  172. package/dist/lib/esm/commitlint-config.d.mts +14 -0
  173. package/dist/lib/esm/commitlint-config.mjs +79 -0
  174. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +37 -0
  175. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +75 -0
  176. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +40 -0
  177. package/dist/lib/esm/commitlint-spellcheck-header.mjs +87 -0
  178. package/dist/lib/esm/env-toggle.d.mts +42 -0
  179. package/dist/lib/esm/env-toggle.mjs +84 -0
  180. package/dist/lib/esm/exec.d.mts +162 -0
  181. package/dist/lib/esm/exec.mjs +410 -0
  182. package/dist/lib/esm/forbidden-patterns.d.mts +57 -0
  183. package/dist/lib/esm/forbidden-patterns.mjs +108 -0
  184. package/dist/lib/esm/formatters/dprint.d.mts +33 -0
  185. package/dist/lib/esm/formatters/dprint.mjs +75 -0
  186. package/dist/lib/esm/formatters/index.d.mts +2 -0
  187. package/dist/lib/esm/formatters/index.mjs +52 -0
  188. package/dist/lib/esm/fs.d.mts +80 -0
  189. package/dist/lib/esm/fs.mjs +89 -0
  190. package/dist/lib/esm/gate.d.mts +93 -0
  191. package/dist/lib/esm/gate.mjs +106 -0
  192. package/dist/lib/esm/git.d.mts +37 -0
  193. package/dist/lib/esm/git.mjs +72 -0
  194. package/dist/lib/esm/index.d.mts +35 -0
  195. package/dist/lib/esm/index.mjs +110 -0
  196. package/dist/lib/esm/json.d.mts +102 -0
  197. package/dist/lib/esm/json.mjs +106 -0
  198. package/dist/lib/esm/library-build.d.mts +97 -0
  199. package/dist/lib/esm/library-build.mjs +435 -0
  200. package/dist/lib/esm/linters/cspell-content.d.mts +46 -0
  201. package/dist/lib/esm/linters/cspell-content.mjs +87 -0
  202. package/dist/lib/esm/linters/cspell.d.mts +36 -0
  203. package/dist/lib/esm/linters/cspell.mjs +69 -0
  204. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +49 -0
  205. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +57 -0
  206. package/dist/lib/esm/linters/eslint-config.d.mts +123 -0
  207. package/dist/lib/esm/linters/eslint-config.mjs +1022 -0
  208. package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +27 -0
  209. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +93 -0
  210. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +26 -0
  211. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +77 -0
  212. package/dist/lib/esm/linters/eslint-rules/index.d.mts +13 -0
  213. package/dist/lib/esm/linters/eslint-rules/index.mjs +74 -0
  214. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +10 -0
  215. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +144 -0
  216. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +10 -0
  217. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +277 -0
  218. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +41 -0
  219. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +227 -0
  220. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +20 -0
  221. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +96 -0
  222. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +36 -0
  223. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +179 -0
  224. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +10 -0
  225. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +88 -0
  226. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +20 -0
  227. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +87 -0
  228. package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +14 -0
  229. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +142 -0
  230. package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +10 -0
  231. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +183 -0
  232. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +18 -0
  233. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +55 -0
  234. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +23 -0
  235. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +55 -0
  236. package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +20 -0
  237. package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +17 -0
  238. package/dist/lib/esm/linters/eslint.d.mts +35 -0
  239. package/dist/lib/esm/linters/eslint.mjs +88 -0
  240. package/dist/lib/esm/linters/index.d.mts +15 -0
  241. package/dist/lib/esm/linters/index.mjs +78 -0
  242. package/dist/lib/esm/linters/lint-ignores.d.mts +30 -0
  243. package/dist/lib/esm/linters/lint-ignores.mjs +54 -0
  244. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +11 -0
  245. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +122 -0
  246. package/dist/lib/esm/linters/markdownlint-content.d.mts +47 -0
  247. package/dist/lib/esm/linters/markdownlint-content.mjs +83 -0
  248. package/dist/lib/esm/linters/markdownlint-ignores.d.mts +35 -0
  249. package/dist/lib/esm/linters/markdownlint-ignores.mjs +57 -0
  250. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  251. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +52 -0
  252. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +35 -0
  253. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +114 -0
  254. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1344 -0
  255. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +67 -0
  256. package/dist/lib/esm/linters/markdownlint.d.mts +32 -0
  257. package/dist/lib/esm/linters/markdownlint.mjs +124 -0
  258. package/dist/lib/esm/linters/over-exposure.d.mts +357 -0
  259. package/dist/lib/esm/linters/over-exposure.mjs +672 -0
  260. package/dist/lib/esm/nano-staged-config.d.mts +54 -0
  261. package/dist/lib/esm/nano-staged-config.mjs +103 -0
  262. package/dist/lib/esm/npm-publish.d.mts +19 -0
  263. package/dist/lib/esm/npm-publish.mjs +56 -0
  264. package/dist/lib/esm/npm-run.d.mts +34 -0
  265. package/dist/lib/esm/npm-run.mjs +81 -0
  266. package/dist/lib/esm/npm.d.mts +168 -0
  267. package/dist/lib/esm/npm.mjs +155 -0
  268. package/dist/lib/esm/package-lock-integrity.d.mts +38 -0
  269. package/dist/lib/esm/package-lock-integrity.mjs +99 -0
  270. package/dist/lib/esm/package-manager.d.mts +93 -0
  271. package/dist/lib/esm/package-manager.mjs +245 -0
  272. package/dist/lib/esm/released-issues.d.mts +79 -0
  273. package/dist/lib/esm/released-issues.mjs +143 -0
  274. package/dist/lib/esm/repo-paths.d.mts +318 -0
  275. package/dist/lib/esm/repo-paths.mjs +130 -0
  276. package/dist/lib/esm/root.d.mts +107 -0
  277. package/dist/lib/esm/root.mjs +115 -0
  278. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  279. package/dist/lib/esm/test-runners/index.mjs +54 -0
  280. package/dist/lib/esm/test-runners/vitest-config.d.mts +90 -0
  281. package/dist/lib/esm/test-runners/vitest-config.mjs +86 -0
  282. package/dist/lib/esm/test-runners/vitest.d.mts +52 -0
  283. package/dist/lib/esm/test-runners/vitest.mjs +76 -0
  284. package/dist/lib/esm/validate-declarations.d.mts +37 -0
  285. package/dist/lib/esm/validate-declarations.mjs +87 -0
  286. package/dist/lib/esm/version.d.mts +418 -0
  287. package/dist/lib/esm/version.mjs +723 -0
  288. package/formatters/dprint/package.json +6 -0
  289. package/formatters/index/package.json +6 -0
  290. package/formatters/package.json +6 -0
  291. package/linters/cspell/package.json +6 -0
  292. package/linters/cspell-content/package.json +6 -0
  293. package/linters/eslint/package.json +6 -0
  294. package/linters/eslint-agnostic-core-boundary/package.json +6 -0
  295. package/linters/eslint-config/package.json +6 -0
  296. package/linters/eslint-no-restricted-syntax/package.json +6 -0
  297. package/linters/eslint-rules/in-house-plugin/package.json +6 -0
  298. package/linters/eslint-rules/index/package.json +6 -0
  299. package/linters/eslint-rules/no-async-callback-to-unsafe-return/package.json +6 -0
  300. package/linters/eslint-rules/no-unresolved-jsdoc-link/package.json +6 -0
  301. package/linters/eslint-rules/no-unused-params-members/package.json +6 -0
  302. package/linters/eslint-rules/no-used-underscore-variables/package.json +6 -0
  303. package/linters/eslint-rules/package.json +6 -0
  304. package/linters/eslint-rules/params-options-name-match/package.json +6 -0
  305. package/linters/eslint-rules/prefer-noop-async/package.json +6 -0
  306. package/linters/eslint-rules/readonly-params-options-result-members/package.json +6 -0
  307. package/linters/eslint-rules/require-method-template/package.json +6 -0
  308. package/linters/eslint-rules/require-super-call/package.json +6 -0
  309. package/linters/eslint-rules/rule-tester-helper/package.json +6 -0
  310. package/linters/eslint-rules/ts-estree-node/package.json +6 -0
  311. package/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs/package.json +4 -0
  312. package/linters/eslint-types/@types/eslint-plugin-verify-tsdoc/package.json +4 -0
  313. package/linters/index/package.json +6 -0
  314. package/linters/lint-ignores/package.json +6 -0
  315. package/linters/markdownlint/package.json +6 -0
  316. package/linters/markdownlint-cli2-config/package.json +6 -0
  317. package/linters/markdownlint-content/package.json +6 -0
  318. package/linters/markdownlint-ignores/package.json +6 -0
  319. package/linters/markdownlint-rules/index/package.json +6 -0
  320. package/linters/markdownlint-rules/no-soft-break-in-paragraph/package.json +6 -0
  321. package/linters/markdownlint-rules/package.json +6 -0
  322. package/linters/markdownlint-types/@types/markdownlint-cli2/package.json +4 -0
  323. package/linters/markdownlint-types/@types/markdownlint-cli2-config-schema/package.json +4 -0
  324. package/linters/over-exposure/package.json +6 -0
  325. package/linters/package.json +6 -0
  326. package/package.json +329 -13
  327. package/test-runners/index/package.json +6 -0
  328. package/test-runners/package.json +6 -0
  329. package/test-runners/vitest/package.json +6 -0
  330. 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="../../index.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/IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwYXJlbnQgY2xhc3MncyB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaXMgYGFic3RyYWN0YC5cbiAqXG4gKiBXaGVuIHR5cGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSAoZS5nLiwgcGFyc2VyIGNvbmZpZ3VyZWQgd2l0aG91dFxuICogYHByb2plY3RTZXJ2aWNlYCksIHJldHVybnMgYGZhbHNlYCBzbyB0aGUgcnVsZSBjb25zZXJ2YXRpdmVseSByZXBvcnRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXJlbnQgbWV0aG9kIGlzIGFic3RyYWN0LlxuICovXG5mdW5jdGlvbiBpc1BhcmVudE1ldGhvZEFic3RyYWN0KHBhcmFtczogQ2hlY2tJc1BhcmVudE1ldGhvZEFic3RyYWN0UGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWV0aG9kTmFtZSwgbWV0aG9kTm9kZSB9ID0gcGFyYW1zO1xuICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJ0aWFsPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbj47XG5cbiAgaWYgKCFzZXJ2aWNlcy5wcm9ncmFtIHx8ICFzZXJ2aWNlcy5lc1RyZWVOb2RlVG9UU05vZGVNYXApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjaGVja2VyID0gc2VydmljZXMucHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWV0aG9kTm9kZS5wYXJlbnQucGFyZW50O1xuICBjb25zdCB0c0NsYXNzTm9kZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoY2xhc3NEZWNsYXJhdGlvbik7XG4gIGNvbnN0IGNsYXNzVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24odHNDbGFzc05vZGUpO1xuICBjb25zdCBiYXNlVHlwZXMgPSBjbGFzc1R5cGUuZ2V0QmFzZVR5cGVzKCk7XG5cbiAgaWYgKCFiYXNlVHlwZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGJhc2VUeXBlIG9mIGJhc2VUeXBlcykge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gYmFzZVR5cGUuZ2V0UHJvcGVydHkobWV0aG9kTmFtZSk7XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eS5nZXREZWNsYXJhdGlvbnMoKTtcblxuICAgIGlmICghZGVjbGFyYXRpb25zKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKGlzQWJzdHJhY3QoZGVjbGFyYXRpb24pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGNhbGwgZXhwcmVzc2lvbiBpcyBgc3VwZXIubWV0aG9kTmFtZSguLi4pYC5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIGV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gVGhlIGV4cGVjdGVkIG1ldGhvZCBuYW1lLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgbWF0Y2hpbmcgc3VwZXIgbWV0aG9kIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzU3VwZXJNZXRob2RDYWxsKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uLCBtZXRob2ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy4gKi9cbiAgcmV0dXJuIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBjYWxsZWUub2JqZWN0LnR5cGUgPT09ICdTdXBlcidcbiAgICAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgJiYgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09IG1ldGhvZE5hbWU7XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gUmUtZW5hYmxlIGFmdGVyIG11bHRpLWxpbmUgc3RyaW5nIGNvbXBhcmlzb24gYmxvY2suICovXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGEgYHN1cGVyLnByb3BlcnR5TmFtZWAgbWVtYmVyIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgQVNUIG5vZGUgdG8gY2hlY2sgKE1lbWJlckV4cHJlc3Npb24gb3IgQXNzaWdubWVudEV4cHJlc3Npb24gbGVmdC1oYW5kIHNpZGUpLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSBuYW1lLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgbWF0Y2hpbmcgc3VwZXIgcHJvcGVydHkgYWNjZXNzLlxuICovXG5mdW5jdGlvbiBpc1N1cGVyUHJvcGVydHlBY2Nlc3Mobm9kZTogVFNFU1RyZWUuTm9kZSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLiAqL1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBub2RlLm9iamVjdC50eXBlID09PSAnU3VwZXInXG4gICAgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICAmJiBub2RlLnByb3BlcnR5Lm5hbWUgPT09IHByb3BlcnR5TmFtZTtcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBSZS1lbmFibGUgYWZ0ZXIgbXVsdGktbGluZSBzdHJpbmcgY29tcGFyaXNvbiBibG9jay4gKi9cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHNCQUFzQjtBQUt4QixNQUFNLGFBQWE7QUFlbkIsTUFBTSxtQkFBb0M7QUFBQSxFQUMvQyxPQUFPLFNBQVM7QUFDZCxVQUFNLGNBQW9DLENBQUM7QUFFM0MsV0FBTztBQUFBLE1BQ0wsdUJBQXVCLE1BQXVCO0FBQzVDLGNBQU0sVUFBVSxZQUFZLEdBQUcsRUFBRTtBQUNqQyxZQUFJLFNBQVMsU0FBUyxPQUFPO0FBQzNCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxlQUFlLElBQUk7QUFDdEMsWUFBSSxzQkFBc0IsV0FBVyxNQUFNLFFBQVEsVUFBVSxHQUFHO0FBQzlELGtCQUFRLGVBQWU7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQixNQUF1QjtBQUN0QyxjQUFNLFVBQVUsWUFBWSxHQUFHLEVBQUU7QUFDakMsWUFBSSxTQUFTLFNBQVMsVUFBVTtBQUM5QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFdBQVcsZUFBZSxJQUFJO0FBQ3BDLFlBQUksa0JBQWtCLFVBQVUsUUFBUSxVQUFVLEdBQUc7QUFDbkQsa0JBQVEsZUFBZTtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CLE1BQXVCO0FBQ3hDLGNBQU0sVUFBVSxZQUFZLEdBQUcsRUFBRTtBQUNqQyxZQUFJLFNBQVMsU0FBUyxPQUFPO0FBQzNCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxlQUFlLElBQUk7QUFDdEMsWUFBSSxzQkFBc0IsWUFBWSxRQUFRLFVBQVUsR0FBRztBQUN6RCxrQkFBUSxlQUFlO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsTUFBdUI7QUFDeEMsY0FBTSxhQUFhLGVBQWUsSUFBSTtBQUd0QyxZQUFJLENBQUMsV0FBVyxZQUFZLFdBQVcsSUFBSSxTQUFTLGNBQWM7QUFDaEU7QUFBQSxRQUNGO0FBRUEsY0FBTSxPQUFPLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxRQUFRLFdBQVcsT0FBTztBQUV4RixvQkFBWSxLQUFLO0FBQUEsVUFDZixjQUFjO0FBQUEsVUFDZDtBQUFBLFVBQ0EsWUFBWSxXQUFXLElBQUk7QUFBQSxVQUMzQixNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSDtBQUFBLE1BQ0EsMEJBQWdDO0FBQzlCLGNBQU0sT0FBTyxZQUFZLEdBQUcsRUFBRTtBQUM5QixZQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsUUFDRjtBQUVBLG9CQUFZLElBQUk7QUFFaEIsWUFDRSxLQUFLLGdCQUFnQix1QkFBdUI7QUFBQSxVQUMxQztBQUFBLFVBQ0EsWUFBWSxLQUFLO0FBQUEsVUFDakIsWUFBWSxLQUFLO0FBQUEsUUFDbkIsQ0FBQyxHQUNEO0FBQ0E7QUFBQSxRQUNGO0FBRUEsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsTUFBTSxFQUFFLE1BQU0sS0FBSyxNQUFNLFlBQVksS0FBSyxXQUFXO0FBQUEsVUFDckQsV0FBVztBQUFBLFVBQ1gsTUFBTSxLQUFLO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxVQUFVLEdBQUc7QUFBQSxJQUNoQjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBNEJBLFNBQVMsV0FBVyxhQUFtQztBQUNyRCxTQUFPLGlCQUFpQixXQUFXLEdBQUcsa0RBQWtEO0FBRXhGLFFBQU0sWUFBWSxhQUFhLFdBQVc7QUFDMUMsU0FBTyxXQUFXLEtBQUssQ0FBQyxZQUFZLFFBQVEsU0FBUyxXQUFXLGVBQWUsS0FBSztBQUN0RjtBQVdBLFNBQVMsdUJBQXVCLFFBQW9EO0FBQ2xGLFFBQU0sRUFBRSxTQUFTLFlBQVksV0FBVyxJQUFJO0FBQzVDLFFBQU0sV0FBVyxRQUFRLFdBQVc7QUFFcEMsTUFBSSxDQUFDLFNBQVMsV0FBVyxDQUFDLFNBQVMsdUJBQXVCO0FBQ3hELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBQ2hELFFBQU0sbUJBQW1CLFdBQVcsT0FBTztBQUMzQyxRQUFNLGNBQWMsU0FBUyxzQkFBc0IsSUFBSSxnQkFBZ0I7QUFDdkUsUUFBTSxZQUFZLFFBQVEsa0JBQWtCLFdBQVc7QUFDdkQsUUFBTSxZQUFZLFVBQVUsYUFBYTtBQUV6QyxNQUFJLENBQUMsV0FBVztBQUNkLFdBQU87QUFBQSxFQUNUO0FBRUEsYUFBVyxZQUFZLFdBQVc7QUFDaEMsVUFBTSxXQUFXLFNBQVMsWUFBWSxVQUFVO0FBRWhELFFBQUksQ0FBQyxVQUFVO0FBQ2I7QUFBQSxJQUNGO0FBRUEsVUFBTSxlQUFlLFNBQVMsZ0JBQWdCO0FBRTlDLFFBQUksQ0FBQyxjQUFjO0FBQ2pCO0FBQUEsSUFDRjtBQUVBLGVBQVcsZUFBZSxjQUFjO0FBQ3RDLFVBQUksV0FBVyxXQUFXLEdBQUc7QUFDM0IsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVNBLFNBQVMsa0JBQWtCLE1BQStCLFlBQTZCO0FBQ3JGLFFBQU0sU0FBUyxLQUFLO0FBRXBCLFNBQU8sT0FBTyxTQUFTLHNCQUNsQixPQUFPLE9BQU8sU0FBUyxXQUN2QixPQUFPLFNBQVMsU0FBUyxnQkFDekIsT0FBTyxTQUFTLFNBQVM7QUFFaEM7QUFTQSxTQUFTLHNCQUFzQixNQUFxQixjQUErQjtBQUVqRixTQUFPLEtBQUssU0FBUyxzQkFDaEIsS0FBSyxPQUFPLFNBQVMsV0FDckIsS0FBSyxTQUFTLFNBQVMsZ0JBQ3ZCLEtBQUssU0FBUyxTQUFTO0FBRTlCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,18 @@
1
+ /// <reference path="../../index.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="../../index.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="../../../index.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="../../../index.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,35 @@
1
+ /// <reference path="../index.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
+ /**
11
+ * Parameters for the {@link lint} function.
12
+ */
13
+ export interface LintOptions {
14
+ /**
15
+ * The configuration file copied to the project root when the project has none. Without it, ESLint runs
16
+ * against whatever it finds, and reports a missing configuration itself.
17
+ */
18
+ readonly defaultConfigFilePath?: string | undefined;
19
+ /**
20
+ * Optional file paths to lint. If omitted, lints the entire project.
21
+ */
22
+ readonly paths?: string[] | undefined;
23
+ /**
24
+ * Whether to fix linting issues automatically.
25
+ *
26
+ * @default `false`
27
+ */
28
+ readonly shouldFix?: boolean | undefined;
29
+ }
30
+ /**
31
+ * Lint the project with ESLint.
32
+ *
33
+ * @param options - The {@link LintOptions}.
34
+ */
35
+ export declare function lint(options?: LintOptions): Promise<void>;