@mnaoumov/obsidian-dev-toolkit 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -2
  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 +782 -0
  15. package/dist/demo-vault-helper/manifest.json +9 -0
  16. package/dist/integration-test-plugin/main.js +45388 -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 +335 -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 +253 -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 +226 -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 +192 -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 +375 -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 +247 -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 +184 -0
  31. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +14 -0
  32. package/dist/lib/cjs/bundlers/esbuild.cjs +177 -0
  33. package/dist/lib/cjs/bundlers/esbuild.d.cts +11 -0
  34. package/dist/lib/cjs/bundlers/index.cjs +180 -0
  35. package/dist/lib/cjs/bundlers/index.d.cts +3 -0
  36. package/dist/lib/cjs/demo-vault-app-json.cjs +199 -0
  37. package/dist/lib/cjs/demo-vault-app-json.d.cts +93 -0
  38. package/dist/lib/cjs/demo-vault-buttons.cjs +580 -0
  39. package/dist/lib/cjs/demo-vault-buttons.d.cts +259 -0
  40. package/dist/lib/cjs/demo-vault-coverage.cjs +725 -0
  41. package/dist/lib/cjs/demo-vault-coverage.d.cts +533 -0
  42. package/dist/lib/cjs/demo-vault.cjs +309 -0
  43. package/dist/lib/cjs/demo-vault.d.cts +33 -0
  44. package/dist/lib/cjs/formatters/dprint.cjs +173 -0
  45. package/dist/lib/cjs/formatters/dprint.d.cts +15 -0
  46. package/dist/lib/cjs/formatters/index.cjs +177 -0
  47. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  48. package/dist/lib/cjs/index.cjs +207 -0
  49. package/dist/lib/cjs/index.d.cts +16 -0
  50. package/dist/lib/cjs/integration-test-setup.cjs +142 -0
  51. package/dist/lib/cjs/integration-test-setup.d.cts +33 -0
  52. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +176 -0
  53. package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +39 -0
  54. package/dist/lib/cjs/jest-setup.cjs +147 -0
  55. package/dist/lib/cjs/jest-setup.d.cts +13 -0
  56. package/dist/lib/cjs/linters/eslint-config.cjs +365 -0
  57. package/dist/lib/cjs/linters/eslint-config.d.cts +25 -0
  58. package/dist/lib/cjs/linters/eslint-rules/index.cjs +201 -0
  59. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +10 -0
  60. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +268 -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 +231 -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 +228 -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 +229 -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 +329 -0
  69. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +45 -0
  70. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +670 -0
  71. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
  72. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +260 -0
  73. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +10 -0
  74. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +186 -0
  75. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +13 -0
  76. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +291 -0
  77. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +18 -0
  78. package/dist/lib/cjs/linters/eslint.cjs +173 -0
  79. package/dist/lib/cjs/linters/eslint.d.cts +15 -0
  80. package/dist/lib/cjs/linters/index.cjs +189 -0
  81. package/dist/lib/cjs/linters/index.d.cts +6 -0
  82. package/dist/lib/cjs/linters/markdownlint.cjs +173 -0
  83. package/dist/lib/cjs/linters/markdownlint.d.cts +15 -0
  84. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +189 -0
  85. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +40 -0
  86. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +229 -0
  87. package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +253 -0
  88. package/dist/lib/cjs/setup.cjs +176 -0
  89. package/dist/lib/cjs/setup.d.cts +21 -0
  90. package/dist/lib/cjs/templates.cjs +185 -0
  91. package/dist/lib/cjs/templates.d.cts +13 -0
  92. package/dist/lib/cjs/test-runners/index.cjs +183 -0
  93. package/dist/lib/cjs/test-runners/index.d.cts +4 -0
  94. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +224 -0
  95. package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +44 -0
  96. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +170 -0
  97. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +27 -0
  98. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +230 -0
  99. package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +86 -0
  100. package/dist/lib/cjs/test-runners/vitest-config.cjs +497 -0
  101. package/dist/lib/cjs/test-runners/vitest-config.d.cts +200 -0
  102. package/dist/lib/cjs/version.cjs +275 -0
  103. package/dist/lib/cjs/version.d.cts +92 -0
  104. package/dist/lib/cjs/vitest-setup.cjs +147 -0
  105. package/dist/lib/cjs/vitest-setup.d.cts +11 -0
  106. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +38 -0
  107. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +226 -0
  108. package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +20 -0
  109. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +138 -0
  110. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +34 -0
  111. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +116 -0
  112. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +7 -0
  113. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +64 -0
  114. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +98 -0
  115. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +255 -0
  116. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +30 -0
  117. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +134 -0
  118. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +14 -0
  119. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +71 -0
  120. package/dist/lib/esm/bundlers/esbuild.d.mts +11 -0
  121. package/dist/lib/esm/bundlers/esbuild.mjs +66 -0
  122. package/dist/lib/esm/bundlers/index.d.mts +3 -0
  123. package/dist/lib/esm/bundlers/index.mjs +56 -0
  124. package/dist/lib/esm/demo-vault-app-json.d.mts +93 -0
  125. package/dist/lib/esm/demo-vault-app-json.mjs +83 -0
  126. package/dist/lib/esm/demo-vault-buttons.d.mts +259 -0
  127. package/dist/lib/esm/demo-vault-buttons.mjs +460 -0
  128. package/dist/lib/esm/demo-vault-coverage.d.mts +533 -0
  129. package/dist/lib/esm/demo-vault-coverage.mjs +626 -0
  130. package/dist/lib/esm/demo-vault.d.mts +33 -0
  131. package/dist/lib/esm/demo-vault.mjs +205 -0
  132. package/dist/lib/esm/formatters/dprint.d.mts +15 -0
  133. package/dist/lib/esm/formatters/dprint.mjs +60 -0
  134. package/dist/lib/esm/formatters/index.d.mts +2 -0
  135. package/dist/lib/esm/formatters/index.mjs +54 -0
  136. package/dist/lib/esm/index.d.mts +16 -0
  137. package/dist/lib/esm/index.mjs +74 -0
  138. package/dist/lib/esm/integration-test-setup.d.mts +33 -0
  139. package/dist/lib/esm/integration-test-setup.mjs +52 -0
  140. package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +39 -0
  141. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +65 -0
  142. package/dist/lib/esm/jest-setup.d.mts +13 -0
  143. package/dist/lib/esm/jest-setup.mjs +61 -0
  144. package/dist/lib/esm/linters/eslint-config.d.mts +25 -0
  145. package/dist/lib/esm/linters/eslint-config.mjs +247 -0
  146. package/dist/lib/esm/linters/eslint-rules/index.d.mts +10 -0
  147. package/dist/lib/esm/linters/eslint-rules/index.mjs +70 -0
  148. package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +54 -0
  149. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +154 -0
  150. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  151. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +98 -0
  152. package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +32 -0
  153. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +117 -0
  154. package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +30 -0
  155. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +118 -0
  156. package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +45 -0
  157. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +220 -0
  158. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
  159. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +559 -0
  160. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +10 -0
  161. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +146 -0
  162. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +13 -0
  163. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +73 -0
  164. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +18 -0
  165. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +175 -0
  166. package/dist/lib/esm/linters/eslint.d.mts +15 -0
  167. package/dist/lib/esm/linters/eslint.mjs +60 -0
  168. package/dist/lib/esm/linters/index.d.mts +6 -0
  169. package/dist/lib/esm/linters/index.mjs +62 -0
  170. package/dist/lib/esm/linters/markdownlint.d.mts +15 -0
  171. package/dist/lib/esm/linters/markdownlint.mjs +60 -0
  172. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +40 -0
  173. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +75 -0
  174. package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +253 -0
  175. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +116 -0
  176. package/dist/lib/esm/setup.d.mts +21 -0
  177. package/dist/lib/esm/setup.mjs +63 -0
  178. package/dist/lib/esm/templates.d.mts +13 -0
  179. package/dist/lib/esm/templates.mjs +65 -0
  180. package/dist/lib/esm/test-runners/index.d.mts +4 -0
  181. package/dist/lib/esm/test-runners/index.mjs +58 -0
  182. package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +44 -0
  183. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +102 -0
  184. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +27 -0
  185. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +56 -0
  186. package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +86 -0
  187. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +123 -0
  188. package/dist/lib/esm/test-runners/vitest-config.d.mts +200 -0
  189. package/dist/lib/esm/test-runners/vitest-config.mjs +377 -0
  190. package/dist/lib/esm/version.d.mts +92 -0
  191. package/dist/lib/esm/version.mjs +168 -0
  192. package/dist/lib/esm/vitest-setup.d.mts +11 -0
  193. package/dist/lib/esm/vitest-setup.mjs +61 -0
  194. package/dist/templates/.markdownlint-cli2.mjs +4 -0
  195. package/dist/templates/.nano-staged.mjs +4 -0
  196. package/dist/templates/commitlint.config.ts +3 -0
  197. package/dist/templates/dprint.json +26 -0
  198. package/dist/templates/eslint.config.mts +3 -0
  199. package/dist/templates/scripts/build/build-clean.ts +4 -0
  200. package/dist/templates/scripts/build/build-compile-svelte.ts +4 -0
  201. package/dist/templates/scripts/build/build-compile-typescript.ts +4 -0
  202. package/dist/templates/scripts/build/build-compile.ts +4 -0
  203. package/dist/templates/scripts/build/build-templates.ts +4 -0
  204. package/dist/templates/scripts/bundlers/esbuild/build.ts +4 -0
  205. package/dist/templates/scripts/bundlers/esbuild/dev.ts +4 -0
  206. package/dist/templates/scripts/commitlint-config.ts +3 -0
  207. package/dist/templates/scripts/eslint-config.ts +10 -0
  208. package/dist/templates/scripts/formatters/dprint/format-check.ts +8 -0
  209. package/dist/templates/scripts/formatters/dprint/format.ts +8 -0
  210. package/dist/templates/scripts/gate/gate.ts +10 -0
  211. package/dist/templates/scripts/linters/cspell/spellcheck.ts +8 -0
  212. package/dist/templates/scripts/linters/eslint/lint-fix.ts +8 -0
  213. package/dist/templates/scripts/linters/eslint/lint.ts +8 -0
  214. package/dist/templates/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
  215. package/dist/templates/scripts/linters/markdownlint/lint-md.ts +8 -0
  216. package/dist/templates/scripts/linters/over-exposure/find-overexposed-fix.ts +25 -0
  217. package/dist/templates/scripts/linters/over-exposure/find-overexposed.ts +15 -0
  218. package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
  219. package/dist/templates/scripts/nano-staged-config.ts +3 -0
  220. package/dist/templates/scripts/test-runners/vitest/test-coverage.ts +4 -0
  221. package/dist/templates/scripts/test-runners/vitest/test-watch.ts +4 -0
  222. package/dist/templates/scripts/test-runners/vitest/test.ts +4 -0
  223. package/dist/templates/scripts/version/version.ts +10 -0
  224. package/dist/templates/scripts/vitest-config.ts +3 -0
  225. package/dist/templates/vitest.config.ts +3 -0
  226. package/formatters/dprint/package.json +6 -0
  227. package/formatters/index/package.json +6 -0
  228. package/formatters/package.json +6 -0
  229. package/linters/eslint/package.json +6 -0
  230. package/linters/eslint-config/package.json +6 -0
  231. package/linters/eslint-rules/index/package.json +6 -0
  232. package/linters/eslint-rules/manifest-description/package.json +6 -0
  233. package/linters/eslint-rules/manifest-helpers/package.json +6 -0
  234. package/linters/eslint-rules/manifest-id/package.json +6 -0
  235. package/linters/eslint-rules/manifest-name/package.json +6 -0
  236. package/linters/eslint-rules/manifest-schema/package.json +6 -0
  237. package/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
  238. package/linters/eslint-rules/no-untrusted-input-events/package.json +6 -0
  239. package/linters/eslint-rules/obsidian-dev-utils-plugin/package.json +6 -0
  240. package/linters/eslint-rules/package.json +6 -0
  241. package/linters/eslint-rules/require-component-suffix/package.json +6 -0
  242. package/linters/index/package.json +6 -0
  243. package/linters/markdownlint/package.json +6 -0
  244. package/linters/obsidianmd-rule-custom-message/package.json +6 -0
  245. package/linters/package.json +6 -0
  246. package/package.json +240 -4
  247. package/test-runners/index/package.json +6 -0
  248. package/test-runners/integration-test-plugin/package.json +6 -0
  249. package/test-runners/package.json +6 -0
  250. package/test-runners/performance-eval-cap/package.json +6 -0
  251. package/test-runners/stale-build-global-setup/package.json +6 -0
  252. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,118 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // 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
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ (function initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import {
51
+ findManifestMember,
52
+ getManifestObject,
53
+ getStringValue,
54
+ toReportNode
55
+ } from "./manifest-helpers.mjs";
56
+ const MESSAGE_ID_CONTAINS_OBSIDIAN = "nameContainsObsidian";
57
+ const MESSAGE_ID_CONTAINS_PLUGIN = "nameContainsPlugin";
58
+ const MESSAGE_ID_INVALID_CHARACTERS = "nameInvalidCharacters";
59
+ const ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
60
+ const OBSIDIAN_VARIANTS = /obsi|sidian/i;
61
+ const manifestName = {
62
+ create(context) {
63
+ return {
64
+ Document(node) {
65
+ const manifestObject = getManifestObject(node);
66
+ if (!manifestObject) {
67
+ return;
68
+ }
69
+ const member = findManifestMember(manifestObject, "name");
70
+ if (!member) {
71
+ return;
72
+ }
73
+ const name = getStringValue(member.value);
74
+ if (name === null) {
75
+ return;
76
+ }
77
+ const reportNode = toReportNode(member.value);
78
+ if (OBSIDIAN_VARIANTS.test(name)) {
79
+ context.report({
80
+ messageId: MESSAGE_ID_CONTAINS_OBSIDIAN,
81
+ node: reportNode
82
+ });
83
+ }
84
+ if (name.toLowerCase().includes("plugin")) {
85
+ context.report({
86
+ messageId: MESSAGE_ID_CONTAINS_PLUGIN,
87
+ node: reportNode
88
+ });
89
+ }
90
+ if (!ALLOWED_NAME_CHARACTERS.test(name)) {
91
+ context.report({
92
+ messageId: MESSAGE_ID_INVALID_CHARACTERS,
93
+ node: reportNode
94
+ });
95
+ }
96
+ }
97
+ };
98
+ },
99
+ meta: {
100
+ docs: {
101
+ description: "Enforce the Community directory's constraints on a plugin's `manifest.json` `name`"
102
+ },
103
+ messages: {
104
+ [MESSAGE_ID_CONTAINS_OBSIDIAN]: "The `name` must not contain `Obsidian` or a variant of it. It is implied by the context of the plugin directory.",
105
+ [MESSAGE_ID_CONTAINS_PLUGIN]: "The `name` must not contain `Plugin`.",
106
+ [MESSAGE_ID_INVALID_CHARACTERS]: "The `name` must use Basic Latin only, with hyphens, plus signs and parentheses the only permitted punctuation."
107
+ },
108
+ schema: [],
109
+ type: "problem"
110
+ }
111
+ };
112
+ export {
113
+ MESSAGE_ID_CONTAINS_OBSIDIAN,
114
+ MESSAGE_ID_CONTAINS_PLUGIN,
115
+ MESSAGE_ID_INVALID_CHARACTERS,
116
+ manifestName
117
+ };
118
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LW5hbWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbWFuaWZlc3QtbmFtZVxuICpcbiAqIEVuZm9yY2VzIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5J3MgY29uc3RyYWludHMgb24gYSBwbHVnaW4ncyBgbWFuaWZlc3QuanNvbmAgYG5hbWVgOiBubyBgT2JzaWRpYW5gIG9yXG4gKiBpdHMgdmFyaWFudHMsIG5vIGBQbHVnaW5gLCBhbmQgQmFzaWMgTGF0aW4gb25seSB3aXRoIGh5cGhlbnMsIHBsdXMgc2lnbnMgYW5kIHBhcmVudGhlc2VzIHRoZSBzb2xlXG4gKiBwZXJtaXR0ZWQgcHVuY3R1YXRpb24uXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0U3RyaW5nVmFsdWUsXG4gIHRvUmVwb3J0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbmFtZSBjb250YWlucyBgT2JzaWRpYW5gIG9yIG9uZSBvZiBpdHMgdmFyaWFudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOID0gJ25hbWVDb250YWluc09ic2lkaWFuJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgYFBsdWdpbmAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTiA9ICduYW1lQ29udGFpbnNQbHVnaW4nO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbmFtZSBob2xkcyBhIGNoYXJhY3RlciBvdXRzaWRlIEJhc2ljIExhdGluLCBvciBwdW5jdHVhdGlvbiB0aGUgZGlyZWN0b3J5IHJlamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSUyA9ICduYW1lSW52YWxpZENoYXJhY3RlcnMnO1xuXG4vKipcblRoZSBvbmx5IGNoYXJhY3RlcnMgYSBwbHVnaW4gbmFtZSBtYXkgaG9sZDogQmFzaWMgTGF0aW4gbGV0dGVycyBhbmQgZGlnaXRzLCBzcGFjZXMsIGFuZCB0aGUgdGhyZWVcbnBlcm1pdHRlZCBwdW5jdHVhdGlvbiBtYXJrcy5cbiAqL1xuY29uc3QgQUxMT1dFRF9OQU1FX0NIQVJBQ1RFUlMgPSAvXltBLVphLXowLTkgXFwtKygpXSskLztcblxuLyoqXG5gT2JzaWRpYW5gIGFuZCB0aGUgdHdvIHZhcmlhbnRzIHRoZSBkaXJlY3RvcnkgYWxzbyByZWplY3RzLlxuICovXG5jb25zdCBPQlNJRElBTl9WQVJJQU5UUyA9IC9vYnNpfHNpZGlhbi9pO1xuXG4vKipcbiAqIEVTTGludCBydWxlIGVuZm9yY2luZyB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0TmFtZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBEb2N1bWVudChub2RlOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0T2JqZWN0ID0gZ2V0TWFuaWZlc3RPYmplY3Qobm9kZSk7XG5cbiAgICAgICAgaWYgKCFtYW5pZmVzdE9iamVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbWJlciA9IGZpbmRNYW5pZmVzdE1lbWJlcihtYW5pZmVzdE9iamVjdCwgJ25hbWUnKTtcblxuICAgICAgICBpZiAoIW1lbWJlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRTdHJpbmdWYWx1ZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb3J0Tm9kZSA9IHRvUmVwb3J0Tm9kZShtZW1iZXIudmFsdWUpO1xuXG4gICAgICAgIGlmIChPQlNJRElBTl9WQVJJQU5UUy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGx1Z2luJykpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfQ09OVEFJTlNfUExVR0lOLFxuICAgICAgICAgICAgbm9kZTogcmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBTExPV0VEX05BTUVfQ0hBUkFDVEVSUy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSUyxcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgdGhlIENvbW11bml0eSBkaXJlY3RvcnlcXCdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luXFwncyBgbWFuaWZlc3QuanNvbmAgYG5hbWVgJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0NPTlRBSU5TX09CU0lESUFOXTogJ1RoZSBgbmFtZWAgbXVzdCBub3QgY29udGFpbiBgT2JzaWRpYW5gIG9yIGEgdmFyaWFudCBvZiBpdC4gSXQgaXMgaW1wbGllZCBieSB0aGUgY29udGV4dCBvZiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4nLFxuICAgICAgW01FU1NBR0VfSURfQ09OVEFJTlNfUExVR0lOXTogJ1RoZSBgbmFtZWAgbXVzdCBub3QgY29udGFpbiBgUGx1Z2luYC4nLFxuICAgICAgW01FU1NBR0VfSURfSU5WQUxJRF9DSEFSQUNURVJTXTogJ1RoZSBgbmFtZWAgbXVzdCB1c2UgQmFzaWMgTGF0aW4gb25seSwgd2l0aCBoeXBoZW5zLCBwbHVzIHNpZ25zIGFuZCBwYXJlbnRoZXNlcyB0aGUgb25seSBwZXJtaXR0ZWQgcHVuY3R1YXRpb24uJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS0EsTUFBTSwrQkFBK0I7QUFLckMsTUFBTSw2QkFBNkI7QUFLbkMsTUFBTSxnQ0FBZ0M7QUFNN0MsTUFBTSwwQkFBMEI7QUFLaEMsTUFBTSxvQkFBb0I7QUFLbkIsTUFBTSxlQUFnQztBQUFBLEVBQzNDLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLFNBQVMsTUFBcUI7QUFDNUIsY0FBTSxpQkFBaUIsa0JBQWtCLElBQUk7QUFFN0MsWUFBSSxDQUFDLGdCQUFnQjtBQUNuQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVMsbUJBQW1CLGdCQUFnQixNQUFNO0FBRXhELFlBQUksQ0FBQyxRQUFRO0FBQ1g7QUFBQSxRQUNGO0FBRUEsY0FBTSxPQUFPLGVBQWUsT0FBTyxLQUFLO0FBRXhDLFlBQUksU0FBUyxNQUFNO0FBQ2pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxhQUFhLE9BQU8sS0FBSztBQUU1QyxZQUFJLGtCQUFrQixLQUFLLElBQUksR0FBRztBQUNoQyxrQkFBUSxPQUFPO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksS0FBSyxZQUFZLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDekMsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLENBQUMsd0JBQXdCLEtBQUssSUFBSSxHQUFHO0FBQ3ZDLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw0QkFBNEIsR0FBRztBQUFBLE1BQ2hDLENBQUMsMEJBQTBCLEdBQUc7QUFBQSxNQUM5QixDQUFDLDZCQUE2QixHQUFHO0FBQUEsSUFDbkM7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,45 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: manifest-schema
6
+ *
7
+ * Validates the structure of a plugin's root `manifest.json` - the required keys, the keys the Community
8
+ * directory does not allow, duplicate keys, each value's type, and the shape of `fundingUrl`.
9
+ *
10
+ * Runs on the `@eslint/json` `json/json` language; see `manifest-helpers.ts` for why the AST is Momoa
11
+ * rather than ESTree.
12
+ */
13
+ import type { Rule } from 'eslint';
14
+ /**
15
+ Message ID reported when a key the Community directory does not allow is present.
16
+ */
17
+ export declare const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
18
+ /**
19
+ Message ID reported when the same key appears more than once.
20
+ */
21
+ export declare const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
22
+ /**
23
+ Message ID reported when `fundingUrl` is an empty string, an empty object, or an object with an empty value.
24
+ */
25
+ export declare const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
26
+ /**
27
+ Message ID reported when a value has the wrong type.
28
+ */
29
+ export declare const MESSAGE_ID_INVALID_TYPE = "invalidType";
30
+ /**
31
+ Message ID reported when a `fundingUrl` object holds a non-string value.
32
+ */
33
+ export declare const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
34
+ /**
35
+ Message ID reported when a required key is missing.
36
+ */
37
+ export declare const MESSAGE_ID_MISSING_KEY = "missingKey";
38
+ /**
39
+ Message ID reported when the manifest's top-level value is not an object.
40
+ */
41
+ export declare const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
42
+ /**
43
+ * ESLint rule validating the structure of a plugin's root `manifest.json`.
44
+ */
45
+ export declare const manifestSchema: Rule.RuleModule;
@@ -0,0 +1,220 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // 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
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ (function initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import {
51
+ findManifestMember,
52
+ getManifestObject,
53
+ getManifestStringValue,
54
+ getMemberKey,
55
+ getStringValue,
56
+ JSON_NODE_TYPE_BOOLEAN,
57
+ JSON_NODE_TYPE_OBJECT,
58
+ JSON_NODE_TYPE_STRING,
59
+ toReportNode,
60
+ UNRELEASED_VERSION
61
+ } from "./manifest-helpers.mjs";
62
+ const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
63
+ const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
64
+ const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
65
+ const MESSAGE_ID_INVALID_TYPE = "invalidType";
66
+ const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
67
+ const MESSAGE_ID_MISSING_KEY = "missingKey";
68
+ const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
69
+ const ALWAYS_REQUIRED_KEYS = ["author", "description", "id", "isDesktopOnly", "name", "version"];
70
+ const KEY_NODE_TYPES = /* @__PURE__ */ new Map([
71
+ ["author", [JSON_NODE_TYPE_STRING]],
72
+ ["authorUrl", [JSON_NODE_TYPE_STRING]],
73
+ ["description", [JSON_NODE_TYPE_STRING]],
74
+ ["fundingUrl", [JSON_NODE_TYPE_OBJECT, JSON_NODE_TYPE_STRING]],
75
+ ["id", [JSON_NODE_TYPE_STRING]],
76
+ ["isDesktopOnly", [JSON_NODE_TYPE_BOOLEAN]],
77
+ ["minAppVersion", [JSON_NODE_TYPE_STRING]],
78
+ ["name", [JSON_NODE_TYPE_STRING]],
79
+ ["version", [JSON_NODE_TYPE_STRING]]
80
+ ]);
81
+ const manifestSchema = {
82
+ create(context) {
83
+ return {
84
+ Document(node) {
85
+ const manifestObject = getManifestObject(node);
86
+ if (!manifestObject) {
87
+ context.report({
88
+ messageId: MESSAGE_ID_MUST_BE_ROOT_OBJECT,
89
+ node: toReportNode(node)
90
+ });
91
+ return;
92
+ }
93
+ reportDuplicateKeys({ context, manifestObject });
94
+ reportMissingKeys({ context, manifestObject });
95
+ reportKeyValues({ context, manifestObject });
96
+ }
97
+ };
98
+ },
99
+ meta: {
100
+ docs: {
101
+ description: "Validate the structure of a plugin's root `manifest.json`"
102
+ },
103
+ messages: {
104
+ [MESSAGE_ID_DISALLOWED_KEY]: "The `{{ key }}` property is not allowed in the manifest.",
105
+ [MESSAGE_ID_DUPLICATE_KEY]: "The `{{ key }}` property is defined more than once.",
106
+ [MESSAGE_ID_EMPTY_FUNDING_URL]: "The `fundingUrl` property cannot be empty. Remove it instead when no donations are accepted.",
107
+ [MESSAGE_ID_INVALID_FUNDING_URL]: "The `fundingUrl` object must only contain string values.",
108
+ [MESSAGE_ID_INVALID_TYPE]: "The `{{ key }}` property must be of type `{{ expectedType }}`, but was `{{ actualType }}`.",
109
+ [MESSAGE_ID_MISSING_KEY]: "The manifest is missing the required `{{ key }}` property.",
110
+ [MESSAGE_ID_MUST_BE_ROOT_OBJECT]: "The manifest must be a single JSON object."
111
+ },
112
+ schema: [],
113
+ type: "problem"
114
+ }
115
+ };
116
+ function reportDuplicateKeys(params) {
117
+ const { context, manifestObject } = params;
118
+ const seenKeys = /* @__PURE__ */ new Set();
119
+ for (const member of manifestObject.members) {
120
+ const key = getMemberKey(member);
121
+ if (seenKeys.has(key)) {
122
+ context.report({
123
+ data: { key },
124
+ messageId: MESSAGE_ID_DUPLICATE_KEY,
125
+ node: toReportNode(member.name)
126
+ });
127
+ } else {
128
+ seenKeys.add(key);
129
+ }
130
+ }
131
+ }
132
+ function reportFundingUrl(params) {
133
+ const { context, member } = params;
134
+ const stringValue = getStringValue(member.value);
135
+ if (stringValue !== null) {
136
+ if (stringValue === "") {
137
+ context.report({
138
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
139
+ node: toReportNode(member.value)
140
+ });
141
+ }
142
+ return;
143
+ }
144
+ const fundingObject = member.value;
145
+ if (fundingObject.members.length === 0) {
146
+ context.report({
147
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
148
+ node: toReportNode(fundingObject)
149
+ });
150
+ return;
151
+ }
152
+ for (const fundingMember of fundingObject.members) {
153
+ const fundingValue = getStringValue(fundingMember.value);
154
+ if (fundingValue === null) {
155
+ context.report({
156
+ messageId: MESSAGE_ID_INVALID_FUNDING_URL,
157
+ node: toReportNode(fundingMember.value)
158
+ });
159
+ } else if (fundingValue === "") {
160
+ context.report({
161
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
162
+ node: toReportNode(fundingMember.value)
163
+ });
164
+ }
165
+ }
166
+ }
167
+ function reportKeyValues(params) {
168
+ const { context, manifestObject } = params;
169
+ for (const member of manifestObject.members) {
170
+ const key = getMemberKey(member);
171
+ const expectedNodeTypes = KEY_NODE_TYPES.get(key);
172
+ if (!expectedNodeTypes) {
173
+ context.report({
174
+ data: { key },
175
+ messageId: MESSAGE_ID_DISALLOWED_KEY,
176
+ node: toReportNode(member.name)
177
+ });
178
+ continue;
179
+ }
180
+ if (!expectedNodeTypes.includes(member.value.type)) {
181
+ context.report({
182
+ data: {
183
+ actualType: member.value.type,
184
+ expectedType: expectedNodeTypes.join(" or "),
185
+ key
186
+ },
187
+ messageId: MESSAGE_ID_INVALID_TYPE,
188
+ node: toReportNode(member.value)
189
+ });
190
+ continue;
191
+ }
192
+ if (key === "fundingUrl") {
193
+ reportFundingUrl({ context, member });
194
+ }
195
+ }
196
+ }
197
+ function reportMissingKeys(params) {
198
+ const { context, manifestObject } = params;
199
+ const requiredKeys = [...ALWAYS_REQUIRED_KEYS, ...getManifestStringValue(manifestObject, "version") === UNRELEASED_VERSION ? [] : ["minAppVersion"]];
200
+ for (const key of requiredKeys) {
201
+ if (!findManifestMember(manifestObject, key)) {
202
+ context.report({
203
+ data: { key },
204
+ messageId: MESSAGE_ID_MISSING_KEY,
205
+ node: toReportNode(manifestObject)
206
+ });
207
+ }
208
+ }
209
+ }
210
+ export {
211
+ MESSAGE_ID_DISALLOWED_KEY,
212
+ MESSAGE_ID_DUPLICATE_KEY,
213
+ MESSAGE_ID_EMPTY_FUNDING_URL,
214
+ MESSAGE_ID_INVALID_FUNDING_URL,
215
+ MESSAGE_ID_INVALID_TYPE,
216
+ MESSAGE_ID_MISSING_KEY,
217
+ MESSAGE_ID_MUST_BE_ROOT_OBJECT,
218
+ manifestSchema
219
+ };
220
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL21hbmlmZXN0LXNjaGVtYS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBtYW5pZmVzdC1zY2hlbWFcbiAqXG4gKiBWYWxpZGF0ZXMgdGhlIHN0cnVjdHVyZSBvZiBhIHBsdWdpbidzIHJvb3QgYG1hbmlmZXN0Lmpzb25gIC0gdGhlIHJlcXVpcmVkIGtleXMsIHRoZSBrZXlzIHRoZSBDb21tdW5pdHlcbiAqIGRpcmVjdG9yeSBkb2VzIG5vdCBhbGxvdywgZHVwbGljYXRlIGtleXMsIGVhY2ggdmFsdWUncyB0eXBlLCBhbmQgdGhlIHNoYXBlIG9mIGBmdW5kaW5nVXJsYC5cbiAqXG4gKiBSdW5zIG9uIHRoZSBgQGVzbGludC9qc29uYCBganNvbi9qc29uYCBsYW5ndWFnZTsgc2VlIGBtYW5pZmVzdC1oZWxwZXJzLnRzYCBmb3Igd2h5IHRoZSBBU1QgaXMgTW9tb2FcbiAqIHJhdGhlciB0aGFuIEVTVHJlZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEpzb25NZW1iZXJOb2RlLFxuICBKc29uT2JqZWN0Tm9kZVxufSBmcm9tICcuL21hbmlmZXN0LWhlbHBlcnMudHMnO1xuXG5pbXBvcnQge1xuICBmaW5kTWFuaWZlc3RNZW1iZXIsXG4gIGdldE1hbmlmZXN0T2JqZWN0LFxuICBnZXRNYW5pZmVzdFN0cmluZ1ZhbHVlLFxuICBnZXRNZW1iZXJLZXksXG4gIGdldFN0cmluZ1ZhbHVlLFxuICBKU09OX05PREVfVFlQRV9CT09MRUFOLFxuICBKU09OX05PREVfVFlQRV9PQkpFQ1QsXG4gIEpTT05fTk9ERV9UWVBFX1NUUklORyxcbiAgdG9SZXBvcnROb2RlLFxuICBVTlJFTEVBU0VEX1ZFUlNJT05cbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBrZXkgdGhlIENvbW11bml0eSBkaXJlY3RvcnkgZG9lcyBub3QgYWxsb3cgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfRElTQUxMT1dFRF9LRVkgPSAnZGlzYWxsb3dlZEtleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBzYW1lIGtleSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9EVVBMSUNBVEVfS0VZID0gJ2R1cGxpY2F0ZUtleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGBmdW5kaW5nVXJsYCBpcyBhbiBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IG9iamVjdCwgb3IgYW4gb2JqZWN0IHdpdGggYW4gZW1wdHkgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMID0gJ2VtcHR5RnVuZGluZ1VybCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgdmFsdWUgaGFzIHRoZSB3cm9uZyB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX1RZUEUgPSAnaW52YWxpZFR5cGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIGBmdW5kaW5nVXJsYCBvYmplY3QgaG9sZHMgYSBub24tc3RyaW5nIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMID0gJ2ludmFsaWRGdW5kaW5nVXJsJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSByZXF1aXJlZCBrZXkgaXMgbWlzc2luZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTUlTU0lOR19LRVkgPSAnbWlzc2luZ0tleSc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBtYW5pZmVzdCdzIHRvcC1sZXZlbCB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNUID0gJ211c3RCZVJvb3RPYmplY3QnO1xuXG4vKipcblRoZSBrZXlzIGV2ZXJ5IG1hbmlmZXN0IG11c3QgY2FycnksIHdoZXRoZXIgb3Igbm90IHRoZSBwbHVnaW4gaGFzIGJlZW4gcmVsZWFzZWQuXG4gKi9cbmNvbnN0IEFMV0FZU19SRVFVSVJFRF9LRVlTID0gWydhdXRob3InLCAnZGVzY3JpcHRpb24nLCAnaWQnLCAnaXNEZXNrdG9wT25seScsICduYW1lJywgJ3ZlcnNpb24nXTtcblxuLyoqXG5UaGUgTW9tb2Egbm9kZSB0eXBlIGVhY2ggYWxsb3dlZCBrZXkncyB2YWx1ZSBtYXkgaGF2ZS4gQSBrZXkgYWJzZW50IGZyb20gdGhpcyBtYXAgaXMgbm90IGFsbG93ZWQgYXQgYWxsLlxuICovXG5jb25zdCBLRVlfTk9ERV9UWVBFUyA9IG5ldyBNYXA8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4oW1xuICBbJ2F1dGhvcicsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydhdXRob3JVcmwnLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnZGVzY3JpcHRpb24nLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnZnVuZGluZ1VybCcsIFtKU09OX05PREVfVFlQRV9PQkpFQ1QsIEpTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2lkJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2lzRGVza3RvcE9ubHknLCBbSlNPTl9OT0RFX1RZUEVfQk9PTEVBTl1dLFxuICBbJ21pbkFwcFZlcnNpb24nLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnbmFtZScsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWyd2ZXJzaW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dXG5dKTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSB2YWxpZGF0aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4ncyByb290IGBtYW5pZmVzdC5qc29uYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0U2NoZW1hOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIERvY3VtZW50KG5vZGU6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RPYmplY3QgPSBnZXRNYW5pZmVzdE9iamVjdChub2RlKTtcblxuICAgICAgICBpZiAoIW1hbmlmZXN0T2JqZWN0KSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX01VU1RfQkVfUk9PVF9PQkpFQ1QsXG4gICAgICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobm9kZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXBvcnREdXBsaWNhdGVLZXlzKHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSk7XG4gICAgICAgIHJlcG9ydE1pc3NpbmdLZXlzKHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSk7XG4gICAgICAgIHJlcG9ydEtleVZhbHVlcyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRlIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW5cXCdzIHJvb3QgYG1hbmlmZXN0Lmpzb25gJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgbWFuaWZlc3QuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0RVUExJQ0FURV9LRVldOiAnVGhlIGB7eyBrZXkgfX1gIHByb3BlcnR5IGlzIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMXTogJ1RoZSBgZnVuZGluZ1VybGAgcHJvcGVydHkgY2Fubm90IGJlIGVtcHR5LiBSZW1vdmUgaXQgaW5zdGVhZCB3aGVuIG5vIGRvbmF0aW9ucyBhcmUgYWNjZXB0ZWQuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfRlVORElOR19VUkxdOiAnVGhlIGBmdW5kaW5nVXJsYCBvYmplY3QgbXVzdCBvbmx5IGNvbnRhaW4gc3RyaW5nIHZhbHVlcy4nLFxuICAgICAgW01FU1NBR0VfSURfSU5WQUxJRF9UWVBFXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYHt7IGV4cGVjdGVkVHlwZSB9fWAsIGJ1dCB3YXMgYHt7IGFjdHVhbFR5cGUgfX1gLicsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX0tFWV06ICdUaGUgbWFuaWZlc3QgaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgYHt7IGtleSB9fWAgcHJvcGVydHkuJyxcbiAgICAgIFtNRVNTQUdFX0lEX01VU1RfQkVfUk9PVF9PQkpFQ1RdOiAnVGhlIG1hbmlmZXN0IG11c3QgYmUgYSBzaW5nbGUgSlNPTiBvYmplY3QuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVwb3J0RnVuZGluZ1VybH0uXG4gKi9cbmludGVyZmFjZSBSZXBvcnRGdW5kaW5nVXJsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIGBmdW5kaW5nVXJsYCBtZW1iZXIuXG4gICAqL1xuICByZWFkb25seSBtZW1iZXI6IEpzb25NZW1iZXJOb2RlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSBtYW5pZmVzdCByZXBvcnRpbmcgaGVscGVycy5cbiAqL1xuaW50ZXJmYWNlIFJlcG9ydFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5pZmVzdCdzIHJvb3Qgb2JqZWN0IG5vZGUuXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdE9iamVjdDogSnNvbk9iamVjdE5vZGU7XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSBrZXkgdGhhdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlcG9ydFBhcmFtc30uXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydER1cGxpY2F0ZUtleXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIG1hbmlmZXN0T2JqZWN0Lm1lbWJlcnMpIHtcbiAgICBjb25zdCBrZXkgPSBnZXRNZW1iZXJLZXkobWVtYmVyKTtcblxuICAgIGlmIChzZWVuS2V5cy5oYXMoa2V5KSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRFVQTElDQVRFX0tFWSxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci5uYW1lKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZW5LZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgdGhlIHdheXMgYSBgZnVuZGluZ1VybGAgY2FuIGJlIGVtcHR5IG9yIGhvbGQgYSBub24tc3RyaW5nIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlcG9ydEZ1bmRpbmdVcmxQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRGdW5kaW5nVXJsKHBhcmFtczogUmVwb3J0RnVuZGluZ1VybFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIG1lbWJlciB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gZ2V0U3RyaW5nVmFsdWUobWVtYmVyLnZhbHVlKTtcblxuICBpZiAoc3RyaW5nVmFsdWUgIT09IG51bGwpIHtcbiAgICBpZiAoc3RyaW5nVmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTCxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZ1bmRpbmdPYmplY3QgPSBtZW1iZXIudmFsdWUgYXMgSnNvbk9iamVjdE5vZGU7XG5cbiAgaWYgKGZ1bmRpbmdPYmplY3QubWVtYmVycy5sZW5ndGggPT09IDApIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ09iamVjdClcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGZ1bmRpbmdNZW1iZXIgb2YgZnVuZGluZ09iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3QgZnVuZGluZ1ZhbHVlID0gZ2V0U3RyaW5nVmFsdWUoZnVuZGluZ01lbWJlci52YWx1ZSk7XG5cbiAgICBpZiAoZnVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ01lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZnVuZGluZ1ZhbHVlID09PSAnJykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShmdW5kaW5nTWVtYmVyLnZhbHVlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSBrZXkgdGhhdCBpcyBub3QgYWxsb3dlZCwgYW5kIGV2ZXJ5IGFsbG93ZWQga2V5IHdob3NlIHZhbHVlIGhhcyB0aGUgd3JvbmcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRLZXlWYWx1ZXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuXG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIG1hbmlmZXN0T2JqZWN0Lm1lbWJlcnMpIHtcbiAgICBjb25zdCBrZXkgPSBnZXRNZW1iZXJLZXkobWVtYmVyKTtcbiAgICBjb25zdCBleHBlY3RlZE5vZGVUeXBlcyA9IEtFWV9OT0RFX1RZUEVTLmdldChrZXkpO1xuXG4gICAgaWYgKCFleHBlY3RlZE5vZGVUeXBlcykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRElTQUxMT1dFRF9LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIubmFtZSlcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RlZE5vZGVUeXBlcy5pbmNsdWRlcyhtZW1iZXIudmFsdWUudHlwZSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjdHVhbFR5cGU6IG1lbWJlci52YWx1ZS50eXBlLFxuICAgICAgICAgIGV4cGVjdGVkVHlwZTogZXhwZWN0ZWROb2RlVHlwZXMuam9pbignIG9yICcpLFxuICAgICAgICAgIGtleVxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfSU5WQUxJRF9UWVBFLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZnVuZGluZ1VybCcpIHtcbiAgICAgIHJlcG9ydEZ1bmRpbmdVcmwoeyBjb250ZXh0LCBtZW1iZXIgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBldmVyeSByZXF1aXJlZCBrZXkgdGhlIG1hbmlmZXN0IGlzIG1pc3NpbmcuXG4gKlxuICogYG1pbkFwcFZlcnNpb25gIGlzIHJlcXVpcmVkIG9ubHkgb25jZSB0aGUgcGx1Z2luIGhhcyBiZWVuIHJlbGVhc2VkLiBgdXBkYXRlVmVyc2lvbkluRmlsZXNGb3JQbHVnaW5gXG4gKiB3cml0ZXMgaXQgYXQgcmVsZWFzZSB0aW1lLCBzbyBhIHJlcG8gc3RpbGwgYXQgdmVyc2lvbiBgMC4wLjBgIGxlZ2l0aW1hdGVseSBoYXMgbm9uZSBhbmQgbXVzdCBub3QgYmVcbiAqIHJlcG9ydGVkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nS2V5cyhwYXJhbXM6IFJlcG9ydFBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlcXVpcmVkS2V5cyA9IFsuLi5BTFdBWVNfUkVRVUlSRURfS0VZUywgLi4uKGdldE1hbmlmZXN0U3RyaW5nVmFsdWUobWFuaWZlc3RPYmplY3QsICd2ZXJzaW9uJykgPT09IFVOUkVMRUFTRURfVkVSU0lPTiA/IFtdIDogWydtaW5BcHBWZXJzaW9uJ10pXTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiByZXF1aXJlZEtleXMpIHtcbiAgICBpZiAoIWZpbmRNYW5pZmVzdE1lbWJlcihtYW5pZmVzdE9iamVjdCwga2V5KSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IGtleSB9LFxuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfTUlTU0lOR19LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtYW5pZmVzdE9iamVjdClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS0EsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSwyQkFBMkI7QUFLakMsTUFBTSwrQkFBK0I7QUFLckMsTUFBTSwwQkFBMEI7QUFLaEMsTUFBTSxpQ0FBaUM7QUFLdkMsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSxpQ0FBaUM7QUFLOUMsTUFBTSx1QkFBdUIsQ0FBQyxVQUFVLGVBQWUsTUFBTSxpQkFBaUIsUUFBUSxTQUFTO0FBSy9GLE1BQU0saUJBQWlCLG9CQUFJLElBQStCO0FBQUEsRUFDeEQsQ0FB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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 when an in-Obsidian closure declares more waiting than the transport's cap allows.
5
+ */
6
+ export declare const MESSAGE_ID = "noOverCapWaitInEvalInObsidian";
7
+ /**
8
+ * ESLint rule disallowing an in-Obsidian closure whose declared waiting exceeds the transport's script-timeout cap.
9
+ */
10
+ export declare const noOverCapWaitInEvalInObsidian: Rule.RuleModule;