@mnaoumov/obsidian-dev-toolkit 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +9 -1
  2. package/dist/demo-vault-helper/main.js +678 -18
  3. package/dist/integration-test-plugin/main.js +12075 -3087
  4. package/dist/integration-test-plugin/manifest.json +2 -2
  5. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +6 -38
  6. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +1 -1
  7. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +5 -37
  8. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.d.cts +1 -1
  9. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +5 -37
  10. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +1 -1
  11. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +7 -66
  12. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -1
  13. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -39
  14. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -1
  15. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +5 -37
  16. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  17. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +5 -37
  18. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -1
  19. package/dist/lib/cjs/bundlers/esbuild.cjs +1 -60
  20. package/dist/lib/cjs/bundlers/esbuild.d.cts +1 -1
  21. package/dist/lib/cjs/bundlers/index.cjs +3 -62
  22. package/dist/lib/cjs/bundlers/index.d.cts +1 -1
  23. package/dist/lib/cjs/demo-vault-app-json.cjs +5 -37
  24. package/dist/lib/cjs/demo-vault-app-json.d.cts +1 -1
  25. package/dist/lib/cjs/demo-vault-buttons.cjs +6 -38
  26. package/dist/lib/cjs/demo-vault-buttons.d.cts +8 -8
  27. package/dist/lib/cjs/demo-vault-coverage.cjs +7 -38
  28. package/dist/lib/cjs/demo-vault-coverage.d.cts +1 -1
  29. package/dist/lib/cjs/demo-vault.cjs +6 -38
  30. package/dist/lib/cjs/demo-vault.d.cts +1 -1
  31. package/dist/lib/cjs/formatters/dprint.cjs +5 -37
  32. package/dist/lib/cjs/formatters/dprint.d.cts +1 -1
  33. package/dist/lib/cjs/formatters/index.cjs +2 -61
  34. package/dist/lib/cjs/formatters/index.d.cts +1 -1
  35. package/dist/lib/cjs/index.cjs +12 -71
  36. package/dist/lib/cjs/integration-test-setup.cjs +1 -60
  37. package/dist/lib/cjs/integration-test-setup.d.cts +5 -5
  38. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +6 -38
  39. package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +7 -7
  40. package/dist/lib/cjs/jest-setup.cjs +5 -37
  41. package/dist/lib/cjs/jest-setup.d.cts +1 -1
  42. package/dist/lib/cjs/library-references.d.cts +2 -0
  43. package/dist/lib/cjs/linters/eslint-config.cjs +71 -49
  44. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -1
  45. package/dist/lib/cjs/linters/eslint-rules/index.cjs +26 -73
  46. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +6 -2
  47. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +1 -60
  48. package/dist/lib/cjs/linters/eslint-rules/manifest-description.d.cts +1 -1
  49. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +6 -38
  50. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.d.cts +1 -1
  51. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +1 -60
  52. package/dist/lib/cjs/linters/eslint-rules/manifest-id.d.cts +1 -1
  53. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +1 -60
  54. package/dist/lib/cjs/linters/eslint-rules/manifest-name.d.cts +1 -1
  55. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +1 -60
  56. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +1 -1
  57. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +240 -0
  58. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
  59. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +5 -37
  60. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +1 -1
  61. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +5 -37
  62. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +1 -1
  63. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.cjs +136 -0
  64. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-toolkit-plugin.d.cts +16 -0
  65. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +217 -0
  66. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
  67. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +169 -0
  68. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
  69. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +5 -37
  70. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +1 -1
  71. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +287 -0
  72. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
  73. package/dist/lib/cjs/linters/eslint.cjs +5 -37
  74. package/dist/lib/cjs/linters/eslint.d.cts +1 -1
  75. package/dist/lib/cjs/linters/index.cjs +17 -67
  76. package/dist/lib/cjs/linters/index.d.cts +4 -1
  77. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +152 -0
  78. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
  79. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +118 -0
  80. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  81. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +200 -0
  82. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
  83. package/dist/lib/cjs/linters/markdownlint.cjs +5 -37
  84. package/dist/lib/cjs/linters/markdownlint.d.cts +1 -1
  85. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +1 -60
  86. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +1 -1
  87. package/dist/lib/cjs/linters/plugin-names.cjs +203 -0
  88. package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
  89. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +1 -60
  90. package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +1 -1
  91. package/dist/lib/cjs/setup.cjs +5 -37
  92. package/dist/lib/cjs/setup.d.cts +1 -1
  93. package/dist/lib/cjs/templates.cjs +5 -37
  94. package/dist/lib/cjs/templates.d.cts +1 -1
  95. package/dist/lib/cjs/test-runners/index.cjs +4 -63
  96. package/dist/lib/cjs/test-runners/index.d.cts +1 -1
  97. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +12 -44
  98. package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +5 -5
  99. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +1 -60
  100. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +1 -1
  101. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +5 -37
  102. package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +1 -1
  103. package/dist/lib/cjs/test-runners/vitest-config.cjs +9 -41
  104. package/dist/lib/cjs/test-runners/vitest-config.d.cts +2 -3
  105. package/dist/lib/cjs/version.cjs +5 -37
  106. package/dist/lib/cjs/version.d.cts +1 -1
  107. package/dist/lib/cjs/vitest-setup.cjs +5 -37
  108. package/dist/lib/cjs/vitest-setup.d.cts +1 -1
  109. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +1 -1
  110. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +5 -22
  111. package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +1 -1
  112. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +5 -22
  113. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +1 -1
  114. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +5 -22
  115. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -1
  116. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -45
  117. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +1 -1
  118. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +5 -22
  119. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
  120. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +5 -22
  121. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +1 -1
  122. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +5 -22
  123. package/dist/lib/esm/bundlers/esbuild.d.mts +1 -1
  124. package/dist/lib/esm/bundlers/esbuild.mjs +1 -45
  125. package/dist/lib/esm/bundlers/index.d.mts +1 -1
  126. package/dist/lib/esm/bundlers/index.mjs +1 -45
  127. package/dist/lib/esm/demo-vault-app-json.d.mts +1 -1
  128. package/dist/lib/esm/demo-vault-app-json.mjs +5 -22
  129. package/dist/lib/esm/demo-vault-buttons.d.mts +8 -8
  130. package/dist/lib/esm/demo-vault-buttons.mjs +5 -22
  131. package/dist/lib/esm/demo-vault-coverage.d.mts +1 -1
  132. package/dist/lib/esm/demo-vault-coverage.mjs +7 -23
  133. package/dist/lib/esm/demo-vault.d.mts +1 -1
  134. package/dist/lib/esm/demo-vault.mjs +6 -23
  135. package/dist/lib/esm/formatters/dprint.d.mts +1 -1
  136. package/dist/lib/esm/formatters/dprint.mjs +5 -22
  137. package/dist/lib/esm/formatters/index.d.mts +1 -1
  138. package/dist/lib/esm/formatters/index.mjs +1 -45
  139. package/dist/lib/esm/index.mjs +1 -45
  140. package/dist/lib/esm/integration-test-setup.d.mts +5 -5
  141. package/dist/lib/esm/integration-test-setup.mjs +1 -45
  142. package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +7 -7
  143. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +7 -24
  144. package/dist/lib/esm/jest-setup.d.mts +1 -1
  145. package/dist/lib/esm/jest-setup.mjs +5 -22
  146. package/dist/lib/esm/library-references.d.mts +2 -0
  147. package/dist/lib/esm/linters/eslint-config.d.mts +1 -1
  148. package/dist/lib/esm/linters/eslint-config.mjs +70 -33
  149. package/dist/lib/esm/linters/eslint-rules/index.d.mts +6 -2
  150. package/dist/lib/esm/linters/eslint-rules/index.mjs +12 -48
  151. package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +1 -1
  152. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +1 -45
  153. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +1 -1
  154. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +5 -22
  155. package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +1 -1
  156. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +1 -45
  157. package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +1 -1
  158. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +1 -45
  159. package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +1 -1
  160. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +1 -45
  161. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
  162. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +141 -0
  163. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +1 -1
  164. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +5 -22
  165. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +1 -1
  166. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +5 -22
  167. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-toolkit-plugin.d.mts +16 -0
  168. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-toolkit-plugin.mjs +37 -0
  169. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
  170. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +121 -0
  171. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
  172. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +72 -0
  173. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +1 -1
  174. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +5 -22
  175. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
  176. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +188 -0
  177. package/dist/lib/esm/linters/eslint.d.mts +1 -1
  178. package/dist/lib/esm/linters/eslint.mjs +5 -22
  179. package/dist/lib/esm/linters/index.d.mts +4 -1
  180. package/dist/lib/esm/linters/index.mjs +8 -46
  181. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
  182. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +57 -0
  183. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  184. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +10 -0
  185. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
  186. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +94 -0
  187. package/dist/lib/esm/linters/markdownlint.d.mts +1 -1
  188. package/dist/lib/esm/linters/markdownlint.mjs +5 -22
  189. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +1 -1
  190. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +1 -45
  191. package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
  192. package/dist/lib/esm/linters/plugin-names.mjs +105 -0
  193. package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +1 -1
  194. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +1 -45
  195. package/dist/lib/esm/setup.d.mts +1 -1
  196. package/dist/lib/esm/setup.mjs +5 -22
  197. package/dist/lib/esm/templates.d.mts +1 -1
  198. package/dist/lib/esm/templates.mjs +5 -22
  199. package/dist/lib/esm/test-runners/index.d.mts +1 -1
  200. package/dist/lib/esm/test-runners/index.mjs +1 -45
  201. package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +5 -5
  202. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +11 -28
  203. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +1 -1
  204. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +1 -45
  205. package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +1 -1
  206. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +5 -22
  207. package/dist/lib/esm/test-runners/vitest-config.d.mts +2 -3
  208. package/dist/lib/esm/test-runners/vitest-config.mjs +8 -25
  209. package/dist/lib/esm/version.d.mts +1 -1
  210. package/dist/lib/esm/version.mjs +5 -22
  211. package/dist/lib/esm/vitest-setup.d.mts +1 -1
  212. package/dist/lib/esm/vitest-setup.mjs +5 -22
  213. package/dist/templates/scripts/markdownlint-cli2-config.ts +2 -2
  214. package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
  215. package/linters/eslint-rules/{obsidian-dev-utils-plugin → obsidian-dev-toolkit-plugin}/package.json +3 -3
  216. package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
  217. package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
  218. package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
  219. package/linters/markdownlint-cli2-config/package.json +6 -0
  220. package/linters/markdownlint-rules/index/package.json +6 -0
  221. package/linters/markdownlint-rules/package.json +6 -0
  222. package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
  223. package/linters/plugin-names/package.json +6 -0
  224. package/package.json +86 -25
  225. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +0 -186
  226. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +0 -13
  227. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +0 -13
  228. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +0 -73
