obsidian-dev-utils 66.0.1 → 68.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 (225) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/dev/main.js +543 -355
  3. package/dist/lib/cjs/async-events.cjs +182 -32
  4. package/dist/lib/cjs/async-events.d.cts +259 -24
  5. package/dist/lib/cjs/async.cjs +2 -2
  6. package/dist/lib/cjs/error.cjs +6 -7
  7. package/dist/lib/cjs/function.cjs +6 -2
  8. package/dist/lib/cjs/function.d.cts +6 -0
  9. package/dist/lib/cjs/library.cjs +1 -1
  10. package/dist/lib/cjs/object-utils.cjs +1 -1
  11. package/dist/lib/cjs/object-utils.d.cts +2 -0
  12. package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
  13. package/dist/lib/cjs/obsidian/active-file-provider.d.cts +0 -1
  14. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +2 -4
  15. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +1 -1
  16. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +4 -5
  17. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +3 -3
  18. package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +3 -3
  19. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +2 -1
  20. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +2 -3
  21. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +1 -1
  22. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +1 -6
  23. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +1 -6
  24. package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +3 -8
  25. package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +2 -6
  26. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +3 -3
  27. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +2 -2
  28. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +3 -8
  29. package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +2 -6
  30. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +2 -20
  31. package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +1 -18
  32. package/dist/lib/cjs/obsidian/components/component-ex.cjs +235 -0
  33. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +55 -0
  34. package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +3 -7
  35. package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -6
  36. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +1 -9
  37. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -10
  38. package/dist/lib/cjs/obsidian/components/i18n-component.cjs +4 -9
  39. package/dist/lib/cjs/obsidian/components/i18n-component.d.cts +3 -7
  40. package/dist/lib/cjs/obsidian/components/index.cjs +9 -6
  41. package/dist/lib/cjs/obsidian/components/index.d.cts +2 -1
  42. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +10 -4
  43. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +3 -3
  44. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +3 -3
  45. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +2 -3
  46. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +4 -4
  47. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +3 -3
  48. package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +3 -8
  49. package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +2 -6
  50. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -7
  51. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +2 -6
  52. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +75 -33
  53. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +73 -28
  54. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +3 -4
  55. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +2 -2
  56. package/dist/lib/cjs/obsidian/components/registry-component.cjs +180 -0
  57. package/dist/lib/cjs/obsidian/components/registry-component.d.cts +36 -0
  58. package/dist/lib/cjs/obsidian/markdown.cjs +2 -3
  59. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
  60. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +0 -1
  61. package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -3
  62. package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -3
  63. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -3
  64. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -2
  65. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +23 -22
  66. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +7 -3
  67. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +35 -76
  68. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +35 -36
  69. package/dist/lib/cjs/obsidian/queue.cjs +2 -2
  70. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +1 -2
  71. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +1 -1
  72. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +1 -2
  73. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +4 -2
  74. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +4 -3
  75. package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +1 -2
  76. package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +1 -2
  77. package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +1 -3
  78. package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +1 -2
  79. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +4 -2
  80. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +4 -3
  81. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +1 -2
  82. package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +1 -3
  83. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +4 -2
  84. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +4 -3
  85. package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +1 -2
  86. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +1 -1
  87. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +1 -2
  88. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +4 -2
  89. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +4 -3
  90. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +4 -2
  91. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +4 -3
  92. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +4 -2
  93. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +1 -2
  94. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +1 -1
  95. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -2
  96. package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +1 -2
  97. package/dist/lib/cjs/obsidian/setting-ex.cjs +3 -1
  98. package/dist/lib/cjs/obsidian/setting-ex.d.cts +2 -0
  99. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +8 -2
  100. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +10 -1
  101. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +3 -0
  102. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +7 -1
  103. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +184 -0
  104. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
  105. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +242 -0
  106. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +5 -0
  107. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +222 -0
  108. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +4 -0
  109. package/dist/lib/cjs/transformers/group-transformer.cjs +1 -3
  110. package/dist/lib/esm/async-events.d.mts +259 -24
  111. package/dist/lib/esm/async-events.mjs +179 -31
  112. package/dist/lib/esm/async.mjs +6 -3
  113. package/dist/lib/esm/error.mjs +6 -7
  114. package/dist/lib/esm/function.d.mts +6 -0
  115. package/dist/lib/esm/function.mjs +5 -2
  116. package/dist/lib/esm/library.mjs +1 -1
  117. package/dist/lib/esm/object-utils.d.mts +2 -0
  118. package/dist/lib/esm/object-utils.mjs +1 -1
  119. package/dist/lib/esm/obsidian/active-file-provider.d.mts +0 -1
  120. package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
  121. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +1 -1
  122. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +2 -4
  123. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +3 -3
  124. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +4 -5
  125. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +2 -1
  126. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +4 -4
  127. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +1 -1
  128. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +2 -3
  129. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +1 -6
  130. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +1 -6
  131. package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +2 -6
  132. package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +3 -8
  133. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +2 -2
  134. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +3 -3
  135. package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +2 -6
  136. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -8
  137. package/dist/lib/esm/obsidian/components/async-events-component.d.mts +1 -18
  138. package/dist/lib/esm/obsidian/components/async-events-component.mjs +2 -19
  139. package/dist/lib/esm/obsidian/components/component-ex.d.mts +55 -0
  140. package/dist/lib/esm/obsidian/components/component-ex.mjs +130 -0
  141. package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -6
  142. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +3 -7
  143. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -10
  144. package/dist/lib/esm/obsidian/components/disposable-component.mjs +1 -8
  145. package/dist/lib/esm/obsidian/components/i18n-component.d.mts +3 -7
  146. package/dist/lib/esm/obsidian/components/i18n-component.mjs +4 -9
  147. package/dist/lib/esm/obsidian/components/index.d.mts +2 -1
  148. package/dist/lib/esm/obsidian/components/index.mjs +6 -4
  149. package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +3 -3
  150. package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +10 -4
  151. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +2 -3
  152. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +3 -3
  153. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +3 -3
  154. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +4 -4
  155. package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +2 -6
  156. package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +3 -8
  157. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +2 -6
  158. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -7
  159. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +73 -28
  160. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +75 -33
  161. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +2 -2
  162. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +3 -4
  163. package/dist/lib/esm/obsidian/components/registry-component.d.mts +36 -0
  164. package/dist/lib/esm/obsidian/components/registry-component.mjs +72 -0
  165. package/dist/lib/esm/obsidian/markdown.mjs +2 -3
  166. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +0 -1
  167. package/dist/lib/esm/obsidian/modals/alert.mjs +1 -3
  168. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -3
  169. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -3
  170. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -2
  171. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +7 -3
  172. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +24 -23
  173. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +35 -36
  174. package/dist/lib/esm/obsidian/plugin/plugin.mjs +35 -77
  175. package/dist/lib/esm/obsidian/queue.mjs +6 -3
  176. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +1 -2
  177. package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +1 -2
  178. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +1 -1
  179. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +4 -3
  180. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +4 -2
  181. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +1 -2
  182. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +1 -2
  183. package/dist/lib/esm/obsidian/setting-components/file-component.mjs +1 -3
  184. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +1 -2
  185. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +4 -3
  186. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +4 -2
  187. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +1 -2
  188. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +1 -3
  189. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +4 -3
  190. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +4 -2
  191. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +1 -2
  192. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +1 -2
  193. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +1 -1
  194. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +4 -3
  195. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +4 -2
  196. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +4 -3
  197. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +4 -2
  198. package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +1 -2
  199. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +4 -2
  200. package/dist/lib/esm/obsidian/setting-components/value-component-with-change-tracking.d.mts +1 -2
  201. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +1 -2
  202. package/dist/lib/esm/obsidian/setting-ex.d.mts +2 -0
  203. package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
  204. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +8 -2
  205. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +3 -0
  206. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +7 -1
  207. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +7 -1
  208. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
  209. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +75 -0
  210. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +5 -0
  211. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +131 -0
  212. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +4 -0
  213. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +112 -0
  214. package/dist/lib/esm/transformers/group-transformer.mjs +1 -3
  215. package/obsidian/Components/component-ex/package.json +6 -0
  216. package/obsidian/Components/registry-component/package.json +6 -0
  217. package/package.json +21 -20
  218. package/script-utils/linters/eslint-rules/prefer-noop-async/package.json +6 -0
  219. package/script-utils/linters/eslint-rules/require-component-suffix/package.json +6 -0
  220. package/script-utils/linters/eslint-rules/require-method-template/package.json +6 -0
  221. package/dist/lib/cjs/obsidian/components/async-component.cjs +0 -182
  222. package/dist/lib/cjs/obsidian/components/async-component.d.cts +0 -43
  223. package/dist/lib/esm/obsidian/components/async-component.d.mts +0 -43
  224. package/dist/lib/esm/obsidian/components/async-component.mjs +0 -72
  225. package/obsidian/Components/async-component/package.json +0 -6
