@mnaoumov/obsidian-lib 10.6.0 → 10.8.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.
- package/command-handlers/open-discussion-command-handler/package.json +6 -0
- package/command-handlers/open-feature-request-command-handler/package.json +6 -0
- package/command-handlers/open-git-hub-command-handler/package.json +6 -0
- package/components/style-sheet-component/package.json +6 -0
- package/data-stores/data-store-locations/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +45 -1
- package/dist/lib/cjs/__merged.d.cts +10 -0
- package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
- package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
- package/dist/lib/cjs/command-handlers/index.cjs +10 -1
- package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
- package/dist/lib/cjs/components/index.cjs +4 -1
- package/dist/lib/cjs/components/index.d.cts +1 -0
- package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
- package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
- package/dist/lib/cjs/data-stores/data-store-locations.cjs +248 -0
- package/dist/lib/cjs/data-stores/data-store-locations.d.cts +60 -0
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +2 -2
- package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +1 -1
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +132 -24
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +39 -5
- package/dist/lib/cjs/data-stores/index.cjs +4 -1
- package/dist/lib/cjs/data-stores/index.d.cts +1 -0
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +131 -19
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +54 -2
- package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
- package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
- package/dist/lib/cjs/editor-suggest.cjs +2 -3
- package/dist/lib/cjs/feature-request.cjs +115 -0
- package/dist/lib/cjs/feature-request.d.cts +54 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
- package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
- package/dist/lib/cjs/git-rename-history.cjs +148 -0
- package/dist/lib/cjs/git-rename-history.d.cts +43 -0
- package/dist/lib/cjs/index.cjs +16 -1
- package/dist/lib/cjs/index.d.cts +5 -0
- package/dist/lib/cjs/vault.cjs +2 -2
- package/dist/lib/cjs/vault.d.cts +3 -1
- package/dist/lib/esm/__merged.d.mts +10 -0
- package/dist/lib/esm/__merged.mjs +43 -1
- package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
- package/dist/lib/esm/broken-link-candidates.mjs +275 -0
- package/dist/lib/esm/command-handlers/index.d.mts +3 -0
- package/dist/lib/esm/command-handlers/index.mjs +7 -1
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
- package/dist/lib/esm/components/index.d.mts +1 -0
- package/dist/lib/esm/components/index.mjs +3 -1
- package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
- package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
- package/dist/lib/esm/data-stores/data-store-locations.d.mts +60 -0
- package/dist/lib/esm/data-stores/data-store-locations.mjs +160 -0
- package/dist/lib/esm/data-stores/data-store-seeds.d.mts +1 -1
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +2 -2
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +39 -5
- package/dist/lib/esm/data-stores/data-store-transport.mjs +132 -24
- package/dist/lib/esm/data-stores/index.d.mts +1 -0
- package/dist/lib/esm/data-stores/index.mjs +3 -1
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +54 -2
- package/dist/lib/esm/data-stores/shared-data-store.mjs +131 -19
- package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
- package/dist/lib/esm/desktop-git-runner.mjs +19 -0
- package/dist/lib/esm/editor-suggest.mjs +2 -3
- package/dist/lib/esm/feature-request.d.mts +54 -0
- package/dist/lib/esm/feature-request.mjs +25 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
- package/dist/lib/esm/git-hub-discussion.mjs +13 -0
- package/dist/lib/esm/git-rename-history.d.mts +43 -0
- package/dist/lib/esm/git-rename-history.mjs +59 -0
- package/dist/lib/esm/index.d.mts +5 -0
- package/dist/lib/esm/index.mjs +11 -1
- package/dist/lib/esm/vault.d.mts +3 -1
- package/dist/lib/esm/vault.mjs +2 -2
- 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,
|
|
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 {
|
|
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
|
|
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
|
-
*
|
|
46
|
+
* Builds the prefilled bug-report URL.
|
|
47
|
+
*
|
|
48
|
+
* @returns The link.
|
|
51
49
|
*/
|
|
52
|
-
|
|
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 {
|
|
8
|
-
class OpenBugReportCommandHandler extends
|
|
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
|
-
*
|
|
33
|
+
* Builds the prefilled bug-report URL.
|
|
34
|
+
*
|
|
35
|
+
* @returns The link.
|
|
38
36
|
*/
|
|
39
|
-
async
|
|
40
|
-
|
|
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,
|
|
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
|