@@ -0,0 +1,16 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint plugin carrying the Obsidian-specific in-house rules.
6
+ */
7
+ import type { ESLint } from 'eslint';
8
+ /**
9
+ * The namespace the Obsidian in-house rules are registered under: the name of the package that defines them. The
10
+ * generic rules live beside them under `typescript-dev-toolkit`, as a plugin of their own.
11
+ */
12
+ export declare const OBSIDIAN_DEV_TOOLKIT_ESLINT_PLUGIN_NAME = "obsidian-dev-toolkit";
13
+ /**
14
+ * ESLint plugin carrying the Obsidian in-house rules, registered under {@link OBSIDIAN_DEV_TOOLKIT_ESLINT_PLUGIN_NAME}.
15
+ */
16
+ export declare const obsidianDevToolkitPlugin: ESLint.Plugin;
@@ -0,0 +1,37 @@
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
+ import { manifestDescription } from "./manifest-description.mjs";
7
+ import { manifestId } from "./manifest-id.mjs";
8
+ import { manifestName } from "./manifest-name.mjs";
9
+ import { manifestSchema } from "./manifest-schema.mjs";
10
+ import { noLocalObsidianInternals } from "./no-local-obsidian-internals.mjs";
11
+ import { noOverCapWaitInEvalInObsidian } from "./no-over-cap-wait-in-eval-in-obsidian.mjs";
12
+ import { noUntrustedInputEvents } from "./no-untrusted-input-events.mjs";
13
+ import { pluginNameAsCodeInUi } from "./plugin-name-as-code-in-ui.mjs";
14
+ import { pluginNameAsCode } from "./plugin-name-as-code.mjs";
15
+ import { requireComponentSuffix } from "./require-component-suffix.mjs";
16
+ import { requirePluginApiContractSchemas } from "./require-plugin-api-contract-schemas.mjs";
17
+ const OBSIDIAN_DEV_TOOLKIT_ESLINT_PLUGIN_NAME = "obsidian-dev-toolkit";
18
+ const obsidianDevToolkitPlugin = {
19
+ rules: {
20
+ "manifest-description": manifestDescription,
21
+ "manifest-id": manifestId,
22
+ "manifest-name": manifestName,
23
+ "manifest-schema": manifestSchema,
24
+ "no-local-obsidian-internals": noLocalObsidianInternals,
25
+ "no-over-cap-wait-in-eval-in-obsidian": noOverCapWaitInEvalInObsidian,
26
+ "no-untrusted-input-events": noUntrustedInputEvents,
27
+ "plugin-name-as-code": pluginNameAsCode,
28
+ "plugin-name-as-code-in-ui": pluginNameAsCodeInUi,
29
+ "require-component-suffix": requireComponentSuffix,
30
+ "require-plugin-api-contract-schemas": requirePluginApiContractSchemas
31
+ }
32
+ };
33
+ export {
34
+ OBSIDIAN_DEV_TOOLKIT_ESLINT_PLUGIN_NAME,
35
+ obsidianDevToolkitPlugin
36
+ };
37
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL29ic2lkaWFuLWRldi10b29sa2l0LXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBwbHVnaW4gY2FycnlpbmcgdGhlIE9ic2lkaWFuLXNwZWNpZmljIGluLWhvdXNlIHJ1bGVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vTG9jYWxPYnNpZGlhbkludGVybmFscyB9IGZyb20gJy4vbm8tbG9jYWwtb2JzaWRpYW4taW50ZXJuYWxzLnRzJztcbmltcG9ydCB7IG5vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHsgbm9VbnRydXN0ZWRJbnB1dEV2ZW50cyB9IGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5pbXBvcnQgeyBwbHVnaW5OYW1lQXNDb2RlSW5VaSB9IGZyb20gJy4vcGx1Z2luLW5hbWUtYXMtY29kZS1pbi11aS50cyc7XG5pbXBvcnQgeyBwbHVnaW5OYW1lQXNDb2RlIH0gZnJvbSAnLi9wbHVnaW4tbmFtZS1hcy1jb2RlLnRzJztcbmltcG9ydCB7IHJlcXVpcmVDb21wb25lbnRTdWZmaXggfSBmcm9tICcuL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyc7XG5pbXBvcnQgeyByZXF1aXJlUGx1Z2luQXBpQ29udHJhY3RTY2hlbWFzIH0gZnJvbSAnLi9yZXF1aXJlLXBsdWdpbi1hcGktY29udHJhY3Qtc2NoZW1hcy50cyc7XG5cbi8qKlxuICogVGhlIG5hbWVzcGFjZSB0aGUgT2JzaWRpYW4gaW4taG91c2UgcnVsZXMgYXJlIHJlZ2lzdGVyZWQgdW5kZXI6IHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRoYXQgZGVmaW5lcyB0aGVtLiBUaGVcbiAqIGdlbmVyaWMgcnVsZXMgbGl2ZSBiZXNpZGUgdGhlbSB1bmRlciBgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdGAsIGFzIGEgcGx1Z2luIG9mIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGNvbnN0IE9CU0lESUFOX0RFVl9UT09MS0lUX0VTTElOVF9QTFVHSU5fTkFNRSA9ICdvYnNpZGlhbi1kZXYtdG9vbGtpdCc7XG5cbi8qKlxuICogRVNMaW50IHBsdWdpbiBjYXJyeWluZyB0aGUgT2JzaWRpYW4gaW4taG91c2UgcnVsZXMsIHJlZ2lzdGVyZWQgdW5kZXIge0BsaW5rIE9CU0lESUFOX0RFVl9UT09MS0lUX0VTTElOVF9QTFVHSU5fTkFNRX0uXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlRvb2xraXRQbHVnaW46IEVTTGludC5QbHVnaW4gPSB7XG4gIHJ1bGVzOiB7XG4gICAgJ21hbmlmZXN0LWRlc2NyaXB0aW9uJzogbWFuaWZlc3REZXNjcmlwdGlvbixcbiAgICAnbWFuaWZlc3QtaWQnOiBtYW5pZmVzdElkLFxuICAgICdtYW5pZmVzdC1uYW1lJzogbWFuaWZlc3ROYW1lLFxuICAgICdtYW5pZmVzdC1zY2hlbWEnOiBtYW5pZmVzdFNjaGVtYSxcbiAgICAnbm8tbG9jYWwtb2JzaWRpYW4taW50ZXJuYWxzJzogbm9Mb2NhbE9ic2lkaWFuSW50ZXJuYWxzLFxuICAgICduby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4nOiBub092ZXJDYXBXYWl0SW5FdmFsSW5PYnNpZGlhbixcbiAgICAnbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6IG5vVW50cnVzdGVkSW5wdXRFdmVudHMsXG4gICAgJ3BsdWdpbi1uYW1lLWFzLWNvZGUnOiBwbHVnaW5OYW1lQXNDb2RlLFxuICAgICdwbHVnaW4tbmFtZS1hcy1jb2RlLWluLXVpJzogcGx1Z2luTmFtZUFzQ29kZUluVWksXG4gICAgJ3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCc6IHJlcXVpcmVDb21wb25lbnRTdWZmaXgsXG4gICAgJ3JlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzJzogcmVxdWlyZVBsdWdpbkFwaUNvbnRyYWN0U2NoZW1hc1xuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFPQSxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGdDQUFnQztBQUN6QyxTQUFTLHFDQUFxQztBQUM5QyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLHVDQUF1QztBQU16QyxNQUFNLDBDQUEwQztBQUtoRCxNQUFNLDJCQUEwQztBQUFBLEVBQ3JELE9BQU87QUFBQSxJQUNMLHdCQUF3QjtBQUFBLElBQ3hCLGVBQWU7QUFBQSxJQUNmLGlCQUFpQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLCtCQUErQjtBQUFBLElBQy9CLHdDQUF3QztBQUFBLElBQ3hDLDZCQUE2QjtBQUFBLElBQzdCLHVCQUF1QjtBQUFBLElBQ3ZCLDZCQUE2QjtBQUFBLElBQzdCLDRCQUE0QjtBQUFBLElBQzVCLHVDQUF1QztBQUFBLEVBQ3pDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,30 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: plugin-name-as-code-in-ui
6
+ *
7
+ * Reports an Obsidian plugin's display name inside a string that is shown in UI as plain text. In UI the name is
8
+ * built as a `<code>` element instead: `appendCodeBlock()` into a `DocumentFragment`, or `createFragmentWithCodeBlocks()`
9
+ * with `asCodeBlock()`, from `@mnaoumov/obsidian-lib`'s `html-element.ts`, and the fragment is what is passed on.
10
+ *
11
+ * Detection is best effort, by call shape, without type information. A string literal or template literal (or a
12
+ * `+` concatenation or `? :` branch made of them) is read when it is:
13
+ *
14
+ * - the first argument of `new Notice(...)`;
15
+ * - the first argument of `setName`, `setDesc`, `setText`, `appendText` or `setTitle` called on anything;
16
+ * - the `text` property of an options object passed to `createEl`, `createDiv` or `createSpan`.
17
+ *
18
+ * There is no autofix: splitting a string around the name and building a fragment is a rewrite of the call, and
19
+ * often of a translation key, which needs judgement. A command name, a ribbon tooltip and a window title cannot hold
20
+ * markup, so the calls that set them (`addCommand`, `addRibbonIcon`, `document.title`) are not read at all.
21
+ */
22
+ import type { Rule } from 'eslint';
23
+ /**
24
+ * Message ID reported for a plugin name inside a UI string.
25
+ */
26
+ export declare const MESSAGE_ID = "pluginNameAsCodeInUi";
27
+ /**
28
+ * ESLint rule requiring a plugin name shown in UI to be built as a `<code>` element.
29
+ */
30
+ export declare const pluginNameAsCodeInUi: Rule.RuleModule;
@@ -0,0 +1,121 @@
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
+ import {
7
+ findPluginNameMatches,
8
+ getPluginNames
9
+ } from "../plugin-names.mjs";
10
+ import { PLUGIN_NAME_RULE_SCHEMA } from "./plugin-name-as-code.mjs";
11
+ const MESSAGE_ID = "pluginNameAsCodeInUi";
12
+ const UI_TEXT_METHOD_NAMES = /* @__PURE__ */ new Set(["appendText", "setDesc", "setName", "setText", "setTitle"]);
13
+ const ELEMENT_FACTORY_NAMES = /* @__PURE__ */ new Set(["createDiv", "createEl", "createSpan"]);
14
+ const pluginNameAsCodeInUi = {
15
+ create(context) {
16
+ const options = context.options[0];
17
+ const pluginNames = getPluginNames({ additionalPluginNames: options?.additionalPluginNames, cwd: context.cwd });
18
+ return {
19
+ CallExpression(node) {
20
+ const calleeName = getCalleeName(node);
21
+ if (calleeName === null) {
22
+ return;
23
+ }
24
+ if (UI_TEXT_METHOD_NAMES.has(calleeName) && node.callee.type === "MemberExpression") {
25
+ inspectArgument(node.arguments[0]);
26
+ return;
27
+ }
28
+ if (!ELEMENT_FACTORY_NAMES.has(calleeName)) {
29
+ return;
30
+ }
31
+ for (const argument of node.arguments) {
32
+ if (argument.type !== "ObjectExpression") {
33
+ continue;
34
+ }
35
+ for (const property of argument.properties) {
36
+ if (property.type === "Property" && !property.computed && getKeyName(property.key) === "text") {
37
+ inspectExpression(property.value);
38
+ }
39
+ }
40
+ }
41
+ },
42
+ NewExpression(node) {
43
+ if (node.callee.type === "Identifier" && node.callee.name === "Notice") {
44
+ inspectArgument(node.arguments[0]);
45
+ }
46
+ }
47
+ };
48
+ function inspectArgument(argument) {
49
+ if (argument && argument.type !== "SpreadElement") {
50
+ inspectExpression(argument);
51
+ }
52
+ }
53
+ function inspectExpression(node) {
54
+ switch (node.type) {
55
+ case "BinaryExpression": {
56
+ if (node.operator === "+") {
57
+ inspectExpression(node.left);
58
+ inspectExpression(node.right);
59
+ }
60
+ break;
61
+ }
62
+ case "ConditionalExpression": {
63
+ inspectExpression(node.consequent);
64
+ inspectExpression(node.alternate);
65
+ break;
66
+ }
67
+ case "Literal": {
68
+ if (typeof node.value === "string") {
69
+ reportText(node, node.value);
70
+ }
71
+ break;
72
+ }
73
+ case "TemplateLiteral": {
74
+ for (const templateElement of node.quasis) {
75
+ reportText(templateElement, templateElement.value.raw);
76
+ }
77
+ break;
78
+ }
79
+ default: {
80
+ break;
81
+ }
82
+ }
83
+ }
84
+ function reportText(node, text) {
85
+ for (const match of findPluginNameMatches(text, pluginNames)) {
86
+ context.report({
87
+ data: { name: match.name },
88
+ messageId: MESSAGE_ID,
89
+ node
90
+ });
91
+ }
92
+ }
93
+ },
94
+ meta: {
95
+ docs: {
96
+ description: "Require a plugin name shown in UI to be built as a `<code>` element"
97
+ },
98
+ messages: {
99
+ [MESSAGE_ID]: "The plugin name `{{ name }}` is shown in UI as plain text. Build it as a `<code>` element instead: `appendCodeBlock()` into a `DocumentFragment`, or `createFragmentWithCodeBlocks()` with `asCodeBlock()`, from `@mnaoumov/obsidian-lib`'s `html-element.ts`."
100
+ },
101
+ schema: PLUGIN_NAME_RULE_SCHEMA,
102
+ type: "suggestion"
103
+ }
104
+ };
105
+ function getCalleeName(node) {
106
+ if (node.callee.type === "Identifier") {
107
+ return node.callee.name;
108
+ }
109
+ return node.callee.type === "MemberExpression" && !node.callee.computed && node.callee.property.type === "Identifier" ? node.callee.property.name : null;
110
+ }
111
+ function getKeyName(key) {
112
+ if (key.type === "Identifier") {
113
+ return key.name;
114
+ }
115
+ return key.type === "Literal" && typeof key.value === "string" ? key.value : null;
116
+ }
117
+ export {
118
+ MESSAGE_ID,
119
+ pluginNameAsCodeInUi
120
+ };
121
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUtaW4tdWkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcGx1Z2luLW5hbWUtYXMtY29kZS1pbi11aVxuICpcbiAqIFJlcG9ydHMgYW4gT2JzaWRpYW4gcGx1Z2luJ3MgZGlzcGxheSBuYW1lIGluc2lkZSBhIHN0cmluZyB0aGF0IGlzIHNob3duIGluIFVJIGFzIHBsYWluIHRleHQuIEluIFVJIHRoZSBuYW1lIGlzXG4gKiBidWlsdCBhcyBhIGA8Y29kZT5gIGVsZW1lbnQgaW5zdGVhZDogYGFwcGVuZENvZGVCbG9jaygpYCBpbnRvIGEgYERvY3VtZW50RnJhZ21lbnRgLCBvciBgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2NrcygpYFxuICogd2l0aCBgYXNDb2RlQmxvY2soKWAsIGZyb20gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgJ3MgYGh0bWwtZWxlbWVudC50c2AsIGFuZCB0aGUgZnJhZ21lbnQgaXMgd2hhdCBpcyBwYXNzZWQgb24uXG4gKlxuICogRGV0ZWN0aW9uIGlzIGJlc3QgZWZmb3J0LCBieSBjYWxsIHNoYXBlLCB3aXRob3V0IHR5cGUgaW5mb3JtYXRpb24uIEEgc3RyaW5nIGxpdGVyYWwgb3IgdGVtcGxhdGUgbGl0ZXJhbCAob3IgYVxuICogYCtgIGNvbmNhdGVuYXRpb24gb3IgYD8gOmAgYnJhbmNoIG1hZGUgb2YgdGhlbSkgaXMgcmVhZCB3aGVuIGl0IGlzOlxuICpcbiAqIC0gdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGBuZXcgTm90aWNlKC4uLilgO1xuICogLSB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYHNldE5hbWVgLCBgc2V0RGVzY2AsIGBzZXRUZXh0YCwgYGFwcGVuZFRleHRgIG9yIGBzZXRUaXRsZWAgY2FsbGVkIG9uIGFueXRoaW5nO1xuICogLSB0aGUgYHRleHRgIHByb3BlcnR5IG9mIGFuIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byBgY3JlYXRlRWxgLCBgY3JlYXRlRGl2YCBvciBgY3JlYXRlU3BhbmAuXG4gKlxuICogVGhlcmUgaXMgbm8gYXV0b2ZpeDogc3BsaXR0aW5nIGEgc3RyaW5nIGFyb3VuZCB0aGUgbmFtZSBhbmQgYnVpbGRpbmcgYSBmcmFnbWVudCBpcyBhIHJld3JpdGUgb2YgdGhlIGNhbGwsIGFuZFxuICogb2Z0ZW4gb2YgYSB0cmFuc2xhdGlvbiBrZXksIHdoaWNoIG5lZWRzIGp1ZGdlbWVudC4gQSBjb21tYW5kIG5hbWUsIGEgcmliYm9uIHRvb2x0aXAgYW5kIGEgd2luZG93IHRpdGxlIGNhbm5vdCBob2xkXG4gKiBtYXJrdXAsIHNvIHRoZSBjYWxscyB0aGF0IHNldCB0aGVtIChgYWRkQ29tbWFuZGAsIGBhZGRSaWJib25JY29uYCwgYGRvY3VtZW50LnRpdGxlYCkgYXJlIG5vdCByZWFkIGF0IGFsbC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxsRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbixcbiAgTmV3RXhwcmVzc2lvbixcbiAgTm9kZSxcbiAgU3ByZWFkRWxlbWVudFxufSBmcm9tICdlc3RyZWUnO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5hbWVSdWxlT3B0aW9ucyB9IGZyb20gJy4uL3BsdWdpbi1uYW1lcy50cyc7XG5cbmltcG9ydCB7XG4gIGZpbmRQbHVnaW5OYW1lTWF0Y2hlcyxcbiAgZ2V0UGx1Z2luTmFtZXNcbn0gZnJvbSAnLi4vcGx1Z2luLW5hbWVzLnRzJztcbmltcG9ydCB7IFBMVUdJTl9OQU1FX1JVTEVfU0NIRU1BIH0gZnJvbSAnLi9wbHVnaW4tbmFtZS1hcy1jb2RlLnRzJztcblxuLyoqXG4gKiBNZXNzYWdlIElEIHJlcG9ydGVkIGZvciBhIHBsdWdpbiBuYW1lIGluc2lkZSBhIFVJIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncGx1Z2luTmFtZUFzQ29kZUluVWknO1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHdob3NlIGZpcnN0IGFyZ3VtZW50IGlzIHNob3duIGluIFVJIGFuZCBtYXkgYmUgYSBgRG9jdW1lbnRGcmFnbWVudGAuXG4gKi9cbmNvbnN0IFVJX1RFWFRfTUVUSE9EX05BTUVTID0gbmV3IFNldChbJ2FwcGVuZFRleHQnLCAnc2V0RGVzYycsICdzZXROYW1lJywgJ3NldFRleHQnLCAnc2V0VGl0bGUnXSk7XG5cbi8qKlxuICogVGhlIGVsZW1lbnQgZmFjdG9yaWVzIHdob3NlIG9wdGlvbnMgb2JqZWN0IGNhcnJpZXMgVUkgdGV4dCBpbiBgdGV4dGAuXG4gKi9cbmNvbnN0IEVMRU1FTlRfRkFDVE9SWV9OQU1FUyA9IG5ldyBTZXQoWydjcmVhdGVEaXYnLCAnY3JlYXRlRWwnLCAnY3JlYXRlU3BhbiddKTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgYSBwbHVnaW4gbmFtZSBzaG93biBpbiBVSSB0byBiZSBidWlsdCBhcyBhIGA8Y29kZT5gIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVnaW5OYW1lQXNDb2RlSW5VaTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gYXMgUGx1Z2luTmFtZVJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gZ2V0UGx1Z2luTmFtZXMoeyBhZGRpdGlvbmFsUGx1Z2luTmFtZXM6IG9wdGlvbnM/LmFkZGl0aW9uYWxQbHVnaW5OYW1lcywgY3dkOiBjb250ZXh0LmN3ZCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlOiBDYWxsRXhwcmVzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gZ2V0Q2FsbGVlTmFtZShub2RlKTtcbiAgICAgICAgaWYgKGNhbGxlZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVUlfVEVYVF9NRVRIT0RfTkFNRVMuaGFzKGNhbGxlZU5hbWUpICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIGluc3BlY3RBcmd1bWVudChub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFFTEVNRU5UX0ZBQ1RPUllfTkFNRVMuaGFzKGNhbGxlZU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50cykge1xuICAgICAgICAgIGlmIChhcmd1bWVudC50eXBlICE9PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGFyZ3VtZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09PSAnUHJvcGVydHknICYmICFwcm9wZXJ0eS5jb21wdXRlZCAmJiBnZXRLZXlOYW1lKHByb3BlcnR5LmtleSkgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICBpbnNwZWN0RXhwcmVzc2lvbihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgTmV3RXhwcmVzc2lvbihub2RlOiBOZXdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ05vdGljZScpIHtcbiAgICAgICAgICBpbnNwZWN0QXJndW1lbnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluc3BlY3RBcmd1bWVudChhcmd1bWVudDogRXhwcmVzc2lvbiB8IFNwcmVhZEVsZW1lbnQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgIGlmIChhcmd1bWVudCAmJiBhcmd1bWVudC50eXBlICE9PSAnU3ByZWFkRWxlbWVudCcpIHtcbiAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24oYXJndW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3BlY3RFeHByZXNzaW9uKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICcrJykge1xuICAgICAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24obm9kZS5sZWZ0KTtcbiAgICAgICAgICAgIGluc3BlY3RFeHByZXNzaW9uKG5vZGUucmlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50KTtcbiAgICAgICAgICBpbnNwZWN0RXhwcmVzc2lvbihub2RlLmFsdGVybmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTGl0ZXJhbCc6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXBvcnRUZXh0KG5vZGUsIG5vZGUudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdUZW1wbGF0ZUxpdGVyYWwnOiB7XG4gICAgICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgb2Ygbm9kZS5xdWFzaXMpIHtcbiAgICAgICAgICAgIHJlcG9ydFRleHQodGVtcGxhdGVFbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQudmFsdWUucmF3KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0VGV4dChub2RlOiBOb2RlLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZmluZFBsdWdpbk5hbWVNYXRjaGVzKHRleHQsIHBsdWdpbk5hbWVzKSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZGF0YTogeyBuYW1lOiBtYXRjaC5uYW1lIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGEgcGx1Z2luIG5hbWUgc2hvd24gaW4gVUkgdG8gYmUgYnVpbHQgYXMgYSBgPGNvZGU+YCBlbGVtZW50J1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ1RoZSBwbHVnaW4gbmFtZSBge3sgbmFtZSB9fWAgaXMgc2hvd24gaW4gVUkgYXMgcGxhaW4gdGV4dC4gQnVpbGQgaXQgYXMgYSBgPGNvZGU+YCBlbGVtZW50IGluc3RlYWQ6IGBhcHBlbmRDb2RlQmxvY2soKWAgaW50byBhIGBEb2N1bWVudEZyYWdtZW50YCwgb3IgYGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3MoKWAgd2l0aCBgYXNDb2RlQmxvY2soKWAsIGZyb20gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgXFwncyBgaHRtbC1lbGVtZW50LnRzYC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFBMVUdJTl9OQU1FX1JVTEVfU0NIRU1BLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIFJlYWRzIHRoZSBuYW1lIGEgY2FsbCBpcyBtYWRlIGJ5OiB0aGUgZnVuY3Rpb24ncyBuYW1lLCBvciB0aGUgbWV0aG9kJ3MgZm9yIGEgbWVtYmVyIGNhbGwuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lLCBvciBgbnVsbGAgZm9yIGEgY29tcHV0ZWQgb3Igb3RoZXJ3aXNlIHVubmFtZWQgY2FsbGVlLlxuICovXG5mdW5jdGlvbiBnZXRDYWxsZWVOYW1lKG5vZGU6IENhbGxFeHByZXNzaW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gbm9kZS5jYWxsZWUubmFtZTtcbiAgfVxuXG4gIHJldHVybiBub2RlLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgbmFtZSBvZiBhbiBvYmplY3QgcHJvcGVydHkga2V5IHdyaXR0ZW4gYXMgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5LlxuICogQHJldHVybnMgVGhlIG5hbWUsIG9yIGBudWxsYCBmb3IgYW55IG90aGVyIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5TmFtZShrZXk6IE5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4ga2V5Lm5hbWU7XG4gIH1cblxuICByZXR1cm4ga2V5LnR5cGUgPT09ICdMaXRlcmFsJyAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAnc3RyaW5nJyA/IGtleS52YWx1ZSA6IG51bGw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWdDQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsK0JBQStCO0FBS2pDLE1BQU0sYUFBYTtBQUsxQixNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsY0FBYyxXQUFXLFdBQVcsV0FBVyxVQUFVLENBQUM7QUFLaEcsTUFBTSx3QkFBd0Isb0JBQUksSUFBSSxDQUFDLGFBQWEsWUFBWSxZQUFZLENBQUM7QUFLdEUsTUFBTSx1QkFBd0M7QUFBQSxFQUNuRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFVBQVUsUUFBUSxRQUFRLENBQUM7QUFDakMsVUFBTSxjQUFjLGVBQWUsRUFBRSx1QkFBdUIsU0FBUyx1QkFBdUIsS0FBSyxRQUFRLElBQUksQ0FBQztBQUU5RyxXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQTRCO0FBQ3pDLGNBQU0sYUFBYSxjQUFjLElBQUk7QUFDckMsWUFBSSxlQUFlLE1BQU07QUFDdkI7QUFBQSxRQUNGO0FBRUEsWUFBSSxxQkFBcUIsSUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVMsb0JBQW9CO0FBQ25GLDBCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxzQkFBc0IsSUFBSSxVQUFVLEdBQUc7QUFDMUM7QUFBQSxRQUNGO0FBRUEsbUJBQVcsWUFBWSxLQUFLLFdBQVc7QUFDckMsY0FBSSxTQUFTLFNBQVMsb0JBQW9CO0FBQ3hDO0FBQUEsVUFDRjtBQUNBLHFCQUFXLFlBQVksU0FBUyxZQUFZO0FBQzFDLGdCQUFJLFNBQVMsU0FBUyxjQUFjLENBQUMsU0FBUyxZQUFZLFdBQVcsU0FBUyxHQUFHLE1BQU0sUUFBUTtBQUM3RixnQ0FBa0IsU0FBUyxLQUFLO0FBQUEsWUFDbEM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWMsTUFBMkI7QUFDdkMsWUFBSSxLQUFLLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsVUFBVTtBQUN0RSwwQkFBZ0IsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGdCQUFnQixVQUF3RDtBQUMvRSxVQUFJLFlBQVksU0FBUyxTQUFTLGlCQUFpQjtBQUNqRCwwQkFBa0IsUUFBUTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUVBLGFBQVMsa0JBQWtCLE1BQWtCO0FBQzNDLGNBQVEsS0FBSyxNQUFNO0FBQUEsUUFDakIsS0FBSyxvQkFBb0I7QUFDdkIsY0FBSSxLQUFLLGFBQWEsS0FBSztBQUN6Qiw4QkFBa0IsS0FBSyxJQUFJO0FBQzNCLDhCQUFrQixLQUFLLEtBQUs7QUFBQSxVQUM5QjtBQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSyx5QkFBeUI7QUFDNUIsNEJBQWtCLEtBQUssVUFBVTtBQUNqQyw0QkFBa0IsS0FBSyxTQUFTO0FBQ2hDO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSyxXQUFXO0FBQ2QsY0FBSSxPQUFPLEtBQUssVUFBVSxVQUFVO0FBQ2xDLHVCQUFXLE1BQU0sS0FBSyxLQUFLO0FBQUEsVUFDN0I7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssbUJBQW1CO0FBQ3RCLHFCQUFXLG1CQUFtQixLQUFLLFFBQVE7QUFDekMsdUJBQVcsaUJBQWlCLGdCQUFnQixNQUFNLEdBQUc7QUFBQSxVQUN2RDtBQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsU0FBUztBQUNQO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBUyxXQUFXLE1BQVksTUFBb0I7QUFDbEQsaUJBQVcsU0FBUyxzQkFBc0IsTUFBTSxXQUFXLEdBQUc7QUFDNUQsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsTUFBTSxFQUFFLE1BQU0sTUFBTSxLQUFLO0FBQUEsVUFDekIsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUjtBQUNGO0FBUUEsU0FBUyxjQUFjLE1BQXFDO0FBQzFELE1BQUksS0FBSyxPQUFPLFNBQVMsY0FBYztBQUNyQyxXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBRUEsU0FBTyxLQUFLLE9BQU8sU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLE9BQU8sWUFBWSxLQUFLLE9BQU8sU0FBUyxTQUFTLGVBQ3JHLEtBQUssT0FBTyxTQUFTLE9BQ3JCO0FBQ047QUFRQSxTQUFTLFdBQVcsS0FBMEI7QUFDNUMsTUFBSSxJQUFJLFNBQVMsY0FBYztBQUM3QixXQUFPLElBQUk7QUFBQSxFQUNiO0FBRUEsU0FBTyxJQUFJLFNBQVMsYUFBYSxPQUFPLElBQUksVUFBVSxXQUFXLElBQUksUUFBUTtBQUMvRTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,29 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: plugin-name-as-code
6
+ *
7
+ * Reports an Obsidian plugin's display name written as plain text in a code comment, and autofixes it by wrapping
8
+ * the name in backticks. TSDoc renders a name in backticks as code, so a doc comment reads the same as the README.
9
+ *
10
+ * Every comment is read: `//`, `/* *\/` and JSDoc / TSDoc. A name already inside a code span, an inline `@link` tag
11
+ * (whose target is an identifier) or a URL is left alone. The names come from `plugin-names.ts`: the shared list,
12
+ * the project's own `manifest.json` `name`, and the rule's `additionalPluginNames` option.
13
+ *
14
+ * Not attempted: a multi-word name broken across two comment lines, which a reader cannot tell from two unrelated
15
+ * words without understanding the prose.
16
+ */
17
+ import type { Rule } from 'eslint';
18
+ /**
19
+ * Message ID reported for a plugin name written as plain text in a comment.
20
+ */
21
+ export declare const MESSAGE_ID = "pluginNameAsCode";
22
+ /**
23
+ * The JSON schema of the options the plugin-name rules take.
24
+ */
25
+ export declare const PLUGIN_NAME_RULE_SCHEMA: Rule.RuleMetaData['schema'];
26
+ /**
27
+ * ESLint rule requiring a plugin name in a comment to be marked as code.
28
+ */
29
+ export declare const pluginNameAsCode: Rule.RuleModule;
@@ -0,0 +1,72 @@
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
+ import {
7
+ findPluginNameMatches,
8
+ getPluginNames
9
+ } from "../plugin-names.mjs";
10
+ const MESSAGE_ID = "pluginNameAsCode";
11
+ const EXCLUDED_COMMENT_PATTERNS = [
12
+ /(?<ticks>`+)[\s\S]*?\k<ticks>/g,
13
+ /\{@link\w*[^}]*\}/g,
14
+ /\b[a-z][\w+.-]*:\/\/\S+/gi
15
+ ];
16
+ const COMMENT_OPENING_LENGTH = 2;
17
+ const PLUGIN_NAME_RULE_SCHEMA = [
18
+ {
19
+ additionalProperties: false,
20
+ properties: {
21
+ additionalPluginNames: {
22
+ items: { type: "string" },
23
+ type: "array"
24
+ }
25
+ },
26
+ type: "object"
27
+ }
28
+ ];
29
+ const pluginNameAsCode = {
30
+ create(context) {
31
+ const options = context.options[0];
32
+ const pluginNames = getPluginNames({ additionalPluginNames: options?.additionalPluginNames, cwd: context.cwd });
33
+ const sourceCode = context.sourceCode;
34
+ return {
35
+ Program() {
36
+ for (const comment of sourceCode.getAllComments()) {
37
+ const [valueStart] = sourceCode.getRange(comment);
38
+ for (const match of findPluginNameMatches(comment.value, pluginNames, EXCLUDED_COMMENT_PATTERNS)) {
39
+ const start = valueStart + COMMENT_OPENING_LENGTH + match.index;
40
+ const end = start + match.name.length;
41
+ context.report({
42
+ data: { name: match.name },
43
+ fix: (fixer) => fixer.replaceTextRange([start, end], `\`${match.name}\``),
44
+ loc: {
45
+ end: sourceCode.getLocFromIndex(end),
46
+ start: sourceCode.getLocFromIndex(start)
47
+ },
48
+ messageId: MESSAGE_ID
49
+ });
50
+ }
51
+ }
52
+ }
53
+ };
54
+ },
55
+ meta: {
56
+ docs: {
57
+ description: "Require a plugin name in a comment to be marked as code with backticks"
58
+ },
59
+ fixable: "code",
60
+ messages: {
61
+ [MESSAGE_ID]: "Mark the plugin name `{{ name }}` as code: wrap it in backticks."
62
+ },
63
+ schema: PLUGIN_NAME_RULE_SCHEMA,
64
+ type: "suggestion"
65
+ }
66
+ };
67
+ export {
68
+ MESSAGE_ID,
69
+ PLUGIN_NAME_RULE_SCHEMA,
70
+ pluginNameAsCode
71
+ };
72
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcGx1Z2luLW5hbWUtYXMtY29kZVxuICpcbiAqIFJlcG9ydHMgYW4gT2JzaWRpYW4gcGx1Z2luJ3MgZGlzcGxheSBuYW1lIHdyaXR0ZW4gYXMgcGxhaW4gdGV4dCBpbiBhIGNvZGUgY29tbWVudCwgYW5kIGF1dG9maXhlcyBpdCBieSB3cmFwcGluZ1xuICogdGhlIG5hbWUgaW4gYmFja3RpY2tzLiBUU0RvYyByZW5kZXJzIGEgbmFtZSBpbiBiYWNrdGlja3MgYXMgY29kZSwgc28gYSBkb2MgY29tbWVudCByZWFkcyB0aGUgc2FtZSBhcyB0aGUgUkVBRE1FLlxuICpcbiAqIEV2ZXJ5IGNvbW1lbnQgaXMgcmVhZDogYC8vYCwgYC8qICpcXC9gIGFuZCBKU0RvYyAvIFRTRG9jLiBBIG5hbWUgYWxyZWFkeSBpbnNpZGUgYSBjb2RlIHNwYW4sIGFuIGlubGluZSBgQGxpbmtgIHRhZ1xuICogKHdob3NlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyKSBvciBhIFVSTCBpcyBsZWZ0IGFsb25lLiBUaGUgbmFtZXMgY29tZSBmcm9tIGBwbHVnaW4tbmFtZXMudHNgOiB0aGUgc2hhcmVkIGxpc3QsXG4gKiB0aGUgcHJvamVjdCdzIG93biBgbWFuaWZlc3QuanNvbmAgYG5hbWVgLCBhbmQgdGhlIHJ1bGUncyBgYWRkaXRpb25hbFBsdWdpbk5hbWVzYCBvcHRpb24uXG4gKlxuICogTm90IGF0dGVtcHRlZDogYSBtdWx0aS13b3JkIG5hbWUgYnJva2VuIGFjcm9zcyB0d28gY29tbWVudCBsaW5lcywgd2hpY2ggYSByZWFkZXIgY2Fubm90IHRlbGwgZnJvbSB0d28gdW5yZWxhdGVkXG4gKiB3b3JkcyB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIHByb3NlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTmFtZVJ1bGVPcHRpb25zIH0gZnJvbSAnLi4vcGx1Z2luLW5hbWVzLnRzJztcblxuaW1wb3J0IHtcbiAgZmluZFBsdWdpbk5hbWVNYXRjaGVzLFxuICBnZXRQbHVnaW5OYW1lc1xufSBmcm9tICcuLi9wbHVnaW4tbmFtZXMudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgZm9yIGEgcGx1Z2luIG5hbWUgd3JpdHRlbiBhcyBwbGFpbiB0ZXh0IGluIGEgY29tbWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncGx1Z2luTmFtZUFzQ29kZSc7XG5cbi8qKlxuICogVGhlIGNvbW1lbnQgc3BhbnMgd2hvc2UgcGx1Z2luIG5hbWVzIGFyZSBhbHJlYWR5IG1hcmtlZCBvciBhcmUgbm90IHByb3NlOiBhIGNvZGUgc3BhbiwgYW4gaW5saW5lIGBAbGlua2AgdGFnLCBhIFVSTC5cbiAqL1xuY29uc3QgRVhDTFVERURfQ09NTUVOVF9QQVRURVJOUzogcmVhZG9ubHkgUmVnRXhwW10gPSBbXG4gIC8oPzx0aWNrcz5gKylbXFxzXFxTXSo/XFxrPHRpY2tzPi9nLFxuICAvXFx7QGxpbmtcXHcqW159XSpcXH0vZyxcbiAgL1xcYlthLXpdW1xcdysuLV0qOlxcL1xcL1xcUysvZ2lcbl07XG5cbi8qKlxuICogVGhlIGxlbmd0aCBvZiB0aGUgb3BlbmluZyBkZWxpbWl0ZXIgb2YgYSBgLy9gIG9yIGAvKmAgY29tbWVudCwgd2hpY2ggYGNvbW1lbnQudmFsdWVgIGxlYXZlcyBvdXQuXG4gKi9cbmNvbnN0IENPTU1FTlRfT1BFTklOR19MRU5HVEggPSAyO1xuXG4vKipcbiAqIFRoZSBKU09OIHNjaGVtYSBvZiB0aGUgb3B0aW9ucyB0aGUgcGx1Z2luLW5hbWUgcnVsZXMgdGFrZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX1JVTEVfU0NIRU1BOiBSdWxlLlJ1bGVNZXRhRGF0YVsnc2NoZW1hJ10gPSBbXG4gIHtcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgYWRkaXRpb25hbFBsdWdpbk5hbWVzOiB7XG4gICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHR5cGU6ICdhcnJheSdcbiAgICAgIH1cbiAgICB9LFxuICAgIHR5cGU6ICdvYmplY3QnXG4gIH1cbl07XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVxdWlyaW5nIGEgcGx1Z2luIG5hbWUgaW4gYSBjb21tZW50IHRvIGJlIG1hcmtlZCBhcyBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgcGx1Z2luTmFtZUFzQ29kZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gYXMgUGx1Z2luTmFtZVJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gZ2V0UGx1Z2luTmFtZXMoeyBhZGRpdGlvbmFsUGx1Z2luTmFtZXM6IG9wdGlvbnM/LmFkZGl0aW9uYWxQbHVnaW5OYW1lcywgY3dkOiBjb250ZXh0LmN3ZCB9KTtcbiAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5zb3VyY2VDb2RlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFByb2dyYW0oKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBzb3VyY2VDb2RlLmdldEFsbENvbW1lbnRzKCkpIHtcbiAgICAgICAgICBjb25zdCBbdmFsdWVTdGFydF0gPSBzb3VyY2VDb2RlLmdldFJhbmdlKGNvbW1lbnQpO1xuICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZmluZFBsdWdpbk5hbWVNYXRjaGVzKGNvbW1lbnQudmFsdWUsIHBsdWdpbk5hbWVzLCBFWENMVURFRF9DT01NRU5UX1BBVFRFUk5TKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWx1ZVN0YXJ0ICsgQ09NTUVOVF9PUEVOSU5HX0xFTkdUSCArIG1hdGNoLmluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBtYXRjaC5uYW1lLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgZGF0YTogeyBuYW1lOiBtYXRjaC5uYW1lIH0sXG4gICAgICAgICAgICAgIGZpeDogKGZpeGVyKSA9PiBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFtzdGFydCwgZW5kXSwgYFxcYCR7bWF0Y2gubmFtZX1cXGBgKSxcbiAgICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgICAgZW5kOiBzb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChlbmQpLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBzb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChzdGFydClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGEgcGx1Z2luIG5hbWUgaW4gYSBjb21tZW50IHRvIGJlIG1hcmtlZCBhcyBjb2RlIHdpdGggYmFja3RpY2tzJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdNYXJrIHRoZSBwbHVnaW4gbmFtZSBge3sgbmFtZSB9fWAgYXMgY29kZTogd3JhcCBpdCBpbiBiYWNrdGlja3MuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBQTFVHSU5fTkFNRV9SVUxFX1NDSEVNQSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBb0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS0EsTUFBTSxhQUFhO0FBSzFCLE1BQU0sNEJBQStDO0FBQUEsRUFDbkQ7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBS0EsTUFBTSx5QkFBeUI7QUFLeEIsTUFBTSwwQkFBdUQ7QUFBQSxFQUNsRTtBQUFBLElBQ0Usc0JBQXNCO0FBQUEsSUFDdEIsWUFBWTtBQUFBLE1BQ1YsdUJBQXVCO0FBQUEsUUFDckIsT0FBTyxFQUFFLE1BQU0sU0FBUztBQUFBLFFBQ3hCLE1BQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUtPLE1BQU0sbUJBQW9DO0FBQUEsRUFDL0MsT0FBTyxTQUFTO0FBQ2QsVUFBTSxVQUFVLFFBQVEsUUFBUSxDQUFDO0FBQ2pDLFVBQU0sY0FBYyxlQUFlLEVBQUUsdUJBQXVCLFNBQVMsdUJBQXVCLEtBQUssUUFBUSxJQUFJLENBQUM7QUFDOUcsVUFBTSxhQUFhLFFBQVE7QUFFM0IsV0FBTztBQUFBLE1BQ0wsVUFBZ0I7QUFDZCxtQkFBVyxXQUFXLFdBQVcsZUFBZSxHQUFHO0FBQ2pELGdCQUFNLENBQUMsVUFBVSxJQUFJLFdBQVcsU0FBUyxPQUFPO0FBQ2hELHFCQUFXLFNBQVMsc0JBQXNCLFFBQVEsT0FBTyxhQUFhLHlCQUF5QixHQUFHO0FBQ2hHLGtCQUFNLFFBQVEsYUFBYSx5QkFBeUIsTUFBTTtBQUMxRCxrQkFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLO0FBQy9CLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU0sRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLGNBQ3pCLEtBQUssQ0FBQyxVQUFVLE1BQU0saUJBQWlCLENBQUMsT0FBTyxHQUFHLEdBQUcsS0FBSyxNQUFNLElBQUksSUFBSTtBQUFBLGNBQ3hFLEtBQUs7QUFBQSxnQkFDSCxLQUFLLFdBQVcsZ0JBQWdCLEdBQUc7QUFBQSxnQkFDbkMsT0FBTyxXQUFXLGdCQUFnQixLQUFLO0FBQUEsY0FDekM7QUFBQSxjQUNBLFdBQVc7QUFBQSxZQUNiLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxNQUNSLENBQUMsVUFBVSxHQUFHO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,4 +1,4 @@
1
- /// <reference path="../../index.d.mts" />
1
+ /// <reference path="../../library-references.d.mts" />
2
2
  import type { Rule } from 'eslint';
