@mnaoumov/obsidian-lib 10.6.0 → 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 (77) hide show
  1. package/command-handlers/open-discussion-command-handler/package.json +6 -0
  2. package/command-handlers/open-feature-request-command-handler/package.json +6 -0
  3. package/command-handlers/open-git-hub-command-handler/package.json +6 -0
  4. package/components/style-sheet-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +42 -1
  6. package/dist/lib/cjs/__merged.d.cts +9 -0
  7. package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
  8. package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
  9. package/dist/lib/cjs/command-handlers/index.cjs +10 -1
  10. package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
  13. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
  14. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
  15. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
  16. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
  17. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
  18. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
  19. package/dist/lib/cjs/components/index.cjs +4 -1
  20. package/dist/lib/cjs/components/index.d.cts +1 -0
  21. package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
  22. package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
  23. package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
  24. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
  25. package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
  26. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
  27. package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
  28. package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
  29. package/dist/lib/cjs/editor-suggest.cjs +2 -3
  30. package/dist/lib/cjs/feature-request.cjs +115 -0
  31. package/dist/lib/cjs/feature-request.d.cts +54 -0
  32. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  33. package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
  34. package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
  35. package/dist/lib/cjs/git-rename-history.cjs +148 -0
  36. package/dist/lib/cjs/git-rename-history.d.cts +43 -0
  37. package/dist/lib/cjs/index.cjs +16 -1
  38. package/dist/lib/cjs/index.d.cts +5 -0
  39. package/dist/lib/cjs/vault.cjs +2 -2
  40. package/dist/lib/cjs/vault.d.cts +3 -1
  41. package/dist/lib/esm/__merged.d.mts +9 -0
  42. package/dist/lib/esm/__merged.mjs +41 -1
  43. package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
  44. package/dist/lib/esm/broken-link-candidates.mjs +275 -0
  45. package/dist/lib/esm/command-handlers/index.d.mts +3 -0
  46. package/dist/lib/esm/command-handlers/index.mjs +7 -1
  47. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
  48. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
  49. package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
  50. package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
  51. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
  52. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
  53. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
  54. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
  55. package/dist/lib/esm/components/index.d.mts +1 -0
  56. package/dist/lib/esm/components/index.mjs +3 -1
  57. package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
  58. package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
  59. package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
  60. package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
  61. package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
  62. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  63. package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
  64. package/dist/lib/esm/desktop-git-runner.mjs +19 -0
  65. package/dist/lib/esm/editor-suggest.mjs +2 -3
  66. package/dist/lib/esm/feature-request.d.mts +54 -0
  67. package/dist/lib/esm/feature-request.mjs +25 -0
  68. package/dist/lib/esm/generated-during-build.mjs +1 -1
  69. package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
  70. package/dist/lib/esm/git-hub-discussion.mjs +13 -0
  71. package/dist/lib/esm/git-rename-history.d.mts +43 -0
  72. package/dist/lib/esm/git-rename-history.mjs +59 -0
  73. package/dist/lib/esm/index.d.mts +5 -0
  74. package/dist/lib/esm/index.mjs +11 -1
  75. package/dist/lib/esm/vault.d.mts +3 -1
  76. package/dist/lib/esm/vault.mjs +2 -2
  77. package/package.json +2 -2
