@mnaoumov/obsidian-lib 10.5.1 → 10.7.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 (189) hide show
  1. package/codemirror/inline-token-widgets/package.json +6 -0
  2. package/codemirror/settings-facet/package.json +6 -0
  3. package/command-handlers/open-discussion-command-handler/package.json +6 -0
  4. package/command-handlers/open-feature-request-command-handler/package.json +6 -0
  5. package/command-handlers/open-git-hub-command-handler/package.json +6 -0
  6. package/components/settings-facet-component/package.json +6 -0
  7. package/components/style-sheet-component/package.json +6 -0
  8. package/dist/lib/cjs/__merged.cjs +137 -1
  9. package/dist/lib/cjs/__merged.d.cts +26 -0
  10. package/dist/lib/cjs/anchored-suggest.cjs +232 -0
  11. package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
  12. package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
  13. package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
  14. package/dist/lib/cjs/bug-report.cjs +4 -2
  15. package/dist/lib/cjs/bug-report.d.cts +1 -1
  16. package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
  17. package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
  18. package/dist/lib/cjs/codemirror/index.cjs +7 -1
  19. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  20. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
  21. package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
  22. package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
  23. package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
  24. package/dist/lib/cjs/command-handlers/index.cjs +10 -1
  25. package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
  26. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
  27. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
  28. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
  29. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
  30. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
  31. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
  32. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
  33. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
  34. package/dist/lib/cjs/components/index.cjs +7 -1
  35. package/dist/lib/cjs/components/index.d.cts +2 -0
  36. package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
  37. package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
  38. package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
  39. package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
  40. package/dist/lib/cjs/css-class.cjs +8 -1
  41. package/dist/lib/cjs/css-class.d.cts +28 -0
  42. package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
  43. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
  44. package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
  45. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
  46. package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
  47. package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
  48. package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
  49. package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
  50. package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
  51. package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
  52. package/dist/lib/cjs/editor-suggest.cjs +197 -0
  53. package/dist/lib/cjs/editor-suggest.d.cts +103 -0
  54. package/dist/lib/cjs/feature-request.cjs +115 -0
  55. package/dist/lib/cjs/feature-request.d.cts +54 -0
  56. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  57. package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
  58. package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
  59. package/dist/lib/cjs/git-rename-history.cjs +148 -0
  60. package/dist/lib/cjs/git-rename-history.d.cts +43 -0
  61. package/dist/lib/cjs/hotkey.cjs +185 -0
  62. package/dist/lib/cjs/hotkey.d.cts +59 -0
  63. package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
  64. package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
  65. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
  66. package/dist/lib/cjs/index.cjs +46 -1
  67. package/dist/lib/cjs/index.d.cts +15 -0
  68. package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
  69. package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
  70. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
  71. package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
  72. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
  73. package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
  74. package/dist/lib/cjs/markdown.cjs +6 -1
  75. package/dist/lib/cjs/markdown.d.cts +10 -1
  76. package/dist/lib/cjs/rendered-markdown.cjs +306 -0
  77. package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
  78. package/dist/lib/cjs/request-url.cjs +523 -0
  79. package/dist/lib/cjs/request-url.d.cts +233 -0
  80. package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
  81. package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
  82. package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
  83. package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
  84. package/dist/lib/cjs/setting-components/index.cjs +13 -1
  85. package/dist/lib/cjs/setting-components/index.d.cts +4 -0
  86. package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
  87. package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
  88. package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
  89. package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
  90. package/dist/lib/cjs/setting-ex.cjs +51 -1
  91. package/dist/lib/cjs/setting-ex.d.cts +35 -1
  92. package/dist/lib/cjs/settings-tabs.cjs +258 -0
  93. package/dist/lib/cjs/settings-tabs.d.cts +101 -0
  94. package/dist/lib/cjs/vault.cjs +2 -2
  95. package/dist/lib/cjs/vault.d.cts +3 -1
  96. package/dist/lib/esm/__merged.d.mts +26 -0
  97. package/dist/lib/esm/__merged.mjs +139 -1
  98. package/dist/lib/esm/anchored-suggest.d.mts +116 -0
  99. package/dist/lib/esm/anchored-suggest.mjs +144 -0
  100. package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
  101. package/dist/lib/esm/broken-link-candidates.mjs +275 -0
  102. package/dist/lib/esm/bug-report.d.mts +1 -1
  103. package/dist/lib/esm/bug-report.mjs +4 -2
  104. package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
  105. package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
  106. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  107. package/dist/lib/esm/codemirror/index.mjs +5 -1
  108. package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
  109. package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
  110. package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
  111. package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
  112. package/dist/lib/esm/command-handlers/index.d.mts +3 -0
  113. package/dist/lib/esm/command-handlers/index.mjs +7 -1
  114. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
  115. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
  116. package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
  117. package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
  118. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
  119. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
  120. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
  121. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
  122. package/dist/lib/esm/components/index.d.mts +2 -0
  123. package/dist/lib/esm/components/index.mjs +5 -1
  124. package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
  125. package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
  126. package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
  127. package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
  128. package/dist/lib/esm/css-class.d.mts +28 -0
  129. package/dist/lib/esm/css-class.mjs +8 -1
  130. package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
  131. package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
  132. package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
  133. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  134. package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
  135. package/dist/lib/esm/desktop-git-runner.mjs +19 -0
  136. package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
  137. package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
  138. package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
  139. package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
  140. package/dist/lib/esm/editor-suggest.d.mts +103 -0
  141. package/dist/lib/esm/editor-suggest.mjs +108 -0
  142. package/dist/lib/esm/feature-request.d.mts +54 -0
  143. package/dist/lib/esm/feature-request.mjs +25 -0
  144. package/dist/lib/esm/generated-during-build.mjs +2 -2
  145. package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
  146. package/dist/lib/esm/git-hub-discussion.mjs +13 -0
  147. package/dist/lib/esm/git-rename-history.d.mts +43 -0
  148. package/dist/lib/esm/git-rename-history.mjs +59 -0
  149. package/dist/lib/esm/hotkey.d.mts +59 -0
  150. package/dist/lib/esm/hotkey.mjs +95 -0
  151. package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
  152. package/dist/lib/esm/i18n/locales/en.mjs +13 -1
  153. package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
  154. package/dist/lib/esm/index.d.mts +15 -0
  155. package/dist/lib/esm/index.mjs +31 -1
  156. package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
  157. package/dist/lib/esm/inline-token-renderer.mjs +59 -0
  158. package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
  159. package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
  160. package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
  161. package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
  162. package/dist/lib/esm/markdown.d.mts +10 -1
  163. package/dist/lib/esm/markdown.mjs +9 -1
  164. package/dist/lib/esm/rendered-markdown.d.mts +77 -0
  165. package/dist/lib/esm/rendered-markdown.mjs +219 -0
  166. package/dist/lib/esm/request-url.d.mts +233 -0
  167. package/dist/lib/esm/request-url.mjs +428 -0
  168. package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
  169. package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
  170. package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
  171. package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
  172. package/dist/lib/esm/setting-components/index.d.mts +4 -0
  173. package/dist/lib/esm/setting-components/index.mjs +9 -1
  174. package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
  175. package/dist/lib/esm/setting-components/list-component.mjs +206 -0
  176. package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
  177. package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
  178. package/dist/lib/esm/setting-ex.d.mts +35 -1
  179. package/dist/lib/esm/setting-ex.mjs +51 -1
  180. package/dist/lib/esm/settings-tabs.d.mts +101 -0
  181. package/dist/lib/esm/settings-tabs.mjs +170 -0
  182. package/dist/lib/esm/vault.d.mts +3 -1
  183. package/dist/lib/esm/vault.mjs +2 -2
  184. package/dist/styles.css +83 -1
  185. package/package.json +2 -2
  186. package/setting-components/folder-list-component/package.json +6 -0
  187. package/setting-components/hotkey-component/package.json +6 -0
  188. package/setting-components/list-component/package.json +6 -0
  189. package/setting-components/tag-list-component/package.json +6 -0