3
3
  /**
4
4
  Message ID reported when a class extends `Component` but its name does not end with `Component`.
@@ -2,49 +2,32 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
15
9
  cwd() {
16
- return '/';
10
+ return "/";
17
11
  },
18
12
  env: {},
19
- platform: 'android'
13
+ platform: "android"
20
14
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
15
  const existingProcess = globalThis.process;
24
-
25
16
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
17
  globalThis.process = browserProcess;
28
18
  return;
29
19
  }
30
-
31
20
  if (existingProcess.versions?.node) {
32
21
  return;
33
22
  }
34
-
35
23
  const existingProcessRecord = existingProcess;
36
-
37
24
  for (const [key, value] of Object.entries(browserProcess)) {
38
25
  existingProcessRecord[key] ??= value;
39
26
  }
40
-
41
- existingProcessRecord['browser'] = true;
27
+ existingProcessRecord["browser"] = true;
42
28
  }
43
29
 
44
- (function initEsm() {
45
- ensureDisposeSymbols();
46
- ensureBrowserProcess();
47
- })();
30
+ ensureBrowserProcess();
48
31
  })();
49
32
 
50
33
  import { toTSESTreeNode } from "@mnaoumov/typescript-dev-toolkit/linters/eslint-rules/ts-estree-node";
@@ -172,4 +155,4 @@ export {
172
155
  MESSAGE_ID_MISSING_SUFFIX,
173
156
  requireComponentSuffix
174
157
  };
175
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLWNvbXBvbmVudC1zdWZmaXhcbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYSBjbGFzcyB0aGF0IGV4dGVuZHMgYENvbXBvbmVudGAgKGZyb20gT2JzaWRpYW4sXG4gKiBkaXJlY3RseSBvciB0cmFuc2l0aXZlbHkpIGRvZXMgbm90IGhhdmUgYSBuYW1lIGVuZGluZyB3aXRoIGBDb21wb25lbnRgXG4gKiAob3IgYENvbXBvbmVudEJhc2VgIGZvciBhYnN0cmFjdCBiYXNlIGNsYXNzZXMpLlxuICpcbiAqIENsYXNzZXMgd2hvc2UgaW5oZXJpdGFuY2UgY2hhaW4gaW5jbHVkZXMgYW55IG9mIHRoZSBPYnNpZGlhbiBmcmFtZXdvcmtcbiAqIGNsYXNzZXMgdGhhdCBleHRlbmQgYENvbXBvbmVudGAgKGUuZy4gYFBsdWdpbmAsIGBWaWV3YCxcbiAqIGBNYXJrZG93blJlbmRlckNoaWxkYCwgYE1lbnVgLCBgSG92ZXJQb3BvdmVyYCwgYFF1ZXJ5Q29udHJvbGxlcmApXG4gKiBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGZvbGxvdyBPYnNpZGlhbidzIG93biBuYW1pbmcgY29udmVudGlvbnMuXG4gKlxuICogVGhlIHJ1bGUgdXNlcyB0aGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdG8gd2FsayB0aGUgZnVsbCBpbmhlcml0YW5jZVxuICogY2hhaW4sIHNvIGl0IHdvcmtzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW50ZXJtZWRpYXRlIGNsYXNzZXMgc2l0XG4gKiBiZXR3ZWVuIHRoZSB1c2VyJ3MgY2xhc3MgYW5kIGBDb21wb25lbnRgLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgY2xhc3MgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYID0gJ3JlcXVpcmVDb21wb25lbnRTdWZmaXgnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhYnN0cmFjdCBjbGFzcyBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50QmFzZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UgPSAnYWJzdHJhY3ROZWVkc0NvbXBvbmVudEJhc2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGNsYXNzIG5hbWUgZW5kcyB3aXRoIGBDb21wb25lbnRCYXNlYCBidXQgdGhlIGNsYXNzIGlzIG5vdCBhYnN0cmFjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQkFTRV9OT1RfQUJTVFJBQ1QgPSAnY29tcG9uZW50QmFzZU5vdEFic3RyYWN0JztcblxuLyoqXG5BbmNlc3RvciBjbGFzcyBuYW1lcyB0aGF0IG9wdCBhIHN1YnRyZWUgb3V0IG9mIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0FOQ0VTVE9SUyA9IG5ldyBTZXQoWydIb3ZlclBvcG92ZXInLCAnTWFya2Rvd25SZW5kZXJDaGlsZCcsICdNZW51JywgJ1BsdWdpbicsICdRdWVyeUNvbnRyb2xsZXInLCAnVmlldyddKTtcblxuLyoqXG5UaGUgYW5jZXN0b3IgY2xhc3MgbmFtZSB0aGF0IHRyaWdnZXJzIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX0FOQ0VTVE9SID0gJ0NvbXBvbmVudCc7XG5cbmludGVyZmFjZSBUeXBlV2l0aEJhc2VUeXBlcyB7XG4gIGdldEJhc2VUeXBlcz86ICgpID0+IFR5cGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgY2xhc3NlcyB0aGF0IGV4dGVuZCBgQ29tcG9uZW50YCB0byBiZSBuYW1lZCB3aXRoIGEgYENvbXBvbmVudGAgc3VmZml4LCBhbmQgYWJzdHJhY3Qgb25lcyB3aXRoIGEgYENvbXBvbmVudEJhc2VgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVDb21wb25lbnRTdWZmaXg6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb247XG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ2xhc3NEZWNsYXJhdGlvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgJ0NsYXNzRXhwcmVzc2lvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBjbGFzc2VzIGV4dGVuZGluZyBgQ29tcG9uZW50YCB0byBoYXZlIG5hbWVzIGVuZGluZyB3aXRoIGBDb21wb25lbnRgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0VdOiAnQWJzdHJhY3QgY2xhc3MgYHt7IGNsYXNzTmFtZSB9fWAgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudEJhc2VgLicsXG4gICAgICBbTUVTU0FHRV9JRF9CQVNFX05PVF9BQlNUUkFDVF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBlbmRzIHdpdGggYENvbXBvbmVudEJhc2VgIGJ1dCBpcyBub3QgYWJzdHJhY3QuIE9ubHkgYWJzdHJhY3QgY2xhc3NlcyBtYXkgdXNlIHRoZSBgQ29tcG9uZW50QmFzZWAgc3VmZml4LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBvcnRDbGFzc30uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRDbGFzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gICAqL1xuICByZWFkb25seSBjaGVja2VyOiBSZXR1cm5UeXBlPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvblsncHJvZ3JhbSddWydnZXRUeXBlQ2hlY2tlciddPjtcblxuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgQVNUIG5vZGUuXG4gICAqL1xuICByZWFkb25seSBub2RlOiBSdWxlLk5vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc2VydmljZXMgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2Fsa0FuY2VzdG9yc30uXG4gKi9cbmludGVyZmFjZSBXYWxrQW5jZXN0b3JzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgdG8gYWRkIGRpc2NvdmVyZWQgYW5jZXN0b3IgbmFtZXMgdG8uXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0ZWROYW1lczogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHR5cGUgdG8gaW5zcGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUeXBlcyBhbHJlYWR5IHZpc2l0ZWQsIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAqL1xuICByZWFkb25seSB2aXNpdGVkVHlwZXM6IFNldDxUeXBlPjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgbmFtZXMgb2YgYWxsIGFuY2VzdG9yIHR5cGVzIGluIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBUeXBlU2NyaXB0IHR5cGUgdG8gc3RhcnQgZnJvbS5cbiAqIEByZXR1cm5zIEEgc2V0IG9mIGFuY2VzdG9yIGNsYXNzIG5hbWVzLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JOYW1lcyh0eXBlOiBUeXBlKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxUeXBlPigpO1xuXG4gIHdhbGtBbmNlc3RvcnMoe1xuICAgIGNvbGxlY3RlZE5hbWVzOiBuYW1lcyxcbiAgICBjdXJyZW50VHlwZTogdHlwZSxcbiAgICB2aXNpdGVkVHlwZXM6IHZpc2l0ZWRcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVzO1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB3YWxrcyB0aGUgYmFzZSB0eXBlcyBvZiBhIHR5cGUsIGNvbGxlY3RpbmcgdGhlaXIgbmFtZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqL1xuICBmdW5jdGlvbiB3YWxrQW5jZXN0b3JzKHBhcmFtczogV2Fsa0FuY2VzdG9yc1BhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29sbGVjdGVkTmFtZXMsIGN1cnJlbnRUeXBlLCB2aXNpdGVkVHlwZXMgfSA9IHBhcmFtcztcbiAgICBpZiAodmlzaXRlZFR5cGVzLmhhcyhjdXJyZW50VHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aXNpdGVkVHlwZXMuYWRkKGN1cnJlbnRUeXBlKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlcyA9IChjdXJyZW50VHlwZSBhcyBUeXBlV2l0aEJhc2VUeXBlcykuZ2V0QmFzZVR5cGVzPy4oKTtcblxuICAgIGlmICghYmFzZVR5cGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBiYXNlVHlwZSBvZiBiYXNlVHlwZXMpIHtcbiAgICAgIGNvbnN0ICRzeW1ib2wgPSBiYXNlVHlwZS5nZXRTeW1ib2woKTtcblxuICAgICAgaWYgKCRzeW1ib2wpIHtcbiAgICAgICAgY29sbGVjdGVkTmFtZXMuYWRkKCRzeW1ib2wuZ2V0TmFtZSgpKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa0FuY2VzdG9ycyh7XG4gICAgICAgIGNvbGxlY3RlZE5hbWVzLFxuICAgICAgICBjdXJyZW50VHlwZTogYmFzZVR5cGUsXG4gICAgICAgIHZpc2l0ZWRUeXBlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgc2luZ2xlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENsYXNzKHBhcmFtczogUmVwb3J0Q2xhc3NQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja2VyLCBjb250ZXh0LCBub2RlLCBzZXJ2aWNlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBjbGFzc05vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DbGFzc0RlY2xhcmF0aW9uIHwgVFNFU1RyZWUuQ2xhc3NFeHByZXNzaW9uO1xuICBjb25zdCBjbGFzc0lkID0gY2xhc3NOb2RlLmlkO1xuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFU0xpbnQgc2VsZWN0b3IgYFtpZF1gIGd1YXJhbnRlZXMgY2xhc3NJZCBpcyBwcmVzZW50LiAqL1xuICBpZiAoIWNsYXNzSWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc0lkLm5hbWU7XG4gIGNvbnN0IHsgYWJzdHJhY3Q6IGlzQWJzdHJhY3QgfSA9IGNsYXNzTm9kZTtcbiAgY29uc3QgaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCA9IGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29tcG9uZW50QmFzZScpO1xuICBjb25zdCBoYXNDb21wb25lbnRTdWZmaXggPSAhaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCAmJiBjbGFzc05hbWUuZW5kc1dpdGgoJ0NvbXBvbmVudCcpO1xuXG4gIC8vIENvcnJlY3Q6IG5vbi1hYnN0cmFjdCBlbmRpbmcgd2l0aCBDb21wb25lbnQsIG9yIGFic3RyYWN0IGVuZGluZyB3aXRoIENvbXBvbmVudEJhc2VcbiAgaWYgKChoYXNDb21wb25lbnRTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHx8IChoYXNDb21wb25lbnRCYXNlU3VmZml4ICYmIGlzQWJzdHJhY3QpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHNOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjbGFzc05vZGUpO1xuICBjb25zdCBjbGFzc1R5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzTm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGNvbGxlY3RBbmNlc3Rvck5hbWVzKGNsYXNzVHlwZSk7XG5cbiAgaWYgKCFhbmNlc3RvcnMuaGFzKFJFUVVJUkVEX0FOQ0VTVE9SKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZXhjbHVkZWQgb2YgRVhDTFVERURfQU5DRVNUT1JTKSB7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXMoZXhjbHVkZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhc0NvbXBvbmVudEJhc2VTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0JBU0VfTk9UX0FCU1RSQUNULFxuICAgICAgbm9kZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UsXG4gICAgICBub2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBjbGFzc05hbWUgfSxcbiAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWCxcbiAgICAgIG5vZGVcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTLHNCQUFzQjtBQUt4QixNQUFNLDRCQUE0QjtBQUtsQyxNQUFNLGlDQUFpQztBQUt2QyxNQUFNLCtCQUErQjtBQUs1QyxNQUFNLHFCQUFxQixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLHVCQUF1QixRQUFRLFVBQVUsbUJBQW1CLE1BQU0sQ0FBQztBQUt2SCxNQUFNLG9CQUFvQjtBQVNuQixNQUFNLHlCQUEwQztBQUFBLEVBQ3JELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFDcEMsVUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBRWhELFdBQU87QUFBQSxNQUNMLHVCQUF1QixNQUF1QjtBQUM1QyxvQkFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFDQSxzQkFBc0IsTUFBdUI7QUFDM0Msb0JBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw4QkFBOEIsR0FBRztBQUFBLE1B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
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLWNvbXBvbmVudC1zdWZmaXhcbiAqXG4gKiBSZXBvcnRzIGFuIGVycm9yIHdoZW4gYSBjbGFzcyB0aGF0IGV4dGVuZHMgYENvbXBvbmVudGAgKGZyb20gT2JzaWRpYW4sXG4gKiBkaXJlY3RseSBvciB0cmFuc2l0aXZlbHkpIGRvZXMgbm90IGhhdmUgYSBuYW1lIGVuZGluZyB3aXRoIGBDb21wb25lbnRgXG4gKiAob3IgYENvbXBvbmVudEJhc2VgIGZvciBhYnN0cmFjdCBiYXNlIGNsYXNzZXMpLlxuICpcbiAqIENsYXNzZXMgd2hvc2UgaW5oZXJpdGFuY2UgY2hhaW4gaW5jbHVkZXMgYW55IG9mIHRoZSBPYnNpZGlhbiBmcmFtZXdvcmtcbiAqIGNsYXNzZXMgdGhhdCBleHRlbmQgYENvbXBvbmVudGAgKGUuZy4gYFBsdWdpbmAsIGBWaWV3YCxcbiAqIGBNYXJrZG93blJlbmRlckNoaWxkYCwgYE1lbnVgLCBgSG92ZXJQb3BvdmVyYCwgYFF1ZXJ5Q29udHJvbGxlcmApXG4gKiBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGZvbGxvdyBPYnNpZGlhbidzIG93biBuYW1pbmcgY29udmVudGlvbnMuXG4gKlxuICogVGhlIHJ1bGUgdXNlcyB0aGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdG8gd2FsayB0aGUgZnVsbCBpbmhlcml0YW5jZVxuICogY2hhaW4sIHNvIGl0IHdvcmtzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW50ZXJtZWRpYXRlIGNsYXNzZXMgc2l0XG4gKiBiZXR3ZWVuIHRoZSB1c2VyJ3MgY2xhc3MgYW5kIGBDb21wb25lbnRgLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9saW50ZXJzL2VzbGludC1ydWxlcy90cy1lc3RyZWUtbm9kZSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgY2xhc3MgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYID0gJ3JlcXVpcmVDb21wb25lbnRTdWZmaXgnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBhYnN0cmFjdCBjbGFzcyBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50QmFzZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UgPSAnYWJzdHJhY3ROZWVkc0NvbXBvbmVudEJhc2UnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGNsYXNzIG5hbWUgZW5kcyB3aXRoIGBDb21wb25lbnRCYXNlYCBidXQgdGhlIGNsYXNzIGlzIG5vdCBhYnN0cmFjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQkFTRV9OT1RfQUJTVFJBQ1QgPSAnY29tcG9uZW50QmFzZU5vdEFic3RyYWN0JztcblxuLyoqXG5BbmNlc3RvciBjbGFzcyBuYW1lcyB0aGF0IG9wdCBhIHN1YnRyZWUgb3V0IG9mIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0FOQ0VTVE9SUyA9IG5ldyBTZXQoWydIb3ZlclBvcG92ZXInLCAnTWFya2Rvd25SZW5kZXJDaGlsZCcsICdNZW51JywgJ1BsdWdpbicsICdRdWVyeUNvbnRyb2xsZXInLCAnVmlldyddKTtcblxuLyoqXG5UaGUgYW5jZXN0b3IgY2xhc3MgbmFtZSB0aGF0IHRyaWdnZXJzIHRoZSBzdWZmaXggcmVxdWlyZW1lbnQuXG4gKi9cbmNvbnN0IFJFUVVJUkVEX0FOQ0VTVE9SID0gJ0NvbXBvbmVudCc7XG5cbmludGVyZmFjZSBUeXBlV2l0aEJhc2VUeXBlcyB7XG4gIGdldEJhc2VUeXBlcz86ICgpID0+IFR5cGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgY2xhc3NlcyB0aGF0IGV4dGVuZCBgQ29tcG9uZW50YCB0byBiZSBuYW1lZCB3aXRoIGEgYENvbXBvbmVudGAgc3VmZml4LCBhbmQgYWJzdHJhY3Qgb25lcyB3aXRoIGEgYENvbXBvbmVudEJhc2VgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVDb21wb25lbnRTdWZmaXg6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IGNvbnRleHQuc291cmNlQ29kZS5wYXJzZXJTZXJ2aWNlcyBhcyBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb247XG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ2xhc3NEZWNsYXJhdGlvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgJ0NsYXNzRXhwcmVzc2lvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnRDbGFzcyh7XG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc2VydmljZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZSBjbGFzc2VzIGV4dGVuZGluZyBgQ29tcG9uZW50YCB0byBoYXZlIG5hbWVzIGVuZGluZyB3aXRoIGBDb21wb25lbnRgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0VdOiAnQWJzdHJhY3QgY2xhc3MgYHt7IGNsYXNzTmFtZSB9fWAgZXh0ZW5kcyBgQ29tcG9uZW50YCBidXQgaXRzIG5hbWUgZG9lcyBub3QgZW5kIHdpdGggYENvbXBvbmVudEJhc2VgLicsXG4gICAgICBbTUVTU0FHRV9JRF9CQVNFX05PVF9BQlNUUkFDVF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBlbmRzIHdpdGggYENvbXBvbmVudEJhc2VgIGJ1dCBpcyBub3QgYWJzdHJhY3QuIE9ubHkgYWJzdHJhY3QgY2xhc3NlcyBtYXkgdXNlIHRoZSBgQ29tcG9uZW50QmFzZWAgc3VmZml4LicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWF06ICdDbGFzcyBge3sgY2xhc3NOYW1lIH19YCBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50YC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBvcnRDbGFzc30uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRDbGFzc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gICAqL1xuICByZWFkb25seSBjaGVja2VyOiBSZXR1cm5UeXBlPFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvblsncHJvZ3JhbSddWydnZXRUeXBlQ2hlY2tlciddPjtcblxuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgQVNUIG5vZGUuXG4gICAqL1xuICByZWFkb25seSBub2RlOiBSdWxlLk5vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc2VydmljZXMgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2Fsa0FuY2VzdG9yc30uXG4gKi9cbmludGVyZmFjZSBXYWxrQW5jZXN0b3JzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgdG8gYWRkIGRpc2NvdmVyZWQgYW5jZXN0b3IgbmFtZXMgdG8uXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0ZWROYW1lczogU2V0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHR5cGUgdG8gaW5zcGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUeXBlcyBhbHJlYWR5IHZpc2l0ZWQsIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAqL1xuICByZWFkb25seSB2aXNpdGVkVHlwZXM6IFNldDxUeXBlPjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgbmFtZXMgb2YgYWxsIGFuY2VzdG9yIHR5cGVzIGluIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBUeXBlU2NyaXB0IHR5cGUgdG8gc3RhcnQgZnJvbS5cbiAqIEByZXR1cm5zIEEgc2V0IG9mIGFuY2VzdG9yIGNsYXNzIG5hbWVzLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JOYW1lcyh0eXBlOiBUeXBlKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxUeXBlPigpO1xuXG4gIHdhbGtBbmNlc3RvcnMoe1xuICAgIGNvbGxlY3RlZE5hbWVzOiBuYW1lcyxcbiAgICBjdXJyZW50VHlwZTogdHlwZSxcbiAgICB2aXNpdGVkVHlwZXM6IHZpc2l0ZWRcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVzO1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB3YWxrcyB0aGUgYmFzZSB0eXBlcyBvZiBhIHR5cGUsIGNvbGxlY3RpbmcgdGhlaXIgbmFtZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHdhbGsuXG4gICAqL1xuICBmdW5jdGlvbiB3YWxrQW5jZXN0b3JzKHBhcmFtczogV2Fsa0FuY2VzdG9yc1BhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29sbGVjdGVkTmFtZXMsIGN1cnJlbnRUeXBlLCB2aXNpdGVkVHlwZXMgfSA9IHBhcmFtcztcbiAgICBpZiAodmlzaXRlZFR5cGVzLmhhcyhjdXJyZW50VHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aXNpdGVkVHlwZXMuYWRkKGN1cnJlbnRUeXBlKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlcyA9IChjdXJyZW50VHlwZSBhcyBUeXBlV2l0aEJhc2VUeXBlcykuZ2V0QmFzZVR5cGVzPy4oKTtcblxuICAgIGlmICghYmFzZVR5cGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBiYXNlVHlwZSBvZiBiYXNlVHlwZXMpIHtcbiAgICAgIGNvbnN0ICRzeW1ib2wgPSBiYXNlVHlwZS5nZXRTeW1ib2woKTtcblxuICAgICAgaWYgKCRzeW1ib2wpIHtcbiAgICAgICAgY29sbGVjdGVkTmFtZXMuYWRkKCRzeW1ib2wuZ2V0TmFtZSgpKTtcbiAgICAgIH1cblxuICAgICAgd2Fsa0FuY2VzdG9ycyh7XG4gICAgICAgIGNvbGxlY3RlZE5hbWVzLFxuICAgICAgICBjdXJyZW50VHlwZTogYmFzZVR5cGUsXG4gICAgICAgIHZpc2l0ZWRUeXBlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgc2luZ2xlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENsYXNzKHBhcmFtczogUmVwb3J0Q2xhc3NQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja2VyLCBjb250ZXh0LCBub2RlLCBzZXJ2aWNlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBjbGFzc05vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DbGFzc0RlY2xhcmF0aW9uIHwgVFNFU1RyZWUuQ2xhc3NFeHByZXNzaW9uO1xuICBjb25zdCBjbGFzc0lkID0gY2xhc3NOb2RlLmlkO1xuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFU0xpbnQgc2VsZWN0b3IgYFtpZF1gIGd1YXJhbnRlZXMgY2xhc3NJZCBpcyBwcmVzZW50LiAqL1xuICBpZiAoIWNsYXNzSWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc0lkLm5hbWU7XG4gIGNvbnN0IHsgYWJzdHJhY3Q6IGlzQWJzdHJhY3QgfSA9IGNsYXNzTm9kZTtcbiAgY29uc3QgaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCA9IGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29tcG9uZW50QmFzZScpO1xuICBjb25zdCBoYXNDb21wb25lbnRTdWZmaXggPSAhaGFzQ29tcG9uZW50QmFzZVN1ZmZpeCAmJiBjbGFzc05hbWUuZW5kc1dpdGgoJ0NvbXBvbmVudCcpO1xuXG4gIC8vIENvcnJlY3Q6IG5vbi1hYnN0cmFjdCBlbmRpbmcgd2l0aCBDb21wb25lbnQsIG9yIGFic3RyYWN0IGVuZGluZyB3aXRoIENvbXBvbmVudEJhc2VcbiAgaWYgKChoYXNDb21wb25lbnRTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHx8IChoYXNDb21wb25lbnRCYXNlU3VmZml4ICYmIGlzQWJzdHJhY3QpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHNOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjbGFzc05vZGUpO1xuICBjb25zdCBjbGFzc1R5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzTm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGNvbGxlY3RBbmNlc3Rvck5hbWVzKGNsYXNzVHlwZSk7XG5cbiAgaWYgKCFhbmNlc3RvcnMuaGFzKFJFUVVJUkVEX0FOQ0VTVE9SKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZXhjbHVkZWQgb2YgRVhDTFVERURfQU5DRVNUT1JTKSB7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXMoZXhjbHVkZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhc0NvbXBvbmVudEJhc2VTdWZmaXggJiYgIWlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0JBU0VfTk9UX0FCU1RSQUNULFxuICAgICAgbm9kZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzQWJzdHJhY3QpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0FCU1RSQUNUX05FRURTX0JBU0UsXG4gICAgICBub2RlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBjbGFzc05hbWUgfSxcbiAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1NVRkZJWCxcbiAgICAgIG5vZGVcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTLHNCQUFzQjtBQUt4QixNQUFNLDRCQUE0QjtBQUtsQyxNQUFNLGlDQUFpQztBQUt2QyxNQUFNLCtCQUErQjtBQUs1QyxNQUFNLHFCQUFxQixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLHVCQUF1QixRQUFRLFVBQVUsbUJBQW1CLE1BQU0sQ0FBQztBQUt2SCxNQUFNLG9CQUFvQjtBQVNuQixNQUFNLHlCQUEwQztBQUFBLEVBQ3JELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVc7QUFDcEMsVUFBTSxVQUFVLFNBQVMsUUFBUSxlQUFlO0FBRWhELFdBQU87QUFBQSxNQUNMLHVCQUF1QixNQUF1QjtBQUM1QyxvQkFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFDQSxzQkFBc0IsTUFBdUI7QUFDM0Msb0JBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw4QkFBOEIsR0FBRztBQUFBLE1BQ2xDLENBQUMsNEJBQTRCLEdBQUc7QUFBQSxNQUNoQyxD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
@@ -0,0 +1,10 @@
1
+ /// <reference path="../../library-references.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;