@mnaoumov/obsidian-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 (293) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -1
  3. package/bundlers/esbuild/package.json +6 -0
  4. package/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin/package.json +6 -0
  5. package/bundlers/esbuild-impl/dependency/package.json +6 -0
  6. package/bundlers/esbuild-impl/fix-source-maps-plugin/package.json +6 -0
  7. package/bundlers/esbuild-impl/index/package.json +6 -0
  8. package/bundlers/esbuild-impl/obsidian-plugin-builder/package.json +6 -0
  9. package/bundlers/esbuild-impl/package.json +6 -0
  10. package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
  11. package/bundlers/esbuild-impl/rename-css-plugin/package.json +6 -0
  12. package/bundlers/index/package.json +6 -0
  13. package/bundlers/package.json +6 -0
  14. package/dist/demo-vault-helper/main.js +1264 -0
  15. package/dist/demo-vault-helper/manifest.json +9 -0
  16. package/dist/integration-test-plugin/main.js +54167 -0
  17. package/dist/integration-test-plugin/manifest.json +8 -0
  18. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +322 -0
  19. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +38 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +240 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.d.cts +20 -0
  22. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +213 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +34 -0
  24. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +179 -0
  25. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +7 -0
  26. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +362 -0
  27. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +98 -0
  28. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +234 -0
  29. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +30 -0
  30. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +171 -0
  31. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +14 -0
  32. package/dist/lib/cjs/bundlers/esbuild.cjs +164 -0
  33. package/dist/lib/cjs/bundlers/esbuild.d.cts +11 -0
  34. package/dist/lib/cjs/bundlers/index.cjs +167 -0
  35. package/dist/lib/cjs/bundlers/index.d.cts +3 -0
  36. package/dist/lib/cjs/demo-vault-app-json.cjs +186 -0
  37. package/dist/lib/cjs/demo-vault-app-json.d.cts +93 -0
  38. package/dist/lib/cjs/demo-vault-buttons.cjs +567 -0
  39. package/dist/lib/cjs/demo-vault-buttons.d.cts +259 -0
  40. package/dist/lib/cjs/demo-vault-coverage.cjs +713 -0
  41. package/dist/lib/cjs/demo-vault-coverage.d.cts +533 -0
  42. package/dist/lib/cjs/demo-vault.cjs +296 -0
  43. package/dist/lib/cjs/demo-vault.d.cts +33 -0
  44. package/dist/lib/cjs/formatters/dprint.cjs +160 -0
  45. package/dist/lib/cjs/formatters/dprint.d.cts +15 -0
  46. package/dist/lib/cjs/formatters/index.cjs +164 -0
  47. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  48. package/dist/lib/cjs/index.cjs +194 -0
  49. package/dist/lib/cjs/index.d.cts +16 -0
  50. package/dist/lib/cjs/integration-test-setup.cjs +129 -0
  51. package/dist/lib/cjs/integration-test-setup.d.cts +33 -0
  52. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +163 -0
  53. package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +39 -0
  54. package/dist/lib/cjs/jest-setup.cjs +134 -0
  55. package/dist/lib/cjs/jest-setup.d.cts +13 -0
  56. package/dist/lib/cjs/linters/eslint-config.cjs +403 -0
  57. package/dist/lib/cjs/linters/eslint-config.d.cts +25 -0
  58. package/dist/lib/cjs/linters/eslint-rules/index.cjs +200 -0
  59. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +14 -0
  60. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +255 -0
  61. package/dist/lib/cjs/linters/eslint-rules/manifest-description.d.cts +54 -0
  62. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +218 -0
  63. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  64. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +215 -0
  65. package/dist/lib/cjs/linters/eslint-rules/manifest-id.d.cts +32 -0
  66. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +216 -0
  67. package/dist/lib/cjs/linters/eslint-rules/manifest-name.d.cts +30 -0
  68. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +316 -0
  69. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +45 -0
  70. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +259 -0
  71. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
  72. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +657 -0
  73. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
  74. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +247 -0
  75. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +10 -0
  76. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +181 -0
  77. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +13 -0
  78. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +263 -0
  79. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
  80. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +215 -0
  81. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
  82. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +278 -0
  83. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +18 -0
  84. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +306 -0
  85. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
  86. package/dist/lib/cjs/linters/eslint.cjs +160 -0
  87. package/dist/lib/cjs/linters/eslint.d.cts +15 -0
  88. package/dist/lib/cjs/linters/index.cjs +185 -0
  89. package/dist/lib/cjs/linters/index.d.cts +9 -0
  90. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +171 -0
  91. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
  92. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +164 -0
  93. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  94. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +246 -0
  95. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
  96. package/dist/lib/cjs/linters/markdownlint.cjs +160 -0
  97. package/dist/lib/cjs/linters/markdownlint.d.cts +15 -0
  98. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +176 -0
  99. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +40 -0
  100. package/dist/lib/cjs/linters/plugin-names.cjs +249 -0
  101. package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
  102. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +216 -0
  103. package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +253 -0
  104. package/dist/lib/cjs/setup.cjs +163 -0
  105. package/dist/lib/cjs/setup.d.cts +21 -0
  106. package/dist/lib/cjs/templates.cjs +172 -0
  107. package/dist/lib/cjs/templates.d.cts +13 -0
  108. package/dist/lib/cjs/test-runners/index.cjs +170 -0
  109. package/dist/lib/cjs/test-runners/index.d.cts +4 -0
  110. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +211 -0
  111. package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +44 -0
  112. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +157 -0
  113. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +27 -0
  114. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +217 -0
  115. package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +86 -0
  116. package/dist/lib/cjs/test-runners/vitest-config.cjs +484 -0
  117. package/dist/lib/cjs/test-runners/vitest-config.d.cts +200 -0
  118. package/dist/lib/cjs/version.cjs +262 -0
  119. package/dist/lib/cjs/version.d.cts +92 -0
  120. package/dist/lib/cjs/vitest-setup.cjs +134 -0
  121. package/dist/lib/cjs/vitest-setup.d.cts +11 -0
  122. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +38 -0
  123. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +218 -0
  124. package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +20 -0
  125. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +130 -0
  126. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +34 -0
  127. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +108 -0
  128. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +7 -0
  129. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +56 -0
  130. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +98 -0
  131. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +247 -0
  132. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +30 -0
  133. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +126 -0
  134. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +14 -0
  135. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +63 -0
  136. package/dist/lib/esm/bundlers/esbuild.d.mts +11 -0
  137. package/dist/lib/esm/bundlers/esbuild.mjs +58 -0
  138. package/dist/lib/esm/bundlers/index.d.mts +3 -0
  139. package/dist/lib/esm/bundlers/index.mjs +48 -0
  140. package/dist/lib/esm/demo-vault-app-json.d.mts +93 -0
  141. package/dist/lib/esm/demo-vault-app-json.mjs +75 -0
  142. package/dist/lib/esm/demo-vault-buttons.d.mts +259 -0
  143. package/dist/lib/esm/demo-vault-buttons.mjs +452 -0
  144. package/dist/lib/esm/demo-vault-coverage.d.mts +533 -0
  145. package/dist/lib/esm/demo-vault-coverage.mjs +619 -0
  146. package/dist/lib/esm/demo-vault.d.mts +33 -0
  147. package/dist/lib/esm/demo-vault.mjs +197 -0
  148. package/dist/lib/esm/formatters/dprint.d.mts +15 -0
  149. package/dist/lib/esm/formatters/dprint.mjs +52 -0
  150. package/dist/lib/esm/formatters/index.d.mts +2 -0
  151. package/dist/lib/esm/formatters/index.mjs +46 -0
  152. package/dist/lib/esm/index.d.mts +16 -0
  153. package/dist/lib/esm/index.mjs +66 -0
  154. package/dist/lib/esm/integration-test-setup.d.mts +33 -0
  155. package/dist/lib/esm/integration-test-setup.mjs +44 -0
  156. package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +39 -0
  157. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +57 -0
  158. package/dist/lib/esm/jest-setup.d.mts +13 -0
  159. package/dist/lib/esm/jest-setup.mjs +53 -0
  160. package/dist/lib/esm/linters/eslint-config.d.mts +25 -0
  161. package/dist/lib/esm/linters/eslint-config.mjs +290 -0
  162. package/dist/lib/esm/linters/eslint-rules/index.d.mts +14 -0
  163. package/dist/lib/esm/linters/eslint-rules/index.mjs +70 -0
  164. package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +54 -0
  165. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +146 -0
  166. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  167. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +90 -0
  168. package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +32 -0
  169. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +109 -0
  170. package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +30 -0
  171. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +110 -0
  172. package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +45 -0
  173. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +212 -0
  174. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
  175. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +150 -0
  176. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
  177. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +551 -0
  178. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +10 -0
  179. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +138 -0
  180. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +13 -0
  181. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +73 -0
  182. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
  183. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +157 -0
  184. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
  185. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +108 -0
  186. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +18 -0
  187. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +167 -0
  188. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
  189. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +197 -0
  190. package/dist/lib/esm/linters/eslint.d.mts +15 -0
  191. package/dist/lib/esm/linters/eslint.mjs +52 -0
  192. package/dist/lib/esm/linters/index.d.mts +9 -0
  193. package/dist/lib/esm/linters/index.mjs +60 -0
  194. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
  195. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +66 -0
  196. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  197. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +46 -0
  198. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
  199. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +130 -0
  200. package/dist/lib/esm/linters/markdownlint.d.mts +15 -0
  201. package/dist/lib/esm/linters/markdownlint.mjs +52 -0
  202. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +40 -0
  203. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +67 -0
  204. package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
  205. package/dist/lib/esm/linters/plugin-names.mjs +141 -0
  206. package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +253 -0
  207. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +108 -0
  208. package/dist/lib/esm/setup.d.mts +21 -0
  209. package/dist/lib/esm/setup.mjs +55 -0
  210. package/dist/lib/esm/templates.d.mts +13 -0
  211. package/dist/lib/esm/templates.mjs +57 -0
  212. package/dist/lib/esm/test-runners/index.d.mts +4 -0
  213. package/dist/lib/esm/test-runners/index.mjs +50 -0
  214. package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +44 -0
  215. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +94 -0
  216. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +27 -0
  217. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +48 -0
  218. package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +86 -0
  219. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +115 -0
  220. package/dist/lib/esm/test-runners/vitest-config.d.mts +200 -0
  221. package/dist/lib/esm/test-runners/vitest-config.mjs +369 -0
  222. package/dist/lib/esm/version.d.mts +92 -0
  223. package/dist/lib/esm/version.mjs +160 -0
  224. package/dist/lib/esm/vitest-setup.d.mts +11 -0
  225. package/dist/lib/esm/vitest-setup.mjs +53 -0
  226. package/dist/templates/.markdownlint-cli2.mjs +4 -0
  227. package/dist/templates/.nano-staged.mjs +4 -0
  228. package/dist/templates/commitlint.config.ts +3 -0
  229. package/dist/templates/dprint.json +26 -0
  230. package/dist/templates/eslint.config.mts +3 -0
  231. package/dist/templates/scripts/build/build-clean.ts +4 -0
  232. package/dist/templates/scripts/build/build-compile-svelte.ts +4 -0
  233. package/dist/templates/scripts/build/build-compile-typescript.ts +4 -0
  234. package/dist/templates/scripts/build/build-compile.ts +4 -0
  235. package/dist/templates/scripts/build/build-templates.ts +4 -0
  236. package/dist/templates/scripts/bundlers/esbuild/build.ts +4 -0
  237. package/dist/templates/scripts/bundlers/esbuild/dev.ts +4 -0
  238. package/dist/templates/scripts/commitlint-config.ts +3 -0
  239. package/dist/templates/scripts/eslint-config.ts +10 -0
  240. package/dist/templates/scripts/formatters/dprint/format-check.ts +8 -0
  241. package/dist/templates/scripts/formatters/dprint/format.ts +8 -0
  242. package/dist/templates/scripts/gate/gate.ts +10 -0
  243. package/dist/templates/scripts/linters/cspell/spellcheck.ts +8 -0
  244. package/dist/templates/scripts/linters/eslint/lint-fix.ts +8 -0
  245. package/dist/templates/scripts/linters/eslint/lint.ts +8 -0
  246. package/dist/templates/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
  247. package/dist/templates/scripts/linters/markdownlint/lint-md.ts +8 -0
  248. package/dist/templates/scripts/linters/over-exposure/find-overexposed-fix.ts +25 -0
  249. package/dist/templates/scripts/linters/over-exposure/find-overexposed.ts +15 -0
  250. package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
  251. package/dist/templates/scripts/nano-staged-config.ts +3 -0
  252. package/dist/templates/scripts/test-runners/vitest/test-coverage.ts +4 -0
  253. package/dist/templates/scripts/test-runners/vitest/test-watch.ts +4 -0
  254. package/dist/templates/scripts/test-runners/vitest/test.ts +4 -0
  255. package/dist/templates/scripts/version/version.ts +10 -0
  256. package/dist/templates/scripts/vitest-config.ts +3 -0
  257. package/dist/templates/vitest.config.ts +3 -0
  258. package/formatters/dprint/package.json +6 -0
  259. package/formatters/index/package.json +6 -0
  260. package/formatters/package.json +6 -0
  261. package/linters/eslint/package.json +6 -0
  262. package/linters/eslint-config/package.json +6 -0
  263. package/linters/eslint-rules/index/package.json +6 -0
  264. package/linters/eslint-rules/manifest-description/package.json +6 -0
  265. package/linters/eslint-rules/manifest-helpers/package.json +6 -0
  266. package/linters/eslint-rules/manifest-id/package.json +6 -0
  267. package/linters/eslint-rules/manifest-name/package.json +6 -0
  268. package/linters/eslint-rules/manifest-schema/package.json +6 -0
  269. package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
  270. package/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
  271. package/linters/eslint-rules/no-untrusted-input-events/package.json +6 -0
  272. package/linters/eslint-rules/obsidian-dev-utils-plugin/package.json +6 -0
  273. package/linters/eslint-rules/package.json +6 -0
  274. package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
  275. package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
  276. package/linters/eslint-rules/require-component-suffix/package.json +6 -0
  277. package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
  278. package/linters/index/package.json +6 -0
  279. package/linters/markdownlint/package.json +6 -0
  280. package/linters/markdownlint-cli2-config/package.json +6 -0
  281. package/linters/markdownlint-rules/index/package.json +6 -0
  282. package/linters/markdownlint-rules/package.json +6 -0
  283. package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
  284. package/linters/obsidianmd-rule-custom-message/package.json +6 -0
  285. package/linters/package.json +6 -0
  286. package/linters/plugin-names/package.json +6 -0
  287. package/package.json +302 -13
  288. package/test-runners/index/package.json +6 -0
  289. package/test-runners/integration-test-plugin/package.json +6 -0
  290. package/test-runners/package.json +6 -0
  291. package/test-runners/performance-eval-cap/package.json +6 -0
  292. package/test-runners/stale-build-global-setup/package.json +6 -0
  293. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,278 @@
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
+ const existingProcess = globalThis.process;
22
+ if (!existingProcess) {
23
+ globalThis.process = browserProcess;
24
+ return;
25
+ }
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+ const existingProcessRecord = existingProcess;
30
+ for (const [key, value] of Object.entries(browserProcess)) {
31
+ existingProcessRecord[key] ??= value;
32
+ }
33
+ existingProcessRecord["browser"] = true;
34
+ }
35
+
36
+ function keepName($unknown) {
37
+ return $unknown;
38
+ }
39
+
40
+ (function initCjs() {
41
+ const globalThisRecord = globalThis;
42
+ ensureDisposeSymbols();
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
45
+ ensureBrowserProcess();
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && "default" in module ? module.default : module;
48
+ }
49
+ })();
50
+ })();
51
+ (function patchObsidianRequire() {
52
+ const originalRequire = require;
53
+ if (!originalRequire || originalRequire.__isPatched) {
54
+ return;
55
+ }
56
+
57
+ require = Object.assign(
58
+ (id) => requirePatched(id),
59
+ originalRequire,
60
+ {
61
+ __isPatched: true
62
+ }
63
+ );
64
+
65
+ function extractDefault(module) {
66
+ return module && module.__esModule && 'default' in module ? module.default : module;
67
+ }
68
+
69
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
70
+ '@codemirror/autocomplete',
71
+ '@codemirror/collab',
72
+ '@codemirror/commands',
73
+ '@codemirror/language',
74
+ '@codemirror/lint',
75
+ '@codemirror/search',
76
+ '@codemirror/state',
77
+ '@codemirror/text',
78
+ '@codemirror/view',
79
+ '@lezer/common',
80
+ '@lezer/highlight',
81
+ '@lezer/lr',
82
+ 'obsidian']
83
+ );
84
+
85
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
86
+ '@codemirror/closebrackets',
87
+ '@codemirror/comment',
88
+ '@codemirror/fold',
89
+ '@codemirror/gutter',
90
+ '@codemirror/highlight',
91
+ '@codemirror/history',
92
+ '@codemirror/matchbrackets',
93
+ '@codemirror/panel',
94
+ '@codemirror/rangeset',
95
+ '@codemirror/rectangular-selection',
96
+ '@codemirror/stream-parser',
97
+ '@codemirror/tooltip']
98
+ );
99
+
100
+ function requirePatched(id) {
101
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
102
+ return originalRequire?.(id);
103
+ }
104
+
105
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
106
+ if (globalThis.app.isMobile) {
107
+ if (id === 'process' || id === 'node:process') {
108
+ // eslint-disable-next-line no-console -- Valid usage.
109
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
110
+
111
+ return process;
112
+ }
113
+ } else {
114
+ const module = originalRequire?.(id);
115
+ if (module) {
116
+ return extractDefault(module);
117
+ }
118
+ }
119
+
120
+ // eslint-disable-next-line no-console -- Valid usage.
121
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
122
+ return {};
123
+ }
124
+ })();
125
+
126
+ "use strict";
127
+ var __defProp = Object.defineProperty;
128
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
129
+ var __getOwnPropNames = Object.getOwnPropertyNames;
130
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
131
+ var __export = (target, all) => {
132
+ for (var name in all)
133
+ __defProp(target, name, { get: all[name], enumerable: true });
134
+ };
135
+ var __copyProps = (to, from, except, desc) => {
136
+ if (from && typeof from === "object" || typeof from === "function") {
137
+ for (let key of __getOwnPropNames(from))
138
+ if (!__hasOwnProp.call(to, key) && key !== except)
139
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
140
+ }
141
+ return to;
142
+ };
143
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
144
+ var require_component_suffix_exports = {};
145
+ __export(require_component_suffix_exports, {
146
+ MESSAGE_ID_ABSTRACT_NEEDS_BASE: () => MESSAGE_ID_ABSTRACT_NEEDS_BASE,
147
+ MESSAGE_ID_BASE_NOT_ABSTRACT: () => MESSAGE_ID_BASE_NOT_ABSTRACT,
148
+ MESSAGE_ID_MISSING_SUFFIX: () => MESSAGE_ID_MISSING_SUFFIX,
149
+ requireComponentSuffix: () => requireComponentSuffix
150
+ });
151
+ module.exports = __toCommonJS(require_component_suffix_exports);
152
+ var import_ts_estree_node = require('@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node');
153
+ const MESSAGE_ID_MISSING_SUFFIX = "requireComponentSuffix";
154
+ const MESSAGE_ID_ABSTRACT_NEEDS_BASE = "abstractNeedsComponentBase";
155
+ const MESSAGE_ID_BASE_NOT_ABSTRACT = "componentBaseNotAbstract";
156
+ const EXCLUDED_ANCESTORS = /* @__PURE__ */ new Set(["HoverPopover", "MarkdownRenderChild", "Menu", "Plugin", "QueryController", "View"]);
157
+ const REQUIRED_ANCESTOR = "Component";
158
+ const requireComponentSuffix = {
159
+ create(context) {
160
+ const services = context.sourceCode.parserServices;
161
+ const checker = services.program.getTypeChecker();
162
+ return {
163
+ "ClassDeclaration[id]"(node) {
164
+ reportClass({
165
+ checker,
166
+ context,
167
+ node,
168
+ services
169
+ });
170
+ },
171
+ "ClassExpression[id]"(node) {
172
+ reportClass({
173
+ checker,
174
+ context,
175
+ node,
176
+ services
177
+ });
178
+ }
179
+ };
180
+ },
181
+ meta: {
182
+ docs: {
183
+ description: "Require classes extending `Component` to have names ending with `Component`"
184
+ },
185
+ messages: {
186
+ [MESSAGE_ID_ABSTRACT_NEEDS_BASE]: "Abstract class `{{ className }}` extends `Component` but its name does not end with `ComponentBase`.",
187
+ [MESSAGE_ID_BASE_NOT_ABSTRACT]: "Class `{{ className }}` ends with `ComponentBase` but is not abstract. Only abstract classes may use the `ComponentBase` suffix.",
188
+ [MESSAGE_ID_MISSING_SUFFIX]: "Class `{{ className }}` extends `Component` but its name does not end with `Component`."
189
+ },
190
+ schema: [],
191
+ type: "problem"
192
+ }
193
+ };
194
+ function collectAncestorNames(type) {
195
+ const names = /* @__PURE__ */ new Set();
196
+ const visited = /* @__PURE__ */ new Set();
197
+ walkAncestors({
198
+ collectedNames: names,
199
+ currentType: type,
200
+ visitedTypes: visited
201
+ });
202
+ return names;
203
+ function walkAncestors(params) {
204
+ const { collectedNames, currentType, visitedTypes } = params;
205
+ if (visitedTypes.has(currentType)) {
206
+ return;
207
+ }
208
+ visitedTypes.add(currentType);
209
+ const baseTypes = currentType.getBaseTypes?.();
210
+ if (!baseTypes) {
211
+ return;
212
+ }
213
+ for (const baseType of baseTypes) {
214
+ const $symbol = baseType.getSymbol();
215
+ if ($symbol) {
216
+ collectedNames.add($symbol.getName());
217
+ }
218
+ walkAncestors({
219
+ collectedNames,
220
+ currentType: baseType,
221
+ visitedTypes
222
+ });
223
+ }
224
+ }
225
+ }
226
+ function reportClass(params) {
227
+ const { checker, context, node, services } = params;
228
+ const classNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
229
+ const classId = classNode.id;
230
+ if (!classId) {
231
+ return;
232
+ }
233
+ const className = classId.name;
234
+ const { abstract: isAbstract } = classNode;
235
+ const hasComponentBaseSuffix = className.endsWith("ComponentBase");
236
+ const hasComponentSuffix = !hasComponentBaseSuffix && className.endsWith("Component");
237
+ if (hasComponentSuffix && !isAbstract || hasComponentBaseSuffix && isAbstract) {
238
+ return;
239
+ }
240
+ const tsNode = services.esTreeNodeToTSNodeMap.get(classNode);
241
+ const classType = checker.getTypeAtLocation(tsNode);
242
+ const ancestors = collectAncestorNames(classType);
243
+ if (!ancestors.has(REQUIRED_ANCESTOR)) {
244
+ return;
245
+ }
246
+ for (const excluded of EXCLUDED_ANCESTORS) {
247
+ if (ancestors.has(excluded)) {
248
+ return;
249
+ }
250
+ }
251
+ if (hasComponentBaseSuffix && !isAbstract) {
252
+ context.report({
253
+ data: { className },
254
+ messageId: MESSAGE_ID_BASE_NOT_ABSTRACT,
255
+ node
256
+ });
257
+ } else if (isAbstract) {
258
+ context.report({
259
+ data: { className },
260
+ messageId: MESSAGE_ID_ABSTRACT_NEEDS_BASE,
261
+ node
262
+ });
263
+ } else {
264
+ context.report({
265
+ data: { className },
266
+ messageId: MESSAGE_ID_MISSING_SUFFIX,
267
+ node
268
+ });
269
+ }
270
+ }
271
+ // Annotate the CommonJS export names for ESM import in node:
272
+ 0 && (module.exports = {
273
+ MESSAGE_ID_ABSTRACT_NEEDS_BASE,
274
+ MESSAGE_ID_BASE_NOT_ABSTRACT,
275
+ MESSAGE_ID_MISSING_SUFFIX,
276
+ requireComponentSuffix
277
+ });
278
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLWNvbXBvbmVudC1zdWZmaXhcbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYSBjbGFzcyB0aGF0IGV4dGVuZHMgYENvbXBvbmVudGAgKGZyb20gT2JzaWRpYW4sXG4gKiBkaXJlY3RseSBvciB0cmFuc2l0aXZlbHkpIGRvZXMgbm90IGhhdmUgYSBuYW1lIGVuZGluZyB3aXRoIGBDb21wb25lbnRgXG4gKiAob3IgYENvbXBvbmVudEJhc2VgIGZvciBhYnN0cmFjdCBiYXNlIGNsYXNzZXMpLlxuICpcbiAqIENsYXNzZXMgd2hvc2UgaW5oZXJpdGFuY2UgY2hhaW4gaW5jbHVkZXMgYW55IG9mIHRoZSBPYnNpZGlhbiBmcmFtZXdvcmtcbiAqIGNsYXNzZXMgdGhhdCBleHRlbmQgYENvbXBvbmVudGAgKGUuZy4gYFBsdWdpbmAsIGBWaWV3YCxcbiAqIGBNYXJrZG93blJlbmRlckNoaWxkYCwgYE1lbnVgLCBgSG92ZXJQb3BvdmVyYCwgYFF1ZXJ5Q29udHJvbGxlcmApXG4gKiBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGZvbGxvdyBPYnNpZGlhbidzIG93biBuYW1pbmcgY29udmVudGlvbnMuXG4gKlxuICogVGhlIHJ1bGUgdXNlcyB0aGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdG8gd2FsayB0aGUgZnVsbCBpbmhlcml0YW5jZVxuICogY2hhaW4sIHNvIGl0IHdvcmtzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW50ZXJtZWRpYXRlIGNsYXNzZXMgc2l0XG4gKiBiZXR3ZWVuIHRoZSB1c2VyJ3MgY2xhc3MgYW5kIGBDb21wb25lbnRgLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgY2xhc3MgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYID0gJ3JlcXVpcmVDb21wb25lbnRTdWZmaXgnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhYnN0cmFjdCBjbGFzcyBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50QmFzZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UgPSAnYWJzdHJhY3ROZWVkc0NvbXBvbmVudEJhc2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGNsYXNzIG5hbWUgZW5kcyB3aXRoIGBDb21wb25lbnRCYXNlYCBidXQgdGhlIGNsYXNzIGlzIG5vdCBhYnN0cmFjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQkFTRV9OT1RfQUJTVFJBQ1QgPSAnY29tcG9uZW50QmFzZU5vdEFic3RyYWN0JztcblxuLyoqXG5BbmNlc3RvciBjbGFzcyBuYW1lcyB0aGF0IG9wdCBhIHN1YnRyZWUgb3V0IG9mIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0FOQ0VTVE9SUyA9IG5ldyBTZXQoWydIb3ZlclBvcG92ZXInLCAnTWFya2Rvd25SZW5kZXJDaGlsZCcsICdNZW51JywgJ1BsdWdpbicsICdRdWVyeUNvbnRyb2xsZXInLCAnVmlldyddKTtcblxuLyoqXG5UaGUgYW5jZXN0b3IgY2xhc3MgbmFtZSB0aGF0IHRyaWdnZXJzIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX0FOQ0VTVE9SID0gJ0NvbXBvbmVudCc7XG5cbmludGVyZmFjZSBUeXBlV2l0aEJhc2VUeXBlcyB7XG4gIGdldEJhc2VUeXBlcz86ICgpID0+IFR5cGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgY2xhc3NlcyB0aGF0IGV4dGVuZCBgQ29tcG9uZW50YCB0byBiZSBuYW1lZCB3aXRoIGEgYENvbXBvbmVudGAgc3VmZml4LCBhbmQgYWJzdHJhY3Qgb25lcyB3aXRoIGEgYENvbXBvbmVudEJhc2VgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVDb21wb25lbnRTdWZmaXg6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb247XG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ2xhc3NEZWNsYXJhdGlvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgJ0NsYXNzRXhwcmVzc2lvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBjbGFzc2VzIGV4dGVuZGluZyBgQ29tcG9uZW50YCB0byBoYXZlIG5hbWVzIGVuZGluZyB3aXRoIGBDb21wb25lbnRgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0VdOiAnQWJzdHJhY3QgY2xhc3MgYHt7IGNsYXNzTmFtZSB9fWAgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudEJhc2VgLicsXG4gICAgICBbTUVTU0FHRV9JRF9CQVNFX05PVF9BQlNUUkFDVF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBlbmRzIHdpdGggYENvbXBvbmVudEJhc2VgIGJ1dCBpcyBub3QgYWJzdHJhY3QuIE9ubHkgYWJzdHJhY3QgY2xhc3NlcyBtYXkgdXNlIHRoZSBgQ29tcG9uZW50QmFzZWAgc3VmZml4LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBvcnRDbGFzc30uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRDbGFzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gICAqL1xuICByZWFkb25seSBjaGVja2VyOiBSZXR1cm5UeXBlPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvblsncHJvZ3JhbSddWydnZXRUeXBlQ2hlY2tlciddPjtcblxuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgQVNUIG5vZGUuXG4gICAqL1xuICByZWFkb25seSBub2RlOiBSdWxlLk5vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc2VydmljZXMgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2Fsa0FuY2VzdG9yc30uXG4gKi9cbmludGVyZmFjZSBXYWxrQW5jZXN0b3JzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgdG8gYWRkIGRpc2NvdmVyZWQgYW5jZXN0b3IgbmFtZXMgdG8uXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0ZWROYW1lczogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHR5cGUgdG8gaW5zcGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUeXBlcyBhbHJlYWR5IHZpc2l0ZWQsIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAqL1xuICByZWFkb25seSB2aXNpdGVkVHlwZXM6IFNldDxUeXBlPjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgbmFtZXMgb2YgYWxsIGFuY2VzdG9yIHR5cGVzIGluIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBUeXBlU2NyaXB0IHR5cGUgdG8gc3RhcnQgZnJvbS5cbiAqIEByZXR1cm5zIEEgc2V0IG9mIGFuY2VzdG9yIGNsYXNzIG5hbWVzLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JOYW1lcyh0eXBlOiBUeXBlKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxUeXBlPigpO1xuXG4gIHdhbGtBbmNlc3RvcnMoe1xuICAgIGNvbGxlY3RlZE5hbWVzOiBuYW1lcyxcbiAgICBjdXJyZW50VHlwZTogdHlwZSxcbiAgICB2aXNpdGVkVHlwZXM6IHZpc2l0ZWRcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVzO1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB3YWxrcyB0aGUgYmFzZSB0eXBlcyBvZiBhIHR5cGUsIGNvbGxlY3RpbmcgdGhlaXIgbmFtZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqL1xuICBmdW5jdGlvbiB3YWxrQW5jZXN0b3JzKHBhcmFtczogV2Fsa0FuY2VzdG9yc1BhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29sbGVjdGVkTmFtZXMsIGN1cnJlbnRUeXBlLCB2aXNpdGVkVHlwZXMgfSA9IHBhcmFtcztcbiAgICBpZiAodmlzaXRlZFR5cGVzLmhhcyhjdXJyZW50VHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aXNpdGVkVHlwZXMuYWRkKGN1cnJlbnRUeXBlKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlcyA9IChjdXJyZW50VHlwZSBhcyBUeXBlV2l0aEJhc2VUeXBlcykuZ2V0QmFzZVR5cGVzPy4oKTtcblxuICAgIGlmICghYmFzZVR5cGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBiYXNlVHlwZSBvZiBiYXNlVHlwZXMpIHtcbiAgICAgIGNvbnN0ICRzeW1ib2wgPSBiYXNlVHlwZS5nZXRTeW1ib2woKTtcblxuICAgICAgaWYgKCRzeW1ib2wpIHtcbiAgICAgICAgY29sbGVjdGVkTmFtZXMuYWRkKCRzeW1ib2wuZ2V0TmFtZSgpKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa0FuY2VzdG9ycyh7XG4gICAgICAgIGNvbGxlY3RlZE5hbWVzLFxuICAgICAgICBjdXJyZW50VHlwZTogYmFzZVR5cGUsXG4gICAgICAgIHZpc2l0ZWRUeXBlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgc2luZ2xlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENsYXNzKHBhcmFtczogUmVwb3J0Q2xhc3NQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja2VyLCBjb250ZXh0LCBub2RlLCBzZXJ2aWNlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBjbGFzc05vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DbGFzc0RlY2xhcmF0aW9uIHwgVFNFU1RyZWUuQ2xhc3NFeHByZXNzaW9uO1xuICBjb25zdCBjbGFzc0lkID0gY2xhc3NOb2RlLmlkO1xuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFU0xpbnQgc2VsZWN0b3IgYFtpZF1gIGd1YXJhbnRlZXMgY2xhc3NJZCBpcyBwcmVzZW50LiAqL1xuICBpZiAoIWNsYXNzSWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc0lkLm5hbWU7XG4gIGNvbnN0IHsgYWJzdHJhY3Q6IGlzQWJzdHJhY3QgfSA9IGNsYXNzTm9kZTtcbiAgY29uc3QgaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCA9IGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29tcG9uZW50QmFzZScpO1xuICBjb25zdCBoYXNDb21wb25lbnRTdWZmaXggPSAhaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCAmJiBjbGFzc05hbWUuZW5kc1dpdGgoJ0NvbXBvbmVudCcpO1xuXG4gIC8vIENvcnJlY3Q6IG5vbi1hYnN0cmFjdCBlbmRpbmcgd2l0aCBDb21wb25lbnQsIG9yIGFic3RyYWN0IGVuZGluZyB3aXRoIENvbXBvbmVudEJhc2VcbiAgaWYgKChoYXNDb21wb25lbnRTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHx8IChoYXNDb21wb25lbnRCYXNlU3VmZml4ICYmIGlzQWJzdHJhY3QpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHNOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjbGFzc05vZGUpO1xuICBjb25zdCBjbGFzc1R5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzTm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGNvbGxlY3RBbmNlc3Rvck5hbWVzKGNsYXNzVHlwZSk7XG5cbiAgaWYgKCFhbmNlc3RvcnMuaGFzKFJFUVVJUkVEX0FOQ0VTVE9SKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZXhjbHVkZWQgb2YgRVhDTFVERURfQU5DRVNUT1JTKSB7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXMoZXhjbHVkZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhc0NvbXBvbmVudEJhc2VTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0JBU0VfTk9UX0FCU1RSQUNULFxuICAgICAgbm9kZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UsXG4gICAgICBub2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBjbGFzc05hbWUgfSxcbiAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWCxcbiAgICAgIG5vZGVcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLDRCQUErQjtBQUt4QixNQUFNLDRCQUE0QjtBQUtsQyxNQUFNLGlDQUFpQztBQUt2QyxNQUFNLCtCQUErQjtBQUs1QyxNQUFNLHFCQUFxQixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLHVCQUF1QixRQUFRLFVBQVUsbUJBQW1CLE1BQU0sQ0FBQztBQUt2SCxNQUFNLG9CQUFvQjtBQVNuQixNQUFNLHlCQUEwQztBQUFBLEVBQ3JELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFDcEMsVUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBRWhELFdBQU87QUFBQSxNQUNMLHVCQUF1QixNQUF1QjtBQUM1QyxvQkFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFDQSxzQkFBc0IsTUFBdUI7QUFDM0Msb0JBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQUEs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
@@ -0,0 +1,18 @@
1
+ /// <reference path="../../index.d.cts" />
2
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
3
+ /**
4
+ Message ID reported when a class extends `Component` but its name does not end with `Component`.
5
+ */
6
+ export declare const MESSAGE_ID_MISSING_SUFFIX = "requireComponentSuffix";
7
+ /**
8
+ Message ID reported when an abstract class extends `Component` but its name does not end with `ComponentBase`.
9
+ */
10
+ export declare const MESSAGE_ID_ABSTRACT_NEEDS_BASE = "abstractNeedsComponentBase";
11
+ /**
12
+ Message ID reported when a class name ends with `ComponentBase` but the class is not abstract.
13
+ */
14
+ export declare const MESSAGE_ID_BASE_NOT_ABSTRACT = "componentBaseNotAbstract";
15
+ /**
16
+ * ESLint rule requiring classes that extend `Component` to be named with a `Component` suffix, and abstract ones with a `ComponentBase` suffix.
17
+ */
18
+ export declare const requireComponentSuffix: Rule.RuleModule;
@@ -0,0 +1,306 @@
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
+ const existingProcess = globalThis.process;
22
+ if (!existingProcess) {
23
+ globalThis.process = browserProcess;
24
+ return;
25
+ }
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+ const existingProcessRecord = existingProcess;
30
+ for (const [key, value] of Object.entries(browserProcess)) {
31
+ existingProcessRecord[key] ??= value;
32
+ }
33
+ existingProcessRecord["browser"] = true;
34
+ }
35
+
36
+ function keepName($unknown) {
37
+ return $unknown;
38
+ }
39
+
40
+ (function initCjs() {
41
+ const globalThisRecord = globalThis;
42
+ ensureDisposeSymbols();
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
45
+ ensureBrowserProcess();
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && "default" in module ? module.default : module;
48
+ }
49
+ })();
50
+ })();
51
+ (function patchObsidianRequire() {
52
+ const originalRequire = require;
53
+ if (!originalRequire || originalRequire.__isPatched) {
54
+ return;
55
+ }
56
+
57
+ require = Object.assign(
58
+ (id) => requirePatched(id),
59
+ originalRequire,
60
+ {
61
+ __isPatched: true
62
+ }
63
+ );
64
+
65
+ function extractDefault(module) {
66
+ return module && module.__esModule && 'default' in module ? module.default : module;
67
+ }
68
+
69
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
70
+ '@codemirror/autocomplete',
71
+ '@codemirror/collab',
72
+ '@codemirror/commands',
73
+ '@codemirror/language',
74
+ '@codemirror/lint',
75
+ '@codemirror/search',
76
+ '@codemirror/state',
77
+ '@codemirror/text',
78
+ '@codemirror/view',
79
+ '@lezer/common',
80
+ '@lezer/highlight',
81
+ '@lezer/lr',
82
+ 'obsidian']
83
+ );
84
+
85
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
86
+ '@codemirror/closebrackets',
87
+ '@codemirror/comment',
88
+ '@codemirror/fold',
89
+ '@codemirror/gutter',
90
+ '@codemirror/highlight',
91
+ '@codemirror/history',
92
+ '@codemirror/matchbrackets',
93
+ '@codemirror/panel',
94
+ '@codemirror/rangeset',
95
+ '@codemirror/rectangular-selection',
96
+ '@codemirror/stream-parser',
97
+ '@codemirror/tooltip']
98
+ );
99
+
100
+ function requirePatched(id) {
101
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
102
+ return originalRequire?.(id);
103
+ }
104
+
105
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
106
+ if (globalThis.app.isMobile) {
107
+ if (id === 'process' || id === 'node:process') {
108
+ // eslint-disable-next-line no-console -- Valid usage.
109
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
110
+
111
+ return process;
112
+ }
113
+ } else {
114
+ const module = originalRequire?.(id);
115
+ if (module) {
116
+ return extractDefault(module);
117
+ }
118
+ }
119
+
120
+ // eslint-disable-next-line no-console -- Valid usage.
121
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
122
+ return {};
123
+ }
124
+ })();
125
+
126
+ "use strict";
127
+ var __defProp = Object.defineProperty;
128
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
129
+ var __getOwnPropNames = Object.getOwnPropertyNames;
130
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
131
+ var __export = (target, all) => {
132
+ for (var name in all)
133
+ __defProp(target, name, { get: all[name], enumerable: true });
134
+ };
135
+ var __copyProps = (to, from, except, desc) => {
136
+ if (from && typeof from === "object" || typeof from === "function") {
137
+ for (let key of __getOwnPropNames(from))
138
+ if (!__hasOwnProp.call(to, key) && key !== except)
139
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
140
+ }
141
+ return to;
142
+ };
143
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
144
+ var require_plugin_api_contract_schemas_exports = {};
145
+ __export(require_plugin_api_contract_schemas_exports, {
146
+ MESSAGE_ID: () => MESSAGE_ID,
147
+ requirePluginApiContractSchemas: () => requirePluginApiContractSchemas
148
+ });
149
+ module.exports = __toCommonJS(require_plugin_api_contract_schemas_exports);
150
+ var import_ts_estree_node = require('@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node');
151
+ var import_utils = require('@typescript-eslint/utils');
152
+ const MESSAGE_ID = "requirePluginApiContractSchemas";
153
+ const CONTRACT_TYPE_NAMES = /* @__PURE__ */ new Set(["PluginApiContract", "TypedPluginApiContract"]);
154
+ const CONTRACT_VARIABLE_NAME_PATTERN = /_API_CONTRACT(?:_V\d+)?$/;
155
+ const CONTRACT_PROPERTY_NAME = "contract";
156
+ const REQUIRED_SCHEMA_NAMES = ["input", "output"];
157
+ const requirePluginApiContractSchemas = {
158
+ create(context) {
159
+ const checkedContracts = /* @__PURE__ */ new Set();
160
+ return {
161
+ "Property"(node) {
162
+ const propertyNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
163
+ if (propertyNode.parent.type === import_utils.AST_NODE_TYPES.ObjectExpression && !propertyNode.computed && readKeyName(propertyNode.key) === CONTRACT_PROPERTY_NAME) {
164
+ reportContractEntries(propertyNode.value);
165
+ }
166
+ },
167
+ "TSAsExpression, TSSatisfiesExpression"(node) {
168
+ const expressionNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
169
+ if (isContractType(expressionNode.typeAnnotation)) {
170
+ reportContractEntries(expressionNode.expression);
171
+ }
172
+ },
173
+ "VariableDeclarator"(node) {
174
+ const declaratorNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
175
+ if (declaratorNode.id.type !== import_utils.AST_NODE_TYPES.Identifier || !declaratorNode.init) {
176
+ return;
177
+ }
178
+ const typeNode = declaratorNode.id.typeAnnotation?.typeAnnotation;
179
+ if (CONTRACT_VARIABLE_NAME_PATTERN.test(declaratorNode.id.name) || typeNode !== void 0 && isContractType(typeNode)) {
180
+ reportContractEntries(declaratorNode.init);
181
+ }
182
+ }
183
+ };
184
+ function reportContractEntries(node) {
185
+ const contractNode = resolveObjectLiteral(node, context);
186
+ if (!contractNode || checkedContracts.has(contractNode)) {
187
+ return;
188
+ }
189
+ checkedContracts.add(contractNode);
190
+ for (const entry of contractNode.properties) {
191
+ if (entry.type !== import_utils.AST_NODE_TYPES.Property) {
192
+ continue;
193
+ }
194
+ const missingSchemaNames = readMissingSchemaNames(entry.value, context);
195
+ if (missingSchemaNames.length === 0) {
196
+ continue;
197
+ }
198
+ context.report({
199
+ data: {
200
+ method: (entry.computed ? null : readKeyName(entry.key)) ?? "[computed]",
201
+ missing: missingSchemaNames.map((name) => `\`${name}\``).join(" and ")
202
+ },
203
+ loc: entry.key.loc,
204
+ messageId: MESSAGE_ID
205
+ });
206
+ }
207
+ }
208
+ },
209
+ meta: {
210
+ docs: {
211
+ description: "Require an `input` and an `output` schema on every method entry of a plugin API contract"
212
+ },
213
+ messages: {
214
+ [MESSAGE_ID]: "The plugin API contract entry `{{ method }}` declares no {{ missing }} schema. Give every method entry both an `input` schema over its argument list and an `output` schema over its awaited return value."
215
+ },
216
+ schema: [],
217
+ type: "problem"
218
+ }
219
+ };
220
+ function findVariable(scope, name) {
221
+ let currentScope = scope;
222
+ while (currentScope) {
223
+ const variable = currentScope.set.get(name);
224
+ if (variable) {
225
+ return variable;
226
+ }
227
+ currentScope = currentScope.upper;
228
+ }
229
+ return null;
230
+ }
231
+ function isContractType(typeNode) {
232
+ if (typeNode.type !== import_utils.AST_NODE_TYPES.TSTypeReference) {
233
+ return false;
234
+ }
235
+ const typeName = typeNode.typeName;
236
+ return typeName.type === import_utils.AST_NODE_TYPES.Identifier ? CONTRACT_TYPE_NAMES.has(typeName.name) : typeName.type === import_utils.AST_NODE_TYPES.TSQualifiedName && CONTRACT_TYPE_NAMES.has(typeName.right.name);
237
+ }
238
+ function readKeyName(key) {
239
+ if (key.type === import_utils.AST_NODE_TYPES.Identifier) {
240
+ return key.name;
241
+ }
242
+ return key.type === import_utils.AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
243
+ }
244
+ function readMissingSchemaNames(node, context) {
245
+ const entryNode = resolveObjectLiteral(node, context);
246
+ if (!entryNode) {
247
+ return [];
248
+ }
249
+ const keyNames = /* @__PURE__ */ new Set();
250
+ for (const member of entryNode.properties) {
251
+ if (member.type !== import_utils.AST_NODE_TYPES.Property) {
252
+ return [];
253
+ }
254
+ const keyName = member.computed ? null : readKeyName(member.key);
255
+ if (keyName !== null) {
256
+ keyNames.add(keyName);
257
+ }
258
+ }
259
+ return REQUIRED_SCHEMA_NAMES.filter((name) => !keyNames.has(name));
260
+ }
261
+ function resolveConstInit(node, context) {
262
+ const variable = findVariable(context.sourceCode.getScope(node), node.name);
263
+ const definition = variable?.defs.length === 1 ? variable.defs[0] : void 0;
264
+ if (definition?.type !== "Variable") {
265
+ return null;
266
+ }
267
+ const declaratorNode = (0, import_ts_estree_node.toTSESTreeNode)(definition.node);
268
+ const declarationNode = declaratorNode.parent;
269
+ return declarationNode.kind === "const" ? declaratorNode.init : null;
270
+ }
271
+ function resolveObjectLiteral(node, context) {
272
+ const visitedNodes = /* @__PURE__ */ new Set();
273
+ let currentNode = node;
274
+ while (!visitedNodes.has(currentNode)) {
275
+ visitedNodes.add(currentNode);
276
+ switch (currentNode.type) {
277
+ case import_utils.AST_NODE_TYPES.Identifier: {
278
+ const initNode = resolveConstInit(currentNode, context);
279
+ if (!initNode) {
280
+ return null;
281
+ }
282
+ currentNode = initNode;
283
+ break;
284
+ }
285
+ case import_utils.AST_NODE_TYPES.ObjectExpression: {
286
+ return currentNode;
287
+ }
288
+ case import_utils.AST_NODE_TYPES.TSAsExpression:
289
+ case import_utils.AST_NODE_TYPES.TSNonNullExpression:
290
+ case import_utils.AST_NODE_TYPES.TSSatisfiesExpression: {
291
+ currentNode = currentNode.expression;
292
+ break;
293
+ }
294
+ default: {
295
+ return null;
296
+ }
297
+ }
298
+ }
299
+ return null;
300
+ }
301
+ // Annotate the CommonJS export names for ESM import in node:
302
+ 0 && (module.exports = {
303
+ MESSAGE_ID,
304
+ requirePluginApiContractSchemas
305
+ });
306
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzXG4gKlxuICogUmVwb3J0cyBhIG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QgdGhhdCBsYWNrcyBhbiBgaW5wdXRgIG9yIGFuIGBvdXRwdXRgIHNjaGVtYS5cbiAqXG4gKiBBIHR5cGVkIGBQbHVnaW5BcGlDb250cmFjdDxNeUFwaT5gIGFscmVhZHkgcmVmdXNlcyBzdWNoIGFuIGVudHJ5IGF0IGNvbXBpbGUgdGltZS4gVGhlIHVudHlwZWQgZGVmYXVsdCwgdGhlXG4gKiBzdHJ1Y3R1cmFsbHkgdHlwZWQgY29udHJhY3RzIGEgcHJvdmlkZXIgc2hpcHMgYmVzaWRlIGl0cyBgYXBpLmQudHNgLCBhbmQgZXZlcnkgcmVwb3NpdG9yeSBzdGlsbCBvblxuICogYG9ic2lkaWFuLWRldi11dGlsc2AgZ2V0IG5vIHN1Y2ggY2hlY2ssIHNvIGEgYHt9YCBlbnRyeSB0aGVyZSBjb21waWxlcywgZGVjbGFyZXMgb25seSB0aGF0IHRoZSBtZXRob2QgZXhpc3RzLCBhbmRcbiAqIHZhbGlkYXRlcyBub3RoaW5nLiBUaGlzIHJ1bGUgY2xvc2VzIHRoYXQgZ2FwIGZvciBldmVyeSBjb250cmFjdCBpdCBjYW4gcmVjb2duaXplLlxuICpcbiAqIEFuIG9iamVjdCBsaXRlcmFsIGlzIHJlYWQgYXMgYSBjb250cmFjdCB3aGVuIGl0IGlzOlxuICpcbiAqIC0gdGhlIGluaXRpYWxpemVyIG9mIGEgdmFyaWFibGUgdHlwZWQgYFBsdWdpbkFwaUNvbnRyYWN0YCAob3IgYFR5cGVkUGx1Z2luQXBpQ29udHJhY3RgKTtcbiAqIC0gdGhlIG9wZXJhbmQgb2YgYHNhdGlzZmllcyBQbHVnaW5BcGlDb250cmFjdGAgb3IgYGFzIFBsdWdpbkFwaUNvbnRyYWN0YDtcbiAqIC0gdGhlIHZhbHVlIG9mIGEgYGNvbnRyYWN0YCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QgbGl0ZXJhbCwgYXMgcGFzc2VkIHRvIGBwdWJsaXNoUGx1Z2luQXBpYCwgYHdhdGNoUGx1Z2luQXBpYCBvclxuICogICBgZmluZFBsdWdpbkFwaWA7XG4gKiAtIHRoZSBpbml0aWFsaXplciBvZiBhIHZhcmlhYmxlIG5hbWVkIGAqX0FQSV9DT05UUkFDVGAsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBgX1Y8bj5gIHZlcnNpb24gc3VmZml4LlxuICpcbiAqIEVhY2ggb2YgaXRzIGVudHJpZXMgaXMgYSBtZXRob2QgZW50cnkuIEFuIGVudHJ5LCBvciBhIGNvbnRyYWN0LCB3cml0dGVuIGFzIHRoZSBuYW1lIG9mIGEgYGNvbnN0YCBpcyBmb2xsb3dlZCB0b1xuICogdGhhdCBjb25zdGFudCdzIG9iamVjdCBsaXRlcmFsLCBzbyBhIG1ldGhvZCBjb250cmFjdCBzaGFyZWQgYnkgc2V2ZXJhbCBlbnRyaWVzIGlzIGNoZWNrZWQgb25jZSBwZXIgZW50cnkuXG4gKlxuICogTm90IGF0dGVtcHRlZDogYW4gZW50cnkgYnVpbHQgYnkgYSBjYWxsLCByZWFkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yIGNhcnJ5aW5nIGEgc3ByZWFkIGNhbm5vdCBiZSByZWFkXG4gKiBzdGF0aWNhbGx5LCBzbyBpdCBpcyBza2lwcGVkLiBUaGUgcnVsZSB1bmRlci1yZXBvcnRzIHJhdGhlciB0aGFuIGd1ZXNzaW5nLlxuICovXG5pbXBvcnQgdHlwZSB7IFRTRVNUcmVlIH0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgUnVsZSxcbiAgU2NvcGVcbn0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5pbXBvcnQgeyBBU1RfTk9ERV9UWVBFUyB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCBmb3IgYSBtZXRob2QgZW50cnkgdGhhdCBsYWNrcyBhIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncmVxdWlyZVBsdWdpbkFwaUNvbnRyYWN0U2NoZW1hcyc7XG5cbi8qKlxuICogVGhlIHR5cGUgbmFtZXMgdGhhdCBtYXJrIGFuIG9iamVjdCBsaXRlcmFsIGFzIGEgcGx1Z2luIEFQSSBjb250cmFjdC5cbiAqL1xuY29uc3QgQ09OVFJBQ1RfVFlQRV9OQU1FUyA9IG5ldyBTZXQoWydQbHVnaW5BcGlDb250cmFjdCcsICdUeXBlZFBsdWdpbkFwaUNvbnRyYWN0J10pO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgaG9sZGluZyBhIHBsdWdpbiBBUEkgY29udHJhY3QsIHN1Y2ggYXMgYE1ZX0FQSV9DT05UUkFDVGAgb3IgYE1ZX0FQSV9DT05UUkFDVF9WMmAuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1ZBUklBQkxFX05BTUVfUEFUVEVSTiA9IC9fQVBJX0NPTlRSQUNUKD86X1ZcXGQrKT8kLztcblxuLyoqXG4gKiBUaGUgcHJvcGVydHkgYSBjb250cmFjdCBpcyBwYXNzZWQgdW5kZXIuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1BST1BFUlRZX05BTUUgPSAnY29udHJhY3QnO1xuXG4vKipcbiAqIFRoZSBzY2hlbWFzIGV2ZXJ5IG1ldGhvZCBlbnRyeSBtdXN0IGRlY2xhcmUuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDSEVNQV9OQU1FUyA9IFsnaW5wdXQnLCAnb3V0cHV0J10gYXMgY29uc3Q7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIGJvdGggYW4gYGlucHV0YCBhbmQgYW4gYG91dHB1dGAgc2NoZW1hIG9uIGV2ZXJ5IG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBjb25zdCByZXF1aXJlUGx1Z2luQXBpQ29udHJhY3RTY2hlbWFzOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY2hlY2tlZENvbnRyYWN0cyA9IG5ldyBTZXQ8VFNFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbj4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnUHJvcGVydHknKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5Qcm9wZXJ0eTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BlcnR5Tm9kZS5wYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuT2JqZWN0RXhwcmVzc2lvbiAmJiAhcHJvcGVydHlOb2RlLmNvbXB1dGVkXG4gICAgICAgICAgJiYgcmVhZEtleU5hbWUocHJvcGVydHlOb2RlLmtleSkgPT09IENPTlRSQUNUX1BST1BFUlRZX05BTUVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKHByb3BlcnR5Tm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVFNBc0V4cHJlc3Npb24sIFRTU2F0aXNmaWVzRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuVFNBc0V4cHJlc3Npb24gfCBUU0VTVHJlZS5UU1NhdGlzZmllc0V4cHJlc3Npb247XG4gICAgICAgIGlmIChpc0NvbnRyYWN0VHlwZShleHByZXNzaW9uTm9kZS50eXBlQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICByZXBvcnRDb250cmFjdEVudHJpZXMoZXhwcmVzc2lvbk5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVmFyaWFibGVEZWNsYXJhdG9yJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRvck5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5WYXJpYWJsZURlY2xhcmF0b3I7XG4gICAgICAgIGlmIChkZWNsYXJhdG9yTm9kZS5pZC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyIHx8ICFkZWNsYXJhdG9yTm9kZS5pbml0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdG9yTm9kZS5pZC50eXBlQW5ub3RhdGlvbj8udHlwZUFubm90YXRpb247XG4gICAgICAgIGlmIChDT05UUkFDVF9WQVJJQUJMRV9OQU1FX1BBVFRFUk4udGVzdChkZWNsYXJhdG9yTm9kZS5pZC5uYW1lKSB8fCAodHlwZU5vZGUgIT09IHVuZGVmaW5lZCAmJiBpc0NvbnRyYWN0VHlwZSh0eXBlTm9kZSkpKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKGRlY2xhcmF0b3JOb2RlLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlcG9ydENvbnRyYWN0RW50cmllcyhub2RlOiBUU0VTVHJlZS5Ob2RlKTogdm9pZCB7XG4gICAgICBjb25zdCBjb250cmFjdE5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgICAgIGlmICghY29udHJhY3ROb2RlIHx8IGNoZWNrZWRDb250cmFjdHMuaGFzKGNvbnRyYWN0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjaGVja2VkQ29udHJhY3RzLmFkZChjb250cmFjdE5vZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRyYWN0Tm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5Qcm9wZXJ0eSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1NjaGVtYU5hbWVzID0gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhlbnRyeS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChtaXNzaW5nU2NoZW1hTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbWV0aG9kOiAoZW50cnkuY29tcHV0ZWQgPyBudWxsIDogcmVhZEtleU5hbWUoZW50cnkua2V5KSkgPz8gJ1tjb21wdXRlZF0nLFxuICAgICAgICAgICAgbWlzc2luZzogbWlzc2luZ1NjaGVtYU5hbWVzLm1hcCgobmFtZSkgPT4gYFxcYCR7bmFtZX1cXGBgKS5qb2luKCcgYW5kICcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2M6IGVudHJ5LmtleS5sb2MsXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBhbiBgaW5wdXRgIGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb24gZXZlcnkgbWV0aG9kIGVudHJ5IG9mIGEgcGx1Z2luIEFQSSBjb250cmFjdCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdUaGUgcGx1Z2luIEFQSSBjb250cmFjdCBlbnRyeSBge3sgbWV0aG9kIH19YCBkZWNsYXJlcyBubyB7eyBtaXNzaW5nIH19IHNjaGVtYS4gR2l2ZSBldmVyeSBtZXRob2QgZW50cnkgYm90aCBhbiBgaW5wdXRgIHNjaGVtYSBvdmVyIGl0cyBhcmd1bWVudCBsaXN0IGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb3ZlciBpdHMgYXdhaXRlZCByZXR1cm4gdmFsdWUuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIHZhcmlhYmxlIGJ5IG5hbWUsIHdhbGtpbmcgb3V0d2FyZHMgZnJvbSB0aGUgZ2l2ZW4gc2NvcGUuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB2YXJpYWJsZSdzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgdmFyaWFibGUsIG9yIGBudWxsYCB3aGVuIG5vdGhpbmcgaW4gc2NvcGUgZGVjbGFyZXMgdGhhdCBuYW1lLlxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFibGUoc2NvcGU6IFNjb3BlLlNjb3BlLCBuYW1lOiBzdHJpbmcpOiBudWxsIHwgU2NvcGUuVmFyaWFibGUge1xuICBsZXQgY3VycmVudFNjb3BlOiBudWxsIHwgU2NvcGUuU2NvcGUgPSBzY29wZTtcblxuICB3aGlsZSAoY3VycmVudFNjb3BlKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBjdXJyZW50U2NvcGUuc2V0LmdldChuYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICB9XG4gICAgY3VycmVudFNjb3BlID0gY3VycmVudFNjb3BlLnVwcGVyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIG5hbWVzIGEgcGx1Z2luIEFQSSBjb250cmFjdCwgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIG5hbWVzcGFjZS5cbiAqXG4gKiBAcGFyYW0gdHlwZU5vZGUgLSBUaGUgdHlwZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0eXBlIGlzIGEgY29udHJhY3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cmFjdFR5cGUodHlwZU5vZGU6IFRTRVNUcmVlLlR5cGVOb2RlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlTm9kZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVSZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLnR5cGVOYW1lO1xuICByZXR1cm4gdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciA/IENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLm5hbWUpIDogdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNRdWFsaWZpZWROYW1lICYmIENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLnJpZ2h0Lm5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkga2V5IHdyaXR0ZW4gYXMgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5LlxuICogQHJldHVybnMgVGhlIG5hbWUsIG9yIGBudWxsYCBmb3IgYW55IG90aGVyIGtleS5cbiAqL1xuZnVuY3Rpb24gcmVhZEtleU5hbWUoa2V5OiBUU0VTVHJlZS5Ob2RlKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuXG4gIHJldHVybiBrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAnc3RyaW5nJyA/IGtleS52YWx1ZSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgd2hpY2ggcmVxdWlyZWQgc2NoZW1hcyBhIG1ldGhvZCBlbnRyeSBsYWNrcy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBlbnRyeSdzIHZhbHVlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LCB1c2VkIHRvIGZvbGxvdyBhIGNvbnN0YW50LlxuICogQHJldHVybnMgVGhlIG1pc3Npbmcgc2NoZW1hIG5hbWVzLCBlbXB0eSB3aGVuIG5vbmUgaXMgbWlzc2luZyBvciB0aGUgZW50cnkgY2Fubm90IGJlIHJlYWQgc3RhdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogc3RyaW5nW10ge1xuICBjb25zdCBlbnRyeU5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgaWYgKCFlbnRyeU5vZGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrZXlOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBlbnRyeU5vZGUucHJvcGVydGllcykge1xuICAgIGlmIChtZW1iZXIudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlOYW1lID0gbWVtYmVyLmNvbXB1dGVkID8gbnVsbCA6IHJlYWRLZXlOYW1lKG1lbWJlci5rZXkpO1xuICAgIGlmIChrZXlOYW1lICE9PSBudWxsKSB7XG4gICAgICBrZXlOYW1lcy5hZGQoa2V5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJFUVVJUkVEX1NDSEVNQV9OQU1FUy5maWx0ZXIoKG5hbWUpID0+ICFrZXlOYW1lcy5oYXMobmFtZSkpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGlkZW50aWZpZXIgdG8gdGhlIGluaXRpYWxpemVyIG9mIHRoZSBgY29uc3RgIGl0IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBydWxlIGNvbnRleHQsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgaWRlbnRpZmllciB0aHJvdWdoIHNjb3BlLlxuICogQHJldHVybnMgVGhlIGluaXRpYWxpemVyLCBvciBgbnVsbGAgd2hlbiB0aGUgaWRlbnRpZmllciBuYW1lcyBhbnl0aGluZyBlbHNlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RJbml0KG5vZGU6IFRTRVNUcmVlLklkZW50aWZpZXIsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgVFNFU1RyZWUuRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgbm9kZS5uYW1lKTtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlPy5kZWZzLmxlbmd0aCA9PT0gMSA/IHZhcmlhYmxlLmRlZnNbMF0gOiB1bmRlZmluZWQ7XG4gIGlmIChkZWZpbml0aW9uPy50eXBlICE9PSAnVmFyaWFibGUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdG9yTm9kZSA9IHRvVFNFU1RyZWVOb2RlKGRlZmluaXRpb24ubm9kZSkgYXMgVFNFU1RyZWUuVmFyaWFibGVEZWNsYXJhdG9yO1xuICBjb25zdCBkZWNsYXJhdGlvbk5vZGUgPSBkZWNsYXJhdG9yTm9kZS5wYXJlbnQ7XG4gIHJldHVybiBkZWNsYXJhdGlvbk5vZGUua2luZCA9PT0gJ2NvbnN0JyA/IGRlY2xhcmF0b3JOb2RlLmluaXQgOiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGV4cHJlc3Npb24gdG8gdGhlIG9iamVjdCBsaXRlcmFsIGl0IGlzLCBzdGVwcGluZyB0aHJvdWdoIGBhc2AgLyBgc2F0aXNmaWVzYCAvIGAhYCBhbmQgZm9sbG93aW5nIGFcbiAqIGBjb25zdGAgaXQgbmFtZXMuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJ1bGUgY29udGV4dCwgdXNlZCB0byByZXNvbHZlIGFuIGlkZW50aWZpZXIgdGhyb3VnaCBzY29wZS5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3QgbGl0ZXJhbCwgb3IgYG51bGxgIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IG9uZSBzdGF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogbnVsbCB8IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb24ge1xuICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgU2V0PFRTRVNUcmVlLk5vZGU+KCk7XG4gIGxldCBjdXJyZW50Tm9kZTogVFNFU1RyZWUuTm9kZSA9IG5vZGU7XG5cbiAgd2hpbGUgKCF2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgIHZpc2l0ZWROb2Rlcy5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgc3dpdGNoIChjdXJyZW50Tm9kZS50eXBlKSB7XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXI6IHtcbiAgICAgICAgY29uc3QgaW5pdE5vZGUgPSByZXNvbHZlQ29uc3RJbml0KGN1cnJlbnROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFpbml0Tm9kZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gaW5pdE5vZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBBU1RfTk9ERV9UWVBFUy5PYmplY3RFeHByZXNzaW9uOiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgQVNUX05PREVfVFlQRVMuVFNBc0V4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTTm9uTnVsbEV4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTU2F0aXNmaWVzRXhwcmVzc2lvbjoge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmV4cHJlc3Npb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0NBLDRCQUErQjtBQUMvQixtQkFBK0I7QUFLeEIsTUFBTSxhQUFhO0FBSzFCLE1BQU0sc0JBQXNCLG9CQUFJLElBQUksQ0FBQyxxQkFBcUIsd0JBQXdCLENBQUM7QUFLbkYsTUFBTSxpQ0FBaUM7QUFLdkMsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSx3QkFBd0IsQ0FBQyxTQUFTLFFBQVE7QUFLekMsTUFBTSxrQ0FBbUQ7QUFBQSxFQUM5RCxPQUFPLFNBQVM7QUFDZCxVQUFNLG1CQUFtQixvQkFBSSxJQUErQjtBQUU1RCxXQUFPO0FBQUEsTUFDTCxXQUFXLE1BQXVCO0FBQ2hDLGNBQU0sbUJBQWUsc0NBQWUsSUFBSTtBQUN4QyxZQUNFLGFBQWEsT0FBTyxTQUFTLDRCQUFlLG9CQUFvQixDQUFDLGFBQWEsWUFDM0UsWUFBWSxhQUFhLEdBQUcsTUFBTSx3QkFDckM7QUFDQSxnQ0FBc0IsYUFBYSxLQUFLO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsTUFDQSx3Q0FBd0MsTUFBdUI7QUFDN0QsY0FBTSxxQkFBaUIsc0NBQWUsSUFBSTtBQUMxQyxZQUFJLGVBQWUs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
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../index.d.cts" />
2
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
3
+ /**
4
+ * Message ID reported for a method entry that lacks a schema.
5
+ */
6
+ export declare const MESSAGE_ID = "requirePluginApiContractSchemas";
7
+ /**
8
+ * ESLint rule requiring both an `input` and an `output` schema on every method entry of a plugin API contract.
9
+ */
10
+ export declare const requirePluginApiContractSchemas: Rule.RuleModule;