@@ -0,0 +1,275 @@
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 { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
34
+ var BrokenLinkEvidenceKind = /* @__PURE__ */ ((BrokenLinkEvidenceKind2) => {
35
+ BrokenLinkEvidenceKind2["Alias"] = "Alias";
36
+ BrokenLinkEvidenceKind2["CaseChange"] = "CaseChange";
37
+ BrokenLinkEvidenceKind2["GitRename"] = "GitRename";
38
+ BrokenLinkEvidenceKind2["RenamedFolder"] = "RenamedFolder";
39
+ BrokenLinkEvidenceKind2["SameName"] = "SameName";
40
+ BrokenLinkEvidenceKind2["Title"] = "Title";
41
+ return BrokenLinkEvidenceKind2;
42
+ })(BrokenLinkEvidenceKind || {});
43
+ const FOLDER_NOTE_MIN_SUFFIX_LENGTH = 2;
44
+ const EVIDENCE_KIND_ORDER = [
45
+ "GitRename" /* GitRename */,
46
+ "CaseChange" /* CaseChange */,
47
+ "Alias" /* Alias */,
48
+ "Title" /* Title */,
49
+ "RenamedFolder" /* RenamedFolder */,
50
+ "SameName" /* SameName */
51
+ ];
52
+ class BrokenLinkCandidateFinder {
53
+ aliasesByPath;
54
+ childFoldersByFolder = /* @__PURE__ */ new Map();
55
+ filePathSet;
56
+ filesByLowerCasePath = /* @__PURE__ */ new Map();
57
+ filesByName = /* @__PURE__ */ new Map();
58
+ folderNoteFileNames;
59
+ folderPaths = /* @__PURE__ */ new Set([""]);
60
+ gitRenames;
61
+ titlesByPath;
62
+ /**
63
+ * Indexes the vault snapshot.
64
+ *
65
+ * @param params - The snapshot.
66
+ */
67
+ constructor(params) {
68
+ this.aliasesByPath = params.aliasesByPath;
69
+ this.filePathSet = new Set(params.filePaths);
70
+ this.folderNoteFileNames = new Set(params.folderNoteFileNames);
71
+ this.gitRenames = params.gitRenames;
72
+ this.titlesByPath = params.titlesByPath;
73
+ for (const filePath of params.filePaths) {
74
+ addToMultiMap(this.filesByName, getName(filePath), filePath);
75
+ addToMultiMap(this.filesByLowerCasePath, filePath.toLowerCase(), filePath);
76
+ let folder = getParentPath(filePath);
77
+ while (!this.folderPaths.has(folder)) {
78
+ this.folderPaths.add(folder);
79
+ addToMultiMap(this.childFoldersByFolder, getParentPath(folder), folder);
80
+ folder = getParentPath(folder);
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Finds the candidates for every missing path at once.
86
+ *
87
+ * All at once because one kind of evidence is collective: a renamed folder is recognized by every missing
88
+ * target that was under it turning up together under one sibling folder.
89
+ *
90
+ * @param missingPaths - The vault paths that links lead to and no file holds.
91
+ * @returns The candidates for each missing path, strongest first; an empty list when nothing is known.
92
+ */
93
+ findAll(missingPaths) {
94
+ const uniqueMissingPaths = new Set(missingPaths);
95
+ const missingSubtrees = this.getMissingSubtrees(uniqueMissingPaths);
96
+ const result = /* @__PURE__ */ new Map();
97
+ for (const missingPath of uniqueMissingPaths) {
98
+ let add2 = function(path, kind, description) {
99
+ addToMultiMap(evidenceByPath, path, { description, kind });
100
+ };
101
+ var add = add2;
102
+ const evidenceByPath = /* @__PURE__ */ new Map();
103
+ this.addGitRenameCandidate(missingPath, add2);
104
+ this.addCaseChangeCandidates(missingPath, add2);
105
+ this.addAliasAndTitleCandidates(missingPath, add2);
106
+ this.addRenamedFolderCandidates(missingPath, missingSubtrees, add2);
107
+ this.addSameNameCandidates(missingPath, add2);
108
+ result.set(missingPath, sortCandidates(evidenceByPath));
109
+ }
110
+ return result;
111
+ }
112
+ addAliasAndTitleCandidates(missingPath, add) {
113
+ const name = getName(missingPath);
114
+ const isFolderNote = this.folderNoteFileNames.has(name);
115
+ let oldName;
116
+ if (isFolderNote) {
117
+ oldName = getName(getParentPath(missingPath));
118
+ if (!oldName) {
119
+ return;
120
+ }
121
+ } else if (name.toLowerCase().endsWith(".md")) {
122
+ oldName = name.slice(0, -".md".length);
123
+ } else {
124
+ return;
125
+ }
126
+ const lowerCaseOldName = oldName.toLowerCase();
127
+ const isEligible = (path) => this.filePathSet.has(path) && (!isFolderNote || getName(path) === name);
128
+ for (const [path, aliases] of this.aliasesByPath) {
129
+ if (isEligible(path) && aliases.some((alias) => alias.toLowerCase() === lowerCaseOldName)) {
130
+ add(path, "Alias" /* Alias */, `Its aliases hold the old name "${oldName}".`);
131
+ }
132
+ }
133
+ for (const [path, title] of this.titlesByPath) {
134
+ if (isEligible(path) && title.toLowerCase() === lowerCaseOldName) {
135
+ add(path, "Title" /* Title */, `Its title is the old name "${oldName}".`);
136
+ }
137
+ }
138
+ }
139
+ addCaseChangeCandidates(missingPath, add) {
140
+ for (const path of this.filesByLowerCasePath.get(missingPath.toLowerCase()) ?? []) {
141
+ add(path, "CaseChange" /* CaseChange */, "Only the letter case of its path differs.");
142
+ }
143
+ }
144
+ addGitRenameCandidate(missingPath, add) {
145
+ const gitRename = this.gitRenames.get(missingPath);
146
+ if (gitRename && this.filePathSet.has(gitRename.newPath)) {
147
+ add(gitRename.newPath, "GitRename" /* GitRename */, `Git history records the rename, in commit ${gitRename.commit}.`);
148
+ }
149
+ }
150
+ addRenamedFolderCandidates(missingPath, missingSubtrees, add) {
151
+ const missingSubtree = missingSubtrees.get(missingPath);
152
+ if (!missingSubtree) {
153
+ return;
154
+ }
155
+ const parentPath = getParentPath(missingSubtree.root);
156
+ const remainder = getRelativePath(missingSubtree.root, missingPath);
157
+ for (const siblingFolder of this.childFoldersByFolder.get(parentPath) ?? []) {
158
+ const isSubtreeIntact = [...missingSubtree.remainders].every((path) => this.filePathSet.has(joinPath(siblingFolder, path)));
159
+ if (!isSubtreeIntact) {
160
+ continue;
161
+ }
162
+ const fileCount = missingSubtree.remainders.size;
163
+ add(
164
+ joinPath(siblingFolder, remainder),
165
+ "RenamedFolder" /* RenamedFolder */,
166
+ `The folder "${missingSubtree.root}" is gone, and its sibling "${siblingFolder}" holds ${fileCount === 1 ? "the missing file that was" : `all ${String(fileCount)} missing files that were`} under it.`
167
+ );
168
+ }
169
+ }
170
+ addSameNameCandidates(missingPath, add) {
171
+ const name = getName(missingPath);
172
+ const minSuffixLength = this.folderNoteFileNames.has(name) ? FOLDER_NOTE_MIN_SUFFIX_LENGTH : 1;
173
+ const missingSegments = missingPath.split("/");
174
+ let bestSuffixLength = minSuffixLength;
175
+ let bestPaths = [];
176
+ for (const path of this.filesByName.get(name) ?? []) {
177
+ const suffixLength = getCommonSuffixLength(missingSegments, path.split("/"));
178
+ if (suffixLength > bestSuffixLength) {
179
+ bestSuffixLength = suffixLength;
180
+ bestPaths = [path];
181
+ } else if (suffixLength === bestSuffixLength) {
182
+ bestPaths.push(path);
183
+ }
184
+ }
185
+ const suffix = missingSegments.slice(-bestSuffixLength).join("/");
186
+ for (const path of bestPaths) {
187
+ add(path, "SameName" /* SameName */, `It has the same name, "${suffix}", in another folder.`);
188
+ }
189
+ }
190
+ /**
191
+ * Groups the missing paths by the highest missing folder above each, the root of a subtree that may have been
192
+ * renamed as a whole.
193
+ *
194
+ * @param missingPaths - The missing paths.
195
+ * @returns Each missing path's subtree; a path whose own folder exists has none.
196
+ */
197
+ getMissingSubtrees(missingPaths) {
198
+ const subtreesByRoot = /* @__PURE__ */ new Map();
199
+ const result = /* @__PURE__ */ new Map();
200
+ for (const missingPath of missingPaths) {
201
+ let root = getParentPath(missingPath);
202
+ if (this.folderPaths.has(root)) {
203
+ continue;
204
+ }
205
+ while (!this.folderPaths.has(getParentPath(root))) {
206
+ root = getParentPath(root);
207
+ }
208
+ let missingSubtree = subtreesByRoot.get(root);
209
+ if (!missingSubtree) {
210
+ missingSubtree = { remainders: /* @__PURE__ */ new Set(), root };
211
+ subtreesByRoot.set(root, missingSubtree);
212
+ }
213
+ missingSubtree.remainders.add(getRelativePath(root, missingPath));
214
+ result.set(missingPath, missingSubtree);
215
+ }
216
+ return result;
217
+ }
218
+ }
219
+ function getParentPath(path) {
220
+ const index = path.lastIndexOf("/");
221
+ return index === -1 ? "" : path.slice(0, index);
222
+ }
223
+ function getPathMapping(oldPath, newPath) {
224
+ const oldSegments = oldPath.split("/");
225
+ const newSegments = newPath.split("/");
226
+ const suffixLength = getCommonSuffixLength(oldSegments, newSegments);
227
+ return {
228
+ newPrefix: newSegments.slice(0, newSegments.length - suffixLength).join("/"),
229
+ oldPrefix: oldSegments.slice(0, oldSegments.length - suffixLength).join("/")
230
+ };
231
+ }
232
+ function addToMultiMap(map, key, value) {
233
+ let values = map.get(key);
234
+ if (!values) {
235
+ values = [];
236
+ map.set(key, values);
237
+ }
238
+ values.push(value);
239
+ }
240
+ function getCommonSuffixLength(segments1, segments2) {
241
+ let length = 0;
242
+ while (length < segments1.length && length < segments2.length && segments1.at(-length - 1) === segments2.at(-length - 1)) {
243
+ length++;
244
+ }
245
+ return length;
246
+ }
247
+ function getEvidenceRank(evidence) {
248
+ return EVIDENCE_KIND_ORDER.indexOf(evidence.kind);
249
+ }
250
+ function getName(path) {
251
+ return path.slice(path.lastIndexOf("/") + 1);
252
+ }
253
+ function getRelativePath(folder, path) {
254
+ return path.slice(folder.length + 1);
255
+ }
256
+ function joinPath(folder, path) {
257
+ return `${folder}/${path}`;
258
+ }
259
+ function sortCandidates(evidenceByPath) {
260
+ const candidates = [...evidenceByPath].map(([path, evidence]) => ({
261
+ evidence: evidence.sort((evidence1, evidence2) => getEvidenceRank(evidence1) - getEvidenceRank(evidence2)),
262
+ path
263
+ }));
264
+ return candidates.sort((candidate1, candidate2) => {
265
+ const rankDifference = getEvidenceRank(ensureNonNullable(candidate1.evidence[0])) - getEvidenceRank(ensureNonNullable(candidate2.evidence[0]));
266
+ return rankDifference || candidate1.path.localeCompare(candidate2.path);
267
+ });
268
+ }
269
+ export {
270
+ BrokenLinkCandidateFinder,
271
+ BrokenLinkEvidenceKind,
272
+ getParentPath,
273
+ getPathMapping
274
+ };
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icm9rZW4tbGluay1jYW5kaWRhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXaGVyZSBkaWQgYSBtaXNzaW5nIGxpbmsgdGFyZ2V0IGdvPyBQdXJlLCBubyBgQXBwYDogZXZlcnkgcXVlc3Rpb24gYWJvdXQgd2hpY2ggZmlsZSBhIGJyb2tlbiBsaW5rIG1vc3QgbGlrZWx5XG4gKiBtZWFudCBpcyBhbnN3ZXJhYmxlIGZyb20gYSBsaXN0IG9mIHBhdGhzLCB0aGUgbm90ZXMnIGFsaWFzZXMgYW5kIHRpdGxlcywgYW5kIHRoZSB2YXVsdCdzIGdpdCByZW5hbWVzLlxuICpcbiAqIEEgcmVuYW1lIGlzIG5vdCByZWNvdmVyYWJsZSBmcm9tIHRoZSBsaW5rIGFsb25lOiBhIGxpbmsgdG8gYGFscGhhL2JyYXZvL2NoYXJsaWUvIS5tZGAgc2F5cyBub3RoaW5nIGFib3V0XG4gKiBgY2hhcmxpZWAgaGF2aW5nIGJlY29tZSBgZGVsdGFgLiBTbyBldmVyeSBjYW5kaWRhdGUgY2FycmllcyB0aGUgZXZpZGVuY2UgdGhhdCBwcm9kdWNlZCBpdCwgZnJvbSBvdXRzaWRlIHRoZVxuICogbGluaywgYW5kIHRoZSBmaW5kZXIgbmV2ZXIgcGlja3Mgb25lIG9mIHNldmVyYWw6IGEgY2FsbGVyIG9mZmVycyBhIG9uZS1jbGljayBmaXggb25seSB3aGVuIGV4YWN0bHkgb25lXG4gKiBjYW5kaWRhdGUgZXhpc3RzLlxuICovXG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuLyoqXG4gKiBUaGUga2luZCBvZiBldmlkZW5jZSB0aGF0IG1ha2VzIGEgZmlsZSBhIGNhbmRpZGF0ZSBmb3IgYSBtaXNzaW5nIGxpbmsgdGFyZ2V0LlxuICpcbiAqIENhbmRpZGF0ZXMgbGlzdCBldmlkZW5jZSBzdHJvbmdlc3QgZmlyc3QsIGluIEVWSURFTkNFX0tJTkRfT1JERVIgYmVsb3cuXG4gKi9cbmV4cG9ydCBlbnVtIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQge1xuICAvKipcbiAgICogVGhlIGNhbmRpZGF0ZSdzIGBhbGlhc2VzYCBob2xkIHRoZSBtaXNzaW5nIHRhcmdldCdzIG9sZCBuYW1lLlxuICAgKi9cbiAgQWxpYXMgPSAnQWxpYXMnLFxuXG4gIC8qKlxuICAgKiBUaGUgY2FuZGlkYXRlJ3MgcGF0aCBkaWZmZXJzIGZyb20gdGhlIG1pc3Npbmcgb25lIG9ubHkgaW4gbGV0dGVyIGNhc2UuXG4gICAqL1xuICBDYXNlQ2hhbmdlID0gJ0Nhc2VDaGFuZ2UnLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQncyBnaXQgaGlzdG9yeSByZWNvcmRzIHRoZSBtaXNzaW5nIHBhdGggYmVpbmcgcmVuYW1lZCB0byB0aGUgY2FuZGlkYXRlLlxuICAgKi9cbiAgR2l0UmVuYW1lID0gJ0dpdFJlbmFtZScsXG5cbiAgLyoqXG4gICAqIFRoZSBtaXNzaW5nIHRhcmdldCdzIGZvbGRlciBpcyBnb25lLCBhbmQgYSBzaWJsaW5nIGZvbGRlciBob2xkcyBldmVyeSBtaXNzaW5nIHRhcmdldCB0aGF0IHdhcyB1bmRlciBpdC5cbiAgICovXG4gIFJlbmFtZWRGb2xkZXIgPSAnUmVuYW1lZEZvbGRlcicsXG5cbiAgLyoqXG4gICAqIEEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCB0aGUgbG9uZ2VzdCBydW4gb2YgdGhlIHNhbWUgcGFyZW50IGZvbGRlcnMsIHNpdHMgZWxzZXdoZXJlLlxuICAgKi9cbiAgU2FtZU5hbWUgPSAnU2FtZU5hbWUnLFxuXG4gIC8qKlxuICAgKiBUaGUgY2FuZGlkYXRlJ3MgYHRpdGxlYCBpcyB0aGUgbWlzc2luZyB0YXJnZXQncyBvbGQgbmFtZS5cbiAgICovXG4gIFRpdGxlID0gJ1RpdGxlJ1xufVxuXG4vKipcbiAqIEEgZm9sZGVyIG5vdGUncyBvd24gbmFtZSBpZGVudGlmaWVzIG5vdGhpbmcsIHNvIGEgc2FtZS1uYW1lIGNhbmRpZGF0ZSBtdXN0IHNoYXJlIGl0cyBmb2xkZXIncyBuYW1lIHRvby5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVfTUlOX1NVRkZJWF9MRU5HVEggPSAyO1xuXG5jb25zdCBFVklERU5DRV9LSU5EX09SREVSOiByZWFkb25seSBCcm9rZW5MaW5rRXZpZGVuY2VLaW5kW10gPSBbXG4gIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQuR2l0UmVuYW1lLFxuICBCcm9rZW5MaW5rRXZpZGVuY2VLaW5kLkNhc2VDaGFuZ2UsXG4gIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQuQWxpYXMsXG4gIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQuVGl0bGUsXG4gIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQuUmVuYW1lZEZvbGRlcixcbiAgQnJva2VuTGlua0V2aWRlbmNlS2luZC5TYW1lTmFtZVxuXTtcblxuLyoqXG4gKiBPbmUgZmlsZSB0aGF0IGEgbWlzc2luZyBsaW5rIHRhcmdldCBtYXkgaGF2ZSBiZWNvbWUsIGFuZCB3aHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGlua0NhbmRpZGF0ZSB7XG4gIC8qKlxuICAgKiBFdmVyeSByZWFzb24gdGhpcyBmaWxlIGlzIGEgY2FuZGlkYXRlLCBzdHJvbmdlc3QgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSBldmlkZW5jZTogcmVhZG9ubHkgQnJva2VuTGlua0V2aWRlbmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBjYW5kaWRhdGUncyB2YXVsdCBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgQnJva2VuTGlua0NhbmRpZGF0ZUZpbmRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VuTGlua0NhbmRpZGF0ZUZpbmRlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIEVhY2ggbm90ZSdzIGBhbGlhc2VzYCwgYnkgbm90ZSBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNlc0J5UGF0aDogUmVhZG9ubHlNYXA8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IGZpbGUgaW4gdGhlIHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgbmFtZXMgYSBmb2xkZXIgbm90ZSBpcyBzdG9yZWQgdW5kZXIsIHN1Y2ggYXMgYGluZGV4Lm1kYC4gU3VjaCBhIG5hbWUgc2F5cyBub3RoaW5nIGFib3V0IHdoaWNoXG4gICAqIG5vdGUgaXQgaXMsIHNvIGEgc2FtZS1uYW1lIGNhbmRpZGF0ZSBtdXN0IHNoYXJlIGl0cyBmb2xkZXIncyBuYW1lIHRvbywgYW5kIHRoZSBvbGQgbmFtZSBhbiBhbGlhcyBpc1xuICAgKiBtYXRjaGVkIGFnYWluc3QgaXMgdGhlIGZvbGRlcidzLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyTm90ZUZpbGVOYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCdzIGdpdCByZW5hbWVzOiBlYWNoIG9sZCB2YXVsdCBwYXRoIHRvIHRoZSBwYXRoIGl0IHdhcyByZW5hbWVkIHRvLCBjaGFpbnMgYWxyZWFkeSBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdFJlbmFtZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgR2l0UmVuYW1lPjtcblxuICAvKipcbiAgICogRWFjaCBub3RlJ3MgYHRpdGxlYCwgYnkgbm90ZSBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGVzQnlQYXRoOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogT25lIHJlYXNvbiBhIGZpbGUgaXMgYSBjYW5kaWRhdGUgZm9yIGEgbWlzc2luZyBsaW5rIHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm9rZW5MaW5rRXZpZGVuY2Uge1xuICAvKipcbiAgICogQSBzZW50ZW5jZSBuYW1pbmcgdGhlIGV2aWRlbmNlLCBmb3IgdGhlIHVzZXIgdG8ganVkZ2UgaXQgYnkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiBldmlkZW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQ7XG59XG5cbi8qKlxuICogQSByZW5hbWUgcmVjb3JkZWQgaW4gdGhlIHZhdWx0J3MgZ2l0IGhpc3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0UmVuYW1lIHtcbiAgLyoqXG4gICAqIFRoZSBhYmJyZXZpYXRlZCBoYXNoIG9mIHRoZSBjb21taXQgdGhhdCBtYWRlIHRoZSBsYXN0IHJlbmFtZSBvZiB0aGUgY2hhaW4uXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0IHBhdGggdGhlIGZpbGUgd2FzIGxhc3QgcmVuYW1lZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiBhIG1pc3NpbmcgcGF0aCB0aGF0IGEgY2FuZGlkYXRlIHJlcGxhY2VkOiB3aGF0IGEgXCJmaXggYWxsIGxpa2UgdGhpc1wiIGFwcGxpZXMgdG8gZXZlcnkgb3RoZXIgbGluay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRoTWFwcGluZyB7XG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgY2FuZGlkYXRlIHBhdGggdGhhdCByZXBsYWNlZCB7QGxpbmsgb2xkUHJlZml4fTsgYCcnYCBmb3IgdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBuZXdQcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxlYWRpbmcgcGFydCBvZiB0aGUgbWlzc2luZyBwYXRoIHRoYXQgbm8gbG9uZ2VyIGV4aXN0czsgYCcnYCBmb3IgdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBvbGRQcmVmaXg6IHN0cmluZztcbn1cblxudHlwZSBFdmlkZW5jZUFkZGVyID0gKHBhdGg6IHN0cmluZywga2luZDogQnJva2VuTGlua0V2aWRlbmNlS2luZCwgZGVzY3JpcHRpb246IHN0cmluZykgPT4gdm9pZDtcblxuaW50ZXJmYWNlIE1pc3NpbmdTdWJ0cmVlIHtcbiAgLyoqXG4gICAqIEVhY2ggbWlzc2luZyBwYXRoIHVuZGVyIHRoZSBzdWJ0cmVlJ3Mgcm9vdCwgcmVsYXRpdmUgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSByZW1haW5kZXJzOiBTZXQ8c3RyaW5nPjtcblxuICByZWFkb25seSByb290OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNhbmRpZGF0ZXMgZm9yIG1pc3NpbmcgbGluayB0YXJnZXRzLCBmcm9tIG9uZSBzbmFwc2hvdCBvZiB0aGUgdmF1bHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBCcm9rZW5MaW5rQ2FuZGlkYXRlRmluZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGlhc2VzQnlQYXRoOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPjtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZEZvbGRlcnNCeUZvbGRlciA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aFNldDogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlc0J5TG93ZXJDYXNlUGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb2xkZXJOb3RlRmlsZU5hbWVzOiBSZWFkb25seVNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGZvbGRlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsnJ10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdFJlbmFtZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgR2l0UmVuYW1lPjtcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZXNCeVBhdGg6IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogSW5kZXhlcyB0aGUgdmF1bHQgc25hcHNob3QuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc25hcHNob3QuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBCcm9rZW5MaW5rQ2FuZGlkYXRlRmluZGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFsaWFzZXNCeVBhdGggPSBwYXJhbXMuYWxpYXNlc0J5UGF0aDtcbiAgICB0aGlzLmZpbGVQYXRoU2V0ID0gbmV3IFNldChwYXJhbXMuZmlsZVBhdGhzKTtcbiAgICB0aGlzLmZvbGRlck5vdGVGaWxlTmFtZXMgPSBuZXcgU2V0KHBhcmFtcy5mb2xkZXJOb3RlRmlsZU5hbWVzKTtcbiAgICB0aGlzLmdpdFJlbmFtZXMgPSBwYXJhbXMuZ2l0UmVuYW1lcztcbiAgICB0aGlzLnRpdGxlc0J5UGF0aCA9IHBhcmFtcy50aXRsZXNCeVBhdGg7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHBhcmFtcy5maWxlUGF0aHMpIHtcbiAgICAgIGFkZFRvTXVsdGlNYXAodGhpcy5maWxlc0J5TmFtZSwgZ2V0TmFtZShmaWxlUGF0aCksIGZpbGVQYXRoKTtcbiAgICAgIGFkZFRvTXVsdGlNYXAodGhpcy5maWxlc0J5TG93ZXJDYXNlUGF0aCwgZmlsZVBhdGgudG9Mb3dlckNhc2UoKSwgZmlsZVBhdGgpO1xuXG4gICAgICBsZXQgZm9sZGVyID0gZ2V0UGFyZW50UGF0aChmaWxlUGF0aCk7XG4gICAgICB3aGlsZSAoIXRoaXMuZm9sZGVyUGF0aHMuaGFzKGZvbGRlcikpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJQYXRocy5hZGQoZm9sZGVyKTtcbiAgICAgICAgYWRkVG9NdWx0aU1hcCh0aGlzLmNoaWxkRm9sZGVyc0J5Rm9sZGVyLCBnZXRQYXJlbnRQYXRoKGZvbGRlciksIGZvbGRlcik7XG4gICAgICAgIGZvbGRlciA9IGdldFBhcmVudFBhdGgoZm9sZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGNhbmRpZGF0ZXMgZm9yIGV2ZXJ5IG1pc3NpbmcgcGF0aCBhdCBvbmNlLlxuICAgKlxuICAgKiBBbGwgYXQgb25jZSBiZWNhdXNlIG9uZSBraW5kIG9mIGV2aWRlbmNlIGlzIGNvbGxlY3RpdmU6IGEgcmVuYW1lZCBmb2xkZXIgaXMgcmVjb2duaXplZCBieSBldmVyeSBtaXNzaW5nXG4gICAqIHRhcmdldCB0aGF0IHdhcyB1bmRlciBpdCB0dXJuaW5nIHVwIHRvZ2V0aGVyIHVuZGVyIG9uZSBzaWJsaW5nIGZvbGRlci5cbiAgICpcbiAgICogQHBhcmFtIG1pc3NpbmdQYXRocyAtIFRoZSB2YXVsdCBwYXRocyB0aGF0IGxpbmtzIGxlYWQgdG8gYW5kIG5vIGZpbGUgaG9sZHMuXG4gICAqIEByZXR1cm5zIFRoZSBjYW5kaWRhdGVzIGZvciBlYWNoIG1pc3NpbmcgcGF0aCwgc3Ryb25nZXN0IGZpcnN0OyBhbiBlbXB0eSBsaXN0IHdoZW4gbm90aGluZyBpcyBrbm93bi5cbiAgICovXG4gIHB1YmxpYyBmaW5kQWxsKG1pc3NpbmdQYXRoczogSXRlcmFibGU8c3RyaW5nPik6IE1hcDxzdHJpbmcsIEJyb2tlbkxpbmtDYW5kaWRhdGVbXT4ge1xuICAgIGNvbnN0IHVuaXF1ZU1pc3NpbmdQYXRocyA9IG5ldyBTZXQobWlzc2luZ1BhdGhzKTtcbiAgICBjb25zdCBtaXNzaW5nU3VidHJlZXMgPSB0aGlzLmdldE1pc3NpbmdTdWJ0cmVlcyh1bmlxdWVNaXNzaW5nUGF0aHMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBCcm9rZW5MaW5rQ2FuZGlkYXRlW10+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG1pc3NpbmdQYXRoIG9mIHVuaXF1ZU1pc3NpbmdQYXRocykge1xuICAgICAgY29uc3QgZXZpZGVuY2VCeVBhdGggPSBuZXcgTWFwPHN0cmluZywgQnJva2VuTGlua0V2aWRlbmNlW10+KCk7XG4gICAgICBmdW5jdGlvbiBhZGQocGF0aDogc3RyaW5nLCBraW5kOiBCcm9rZW5MaW5rRXZpZGVuY2VLaW5kLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGFkZFRvTXVsdGlNYXAoZXZpZGVuY2VCeVBhdGgsIHBhdGgsIHsgZGVzY3JpcHRpb24sIGtpbmQgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkR2l0UmVuYW1lQ2FuZGlkYXRlKG1pc3NpbmdQYXRoLCBhZGQpO1xuICAgICAgdGhpcy5hZGRDYXNlQ2hhbmdlQ2FuZGlkYXRlcyhtaXNzaW5nUGF0aCwgYWRkKTtcbiAgICAgIHRoaXMuYWRkQWxpYXNBbmRUaXRsZUNhbmRpZGF0ZXMobWlzc2luZ1BhdGgsIGFkZCk7XG4gICAgICB0aGlzLmFkZFJlbmFtZWRGb2xkZXJDYW5kaWRhdGVzKG1pc3NpbmdQYXRoLCBtaXNzaW5nU3VidHJlZXMsIGFkZCk7XG4gICAgICB0aGlzLmFkZFNhbWVOYW1lQ2FuZGlkYXRlcyhtaXNzaW5nUGF0aCwgYWRkKTtcblxuICAgICAgcmVzdWx0LnNldChtaXNzaW5nUGF0aCwgc29ydENhbmRpZGF0ZXMoZXZpZGVuY2VCeVBhdGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBbGlhc0FuZFRpdGxlQ2FuZGlkYXRlcyhtaXNzaW5nUGF0aDogc3RyaW5nLCBhZGQ6IEV2aWRlbmNlQWRkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TmFtZShtaXNzaW5nUGF0aCk7XG4gICAgY29uc3QgaXNGb2xkZXJOb3RlID0gdGhpcy5mb2xkZXJOb3RlRmlsZU5hbWVzLmhhcyhuYW1lKTtcbiAgICBsZXQgb2xkTmFtZTogc3RyaW5nO1xuXG4gICAgaWYgKGlzRm9sZGVyTm90ZSkge1xuICAgICAgb2xkTmFtZSA9IGdldE5hbWUoZ2V0UGFyZW50UGF0aChtaXNzaW5nUGF0aCkpO1xuICAgICAgaWYgKCFvbGROYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIG9sZE5hbWUgPSBuYW1lLnNsaWNlKDAsIC0nLm1kJy5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG93ZXJDYXNlT2xkTmFtZSA9IG9sZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc0VsaWdpYmxlID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4gdGhpcy5maWxlUGF0aFNldC5oYXMocGF0aCkgJiYgKCFpc0ZvbGRlck5vdGUgfHwgZ2V0TmFtZShwYXRoKSA9PT0gbmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBhbGlhc2VzXSBvZiB0aGlzLmFsaWFzZXNCeVBhdGgpIHtcbiAgICAgIGlmIChpc0VsaWdpYmxlKHBhdGgpICYmIGFsaWFzZXMuc29tZSgoYWxpYXMpID0+IGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyQ2FzZU9sZE5hbWUpKSB7XG4gICAgICAgIGFkZChwYXRoLCBCcm9rZW5MaW5rRXZpZGVuY2VLaW5kLkFsaWFzLCBgSXRzIGFsaWFzZXMgaG9sZCB0aGUgb2xkIG5hbWUgXCIke29sZE5hbWV9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgdGl0bGVdIG9mIHRoaXMudGl0bGVzQnlQYXRoKSB7XG4gICAgICBpZiAoaXNFbGlnaWJsZShwYXRoKSAmJiB0aXRsZS50b0xvd2VyQ2FzZSgpID09PSBsb3dlckNhc2VPbGROYW1lKSB7XG4gICAgICAgIGFkZChwYXRoLCBCcm9rZW5MaW5rRXZpZGVuY2VLaW5kLlRpdGxlLCBgSXRzIHRpdGxlIGlzIHRoZSBvbGQgbmFtZSBcIiR7b2xkTmFtZX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENhc2VDaGFuZ2VDYW5kaWRhdGVzKG1pc3NpbmdQYXRoOiBzdHJpbmcsIGFkZDogRXZpZGVuY2VBZGRlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiB0aGlzLmZpbGVzQnlMb3dlckNhc2VQYXRoLmdldChtaXNzaW5nUGF0aC50b0xvd2VyQ2FzZSgpKSA/PyBbXSkge1xuICAgICAgYWRkKHBhdGgsIEJyb2tlbkxpbmtFdmlkZW5jZUtpbmQuQ2FzZUNoYW5nZSwgJ09ubHkgdGhlIGxldHRlciBjYXNlIG9mIGl0cyBwYXRoIGRpZmZlcnMuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRHaXRSZW5hbWVDYW5kaWRhdGUobWlzc2luZ1BhdGg6IHN0cmluZywgYWRkOiBFdmlkZW5jZUFkZGVyKTogdm9pZCB7XG4gICAgY29uc3QgZ2l0UmVuYW1lID0gdGhpcy5naXRSZW5hbWVzLmdldChtaXNzaW5nUGF0aCk7XG4gICAgaWYgKGdpdFJlbmFtZSAmJiB0aGlzLmZpbGVQYXRoU2V0LmhhcyhnaXRSZW5hbWUubmV3UGF0aCkpIHtcbiAgICAgIGFkZChnaXRSZW5hbWUubmV3UGF0aCwgQnJva2VuTGlua0V2aWRlbmNlS2luZC5HaXRSZW5hbWUsIGBHaXQgaGlzdG9yeSByZWNvcmRzIHRoZSByZW5hbWUsIGluIGNvbW1pdCAke2dpdFJlbmFtZS5jb21taXR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVuYW1lZEZvbGRlckNhbmRpZGF0ZXMobWlzc2luZ1BhdGg6IHN0cmluZywgbWlzc2luZ1N1YnRyZWVzOiBSZWFkb25seU1hcDxzdHJpbmcsIE1pc3NpbmdTdWJ0cmVlPiwgYWRkOiBFdmlkZW5jZUFkZGVyKTogdm9pZCB7XG4gICAgY29uc3QgbWlzc2luZ1N1YnRyZWUgPSBtaXNzaW5nU3VidHJlZXMuZ2V0KG1pc3NpbmdQYXRoKTtcbiAgICBpZiAoIW1pc3NpbmdTdWJ0cmVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhcmVudFBhdGgobWlzc2luZ1N1YnRyZWUucm9vdCk7XG4gICAgY29uc3QgcmVtYWluZGVyID0gZ2V0UmVsYXRpdmVQYXRoKG1pc3NpbmdTdWJ0cmVlLnJvb3QsIG1pc3NpbmdQYXRoKTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0ZvbGRlciBvZiB0aGlzLmNoaWxkRm9sZGVyc0J5Rm9sZGVyLmdldChwYXJlbnRQYXRoKSA/PyBbXSkge1xuICAgICAgY29uc3QgaXNTdWJ0cmVlSW50YWN0ID0gWy4uLm1pc3NpbmdTdWJ0cmVlLnJlbWFpbmRlcnNdLmV2ZXJ5KChwYXRoKSA9PiB0aGlzLmZpbGVQYXRoU2V0Lmhhcyhqb2luUGF0aChzaWJsaW5nRm9sZGVyLCBwYXRoKSkpO1xuICAgICAgaWYgKCFpc1N1YnRyZWVJbnRhY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVDb3VudCA9IG1pc3NpbmdTdWJ0cmVlLnJlbWFpbmRlcnMuc2l6ZTtcbiAgICAgIGFkZChcbiAgICAgICAgam9pblBhdGgoc2libGluZ0ZvbGRlciwgcmVtYWluZGVyKSxcbiAgICAgICAgQnJva2VuTGlua0V2aWRlbmNlS2luZC5SZW5hbWVkRm9sZGVyLFxuICAgICAgICBgVGhlIGZvbGRlciBcIiR7bWlzc2luZ1N1YnRyZWUucm9vdH1cIiBpcyBnb25lLCBhbmQgaXRzIHNpYmxpbmcgXCIke3NpYmxpbmdGb2xkZXJ9XCIgaG9sZHMgJHtmaWxlQ291bnQgPT09IDEgPyAndGhlIG1pc3NpbmcgZmlsZSB0aGF0IHdhcycgOiBgYWxsICR7U3RyaW5nKGZpbGVDb3VudCl9IG1pc3NpbmcgZmlsZXMgdGhhdCB3ZXJlYH0gdW5kZXIgaXQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFNhbWVOYW1lQ2FuZGlkYXRlcyhtaXNzaW5nUGF0aDogc3RyaW5nLCBhZGQ6IEV2aWRlbmNlQWRkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TmFtZShtaXNzaW5nUGF0aCk7XG4gICAgY29uc3QgbWluU3VmZml4TGVuZ3RoID0gdGhpcy5mb2xkZXJOb3RlRmlsZU5hbWVzLmhhcyhuYW1lKSA/IEZPTERFUl9OT1RFX01JTl9TVUZGSVhfTEVOR1RIIDogMTtcbiAgICBjb25zdCBtaXNzaW5nU2VnbWVudHMgPSBtaXNzaW5nUGF0aC5zcGxpdCgnLycpO1xuICAgIGxldCBiZXN0U3VmZml4TGVuZ3RoID0gbWluU3VmZml4TGVuZ3RoO1xuICAgIGxldCBiZXN0UGF0aHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5maWxlc0J5TmFtZS5nZXQobmFtZSkgPz8gW10pIHtcbiAgICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IGdldENvbW1vblN1ZmZpeExlbmd0aChtaXNzaW5nU2VnbWVudHMsIHBhdGguc3BsaXQoJy8nKSk7XG4gICAgICBpZiAoc3VmZml4TGVuZ3RoID4gYmVzdFN1ZmZpeExlbmd0aCkge1xuICAgICAgICBiZXN0U3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoO1xuICAgICAgICBiZXN0UGF0aHMgPSBbcGF0aF07XG4gICAgICB9IGVsc2UgaWYgKHN1ZmZpeExlbmd0aCA9PT0gYmVzdFN1ZmZpeExlbmd0aCkge1xuICAgICAgICBiZXN0UGF0aHMucHVzaChwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWZmaXggPSBtaXNzaW5nU2VnbWVudHMuc2xpY2UoLWJlc3RTdWZmaXhMZW5ndGgpLmpvaW4oJy8nKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgYmVzdFBhdGhzKSB7XG4gICAgICBhZGQocGF0aCwgQnJva2VuTGlua0V2aWRlbmNlS2luZC5TYW1lTmFtZSwgYEl0IGhhcyB0aGUgc2FtZSBuYW1lLCBcIiR7c3VmZml4fVwiLCBpbiBhbm90aGVyIGZvbGRlci5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIHRoZSBtaXNzaW5nIHBhdGhzIGJ5IHRoZSBoaWdoZXN0IG1pc3NpbmcgZm9sZGVyIGFib3ZlIGVhY2gsIHRoZSByb290IG9mIGEgc3VidHJlZSB0aGF0IG1heSBoYXZlIGJlZW5cbiAgICogcmVuYW1lZCBhcyBhIHdob2xlLlxuICAgKlxuICAgKiBAcGFyYW0gbWlzc2luZ1BhdGhzIC0gVGhlIG1pc3NpbmcgcGF0aHMuXG4gICAqIEByZXR1cm5zIEVhY2ggbWlzc2luZyBwYXRoJ3Mgc3VidHJlZTsgYSBwYXRoIHdob3NlIG93biBmb2xkZXIgZXhpc3RzIGhhcyBub25lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNaXNzaW5nU3VidHJlZXMobWlzc2luZ1BhdGhzOiBSZWFkb25seVNldDxzdHJpbmc+KTogTWFwPHN0cmluZywgTWlzc2luZ1N1YnRyZWU+IHtcbiAgICBjb25zdCBzdWJ0cmVlc0J5Um9vdCA9IG5ldyBNYXA8c3RyaW5nLCBNaXNzaW5nU3VidHJlZT4oKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgTWlzc2luZ1N1YnRyZWU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG1pc3NpbmdQYXRoIG9mIG1pc3NpbmdQYXRocykge1xuICAgICAgbGV0IHJvb3QgPSBnZXRQYXJlbnRQYXRoKG1pc3NpbmdQYXRoKTtcbiAgICAgIGlmICh0aGlzLmZvbGRlclBhdGhzLmhhcyhyb290KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCF0aGlzLmZvbGRlclBhdGhzLmhhcyhnZXRQYXJlbnRQYXRoKHJvb3QpKSkge1xuICAgICAgICByb290ID0gZ2V0UGFyZW50UGF0aChyb290KTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1pc3NpbmdTdWJ0cmVlID0gc3VidHJlZXNCeVJvb3QuZ2V0KHJvb3QpO1xuICAgICAgaWYgKCFtaXNzaW5nU3VidHJlZSkge1xuICAgICAgICBtaXNzaW5nU3VidHJlZSA9IHsgcmVtYWluZGVyczogbmV3IFNldCgpLCByb290IH07XG4gICAgICAgIHN1YnRyZWVzQnlSb290LnNldChyb290LCBtaXNzaW5nU3VidHJlZSk7XG4gICAgICB9XG5cbiAgICAgIG1pc3NpbmdTdWJ0cmVlLnJlbWFpbmRlcnMuYWRkKGdldFJlbGF0aXZlUGF0aChyb290LCBtaXNzaW5nUGF0aCkpO1xuICAgICAgcmVzdWx0LnNldChtaXNzaW5nUGF0aCwgbWlzc2luZ1N1YnRyZWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcGFyZW50IGZvbGRlciBvZiBhIHZhdWx0IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBwYXJlbnQgZm9sZGVyOyBgJydgIGZvciB0aGUgdmF1bHQgcm9vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyAnJyA6IHBhdGguc2xpY2UoMCwgaW5kZXgpO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIGEgbWlzc2luZyBwYXRoIHRoYXQgYSBjYW5kaWRhdGUgcGF0aCByZXBsYWNlZCwgZm91bmQgYnkgZHJvcHBpbmcgdGhlIHBhdGggc2VnbWVudHMgdGhleSBlbmQgd2l0aFxuICogaW4gY29tbW9uLlxuICpcbiAqIEBwYXJhbSBvbGRQYXRoIC0gVGhlIG1pc3NpbmcgcGF0aC5cbiAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGNhbmRpZGF0ZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHByZWZpeGVzIHRoYXQgZGlmZmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aE1hcHBpbmcob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiBQYXRoTWFwcGluZyB7XG4gIGNvbnN0IG9sZFNlZ21lbnRzID0gb2xkUGF0aC5zcGxpdCgnLycpO1xuICBjb25zdCBuZXdTZWdtZW50cyA9IG5ld1BhdGguc3BsaXQoJy8nKTtcbiAgY29uc3Qgc3VmZml4TGVuZ3RoID0gZ2V0Q29tbW9uU3VmZml4TGVuZ3RoKG9sZFNlZ21lbnRzLCBuZXdTZWdtZW50cyk7XG4gIHJldHVybiB7XG4gICAgbmV3UHJlZml4OiBuZXdTZWdtZW50cy5zbGljZSgwLCBuZXdTZWdtZW50cy5sZW5ndGggLSBzdWZmaXhMZW5ndGgpLmpvaW4oJy8nKSxcbiAgICBvbGRQcmVmaXg6IG9sZFNlZ21lbnRzLnNsaWNlKDAsIG9sZFNlZ21lbnRzLmxlbmd0aCAtIHN1ZmZpeExlbmd0aCkuam9pbignLycpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkZFRvTXVsdGlNYXA8S2V5LCBWYWx1ZT4obWFwOiBNYXA8S2V5LCBWYWx1ZVtdPiwga2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IHZvaWQge1xuICBsZXQgdmFsdWVzID0gbWFwLmdldChrZXkpO1xuICBpZiAoIXZhbHVlcykge1xuICAgIHZhbHVlcyA9IFtdO1xuICAgIG1hcC5zZXQoa2V5LCB2YWx1ZXMpO1xuICB9XG4gIHZhbHVlcy5wdXNoKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uU3VmZml4TGVuZ3RoKHNlZ21lbnRzMTogcmVhZG9ubHkgc3RyaW5nW10sIHNlZ21lbnRzMjogcmVhZG9ubHkgc3RyaW5nW10pOiBudW1iZXIge1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKGxlbmd0aCA8IHNlZ21lbnRzMS5sZW5ndGggJiYgbGVuZ3RoIDwgc2VnbWVudHMyLmxlbmd0aCAmJiBzZWdtZW50czEuYXQoLWxlbmd0aCAtIDEpID09PSBzZWdtZW50czIuYXQoLWxlbmd0aCAtIDEpKSB7XG4gICAgbGVuZ3RoKys7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0RXZpZGVuY2VSYW5rKGV2aWRlbmNlOiBCcm9rZW5MaW5rRXZpZGVuY2UpOiBudW1iZXIge1xuICByZXR1cm4gRVZJREVOQ0VfS0lORF9PUkRFUi5pbmRleE9mKGV2aWRlbmNlLmtpbmQpO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnNsaWNlKHBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpO1xufVxuXG4vLyBUaGUgZm9sZGVyIGlzIG5ldmVyIHRoZSB2YXVsdCByb290IGhlcmU6IGEgbWlzc2luZyBzdWJ0cmVlJ3Mgcm9vdCBpcyBhIG1pc3NpbmcgZm9sZGVyLCBhbmQgaXRzIHNpYmxpbmdzIGFyZVxuLy8gZm9sZGVycyB0b28uXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVBhdGgoZm9sZGVyOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnNsaWNlKGZvbGRlci5sZW5ndGggKyAxKTtcbn1cblxuZnVuY3Rpb24gam9pblBhdGgoZm9sZGVyOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtmb2xkZXJ9LyR7cGF0aH1gO1xufVxuXG5mdW5jdGlvbiBzb3J0Q2FuZGlkYXRlcyhldmlkZW5jZUJ5UGF0aDogUmVhZG9ubHlNYXA8c3RyaW5nLCBCcm9rZW5MaW5rRXZpZGVuY2VbXT4pOiBCcm9rZW5MaW5rQ2FuZGlkYXRlW10ge1xuICBjb25zdCBjYW5kaWRhdGVzID0gWy4uLmV2aWRlbmNlQnlQYXRoXS5tYXAoKFtwYXRoLCBldmlkZW5jZV0pID0+ICh7XG4gICAgZXZpZGVuY2U6IGV2aWRlbmNlLnNvcnQoKGV2aWRlbmNlMSwgZXZpZGVuY2UyKSA9PiBnZXRFdmlkZW5jZVJhbmsoZXZpZGVuY2UxKSAtIGdldEV2aWRlbmNlUmFuayhldmlkZW5jZTIpKSxcbiAgICBwYXRoXG4gIH0pKTtcblxuICByZXR1cm4gY2FuZGlkYXRlcy5zb3J0KChjYW5kaWRhdGUxLCBjYW5kaWRhdGUyKSA9PiB7XG4gICAgY29uc3QgcmFua0RpZmZlcmVuY2UgPSBnZXRFdmlkZW5jZVJhbmsoZW5zdXJlTm9uTnVsbGFibGUoY2FuZGlkYXRlMS5ldmlkZW5jZVswXSkpIC0gZ2V0RXZpZGVuY2VSYW5rKGVuc3VyZU5vbk51bGxhYmxlKGNhbmRpZGF0ZTIuZXZpZGVuY2VbMF0pKTtcbiAgICByZXR1cm4gcmFua0RpZmZlcmVuY2UgfHwgY2FuZGlkYXRlMS5wYXRoLmxvY2FsZUNvbXBhcmUoY2FuZGlkYXRlMi5wYXRoKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsU0FBUyx5QkFBeUI7QUFPM0IsSUFBSyx5QkFBTCxrQkFBS0EsNEJBQUw7QUFJTCxFQUFBQSx3QkFBQSxXQUFRO0FBS1IsRUFBQUEsd0JBQUEsZ0JBQWE7QUFLYixFQUFBQSx3QkFBQSxlQUFZO0FBS1osRUFBQUEsd0JBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLHdCQUFBLGNBQVc7QUFLWCxFQUFBQSx3QkFBQSxXQUFRO0FBN0JFLFNBQUFBO0FBQUEsR0FBQTtBQW1DWixNQUFNLGdDQUFnQztBQUV0QyxNQUFNLHNCQUF5RDtBQUFBLEVBQzdEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQTRHTyxNQUFNLDBCQUEwQjtBQUFBLEVBQ3BCO0FBQUEsRUFDQSx1QkFBdUIsb0JBQUksSUFBc0I7QUFBQSxFQUNqRDtBQUFBLEVBQ0EsdUJBQXVCLG9CQUFJLElBQXNCO0FBQUEsRUFDakQsY0FBYyxvQkFBSSxJQUFzQjtBQUFBLEVBQ3hDO0FBQUEsRUFDQSxjQUFjLG9CQUFJLElBQVksQ0FBQyxFQUFFLENBQUM7QUFBQSxFQUNsQztBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQW9EO0FBQ3JFLFNBQUssZ0JBQWdCLE9BQU87QUFDNUIsU0FBSyxjQUFjLElBQUksSUFBSSxPQUFPLFNBQVM7QUFDM0MsU0FBSyxzQkFBc0IsSUFBSSxJ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
@@ -8,6 +8,9 @@ export * as 'folder-command-handler' from './folder-command-handler.mjs';
8
8
  export * as 'global-command-handler' from './global-command-handler.mjs';
9
9
  export * as 'open-bug-report-command-handler' from './open-bug-report-command-handler.mjs';
10
10
  export * as 'open-demo-vault-command-handler' from './open-demo-vault-command-handler.mjs';
11
+ export * as 'open-discussion-command-handler' from './open-discussion-command-handler.mjs';
12
+ export * as 'open-feature-request-command-handler' from './open-feature-request-command-handler.mjs';
13
+ export * as 'open-git-hub-command-handler' from './open-git-hub-command-handler.mjs';
11
14
  export * as 'open-settings-command-handler' from './open-settings-command-handler.mjs';
12
15
  export * as 'undo-bulk-operation-command-handler' from './undo-bulk-operation-command-handler.mjs';
13
16
  export * as 'unlock-active-note-command-handler' from './unlock-active-note-command-handler.mjs';
@@ -12,6 +12,9 @@ import * as folder_command_handler from "./folder-command-handler.mjs";
12
12
  import * as global_command_handler from "./global-command-handler.mjs";
13
13
  import * as open_bug_report_command_handler from "./open-bug-report-command-handler.mjs";
14
14
  import * as open_demo_vault_command_handler from "./open-demo-vault-command-handler.mjs";
15
+ import * as open_discussion_command_handler from "./open-discussion-command-handler.mjs";
16
+ import * as open_feature_request_command_handler from "./open-feature-request-command-handler.mjs";
17
+ import * as open_git_hub_command_handler from "./open-git-hub-command-handler.mjs";
15
18
  import * as open_settings_command_handler from "./open-settings-command-handler.mjs";
16
19
  import * as undo_bulk_operation_command_handler from "./undo-bulk-operation-command-handler.mjs";
17
20
  import * as unlock_active_note_command_handler from "./unlock-active-note-command-handler.mjs";
@@ -25,8 +28,11 @@ export {
25
28
  global_command_handler as "global-command-handler",
26
29
  open_bug_report_command_handler as "open-bug-report-command-handler",
27
30
  open_demo_vault_command_handler as "open-demo-vault-command-handler",
31
+ open_discussion_command_handler as "open-discussion-command-handler",
32
+ open_feature_request_command_handler as "open-feature-request-command-handler",
33
+ open_git_hub_command_handler as "open-git-hub-command-handler",
28
34
  open_settings_command_handler as "open-settings-command-handler",
29
35
  undo_bulk_operation_command_handler as "undo-bulk-operation-command-handler",
30
36
  unlock_active_note_command_handler as "unlock-active-note-command-handler"
31
37
  };
32
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQnIGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2NvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZWRpdG9yLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9lZGl0b3ItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdmaWxlLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9maWxlLWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZm9sZGVyLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9mb2xkZXItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdnbG9iYWwtY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2dsb2JhbC1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ29wZW4tYnVnLXJlcG9ydC1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnb3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9vcGVuLWRlbW8tdmF1bHQtY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdvcGVuLXNldHRpbmdzLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9vcGVuLXNldHRpbmdzLWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAndW5kby1idWxrLW9wZXJhdGlvbi1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vdW5kby1idWxrLW9wZXJhdGlvbi1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ3VubG9jay1hY3RpdmUtbm90ZS1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vdW5sb2NrLWFjdGl2ZS1ub3RlLWNvbW1hbmQtaGFuZGxlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLG1DQUFxQztBQUNqRCxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQywwQkFBNEI7QUFDeEMsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyxxQ0FBdUM7QUFDbkQsWUFBWUMscUNBQXVDO0FBQ25ELFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZQyx5Q0FBMkM7QUFDdkQsWUFBWUMsd0NBQTBDOyIsCiAgIm5hbWVzIjogWyJhYnN0cmFjdC1maWxlLWNvbW1hbmQtaGFuZGxlciIsICJjb21tYW5kLWhhbmRsZXItY29tcG9uZW50IiwgImNvbW1hbmQtaGFuZGxlciIsICJlZGl0b3ItY29tbWFuZC1oYW5kbGVyIiwgImZpbGUtY29tbWFuZC1oYW5kbGVyIiwgImZvbGRlci1jb21tYW5kLWhhbmRsZXIiLCAiZ2xvYmFsLWNvbW1hbmQtaGFuZGxlciIsICJvcGVuLWJ1Zy1yZXBvcnQtY29tbWFuZC1oYW5kbGVyIiwgIm9wZW4tZGVtby12YXVsdC1jb21tYW5kLWhhbmRsZXIiLCAib3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXIiLCAidW5kby1idWxrLW9wZXJhdGlvbi1jb21tYW5kLWhhbmRsZXIiLCAidW5sb2NrLWFjdGl2ZS1ub3RlLWNvbW1hbmQtaGFuZGxlciJdCn0K
38
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQnIGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2NvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZWRpdG9yLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9lZGl0b3ItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdmaWxlLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9maWxlLWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZm9sZGVyLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9mb2xkZXItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdnbG9iYWwtY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2dsb2JhbC1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ29wZW4tYnVnLXJlcG9ydC1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnb3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9vcGVuLWRlbW8tdmF1bHQtY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdvcGVuLWRpc2N1c3Npb24tY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL29wZW4tZGlzY3Vzc2lvbi1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ29wZW4tZmVhdHVyZS1yZXF1ZXN0LWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9vcGVuLWZlYXR1cmUtcmVxdWVzdC1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1naXQtaHViLWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnb3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ3VuZG8tYnVsay1vcGVyYXRpb24tY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL3VuZG8tYnVsay1vcGVyYXRpb24tY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICd1bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL3VubG9jay1hY3RpdmUtbm90ZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSxtQ0FBcUM7QUFDakQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMsMEJBQTRCO0FBQ3hDLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMscUNBQXVDO0FBQ25ELFlBQVlDLHFDQUF1QztBQUNuRCxZQUFZQyxxQ0FBdUM7QUFDbkQsWUFBWUMsMENBQTRDO0FBQ3hELFlBQVlDLGtDQUFvQztBQUNoRCxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMseUNBQTJDO0FBQ3ZELFlBQVlDLHdDQUEwQzsiLAogICJuYW1lcyI6IFsiYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIiLCAiY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudCIsICJjb21tYW5kLWhhbmRsZXIiLCAiZWRpdG9yLWNvbW1hbmQtaGFuZGxlciIsICJmaWxlLWNvbW1hbmQtaGFuZGxlciIsICJmb2xkZXItY29tbWFuZC1oYW5kbGVyIiwgImdsb2JhbC1jb21tYW5kLWhhbmRsZXIiLCAib3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlciIsICJvcGVuLWRlbW8tdmF1bHQtY29tbWFuZC1oYW5kbGVyIiwgIm9wZW4tZGlzY3Vzc2lvbi1jb21tYW5kLWhhbmRsZXIiLCAib3Blbi1mZWF0dXJlLXJlcXVlc3QtY29tbWFuZC1oYW5kbGVyIiwgIm9wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIiLCAib3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXIiLCAidW5kby1idWxrLW9wZXJhdGlvbi1jb21tYW5kLWhhbmRsZXIiLCAidW5sb2NrLWFjdGl2ZS1ub3RlLWNvbW1hbmQtaGFuZGxlciJdCn0K
@@ -5,7 +5,7 @@
5
5
  * Handles the "Report a bug" command.
6
6
  */
7
7
  import type { App } from 'obsidian';
8
- import { GlobalCommandHandler } from './global-command-handler.mjs';
8
+ import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
9
9
  /**
10
10
  * Constructor parameters for {@link OpenBugReportCommandHandler}.
11
11
  */
@@ -27,15 +27,11 @@ export interface OpenBugReportCommandHandlerConstructorParams {
27
27
  * A command handler that opens the plugin's bug-report issue form on GitHub, prefilled with the
28
28
  * environment. See {@link getBugReportIssueFormUrl} for the field ids the form must use.
29
29
  */
30
- export declare class OpenBugReportCommandHandler extends GlobalCommandHandler {
30
+ export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
31
31
  /**
32
32
  * The Obsidian app instance.
33
33
  */
34
34
  protected readonly app: App;
35
- /**
36
- * The plugin's GitHub repository, as `owner/name`.
37
- */
38
- protected readonly gitHubRepo: string;
39
35
  /**
40
36
  * The id of the reporting plugin.
41
37
  */
@@ -47,7 +43,9 @@ export declare class OpenBugReportCommandHandler extends GlobalCommandHandler {
47
43
  */
48
44
  constructor(params: OpenBugReportCommandHandlerConstructorParams);
49
45
  /**
50
- * Executes the command, opening the prefilled issue form in the browser.
46
+ * Builds the prefilled bug-report URL.
47
+ *
48
+ * @returns The link.
51
49
  */
52
- execute(): Promise<void>;
50
+ protected getUrl(): Promise<string>;
53
51
  }
@@ -4,16 +4,12 @@ if you want to view the source, please visit the github repository of this plugi
4
4
  */
5
5
 
6
6
  import { getBugReportIssueFormUrl } from "../bug-report.mjs";
7
- import { GlobalCommandHandler } from "./global-command-handler.mjs";
8
- class OpenBugReportCommandHandler extends GlobalCommandHandler {
7
+ import { OpenGitHubCommandHandler } from "./open-git-hub-command-handler.mjs";
8
+ class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
9
9
  /**
10
10
  * The Obsidian app instance.
11
11
  */
12
12
  app;
13
- /**
14
- * The plugin's GitHub repository, as `owner/name`.
15
- */
16
- gitHubRepo;
17
13
  /**
18
14
  * The id of the reporting plugin.
19
15
  */
@@ -25,27 +21,28 @@ class OpenBugReportCommandHandler extends GlobalCommandHandler {
25
21
  */
26
22
  constructor(params) {
27
23
  super({
24
+ gitHubRepo: params.gitHubRepo,
28
25
  icon: "bug",
29
26
  id: "report-bug",
30
27
  name: "Report a bug"
31
28
  });
32
29
  this.app = params.app;
33
30
  this.pluginId = params.pluginId;
34
- this.gitHubRepo = params.gitHubRepo;
35
31
  }
36
32
  /**
37
- * Executes the command, opening the prefilled issue form in the browser.
33
+ * Builds the prefilled bug-report URL.
34
+ *
35
+ * @returns The link.
38
36
  */
39
- async execute() {
40
- const url = await getBugReportIssueFormUrl({
37
+ async getUrl() {
38
+ return getBugReportIssueFormUrl({
41
39
  app: this.app,
42
40
  gitHubRepo: this.gitHubRepo,
43
41
  pluginId: this.pluginId
44
42
  });
45
- window.open(url, "_blank");
46
43
  }
47
44
  }
48
45
  export {
49
46
  OpenBugReportCommandHandler
50
47
  };
51
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsIH0gZnJvbSAnLi4vYnVnLXJlcG9ydC50cyc7XG5pbXBvcnQgeyBHbG9iYWxDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vZ2xvYmFsLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YlJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciB0aGF0IG9wZW5zIHRoZSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0gb24gR2l0SHViLCBwcmVmaWxsZWQgd2l0aCB0aGVcbiAqIGVudmlyb25tZW50LiBTZWUge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gZm9yIHRoZSBmaWVsZCBpZHMgdGhlIGZvcm0gbXVzdCB1c2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBHbG9iYWxDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgaWNvbjogJ2J1ZycsXG4gICAgICBpZDogJ3JlcG9ydC1idWcnLFxuICAgICAgbmFtZTogJ1JlcG9ydCBhIGJ1ZydcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGFyYW1zLnBsdWdpbklkO1xuICAgIHRoaXMuZ2l0SHViUmVwbyA9IHBhcmFtcy5naXRIdWJSZXBvO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kLCBvcGVuaW5nIHRoZSBwcmVmaWxsZWQgaXNzdWUgZm9ybSBpbiB0aGUgYnJvd3Nlci5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybCh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgZ2l0SHViUmVwbzogdGhpcy5naXRIdWJSZXBvLFxuICAgICAgcGx1Z2luSWQ6IHRoaXMucGx1Z2luSWRcbiAgICB9KTtcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFRQSxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLDRCQUE0QjtBQTBCOUIsTUFBTSxvQ0FBb0MscUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQ3ZCLFNBQUssYUFBYSxPQUFPO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQXNCLFVBQXlCO0FBQzdDLFVBQU0sTUFBTSxNQUFNLHlCQUF5QjtBQUFBLE1BQ3pDLEtBQUssS0FBSztBQUFBLE1BQ1YsWUFBWSxLQUFLO0FBQUEsTUFDakIsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQUNELFdBQU8sS0FBSyxLQUFLLFFBQVE7QUFBQSxFQUMzQjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
48
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsIH0gZnJvbSAnLi4vYnVnLXJlcG9ydC50cyc7XG5pbXBvcnQgeyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb21tYW5kIGhhbmRsZXIgdGhhdCBvcGVucyB0aGUgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtIG9uIEdpdEh1YiwgcHJlZmlsbGVkIHdpdGggdGhlXG4gKiBlbnZpcm9ubWVudC4gU2VlIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9IGZvciB0aGUgZmllbGQgaWRzIHRoZSBmb3JtIG11c3QgdXNlLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgT3BlbkdpdEh1YkNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgICBpY29uOiAnYnVnJyxcbiAgICAgIGlkOiAncmVwb3J0LWJ1ZycsXG4gICAgICBuYW1lOiAnUmVwb3J0IGEgYnVnJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwcmVmaWxsZWQgYnVnLXJlcG9ydCBVUkwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGdldFVybCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmwoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGdpdEh1YlJlcG86IHRoaXMuZ2l0SHViUmVwbyxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkXG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBUUEsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxnQ0FBZ0M7QUEwQmxDLE1BQU0sb0NBQW9DLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXJEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osWUFBWSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUF5QixTQUEwQjtBQUNqRCxXQUFPLHlCQUF5QjtBQUFBLE1BQzlCLEtBQUssS0FBSztBQUFBLE1BQ1YsWUFBWSxLQUFLO0FBQUEsTUFDakIsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,45 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Handles the "Start a discussion" command.
6
+ */
7
+ import type { GetGitHubDiscussionUrlParams } from '../git-hub-discussion.mjs';
8
+ import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
9
+ /**
10
+ * Constructor parameters for {@link OpenDiscussionCommandHandler}.
11
+ */
12
+ export interface OpenDiscussionCommandHandlerConstructorParams extends GetGitHubDiscussionUrlParams {
13
+ /**
14
+ * Whether the repository has Discussions enabled. When `false`, the command is unavailable and
15
+ * execution does not open a browser. Prefer omitting registration altogether in that case.
16
+ */
17
+ readonly isDiscussionsEnabled: boolean;
18
+ }
19
+ /**
20
+ * Opens a new discussion in the plugin's repository. Unavailable when Discussions is disabled.
21
+ *
22
+ * See the [community commands guide](https://mnaoumov.dev/obsidian-lib/guides/community-commands/)
23
+ * and [behavioral tests](https://github.com/mnaoumov/obsidian-lib/blob/main/src/command-handlers/open-discussion-command-handler.test.ts).
24
+ */
25
+ export declare class OpenDiscussionCommandHandler extends OpenGitHubCommandHandler {
26
+ private readonly params;
27
+ /**
28
+ * Constructs a new instance.
29
+ *
30
+ * @param params - Constructor parameters.
31
+ */
32
+ constructor(params: OpenDiscussionCommandHandlerConstructorParams);
33
+ /**
34
+ * Checks the repository's declared Discussions capability.
35
+ *
36
+ * @returns Whether the command is available.
37
+ */
38
+ protected canExecute(): boolean;
39
+ /**
40
+ * Builds the new-discussion URL.
41
+ *
42
+ * @returns The link.
43
+ */
44
+ protected getUrl(): string;
45
+ }
@@ -0,0 +1,39 @@
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 { getGitHubDiscussionUrl } from "../git-hub-discussion.mjs";
7
+ import { OpenGitHubCommandHandler } from "./open-git-hub-command-handler.mjs";
8
+ class OpenDiscussionCommandHandler extends OpenGitHubCommandHandler {
9
+ params;
10
+ /**
11
+ * Constructs a new instance.
12
+ *
13
+ * @param params - Constructor parameters.
14
+ */
15
+ constructor(params) {
16
+ super({ gitHubRepo: params.gitHubRepo, icon: "messages-square", id: "start-discussion", name: "Start a discussion" });
17
+ this.params = params;
18
+ }
19
+ /**
20
+ * Checks the repository's declared Discussions capability.
21
+ *
22
+ * @returns Whether the command is available.
23
+ */
24
+ canExecute() {
25
+ return this.params.isDiscussionsEnabled;
26
+ }
27
+ /**
28
+ * Builds the new-discussion URL.
29
+ *
30
+ * @returns The link.
31
+ */
32
+ getUrl() {
33
+ return getGitHubDiscussionUrl(this.params);
34
+ }
35
+ }
36
+ export {
37
+ OpenDiscussionCommandHandler
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1kaXNjdXNzaW9uLWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiU3RhcnQgYSBkaXNjdXNzaW9uXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdldEdpdEh1YkRpc2N1c3Npb25VcmxQYXJhbXMgfSBmcm9tICcuLi9naXQtaHViLWRpc2N1c3Npb24udHMnO1xuXG5pbXBvcnQgeyBnZXRHaXRIdWJEaXNjdXNzaW9uVXJsIH0gZnJvbSAnLi4vZ2l0LWh1Yi1kaXNjdXNzaW9uLnRzJztcbmltcG9ydCB7IE9wZW5HaXRIdWJDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vb3Blbi1naXQtaHViLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIE9wZW5EaXNjdXNzaW9uQ29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EaXNjdXNzaW9uQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIEdldEdpdEh1YkRpc2N1c3Npb25VcmxQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwb3NpdG9yeSBoYXMgRGlzY3Vzc2lvbnMgZW5hYmxlZC4gV2hlbiBgZmFsc2VgLCB0aGUgY29tbWFuZCBpcyB1bmF2YWlsYWJsZSBhbmRcbiAgICogZXhlY3V0aW9uIGRvZXMgbm90IG9wZW4gYSBicm93c2VyLiBQcmVmZXIgb21pdHRpbmcgcmVnaXN0cmF0aW9uIGFsdG9nZXRoZXIgaW4gdGhhdCBjYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNEaXNjdXNzaW9uc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3BlbnMgYSBuZXcgZGlzY3Vzc2lvbiBpbiB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeS4gVW5hdmFpbGFibGUgd2hlbiBEaXNjdXNzaW9ucyBpcyBkaXNhYmxlZC5cbiAqXG4gKiBTZWUgdGhlIFtjb21tdW5pdHkgY29tbWFuZHMgZ3VpZGVdKGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWxpYi9ndWlkZXMvY29tbXVuaXR5LWNvbW1hbmRzLylcbiAqIGFuZCBbYmVoYXZpb3JhbCB0ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWxpYi9ibG9iL21haW4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1kaXNjdXNzaW9uLWNvbW1hbmQtaGFuZGxlci50ZXN0LnRzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9wZW5EaXNjdXNzaW9uQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogT3BlbkRpc2N1c3Npb25Db21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE9wZW5EaXNjdXNzaW9uQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHsgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sIGljb246ICdtZXNzYWdlcy1zcXVhcmUnLCBpZDogJ3N0YXJ0LWRpc2N1c3Npb24nLCBuYW1lOiAnU3RhcnQgYSBkaXNjdXNzaW9uJyB9KTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHJlcG9zaXRvcnkncyBkZWNsYXJlZCBEaXNjdXNzaW9ucyBjYXBhYmlsaXR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcy5pc0Rpc2N1c3Npb25zRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5ldy1kaXNjdXNzaW9uIFVSTC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxpbmsuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEdpdEh1YkRpc2N1c3Npb25VcmwodGhpcy5wYXJhbXMpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVFBLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZ0NBQWdDO0FBbUJsQyxNQUFNLHFDQUFxQyx5QkFBeUI7QUFBQSxFQUN4RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBdUQ7QUFDeEUsVUFBTSxFQUFFLFlBQVksT0FBTyxZQUFZLE1BQU0sbUJBQW1CLElBQUksb0JBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbUIsYUFBc0I7QUFDdkMsV0FBTyxLQUFLLE9BQU87QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9tQixTQUFpQjtBQUNsQyxXQUFPLHVCQUF1QixLQUFLLE1BQU07QUFBQSxFQUMzQztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,33 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Handles the "Request a feature" command.
6
+ */
7
+ import type { GetFeatureRequestIssueFormUrlParams } from '../feature-request.mjs';
8
+ import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
9
+ /**
10
+ * Constructor parameters for {@link OpenFeatureRequestCommandHandler}.
11
+ */
12
+ export type OpenFeatureRequestCommandHandlerConstructorParams = GetFeatureRequestIssueFormUrlParams;
13
+ /**
14
+ * Opens the plugin's feature-request form, prefilling only the plugin version.
15
+ *
16
+ * See the [community commands guide](https://mnaoumov.dev/obsidian-lib/guides/community-commands/)
17
+ * and [behavioral tests](https://github.com/mnaoumov/obsidian-lib/blob/main/src/command-handlers/open-feature-request-command-handler.test.ts).
18
+ */
19
+ export declare class OpenFeatureRequestCommandHandler extends OpenGitHubCommandHandler {
20
+ private readonly params;
21
+ /**
22
+ * Constructs a new instance.
23
+ *
24
+ * @param params - Constructor parameters.
25
+ */
26
+ constructor(params: OpenFeatureRequestCommandHandlerConstructorParams);
27
+ /**
28
+ * Builds the prefilled feature-request URL.
29
+ *
30
+ * @returns The link.
31
+ */
32
+ protected getUrl(): string;
33
+ }
@@ -0,0 +1,31 @@
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 { getFeatureRequestIssueFormUrl } from "../feature-request.mjs";
7
+ import { OpenGitHubCommandHandler } from "./open-git-hub-command-handler.mjs";
8
+ class OpenFeatureRequestCommandHandler extends OpenGitHubCommandHandler {
9
+ params;
10
+ /**
11
+ * Constructs a new instance.
12
+ *
13
+ * @param params - Constructor parameters.
14
+ */
15
+ constructor(params) {
16
+ super({ gitHubRepo: params.gitHubRepo, icon: "lightbulb", id: "request-feature", name: "Request a feature" });
17
+ this.params = params;
18
+ }
19
+ /**
20
+ * Builds the prefilled feature-request URL.
21
+ *
22
+ * @returns The link.
23
+ */
24
+ getUrl() {
25
+ return getFeatureRequestIssueFormUrl(this.params);
26
+ }
27
+ }
28
+ export {
29
+ OpenFeatureRequestCommandHandler
30
+ };
31
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1mZWF0dXJlLXJlcXVlc3QtY29tbWFuZC1oYW5kbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGFuZGxlcyB0aGUgXCJSZXF1ZXN0IGEgZmVhdHVyZVwiIGNvbW1hbmQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZXRGZWF0dXJlUmVxdWVzdElzc3VlRm9ybVVybFBhcmFtcyB9IGZyb20gJy4uL2ZlYXR1cmUtcmVxdWVzdC50cyc7XG5cbmltcG9ydCB7IGdldEZlYXR1cmVSZXF1ZXN0SXNzdWVGb3JtVXJsIH0gZnJvbSAnLi4vZmVhdHVyZS1yZXF1ZXN0LnRzJztcbmltcG9ydCB7IE9wZW5HaXRIdWJDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vb3Blbi1naXQtaHViLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIE9wZW5GZWF0dXJlUmVxdWVzdENvbW1hbmRIYW5kbGVyfS5cbiAqL1xuZXhwb3J0IHR5cGUgT3BlbkZlYXR1cmVSZXF1ZXN0Q29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyA9IEdldEZlYXR1cmVSZXF1ZXN0SXNzdWVGb3JtVXJsUGFyYW1zO1xuXG4vKipcbiAqIE9wZW5zIHRoZSBwbHVnaW4ncyBmZWF0dXJlLXJlcXVlc3QgZm9ybSwgcHJlZmlsbGluZyBvbmx5IHRoZSBwbHVnaW4gdmVyc2lvbi5cbiAqXG4gKiBTZWUgdGhlIFtjb21tdW5pdHkgY29tbWFuZHMgZ3VpZGVdKGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWxpYi9ndWlkZXMvY29tbXVuaXR5LWNvbW1hbmRzLylcbiAqIGFuZCBbYmVoYXZpb3JhbCB0ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWxpYi9ibG9iL21haW4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1mZWF0dXJlLXJlcXVlc3QtY29tbWFuZC1oYW5kbGVyLnRlc3QudHMpLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkZlYXR1cmVSZXF1ZXN0Q29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogT3BlbkZlYXR1cmVSZXF1ZXN0Q29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBPcGVuRmVhdHVyZVJlcXVlc3RDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoeyBnaXRIdWJSZXBvOiBwYXJhbXMuZ2l0SHViUmVwbywgaWNvbjogJ2xpZ2h0YnVsYicsIGlkOiAncmVxdWVzdC1mZWF0dXJlJywgbmFtZTogJ1JlcXVlc3QgYSBmZWF0dXJlJyB9KTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHByZWZpbGxlZCBmZWF0dXJlLXJlcXVlc3QgVVJMLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbGluay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RmVhdHVyZVJlcXVlc3RJc3N1ZUZvcm1VcmwodGhpcy5wYXJhbXMpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVFBLFNBQVMscUNBQXFDO0FBQzlDLFNBQVMsZ0NBQWdDO0FBYWxDLE1BQU0seUNBQXlDLHlCQUF5QjtBQUFBLEVBQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEyRDtBQUM1RSxVQUFNLEVBQUUsWUFBWSxPQUFPLFlBQVksTUFBTSxhQUFhLElBQUksbUJBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDNUcsU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbUIsU0FBaUI7QUFDbEMsV0FBTyw4QkFBOEIsS0FBSyxNQUFNO0FBQUEsRUFDbEQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K