@@ -0,0 +1,22 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The desktop arm of {@link ./request-url.ts | requestUrlStream}: requests a URL through `node:http` /
6
+ * `node:https`, so the response body streams as it arrives and an abort really cancels the request.
7
+ *
8
+ * Desktop only: it reads `node:http` and `node:https`. Reach it through `requestUrlStream`, which imports it
9
+ * dynamically on desktop.
10
+ *
11
+ * Unlike Chromium's network stack, Node does not read the system proxy settings or certificate store, so a machine
12
+ * that reaches the internet only through a proxy, or that intercepts TLS with its own root certificate, needs the
13
+ * buffered `requestUrlEx` instead.
14
+ */
15
+ import type { EncodedRequestUrlRequest, RequestUrlStreamResponse } from './request-url.mjs';
16
+ /**
17
+ * Requests a URL through `node:http` / `node:https` and returns its body as a stream, following redirects.
18
+ *
19
+ * @param request - The encoded request.
20
+ * @returns The response, with a streamed body.
21
+ */
22
+ export declare function openDesktopRequestUrlStream(request: EncodedRequestUrlRequest): Promise<RequestUrlStreamResponse>;
@@ -0,0 +1,170 @@
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
+ (function () {
6
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
7
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
8
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
9
+ }
10
+
11
+ function ensureBrowserProcess() {
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return "/";
16
+ },
17
+ env: {},
18
+ platform: "android"
19
+ };
20
+ const existingProcess = globalThis.process;
21
+ if (!existingProcess) {
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+ if (existingProcess.versions?.node) {
26
+ return;
27
+ }
28
+ const existingProcessRecord = existingProcess;
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+ existingProcessRecord["browser"] = true;
33
+ }
34
+
35
+ ensureDisposeSymbols();
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { onAbort } from "@mnaoumov/typescript-lib/abort-controller";
40
+ import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
41
+ import { request as requestHttp } from "node:http";
42
+ import { request as requestHttps } from "node:https";
43
+ const MAX_REDIRECT_COUNT = 20;
44
+ const HTTP_MOVED_PERMANENTLY_STATUS = 301;
45
+ const HTTP_FOUND_STATUS = 302;
46
+ const HTTP_SEE_OTHER_STATUS = 303;
47
+ const HTTP_TEMPORARY_REDIRECT_STATUS = 307;
48
+ const HTTP_PERMANENT_REDIRECT_STATUS = 308;
49
+ const REDIRECT_STATUSES = /* @__PURE__ */ new Set([
50
+ HTTP_FOUND_STATUS,
51
+ HTTP_MOVED_PERMANENTLY_STATUS,
52
+ HTTP_PERMANENT_REDIRECT_STATUS,
53
+ HTTP_SEE_OTHER_STATUS,
54
+ HTTP_TEMPORARY_REDIRECT_STATUS
55
+ ]);
56
+ const BODY_HEADERS = /* @__PURE__ */ new Set(["content-length", "content-type"]);
57
+ async function openDesktopRequestUrlStream(request) {
58
+ let currentRequest = {
59
+ abortSignal: request.abortSignal,
60
+ body: request.body,
61
+ headers: request.headers,
62
+ method: request.method,
63
+ url: request.url
64
+ };
65
+ for (let redirectCount = 0; ; redirectCount++) {
66
+ const incomingMessage = await sendRequest(currentRequest);
67
+ const status = ensureNonNullable(incomingMessage.statusCode);
68
+ const location = incomingMessage.headers.location;
69
+ if (!REDIRECT_STATUSES.has(status) || location === void 0) {
70
+ return {
71
+ body: createIncomingMessageStream(incomingMessage, request.abortSignal),
72
+ headers: flattenHeaders(incomingMessage.headers),
73
+ status,
74
+ url: currentRequest.url
75
+ };
76
+ }
77
+ incomingMessage.resume();
78
+ if (redirectCount >= MAX_REDIRECT_COUNT) {
79
+ throw new TypeError(`Too many redirects requesting ${request.url}`);
80
+ }
81
+ const nextUrl = new URL(location, currentRequest.url);
82
+ if (nextUrl.protocol !== "http:" && nextUrl.protocol !== "https:") {
83
+ throw new TypeError(`Unsupported protocol ${nextUrl.protocol} in the redirect to ${nextUrl.href}`);
84
+ }
85
+ currentRequest = getRedirectedRequest(currentRequest, status, nextUrl.href);
86
+ }
87
+ }
88
+ function createIncomingMessageStream(incomingMessage, abortSignal) {
89
+ let isSettled = false;
90
+ let abortListener;
91
+ return new ReadableStream({
92
+ cancel() {
93
+ isSettled = true;
94
+ abortListener[Symbol.dispose]();
95
+ incomingMessage.destroy();
96
+ },
97
+ pull() {
98
+ incomingMessage.resume();
99
+ },
100
+ start(controller) {
101
+ function settle(error) {
102
+ if (isSettled) {
103
+ return;
104
+ }
105
+ isSettled = true;
106
+ if (error === void 0) {
107
+ controller.close();
108
+ } else {
109
+ controller.error(error);
110
+ }
111
+ }
112
+ incomingMessage.on("data", (chunk) => {
113
+ controller.enqueue(new Uint8Array(chunk));
114
+ if (Number(controller.desiredSize) <= 0) {
115
+ incomingMessage.pause();
116
+ }
117
+ });
118
+ incomingMessage.on("end", () => {
119
+ abortListener[Symbol.dispose]();
120
+ settle();
121
+ });
122
+ incomingMessage.on("error", (error) => {
123
+ abortListener[Symbol.dispose]();
124
+ settle(error);
125
+ });
126
+ abortListener = onAbort(abortSignal, () => {
127
+ settle(abortSignal.reason);
128
+ incomingMessage.destroy(abortSignal.reason);
129
+ });
130
+ }
131
+ });
132
+ }
133
+ function flattenHeaders(headers) {
134
+ const flatHeaders = {};
135
+ for (const [name, value] of Object.entries(headers)) {
136
+ flatHeaders[name] = [value].flat().join(", ");
137
+ }
138
+ return flatHeaders;
139
+ }
140
+ function getRedirectedRequest(request, status, url) {
141
+ const shouldSwitchToGet = status === HTTP_SEE_OTHER_STATUS || request.method === "POST" && (status === HTTP_MOVED_PERMANENTLY_STATUS || status === HTTP_FOUND_STATUS);
142
+ if (!shouldSwitchToGet) {
143
+ return { ...request, url };
144
+ }
145
+ return {
146
+ abortSignal: request.abortSignal,
147
+ body: void 0,
148
+ headers: Object.fromEntries(Object.entries(request.headers).filter(([name]) => !BODY_HEADERS.has(name.toLowerCase()))),
149
+ method: "GET",
150
+ url
151
+ };
152
+ }
153
+ async function sendRequest(params) {
154
+ const request = params.url.startsWith("https:") ? requestHttps : requestHttp;
155
+ return await new Promise((resolve, reject) => {
156
+ const clientRequest = request(params.url, {
157
+ headers: { ...params.headers },
158
+ method: params.method,
159
+ signal: params.abortSignal
160
+ }, resolve);
161
+ clientRequest.on("error", (error) => {
162
+ reject(params.abortSignal.aborted ? params.abortSignal.reason : error);
163
+ });
164
+ clientRequest.end(typeof params.body === "string" ? params.body : params.body && new Uint8Array(params.body));
165
+ });
166
+ }
167
+ export {
168
+ openDesktopRequestUrlStream
169
+ };
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXNrdG9wLXJlcXVlc3QtdXJsLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRlc2t0b3AgYXJtIG9mIHtAbGluayAuL3JlcXVlc3QtdXJsLnRzIHwgcmVxdWVzdFVybFN0cmVhbX06IHJlcXVlc3RzIGEgVVJMIHRocm91Z2ggYG5vZGU6aHR0cGAgL1xuICogYG5vZGU6aHR0cHNgLCBzbyB0aGUgcmVzcG9uc2UgYm9keSBzdHJlYW1zIGFzIGl0IGFycml2ZXMgYW5kIGFuIGFib3J0IHJlYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0LlxuICpcbiAqIERlc2t0b3Agb25seTogaXQgcmVhZHMgYG5vZGU6aHR0cGAgYW5kIGBub2RlOmh0dHBzYC4gUmVhY2ggaXQgdGhyb3VnaCBgcmVxdWVzdFVybFN0cmVhbWAsIHdoaWNoIGltcG9ydHMgaXRcbiAqIGR5bmFtaWNhbGx5IG9uIGRlc2t0b3AuXG4gKlxuICogVW5saWtlIENocm9taXVtJ3MgbmV0d29yayBzdGFjaywgTm9kZSBkb2VzIG5vdCByZWFkIHRoZSBzeXN0ZW0gcHJveHkgc2V0dGluZ3Mgb3IgY2VydGlmaWNhdGUgc3RvcmUsIHNvIGEgbWFjaGluZVxuICogdGhhdCByZWFjaGVzIHRoZSBpbnRlcm5ldCBvbmx5IHRocm91Z2ggYSBwcm94eSwgb3IgdGhhdCBpbnRlcmNlcHRzIFRMUyB3aXRoIGl0cyBvd24gcm9vdCBjZXJ0aWZpY2F0ZSwgbmVlZHMgdGhlXG4gKiBidWZmZXJlZCBgcmVxdWVzdFVybEV4YCBpbnN0ZWFkLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBSZWFkYWJsZVN0cmVhbSBpcyB0aGUgT2JzaWRpYW4gcmVuZGVyZXIncyBXZWIgQVBJLCBub3QgYSBOb2RlIGJ1aWx0aW4uICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSW5jb21pbmdIdHRwSGVhZGVycyxcbiAgSW5jb21pbmdNZXNzYWdlXG59IGZyb20gJ25vZGU6aHR0cCc7XG5cbmltcG9ydCB7IG9uQWJvcnQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWJvcnQtY29udHJvbGxlcic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyByZXF1ZXN0IGFzIHJlcXVlc3RIdHRwIH0gZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgcmVxdWVzdEh0dHBzIH0gZnJvbSAnbm9kZTpodHRwcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRW5jb2RlZFJlcXVlc3RVcmxSZXF1ZXN0LFxuICBSZXF1ZXN0VXJsU3RyZWFtUmVzcG9uc2Vcbn0gZnJvbSAnLi9yZXF1ZXN0LXVybC50cyc7XG5cbmNvbnN0IE1BWF9SRURJUkVDVF9DT1VOVCA9IDIwO1xuY29uc3QgSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWV9TVEFUVVMgPSAzMDE7XG5jb25zdCBIVFRQX0ZPVU5EX1NUQVRVUyA9IDMwMjtcbmNvbnN0IEhUVFBfU0VFX09USEVSX1NUQVRVUyA9IDMwMztcbmNvbnN0IEhUVFBfVEVNUE9SQVJZX1JFRElSRUNUX1NUQVRVUyA9IDMwNztcbmNvbnN0IEhUVFBfUEVSTUFORU5UX1JFRElSRUNUX1NUQVRVUyA9IDMwODtcbmNvbnN0IFJFRElSRUNUX1NUQVRVU0VTID0gbmV3IFNldChbXG4gIEhUVFBfRk9VTkRfU1RBVFVTLFxuICBIVFRQX01PVkVEX1BFUk1BTkVOVExZX1NUQVRVUyxcbiAgSFRUUF9QRVJNQU5FTlRfUkVESVJFQ1RfU1RBVFVTLFxuICBIVFRQX1NFRV9PVEhFUl9TVEFUVVMsXG4gIEhUVFBfVEVNUE9SQVJZX1JFRElSRUNUX1NUQVRVU1xuXSk7XG5jb25zdCBCT0RZX0hFQURFUlMgPSBuZXcgU2V0KFsnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJ10pO1xuXG5pbnRlcmZhY2UgU2VuZFJlcXVlc3RQYXJhbXMge1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHJlYWRvbmx5IGJvZHk6IEFycmF5QnVmZmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBoZWFkZXJzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIGEgVVJMIHRocm91Z2ggYG5vZGU6aHR0cGAgLyBgbm9kZTpodHRwc2AgYW5kIHJldHVybnMgaXRzIGJvZHkgYXMgYSBzdHJlYW0sIGZvbGxvd2luZyByZWRpcmVjdHMuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgZW5jb2RlZCByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIHJlc3BvbnNlLCB3aXRoIGEgc3RyZWFtZWQgYm9keS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZXNrdG9wUmVxdWVzdFVybFN0cmVhbShyZXF1ZXN0OiBFbmNvZGVkUmVxdWVzdFVybFJlcXVlc3QpOiBQcm9taXNlPFJlcXVlc3RVcmxTdHJlYW1SZXNwb25zZT4ge1xuICBsZXQgY3VycmVudFJlcXVlc3Q6IFNlbmRSZXF1ZXN0UGFyYW1zID0ge1xuICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMsXG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICB1cmw6IHJlcXVlc3QudXJsXG4gIH07XG5cbiAgZm9yIChsZXQgcmVkaXJlY3RDb3VudCA9IDA7OyByZWRpcmVjdENvdW50KyspIHtcbiAgICBjb25zdCBpbmNvbWluZ01lc3NhZ2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjdXJyZW50UmVxdWVzdCk7XG4gICAgLy8gQSByZXNwb25zZSB0byBhIGNsaWVudCByZXF1ZXN0IGFsd2F5cyBjYXJyaWVzIGl0cyBzdGF0dXMgY29kZS5cbiAgICBjb25zdCBzdGF0dXMgPSBlbnN1cmVOb25OdWxsYWJsZShpbmNvbWluZ01lc3NhZ2Uuc3RhdHVzQ29kZSk7XG4gICAgY29uc3QgbG9jYXRpb24gPSBpbmNvbWluZ01lc3NhZ2UuaGVhZGVycy5sb2NhdGlvbjtcbiAgICBpZiAoIVJFRElSRUNUX1NUQVRVU0VTLmhhcyhzdGF0dXMpIHx8IGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHk6IGNyZWF0ZUluY29taW5nTWVzc2FnZVN0cmVhbShpbmNvbWluZ01lc3NhZ2UsIHJlcXVlc3QuYWJvcnRTaWduYWwpLFxuICAgICAgICBoZWFkZXJzOiBmbGF0dGVuSGVhZGVycyhpbmNvbWluZ01lc3NhZ2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdXJsOiBjdXJyZW50UmVxdWVzdC51cmxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaW5jb21pbmdNZXNzYWdlLnJlc3VtZSgpO1xuICAgIGlmIChyZWRpcmVjdENvdW50ID49IE1BWF9SRURJUkVDVF9DT1VOVCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVG9vIG1hbnkgcmVkaXJlY3RzIHJlcXVlc3RpbmcgJHtyZXF1ZXN0LnVybH1gKTtcbiAgICB9XG4gICAgY29uc3QgbmV4dFVybCA9IG5ldyBVUkwobG9jYXRpb24sIGN1cnJlbnRSZXF1ZXN0LnVybCk7XG4gICAgaWYgKG5leHRVcmwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgbmV4dFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHByb3RvY29sICR7bmV4dFVybC5wcm90b2NvbH0gaW4gdGhlIHJlZGlyZWN0IHRvICR7bmV4dFVybC5ocmVmfWApO1xuICAgIH1cbiAgICBjdXJyZW50UmVxdWVzdCA9IGdldFJlZGlyZWN0ZWRSZXF1ZXN0KGN1cnJlbnRSZXF1ZXN0LCBzdGF0dXMsIG5leHRVcmwuaHJlZik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5jb21pbmdNZXNzYWdlU3RyZWFtKGluY29taW5nTWVzc2FnZTogSW5jb21pbmdNZXNzYWdlLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgLy8gQXNzaWduZWQgaW4gYHN0YXJ0YCwgd2hpY2ggcnVucyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLCBzbyBpdCBpcyBpbiBwbGFjZSBiZWZvcmUgYGNhbmNlbGAgY2FuIHJ1bi5cbiAgbGV0IGFib3J0TGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICBhYm9ydExpc3RlbmVyW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgaW5jb21pbmdNZXNzYWdlLmRlc3Ryb3koKTtcbiAgICB9LFxuICAgIHB1bGwoKTogdm9pZCB7XG4gICAgICBpbmNvbWluZ01lc3NhZ2UucmVzdW1lKCk7XG4gICAgfSxcbiAgICBzdGFydChjb250cm9sbGVyKTogdm9pZCB7XG4gICAgICBmdW5jdGlvbiBzZXR0bGUoZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5jb21pbmdNZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgLy8gQSBjb3B5LCBzbyB0aGUgY2h1bmsgYmVsb25ncyB0byB0aGUgcmVuZGVyZXIncyByZWFsbSB3aGF0ZXZlciBOb2RlIGRvZXMgd2l0aCBpdHMgYnVmZmVyIGFmdGVyd2FyZHMuXG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShjaHVuaykpO1xuICAgICAgICBpZiAoTnVtYmVyKGNvbnRyb2xsZXIuZGVzaXJlZFNpemUpIDw9IDApIHtcbiAgICAgICAgICBpbmNvbWluZ01lc3NhZ2UucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbmNvbWluZ01lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgYWJvcnRMaXN0ZW5lcltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgICAgc2V0dGxlKCk7XG4gICAgICB9KTtcbiAgICAgIGluY29taW5nTWVzc2FnZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgYWJvcnRMaXN0ZW5lcltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgICAgc2V0dGxlKGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgYWJvcnRMaXN0ZW5lciA9IG9uQWJvcnQoYWJvcnRTaWduYWwsICgpID0+IHtcbiAgICAgICAgc2V0dGxlKGFib3J0U2lnbmFsLnJlYXNvbik7XG4gICAgICAgIC8vIFRoZSBgZXJyb3JgIGV2ZW50IHRoaXMgcmFpc2VzIGZpbmRzIHRoZSBzdHJlYW0gc2V0dGxlZCBhbHJlYWR5LlxuICAgICAgICBpbmNvbWluZ01lc3NhZ2UuZGVzdHJveShhYm9ydFNpZ25hbC5yZWFzb24gYXMgRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5IZWFkZXJzKGhlYWRlcnM6IEluY29taW5nSHR0cEhlYWRlcnMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZmxhdEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gTm9kZSBqb2lucyBldmVyeSByZXBlYXRlZCBoZWFkZXIgYnV0IGBzZXQtY29va2llYCwgd2hpY2ggYXJyaXZlcyBhcyBhbiBhcnJheS5cbiAgICBmbGF0SGVhZGVyc1tuYW1lXSA9IFt2YWx1ZV0uZmxhdCgpLmpvaW4oJywgJyk7XG4gIH1cbiAgcmV0dXJuIGZsYXRIZWFkZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRSZWRpcmVjdGVkUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdFBhcmFtcywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogU2VuZFJlcXVlc3RQYXJhbXMge1xuICAvLyBXaGF0IGBmZXRjaGAgZG9lczogYSAzMDMsIGFuZCBhIDMwMSBvciAzMDIgYW5zd2VyaW5nIGEgUE9TVCwgYmVjb21lIGEgR0VUIHdpdGhvdXQgYSBib2R5LlxuICBjb25zdCBzaG91bGRTd2l0Y2hUb0dldCA9IHN0YXR1cyA9PT0gSFRUUF9TRUVfT1RIRVJfU1RBVFVTXG4gICAgfHwgKHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcgJiYgKHN0YXR1cyA9PT0gSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWV9TVEFUVVMgfHwgc3RhdHVzID09PSBIVFRQX0ZPVU5EX1NUQVRVUykpO1xuICBpZiAoIXNob3VsZFN3aXRjaFRvR2V0KSB7XG4gICAgcmV0dXJuIHsgLi4ucmVxdWVzdCwgdXJsIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuaGVhZGVycykuZmlsdGVyKChbbmFtZV0pID0+ICFCT0RZX0hFQURFUlMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSkpKSxcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kUmVxdWVzdChwYXJhbXM6IFNlbmRSZXF1ZXN0UGFyYW1zKTogUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+IHtcbiAgY29uc3QgcmVxdWVzdCA9IHBhcmFtcy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6JykgPyByZXF1ZXN0SHR0cHMgOiByZXF1ZXN0SHR0cDtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGllbnRSZXF1ZXN0ID0gcmVxdWVzdChwYXJhbXMudXJsLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLnBhcmFtcy5oZWFkZXJzIH0sXG4gICAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgICBzaWduYWw6IHBhcmFtcy5hYm9ydFNpZ25hbFxuICAgIH0sIHJlc29sdmUpO1xuICAgIGNsaWVudFJlcXVlc3Qub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICByZWplY3QocGFyYW1zLmFib3J0U2lnbmFsLmFib3J0ZWQgPyBwYXJhbXMuYWJvcnRTaWduYWwucmVhc29uIGFzIEVycm9yIDogZXJyb3IpO1xuICAgIH0pO1xuICAgIGNsaWVudFJlcXVlc3QuZW5kKHR5cGVvZiBwYXJhbXMuYm9keSA9PT0gJ3N0cmluZycgPyBwYXJhbXMuYm9keSA6IHBhcmFtcy5ib2R5ICYmIG5ldyBVaW50OEFycmF5KHBhcmFtcy5ib2R5KSk7XG4gIH0pO1xufVxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gUmVhZGFibGVTdHJlYW0gaXMgdGhlIE9ic2lkaWFuIHJlbmRlcmVyJ3MgV2ViIEFQSSwgbm90IGEgTm9kZSBidWlsdGluLiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7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
@@ -13,8 +13,19 @@ export interface EditorSuggestRegistrar {
13
13
  * Registers an editor suggest.
14
14
  *
15
15
  * @param editorSuggest - The editor suggest to register.
16
+ * @param options - The options.
16
17
  */
17
- readonly registerEditorSuggest: (editorSuggest: EditorSuggest<unknown>) => void;
18
+ readonly registerEditorSuggest: (editorSuggest: EditorSuggest<unknown>, options?: RegisterEditorSuggestOptions) => void;
19
+ }
20
+ /**
21
+ * Options for {@link EditorSuggestRegistrar.registerEditorSuggest}.
22
+ */
23
+ export interface RegisterEditorSuggestOptions {
24
+ /**
25
+ * Whether the suggest is asked before the others already registered, Obsidian's own included. Defaults to `false`:
26
+ * registration order decides.
27
+ */
28
+ readonly shouldPrioritize?: boolean;
18
29
  }