@@ -0,0 +1,75 @@
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 initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ const MESSAGE_ID = "preferNoopAsync";
25
+ const preferNoopAsync = {
26
+ create(context) {
27
+ return {
28
+ "CallExpression"(node) {
29
+ const callNode = node;
30
+ if (!checkIsPromiseResolveWithNoArgs(callNode)) {
31
+ return;
32
+ }
33
+ context.report({
34
+ fix(fixer) {
35
+ return fixer.replaceText(node, "noopAsync()");
36
+ },
37
+ messageId: MESSAGE_ID,
38
+ node
39
+ });
40
+ }
41
+ };
42
+ },
43
+ meta: {
44
+ docs: {
45
+ description: "Prefer `noopAsync()` over `Promise.resolve()`"
46
+ },
47
+ fixable: "code",
48
+ messages: {
49
+ [MESSAGE_ID]: "Use `noopAsync()` instead of `Promise.resolve()` for async no-ops."
50
+ },
51
+ schema: [],
52
+ type: "suggestion"
53
+ }
54
+ };
55
+ function checkIsPromiseResolveWithNoArgs(node) {
56
+ if (node.arguments.length > 0) {
57
+ return false;
58
+ }
59
+ const callee = node.callee;
60
+ if (callee.type !== "MemberExpression") {
61
+ return false;
62
+ }
63
+ if (callee.object.type !== "Identifier" || callee.object.name !== "Promise") {
64
+ return false;
65
+ }
66
+ if (callee.property.type !== "Identifier" || callee.property.name !== "resolve") {
67
+ return false;
68
+ }
69
+ return true;
70
+ }
71
+ export {
72
+ MESSAGE_ID,
73
+ preferNoopAsync
74
+ };
75
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItbm9vcC1hc3luYy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBwcmVmZXItbm9vcC1hc3luY1xuICpcbiAqIFJlcG9ydHMgYGF3YWl0IFByb21pc2UucmVzb2x2ZSgpYCBhbmQgc3VnZ2VzdHMgcmVwbGFjaW5nIGl0IHdpdGhcbiAqIGBhd2FpdCBub29wQXN5bmMoKWAgZm9yIGNvbnNpc3RlbmN5IGFuZCByZWFkYWJpbGl0eS5cbiAqXG4gKiBgbm9vcEFzeW5jKClgIGZyb20gdGhlIHByb2plY3QncyBgZnVuY3Rpb24udHNgIG1vZHVsZSBpcyB0aGUgY29udmVudGlvbmFsXG4gKiB3YXkgdG8gZXhwcmVzcyBhbiBpbnRlbnRpb25hbCBhc3luYyBuby1vcC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdwcmVmZXJOb29wQXN5bmMnO1xuXG5leHBvcnQgY29uc3QgcHJlZmVyTm9vcEFzeW5jOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gbm9kZSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcblxuICAgICAgICBpZiAoIWNoZWNrSXNQcm9taXNlUmVzb2x2ZVdpdGhOb0FyZ3MoY2FsbE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsICdub29wQXN5bmMoKScpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlZmVyIGBub29wQXN5bmMoKWAgb3ZlciBgUHJvbWlzZS5yZXNvbHZlKClgJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdVc2UgYG5vb3BBc3luYygpYCBpbnN0ZWFkIG9mIGBQcm9taXNlLnJlc29sdmUoKWAgZm9yIGFzeW5jIG5vLW9wcy4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCBleHByZXNzaW9uIGlzIGBQcm9taXNlLnJlc29sdmUoKWAgd2l0aCBubyBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbCBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYFByb21pc2UucmVzb2x2ZSgpYCB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJc1Byb21pc2VSZXNvbHZlV2l0aE5vQXJncyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIGlmIChjYWxsZWUudHlwZSAhPT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgaWYgKGNhbGxlZS5vYmplY3QudHlwZSAhPT0gJ0lkZW50aWZpZXInIHx8IGNhbGxlZS5vYmplY3QubmFtZSAhPT0gJ1Byb21pc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgaWYgKGNhbGxlZS5wcm9wZXJ0eS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT09ICdyZXNvbHZlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjTyxNQUFNLGFBQWE7QUFFbkIsTUFBTSxrQkFBbUM7QUFBQSxFQUM5QyxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBdUI7QUFDdEMsY0FBTSxXQUFXO0FBRWpCLFlBQUksQ0FBQyxnQ0FBZ0MsUUFBUSxHQUFHO0FBQzlDO0FBQUEsUUFDRjtBQUVBLGdCQUFRLE9BQU87QUFBQSxVQUNiLElBQUksT0FBTztBQUNULG1CQUFPLE1BQU0sWUFBWSxNQUFNLGFBQWE7QUFBQSxVQUM5QztBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFRQSxTQUFTLGdDQUFnQyxNQUF3QztBQUMvRSxNQUFJLEtBQUssVUFBVSxTQUFTLEdBQUc7QUFDN0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsS0FBSztBQUdwQixNQUFJLE9BQU8sU0FBUyxvQkFBb0I7QUFDdEMsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFJLE9BQU8sT0FBTyxTQUFTLGdCQUFnQixPQUFPLE9BQU8sU0FBUyxXQUFXO0FBQzNFLFdBQU87QUFBQSxFQUNUO0FBR0EsTUFBSSxPQUFPLFNBQVMsU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLFNBQVMsV0FBVztBQUMvRSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,5 @@
1
+ import type { Rule } from 'eslint';
2
+ export declare const MESSAGE_ID_MISSING_SUFFIX = "requireComponentSuffix";
3
+ export declare const MESSAGE_ID_ABSTRACT_NEEDS_BASE = "abstractNeedsComponentBase";
4
+ export declare const MESSAGE_ID_BASE_NOT_ABSTRACT = "componentBaseNotAbstract";
5
+ export declare const requireComponentSuffix: Rule.RuleModule;
@@ -0,0 +1,131 @@
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 initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ const MESSAGE_ID_MISSING_SUFFIX = "requireComponentSuffix";
25
+ const MESSAGE_ID_ABSTRACT_NEEDS_BASE = "abstractNeedsComponentBase";
26
+ const MESSAGE_ID_BASE_NOT_ABSTRACT = "componentBaseNotAbstract";
27
+ const EXCLUDED_ANCESTORS = /* @__PURE__ */ new Set(["HoverPopover", "MarkdownRenderChild", "Menu", "Plugin", "QueryController", "View"]);
28
+ const REQUIRED_ANCESTOR = "Component";
29
+ const requireComponentSuffix = {
30
+ create(context) {
31
+ const services = context.sourceCode.parserServices;
32
+ const checker = services.program.getTypeChecker();
33
+ return {
34
+ "ClassDeclaration[id]"(node) {
35
+ checkClass(context, services, checker, node);
36
+ },
37
+ "ClassExpression[id]"(node) {
38
+ checkClass(context, services, checker, node);
39
+ }
40
+ };
41
+ },
42
+ meta: {
43
+ docs: {
44
+ description: "Require classes extending `Component` to have names ending with `Component`"
45
+ },
46
+ messages: {
47
+ [MESSAGE_ID_ABSTRACT_NEEDS_BASE]: "Abstract class `{{ className }}` extends `Component` but its name does not end with `ComponentBase`.",
48
+ [MESSAGE_ID_BASE_NOT_ABSTRACT]: "Class `{{ className }}` ends with `ComponentBase` but is not abstract. Only abstract classes may use the `ComponentBase` suffix.",
49
+ [MESSAGE_ID_MISSING_SUFFIX]: "Class `{{ className }}` extends `Component` but its name does not end with `Component`."
50
+ },
51
+ schema: [],
52
+ type: "problem"
53
+ }
54
+ };
55
+ function checkClass(context, services, checker, node) {
56
+ const classNode = node;
57
+ const classId = classNode.id;
58
+ if (!classId) {
59
+ return;
60
+ }
61
+ const className = classId.name;
62
+ const { abstract: isAbstract } = classNode;
63
+ const endsWithComponentBase = className.endsWith("ComponentBase");
64
+ const endsWithComponent = !endsWithComponentBase && className.endsWith("Component");
65
+ if (endsWithComponent && !isAbstract) {
66
+ return;
67
+ }
68
+ if (endsWithComponentBase && isAbstract) {
69
+ return;
70
+ }
71
+ const tsNode = services.esTreeNodeToTSNodeMap.get(classNode);
72
+ const classType = checker.getTypeAtLocation(tsNode);
73
+ const ancestors = collectAncestorNames(classType);
74
+ if (!ancestors.has(REQUIRED_ANCESTOR)) {
75
+ return;
76
+ }
77
+ for (const excluded of EXCLUDED_ANCESTORS) {
78
+ if (ancestors.has(excluded)) {
79
+ return;
80
+ }
81
+ }
82
+ if (endsWithComponentBase && !isAbstract) {
83
+ context.report({
84
+ data: { className },
85
+ messageId: MESSAGE_ID_BASE_NOT_ABSTRACT,
86
+ node
87
+ });
88
+ } else if (isAbstract) {
89
+ context.report({
90
+ data: { className },
91
+ messageId: MESSAGE_ID_ABSTRACT_NEEDS_BASE,
92
+ node
93
+ });
94
+ } else {
95
+ context.report({
96
+ data: { className },
97
+ messageId: MESSAGE_ID_MISSING_SUFFIX,
98
+ node
99
+ });
100
+ }
101
+ }
102
+ function collectAncestorNames(type) {
103
+ const names = /* @__PURE__ */ new Set();
104
+ const visited = /* @__PURE__ */ new Set();
105
+ walkAncestors(type, names, visited);
106
+ return names;
107
+ function walkAncestors(currentType, collectedNames, visitedTypes) {
108
+ if (visitedTypes.has(currentType)) {
109
+ return;
110
+ }
111
+ visitedTypes.add(currentType);
112
+ const baseTypes = currentType.getBaseTypes?.();
113
+ if (!baseTypes) {
114
+ return;
115
+ }
116
+ for (const baseType of baseTypes) {
117
+ const symbol = baseType.getSymbol();
118
+ if (symbol) {
119
+ collectedNames.add(symbol.getName());
120
+ }
121
+ walkAncestors(baseType, collectedNames, visitedTypes);
122
+ }
123
+ }
124
+ }
125
+ export {
126
+ MESSAGE_ID_ABSTRACT_NEEDS_BASE,
127
+ MESSAGE_ID_BASE_NOT_ABSTRACT,
128
+ MESSAGE_ID_MISSING_SUFFIX,
129
+ requireComponentSuffix
130
+ };
131
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcmVxdWlyZS1jb21wb25lbnQtc3VmZml4XG4gKlxuICogUmVwb3J0cyBhbiBlcnJvciB3aGVuIGEgY2xhc3MgdGhhdCBleHRlbmRzIGBDb21wb25lbnRgIChmcm9tIE9ic2lkaWFuLFxuICogZGlyZWN0bHkgb3IgdHJhbnNpdGl2ZWx5KSBkb2VzIG5vdCBoYXZlIGEgbmFtZSBlbmRpbmcgd2l0aCBgQ29tcG9uZW50YFxuICogKG9yIGBDb21wb25lbnRCYXNlYCBmb3IgYWJzdHJhY3QgYmFzZSBjbGFzc2VzKS5cbiAqXG4gKiBDbGFzc2VzIHdob3NlIGluaGVyaXRhbmNlIGNoYWluIGluY2x1ZGVzIGFueSBvZiB0aGUgT2JzaWRpYW4gZnJhbWV3b3JrXG4gKiBjbGFzc2VzIHRoYXQgZXh0ZW5kIGBDb21wb25lbnRgIChlLmcuIGBQbHVnaW5gLCBgVmlld2AsXG4gKiBgTWFya2Rvd25SZW5kZXJDaGlsZGAsIGBNZW51YCwgYEhvdmVyUG9wb3ZlcmAsIGBRdWVyeUNvbnRyb2xsZXJgKVxuICogYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleSBmb2xsb3cgT2JzaWRpYW4ncyBvd24gbmFtaW5nIGNvbnZlbnRpb25zLlxuICpcbiAqIFRoZSBydWxlIHVzZXMgdGhlIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHRvIHdhbGsgdGhlIGZ1bGwgaW5oZXJpdGFuY2VcbiAqIGNoYWluLCBzbyBpdCB3b3JrcyByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGludGVybWVkaWF0ZSBjbGFzc2VzIHNpdFxuICogYmV0d2VlbiB0aGUgdXNlcidzIGNsYXNzIGFuZCBgQ29tcG9uZW50YC5cbiAqL1xuaW1wb3J0IHR5cGUge1xuICBQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb24sXG4gIFRTRVNUcmVlXG59IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYID0gJ3JlcXVpcmVDb21wb25lbnRTdWZmaXgnO1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfQUJTVFJBQ1RfTkVFRFNfQkFTRSA9ICdhYnN0cmFjdE5lZWRzQ29tcG9uZW50QmFzZSc7XG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9CQVNFX05PVF9BQlNUUkFDVCA9ICdjb21wb25lbnRCYXNlTm90QWJzdHJhY3QnO1xuXG4vKiogQW5jZXN0b3IgY2xhc3MgbmFtZXMgdGhhdCBvcHQgYSBzdWJ0cmVlIG91dCBvZiB0aGUgc3VmZml4IHJlcXVpcmVtZW50LiAqL1xuY29uc3QgRVhDTFVERURfQU5DRVNUT1JTID0gbmV3IFNldChbJ0hvdmVyUG9wb3ZlcicsICdNYXJrZG93blJlbmRlckNoaWxkJywgJ01lbnUnLCAnUGx1Z2luJywgJ1F1ZXJ5Q29udHJvbGxlcicsICdWaWV3J10pO1xuXG4vKiogVGhlIGFuY2VzdG9yIGNsYXNzIG5hbWUgdGhhdCB0cmlnZ2VycyB0aGUgc3VmZml4IHJlcXVpcmVtZW50LiAqL1xuY29uc3QgUkVRVUlSRURfQU5DRVNUT1IgPSAnQ29tcG9uZW50JztcblxuaW50ZXJmYWNlIFR5cGVXaXRoQmFzZVR5cGVzIHtcbiAgZ2V0QmFzZVR5cGVzPygpOiBUeXBlW10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCByZXF1aXJlQ29tcG9uZW50U3VmZml4OiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBjb250ZXh0LnNvdXJjZUNvZGUucGFyc2VyU2VydmljZXMgYXMgUGFyc2VyU2VydmljZXNXaXRoVHlwZUluZm9ybWF0aW9uO1xuICAgIGNvbnN0IGNoZWNrZXIgPSBzZXJ2aWNlcy5wcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0NsYXNzRGVjbGFyYXRpb25baWRdJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY2hlY2tDbGFzcyhjb250ZXh0LCBzZXJ2aWNlcywgY2hlY2tlciwgbm9kZSk7XG4gICAgICB9LFxuICAgICAgJ0NsYXNzRXhwcmVzc2lvbltpZF0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjaGVja0NsYXNzKGNvbnRleHQsIHNlcnZpY2VzLCBjaGVja2VyLCBub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGNsYXNzZXMgZXh0ZW5kaW5nIGBDb21wb25lbnRgIHRvIGhhdmUgbmFtZXMgZW5kaW5nIHdpdGggYENvbXBvbmVudGAnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfQUJTVFJBQ1RfTkVFRFNfQkFTRV06ICdBYnN0cmFjdCBjbGFzcyBge3sgY2xhc3NOYW1lIH19YCBleHRlbmRzIGBDb21wb25lbnRgIGJ1dCBpdHMgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBgQ29tcG9uZW50QmFzZWAuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0JBU0VfTk9UX0FCU1RSQUNUXTpcbiAgICAgICAgJ0NsYXNzIGB7eyBjbGFzc05hbWUgfX1gIGVuZHMgd2l0aCBgQ29tcG9uZW50QmFzZWAgYnV0IGlzIG5vdCBhYnN0cmFjdC4gT25seSBhYnN0cmFjdCBjbGFzc2VzIG1heSB1c2UgdGhlIGBDb21wb25lbnRCYXNlYCBzdWZmaXguJyxcbiAgICAgIFtNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYXTogJ0NsYXNzIGB7eyBjbGFzc05hbWUgfX1gIGV4dGVuZHMgYENvbXBvbmVudGAgYnV0IGl0cyBuYW1lIGRvZXMgbm90IGVuZCB3aXRoIGBDb21wb25lbnRgLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIGEgc2luZ2xlIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBzZXJ2aWNlcyAtIFRoZSBwYXJzZXIgc2VydmljZXMgd2l0aCB0eXBlIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNoZWNrZXIgLSBUaGUgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjbGFzcyBBU1Qgbm9kZS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzcyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgY2hlY2tlcjogUmV0dXJuVHlwZTxQYXJzZXJTZXJ2aWNlc1dpdGhUeXBlSW5mb3JtYXRpb25bJ3Byb2dyYW0nXVsnZ2V0VHlwZUNoZWNrZXInXT4sXG4gIG5vZGU6IFJ1bGUuTm9kZVxuKTogdm9pZCB7XG4gIGNvbnN0IGNsYXNzTm9kZSA9IG5vZGUgYXMgVFNFU1RyZWUuQ2xhc3NEZWNsYXJhdGlvbiB8IFRTRVNUcmVlLkNsYXNzRXhwcmVzc2lvbjtcbiAgY29uc3QgY2xhc3NJZCA9IGNsYXNzTm9kZS5pZDtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRVNMaW50IHNlbGVjdG9yIGBbaWRdYCBndWFyYW50ZWVzIGNsYXNzSWQgaXMgcHJlc2VudC4gKi9cbiAgaWYgKCFjbGFzc0lkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgY29uc3QgY2xhc3NOYW1lID0gY2xhc3NJZC5uYW1lO1xuICBjb25zdCB7IGFic3RyYWN0OiBpc0Fic3RyYWN0IH0gPSBjbGFzc05vZGU7XG4gIGNvbnN0IGVuZHNXaXRoQ29tcG9uZW50QmFzZSA9IGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29tcG9uZW50QmFzZScpO1xuICBjb25zdCBlbmRzV2l0aENvbXBvbmVudCA9ICFlbmRzV2l0aENvbXBvbmVudEJhc2UgJiYgY2xhc3NOYW1lLmVuZHNXaXRoKCdDb21wb25lbnQnKTtcblxuICAvLyBDb3JyZWN0OiBub24tYWJzdHJhY3QgZW5kaW5nIHdpdGggQ29tcG9uZW50XG4gIGlmIChlbmRzV2l0aENvbXBvbmVudCAmJiAhaXNBYnN0cmFjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENvcnJlY3Q6IGFic3RyYWN0IGVuZGluZyB3aXRoIENvbXBvbmVudEJhc2VcbiAgaWYgKGVuZHNXaXRoQ29tcG9uZW50QmFzZSAmJiBpc0Fic3RyYWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHNOb2RlID0gc2VydmljZXMuZXNUcmVlTm9kZVRvVFNOb2RlTWFwLmdldChjbGFzc05vZGUpO1xuICBjb25zdCBjbGFzc1R5cGUgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzTm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGNvbGxlY3RBbmNlc3Rvck5hbWVzKGNsYXNzVHlwZSk7XG5cbiAgaWYgKCFhbmNlc3RvcnMuaGFzKFJFUVVJUkVEX0FOQ0VTVE9SKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZXhjbHVkZWQgb2YgRVhDTFVERURfQU5DRVNUT1JTKSB7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXMoZXhjbHVkZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuZHNXaXRoQ29tcG9uZW50QmFzZSAmJiAhaXNBYnN0cmFjdCkge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIGRhdGE6IHsgY2xhc3NOYW1lIH0sXG4gICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfQkFTRV9OT1RfQUJTVFJBQ1QsXG4gICAgICBub2RlXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNBYnN0cmFjdCkge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIGRhdGE6IHsgY2xhc3NOYW1lIH0sXG4gICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfQUJTVFJBQ1RfTkVFRFNfQkFTRSxcbiAgICAgIG5vZGVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IGNsYXNzTmFtZSB9LFxuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX01JU1NJTkdfU1VGRklYLFxuICAgICAgbm9kZVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIG5hbWVzIG9mIGFsbCBhbmNlc3RvciB0eXBlcyBpbiB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uXG4gKlxuICogQHBhcmFtIHR5cGUgLSBUaGUgVHlwZVNjcmlwdCB0eXBlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcmV0dXJucyBBIHNldCBvZiBhbmNlc3RvciBjbGFzcyBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuY2VzdG9yTmFtZXModHlwZTogVHlwZSk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8VHlwZT4oKTtcblxuICB3YWxrQW5jZXN0b3JzKHR5cGUsIG5hbWVzLCB2aXNpdGVkKTtcblxuICByZXR1cm4gbmFtZXM7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBiYXNlIHR5cGVzIG9mIGEgdHlwZSwgY29sbGVjdGluZyB0aGVpciBuYW1lcy5cbiAgICpcbiAgICogQHBhcmFtIGN1cnJlbnRUeXBlIC0gVGhlIGN1cnJlbnQgdHlwZSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0gY29sbGVjdGVkTmFtZXMgLSBUaGUgc2V0IHRvIGFkZCBkaXNjb3ZlcmVkIGFuY2VzdG9yIG5hbWVzIHRvLlxuICAgKiBAcGFyYW0gdmlzaXRlZFR5cGVzIC0gVHlwZXMgYWxyZWFkeSB2aXNpdGVkLCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuICAgKi9cbiAgZnVuY3Rpb24gd2Fsa0FuY2VzdG9ycyhjdXJyZW50VHlwZTogVHlwZSwgY29sbGVjdGVkTmFtZXM6IFNldDxzdHJpbmc+LCB2aXNpdGVkVHlwZXM6IFNldDxUeXBlPik6IHZvaWQge1xuICAgIGlmICh2aXNpdGVkVHlwZXMuaGFzKGN1cnJlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpc2l0ZWRUeXBlcy5hZGQoY3VycmVudFR5cGUpO1xuXG4gICAgY29uc3QgYmFzZVR5cGVzID0gKGN1cnJlbnRUeXBlIGFzIFR5cGVXaXRoQmFzZVR5cGVzKS5nZXRCYXNlVHlwZXM/LigpO1xuXG4gICAgaWYgKCFiYXNlVHlwZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGJhc2VUeXBlIG9mIGJhc2VUeXBlcykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gYmFzZVR5cGUuZ2V0U3ltYm9sKCk7XG5cbiAgICAgIGlmIChzeW1ib2wpIHtcbiAgICAgICAgY29sbGVjdGVkTmFtZXMuYWRkKHN5bWJvbC5nZXROYW1lKCkpO1xuICAgICAgfVxuXG4gICAgICB3YWxrQW5jZXN0b3JzKGJhc2VUeXBlLCBjb2xsZWN0ZWROYW1lcywgdmlzaXRlZFR5cGVzKTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJPLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0saUNBQWlDO0FBQ3ZDLE1BQU0sK0JBQStCO0FBRzVDLE1BQU0scUJBQXFCLG9CQUFJLElBQUksQ0FBQyxnQkFBZ0IsdUJBQXVCLFFBQVEsVUFBVSxtQkFBbUIsTUFBTSxDQUFDO0FBR3ZILE1BQU0sb0JBQW9CO0FBTW5CLE1BQU0seUJBQTBDO0FBQUEsRUFDckQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxXQUFXLFFBQVEsV0FBVztBQUNwQyxVQUFNLFVBQVUsU0FBUyxRQUFRLGVBQWU7QUFFaEQsV0FBTztBQUFBLE1BQ0wsdUJBQXVCLE1BQXVCO0FBQzVDLG1CQUFXLFNBQVMsVUFBVSxTQUFTLElBQUk7QUFBQSxNQUM3QztBQUFBLE1BQ0Esc0JBQXNCLE1BQXVCO0FBQzNDLG1CQUFXLFNBQVMsVUFBVSxTQUFTLElBQUk7QUFBQSxNQUM3QztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw4QkFBOEIsR0FBRztBQUFBLE1BQ2xDLENBQUMsNEJBQTRCLEdBQzNCO0FBQUEsTUFDRixDQUFDLHlCQUF5QixHQUFHO0FBQUEsSUFDL0I7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVVBLFNBQVMsV0FDUCxTQUNBLFVBQ0EsU0FDQSxNQUNNO0FBQ04sUUFBTSxZQUFZO0FBQ2xCLFFBQU0sVUFBVSxVQUFVO0FBRzFCLE1BQUksQ0FBQyxTQUFTO0FBQ1o7QUFBQSxFQUNGO0FBR0EsUUFBTSxZQUFZLFFBQVE7QUFDMUIsUUFBTSxFQUFFLFVBQVUsV0FBVyxJQUFJO0FBQ2pDLFFBQU0sd0JBQXdCLFVBQVUsU0FBUyxlQUFlO0FBQ2hFLFFBQU0sb0JBQW9CLENBQUMseUJBQXlCLFVBQVUsU0FBUyxXQUFXO0FBR2xGLE1BQUkscUJBQXFCLENBQUMsWUFBWTtBQUNwQztBQUFBLEVBQ0Y7QUFHQSxNQUFJLHlCQUF5QixZQUFZO0FBQ3ZDO0FBQUEsRUFDRjtBQUVBLFFBQU0sU0FBUyxTQUFTLHNCQUFzQixJQUFJLFNBQVM7QUFDM0QsUUFBTSxZQUFZLFFBQVEsa0JBQWtCLE1BQU07QUFDbEQsUUFBTSxZQUFZLHFCQUFxQixTQUFTO0FBRWhELE1BQUksQ0FBQyxVQUFVLElBQUksaUJBQWlCLEdBQUc7QUFDckM7QUFBQSxFQUNGO0FBRUEsYUFBVyxZQUFZLG9CQUFvQjtBQUN6QyxRQUFJLFVBQVUsSUFBSSxRQUFRLEdBQUc7QUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLE1BQUkseUJBQXlCLENBQUMsWUFBWTtBQUN4QyxZQUFRLE9BQU87QUFBQSxNQUNiLE1BQU0sRUFBRSxVQUFVO0FBQUEsTUFDbEIsV0FBVztBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILFdBQVcsWUFBWTtBQUNyQixZQUFRLE9BQU87QUFBQSxNQUNiLE1BQU0sRUFBRSxVQUFVO0FBQUEsTUFDbEIsV0FBVztBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILE9BQU87QUFDTCxZQUFRLE9BQU87QUFBQSxNQUNiLE1BQU0sRUFBRSxVQUFVO0FBQUEsTUFDbEIsV0FBVztBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFRQSxTQUFTLHFCQUFxQixNQUF5QjtBQUNyRCxRQUFNLFFBQVEsb0JBQUksSUFBWTtBQUM5QixRQUFNLFVBQVUsb0JBQUksSUFBVTtBQUU5QixnQkFBYyxNQUFNLE9BQU8sT0FBTztBQUVsQyxTQUFPO0FBU1AsV0FBUyxjQUFjLGFBQW1CLGdCQUE2QixjQUErQjtBQUNwRyxRQUFJLGFBQWEsSUFBSSxXQUFXLEdBQUc7QUFDakM7QUFBQSxJQUNGO0FBRUEsaUJBQWEsSUFBSSxXQUFXO0FBRTVCLFVBQU0sWUFBYSxZQUFrQyxlQUFlO0FBRXBFLFFBQUksQ0FBQyxXQUFXO0FBQ2Q7QUFBQSxJQUNGO0FBRUEsZUFBVyxZQUFZLFdBQVc7QUFDaEMsWUFBTSxTQUFTLFNBQVMsVUFBVTtBQUVsQyxVQUFJLFFBQVE7QUFDVix1QkFBZSxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQUEsTUFDckM7QUFFQSxvQkFBYyxVQUFVLGdCQUFnQixZQUFZO0FBQUEsSUFDdEQ7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,4 @@
1
+ import type { Rule } from 'eslint';
2
+ export declare const MESSAGE_ID_MISSING_TEMPLATE = "missingTemplate";
3
+ export declare const MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION = "missingTemplateDescription";
4
+ export declare const requireMethodTemplate: Rule.RuleModule;
@@ -0,0 +1,112 @@
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 initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { ensureNonNullable } from "../../../type-guards.mjs";
25
+ const TAG_NAME = "typeParam";
26
+ const MESSAGE_ID_MISSING_TEMPLATE = "missingTemplate";
27
+ const MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION = "missingTemplateDescription";
28
+ const requireMethodTemplate = {
29
+ create(context) {
30
+ const settings = context.settings["jsdoc"];
31
+ const preferredTagName = settings?.tagNamePreference?.["template"] ?? TAG_NAME;
32
+ return {
33
+ "MethodDefinition"(node) {
34
+ const methodNode = node;
35
+ const functionExpr = methodNode.value;
36
+ const typeParams = functionExpr.typeParameters?.params;
37
+ if (!typeParams || typeParams.length === 0) {
38
+ return;
39
+ }
40
+ const sourceCode = context.sourceCode;
41
+ const comments = sourceCode.getCommentsBefore(node);
42
+ const jsdocComment = findJsdocComment(comments);
43
+ if (!jsdocComment) {
44
+ return;
45
+ }
46
+ const parsedTags = parseTypeParamTags(jsdocComment.value, preferredTagName);
47
+ for (const typeParam of typeParams) {
48
+ const paramName = typeParam.name.name;
49
+ const matchingTag = parsedTags.find((tag) => tag.name === paramName);
50
+ if (!matchingTag) {
51
+ context.report({
52
+ data: {
53
+ paramName,
54
+ tagName: preferredTagName
55
+ },
56
+ messageId: MESSAGE_ID_MISSING_TEMPLATE,
57
+ node
58
+ });
59
+ } else if (!matchingTag.hasDescription) {
60
+ context.report({
61
+ data: {
62
+ paramName,
63
+ tagName: preferredTagName
64
+ },
65
+ messageId: MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION,
66
+ node
67
+ });
68
+ }
69
+ }
70
+ }
71
+ };
72
+ },
73
+ meta: {
74
+ docs: {
75
+ description: "Require `@typeParam` tags with descriptions for generic method type parameters"
76
+ },
77
+ messages: {
78
+ [MESSAGE_ID_MISSING_TEMPLATE]: "Missing @{{ tagName }} {{ paramName }}",
79
+ [MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION]: "@{{ tagName }} {{ paramName }} is missing a description"
80
+ },
81
+ schema: [],
82
+ type: "suggestion"
83
+ }
84
+ };
85
+ function findJsdocComment(comments) {
86
+ for (let i = comments.length - 1; i >= 0; i--) {
87
+ const comment = comments[i];
88
+ if (comment?.type === "Block" && comment.value.startsWith("*")) {
89
+ return comment;
90
+ }
91
+ }
92
+ return void 0;
93
+ }
94
+ function parseTypeParamTags(commentBody, tagName) {
95
+ const tags = [];
96
+ const tagPattern = new RegExp(`@(?:${tagName}|template|typeParam)\\s+(?<typeName>\\w+)(?<rest>.*)`, "g");
97
+ let match;
98
+ while ((match = tagPattern.exec(commentBody)) !== null) {
99
+ const groups = ensureNonNullable(match.groups);
100
+ const name = ensureNonNullable(groups["typeName"]);
101
+ const rest = ensureNonNullable(groups["rest"]).trim();
102
+ const hasDescription = rest.length > 0 && rest !== "-";
103
+ tags.push({ hasDescription, name });
104
+ }
105
+ return tags;
106
+ }
107
+ export {
108
+ MESSAGE_ID_MISSING_TEMPLATE,
109
+ MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION,
110
+ requireMethodTemplate
111
+ };
112
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiByZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZVxuICpcbiAqIFJlcXVpcmVzIHRoYXQgZ2VuZXJpYyBtZXRob2RzIChtZXRob2RzIHdpdGggdHlwZSBwYXJhbWV0ZXJzKSBoYXZlXG4gKiBjb3JyZXNwb25kaW5nIGBAdHlwZVBhcmFtYCAob3IgYEB0ZW1wbGF0ZWApIEpTRG9jIHRhZ3MgZm9yIGVhY2ggdHlwZSBwYXJhbWV0ZXIuXG4gKlxuICogVGhpcyBmaWxscyBhIGdhcCBpbiBgZXNsaW50LXBsdWdpbi1qc2RvY2AncyBgcmVxdWlyZS10ZW1wbGF0ZWAgcnVsZSwgd2hpY2hcbiAqIG9ubHkgY2hlY2tzIHRvcC1sZXZlbCBkZWNsYXJhdGlvbnMgKGZ1bmN0aW9ucywgY2xhc3NlcywgaW50ZXJmYWNlcywgdHlwZSBhbGlhc2VzKVxuICogYnV0IG5vdCBtZXRob2RzIHdpdGhpbiBjbGFzc2VzLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nYWp1cy9lc2xpbnQtcGx1Z2luLWpzZG9jL2lzc3Vlcy8xMzg2fVxuICovXG5pbXBvcnQgdHlwZSB7IFRTRVNUcmVlIH0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7IENvbW1lbnQgfSBmcm9tICdlc3RyZWUnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEpzZG9jU2V0dGluZ3Mge1xuICB0YWdOYW1lUHJlZmVyZW5jZT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmNvbnN0IFRBR19OQU1FID0gJ3R5cGVQYXJhbSc7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfVEVNUExBVEUgPSAnbWlzc2luZ1RlbXBsYXRlJztcbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfVEVNUExBVEVfREVTQ1JJUFRJT04gPSAnbWlzc2luZ1RlbXBsYXRlRGVzY3JpcHRpb24nO1xuXG5leHBvcnQgY29uc3QgcmVxdWlyZU1ldGhvZFRlbXBsYXRlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjb250ZXh0LnNldHRpbmdzWydqc2RvYyddIGFzIEpzZG9jU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJlZmVycmVkVGFnTmFtZSA9IHNldHRpbmdzPy50YWdOYW1lUHJlZmVyZW5jZT8uWyd0ZW1wbGF0ZSddID8/IFRBR19OQU1FO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICdNZXRob2REZWZpbml0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTm9kZSA9IG5vZGUgYXMgVFNFU1RyZWUuTWV0aG9kRGVmaW5pdGlvbjtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25FeHByID0gbWV0aG9kTm9kZS52YWx1ZTtcblxuICAgICAgICBjb25zdCB0eXBlUGFyYW1zID0gZnVuY3Rpb25FeHByLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXM7XG4gICAgICAgIGlmICghdHlwZVBhcmFtcyB8fCB0eXBlUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZShub2RlKTtcbiAgICAgICAgY29uc3QganNkb2NDb21tZW50ID0gZmluZEpzZG9jQ29tbWVudChjb21tZW50cyk7XG5cbiAgICAgICAgaWYgKCFqc2RvY0NvbW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRUYWdzID0gcGFyc2VUeXBlUGFyYW1UYWdzKGpzZG9jQ29tbWVudC52YWx1ZSwgcHJlZmVycmVkVGFnTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0eXBlUGFyYW0gb2YgdHlwZVBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHR5cGVQYXJhbS5uYW1lLm5hbWU7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUYWcgPSBwYXJzZWRUYWdzLmZpbmQoKHRhZykgPT4gdGFnLm5hbWUgPT09IHBhcmFtTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoaW5nVGFnKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWUsXG4gICAgICAgICAgICAgICAgdGFnTmFtZTogcHJlZmVycmVkVGFnTmFtZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURSxcbiAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghbWF0Y2hpbmdUYWcuaGFzRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGBAdHlwZVBhcmFtYCB0YWdzIHdpdGggZGVzY3JpcHRpb25zIGZvciBnZW5lcmljIG1ldGhvZCB0eXBlIHBhcmFtZXRlcnMnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURV06ICdNaXNzaW5nIEB7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fScsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OXTogJ0B7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fSBpcyBtaXNzaW5nIGEgZGVzY3JpcHRpb24nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG5pbnRlcmZhY2UgUGFyc2VkVGFnIHtcbiAgaGFzRGVzY3JpcHRpb246IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgSlNEb2MgYmxvY2sgY29tbWVudCBmcm9tIGEgbGlzdCBvZiBjb21tZW50cy5cbiAqXG4gKiBAcGFyYW0gY29tbWVudHMgLSBUaGUgY29tbWVudHMgYmVmb3JlIHRoZSBub2RlLlxuICogQHJldHVybnMgVGhlIEpTRG9jIGJsb2NrIGNvbW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vbmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRKc2RvY0NvbW1lbnQoY29tbWVudHM6IHJlYWRvbmx5IENvbW1lbnRbXSk6IENvbW1lbnQgfCB1bmRlZmluZWQge1xuICBmb3IgKGxldCBpID0gY29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjb21tZW50ID0gY29tbWVudHNbaV07XG4gICAgaWYgKGNvbW1lbnQ/LnR5cGUgPT09ICdCbG9jaycgJiYgY29tbWVudC52YWx1ZS5zdGFydHNXaXRoKCcqJykpIHtcbiAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyc2VzIGBAdHlwZVBhcmFtYCAvIGBAdGVtcGxhdGVgIHRhZ3MgZnJvbSBhIEpTRG9jIGNvbW1lbnQgYm9keS5cbiAqXG4gKiBAcGFyYW0gY29tbWVudEJvZHkgLSBUaGUgcmF3IGNvbW1lbnQgYm9keSAod2l0aG91dCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudCBkZWxpbWl0ZXJzKS5cbiAqIEBwYXJhbSB0YWdOYW1lIC0gVGhlIHByZWZlcnJlZCB0YWcgbmFtZSAoYHR5cGVQYXJhbWAgb3IgYHRlbXBsYXRlYCkuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJzZWQgdGFnIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVHlwZVBhcmFtVGFncyhjb21tZW50Qm9keTogc3RyaW5nLCB0YWdOYW1lOiBzdHJpbmcpOiBQYXJzZWRUYWdbXSB7XG4gIGNvbnN0IHRhZ3M6IFBhcnNlZFRhZ1tdID0gW107XG4gIGNvbnN0IHRhZ1BhdHRlcm4gPSBuZXcgUmVnRXhwKGBAKD86JHt0YWdOYW1lfXx0ZW1wbGF0ZXx0eXBlUGFyYW0pXFxcXHMrKD88dHlwZU5hbWU+XFxcXHcrKSg/PHJlc3Q+LiopYCwgJ2cnKTtcblxuICBsZXQgbWF0Y2g7XG4gIHdoaWxlICgobWF0Y2ggPSB0YWdQYXR0ZXJuLmV4ZWMoY29tbWVudEJvZHkpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IGVuc3VyZU5vbk51bGxhYmxlKG1hdGNoLmdyb3Vwcyk7XG4gICAgY29uc3QgbmFtZSA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1sndHlwZU5hbWUnXSk7XG4gICAgY29uc3QgcmVzdCA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1sncmVzdCddKS50cmltKCk7XG4gICAgY29uc3QgaGFzRGVzY3JpcHRpb24gPSByZXN0Lmxlbmd0aCA+IDAgJiYgcmVzdCAhPT0gJy0nO1xuICAgIHRhZ3MucHVzaCh7IGhhc0Rlc2NyaXB0aW9uLCBuYW1lIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhZ3M7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFTLHlCQUF5QjtBQU1sQyxNQUFNLFdBQVc7QUFFVixNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLDBDQUEwQztBQUVoRCxNQUFNLHdCQUF5QztBQUFBLEVBQ3BELE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFNBQVMsT0FBTztBQUN6QyxVQUFNLG1CQUFtQixVQUFVLG9CQUFvQixVQUFVLEtBQUs7QUFFdEUsV0FBTztBQUFBLE1BQ0wsbUJBQW1CLE1BQXVCO0FBQ3hDLGNBQU0sYUFBYTtBQUNuQixjQUFNLGVBQWUsV0FBVztBQUVoQyxjQUFNLGFBQWEsYUFBYSxnQkFBZ0I7QUFDaEQsWUFBSSxDQUFDLGNBQWMsV0FBVyxXQUFXLEdBQUc7QUFDMUM7QUFBQSxRQUNGO0FBRUEsY0FBTSxhQUFhLFFBQVE7QUFDM0IsY0FBTSxXQUFXLFdBQVcsa0JBQWtCLElBQUk7QUFDbEQsY0FBTSxlQUFlLGlCQUFpQixRQUFRO0FBRTlDLFlBQUksQ0FBQyxjQUFjO0FBQ2pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxtQkFBbUIsYUFBYSxPQUFPLGdCQUFnQjtBQUUxRSxtQkFBVyxhQUFhLFlBQVk7QUFDbEMsZ0JBQU0sWUFBWSxVQUFVLEtBQUs7QUFDakMsZ0JBQU0sY0FBYyxXQUFXLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUyxTQUFTO0FBRW5FLGNBQUksQ0FBQyxhQUFhO0FBQ2hCLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQSxnQkFDSjtBQUFBLGdCQUNBLFNBQVM7QUFBQSxjQUNYO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsV0FBVyxDQUFDLFlBQVksZ0JBQWdCO0FBQ3RDLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQSxnQkFDSjtBQUFBLGdCQUNBLFNBQVM7QUFBQSxjQUNYO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQywyQkFBMkIsR0FBRztBQUFBLE1BQy9CLENBQUMsdUNBQXVDLEdBQUc7QUFBQSxJQUM3QztBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBYUEsU0FBUyxpQkFBaUIsVUFBbUQ7QUFDM0UsV0FBUyxJQUFJLFNBQVMsU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQzdDLFVBQU0sVUFBVSxTQUFTLENBQUM7QUFDMUIsUUFBSSxTQUFTLFNBQVMsV0FBVyxRQUFRLE1BQU0sV0FBVyxHQUFHLEdBQUc7QUFDOUQsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBU0EsU0FBUyxtQkFBbUIsYUFBcUIsU0FBOEI7QUFDN0UsUUFBTSxPQUFvQixDQUFDO0FBQzNCLFFBQU0sYUFBYSxJQUFJLE9BQU8sT0FBTyxPQUFPLHdEQUF3RCxHQUFHO0FBRXZHLE1BQUk7QUFDSixVQUFRLFFBQVEsV0FBVyxLQUFLLFdBQVcsT0FBTyxNQUFNO0FBQ3RELFVBQU0sU0FBUyxrQkFBa0IsTUFBTSxNQUFNO0FBQzdDLFVBQU0sT0FBTyxrQkFBa0IsT0FBTyxVQUFVLENBQUM7QUFDakQsVUFBTSxPQUFPLGtCQUFrQixPQUFPLE1BQU0sQ0FBQyxFQUFFLEtBQUs7QUFDcEQsVUFBTSxpQkFBaUIsS0FBSyxTQUFTLEtBQUssU0FBUztBQUNuRCxTQUFLLEtBQUssRUFBRSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsRUFDcEM7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -61,7 +61,6 @@ class GroupTransformer extends Transformer {
61
61
  * @param transformerId - The id of the transformer to get.
62
62
  * @returns The transformer with the given id.
63
63
  */
64
- // eslint-disable-next-line obsidian-dev-utils/require-super-call -- Intentionally replaces parent lookup with search across child transformers.
65
64
  getTransformer(transformerId) {
66
65
  return ensureNonNullable(this.transformers.find((t) => t.id === transformerId), `No transformer with id ${transformerId} found`);
67
66
  }
@@ -84,7 +83,6 @@ class GroupTransformer extends Transformer {
84
83
  * @param key - The key of the value to get the transformer id for.
85
84
  * @returns The id of the transformer that can transform the given value.
86
85
  */
87
- // eslint-disable-next-line obsidian-dev-utils/require-super-call -- Intentionally replaces parent lookup with composite transformer search.
88
86
  getTransformerId(value, key) {
89
87
  const transformer = this.getFirstTransformerThatCanTransform(value, key);
90
88
  if (transformer === null) {
@@ -114,4 +112,4 @@ class GroupTransformer extends Transformer {
114
112
  export {
115
113
  GroupTransformer
116
114
  };
117
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zZm9ybWVycy9ncm91cC10cmFuc2Zvcm1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgdHJhbnNmb3JtZXIgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSB0cmFuc2Zvcm1lcnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSAnLi90cmFuc2Zvcm1lci50cyc7XG5cbi8qKlxuICogQSB0cmFuc2Zvcm1lciB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIHRyYW5zZm9ybWVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyb3VwVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIC8qKlxuICAgKiBBbiBpZCBvZiB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIGBncm91cGAuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdncm91cCc7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm1lcnMgLSBUaGUgdHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0cmFuc2Zvcm1lcnM6IFRyYW5zZm9ybWVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGNhbiBiZSB0cmFuc2Zvcm1lZCBieSBhbnkgb2YgdGhlIHRyYW5zZm9ybWVycy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB2YWx1ZSBjYW4gYmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FuVHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0VHJhbnNmb3JtZXJUaGF0Q2FuVHJhbnNmb3JtKHZhbHVlLCBrZXkpICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRyYW5zZm9ybWVyIHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNmb3JtZXJJZCAtIFRoZSBpZCBvZiB0aGUgdHJhbnNmb3JtZXIgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3JlcXVpcmUtc3VwZXItY2FsbCAtLSBJbnRlbnRpb25hbGx5IHJlcGxhY2VzIHBhcmVudCBsb29rdXAgd2l0aCBzZWFyY2ggYWNyb3NzIGNoaWxkIHRyYW5zZm9ybWVycy5cbiAgcHVibGljIG92ZXJyaWRlIGdldFRyYW5zZm9ybWVyKHRyYW5zZm9ybWVySWQ6IHN0cmluZyk6IFRyYW5zZm9ybWVyIHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy50cmFuc2Zvcm1lcnMuZmluZCgodCkgPT4gdC5pZCA9PT0gdHJhbnNmb3JtZXJJZCksIGBObyB0cmFuc2Zvcm1lciB3aXRoIGlkICR7dHJhbnNmb3JtZXJJZH0gZm91bmRgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSB2YWx1ZSB1c2luZyB0aGUgZmlyc3QgdHJhbnNmb3JtZXIgdGhhdCBjYW4gdHJhbnNmb3JtIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdHJhbnNmb3JtLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gdHJhbnNmb3JtLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdHJhbnNmb3JtVmFsdWUodmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSB0aGlzLmdldEZpcnN0VHJhbnNmb3JtZXJUaGF0Q2FuVHJhbnNmb3JtKHZhbHVlLCBrZXkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHRyYW5zZm9ybWVyLCAnTm8gdHJhbnNmb3JtZXIgY2FuIHRyYW5zZm9ybSB0aGUgdmFsdWUnKTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1lci50cmFuc2Zvcm1WYWx1ZSh2YWx1ZSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpZCBvZiB0aGUgdHJhbnNmb3JtZXIgdGhhdCBjYW4gdHJhbnNmb3JtIHRoZSBnaXZlbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGdldCB0aGUgdHJhbnNmb3JtZXIgaWQgZm9yLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0IHRoZSB0cmFuc2Zvcm1lciBpZCBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiB0aGUgdHJhbnNmb3JtZXIgdGhhdCBjYW4gdHJhbnNmb3JtIHRoZSBnaXZlbiB2YWx1ZS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1zdXBlci1jYWxsIC0tIEludGVudGlvbmFsbHkgcmVwbGFjZXMgcGFyZW50IGxvb2t1cCB3aXRoIGNvbXBvc2l0ZSB0cmFuc2Zvcm1lciBzZWFyY2guXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1lcklkKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gdGhpcy5nZXRGaXJzdFRyYW5zZm9ybWVyVGhhdENhblRyYW5zZm9ybSh2YWx1ZSwga2V5KTtcbiAgICBpZiAodHJhbnNmb3JtZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lci5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHRyYW5zZm9ybWVyIGRvZXMgbm90IHN1cHBvcnQgcmVzdG9yaW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHRocm93c1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlc3RvcmVWYWx1ZSgpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHcm91cFRyYW5zZm9ybWVyIGRvZXMgbm90IHN1cHBvcnQgcmVzdG9yaW5nIHZhbHVlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZpcnN0IHRyYW5zZm9ybWVyIHRoYXQgY2FuIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBnZXQgdGhlIGZpcnN0IHRyYW5zZm9ybWVyIGZvci5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldCB0aGUgZmlyc3QgdHJhbnNmb3JtZXIgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgdHJhbnNmb3JtZXIgdGhhdCBjYW4gdHJhbnNmb3JtIHRoZSBnaXZlbiB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rmlyc3RUcmFuc2Zvcm1lclRoYXRDYW5UcmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nKTogbnVsbCB8IFRyYW5zZm9ybWVyIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1lcnMuZmluZCgodCkgPT4gdC5jYW5UcmFuc2Zvcm0odmFsdWUsIGtleSkpID8/IG51bGw7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQUtyQixNQUFNLHlCQUF5QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZXpDLFlBQTZCLGNBQTZCO0FBQy9ELFVBQU07QUFENEI7QUFBQSxFQUVwQztBQUFBLEVBRm9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVHBDLElBQW9CLEtBQWE7QUFDL0IsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0JnQixhQUFhLE9BQWdCLEtBQXNCO0FBQ2pFLFdBQU8sS0FBSyxvQ0FBb0MsT0FBTyxHQUFHLE1BQU07QUFBQSxFQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTZ0IsZUFBZSxlQUFvQztBQUNqRSxXQUFPLGtCQUFrQixLQUFLLGFBQWEsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLGFBQWEsR0FBRywwQkFBMEIsYUFBYSxRQUFRO0FBQUEsRUFDakk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2dCLGVBQWUsT0FBZ0IsS0FBc0I7QUFDbkUsVUFBTSxjQUFjLEtBQUssb0NBQW9DLE9BQU8sR0FBRztBQUN2RSxzQkFBa0IsYUFBYSx3Q0FBd0M7QUFFdkUsV0FBTyxZQUFZLGVBQWUsT0FBTyxHQUFHO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVbUIsaUJBQWlCLE9BQWdCLEtBQTRCO0FBQzlFLFVBQU0sY0FBYyxLQUFLLG9DQUFvQyxPQUFPLEdBQUc7QUFDdkUsUUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sWUFBWTtBQUFBLEVBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLGVBQXNCO0FBQ3ZDLFVBQU0sSUFBSSxNQUFNLG9EQUFvRDtBQUFBLEVBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNRLG9DQUFvQyxPQUFnQixLQUFpQztBQUMzRixXQUFPLEtBQUssYUFBYSxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsT0FBTyxHQUFHLENBQUMsS0FBSztBQUFBLEVBQ3RFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zZm9ybWVycy9ncm91cC10cmFuc2Zvcm1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgdHJhbnNmb3JtZXIgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSB0cmFuc2Zvcm1lcnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSAnLi90cmFuc2Zvcm1lci50cyc7XG5cbi8qKlxuICogQSB0cmFuc2Zvcm1lciB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIHRyYW5zZm9ybWVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyb3VwVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIC8qKlxuICAgKiBBbiBpZCBvZiB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIGBncm91cGAuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdncm91cCc7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm1lcnMgLSBUaGUgdHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0cmFuc2Zvcm1lcnM6IFRyYW5zZm9ybWVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGNhbiBiZSB0cmFuc2Zvcm1lZCBieSBhbnkgb2YgdGhlIHRyYW5zZm9ybWVycy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB2YWx1ZSBjYW4gYmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FuVHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0VHJhbnNmb3JtZXJUaGF0Q2FuVHJhbnNmb3JtKHZhbHVlLCBrZXkpICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRyYW5zZm9ybWVyIHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNmb3JtZXJJZCAtIFRoZSBpZCBvZiB0aGUgdHJhbnNmb3JtZXIgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtZXIodHJhbnNmb3JtZXJJZDogc3RyaW5nKTogVHJhbnNmb3JtZXIge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnRyYW5zZm9ybWVycy5maW5kKCh0KSA9PiB0LmlkID09PSB0cmFuc2Zvcm1lcklkKSwgYE5vIHRyYW5zZm9ybWVyIHdpdGggaWQgJHt0cmFuc2Zvcm1lcklkfSBmb3VuZGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIHZhbHVlIHVzaW5nIHRoZSBmaXJzdCB0cmFuc2Zvcm1lciB0aGF0IGNhbiB0cmFuc2Zvcm0gaXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0cmFuc2Zvcm0uXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byB0cmFuc2Zvcm0uXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB0cmFuc2Zvcm1WYWx1ZSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IHRoaXMuZ2V0Rmlyc3RUcmFuc2Zvcm1lclRoYXRDYW5UcmFuc2Zvcm0odmFsdWUsIGtleSk7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUodHJhbnNmb3JtZXIsICdObyB0cmFuc2Zvcm1lciBjYW4gdHJhbnNmb3JtIHRoZSB2YWx1ZScpO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVyLnRyYW5zZm9ybVZhbHVlKHZhbHVlLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlkIG9mIHRoZSB0cmFuc2Zvcm1lciB0aGF0IGNhbiB0cmFuc2Zvcm0gdGhlIGdpdmVuIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSB0cmFuc2Zvcm1lciBpZCBmb3IuXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQgdGhlIHRyYW5zZm9ybWVyIGlkIGZvci5cbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSB0cmFuc2Zvcm1lciB0aGF0IGNhbiB0cmFuc2Zvcm0gdGhlIGdpdmVuIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWVySWQodmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSB0aGlzLmdldEZpcnN0VHJhbnNmb3JtZXJUaGF0Q2FuVHJhbnNmb3JtKHZhbHVlLCBrZXkpO1xuICAgIGlmICh0cmFuc2Zvcm1lciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVyLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgdHJhbnNmb3JtZXIgZG9lcyBub3Qgc3VwcG9ydCByZXN0b3JpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBAdGhyb3dzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVzdG9yZVZhbHVlKCk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyb3VwVHJhbnNmb3JtZXIgZG9lcyBub3Qgc3VwcG9ydCByZXN0b3JpbmcgdmFsdWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlyc3QgdHJhbnNmb3JtZXIgdGhhdCBjYW4gdHJhbnNmb3JtIHRoZSBnaXZlbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGdldCB0aGUgZmlyc3QgdHJhbnNmb3JtZXIgZm9yLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0IHRoZSBmaXJzdCB0cmFuc2Zvcm1lciBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCB0cmFuc2Zvcm1lciB0aGF0IGNhbiB0cmFuc2Zvcm0gdGhlIGdpdmVuIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdFRyYW5zZm9ybWVyVGhhdENhblRyYW5zZm9ybSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiBudWxsIHwgVHJhbnNmb3JtZXIge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybWVycy5maW5kKCh0KSA9PiB0LmNhblRyYW5zZm9ybSh2YWx1ZSwga2V5KSkgPz8gbnVsbDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBS3JCLE1BQU0seUJBQXlCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFlekMsWUFBNkIsY0FBNkI7QUFDL0QsVUFBTTtBQUQ0QjtBQUFBLEVBRXBDO0FBQUEsRUFGb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFUcEMsSUFBb0IsS0FBYTtBQUMvQixXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrQmdCLGFBQWEsT0FBZ0IsS0FBc0I7QUFDakUsV0FBTyxLQUFLLG9DQUFvQyxPQUFPLEdBQUcsTUFBTTtBQUFBLEVBQ2xFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRZ0IsZUFBZSxlQUFvQztBQUNqRSxXQUFPLGtCQUFrQixLQUFLLGFBQWEsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLGFBQWEsR0FBRywwQkFBMEIsYUFBYSxRQUFRO0FBQUEsRUFDakk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2dCLGVBQWUsT0FBZ0IsS0FBc0I7QUFDbkUsVUFBTSxjQUFjLEtBQUssb0NBQW9DLE9BQU8sR0FBRztBQUN2RSxzQkFBa0IsYUFBYSx3Q0FBd0M7QUFFdkUsV0FBTyxZQUFZLGVBQWUsT0FBTyxHQUFHO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU21CLGlCQUFpQixPQUFnQixLQUE0QjtBQUM5RSxVQUFNLGNBQWMsS0FBSyxvQ0FBb0MsT0FBTyxHQUFHO0FBQ3ZFLFFBQUksZ0JBQWdCLE1BQU07QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLFlBQVk7QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9tQixlQUFzQjtBQUN2QyxVQUFNLElBQUksTUFBTSxvREFBb0Q7QUFBQSxFQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTUSxvQ0FBb0MsT0FBZ0IsS0FBaUM7QUFDM0YsV0FBTyxLQUFLLGFBQWEsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLE9BQU8sR0FBRyxDQUFDLEtBQUs7QUFBQSxFQUN0RTtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/obsidian/components/component-ex.cjs",
3
+ "module": "../../../dist/lib/esm/obsidian/components/component-ex.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/obsidian/components/component-ex.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/obsidian/components/registry-component.cjs",
3
+ "module": "../../../dist/lib/esm/obsidian/components/registry-component.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/obsidian/components/registry-component.d.cts"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "66.0.1",
3
+ "version": "68.0.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
5
5
  "keywords": [
6
6
  "obsidian"
@@ -640,6 +640,8 @@
640
640
  "version": "jiti scripts/version.ts"
641
641
  },
642
642
  "overrides": {
643
+ "@typescript-eslint/eslint-plugin": "$@typescript-eslint/eslint-plugin",
644
+ "@typescript-eslint/parser": "$@typescript-eslint/parser",
643
645
  "eslint": "$eslint",
644
646
  "typescript": "$typescript"
645
647
  },
@@ -651,36 +653,36 @@
651
653
  "@eslint/config-helpers": "^0.6.0",
652
654
  "@eslint/js": "^10.0.1",
653
655
  "@lezer/common": "1.2.3",
654
- "@obsidian-typings/obsidian-public-latest": "^6.3.0",
656
+ "@obsidian-typings/obsidian-public-latest": "^6.10.0",
655
657
  "@stylistic/eslint-plugin": "^5.10.0",
656
658
  "@tsconfig/strictest": "^2.0.8",
657
659
  "@types/babel__core": "^7.20.5",
658
660
  "@types/doctrine": "^0.0.9",
659
661
  "@types/eslint": "^9.6.1",
660
662
  "@types/luxon": "^3.7.1",
661
- "@types/node": "^25.8.0",
663
+ "@types/node": "^25.9.1",
662
664
  "@types/parsimmon": "^1.10.9",
663
665
  "@types/path-browserify": "^1.0.3",
664
666
  "@types/picomatch": "^4.0.3",
665
667
  "@types/pug": "^2.0.10",
666
- "@types/react": "^19.2.14",
668
+ "@types/react": "^19.2.15",
667
669
  "@types/semver": "^7.7.1",
668
670
  "@types/shell-quote": "^1.7.5",
669
- "@typescript-eslint/eslint-plugin": "^8.59.3",
670
- "@typescript-eslint/parser": "^8.59.3",
671
+ "@typescript-eslint/eslint-plugin": "^8.59.4",
672
+ "@typescript-eslint/parser": "^8.59.4",
671
673
  "commander": "^14.0.3",
672
674
  "compare-versions": "^6.1.1",
673
675
  "cspell": "^10.0.0",
674
676
  "debug": "^4.4.3",
675
677
  "dprint": "^0.54.0",
676
- "enhanced-resolve": "^5.21.3",
678
+ "enhanced-resolve": "^5.22.0",
677
679
  "esbuild": "^0.28.0",
678
680
  "esbuild-sass-plugin": "^3.7.0",
679
681
  "esbuild-svelte": "^0.9.5",
680
682
  "eslint": "^10.4.0",
681
683
  "eslint-import-resolver-typescript": "^4.4.4",
682
684
  "eslint-plugin-import-x": "^4.16.2",
683
- "eslint-plugin-jsdoc": "^62.9.0",
685
+ "eslint-plugin-jsdoc": "^63.0.0",
684
686
  "eslint-plugin-no-unsanitized": "^4.1.5",
685
687
  "eslint-plugin-obsidianmd": "^0.3.0",
686
688
  "eslint-plugin-perfectionist": "^5.9.0",
@@ -690,30 +692,29 @@
690
692
  "jiti": "^2.7.0",
691
693
  "linkinator": "^7.6.1",
692
694
  "localforage": "^1.10.0",
693
- "lru-cache": "^11.3.6",
695
+ "lru-cache": "^11.5.0",
694
696
  "markdownlint": "^0.40.0",
695
697
  "markdownlint-cli2": "^0.22.1",
696
698
  "markdownlint-rule-relative-links": "^5.1.0",
697
699
  "monkey-around": "^3.0.0",
698
- "npm-run-all2": "^8.0.4",
699
700
  "obsidian": "^1.12.3",
700
701
  "obsidian-integration-testing": "^4.1.4",
701
702
  "path-browserify": "^1.0.1",
702
- "postcss": "^8.5.14",
703
+ "postcss": "^8.5.15",
703
704
  "postcss-modules": "^6.0.1",
704
705
  "preact": "^10.29.2",
705
706
  "react": "^19.2.6",
706
707
  "remark": "^15.0.1",
707
708
  "remark-parse": "^11.0.0",
708
709
  "remark-wiki-link": "^2.0.1",
709
- "sass": "^1.99.0",
710
- "semver": "^7.8.0",
711
- "shell-quote": "^1.8.3",
710
+ "sass": "^1.100.0",
711
+ "semver": "^7.8.1",
712
+ "shell-quote": "^1.8.4",
712
713
  "svelte-check": "^4.4.8",
713
- "svelte-preprocess": "^6.0.3",
714
+ "svelte-preprocess": "^6.0.4",
714
715
  "type-fest": "^5.6.0",
715
716
  "typescript": "^6.0.3",
716
- "typescript-eslint": "^8.59.3",
717
+ "typescript-eslint": "^8.59.4",
717
718
  "unist-util-visit": "^5.1.0"
718
719
  },
719
720
  "devDependencies": {
@@ -722,9 +723,9 @@
722
723
  "@commitlint/types": "^21.0.1",
723
724
  "@total-typescript/ts-reset": "^0.6.1",
724
725
  "@types/markdown-it": "^14.1.2",
725
- "@typescript-eslint/rule-tester": "^8.59.3",
726
- "@vitest/coverage-v8": "^4.1.6",
727
- "@vitest/runner": "^4.1.6",
726
+ "@typescript-eslint/rule-tester": "^8.59.4",
727
+ "@vitest/coverage-v8": "^4.1.7",
728
+ "@vitest/runner": "^4.1.7",
728
729
  "better-typescript-lib": "^2.12.0",
729
730
  "czg": "^1.13.1",
730
731
  "eslint-plugin-import-x": "^4.16.2",
@@ -735,7 +736,7 @@
735
736
  "obsidian-integration-testing": "^4.1.4",
736
737
  "obsidian-test-mocks": "^2.0.3",
737
738
  "patch-package": "^8.0.1",
738
- "vitest": "^4.1.6",
739
+ "vitest": "^4.1.7",
739
740
  "yaml": "^2.9.0"
740
741
  },
741
742
  "engines": {
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs",
3
+ "module": "../../../../dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs",
4
+ "type": "module",
5
+ "types": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs",
3
+ "module": "../../../../dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs",
4
+ "type": "module",
5
+ "types": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs",
3
+ "module": "../../../../dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs",
4
+ "type": "module",
5
+ "types": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts"
6
+ }