@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,167 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { toTSESTreeNode } from "@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node";
43
+ const MESSAGE_ID_MISSING_SUFFIX = "requireComponentSuffix";
44
+ const MESSAGE_ID_ABSTRACT_NEEDS_BASE = "abstractNeedsComponentBase";
45
+ const MESSAGE_ID_BASE_NOT_ABSTRACT = "componentBaseNotAbstract";
46
+ const EXCLUDED_ANCESTORS = /* @__PURE__ */ new Set(["HoverPopover", "MarkdownRenderChild", "Menu", "Plugin", "QueryController", "View"]);
47
+ const REQUIRED_ANCESTOR = "Component";
48
+ const requireComponentSuffix = {
49
+ create(context) {
50
+ const services = context.sourceCode.parserServices;
51
+ const checker = services.program.getTypeChecker();
52
+ return {
53
+ "ClassDeclaration[id]"(node) {
54
+ reportClass({
55
+ checker,
56
+ context,
57
+ node,
58
+ services
59
+ });
60
+ },
61
+ "ClassExpression[id]"(node) {
62
+ reportClass({
63
+ checker,
64
+ context,
65
+ node,
66
+ services
67
+ });
68
+ }
69
+ };
70
+ },
71
+ meta: {
72
+ docs: {
73
+ description: "Require classes extending `Component` to have names ending with `Component`"
74
+ },
75
+ messages: {
76
+ [MESSAGE_ID_ABSTRACT_NEEDS_BASE]: "Abstract class `{{ className }}` extends `Component` but its name does not end with `ComponentBase`.",
77
+ [MESSAGE_ID_BASE_NOT_ABSTRACT]: "Class `{{ className }}` ends with `ComponentBase` but is not abstract. Only abstract classes may use the `ComponentBase` suffix.",
78
+ [MESSAGE_ID_MISSING_SUFFIX]: "Class `{{ className }}` extends `Component` but its name does not end with `Component`."
79
+ },
80
+ schema: [],
81
+ type: "problem"
82
+ }
83
+ };
84
+ function collectAncestorNames(type) {
85
+ const names = /* @__PURE__ */ new Set();
86
+ const visited = /* @__PURE__ */ new Set();
87
+ walkAncestors({
88
+ collectedNames: names,
89
+ currentType: type,
90
+ visitedTypes: visited
91
+ });
92
+ return names;
93
+ function walkAncestors(params) {
94
+ const { collectedNames, currentType, visitedTypes } = params;
95
+ if (visitedTypes.has(currentType)) {
96
+ return;
97
+ }
98
+ visitedTypes.add(currentType);
99
+ const baseTypes = currentType.getBaseTypes?.();
100
+ if (!baseTypes) {
101
+ return;
102
+ }
103
+ for (const baseType of baseTypes) {
104
+ const $symbol = baseType.getSymbol();
105
+ if ($symbol) {
106
+ collectedNames.add($symbol.getName());
107
+ }
108
+ walkAncestors({
109
+ collectedNames,
110
+ currentType: baseType,
111
+ visitedTypes
112
+ });
113
+ }
114
+ }
115
+ }
116
+ function reportClass(params) {
117
+ const { checker, context, node, services } = params;
118
+ const classNode = toTSESTreeNode(node);
119
+ const classId = classNode.id;
120
+ if (!classId) {
121
+ return;
122
+ }
123
+ const className = classId.name;
124
+ const { abstract: isAbstract } = classNode;
125
+ const hasComponentBaseSuffix = className.endsWith("ComponentBase");
126
+ const hasComponentSuffix = !hasComponentBaseSuffix && className.endsWith("Component");
127
+ if (hasComponentSuffix && !isAbstract || hasComponentBaseSuffix && isAbstract) {
128
+ return;
129
+ }
130
+ const tsNode = services.esTreeNodeToTSNodeMap.get(classNode);
131
+ const classType = checker.getTypeAtLocation(tsNode);
132
+ const ancestors = collectAncestorNames(classType);
133
+ if (!ancestors.has(REQUIRED_ANCESTOR)) {
134
+ return;
135
+ }
136
+ for (const excluded of EXCLUDED_ANCESTORS) {
137
+ if (ancestors.has(excluded)) {
138
+ return;
139
+ }
140
+ }
141
+ if (hasComponentBaseSuffix && !isAbstract) {
142
+ context.report({
143
+ data: { className },
144
+ messageId: MESSAGE_ID_BASE_NOT_ABSTRACT,
145
+ node
146
+ });
147
+ } else if (isAbstract) {
148
+ context.report({
149
+ data: { className },
150
+ messageId: MESSAGE_ID_ABSTRACT_NEEDS_BASE,
151
+ node
152
+ });
153
+ } else {
154
+ context.report({
155
+ data: { className },
156
+ messageId: MESSAGE_ID_MISSING_SUFFIX,
157
+ node
158
+ });
159
+ }
160
+ }
161
+ export {
162
+ MESSAGE_ID_ABSTRACT_NEEDS_BASE,
163
+ MESSAGE_ID_BASE_NOT_ABSTRACT,
164
+ MESSAGE_ID_MISSING_SUFFIX,
165
+ requireComponentSuffix
166
+ };
167
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLWNvbXBvbmVudC1zdWZmaXhcbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYSBjbGFzcyB0aGF0IGV4dGVuZHMgYENvbXBvbmVudGAgKGZyb20gT2JzaWRpYW4sXG4gKiBkaXJlY3RseSBvciB0cmFuc2l0aXZlbHkpIGRvZXMgbm90IGhhdmUgYSBuYW1lIGVuZGluZyB3aXRoIGBDb21wb25lbnRgXG4gKiAob3IgYENvbXBvbmVudEJhc2VgIGZvciBhYnN0cmFjdCBiYXNlIGNsYXNzZXMpLlxuICpcbiAqIENsYXNzZXMgd2hvc2UgaW5oZXJpdGFuY2UgY2hhaW4gaW5jbHVkZXMgYW55IG9mIHRoZSBPYnNpZGlhbiBmcmFtZXdvcmtcbiAqIGNsYXNzZXMgdGhhdCBleHRlbmQgYENvbXBvbmVudGAgKGUuZy4gYFBsdWdpbmAsIGBWaWV3YCxcbiAqIGBNYXJrZG93blJlbmRlckNoaWxkYCwgYE1lbnVgLCBgSG92ZXJQb3BvdmVyYCwgYFF1ZXJ5Q29udHJvbGxlcmApXG4gKiBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGZvbGxvdyBPYnNpZGlhbidzIG93biBuYW1pbmcgY29udmVudGlvbnMuXG4gKlxuICogVGhlIHJ1bGUgdXNlcyB0aGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdG8gd2FsayB0aGUgZnVsbCBpbmhlcml0YW5jZVxuICogY2hhaW4sIHNvIGl0IHdvcmtzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW50ZXJtZWRpYXRlIGNsYXNzZXMgc2l0XG4gKiBiZXR3ZWVuIHRoZSB1c2VyJ3MgY2xhc3MgYW5kIGBDb21wb25lbnRgLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgY2xhc3MgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYID0gJ3JlcXVpcmVDb21wb25lbnRTdWZmaXgnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhYnN0cmFjdCBjbGFzcyBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50QmFzZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UgPSAnYWJzdHJhY3ROZWVkc0NvbXBvbmVudEJhc2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGNsYXNzIG5hbWUgZW5kcyB3aXRoIGBDb21wb25lbnRCYXNlYCBidXQgdGhlIGNsYXNzIGlzIG5vdCBhYnN0cmFjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQkFTRV9OT1RfQUJTVFJBQ1QgPSAnY29tcG9uZW50QmFzZU5vdEFic3RyYWN0JztcblxuLyoqXG5BbmNlc3RvciBjbGFzcyBuYW1lcyB0aGF0IG9wdCBhIHN1YnRyZWUgb3V0IG9mIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0FOQ0VTVE9SUyA9IG5ldyBTZXQoWydIb3ZlclBvcG92ZXInLCAnTWFya2Rvd25SZW5kZXJDaGlsZCcsICdNZW51JywgJ1BsdWdpbicsICdRdWVyeUNvbnRyb2xsZXInLCAnVmlldyddKTtcblxuLyoqXG5UaGUgYW5jZXN0b3IgY2xhc3MgbmFtZSB0aGF0IHRyaWdnZXJzIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX0FOQ0VTVE9SID0gJ0NvbXBvbmVudCc7XG5cbmludGVyZmFjZSBUeXBlV2l0aEJhc2VUeXBlcyB7XG4gIGdldEJhc2VUeXBlcz86ICgpID0+IFR5cGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgY2xhc3NlcyB0aGF0IGV4dGVuZCBgQ29tcG9uZW50YCB0byBiZSBuYW1lZCB3aXRoIGEgYENvbXBvbmVudGAgc3VmZml4LCBhbmQgYWJzdHJhY3Qgb25lcyB3aXRoIGEgYENvbXBvbmVudEJhc2VgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVDb21wb25lbnRTdWZmaXg6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb247XG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ2xhc3NEZWNsYXJhdGlvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgJ0NsYXNzRXhwcmVzc2lvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBjbGFzc2VzIGV4dGVuZGluZyBgQ29tcG9uZW50YCB0byBoYXZlIG5hbWVzIGVuZGluZyB3aXRoIGBDb21wb25lbnRgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0VdOiAnQWJzdHJhY3QgY2xhc3MgYHt7IGNsYXNzTmFtZSB9fWAgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudEJhc2VgLicsXG4gICAgICBbTUVTU0FHRV9JRF9CQVNFX05PVF9BQlNUUkFDVF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBlbmRzIHdpdGggYENvbXBvbmVudEJhc2VgIGJ1dCBpcyBub3QgYWJzdHJhY3QuIE9ubHkgYWJzdHJhY3QgY2xhc3NlcyBtYXkgdXNlIHRoZSBgQ29tcG9uZW50QmFzZWAgc3VmZml4LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBvcnRDbGFzc30uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRDbGFzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gICAqL1xuICByZWFkb25seSBjaGVja2VyOiBSZXR1cm5UeXBlPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvblsncHJvZ3JhbSddWydnZXRUeXBlQ2hlY2tlciddPjtcblxuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgQVNUIG5vZGUuXG4gICAqL1xuICByZWFkb25seSBub2RlOiBSdWxlLk5vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc2VydmljZXMgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2Fsa0FuY2VzdG9yc30uXG4gKi9cbmludGVyZmFjZSBXYWxrQW5jZXN0b3JzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgdG8gYWRkIGRpc2NvdmVyZWQgYW5jZXN0b3IgbmFtZXMgdG8uXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0ZWROYW1lczogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHR5cGUgdG8gaW5zcGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUeXBlcyBhbHJlYWR5IHZpc2l0ZWQsIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAqL1xuICByZWFkb25seSB2aXNpdGVkVHlwZXM6IFNldDxUeXBlPjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgbmFtZXMgb2YgYWxsIGFuY2VzdG9yIHR5cGVzIGluIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBUeXBlU2NyaXB0IHR5cGUgdG8gc3RhcnQgZnJvbS5cbiAqIEByZXR1cm5zIEEgc2V0IG9mIGFuY2VzdG9yIGNsYXNzIG5hbWVzLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JOYW1lcyh0eXBlOiBUeXBlKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxUeXBlPigpO1xuXG4gIHdhbGtBbmNlc3RvcnMoe1xuICAgIGNvbGxlY3RlZE5hbWVzOiBuYW1lcyxcbiAgICBjdXJyZW50VHlwZTogdHlwZSxcbiAgICB2aXNpdGVkVHlwZXM6IHZpc2l0ZWRcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVzO1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB3YWxrcyB0aGUgYmFzZSB0eXBlcyBvZiBhIHR5cGUsIGNvbGxlY3RpbmcgdGhlaXIgbmFtZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqL1xuICBmdW5jdGlvbiB3YWxrQW5jZXN0b3JzKHBhcmFtczogV2Fsa0FuY2VzdG9yc1BhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29sbGVjdGVkTmFtZXMsIGN1cnJlbnRUeXBlLCB2aXNpdGVkVHlwZXMgfSA9IHBhcmFtcztcbiAgICBpZiAodmlzaXRlZFR5cGVzLmhhcyhjdXJyZW50VHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aXNpdGVkVHlwZXMuYWRkKGN1cnJlbnRUeXBlKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlcyA9IChjdXJyZW50VHlwZSBhcyBUeXBlV2l0aEJhc2VUeXBlcykuZ2V0QmFzZVR5cGVzPy4oKTtcblxuICAgIGlmICghYmFzZVR5cGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBiYXNlVHlwZSBvZiBiYXNlVHlwZXMpIHtcbiAgICAgIGNvbnN0ICRzeW1ib2wgPSBiYXNlVHlwZS5nZXRTeW1ib2woKTtcblxuICAgICAgaWYgKCRzeW1ib2wpIHtcbiAgICAgICAgY29sbGVjdGVkTmFtZXMuYWRkKCRzeW1ib2wuZ2V0TmFtZSgpKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa0FuY2VzdG9ycyh7XG4gICAgICAgIGNvbGxlY3RlZE5hbWVzLFxuICAgICAgICBjdXJyZW50VHlwZTogYmFzZVR5cGUsXG4gICAgICAgIHZpc2l0ZWRUeXBlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgc2luZ2xlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENsYXNzKHBhcmFtczogUmVwb3J0Q2xhc3NQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja2VyLCBjb250ZXh0LCBub2RlLCBzZXJ2aWNlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBjbGFzc05vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DbGFzc0RlY2xhcmF0aW9uIHwgVFNFU1RyZWUuQ2xhc3NFeHByZXNzaW9uO1xuICBjb25zdCBjbGFzc0lkID0gY2xhc3NOb2RlLmlkO1xuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFU0xpbnQgc2VsZWN0b3IgYFtpZF1gIGd1YXJhbnRlZXMgY2xhc3NJZCBpcyBwcmVzZW50LiAqL1xuICBpZiAoIWNsYXNzSWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc0lkLm5hbWU7XG4gIGNvbnN0IHsgYWJzdHJhY3Q6IGlzQWJzdHJhY3QgfSA9IGNsYXNzTm9kZTtcbiAgY29uc3QgaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCA9IGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29tcG9uZW50QmFzZScpO1xuICBjb25zdCBoYXNDb21wb25lbnRTdWZmaXggPSAhaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCAmJiBjbGFzc05hbWUuZW5kc1dpdGgoJ0NvbXBvbmVudCcpO1xuXG4gIC8vIENvcnJlY3Q6IG5vbi1hYnN0cmFjdCBlbmRpbmcgd2l0aCBDb21wb25lbnQsIG9yIGFic3RyYWN0IGVuZGluZyB3aXRoIENvbXBvbmVudEJhc2VcbiAgaWYgKChoYXNDb21wb25lbnRTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHx8IChoYXNDb21wb25lbnRCYXNlU3VmZml4ICYmIGlzQWJzdHJhY3QpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHNOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjbGFzc05vZGUpO1xuICBjb25zdCBjbGFzc1R5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzTm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGNvbGxlY3RBbmNlc3Rvck5hbWVzKGNsYXNzVHlwZSk7XG5cbiAgaWYgKCFhbmNlc3RvcnMuaGFzKFJFUVVJUkVEX0FOQ0VTVE9SKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZXhjbHVkZWQgb2YgRVhDTFVERURfQU5DRVNUT1JTKSB7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXMoZXhjbHVkZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhc0NvbXBvbmVudEJhc2VTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0JBU0VfTk9UX0FCU1RSQUNULFxuICAgICAgbm9kZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UsXG4gICAgICBub2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBjbGFzc05hbWUgfSxcbiAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWCxcbiAgICAgIG5vZGVcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSxpQ0FBaUM7QUFLdkMsTUFBTSwrQkFBK0I7QUFLNUMsTUFBTSxxQkFBcUIsb0JBQUksSUFBSSxDQUFDLGdCQUFnQix1QkFBdUIsUUFBUSxVQUFVLG1CQUFtQixNQUFNLENBQUM7QUFLdkgsTUFBTSxvQkFBb0I7QUFTbkIsTUFBTSx5QkFBMEM7QUFBQSxFQUNyRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxXQUFXO0FBQ3BDLFVBQU0sVUFBVSxTQUFTLFFBQVEsZUFBZTtBQUVoRCxXQUFPO0FBQUEsTUFDTCx1QkFBdUIsTUFBdUI7QUFDNUMsb0JBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLE1BQ0Esc0JBQXNCLE1BQXVCO0FBQzNDLG9CQUFZO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsOEJBQThCLEdBQUc7QUFBQSxNQUNsQyxDQUFD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
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ import type { Rule } from 'eslint';
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;
@@ -0,0 +1,197 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { toTSESTreeNode } from "@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node";
43
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
44
+ const MESSAGE_ID = "requirePluginApiContractSchemas";
45
+ const CONTRACT_TYPE_NAMES = /* @__PURE__ */ new Set(["PluginApiContract", "TypedPluginApiContract"]);
46
+ const CONTRACT_VARIABLE_NAME_PATTERN = /_API_CONTRACT(?:_V\d+)?$/;
47
+ const CONTRACT_PROPERTY_NAME = "contract";
48
+ const REQUIRED_SCHEMA_NAMES = ["input", "output"];
49
+ const requirePluginApiContractSchemas = {
50
+ create(context) {
51
+ const checkedContracts = /* @__PURE__ */ new Set();
52
+ return {
53
+ "Property"(node) {
54
+ const propertyNode = toTSESTreeNode(node);
55
+ if (propertyNode.parent.type === AST_NODE_TYPES.ObjectExpression && !propertyNode.computed && readKeyName(propertyNode.key) === CONTRACT_PROPERTY_NAME) {
56
+ reportContractEntries(propertyNode.value);
57
+ }
58
+ },
59
+ "TSAsExpression, TSSatisfiesExpression"(node) {
60
+ const expressionNode = toTSESTreeNode(node);
61
+ if (isContractType(expressionNode.typeAnnotation)) {
62
+ reportContractEntries(expressionNode.expression);
63
+ }
64
+ },
65
+ "VariableDeclarator"(node) {
66
+ const declaratorNode = toTSESTreeNode(node);
67
+ if (declaratorNode.id.type !== AST_NODE_TYPES.Identifier || !declaratorNode.init) {
68
+ return;
69
+ }
70
+ const typeNode = declaratorNode.id.typeAnnotation?.typeAnnotation;
71
+ if (CONTRACT_VARIABLE_NAME_PATTERN.test(declaratorNode.id.name) || typeNode !== void 0 && isContractType(typeNode)) {
72
+ reportContractEntries(declaratorNode.init);
73
+ }
74
+ }
75
+ };
76
+ function reportContractEntries(node) {
77
+ const contractNode = resolveObjectLiteral(node, context);
78
+ if (!contractNode || checkedContracts.has(contractNode)) {
79
+ return;
80
+ }
81
+ checkedContracts.add(contractNode);
82
+ for (const entry of contractNode.properties) {
83
+ if (entry.type !== AST_NODE_TYPES.Property) {
84
+ continue;
85
+ }
86
+ const missingSchemaNames = readMissingSchemaNames(entry.value, context);
87
+ if (missingSchemaNames.length === 0) {
88
+ continue;
89
+ }
90
+ context.report({
91
+ data: {
92
+ method: (entry.computed ? null : readKeyName(entry.key)) ?? "[computed]",
93
+ missing: missingSchemaNames.map((name) => `\`${name}\``).join(" and ")
94
+ },
95
+ loc: entry.key.loc,
96
+ messageId: MESSAGE_ID
97
+ });
98
+ }
99
+ }
100
+ },
101
+ meta: {
102
+ docs: {
103
+ description: "Require an `input` and an `output` schema on every method entry of a plugin API contract"
104
+ },
105
+ messages: {
106
+ [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."
107
+ },
108
+ schema: [],
109
+ type: "problem"
110
+ }
111
+ };
112
+ function findVariable(scope, name) {
113
+ let currentScope = scope;
114
+ while (currentScope) {
115
+ const variable = currentScope.set.get(name);
116
+ if (variable) {
117
+ return variable;
118
+ }
119
+ currentScope = currentScope.upper;
120
+ }
121
+ return null;
122
+ }
123
+ function isContractType(typeNode) {
124
+ if (typeNode.type !== AST_NODE_TYPES.TSTypeReference) {
125
+ return false;
126
+ }
127
+ const typeName = typeNode.typeName;
128
+ return typeName.type === AST_NODE_TYPES.Identifier ? CONTRACT_TYPE_NAMES.has(typeName.name) : typeName.type === AST_NODE_TYPES.TSQualifiedName && CONTRACT_TYPE_NAMES.has(typeName.right.name);
129
+ }
130
+ function readKeyName(key) {
131
+ if (key.type === AST_NODE_TYPES.Identifier) {
132
+ return key.name;
133
+ }
134
+ return key.type === AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
135
+ }
136
+ function readMissingSchemaNames(node, context) {
137
+ const entryNode = resolveObjectLiteral(node, context);
138
+ if (!entryNode) {
139
+ return [];
140
+ }
141
+ const keyNames = /* @__PURE__ */ new Set();
142
+ for (const member of entryNode.properties) {
143
+ if (member.type !== AST_NODE_TYPES.Property) {
144
+ return [];
145
+ }
146
+ const keyName = member.computed ? null : readKeyName(member.key);
147
+ if (keyName !== null) {
148
+ keyNames.add(keyName);
149
+ }
150
+ }
151
+ return REQUIRED_SCHEMA_NAMES.filter((name) => !keyNames.has(name));
152
+ }
153
+ function resolveConstInit(node, context) {
154
+ const variable = findVariable(context.sourceCode.getScope(node), node.name);
155
+ const definition = variable?.defs.length === 1 ? variable.defs[0] : void 0;
156
+ if (definition?.type !== "Variable") {
157
+ return null;
158
+ }
159
+ const declaratorNode = toTSESTreeNode(definition.node);
160
+ const declarationNode = declaratorNode.parent;
161
+ return declarationNode.kind === "const" ? declaratorNode.init : null;
162
+ }
163
+ function resolveObjectLiteral(node, context) {
164
+ const visitedNodes = /* @__PURE__ */ new Set();
165
+ let currentNode = node;
166
+ while (!visitedNodes.has(currentNode)) {
167
+ visitedNodes.add(currentNode);
168
+ switch (currentNode.type) {
169
+ case AST_NODE_TYPES.Identifier: {
170
+ const initNode = resolveConstInit(currentNode, context);
171
+ if (!initNode) {
172
+ return null;
173
+ }
174
+ currentNode = initNode;
175
+ break;
176
+ }
177
+ case AST_NODE_TYPES.ObjectExpression: {
178
+ return currentNode;
179
+ }
180
+ case AST_NODE_TYPES.TSAsExpression:
181
+ case AST_NODE_TYPES.TSNonNullExpression:
182
+ case AST_NODE_TYPES.TSSatisfiesExpression: {
183
+ currentNode = currentNode.expression;
184
+ break;
185
+ }
186
+ default: {
187
+ return null;
188
+ }
189
+ }
190
+ }
191
+ return null;
192
+ }
193
+ export {
194
+ MESSAGE_ID,
195
+ requirePluginApiContractSchemas
196
+ };
197
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzXG4gKlxuICogUmVwb3J0cyBhIG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QgdGhhdCBsYWNrcyBhbiBgaW5wdXRgIG9yIGFuIGBvdXRwdXRgIHNjaGVtYS5cbiAqXG4gKiBBIHR5cGVkIGBQbHVnaW5BcGlDb250cmFjdDxNeUFwaT5gIGFscmVhZHkgcmVmdXNlcyBzdWNoIGFuIGVudHJ5IGF0IGNvbXBpbGUgdGltZS4gVGhlIHVudHlwZWQgZGVmYXVsdCwgdGhlXG4gKiBzdHJ1Y3R1cmFsbHkgdHlwZWQgY29udHJhY3RzIGEgcHJvdmlkZXIgc2hpcHMgYmVzaWRlIGl0cyBgYXBpLmQudHNgLCBhbmQgZXZlcnkgcmVwb3NpdG9yeSBzdGlsbCBvblxuICogYG9ic2lkaWFuLWRldi11dGlsc2AgZ2V0IG5vIHN1Y2ggY2hlY2ssIHNvIGEgYHt9YCBlbnRyeSB0aGVyZSBjb21waWxlcywgZGVjbGFyZXMgb25seSB0aGF0IHRoZSBtZXRob2QgZXhpc3RzLCBhbmRcbiAqIHZhbGlkYXRlcyBub3RoaW5nLiBUaGlzIHJ1bGUgY2xvc2VzIHRoYXQgZ2FwIGZvciBldmVyeSBjb250cmFjdCBpdCBjYW4gcmVjb2duaXplLlxuICpcbiAqIEFuIG9iamVjdCBsaXRlcmFsIGlzIHJlYWQgYXMgYSBjb250cmFjdCB3aGVuIGl0IGlzOlxuICpcbiAqIC0gdGhlIGluaXRpYWxpemVyIG9mIGEgdmFyaWFibGUgdHlwZWQgYFBsdWdpbkFwaUNvbnRyYWN0YCAob3IgYFR5cGVkUGx1Z2luQXBpQ29udHJhY3RgKTtcbiAqIC0gdGhlIG9wZXJhbmQgb2YgYHNhdGlzZmllcyBQbHVnaW5BcGlDb250cmFjdGAgb3IgYGFzIFBsdWdpbkFwaUNvbnRyYWN0YDtcbiAqIC0gdGhlIHZhbHVlIG9mIGEgYGNvbnRyYWN0YCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QgbGl0ZXJhbCwgYXMgcGFzc2VkIHRvIGBwdWJsaXNoUGx1Z2luQXBpYCwgYHdhdGNoUGx1Z2luQXBpYCBvclxuICogICBgZmluZFBsdWdpbkFwaWA7XG4gKiAtIHRoZSBpbml0aWFsaXplciBvZiBhIHZhcmlhYmxlIG5hbWVkIGAqX0FQSV9DT05UUkFDVGAsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBgX1Y8bj5gIHZlcnNpb24gc3VmZml4LlxuICpcbiAqIEVhY2ggb2YgaXRzIGVudHJpZXMgaXMgYSBtZXRob2QgZW50cnkuIEFuIGVudHJ5LCBvciBhIGNvbnRyYWN0LCB3cml0dGVuIGFzIHRoZSBuYW1lIG9mIGEgYGNvbnN0YCBpcyBmb2xsb3dlZCB0b1xuICogdGhhdCBjb25zdGFudCdzIG9iamVjdCBsaXRlcmFsLCBzbyBhIG1ldGhvZCBjb250cmFjdCBzaGFyZWQgYnkgc2V2ZXJhbCBlbnRyaWVzIGlzIGNoZWNrZWQgb25jZSBwZXIgZW50cnkuXG4gKlxuICogTm90IGF0dGVtcHRlZDogYW4gZW50cnkgYnVpbHQgYnkgYSBjYWxsLCByZWFkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yIGNhcnJ5aW5nIGEgc3ByZWFkIGNhbm5vdCBiZSByZWFkXG4gKiBzdGF0aWNhbGx5LCBzbyBpdCBpcyBza2lwcGVkLiBUaGUgcnVsZSB1bmRlci1yZXBvcnRzIHJhdGhlciB0aGFuIGd1ZXNzaW5nLlxuICovXG5pbXBvcnQgdHlwZSB7IFRTRVNUcmVlIH0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgUnVsZSxcbiAgU2NvcGVcbn0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5pbXBvcnQgeyBBU1RfTk9ERV9UWVBFUyB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCBmb3IgYSBtZXRob2QgZW50cnkgdGhhdCBsYWNrcyBhIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncmVxdWlyZVBsdWdpbkFwaUNvbnRyYWN0U2NoZW1hcyc7XG5cbi8qKlxuICogVGhlIHR5cGUgbmFtZXMgdGhhdCBtYXJrIGFuIG9iamVjdCBsaXRlcmFsIGFzIGEgcGx1Z2luIEFQSSBjb250cmFjdC5cbiAqL1xuY29uc3QgQ09OVFJBQ1RfVFlQRV9OQU1FUyA9IG5ldyBTZXQoWydQbHVnaW5BcGlDb250cmFjdCcsICdUeXBlZFBsdWdpbkFwaUNvbnRyYWN0J10pO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgdmFyaWFibGUgaG9sZGluZyBhIHBsdWdpbiBBUEkgY29udHJhY3QsIHN1Y2ggYXMgYE1ZX0FQSV9DT05UUkFDVGAgb3IgYE1ZX0FQSV9DT05UUkFDVF9WMmAuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1ZBUklBQkxFX05BTUVfUEFUVEVSTiA9IC9fQVBJX0NPTlRSQUNUKD86X1ZcXGQrKT8kLztcblxuLyoqXG4gKiBUaGUgcHJvcGVydHkgYSBjb250cmFjdCBpcyBwYXNzZWQgdW5kZXIuXG4gKi9cbmNvbnN0IENPTlRSQUNUX1BST1BFUlRZX05BTUUgPSAnY29udHJhY3QnO1xuXG4vKipcbiAqIFRoZSBzY2hlbWFzIGV2ZXJ5IG1ldGhvZCBlbnRyeSBtdXN0IGRlY2xhcmUuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX1NDSEVNQV9OQU1FUyA9IFsnaW5wdXQnLCAnb3V0cHV0J10gYXMgY29uc3Q7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIGJvdGggYW4gYGlucHV0YCBhbmQgYW4gYG91dHB1dGAgc2NoZW1hIG9uIGV2ZXJ5IG1ldGhvZCBlbnRyeSBvZiBhIHBsdWdpbiBBUEkgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBjb25zdCByZXF1aXJlUGx1Z2luQXBpQ29udHJhY3RTY2hlbWFzOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY2hlY2tlZENvbnRyYWN0cyA9IG5ldyBTZXQ8VFNFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbj4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnUHJvcGVydHknKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5Qcm9wZXJ0eTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BlcnR5Tm9kZS5wYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuT2JqZWN0RXhwcmVzc2lvbiAmJiAhcHJvcGVydHlOb2RlLmNvbXB1dGVkXG4gICAgICAgICAgJiYgcmVhZEtleU5hbWUocHJvcGVydHlOb2RlLmtleSkgPT09IENPTlRSQUNUX1BST1BFUlRZX05BTUVcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKHByb3BlcnR5Tm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVFNBc0V4cHJlc3Npb24sIFRTU2F0aXNmaWVzRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuVFNBc0V4cHJlc3Npb24gfCBUU0VTVHJlZS5UU1NhdGlzZmllc0V4cHJlc3Npb247XG4gICAgICAgIGlmIChpc0NvbnRyYWN0VHlwZShleHByZXNzaW9uTm9kZS50eXBlQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICByZXBvcnRDb250cmFjdEVudHJpZXMoZXhwcmVzc2lvbk5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnVmFyaWFibGVEZWNsYXJhdG9yJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRvck5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5WYXJpYWJsZURlY2xhcmF0b3I7XG4gICAgICAgIGlmIChkZWNsYXJhdG9yTm9kZS5pZC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyIHx8ICFkZWNsYXJhdG9yTm9kZS5pbml0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdG9yTm9kZS5pZC50eXBlQW5ub3RhdGlvbj8udHlwZUFubm90YXRpb247XG4gICAgICAgIGlmIChDT05UUkFDVF9WQVJJQUJMRV9OQU1FX1BBVFRFUk4udGVzdChkZWNsYXJhdG9yTm9kZS5pZC5uYW1lKSB8fCAodHlwZU5vZGUgIT09IHVuZGVmaW5lZCAmJiBpc0NvbnRyYWN0VHlwZSh0eXBlTm9kZSkpKSB7XG4gICAgICAgICAgcmVwb3J0Q29udHJhY3RFbnRyaWVzKGRlY2xhcmF0b3JOb2RlLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlcG9ydENvbnRyYWN0RW50cmllcyhub2RlOiBUU0VTVHJlZS5Ob2RlKTogdm9pZCB7XG4gICAgICBjb25zdCBjb250cmFjdE5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgICAgIGlmICghY29udHJhY3ROb2RlIHx8IGNoZWNrZWRDb250cmFjdHMuaGFzKGNvbnRyYWN0Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjaGVja2VkQ29udHJhY3RzLmFkZChjb250cmFjdE5vZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRyYWN0Tm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5Qcm9wZXJ0eSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1NjaGVtYU5hbWVzID0gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhlbnRyeS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChtaXNzaW5nU2NoZW1hTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbWV0aG9kOiAoZW50cnkuY29tcHV0ZWQgPyBudWxsIDogcmVhZEtleU5hbWUoZW50cnkua2V5KSkgPz8gJ1tjb21wdXRlZF0nLFxuICAgICAgICAgICAgbWlzc2luZzogbWlzc2luZ1NjaGVtYU5hbWVzLm1hcCgobmFtZSkgPT4gYFxcYCR7bmFtZX1cXGBgKS5qb2luKCcgYW5kICcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2M6IGVudHJ5LmtleS5sb2MsXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBhbiBgaW5wdXRgIGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb24gZXZlcnkgbWV0aG9kIGVudHJ5IG9mIGEgcGx1Z2luIEFQSSBjb250cmFjdCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdUaGUgcGx1Z2luIEFQSSBjb250cmFjdCBlbnRyeSBge3sgbWV0aG9kIH19YCBkZWNsYXJlcyBubyB7eyBtaXNzaW5nIH19IHNjaGVtYS4gR2l2ZSBldmVyeSBtZXRob2QgZW50cnkgYm90aCBhbiBgaW5wdXRgIHNjaGVtYSBvdmVyIGl0cyBhcmd1bWVudCBsaXN0IGFuZCBhbiBgb3V0cHV0YCBzY2hlbWEgb3ZlciBpdHMgYXdhaXRlZCByZXR1cm4gdmFsdWUuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIHZhcmlhYmxlIGJ5IG5hbWUsIHdhbGtpbmcgb3V0d2FyZHMgZnJvbSB0aGUgZ2l2ZW4gc2NvcGUuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB2YXJpYWJsZSdzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgdmFyaWFibGUsIG9yIGBudWxsYCB3aGVuIG5vdGhpbmcgaW4gc2NvcGUgZGVjbGFyZXMgdGhhdCBuYW1lLlxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFibGUoc2NvcGU6IFNjb3BlLlNjb3BlLCBuYW1lOiBzdHJpbmcpOiBudWxsIHwgU2NvcGUuVmFyaWFibGUge1xuICBsZXQgY3VycmVudFNjb3BlOiBudWxsIHwgU2NvcGUuU2NvcGUgPSBzY29wZTtcblxuICB3aGlsZSAoY3VycmVudFNjb3BlKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBjdXJyZW50U2NvcGUuc2V0LmdldChuYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICB9XG4gICAgY3VycmVudFNjb3BlID0gY3VycmVudFNjb3BlLnVwcGVyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIG5hbWVzIGEgcGx1Z2luIEFQSSBjb250cmFjdCwgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIG5hbWVzcGFjZS5cbiAqXG4gKiBAcGFyYW0gdHlwZU5vZGUgLSBUaGUgdHlwZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0eXBlIGlzIGEgY29udHJhY3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cmFjdFR5cGUodHlwZU5vZGU6IFRTRVNUcmVlLlR5cGVOb2RlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlTm9kZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVSZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLnR5cGVOYW1lO1xuICByZXR1cm4gdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciA/IENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLm5hbWUpIDogdHlwZU5hbWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNRdWFsaWZpZWROYW1lICYmIENPTlRSQUNUX1RZUEVfTkFNRVMuaGFzKHR5cGVOYW1lLnJpZ2h0Lm5hbWUpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkga2V5IHdyaXR0ZW4gYXMgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5LlxuICogQHJldHVybnMgVGhlIG5hbWUsIG9yIGBudWxsYCBmb3IgYW55IG90aGVyIGtleS5cbiAqL1xuZnVuY3Rpb24gcmVhZEtleU5hbWUoa2V5OiBUU0VTVHJlZS5Ob2RlKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuXG4gIHJldHVybiBrZXkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAnc3RyaW5nJyA/IGtleS52YWx1ZSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgd2hpY2ggcmVxdWlyZWQgc2NoZW1hcyBhIG1ldGhvZCBlbnRyeSBsYWNrcy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBlbnRyeSdzIHZhbHVlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LCB1c2VkIHRvIGZvbGxvdyBhIGNvbnN0YW50LlxuICogQHJldHVybnMgVGhlIG1pc3Npbmcgc2NoZW1hIG5hbWVzLCBlbXB0eSB3aGVuIG5vbmUgaXMgbWlzc2luZyBvciB0aGUgZW50cnkgY2Fubm90IGJlIHJlYWQgc3RhdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gcmVhZE1pc3NpbmdTY2hlbWFOYW1lcyhub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogc3RyaW5nW10ge1xuICBjb25zdCBlbnRyeU5vZGUgPSByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlLCBjb250ZXh0KTtcbiAgaWYgKCFlbnRyeU5vZGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBrZXlOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBlbnRyeU5vZGUucHJvcGVydGllcykge1xuICAgIGlmIChtZW1iZXIudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlOYW1lID0gbWVtYmVyLmNvbXB1dGVkID8gbnVsbCA6IHJlYWRLZXlOYW1lKG1lbWJlci5rZXkpO1xuICAgIGlmIChrZXlOYW1lICE9PSBudWxsKSB7XG4gICAgICBrZXlOYW1lcy5hZGQoa2V5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFJFUVVJUkVEX1NDSEVNQV9OQU1FUy5maWx0ZXIoKG5hbWUpID0+ICFrZXlOYW1lcy5oYXMobmFtZSkpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGlkZW50aWZpZXIgdG8gdGhlIGluaXRpYWxpemVyIG9mIHRoZSBgY29uc3RgIGl0IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBydWxlIGNvbnRleHQsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgaWRlbnRpZmllciB0aHJvdWdoIHNjb3BlLlxuICogQHJldHVybnMgVGhlIGluaXRpYWxpemVyLCBvciBgbnVsbGAgd2hlbiB0aGUgaWRlbnRpZmllciBuYW1lcyBhbnl0aGluZyBlbHNlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RJbml0KG5vZGU6IFRTRVNUcmVlLklkZW50aWZpZXIsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgVFNFU1RyZWUuRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgbm9kZS5uYW1lKTtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlPy5kZWZzLmxlbmd0aCA9PT0gMSA/IHZhcmlhYmxlLmRlZnNbMF0gOiB1bmRlZmluZWQ7XG4gIGlmIChkZWZpbml0aW9uPy50eXBlICE9PSAnVmFyaWFibGUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdG9yTm9kZSA9IHRvVFNFU1RyZWVOb2RlKGRlZmluaXRpb24ubm9kZSkgYXMgVFNFU1RyZWUuVmFyaWFibGVEZWNsYXJhdG9yO1xuICBjb25zdCBkZWNsYXJhdGlvbk5vZGUgPSBkZWNsYXJhdG9yTm9kZS5wYXJlbnQ7XG4gIHJldHVybiBkZWNsYXJhdGlvbk5vZGUua2luZCA9PT0gJ2NvbnN0JyA/IGRlY2xhcmF0b3JOb2RlLmluaXQgOiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGV4cHJlc3Npb24gdG8gdGhlIG9iamVjdCBsaXRlcmFsIGl0IGlzLCBzdGVwcGluZyB0aHJvdWdoIGBhc2AgLyBgc2F0aXNmaWVzYCAvIGAhYCBhbmQgZm9sbG93aW5nIGFcbiAqIGBjb25zdGAgaXQgbmFtZXMuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJ1bGUgY29udGV4dCwgdXNlZCB0byByZXNvbHZlIGFuIGlkZW50aWZpZXIgdGhyb3VnaCBzY29wZS5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3QgbGl0ZXJhbCwgb3IgYG51bGxgIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IG9uZSBzdGF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiByZXNvbHZlT2JqZWN0TGl0ZXJhbChub2RlOiBUU0VTVHJlZS5Ob2RlLCBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogbnVsbCB8IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb24ge1xuICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgU2V0PFRTRVNUcmVlLk5vZGU+KCk7XG4gIGxldCBjdXJyZW50Tm9kZTogVFNFU1RyZWUuTm9kZSA9IG5vZGU7XG5cbiAgd2hpbGUgKCF2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgIHZpc2l0ZWROb2Rlcy5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgc3dpdGNoIChjdXJyZW50Tm9kZS50eXBlKSB7XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXI6IHtcbiAgICAgICAgY29uc3QgaW5pdE5vZGUgPSByZXNvbHZlQ29uc3RJbml0KGN1cnJlbnROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFpbml0Tm9kZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnROb2RlID0gaW5pdE5vZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBBU1RfTk9ERV9UWVBFUy5PYmplY3RFeHByZXNzaW9uOiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgQVNUX05PREVfVFlQRVMuVFNBc0V4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTTm9uTnVsbEV4cHJlc3Npb246XG4gICAgICBjYXNlIEFTVF9OT0RFX1RZUEVTLlRTU2F0aXNmaWVzRXhwcmVzc2lvbjoge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmV4cHJlc3Npb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsc0JBQXNCO0FBS3hCLE1BQU0sYUFBYTtBQUsxQixNQUFNLHNCQUFzQixvQkFBSSxJQUFJLENBQUMscUJBQXFCLHdCQUF3QixDQUFDO0FBS25GLE1BQU0saUNBQWlDO0FBS3ZDLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0sd0JBQXdCLENBQUMsU0FBUyxRQUFRO0FBS3pDLE1BQU0sa0NBQW1EO0FBQUEsRUFDOUQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxtQkFBbUIsb0JBQUksSUFBK0I7QUFFNUQsV0FBTztBQUFBLE1BQ0wsV0FBVyxNQUF1QjtBQUNoQyxjQUFNLGVBQWUsZUFBZSxJQUFJO0FBQ3hDLFlBQ0UsYUFBYSxPQUFPLFNBQVMsZUFBZSxvQkFBb0IsQ0FBQyxhQUFhLFlBQzNFLFlBQVksYUFBYSxHQUFHLE1BQU0sd0JBQ3JDO0FBQ0EsZ0NBQXNCLGFBQWEsS0FBSztBQUFBLFFBQzFDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esd0NBQXdDLE1BQXVCO0FBQzdELGNBQU0saUJBQWlCLGVBQWUsSUFBSTtBQUMxQyxZQUFJLGVBQWUsZUFBZSxjQUFjLEdBQUc7QUFDakQsZ0NBQXNCLGVBQWUsVUFBVTtBQUFBLFFBQ2pEO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCLE1BQXVCO0FBQzFDLGNBQU0saUJBQWlCLGVBQWUsSUFBSTtBQUMxQyxZQUFJLGVBQWUs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
@@ -0,0 +1,15 @@
1
+ /// <reference path="../index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Lints an Obsidian plugin with ESLint: the generic runner from `@mnaoumov/typescript-dev-toolkit`, which copies
6
+ * this package's `eslint.config.mts` template into a project that has no configuration yet.
7
+ */
8
+ import type { LintOptions } from '@mnaoumov/typescript-dev-toolkit/linters/eslint';
9
+ /**
10
+ * Lints the project with ESLint.
11
+ *
12
+ * @param options - The {@link LintOptions}.
13
+ */
14
+ export declare function lint(options?: LintOptions): Promise<void>;
15
+ export { type LintOptions } from '@mnaoumov/typescript-dev-toolkit/linters/eslint';
@@ -0,0 +1,52 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { lint as lintGeneric } from "@mnaoumov/typescript-dev-toolkit/linters/eslint";
43
+ import { RepoPaths } from "@mnaoumov/typescript-dev-toolkit/repo-paths";
44
+ import { getTemplateFilePath } from "../templates.mjs";
45
+ import {} from "@mnaoumov/typescript-dev-toolkit/linters/eslint";
46
+ async function lint(options) {
47
+ await lintGeneric({ defaultConfigFilePath: getTemplateFilePath(RepoPaths.EslintConfigMts), ...options });
48
+ }
49
+ export {
50
+ lint
51
+ };
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludHMgYW4gT2JzaWRpYW4gcGx1Z2luIHdpdGggRVNMaW50OiB0aGUgZ2VuZXJpYyBydW5uZXIgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgLCB3aGljaCBjb3BpZXNcbiAqIHRoaXMgcGFja2FnZSdzIGBlc2xpbnQuY29uZmlnLm10c2AgdGVtcGxhdGUgaW50byBhIHByb2plY3QgdGhhdCBoYXMgbm8gY29uZmlndXJhdGlvbiB5ZXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaW50T3B0aW9ucyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50JztcblxuaW1wb3J0IHsgbGludCBhcyBsaW50R2VuZXJpYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50JztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L3JlcG8tcGF0aHMnO1xuXG5pbXBvcnQgeyBnZXRUZW1wbGF0ZUZpbGVQYXRoIH0gZnJvbSAnLi4vdGVtcGxhdGVzLnRzJztcblxuLyoqXG4gKiBMaW50cyB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbGludEdlbmVyaWMoeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGg6IGdldFRlbXBsYXRlRmlsZVBhdGgoUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyksIC4uLm9wdGlvbnMgfSk7XG59XG5leHBvcnQgeyB0eXBlIExpbnRPcHRpb25zIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludGVycy9lc2xpbnQnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLFFBQVEsbUJBQW1CO0FBQ3BDLFNBQVMsaUJBQWlCO0FBRTFCLFNBQVMsMkJBQTJCO0FBVXBDLGVBQWlDO0FBSGpDLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxZQUFZLEVBQUUsdUJBQXVCLG9CQUFvQixVQUFVLGVBQWUsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUN6RzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,9 @@
1
+ /// <reference path="../index.d.mts" />
2
+ export * as 'eslint-config' from './eslint-config.mjs';
3
+ export * as 'eslint-rules' from './eslint-rules/index.mjs';
4
+ export * as 'eslint' from './eslint.mjs';
5
+ export * as 'markdownlint-cli2-config' from './markdownlint-cli2-config.mjs';
6
+ export * as 'markdownlint-rules' from './markdownlint-rules/index.mjs';
7
+ export * as 'markdownlint' from './markdownlint.mjs';
8
+ export * as 'obsidianmd-rule-custom-message' from './obsidianmd-rule-custom-message.mjs';
9
+ export * as 'plugin-names' from './plugin-names.mjs';
@@ -0,0 +1,60 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import * as eslint_config from "./eslint-config.mjs";
43
+ import * as eslint_rules from "./eslint-rules/index.mjs";
44
+ import * as eslint from "./eslint.mjs";
45
+ import * as markdownlint_cli2_config from "./markdownlint-cli2-config.mjs";
46
+ import * as markdownlint_rules from "./markdownlint-rules/index.mjs";
47
+ import * as markdownlint from "./markdownlint.mjs";
48
+ import * as obsidianmd_rule_custom_message from "./obsidianmd-rule-custom-message.mjs";
49
+ import * as plugin_names from "./plugin-names.mjs";
50
+ export {
51
+ eslint,
52
+ eslint_config as "eslint-config",
53
+ eslint_rules as "eslint-rules",
54
+ markdownlint,
55
+ markdownlint_cli2_config as "markdownlint-cli2-config",
56
+ markdownlint_rules as "markdownlint-rules",
57
+ obsidianmd_rule_custom_message as "obsidianmd-rule-custom-message",
58
+ plugin_names as "plugin-names"
59
+ };
60
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnZXNsaW50LWNvbmZpZycgZnJvbSAnLi9lc2xpbnQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdlc2xpbnQtcnVsZXMnIGZyb20gJy4vZXNsaW50LXJ1bGVzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdlc2xpbnQnIGZyb20gJy4vZXNsaW50LnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQtY2xpMi1jb25maWcnIGZyb20gJy4vbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQtcnVsZXMnIGZyb20gJy4vbWFya2Rvd25saW50LXJ1bGVzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQnIGZyb20gJy4vbWFya2Rvd25saW50LnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbm1kLXJ1bGUtY3VzdG9tLW1lc3NhZ2UnIGZyb20gJy4vb2JzaWRpYW5tZC1ydWxlLWN1c3RvbS1tZXNzYWdlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tbmFtZXMnIGZyb20gJy4vcGx1Z2luLW5hbWVzLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsbUJBQXFCO0FBQ2pDLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLFlBQWM7QUFDMUIsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZLGtCQUFvQjtBQUNoQyxZQUFZQyxvQ0FBc0M7QUFDbEQsWUFBWUMsa0JBQW9COyIsCiAgIm5hbWVzIjogWyJlc2xpbnQtY29uZmlnIiwgImVzbGludC1ydWxlcyIsICJtYXJrZG93bmxpbnQtY2xpMi1jb25maWciLCAibWFya2Rvd25saW50LXJ1bGVzIiwgIm9ic2lkaWFubWQtcnVsZS1jdXN0b20tbWVzc2FnZSIsICJwbHVnaW4tbmFtZXMiXQp9Cg==
@@ -0,0 +1,12 @@
1
+ /// <reference path="../index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The markdownlint-cli2 configuration of an Obsidian plugin: the generic one from `@mnaoumov/typescript-dev-toolkit`,
6
+ * plus the Obsidian rules of this package.
7
+ */
8
+ import type { MarkdownlintCli2ConfigurationSchema as MarkdownlintCli2ConfigSchema } from '@mnaoumov/typescript-dev-toolkit/linters/markdownlint-types/@types/markdownlint-cli2-config-schema';
9
+ /**
10
+ * The markdownlint-cli2 configuration of an Obsidian plugin.
11
+ */
12
+ export declare const obsidianMarkdownlintCli2Config: MarkdownlintCli2ConfigSchema;
@@ -0,0 +1,66 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { obsidianDevUtilsConfig } from "@mnaoumov/typescript-dev-toolkit/linters/markdownlint-cli2-config";
43
+ import {
44
+ PLUGIN_NAME_AS_CODE_RULE_NAME,
45
+ pluginNameAsCodeRule
46
+ } from "./markdownlint-rules/plugin-name-as-code.mjs";
47
+ const obsidianMarkdownlintCli2Config = {
48
+ ...obsidianDevUtilsConfig,
49
+ config: {
50
+ ...obsidianDevUtilsConfig.config,
51
+ // Registered but OFF by default: markdownlint enables an unlisted custom rule, so landing it silent has to be
52
+ // said out loud. Repositories still carry plain plugin names from before the rule existed; each one fixes them
53
+ // (`npm run lint:md:fix` does it) and turns the rule on by overriding this one key in its own
54
+ // `scripts/markdownlint-cli2-config.ts`. The rule takes `{ additionalPluginNames: [...] }` for names the shared
55
+ // list lacks.
56
+ [PLUGIN_NAME_AS_CODE_RULE_NAME]: false
57
+ },
58
+ customRules: [
59
+ ...obsidianDevUtilsConfig.customRules ?? [],
60
+ pluginNameAsCodeRule
61
+ ]
62
+ };
63
+ export {
64
+ obsidianMarkdownlintCli2Config
65
+ };
66
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG1hcmtkb3dubGludC1jbGkyIGNvbmZpZ3VyYXRpb24gb2YgYW4gT2JzaWRpYW4gcGx1Z2luOiB0aGUgZ2VuZXJpYyBvbmUgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXRgLFxuICogcGx1cyB0aGUgT2JzaWRpYW4gcnVsZXMgb2YgdGhpcyBwYWNrYWdlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWFya2Rvd25saW50Q2xpMkNvbmZpZ3VyYXRpb25TY2hlbWEgYXMgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvbWFya2Rvd25saW50LXR5cGVzL0B0eXBlcy9tYXJrZG93bmxpbnQtY2xpMi1jb25maWctc2NoZW1hJztcblxuaW1wb3J0IHsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvbWFya2Rvd25saW50LWNsaTItY29uZmlnJztcblxuaW1wb3J0IHtcbiAgUExVR0lOX05BTUVfQVNfQ09ERV9SVUxFX05BTUUsXG4gIHBsdWdpbk5hbWVBc0NvZGVSdWxlXG59IGZyb20gJy4vbWFya2Rvd25saW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUudHMnO1xuXG4vKipcbiAqIFRoZSBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIG9mIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2lkaWFuTWFya2Rvd25saW50Q2xpMkNvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSA9IHtcbiAgLi4ub2JzaWRpYW5EZXZVdGlsc0NvbmZpZyxcbiAgY29uZmlnOiB7XG4gICAgLi4ub2JzaWRpYW5EZXZVdGlsc0NvbmZpZy5jb25maWcsXG4gICAgLy8gUmVnaXN0ZXJlZCBidXQgT0ZGIGJ5IGRlZmF1bHQ6IG1hcmtkb3dubGludCBlbmFibGVzIGFuIHVubGlzdGVkIGN1c3RvbSBydWxlLCBzbyBsYW5kaW5nIGl0IHNpbGVudCBoYXMgdG8gYmVcbiAgICAvLyBzYWlkIG91dCBsb3VkLiBSZXBvc2l0b3JpZXMgc3RpbGwgY2FycnkgcGxhaW4gcGx1Z2luIG5hbWVzIGZyb20gYmVmb3JlIHRoZSBydWxlIGV4aXN0ZWQ7IGVhY2ggb25lIGZpeGVzIHRoZW1cbiAgICAvLyAoYG5wbSBydW4gbGludDptZDpmaXhgIGRvZXMgaXQpIGFuZCB0dXJucyB0aGUgcnVsZSBvbiBieSBvdmVycmlkaW5nIHRoaXMgb25lIGtleSBpbiBpdHMgb3duXG4gICAgLy8gYHNjcmlwdHMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzYC4gVGhlIHJ1bGUgdGFrZXMgYHsgYWRkaXRpb25hbFBsdWdpbk5hbWVzOiBbLi4uXSB9YCBmb3IgbmFtZXMgdGhlIHNoYXJlZFxuICAgIC8vIGxpc3QgbGFja3MuXG4gICAgW1BMVUdJTl9OQU1FX0FTX0NPREVfUlVMRV9OQU1FXTogZmFsc2VcbiAgfSxcbiAgY3VzdG9tUnVsZXM6IFtcbiAgICAuLi5vYnNpZGlhbkRldlV0aWxzQ29uZmlnLmN1c3RvbVJ1bGVzID8/IFtdLFxuICAgIHBsdWdpbk5hbWVBc0NvZGVSdWxlXG4gIF1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsOEJBQThCO0FBRXZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS0EsTUFBTSxpQ0FBK0Q7QUFBQSxFQUMxRSxHQUFHO0FBQUEsRUFDSCxRQUFRO0FBQUEsSUFDTixHQUFHLHVCQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0xQixDQUFDLDZCQUE2QixHQUFHO0FBQUEsRUFDbkM7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNYLEdBQUcsdUJBQXVCLGVBQWUsQ0FBQztBQUFBLElBQzFDO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,2 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ export * as 'plugin-name-as-code' from './plugin-name-as-code.mjs';