19
30
  /**
20
31
  * Editor suggest registrar in an Obsidian plugin.
@@ -31,6 +42,7 @@ export declare class PluginEditorSuggestRegistrar implements EditorSuggestRegist
31
42
  * Registers an editor suggest.
32
43
  *
33
44
  * @param editorSuggest - The editor suggest to register.
45
+ * @param options - The options.
34
46
  */
35
- registerEditorSuggest(editorSuggest: EditorSuggest<unknown>): void;
47
+ registerEditorSuggest(editorSuggest: EditorSuggest<unknown>, options?: RegisterEditorSuggestOptions): void;
36
48
  }
@@ -34,6 +34,7 @@ import {
34
34
  EditorSuggest,
35
35
  Plugin
36
36
  } from "obsidian";
37
+ import { prioritizeEditorSuggest } from "./editor-suggest.mjs";
37
38
  class PluginEditorSuggestRegistrar {
38
39
  /**
39
40
  * Creates a new instance of the {@link PluginEditorSuggestRegistrar} class.
@@ -48,12 +49,17 @@ class PluginEditorSuggestRegistrar {
48
49
  * Registers an editor suggest.
49
50
  *
50
51
  * @param editorSuggest - The editor suggest to register.
52
+ * @param options - The options.
51
53
  */
52
- registerEditorSuggest(editorSuggest) {
54
+ // eslint-disable-next-line typescript-dev-toolkit/params-options-name-match -- It implements `EditorSuggestRegistrar.registerEditorSuggest`, whose options type every registrar shares.
55
+ registerEditorSuggest(editorSuggest, options) {
53
56
  this.plugin.registerEditorSuggest(editorSuggest);
57
+ if (options?.shouldPrioritize) {
58
+ prioritizeEditorSuggest({ app: this.plugin.app, editorSuggest });
59
+ }
54
60
  }
55
61
  }
56
62
  export {
57
63
  PluginEditorSuggestRegistrar
58
64
  };
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVkaXRvciBzdWdnZXN0IHJlZ2lzdHJhcnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBFZGl0b3Igc3VnZ2VzdCByZWdpc3RyYXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yU3VnZ2VzdFJlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gZWRpdG9yIHN1Z2dlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3JTdWdnZXN0IC0gVGhlIGVkaXRvciBzdWdnZXN0IHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0ZXJFZGl0b3JTdWdnZXN0OiAoZWRpdG9yU3VnZ2VzdDogRWRpdG9yU3VnZ2VzdDx1bmtub3duPikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBFZGl0b3Igc3VnZ2VzdCByZWdpc3RyYXIgaW4gYW4gT2JzaWRpYW4gcGx1Z2luLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRWRpdG9yU3VnZ2VzdFJlZ2lzdHJhciBpbXBsZW1lbnRzIEVkaXRvclN1Z2dlc3RSZWdpc3RyYXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUge0BsaW5rIFBsdWdpbkVkaXRvclN1Z2dlc3RSZWdpc3RyYXJ9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIE9ic2lkaWFuIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4pIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhbiBlZGl0b3Igc3VnZ2VzdC5cbiAgICpcbiAgICogQHBhcmFtIGVkaXRvclN1Z2dlc3QgLSBUaGUgZWRpdG9yIHN1Z2dlc3QgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJFZGl0b3JTdWdnZXN0KGVkaXRvclN1Z2dlc3Q6IEVkaXRvclN1Z2dlc3Q8dW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckVkaXRvclN1Z2dlc3QoZWRpdG9yU3VnZ2VzdCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWlCQSxNQUFNLDZCQUErRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1uRSxZQUErQixRQUFnQjtBQUFoQjtBQUFBLEVBQWlCO0FBQUEsRUFBakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPL0Isc0JBQXNCLGVBQTZDO0FBQ3hFLFNBQUssT0FBTyxzQkFBc0IsYUFBYTtBQUFBLEVBQ2pEO0FBQ0Y7IiwibmFtZXMiOltdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVkaXRvciBzdWdnZXN0IHJlZ2lzdHJhcnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgcHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3QgfSBmcm9tICcuL2VkaXRvci1zdWdnZXN0LnRzJztcblxuLyoqXG4gKiBFZGl0b3Igc3VnZ2VzdCByZWdpc3RyYXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yU3VnZ2VzdFJlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gZWRpdG9yIHN1Z2dlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3JTdWdnZXN0IC0gVGhlIGVkaXRvciBzdWdnZXN0IHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0ZXJFZGl0b3JTdWdnZXN0OiAoZWRpdG9yU3VnZ2VzdDogRWRpdG9yU3VnZ2VzdDx1bmtub3duPiwgb3B0aW9ucz86IFJlZ2lzdGVyRWRpdG9yU3VnZ2VzdE9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIEVkaXRvclN1Z2dlc3RSZWdpc3RyYXIucmVnaXN0ZXJFZGl0b3JTdWdnZXN0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckVkaXRvclN1Z2dlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHN1Z2dlc3QgaXMgYXNrZWQgYmVmb3JlIHRoZSBvdGhlcnMgYWxyZWFkeSByZWdpc3RlcmVkLCBPYnNpZGlhbidzIG93biBpbmNsdWRlZC4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogcmVnaXN0cmF0aW9uIG9yZGVyIGRlY2lkZXMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmlvcml0aXplPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFZGl0b3Igc3VnZ2VzdCByZWdpc3RyYXIgaW4gYW4gT2JzaWRpYW4gcGx1Z2luLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRWRpdG9yU3VnZ2VzdFJlZ2lzdHJhciBpbXBsZW1lbnRzIEVkaXRvclN1Z2dlc3RSZWdpc3RyYXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUge0BsaW5rIFBsdWdpbkVkaXRvclN1Z2dlc3RSZWdpc3RyYXJ9IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIE9ic2lkaWFuIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4pIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhbiBlZGl0b3Igc3VnZ2VzdC5cbiAgICpcbiAgICogQHBhcmFtIGVkaXRvclN1Z2dlc3QgLSBUaGUgZWRpdG9yIHN1Z2dlc3QgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIEl0IGltcGxlbWVudHMgYEVkaXRvclN1Z2dlc3RSZWdpc3RyYXIucmVnaXN0ZXJFZGl0b3JTdWdnZXN0YCwgd2hvc2Ugb3B0aW9ucyB0eXBlIGV2ZXJ5IHJlZ2lzdHJhciBzaGFyZXMuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvclN1Z2dlc3QoZWRpdG9yU3VnZ2VzdDogRWRpdG9yU3VnZ2VzdDx1bmtub3duPiwgb3B0aW9ucz86IFJlZ2lzdGVyRWRpdG9yU3VnZ2VzdE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckVkaXRvclN1Z2dlc3QoZWRpdG9yU3VnZ2VzdCk7XG4gICAgaWYgKG9wdGlvbnM/LnNob3VsZFByaW9yaXRpemUpIHtcbiAgICAgIHByaW9yaXRpemVFZGl0b3JTdWdnZXN0KHsgYXBwOiB0aGlzLnBsdWdpbi5hcHAsIGVkaXRvclN1Z2dlc3QgfSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLCtCQUErQjtBQTZCakMsTUFBTSw2QkFBK0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbkUsWUFBK0IsUUFBZ0I7QUFBaEI7QUFBQSxFQUFpQjtBQUFBLEVBQWpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVMvQixzQkFBc0IsZUFBdUMsU0FBOEM7QUFDaEgsU0FBSyxPQUFPLHNCQUFzQixhQUFhO0FBQy9DLFFBQUksU0FBUyxrQkFBa0I7QUFDN0IsOEJBQXdCLEVBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxjQUFjLENBQUM7QUFBQSxJQUNqRTtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
@@ -0,0 +1,103 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Helpers for `EditorSuggest`: giving one priority over the others, and opening one from a command.
6
+ *
7
+ * Read from Obsidian `1.15.0`: the editor asks each suggest in `app.workspace.editorSuggest.suggests` in order, and the
8
+ * first whose `trigger` accepts the cursor wins, so registration order decides which suggest opens. A suggest shows its
9
+ * list only when the trigger is explicit (the user typed) or it is already open.
10
+ */
11
+ import type { App, Editor, EditorPosition, EditorSuggestTriggerInfo, TFile } from 'obsidian';
12
+ import { EditorSuggest } from 'obsidian';
13
+ /**
14
+ * Parameters for {@link CommandEditorSuggest.openFromCommand}.
15
+ */
16
+ export interface CommandEditorSuggestOpenFromCommandParams {
17
+ /**
18
+ * The editor to open the suggest in.
19
+ */
20
+ readonly editor: Editor;
21
+ /**
22
+ * The file open in the editor.
23
+ */
24
+ readonly file: null | TFile;
25
+ }
26
+ /**
27
+ * Parameters for {@link prioritizeEditorSuggest}.
28
+ */
29
+ export interface PrioritizeEditorSuggestParams {
30
+ /**
31
+ * The Obsidian app.
32
+ */
33
+ readonly app: App;
34
+ /**
35
+ * The registered editor suggest.
36
+ */
37
+ readonly editorSuggest: EditorSuggest<unknown>;
38
+ }
39
+ /**
40
+ * An editor suggest that a command can open at the cursor, without a trigger character.
41
+ *
42
+ * {@link CommandEditorSuggest.openFromCommand} opens it at the cursor; the text typed after that point, on the same
43
+ * line, is the query, and moving the cursor before that point or off the line closes it. A subclass may still open on
44
+ * typed text by overriding {@link CommandEditorSuggest.onTextTrigger}.
45
+ *
46
+ * Register it as usual, so the editor keeps it updated while the user types:
47
+ *
48
+ * ```ts
49
+ * const suggest = new EmojiSuggest(this.app);
50
+ * this.registerEditorSuggest(suggest);
51
+ * this.addCommand({
52
+ * editorCallback: (editor, ctx) => {
53
+ * suggest.openFromCommand({ editor, file: ctx.file });
54
+ * },
55
+ * id: 'insert-emoji',
56
+ * name: 'Insert emoji'
57
+ * });
58
+ * ```
59
+ *
60
+ * @typeParam T - The type of a suggestion.
61
+ */
62
+ export declare abstract class CommandEditorSuggest<T> extends EditorSuggest<T> {
63
+ private commandStart;
64
+ /**
65
+ * Closes the suggest, ending a command-opened session.
66
+ */
67
+ close(): void;
68
+ /**
69
+ * Decides whether the suggest opens. While a command-opened session lasts, the query is the text from where it was
70
+ * opened to the cursor; otherwise {@link CommandEditorSuggest.onTextTrigger} decides.
71
+ *
72
+ * @param cursor - The cursor.
73
+ * @param editor - The editor.
74
+ * @param file - The file open in the editor.
75
+ * @returns The trigger info, or `null` to stay closed.
76
+ */
77
+ onTrigger(cursor: EditorPosition, editor: Editor, file: null | TFile): EditorSuggestTriggerInfo | null;
78
+ /**
79
+ * Opens the suggest at the cursor of an editor, typically from a command's `editorCallback`.
80
+ *
81
+ * @param params - The parameters.
82
+ * @returns Whether the suggest accepted the cursor: `false` when text is selected.
83
+ */
84
+ openFromCommand(params: CommandEditorSuggestOpenFromCommandParams): boolean;
85
+ /**
86
+ * Decides whether the suggest opens on typed text, outside a command-opened session. Never, by default.
87
+ *
88
+ * @param _cursor - The cursor.
89
+ * @param _editor - The editor.
90
+ * @param _file - The file open in the editor.
91
+ * @returns The trigger info, or `null` to stay closed.
92
+ */
93
+ protected onTextTrigger(_cursor: EditorPosition, _editor: Editor, _file: null | TFile): EditorSuggestTriggerInfo | null;
94
+ }
95
+ /**
96
+ * Moves a registered editor suggest to the front of the list the editor asks, so it opens ahead of every other suggest
97
+ * whose trigger accepts the same text, Obsidian's own `[[` and `#` suggests included. A suggest prioritized later goes
98
+ * ahead of it in turn.
99
+ *
100
+ * @param params - The parameters.
101
+ * @throws If the editor suggest is not registered.
102
+ */
103
+ export declare function prioritizeEditorSuggest(params: PrioritizeEditorSuggestParams): void;
@@ -0,0 +1,108 @@
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
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { EditorSuggest } from "obsidian";
34
+ class CommandEditorSuggest extends EditorSuggest {
35
+ commandStart = null;
36
+ /**
37
+ * Closes the suggest, ending a command-opened session.
38
+ */
39
+ close() {
40
+ this.commandStart = null;
41
+ super.close();
42
+ }
43
+ /**
44
+ * Decides whether the suggest opens. While a command-opened session lasts, the query is the text from where it was
45
+ * opened to the cursor; otherwise {@link CommandEditorSuggest.onTextTrigger} decides.
46
+ *
47
+ * @param cursor - The cursor.
48
+ * @param editor - The editor.
49
+ * @param file - The file open in the editor.
50
+ * @returns The trigger info, or `null` to stay closed.
51
+ */
52
+ onTrigger(cursor, editor, file) {
53
+ const start = this.commandStart;
54
+ if (start) {
55
+ if (cursor.line === start.line && cursor.ch >= start.ch) {
56
+ return {
57
+ end: cursor,
58
+ query: editor.getLine(cursor.line).slice(start.ch, cursor.ch),
59
+ start
60
+ };
61
+ }
62
+ this.commandStart = null;
63
+ }
64
+ return this.onTextTrigger(cursor, editor, file);
65
+ }
66
+ /**
67
+ * Opens the suggest at the cursor of an editor, typically from a command's `editorCallback`.
68
+ *
69
+ * @param params - The parameters.
70
+ * @returns Whether the suggest accepted the cursor: `false` when text is selected.
71
+ */
72
+ openFromCommand(params) {
73
+ const { editor, file } = params;
74
+ this.commandStart = editor.getCursor();
75
+ if (!this.trigger(editor, file, true)) {
76
+ this.commandStart = null;
77
+ return false;
78
+ }
79
+ this.app.workspace.editorSuggest.setCurrentSuggest(this);
80
+ return true;
81
+ }
82
+ /**
83
+ * Decides whether the suggest opens on typed text, outside a command-opened session. Never, by default.
84
+ *
85
+ * @param _cursor - The cursor.
86
+ * @param _editor - The editor.
87
+ * @param _file - The file open in the editor.
88
+ * @returns The trigger info, or `null` to stay closed.
89
+ */
90
+ onTextTrigger(_cursor, _editor, _file) {
91
+ return null;
92
+ }
93
+ }
94
+ function prioritizeEditorSuggest(params) {
95
+ const { app, editorSuggest } = params;
96
+ const suggests = app.workspace.editorSuggest.suggests;
97
+ const index = suggests.indexOf(editorSuggest);
98
+ if (index === -1) {
99
+ throw new Error("The editor suggest is not registered. Register it before prioritizing it.");
100
+ }
101
+ suggests.splice(index, 1);
102
+ suggests.unshift(editorSuggest);
103
+ }
104
+ export {
105
+ CommandEditorSuggest,
106
+ prioritizeEditorSuggest
107
+ };
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZGl0b3Itc3VnZ2VzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGVscGVycyBmb3IgYEVkaXRvclN1Z2dlc3RgOiBnaXZpbmcgb25lIHByaW9yaXR5IG92ZXIgdGhlIG90aGVycywgYW5kIG9wZW5pbmcgb25lIGZyb20gYSBjb21tYW5kLlxuICpcbiAqIFJlYWQgZnJvbSBPYnNpZGlhbiBgMS4xNS4wYDogdGhlIGVkaXRvciBhc2tzIGVhY2ggc3VnZ2VzdCBpbiBgYXBwLndvcmtzcGFjZS5lZGl0b3JTdWdnZXN0LnN1Z2dlc3RzYCBpbiBvcmRlciwgYW5kIHRoZVxuICogZmlyc3Qgd2hvc2UgYHRyaWdnZXJgIGFjY2VwdHMgdGhlIGN1cnNvciB3aW5zLCBzbyByZWdpc3RyYXRpb24gb3JkZXIgZGVjaWRlcyB3aGljaCBzdWdnZXN0IG9wZW5zLiBBIHN1Z2dlc3Qgc2hvd3MgaXRzXG4gKiBsaXN0IG9ubHkgd2hlbiB0aGUgdHJpZ2dlciBpcyBleHBsaWNpdCAodGhlIHVzZXIgdHlwZWQpIG9yIGl0IGlzIGFscmVhZHkgb3Blbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IEVkaXRvclN1Z2dlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1hbmRFZGl0b3JTdWdnZXN0Lm9wZW5Gcm9tQ29tbWFuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVkaXRvclN1Z2dlc3RPcGVuRnJvbUNvbW1hbmRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0byBvcGVuIHRoZSBzdWdnZXN0IGluLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9wZW4gaW4gdGhlIGVkaXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IG51bGwgfCBURmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW9yaXRpemVFZGl0b3JTdWdnZXN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZ2lzdGVyZWQgZWRpdG9yIHN1Z2dlc3QuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JTdWdnZXN0OiBFZGl0b3JTdWdnZXN0PHVua25vd24+O1xufVxuXG4vKipcbiAqIEFuIGVkaXRvciBzdWdnZXN0IHRoYXQgYSBjb21tYW5kIGNhbiBvcGVuIGF0IHRoZSBjdXJzb3IsIHdpdGhvdXQgYSB0cmlnZ2VyIGNoYXJhY3Rlci5cbiAqXG4gKiB7QGxpbmsgQ29tbWFuZEVkaXRvclN1Z2dlc3Qub3BlbkZyb21Db21tYW5kfSBvcGVucyBpdCBhdCB0aGUgY3Vyc29yOyB0aGUgdGV4dCB0eXBlZCBhZnRlciB0aGF0IHBvaW50LCBvbiB0aGUgc2FtZVxuICogbGluZSwgaXMgdGhlIHF1ZXJ5LCBhbmQgbW92aW5nIHRoZSBjdXJzb3IgYmVmb3JlIHRoYXQgcG9pbnQgb3Igb2ZmIHRoZSBsaW5lIGNsb3NlcyBpdC4gQSBzdWJjbGFzcyBtYXkgc3RpbGwgb3BlbiBvblxuICogdHlwZWQgdGV4dCBieSBvdmVycmlkaW5nIHtAbGluayBDb21tYW5kRWRpdG9yU3VnZ2VzdC5vblRleHRUcmlnZ2VyfS5cbiAqXG4gKiBSZWdpc3RlciBpdCBhcyB1c3VhbCwgc28gdGhlIGVkaXRvciBrZWVwcyBpdCB1cGRhdGVkIHdoaWxlIHRoZSB1c2VyIHR5cGVzOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBzdWdnZXN0ID0gbmV3IEVtb2ppU3VnZ2VzdCh0aGlzLmFwcCk7XG4gKiB0aGlzLnJlZ2lzdGVyRWRpdG9yU3VnZ2VzdChzdWdnZXN0KTtcbiAqIHRoaXMuYWRkQ29tbWFuZCh7XG4gKiAgIGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yLCBjdHgpID0+IHtcbiAqICAgICBzdWdnZXN0Lm9wZW5Gcm9tQ29tbWFuZCh7IGVkaXRvciwgZmlsZTogY3R4LmZpbGUgfSk7XG4gKiAgIH0sXG4gKiAgIGlkOiAnaW5zZXJ0LWVtb2ppJyxcbiAqICAgbmFtZTogJ0luc2VydCBlbW9qaSdcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgYSBzdWdnZXN0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEVkaXRvclN1Z2dlc3Q8VD4gZXh0ZW5kcyBFZGl0b3JTdWdnZXN0PFQ+IHtcbiAgcHJpdmF0ZSBjb21tYW5kU3RhcnQ6IEVkaXRvclBvc2l0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgc3VnZ2VzdCwgZW5kaW5nIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRTdGFydCA9IG51bGw7XG4gICAgc3VwZXIuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgdGhlIHN1Z2dlc3Qgb3BlbnMuIFdoaWxlIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbiBsYXN0cywgdGhlIHF1ZXJ5IGlzIHRoZSB0ZXh0IGZyb20gd2hlcmUgaXQgd2FzXG4gICAqIG9wZW5lZCB0byB0aGUgY3Vyc29yOyBvdGhlcndpc2Uge0BsaW5rIENvbW1hbmRFZGl0b3JTdWdnZXN0Lm9uVGV4dFRyaWdnZXJ9IGRlY2lkZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdXJzb3IgLSBUaGUgY3Vyc29yLlxuICAgKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvci5cbiAgICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSBvcGVuIGluIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSB0cmlnZ2VyIGluZm8sIG9yIGBudWxsYCB0byBzdGF5IGNsb3NlZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvblRyaWdnZXIoY3Vyc29yOiBFZGl0b3JQb3NpdGlvbiwgZWRpdG9yOiBFZGl0b3IsIGZpbGU6IG51bGwgfCBURmlsZSk6IEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyB8IG51bGwge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21tYW5kU3RhcnQ7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICBpZiAoY3Vyc29yLmxpbmUgPT09IHN0YXJ0LmxpbmUgJiYgY3Vyc29yLmNoID49IHN0YXJ0LmNoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5kOiBjdXJzb3IsXG4gICAgICAgICAgcXVlcnk6IGVkaXRvci5nZXRMaW5lKGN1cnNvci5saW5lKS5zbGljZShzdGFydC5jaCwgY3Vyc29yLmNoKSxcbiAgICAgICAgICBzdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5jb21tYW5kU3RhcnQgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vblRleHRUcmlnZ2VyKGN1cnNvciwgZWRpdG9yLCBmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgc3VnZ2VzdCBhdCB0aGUgY3Vyc29yIG9mIGFuIGVkaXRvciwgdHlwaWNhbGx5IGZyb20gYSBjb21tYW5kJ3MgYGVkaXRvckNhbGxiYWNrYC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzdWdnZXN0IGFjY2VwdGVkIHRoZSBjdXJzb3I6IGBmYWxzZWAgd2hlbiB0ZXh0IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcHVibGljIG9wZW5Gcm9tQ29tbWFuZChwYXJhbXM6IENvbW1hbmRFZGl0b3JTdWdnZXN0T3BlbkZyb21Db21tYW5kUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBlZGl0b3IsIGZpbGUgfSA9IHBhcmFtcztcbiAgICB0aGlzLmNvbW1hbmRTdGFydCA9IGVkaXRvci5nZXRDdXJzb3IoKTtcbiAgICBpZiAoIXRoaXMudHJpZ2dlcihlZGl0b3IsIGZpbGUsIHRydWUpKSB7XG4gICAgICB0aGlzLmNvbW1hbmRTdGFydCA9IG51bGw7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS5lZGl0b3JTdWdnZXN0LnNldEN1cnJlbnRTdWdnZXN0KHRoaXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgc3VnZ2VzdCBvcGVucyBvbiB0eXBlZCB0ZXh0LCBvdXRzaWRlIGEgY29tbWFuZC1vcGVuZWQgc2Vzc2lvbi4gTmV2ZXIsIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBfY3Vyc29yIC0gVGhlIGN1cnNvci5cbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZSBvcGVuIGluIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSB0cmlnZ2VyIGluZm8sIG9yIGBudWxsYCB0byBzdGF5IGNsb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblRleHRUcmlnZ2VyKF9jdXJzb3I6IEVkaXRvclBvc2l0aW9uLCBfZWRpdG9yOiBFZGl0b3IsIF9maWxlOiBudWxsIHwgVEZpbGUpOiBFZGl0b3JTdWdnZXN0VHJpZ2dlckluZm8gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1vdmVzIGEgcmVnaXN0ZXJlZCBlZGl0b3Igc3VnZ2VzdCB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgdGhlIGVkaXRvciBhc2tzLCBzbyBpdCBvcGVucyBhaGVhZCBvZiBldmVyeSBvdGhlciBzdWdnZXN0XG4gKiB3aG9zZSB0cmlnZ2VyIGFjY2VwdHMgdGhlIHNhbWUgdGV4dCwgT2JzaWRpYW4ncyBvd24gYFtbYCBhbmQgYCNgIHN1Z2dlc3RzIGluY2x1ZGVkLiBBIHN1Z2dlc3QgcHJpb3JpdGl6ZWQgbGF0ZXIgZ29lc1xuICogYWhlYWQgb2YgaXQgaW4gdHVybi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAdGhyb3dzIElmIHRoZSBlZGl0b3Igc3VnZ2VzdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW9yaXRpemVFZGl0b3JTdWdnZXN0KHBhcmFtczogUHJpb3JpdGl6ZUVkaXRvclN1Z2dlc3RQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhcHAsIGVkaXRvclN1Z2dlc3QgfSA9IHBhcmFtcztcbiAgY29uc3Qgc3VnZ2VzdHMgPSBhcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3Quc3VnZ2VzdHM7XG4gIGNvbnN0IGluZGV4ID0gc3VnZ2VzdHMuaW5kZXhPZihlZGl0b3JTdWdnZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGVkaXRvciBzdWdnZXN0IGlzIG5vdCByZWdpc3RlcmVkLiBSZWdpc3RlciBpdCBiZWZvcmUgcHJpb3JpdGl6aW5nIGl0LicpO1xuICB9XG4gIHN1Z2dlc3RzLnNwbGljZShpbmRleCwgMSk7XG4gIHN1Z2dlc3RzLnVuc2hpZnQoZWRpdG9yU3VnZ2VzdCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLFNBQVMscUJBQXFCO0FBdUR2QixNQUFlLDZCQUFnQyxjQUFpQjtBQUFBLEVBQzdELGVBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLOUIsUUFBYztBQUM1QixTQUFLLGVBQWU7QUFDcEIsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV2dCLFVBQVUsUUFBd0IsUUFBZ0IsTUFBcUQ7QUFDckgsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxPQUFPO0FBQ1QsVUFBSSxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFDdkQsZUFBTztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsT0FBTyxPQUFPLFFBQVEsT0FBTyxJQUFJLEVBQUUsTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO0FBQUEsVUFDNUQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFdBQUssZUFBZTtBQUFBLElBQ3RCO0FBQ0EsV0FBTyxLQUFLLGNBQWMsUUFBUSxRQUFRLElBQUk7QUFBQSxFQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sZ0JBQWdCLFFBQTREO0FBQ2pGLFVBQU0sRUFBRSxRQUFRLEtBQUssSUFBSTtBQUN6QixTQUFLLGVBQWUsT0FBTyxVQUFVO0FBQ3JDLFFBQUksQ0FBQyxLQUFLLFFBQVEsUUFBUSxNQUFNLElBQUksR0FBRztBQUNyQyxXQUFLLGVBQWU7QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLElBQUksVUFBVSxjQUFjLGtCQUFrQixJQUFJO0FBQ3ZELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVUsY0FBYyxTQUF5QixTQUFpQixPQUFzRDtBQUN0SCxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBVU8sU0FBUyx3QkFBd0IsUUFBNkM7QUFDbkYsUUFBTSxFQUFFLEtBQUssY0FBYyxJQUFJO0FBQy9CLFFBQU0sV0FBVyxJQUFJLFVBQVUsY0FBYztBQUM3QyxRQUFNLFFBQVEsU0FBUyxRQUFRLGFBQWE7QUFDNUMsTUFBSSxVQUFVLElBQUk7QUFDaEIsVUFBTSxJQUFJLE1BQU0sMkVBQTJFO0FBQUEsRUFDN0Y7QUFDQSxXQUFTLE9BQU8sT0FBTyxDQUFDO0FBQ3hCLFdBQVMsUUFBUSxhQUFhO0FBQ2hDOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,54 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Links to a plugin's feature-request issue form without collecting a bug-report environment.
6
+ */
7
+ import type { App } from 'obsidian';
8
+ /**
9
+ * The feature-request form's file name under `.github/ISSUE_TEMPLATE`.
10
+ */
11
+ export declare const FEATURE_REQUEST_ISSUE_FORM_TEMPLATE = "feature_request.yml";
12
+ /**
13
+ * Field ids the feature-request form must use for prefilling.
14
+ */
15
+ export declare enum FeatureRequestIssueFormFieldId {
16
+ /**
17
+ * The requesting plugin's installed version.
18
+ */
19
+ PluginVersion = "plugin-version"
20
+ }
21
+ /**
22
+ * Parameters for {@link getFeatureRequestIssueFormUrl}.
23
+ */
24
+ export interface GetFeatureRequestIssueFormUrlParams {
25
+ /**
26
+ * The Obsidian app instance.
27
+ */
28
+ readonly app: App;
29
+ /**
30
+ * The repository, as `owner/name`.
31
+ */
32
+ readonly gitHubRepo: string;
33
+ /**
34
+ * The requesting plugin's id.
35
+ */
36
+ readonly pluginId: string;
37
+ /**
38
+ * The form's file name under `.github/ISSUE_TEMPLATE`.
39
+ *
40
+ * @default {@link FEATURE_REQUEST_ISSUE_FORM_TEMPLATE}
41
+ */
42
+ readonly template?: string;
43
+ /**
44
+ * The issue's title. Omit to keep the form's default title.
45
+ */
46
+ readonly title?: string;
47
+ }
48
+ /**
49
+ * Gets the feature-request form URL, prefilling only {@link FeatureRequestIssueFormFieldId.PluginVersion}.
50
+ *
51
+ * @param params - The parameters.
52
+ * @returns The link.
53
+ */
54
+ export declare function getFeatureRequestIssueFormUrl(params: GetFeatureRequestIssueFormUrlParams): string;
@@ -0,0 +1,25 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { getGitHubIssueFormUrl } from "./bug-report.mjs";
7
+ const FEATURE_REQUEST_ISSUE_FORM_TEMPLATE = "feature_request.yml";
8
+ var FeatureRequestIssueFormFieldId = /* @__PURE__ */ ((FeatureRequestIssueFormFieldId2) => {
9
+ FeatureRequestIssueFormFieldId2["PluginVersion"] = "plugin-version";
10
+ return FeatureRequestIssueFormFieldId2;
11
+ })(FeatureRequestIssueFormFieldId || {});
12
+ function getFeatureRequestIssueFormUrl(params) {
13
+ return getGitHubIssueFormUrl({
14
+ fields: { ["plugin-version" /* PluginVersion */]: params.app.plugins.manifests[params.pluginId]?.version ?? "unknown" },
15
+ gitHubRepo: params.gitHubRepo,
16
+ template: params.template ?? FEATURE_REQUEST_ISSUE_FORM_TEMPLATE,
17
+ ...params.title !== void 0 && { title: params.title }
18
+ });
19
+ }
20
+ export {
21
+ FEATURE_REQUEST_ISSUE_FORM_TEMPLATE,
22
+ FeatureRequestIssueFormFieldId,
23
+ getFeatureRequestIssueFormUrl
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZlYXR1cmUtcmVxdWVzdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbmtzIHRvIGEgcGx1Z2luJ3MgZmVhdHVyZS1yZXF1ZXN0IGlzc3VlIGZvcm0gd2l0aG91dCBjb2xsZWN0aW5nIGEgYnVnLXJlcG9ydCBlbnZpcm9ubWVudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0R2l0SHViSXNzdWVGb3JtVXJsIH0gZnJvbSAnLi9idWctcmVwb3J0LnRzJztcblxuLyoqXG4gKiBUaGUgZmVhdHVyZS1yZXF1ZXN0IGZvcm0ncyBmaWxlIG5hbWUgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9SRVFVRVNUX0lTU1VFX0ZPUk1fVEVNUExBVEUgPSAnZmVhdHVyZV9yZXF1ZXN0LnltbCc7XG5cbi8qKlxuICogRmllbGQgaWRzIHRoZSBmZWF0dXJlLXJlcXVlc3QgZm9ybSBtdXN0IHVzZSBmb3IgcHJlZmlsbGluZy5cbiAqL1xuZXhwb3J0IGVudW0gRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkIHtcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0aW5nIHBsdWdpbidzIGluc3RhbGxlZCB2ZXJzaW9uLlxuICAgKi9cbiAgUGx1Z2luVmVyc2lvbiA9ICdwbHVnaW4tdmVyc2lvbidcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0RmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZlYXR1cmVSZXF1ZXN0SXNzdWVGb3JtVXJsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdGluZyBwbHVnaW4ncyBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSdzIGZpbGUgbmFtZSB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBGRUFUVVJFX1JFUVVFU1RfSVNTVUVfRk9STV9URU1QTEFURX1cbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIE9taXQgdG8ga2VlcCB0aGUgZm9ybSdzIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBmZWF0dXJlLXJlcXVlc3QgZm9ybSBVUkwsIHByZWZpbGxpbmcgb25seSB7QGxpbmsgRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb259LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1VcmwocGFyYW1zOiBHZXRGZWF0dXJlUmVxdWVzdElzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmwoe1xuICAgIGZpZWxkczogeyBbRmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb25dOiBwYXJhbXMuYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BhcmFtcy5wbHVnaW5JZF0/LnZlcnNpb24gPz8gJ3Vua25vd24nIH0sXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgdGVtcGxhdGU6IHBhcmFtcy50ZW1wbGF0ZSA/PyBGRUFUVVJFX1JFUVVFU1RfSVNTVUVfRk9STV9URU1QTEFURSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBUUEsU0FBUyw2QkFBNkI7QUFLL0IsTUFBTSxzQ0FBc0M7QUFLNUMsSUFBSyxpQ0FBTCxrQkFBS0Esb0NBQUw7QUFJTCxFQUFBQSxnQ0FBQSxtQkFBZ0I7QUFKTixTQUFBQTtBQUFBLEdBQUE7QUF5Q0wsU0FBUyw4QkFBOEIsUUFBcUQ7QUFDakcsU0FBTyxzQkFBc0I7QUFBQSxJQUMzQixRQUFRLEVBQUUsQ0FBQyxvQ0FBNEMsR0FBRyxPQUFPLElBQUksUUFBUSxVQUFVLE9BQU8sUUFBUSxHQUFHLFdBQVcsVUFBVTtBQUFBLElBQzlILFlBQVksT0FBTztBQUFBLElBQ25CLFVBQVUsT0FBTyxZQUFZO0FBQUEsSUFDN0IsR0FBRyxPQUFPLFVBQVUsVUFBYSxFQUFFLE9BQU8sT0FBTyxNQUFNO0FBQUEsRUFDekQsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJGZWF0dXJlUmVxdWVzdElzc3VlRm9ybUZpZWxkSWQiXQp9Cg==