@mnaoumov/obsidian-lib 10.4.1 → 10.5.1
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/README.md +6 -0
- package/codemirror/incremental-parse-state-field/package.json +6 -0
- package/codemirror/markdown-editor-views/package.json +6 -0
- package/codemirror/range-set/package.json +6 -0
- package/command-handlers/open-bug-report-command-handler/package.json +6 -0
- package/components/embeddable-markdown-editor-component/package.json +6 -0
- package/components/reconfigurable-editor-extension-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +54 -1
- package/dist/lib/cjs/__merged.d.cts +14 -3
- package/dist/lib/cjs/attachment-path.cjs +3 -2
- package/dist/lib/cjs/backlink-index.cjs +44 -8
- package/dist/lib/cjs/backlink-index.d.cts +23 -0
- package/dist/lib/cjs/bug-report.cjs +241 -0
- package/dist/lib/cjs/bug-report.d.cts +161 -0
- package/dist/lib/cjs/bulk-operation-progress.cjs +16 -1
- package/dist/lib/cjs/bulk-operation-progress.d.cts +22 -0
- package/dist/lib/cjs/case-insensitive-file-index.cjs +9 -1
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +162 -0
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.d.cts +37 -0
- package/dist/lib/cjs/codemirror/index.cjs +10 -1
- package/dist/lib/cjs/codemirror/index.d.cts +3 -0
- package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +142 -0
- package/dist/lib/cjs/codemirror/markdown-editor-views.d.cts +34 -0
- package/dist/lib/cjs/codemirror/range-set.cjs +106 -0
- package/dist/lib/cjs/codemirror/range-set.d.cts +35 -0
- package/dist/lib/cjs/command-handlers/index.cjs +4 -1
- package/dist/lib/cjs/command-handlers/index.d.cts +1 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +139 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +53 -0
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +6 -3
- package/dist/lib/cjs/community-plugins.cjs +19 -2
- package/dist/lib/cjs/community-plugins.d.cts +14 -0
- package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +5 -2
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +374 -0
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +221 -0
- package/dist/lib/cjs/components/index.cjs +7 -1
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/plugin-gate-component.cjs +6 -3
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +200 -0
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.d.cts +96 -0
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +105 -2
- package/dist/lib/cjs/desktop-bulk-operation-git.cjs +38 -13
- package/dist/lib/cjs/desktop-bulk-operation-git.d.cts +21 -1
- package/dist/lib/cjs/desktop-operating-system.cjs +101 -0
- package/dist/lib/cjs/desktop-operating-system.d.cts +15 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +2 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +1 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -0
- package/dist/lib/cjs/index.cjs +16 -1
- package/dist/lib/cjs/index.d.cts +5 -0
- package/dist/lib/cjs/menu.cjs +118 -0
- package/dist/lib/cjs/menu.d.cts +65 -0
- package/dist/lib/cjs/mobile-app-info.cjs +167 -0
- package/dist/lib/cjs/mobile-app-info.d.cts +32 -0
- package/dist/lib/cjs/modals/modal.cjs +8 -5
- package/dist/lib/cjs/modals/modal.d.cts +4 -0
- package/dist/lib/cjs/obsidian-settings.cjs +2 -2
- package/dist/lib/cjs/plugin/plugin.cjs +5 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +2 -0
- package/dist/lib/cjs/settings-modal.cjs +103 -0
- package/dist/lib/cjs/settings-modal.d.cts +33 -0
- package/dist/lib/esm/__merged.d.mts +14 -3
- package/dist/lib/esm/__merged.mjs +50 -2
- package/dist/lib/esm/attachment-path.mjs +3 -2
- package/dist/lib/esm/backlink-index.d.mts +23 -0
- package/dist/lib/esm/backlink-index.mjs +42 -7
- package/dist/lib/esm/bug-report.d.mts +161 -0
- package/dist/lib/esm/bug-report.mjs +141 -0
- package/dist/lib/esm/bulk-operation-progress.d.mts +22 -0
- package/dist/lib/esm/bulk-operation-progress.mjs +14 -1
- package/dist/lib/esm/case-insensitive-file-index.mjs +9 -1
- package/dist/lib/esm/codemirror/incremental-parse-state-field.d.mts +37 -0
- package/dist/lib/esm/codemirror/incremental-parse-state-field.mjs +74 -0
- package/dist/lib/esm/codemirror/index.d.mts +3 -0
- package/dist/lib/esm/codemirror/index.mjs +7 -1
- package/dist/lib/esm/codemirror/markdown-editor-views.d.mts +34 -0
- package/dist/lib/esm/codemirror/markdown-editor-views.mjs +53 -0
- package/dist/lib/esm/codemirror/range-set.d.mts +35 -0
- package/dist/lib/esm/codemirror/range-set.mjs +18 -0
- package/dist/lib/esm/command-handlers/index.d.mts +1 -0
- package/dist/lib/esm/command-handlers/index.mjs +3 -1
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +53 -0
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +51 -0
- package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -3
- package/dist/lib/esm/community-plugins.d.mts +14 -0
- package/dist/lib/esm/community-plugins.mjs +18 -2
- package/dist/lib/esm/components/bulk-operation-commit-component.mjs +5 -2
- package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +221 -0
- package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +293 -0
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/plugin-gate-component.mjs +6 -3
- package/dist/lib/esm/components/reconfigurable-editor-extension-component.d.mts +96 -0
- package/dist/lib/esm/components/reconfigurable-editor-extension-component.mjs +112 -0
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +105 -2
- package/dist/lib/esm/desktop-bulk-operation-git.d.mts +21 -1
- package/dist/lib/esm/desktop-bulk-operation-git.mjs +38 -13
- package/dist/lib/esm/desktop-operating-system.d.mts +15 -0
- package/dist/lib/esm/desktop-operating-system.mjs +16 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +1 -0
- package/dist/lib/esm/i18n/locales/en.mjs +2 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -0
- package/dist/lib/esm/index.d.mts +5 -0
- package/dist/lib/esm/index.mjs +11 -1
- package/dist/lib/esm/menu.d.mts +65 -0
- package/dist/lib/esm/menu.mjs +30 -0
- package/dist/lib/esm/mobile-app-info.d.mts +32 -0
- package/dist/lib/esm/mobile-app-info.mjs +84 -0
- package/dist/lib/esm/modals/modal.d.mts +4 -0
- package/dist/lib/esm/modals/modal.mjs +8 -5
- package/dist/lib/esm/obsidian-settings.mjs +6 -3
- package/dist/lib/esm/plugin/plugin.d.mts +2 -0
- package/dist/lib/esm/plugin/plugin.mjs +5 -2
- package/dist/lib/esm/settings-modal.d.mts +33 -0
- package/dist/lib/esm/settings-modal.mjs +15 -0
- package/package.json +9 -8
|
@@ -0,0 +1,241 @@
|
|
|
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
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
require = Object.assign(
|
|
38
|
+
(id) => requirePatched(id),
|
|
39
|
+
originalRequire,
|
|
40
|
+
{
|
|
41
|
+
__isPatched: true
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
|
+
}
|
|
47
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
|
+
"@codemirror/autocomplete",
|
|
49
|
+
"@codemirror/collab",
|
|
50
|
+
"@codemirror/commands",
|
|
51
|
+
"@codemirror/language",
|
|
52
|
+
"@codemirror/lint",
|
|
53
|
+
"@codemirror/search",
|
|
54
|
+
"@codemirror/state",
|
|
55
|
+
"@codemirror/text",
|
|
56
|
+
"@codemirror/view",
|
|
57
|
+
"@lezer/common",
|
|
58
|
+
"@lezer/highlight",
|
|
59
|
+
"@lezer/lr",
|
|
60
|
+
"obsidian"
|
|
61
|
+
]);
|
|
62
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
63
|
+
"@codemirror/closebrackets",
|
|
64
|
+
"@codemirror/comment",
|
|
65
|
+
"@codemirror/fold",
|
|
66
|
+
"@codemirror/gutter",
|
|
67
|
+
"@codemirror/highlight",
|
|
68
|
+
"@codemirror/history",
|
|
69
|
+
"@codemirror/matchbrackets",
|
|
70
|
+
"@codemirror/panel",
|
|
71
|
+
"@codemirror/rangeset",
|
|
72
|
+
"@codemirror/rectangular-selection",
|
|
73
|
+
"@codemirror/stream-parser",
|
|
74
|
+
"@codemirror/tooltip"
|
|
75
|
+
]);
|
|
76
|
+
function requirePatched(id) {
|
|
77
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
78
|
+
return originalRequire?.(id);
|
|
79
|
+
}
|
|
80
|
+
const app = globalThis.app;
|
|
81
|
+
if (app?.isMobile) {
|
|
82
|
+
if (id === "process" || id === "node:process") {
|
|
83
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
84
|
+
return process;
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
|
|
97
|
+
"use strict";
|
|
98
|
+
var __create = Object.create;
|
|
99
|
+
var __defProp = Object.defineProperty;
|
|
100
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
101
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
102
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
103
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
104
|
+
var __export = (target, all) => {
|
|
105
|
+
for (var name in all)
|
|
106
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
107
|
+
};
|
|
108
|
+
var __copyProps = (to, from, except, desc) => {
|
|
109
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
110
|
+
for (let key of __getOwnPropNames(from))
|
|
111
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
112
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
113
|
+
}
|
|
114
|
+
return to;
|
|
115
|
+
};
|
|
116
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
117
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
118
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
119
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
120
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
121
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
122
|
+
mod
|
|
123
|
+
));
|
|
124
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
125
|
+
var bug_report_exports = {};
|
|
126
|
+
__export(bug_report_exports, {
|
|
127
|
+
BUG_REPORT_ISSUE_FORM_TEMPLATE: () => BUG_REPORT_ISSUE_FORM_TEMPLATE,
|
|
128
|
+
BugReportIssueFormFieldId: () => BugReportIssueFormFieldId,
|
|
129
|
+
formatBugReportEnvironment: () => formatBugReportEnvironment,
|
|
130
|
+
getBugReportEnvironment: () => getBugReportEnvironment,
|
|
131
|
+
getBugReportIssueFormUrl: () => getBugReportIssueFormUrl,
|
|
132
|
+
getGitHubIssueFormUrl: () => getGitHubIssueFormUrl
|
|
133
|
+
});
|
|
134
|
+
module.exports = __toCommonJS(bug_report_exports);
|
|
135
|
+
var import_obsidian = require('obsidian');
|
|
136
|
+
var import_mobile_app_info = require('./mobile-app-info.cjs');
|
|
137
|
+
var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) => {
|
|
138
|
+
BugReportIssueFormFieldId2["Environment"] = "environment";
|
|
139
|
+
BugReportIssueFormFieldId2["ObsidianVersion"] = "obsidian-version";
|
|
140
|
+
BugReportIssueFormFieldId2["OperatingSystem"] = "operating-system";
|
|
141
|
+
BugReportIssueFormFieldId2["PluginVersion"] = "plugin-version";
|
|
142
|
+
return BugReportIssueFormFieldId2;
|
|
143
|
+
})(BugReportIssueFormFieldId || {});
|
|
144
|
+
const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
|
|
145
|
+
const UNKNOWN = "unknown";
|
|
146
|
+
function formatBugReportEnvironment(environment) {
|
|
147
|
+
const enabledPlugins = environment.enabledPlugins.length === 0 ? "none" : environment.enabledPlugins.map((pluginInfo) => formatPluginInfo(pluginInfo)).join(", ");
|
|
148
|
+
return `- Plugin: ${formatPluginInfo(environment.plugin)}
|
|
149
|
+
- Obsidian: ${environment.obsidianVersion} (installer ${environment.installerVersion})
|
|
150
|
+
- Platform: ${environment.platform}
|
|
151
|
+
- Operating system: ${environment.operatingSystem}
|
|
152
|
+
- Other enabled plugins: ${enabledPlugins}`;
|
|
153
|
+
}
|
|
154
|
+
async function getBugReportEnvironment(params) {
|
|
155
|
+
const { app, pluginId } = params;
|
|
156
|
+
const { installerVersion, operatingSystem } = await getAppAndOperatingSystem();
|
|
157
|
+
return {
|
|
158
|
+
enabledPlugins: [...app.plugins.enabledPlugins].filter((id) => id !== pluginId).sort().map((id) => getPluginInfo(app, id)),
|
|
159
|
+
installerVersion,
|
|
160
|
+
obsidianVersion: import_obsidian.apiVersion,
|
|
161
|
+
operatingSystem,
|
|
162
|
+
platform: getPlatformName(),
|
|
163
|
+
plugin: getPluginInfo(app, pluginId)
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
async function getBugReportIssueFormUrl(params) {
|
|
167
|
+
const environment = await getBugReportEnvironment(params);
|
|
168
|
+
return getGitHubIssueFormUrl({
|
|
169
|
+
fields: {
|
|
170
|
+
["environment" /* Environment */]: formatBugReportEnvironment(environment),
|
|
171
|
+
["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
|
|
172
|
+
["operating-system" /* OperatingSystem */]: environment.operatingSystem,
|
|
173
|
+
["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
|
|
174
|
+
},
|
|
175
|
+
gitHubRepo: params.gitHubRepo,
|
|
176
|
+
template: BUG_REPORT_ISSUE_FORM_TEMPLATE,
|
|
177
|
+
...params.title !== void 0 && { title: params.title }
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function getGitHubIssueFormUrl(params) {
|
|
181
|
+
const searchParams = new URLSearchParams({ template: params.template });
|
|
182
|
+
if (params.title !== void 0) {
|
|
183
|
+
searchParams.set("title", params.title);
|
|
184
|
+
}
|
|
185
|
+
for (const [fieldId, value] of Object.entries(params.fields ?? {})) {
|
|
186
|
+
searchParams.set(fieldId, value);
|
|
187
|
+
}
|
|
188
|
+
return `https://github.com/${params.gitHubRepo}/issues/new?${searchParams.toString()}`;
|
|
189
|
+
}
|
|
190
|
+
function formatPluginInfo(pluginInfo) {
|
|
191
|
+
return `\`${pluginInfo.id}\` ${pluginInfo.version ?? UNKNOWN}`;
|
|
192
|
+
}
|
|
193
|
+
async function getAppAndOperatingSystem() {
|
|
194
|
+
if (import_obsidian.Platform.isMobileApp) {
|
|
195
|
+
const mobileAppInfo = await (0, import_mobile_app_info.getMobileAppInfo)();
|
|
196
|
+
return {
|
|
197
|
+
installerVersion: mobileAppInfo?.installerVersion ?? UNKNOWN,
|
|
198
|
+
operatingSystem: mobileAppInfo?.operatingSystem ?? UNKNOWN
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (!import_obsidian.Platform.isDesktopApp) {
|
|
202
|
+
return { installerVersion: UNKNOWN, operatingSystem: UNKNOWN };
|
|
203
|
+
}
|
|
204
|
+
const { getDesktopOperatingSystem } = await import("./desktop-operating-system.cjs");
|
|
205
|
+
const build = import_obsidian.Platform.build;
|
|
206
|
+
return {
|
|
207
|
+
installerVersion: typeof build === "string" ? build : UNKNOWN,
|
|
208
|
+
operatingSystem: getDesktopOperatingSystem()
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function getPlatformName() {
|
|
212
|
+
if (import_obsidian.Platform.isAndroidApp) {
|
|
213
|
+
return "Android";
|
|
214
|
+
}
|
|
215
|
+
if (import_obsidian.Platform.isIosApp) {
|
|
216
|
+
return "iOS";
|
|
217
|
+
}
|
|
218
|
+
if (import_obsidian.Platform.isMacOS) {
|
|
219
|
+
return "macOS";
|
|
220
|
+
}
|
|
221
|
+
if (import_obsidian.Platform.isWin) {
|
|
222
|
+
return "Windows";
|
|
223
|
+
}
|
|
224
|
+
return import_obsidian.Platform.isLinux ? "Linux" : UNKNOWN;
|
|
225
|
+
}
|
|
226
|
+
function getPluginInfo(app, pluginId) {
|
|
227
|
+
return {
|
|
228
|
+
id: pluginId,
|
|
229
|
+
version: app.plugins.manifests[pluginId]?.version ?? null
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
233
|
+
0 && (module.exports = {
|
|
234
|
+
BUG_REPORT_ISSUE_FORM_TEMPLATE,
|
|
235
|
+
BugReportIssueFormFieldId,
|
|
236
|
+
formatBugReportEnvironment,
|
|
237
|
+
getBugReportEnvironment,
|
|
238
|
+
getBugReportIssueFormUrl,
|
|
239
|
+
getGitHubIssueFormUrl
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBlbmFibGVkIHBsdWdpbnMsIHNvcnRlZCBieSBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWRQbHVnaW5zOiByZWFkb25seSBCdWdSZXBvcnRQbHVnaW5JbmZvW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgYXBwJ3MgdmVyc2lvbiwgd2hpY2ggY2FuIGxhZyBiZWhpbmQge0BsaW5rIG9ic2lkaWFuVmVyc2lvbn0uXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsZXJWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmFtZSBhbmQgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGluZ1N5c3RlbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm06IGBBbmRyb2lkYCwgYGlPU2AsIGBtYWNPU2AsIGBXaW5kb3dzYCwgYExpbnV4YCBvciBgdW5rbm93bmAuXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogQnVnUmVwb3J0UGx1Z2luSW5mbztcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiwgYXMgYSBidWcgcmVwb3J0IG5hbWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBgbnVsbGAgd2hlbiBpdHMgbWFuaWZlc3QgaXMgbm90IGtub3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmxQYXJhbXMgZXh0ZW5kcyBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YlJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0R2l0SHViSXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRHaXRIdWJJc3N1ZUZvcm1VcmxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBwcmVmaWxsLCBrZXllZCBieSBmaWVsZCBgaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSdzIGZpbGUgbmFtZSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcEFuZE9wZXJhdGluZ1N5c3RlbSB7XG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbGF0Zm9ybVdpdGhCdWlsZCB7XG4gIHJlYWRvbmx5IGJ1aWxkPzogdW5rbm93bjtcbn1cblxuY29uc3QgVU5LTk9XTiA9ICd1bmtub3duJztcblxuLyoqXG4gKiBSZW5kZXJzIGEgYnVnIHJlcG9ydCdzIGVudmlyb25tZW50IGFzIGEgTWFya2Rvd24gbGlzdC5cbiAqXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudDogQnVnUmVwb3J0RW52aXJvbm1lbnQpOiBzdHJpbmcge1xuICBjb25zdCBlbmFibGVkUGx1Z2lucyA9IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFxuICAgID8gJ25vbmUnXG4gICAgOiBlbnZpcm9ubWVudC5lbmFibGVkUGx1Z2lucy5tYXAoKHBsdWdpbkluZm8pID0+IGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbykpLmpvaW4oJywgJyk7XG5cbiAgcmV0dXJuIGAtIFBsdWdpbjogJHtmb3JtYXRQbHVnaW5JbmZvKGVudmlyb25tZW50LnBsdWdpbil9XFxuYFxuICAgICsgYC0gT2JzaWRpYW46ICR7ZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9ufSAoaW5zdGFsbGVyICR7ZW52aXJvbm1lbnQuaW5zdGFsbGVyVmVyc2lvbn0pXFxuYFxuICAgICsgYC0gUGxhdGZvcm06ICR7ZW52aXJvbm1lbnQucGxhdGZvcm19XFxuYFxuICAgICsgYC0gT3BlcmF0aW5nIHN5c3RlbTogJHtlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW19XFxuYFxuICAgICsgYC0gT3RoZXIgZW5hYmxlZCBwbHVnaW5zOiAke2VuYWJsZWRQbHVnaW5zfWA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzOiB0aGUgcGx1Z2luJ3MgdmVyc2lvbiwgdGhlIG90aGVyIGVuYWJsZWQgcGx1Z2lucywgdGhlXG4gKiBPYnNpZGlhbiBhbmQgaW5zdGFsbGVyIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtczogR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMpOiBQcm9taXNlPEJ1Z1JlcG9ydEVudmlyb25tZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBwbHVnaW5JZCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGluc3RhbGxlclZlcnNpb24sIG9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgZ2V0QXBwQW5kT3BlcmF0aW5nU3lzdGVtKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkUGx1Z2luczogWy4uLmFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zXVxuICAgICAgLmZpbHRlcigoaWQpID0+IGlkICE9PSBwbHVnaW5JZClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGlkKSA9PiBnZXRQbHVnaW5JbmZvKGFwcCwgaWQpKSxcbiAgICBpbnN0YWxsZXJWZXJzaW9uLFxuICAgIG9ic2lkaWFuVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICBvcGVyYXRpbmdTeXN0ZW0sXG4gICAgcGxhdGZvcm06IGdldFBsYXRmb3JtTmFtZSgpLFxuICAgIHBsdWdpbjogZ2V0UGx1Z2luSW5mbyhhcHAsIHBsdWdpbklkKVxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgYSBsaW5rIHRvIGEgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtICh7QGxpbmsgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFfSksIHByZWZpbGxlZCB3aXRoXG4gKiB0aGUgZW52aXJvbm1lbnQsIGluIHRoZSBmaWVsZHMge0BsaW5rIEJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWR9IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsKHBhcmFtczogR2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudChwYXJhbXMpO1xuXG4gIHJldHVybiBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmwoe1xuICAgIGZpZWxkczoge1xuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuRW52aXJvbm1lbnRdOiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PYnNpZGlhblZlcnNpb25dOiBlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb24sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PcGVyYXRpbmdTeXN0ZW1dOiBlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW0sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5QbHVnaW5WZXJzaW9uXTogZW52aXJvbm1lbnQucGx1Z2luLnZlcnNpb24gPz8gVU5LTk9XTlxuICAgIH0sXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgdGVtcGxhdGU6IEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0aGF0IG9wZW5zIGEgR2l0SHViIGlzc3VlIGZvcm0gd2l0aCBmaWVsZHMgcHJlZmlsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHBhcmFtczogR2V0R2l0SHViSXNzdWVGb3JtVXJsUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRlbXBsYXRlOiBwYXJhbXMudGVtcGxhdGUgfSk7XG4gIGlmIChwYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoJ3RpdGxlJywgcGFyYW1zLnRpdGxlKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2ZpZWxkSWQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMuZmllbGRzID8/IHt9KSkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoZmllbGRJZCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtwYXJhbXMuZ2l0SHViUmVwb30vaXNzdWVzL25ldz8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbzogQnVnUmVwb3J0UGx1Z2luSW5mbyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtwbHVnaW5JbmZvLmlkfVxcYCAke3BsdWdpbkluZm8udmVyc2lvbiA/PyBVTktOT1dOfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFwcEFuZE9wZXJhdGluZ1N5c3RlbSgpOiBQcm9taXNlPEFwcEFuZE9wZXJhdGluZ1N5c3RlbT4ge1xuICBpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHApIHtcbiAgICBjb25zdCBtb2JpbGVBcHBJbmZvID0gYXdhaXQgZ2V0TW9iaWxlQXBwSW5mbygpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YWxsZXJWZXJzaW9uOiBtb2JpbGVBcHBJbmZvPy5pbnN0YWxsZXJWZXJzaW9uID8/IFVOS05PV04sXG4gICAgICBvcGVyYXRpbmdTeXN0ZW06IG1vYmlsZUFwcEluZm8/Lm9wZXJhdGluZ1N5c3RlbSA/PyBVTktOT1dOXG4gICAgfTtcbiAgfVxuXG4gIGlmICghUGxhdGZvcm0uaXNEZXNrdG9wQXBwKSB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVyVmVyc2lvbjogVU5LTk9XTiwgb3BlcmF0aW5nU3lzdGVtOiBVTktOT1dOIH07XG4gIH1cblxuICAvLyBDb25kaXRpb25hbCBpbXBvcnQgb2YgdGhlIGRlc2t0b3Atb25seSBsb29rdXAsIHdoaWNoIHJlYWRzIGBub2RlOm9zYDsgdGhpcyBicmFuY2ggcnVucyBvbmx5IG9uIGRlc2t0b3AuXG4gIGNvbnN0IHsgZ2V0RGVza3RvcE9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgaW1wb3J0KCcuL2Rlc2t0b3Atb3BlcmF0aW5nLXN5c3RlbS50cycpO1xuICBjb25zdCBidWlsZCA9IChQbGF0Zm9ybSBhcyBQbGF0Zm9ybVdpdGhCdWlsZCkuYnVpbGQ7XG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVyVmVyc2lvbjogdHlwZW9mIGJ1aWxkID09PSAnc3RyaW5nJyA/IGJ1aWxkIDogVU5LTk9XTixcbiAgICBvcGVyYXRpbmdTeXN0ZW06IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0oKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQbGF0Zm9ybU5hbWUoKTogc3RyaW5nIHtcbiAgaWYgKFBsYXRmb3JtLmlzQW5kcm9pZEFwcCkge1xuICAgIHJldHVybiAnQW5kcm9pZCc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzSW9zQXBwKSB7XG4gICAgcmV0dXJuICdpT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc01hY09TKSB7XG4gICAgcmV0dXJuICdtYWNPUyc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzV2luKSB7XG4gICAgcmV0dXJuICdXaW5kb3dzJztcbiAgfVxuICByZXR1cm4gUGxhdGZvcm0uaXNMaW51eCA/ICdMaW51eCcgOiBVTktOT1dOO1xufVxuXG5mdW5jdGlvbiBnZXRQbHVnaW5JbmZvKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHBsdWdpbklkLFxuICAgIHZlcnNpb246IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/LnZlcnNpb24gPz8gbnVsbFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEsc0JBR087QUFFUCw2QkFBaUM7QUFPMUIsSUFBSyw0QkFBTCxrQkFBS0EsK0JBQUw7QUFJTCxFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSwyQkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBbkJOLFNBQUFBO0FBQUEsR0FBQTtBQXlCTCxNQUFNLGlDQUFpQztBQW9IOUMsTUFBTSxVQUFVO0FBUVQsU0FBUywyQkFBMkIsYUFBMkM7QUFDcEYsUUFBTSxpQkFBaUIsWUFBWSxlQUFlLFdBQVcsSUFDekQsU0FDQSxZQUFZLGVBQWUsSUFBSSxDQUFDLGVBQWUsaUJBQWlCLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUUxRixTQUFPLGFBQWEsaUJBQWlCLFlBQVksTUFBTSxDQUFDO0FBQUEsY0FDckMsWUFBWSxlQUFlLGVBQWUsWUFBWSxnQkFBZ0I7QUFBQSxjQUN0RSxZQUFZLFFBQVE7QUFBQSxzQkFDWixZQUFZLGVBQWU7QUFBQSwyQkFDdEIsY0FBYztBQUNoRDtBQVNBLGVBQXNCLHdCQUF3QixRQUFzRTtBQUNsSCxRQUFNLEVBQUUsS0FBSyxTQUFTLElBQUk7QUFDMUIsUUFBTSxFQUFFLGtCQUFrQixnQkFBZ0IsSUFBSSxNQUFNLHlCQUF5QjtBQUU3RSxTQUFPO0FBQUEsSUFDTCxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksUUFBUSxjQUFjLEVBQzNDLE9BQU8sQ0FBQyxPQUFPLE9BQU8sUUFBUSxFQUM5QixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFBLElBQ3JDO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxJQUNqQjtBQUFBLElBQ0EsVUFBVSxnQkFBZ0I7QUFBQSxJQUMxQixRQUFRLGNBQWMsS0FBSyxRQUFRO0FBQUEsRUFDckM7QUFDRjtBQVNBLGVBQXNCLHlCQUF5QixRQUF5RDtBQUN0RyxRQUFNLGNBQWMsTUFBTSx3QkFBd0IsTUFBTTtBQUV4RCxTQUFPLHNCQUFzQjtBQUFBLElBQzNCLFFBQVE7QUFBQSxNQUNOLENBQUMsK0JBQXFDLEdBQUcsMkJBQTJCLFdBQVc7QUFBQSxNQUMvRSxDQUFDLHdDQUF5QyxHQUFHLFlBQVk7QUFBQSxNQUN6RCxDQUFDLHdDQUF5QyxHQUFHLFlBQVk7QUFBQSxNQUN6RCxDQUFDLG9DQUF1QyxHQUFHLFlBQVksT0FBTyxXQUFXO0FBQUEsSUFDM0U7QUFBQSxJQUNBLFlBQVksT0FBTztBQUFBLElBQ25CLFVBQVU7QUFBQSxJQUNWLEdBQUcsT0FBTyxVQUFVLFVBQWEsRUFBRSxPQUFPLE9BQU8sTUFBTTtBQUFBLEVBQ3pELENBQUM7QUFDSDtBQVFPLFNBQVMsc0JBQXNCLFFBQTZDO0FBQ2pGLFFBQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDdEUsTUFBSSxPQUFPLFVBQVUsUUFBVztBQUM5QixpQkFBYSxJQUFJLFNBQVMsT0FBTyxLQUFLO0FBQUEsRUFDeEM7QUFFQSxhQUFXLENBQUMsU0FBUyxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sVUFBVSxDQUFDLENBQUMsR0FBRztBQUNsRSxpQkFBYSxJQUFJLFNBQVMsS0FBSztBQUFBLEVBQ2pDO0FBRUEsU0FBTyxzQkFBc0IsT0FBTyxVQUFVLGVBQWUsYUFBYSxTQUFTLENBQUM7QUFDdEY7QUFFQSxTQUFTLGlCQUFpQixZQUF5QztBQUNqRSxTQUFPLEtBQUssV0FBVyxFQUFFLE1BQU0sV0FBVyxXQUFXLE9BQU87QUFDOUQ7QUFFQSxlQUFlLDJCQUEyRDtBQUN4RSxNQUFJLHlCQUFTLGFBQWE7QUFDeEIsVUFBTSxnQkFBZ0IsVUFBTSx5Q0FBaUI7QUFDN0MsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLGVBQWUsb0JBQW9CO0FBQUEsTUFDckQsaUJBQWlCLGVBQWUsbUJBQW1CO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLHlCQUFTLGNBQWM7QUFDMUIsV0FBTyxFQUFFLGtCQUFrQixTQUFTLGlCQUFpQixRQUFRO0FBQUEsRUFDL0Q7QUFHQSxRQUFNLEVBQUUsMEJBQTBCLElBQUksTUFBTSxPQUFPLCtCQUErQjtBQUNsRixRQUFNLFFBQVMseUJBQStCO0FBQzlDLFNBQU87QUFBQSxJQUNMLGtCQUFrQixPQUFPLFVBQVUsV0FBVyxRQUFRO0FBQUEsSUFDdEQsaUJBQWlCLDBCQUEwQjtBQUFBLEVBQzdDO0FBQ0Y7QUFFQSxTQUFTLGtCQUEwQjtBQUNqQyxNQUFJLHlCQUFTLGNBQWM7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLFVBQVU7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLFNBQVM7QUFDcEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLE9BQU87QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLHlCQUFTLFVBQVUsVUFBVTtBQUN0QztBQUVBLFNBQVMsY0FBYyxLQUFVLFVBQXVDO0FBQ3RFLFNBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLFNBQVMsSUFBSSxRQUFRLFVBQVUsUUFBUSxHQUFHLFdBQVc7QUFBQSxFQUN2RDtBQUNGOyIsIm5hbWVzIjpbIkJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQiXX0=
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Helpers for a plugin's bug reports: the environment a report needs, and a link to a GitHub issue form
|
|
6
|
+
* prefilled with it.
|
|
7
|
+
*
|
|
8
|
+
* Cross-platform-loadable: the desktop operating-system lookup reads `node:os`, so it is imported
|
|
9
|
+
* dynamically, on desktop only.
|
|
10
|
+
*
|
|
11
|
+
* The desktop installer version is `Platform.build`, which no public typing declares: Obsidian's desktop
|
|
12
|
+
* startup sets it from Electron's `app.getVersion()` (read from Obsidian `1.15.0`), so it is read
|
|
13
|
+
* structurally here, and reads as `unknown` if a later version drops it.
|
|
14
|
+
*/
|
|
15
|
+
import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
16
|
+
/**
|
|
17
|
+
* The ids of the bug-report issue form's fields that {@link getBugReportIssueFormUrl} prefills. GitHub
|
|
18
|
+
* prefills a field from a query parameter named after the field's `id`, so a form must give its fields
|
|
19
|
+
* these ids for them to be filled.
|
|
20
|
+
*/
|
|
21
|
+
export declare enum BugReportIssueFormFieldId {
|
|
22
|
+
/**
|
|
23
|
+
* The whole environment, as {@link formatBugReportEnvironment} renders it.
|
|
24
|
+
*/
|
|
25
|
+
Environment = "environment",
|
|
26
|
+
/**
|
|
27
|
+
* The Obsidian version.
|
|
28
|
+
*/
|
|
29
|
+
ObsidianVersion = "obsidian-version",
|
|
30
|
+
/**
|
|
31
|
+
* The operating system.
|
|
32
|
+
*/
|
|
33
|
+
OperatingSystem = "operating-system",
|
|
34
|
+
/**
|
|
35
|
+
* The reporting plugin's version.
|
|
36
|
+
*/
|
|
37
|
+
PluginVersion = "plugin-version"
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The file name of the bug-report issue form, under `.github/ISSUE_TEMPLATE`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
|
|
43
|
+
/**
|
|
44
|
+
* The environment a bug report needs.
|
|
45
|
+
*/
|
|
46
|
+
export interface BugReportEnvironment {
|
|
47
|
+
/**
|
|
48
|
+
* The other enabled plugins, sorted by id.
|
|
49
|
+
*/
|
|
50
|
+
readonly enabledPlugins: readonly BugReportPluginInfo[];
|
|
51
|
+
/**
|
|
52
|
+
* The installed app's version, which can lag behind {@link obsidianVersion}.
|
|
53
|
+
*/
|
|
54
|
+
readonly installerVersion: string;
|
|
55
|
+
/**
|
|
56
|
+
* The Obsidian version.
|
|
57
|
+
*/
|
|
58
|
+
readonly obsidianVersion: string;
|
|
59
|
+
/**
|
|
60
|
+
* The operating system's name and version.
|
|
61
|
+
*/
|
|
62
|
+
readonly operatingSystem: string;
|
|
63
|
+
/**
|
|
64
|
+
* The platform: `Android`, `iOS`, `macOS`, `Windows`, `Linux` or `unknown`.
|
|
65
|
+
*/
|
|
66
|
+
readonly platform: string;
|
|
67
|
+
/**
|
|
68
|
+
* The reporting plugin.
|
|
69
|
+
*/
|
|
70
|
+
readonly plugin: BugReportPluginInfo;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* A plugin, as a bug report names it.
|
|
74
|
+
*/
|
|
75
|
+
export interface BugReportPluginInfo {
|
|
76
|
+
/**
|
|
77
|
+
* The plugin's id.
|
|
78
|
+
*/
|
|
79
|
+
readonly id: string;
|
|
80
|
+
/**
|
|
81
|
+
* The plugin's installed version, or `null` when its manifest is not known.
|
|
82
|
+
*/
|
|
83
|
+
readonly version: null | string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parameters for {@link getBugReportEnvironment}.
|
|
87
|
+
*/
|
|
88
|
+
export interface GetBugReportEnvironmentParams {
|
|
89
|
+
/**
|
|
90
|
+
* The Obsidian app instance.
|
|
91
|
+
*/
|
|
92
|
+
readonly app: App;
|
|
93
|
+
/**
|
|
94
|
+
* The id of the reporting plugin.
|
|
95
|
+
*/
|
|
96
|
+
readonly pluginId: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parameters for {@link getBugReportIssueFormUrl}.
|
|
100
|
+
*/
|
|
101
|
+
export interface GetBugReportIssueFormUrlParams extends GetBugReportEnvironmentParams {
|
|
102
|
+
/**
|
|
103
|
+
* The plugin's GitHub repository, as `owner/name`.
|
|
104
|
+
*/
|
|
105
|
+
readonly gitHubRepo: string;
|
|
106
|
+
/**
|
|
107
|
+
* The issue's title. Leave it out to keep the form's own default title.
|
|
108
|
+
*/
|
|
109
|
+
readonly title?: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Parameters for {@link getGitHubIssueFormUrl}.
|
|
113
|
+
*/
|
|
114
|
+
export interface GetGitHubIssueFormUrlParams {
|
|
115
|
+
/**
|
|
116
|
+
* The values to prefill, keyed by field `id`.
|
|
117
|
+
*/
|
|
118
|
+
readonly fields?: Readonly<Record<string, string>>;
|
|
119
|
+
/**
|
|
120
|
+
* The GitHub repository, as `owner/name`.
|
|
121
|
+
*/
|
|
122
|
+
readonly gitHubRepo: string;
|
|
123
|
+
/**
|
|
124
|
+
* The form's file name, under `.github/ISSUE_TEMPLATE`.
|
|
125
|
+
*/
|
|
126
|
+
readonly template: string;
|
|
127
|
+
/**
|
|
128
|
+
* The issue's title. Leave it out to keep the form's own default title.
|
|
129
|
+
*/
|
|
130
|
+
readonly title?: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Renders a bug report's environment as a Markdown list.
|
|
134
|
+
*
|
|
135
|
+
* @param environment - The environment.
|
|
136
|
+
* @returns The Markdown.
|
|
137
|
+
*/
|
|
138
|
+
export declare function formatBugReportEnvironment(environment: BugReportEnvironment): string;
|
|
139
|
+
/**
|
|
140
|
+
* Gets the environment a bug report needs: the plugin's version, the other enabled plugins, the
|
|
141
|
+
* Obsidian and installer versions, the platform and the operating system.
|
|
142
|
+
*
|
|
143
|
+
* @param params - The parameters.
|
|
144
|
+
* @returns The environment.
|
|
145
|
+
*/
|
|
146
|
+
export declare function getBugReportEnvironment(params: GetBugReportEnvironmentParams): Promise<BugReportEnvironment>;
|
|
147
|
+
/**
|
|
148
|
+
* Gets a link to a plugin's bug-report issue form ({@link BUG_REPORT_ISSUE_FORM_TEMPLATE}), prefilled with
|
|
149
|
+
* the environment, in the fields {@link BugReportIssueFormFieldId} names.
|
|
150
|
+
*
|
|
151
|
+
* @param params - The parameters.
|
|
152
|
+
* @returns The link.
|
|
153
|
+
*/
|
|
154
|
+
export declare function getBugReportIssueFormUrl(params: GetBugReportIssueFormUrlParams): Promise<string>;
|
|
155
|
+
/**
|
|
156
|
+
* Gets a link that opens a GitHub issue form with fields prefilled.
|
|
157
|
+
*
|
|
158
|
+
* @param params - The parameters.
|
|
159
|
+
* @returns The link.
|
|
160
|
+
*/
|
|
161
|
+
export declare function getGitHubIssueFormUrl(params: GetGitHubIssueFormUrlParams): string;
|
|
@@ -87,12 +87,25 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
87
87
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
88
88
|
var bulk_operation_progress_exports = {};
|
|
89
89
|
__export(bulk_operation_progress_exports, {
|
|
90
|
+
BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS: () => BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS,
|
|
91
|
+
holdBulkOperationWhile: () => holdBulkOperationWhile,
|
|
90
92
|
registerBulkOperationProgressListener: () => registerBulkOperationProgressListener,
|
|
91
93
|
reportBulkOperationProgress: () => reportBulkOperationProgress
|
|
92
94
|
});
|
|
93
95
|
module.exports = __toCommonJS(bulk_operation_progress_exports);
|
|
94
96
|
var import_obsidian_lib_state = require('./obsidian-lib-state.cjs');
|
|
95
97
|
const BULK_OPERATION_PROGRESS_STATE_KEY = "bulkOperationProgressV1";
|
|
98
|
+
const BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS = 1e4;
|
|
99
|
+
async function holdBulkOperationWhile(promise) {
|
|
100
|
+
reportBulkOperationProgress();
|
|
101
|
+
const intervalId = window.setInterval(reportBulkOperationProgress, BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS);
|
|
102
|
+
try {
|
|
103
|
+
return await promise;
|
|
104
|
+
} finally {
|
|
105
|
+
window.clearInterval(intervalId);
|
|
106
|
+
reportBulkOperationProgress();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
96
109
|
function registerBulkOperationProgressListener(listener) {
|
|
97
110
|
const listeners = getListeners();
|
|
98
111
|
listeners.add(listener);
|
|
@@ -114,7 +127,9 @@ function getListeners() {
|
|
|
114
127
|
}
|
|
115
128
|
// Annotate the CommonJS export names for ESM import in node:
|
|
116
129
|
0 && (module.exports = {
|
|
130
|
+
BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS,
|
|
131
|
+
holdBulkOperationWhile,
|
|
117
132
|
registerBulkOperationProgressListener,
|
|
118
133
|
reportBulkOperationProgress
|
|
119
134
|
});
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWxrLW9wZXJhdGlvbi1wcm9ncmVzcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWFsbS13aWRlIHByb2dyZXNzIHNpZ25hbCBmb3IgYnVsayBvcGVyYXRpb25zLlxuICpcbiAqIEEgYnVsayBvcGVyYXRpb24gd3JhcHBlZCBpbiBnaXQgY29tbWl0cyBob2xkcyBhIGxlYXNlIGxvY2sgd2hvc2UgaGVhcnRiZWF0IG11c3QgYmUgcmVmcmVzaGVkIGJ5IHRoZSBvcGVyYXRpb24nc1xuICogb3duIHByb2dyZXNzLCBuZXZlciBieSBhIGZyZWUtcnVubmluZyB0aW1lciwgc28gYSBodW5nIG9wZXJhdGlvbiBnb2VzIHN0YWxlIGxpa2UgYSBjcmFzaGVkIG9uZS4gUmF0aGVyIHRoYW5cbiAqIHRocmVhZGluZyBhIGNhbGxiYWNrIHRocm91Z2ggZXZlcnkgcGx1Z2luJ3MgY2FsbCBjaGFpbiwgdGhlIHdyYXBwZXIgc3Vic2NyaWJlcyBoZXJlIHdoaWxlIGl0IHJ1bnMsIGFuZFxuICoge0BsaW5rIGxvb3B9IHJlcG9ydHMgYWZ0ZXIgZXZlcnkgaXRlbSBpdCBwcm9jZXNzZXMuIENvZGUgdGhhdCBkcml2ZXMgYSBidWxrIG9wZXJhdGlvbiB3aXRob3V0IGBsb29wKClgIGNhbGxzXG4gKiB7QGxpbmsgcmVwb3J0QnVsa09wZXJhdGlvblByb2dyZXNzfSBpdHNlbGYuXG4gKlxuICogQW4gb3BlcmF0aW9uIHdhaXRpbmcgb24gdGhlIHVzZXIgKGEgY29uZmlybWF0aW9uLCBhIHBpY2tlcikgbWFrZXMgbm8gcHJvZ3Jlc3MsIHlldCBpdCBpcyBub3QgaHVuZy4gV2hpbGUgc3VjaCBhXG4gKiBkaWFsb2cgaXMgb3Blbiwge0BsaW5rIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGV9IHJlcG9ydHMgb24gYW4gaW50ZXJ2YWwsIHNjb3BlZCB0byB0aGF0IG9uZSBwcm9taXNlOiB0aGUgdGltZXJcbiAqIHN0b3BzIHRoZSBtb21lbnQgdGhlIGRpYWxvZyBzZXR0bGVzLCBzbyBhIGh1bmcgb3BlcmF0aW9uIG91dHNpZGUgYSBkaWFsb2cgc3RpbGwgZ29lcyBzdGFsZS4gRXZlcnkgbW9kYWwgaGVscGVyIG9mXG4gKiB0aGlzIGxpYnJhcnkgYWxyZWFkeSBob2xkcyB0aHJvdWdoIGBzaG93TW9kYWxgLlxuICpcbiAqIFRoZSBsaXN0ZW5lciBzZXQgbGl2ZXMgaW4gdGhlIHNoYXJlZC1zdGF0ZSBiYWcgdW5kZXIgYSB2ZXJzaW9uZWQga2V5LCBzbyBhIGBsb29wKClgIGJ1bmRsZWQgYnkgb25lIHBsdWdpbidzIGNvcHlcbiAqIG9mIHRoaXMgbGlicmFyeSByZWFjaGVzIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBieSBhbm90aGVyJ3MuIEl0cyBzaGFwZSBpcyBhIGNyb3NzLWNvcHkgd2lyZSBmb3JtYXQ6IGEgYFNldGAgb2ZcbiAqIHBsYWluIGZ1bmN0aW9ucywgcmVhZCBzdHJ1Y3R1cmFsbHkuXG4gKi9cblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGxpc3RlbmVyIG5vdGlmaWVkIHdoZW5ldmVyIGEgYnVsayBvcGVyYXRpb24gbWFrZXMgcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCB0eXBlIEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyID0gKCkgPT4gdm9pZDtcblxuY29uc3QgQlVMS19PUEVSQVRJT05fUFJPR1JFU1NfU1RBVEVfS0VZID0gJ2J1bGtPcGVyYXRpb25Qcm9ncmVzc1YxJztcblxuLyoqXG4gKiBIb3cgb2Z0ZW4ge0BsaW5rIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGV9IHJlcG9ydHMgcHJvZ3Jlc3Mgd2hpbGUgaXRzIHByb21pc2UgaXMgcGVuZGluZywgd2VsbCBpbnNpZGUgdGhlIGxvY2snc1xuICogc3RhbGVuZXNzIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVTEtfT1BFUkFUSU9OX0hPTERfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuXG4vKipcbiAqIEtlZXBzIGEgYnVsayBvcGVyYXRpb24ncyBsZWFzZSBsb2NrIGZyZXNoIHdoaWxlIGl0IHdhaXRzIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBwcm9ncmVzcyBidXQgbm90IGEgaGFuZyBlaXRoZXIsXG4gKiBzdWNoIGFzIGEgZGlhbG9nIHdhaXRpbmcgZm9yIHRoZSB1c2VyLlxuICpcbiAqIFJlcG9ydHMgcHJvZ3Jlc3MgYXQgb25jZSwgdGhlbiBldmVyeSB7QGxpbmsgQlVMS19PUEVSQVRJT05fSE9MRF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFN9IHdoaWxlIHRoZSBwcm9taXNlIGlzXG4gKiBwZW5kaW5nLCBhbmQgb25jZSBtb3JlIHdoZW4gaXQgc2V0dGxlcy4gT3V0c2lkZSBhIGJ1bGsgb3BlcmF0aW9uIGl0IGNvc3RzIG9uZSBpbnRlcnZhbCBhbmQgbm90aGluZyBlbHNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBwcm9taXNlJ3MgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIHdhaXQgZm9yLlxuICogQHJldHVybnMgVGhlIHByb21pc2UncyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGU8VD4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MoKTtcbiAgY29uc3QgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChyZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MsIEJVTEtfT1BFUkFUSU9OX0hPTERfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICByZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gYnVsay1vcGVyYXRpb24gcHJvZ3Jlc3MuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyIHRvIG5vdGlmeSBvbiBldmVyeSBwcm9ncmVzcyByZXBvcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdW5zdWJzY3JpYmVzIHRoZSBsaXN0ZW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXIobGlzdGVuZXI6IEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgYSBidWxrIG9wZXJhdGlvbiBoYXMgbWFkZSBwcm9ncmVzcywgc3VjaCBhcyBmaW5pc2hpbmcgb25lIGl0ZW0uXG4gKlxuICogQSBsaXN0ZW5lciB0aGF0IHRocm93cyBpcyBza2lwcGVkLCBzbyBhIHByb2dyZXNzIHJlcG9ydCBjYW4gbmV2ZXIgZmFpbCB0aGUgb3BlcmF0aW9uIHJlcG9ydGluZyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEJ1bGtPcGVyYXRpb25Qcm9ncmVzcygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIHRyeSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdCdWxrIG9wZXJhdGlvbiBwcm9ncmVzcyBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8QnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuTGliU3RhdGUoQlVMS19PUEVSQVRJT05fUFJPR1JFU1NfU1RBVEVfS0VZLCBuZXcgU2V0PEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyPigpKS52YWx1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFCQSxnQ0FBb0M7QUFPcEMsTUFBTSxvQ0FBb0M7QUFNbkMsTUFBTSwrQ0FBK0M7QUFhNUQsZUFBc0IsdUJBQTBCLFNBQWlDO0FBQy9FLDhCQUE0QjtBQUM1QixRQUFNLGFBQWEsT0FBTyxZQUFZLDZCQUE2Qiw0Q0FBNEM7QUFDL0csTUFBSTtBQUNGLFdBQU8sTUFBTTtBQUFBLEVBQ2YsVUFBRTtBQUNBLFdBQU8sY0FBYyxVQUFVO0FBQy9CLGdDQUE0QjtBQUFBLEVBQzlCO0FBQ0Y7QUFRTyxTQUFTLHNDQUFzQyxVQUFxRDtBQUN6RyxRQUFNLFlBQVksYUFBYTtBQUMvQixZQUFVLElBQUksUUFBUTtBQUN0QixTQUFPLE1BQU07QUFDWCxjQUFVLE9BQU8sUUFBUTtBQUFBLEVBQzNCO0FBQ0Y7QUFPTyxTQUFTLDhCQUFvQztBQUNsRCxhQUFXLFlBQVksYUFBYSxHQUFHO0FBQ3JDLFFBQUk7QUFDRixlQUFTO0FBQUEsSUFDWCxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0sMkNBQTJDLEtBQUs7QUFBQSxJQUNoRTtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsZUFBbUQ7QUFDMUQsYUFBTywrQ0FBb0IsbUNBQW1DLG9CQUFJLElBQW1DLENBQUMsRUFBRTtBQUMxRzsiLCJuYW1lcyI6W119
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* {@link loop} reports after every item it processes. Code that drives a bulk operation without `loop()` calls
|
|
11
11
|
* {@link reportBulkOperationProgress} itself.
|
|
12
12
|
*
|
|
13
|
+
* An operation waiting on the user (a confirmation, a picker) makes no progress, yet it is not hung. While such a
|
|
14
|
+
* dialog is open, {@link holdBulkOperationWhile} reports on an interval, scoped to that one promise: the timer
|
|
15
|
+
* stops the moment the dialog settles, so a hung operation outside a dialog still goes stale. Every modal helper of
|
|
16
|
+
* this library already holds through `showModal`.
|
|
17
|
+
*
|
|
13
18
|
* The listener set lives in the shared-state bag under a versioned key, so a `loop()` bundled by one plugin's copy
|
|
14
19
|
* of this library reaches a listener registered by another's. Its shape is a cross-copy wire format: a `Set` of
|
|
15
20
|
* plain functions, read structurally.
|
|
@@ -18,6 +23,23 @@
|
|
|
18
23
|
* A listener notified whenever a bulk operation makes progress.
|
|
19
24
|
*/
|
|
20
25
|
export type BulkOperationProgressListener = () => void;
|
|
26
|
+
/**
|
|
27
|
+
* How often {@link holdBulkOperationWhile} reports progress while its promise is pending, well inside the lock's
|
|
28
|
+
* staleness window.
|
|
29
|
+
*/
|
|
30
|
+
export declare const BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS = 10000;
|
|
31
|
+
/**
|
|
32
|
+
* Keeps a bulk operation's lease lock fresh while it waits on something that is not progress but not a hang either,
|
|
33
|
+
* such as a dialog waiting for the user.
|
|
34
|
+
*
|
|
35
|
+
* Reports progress at once, then every {@link BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS} while the promise is
|
|
36
|
+
* pending, and once more when it settles. Outside a bulk operation it costs one interval and nothing else.
|
|
37
|
+
*
|
|
38
|
+
* @typeParam T - The type of the promise's value.
|
|
39
|
+
* @param promise - The promise to wait for.
|
|
40
|
+
* @returns The promise's value.
|
|
41
|
+
*/
|
|
42
|
+
export declare function holdBulkOperationWhile<T>(promise: Promise<T>): Promise<T>;
|
|
21
43
|
/**
|
|
22
44
|
* Subscribes to bulk-operation progress.
|
|
23
45
|
*
|
|
@@ -121,6 +121,7 @@ __export(case_insensitive_file_index_exports, {
|
|
|
121
121
|
});
|
|
122
122
|
module.exports = __toCommonJS(case_insensitive_file_index_exports);
|
|
123
123
|
var import_array = require('@mnaoumov/typescript-lib/array');
|
|
124
|
+
var import_obsidian = require('obsidian');
|
|
124
125
|
var import_obsidian_lib_state = require('./obsidian-lib-state.cjs');
|
|
125
126
|
const STATE_KEY = "caseInsensitiveFileIndex";
|
|
126
127
|
class CaseInsensitiveFileIndex {
|
|
@@ -150,7 +151,11 @@ class CaseInsensitiveFileIndex {
|
|
|
150
151
|
*/
|
|
151
152
|
delete(path) {
|
|
152
153
|
const key = path.toLowerCase();
|
|
154
|
+
const abstractFile = this.map.get(key);
|
|
153
155
|
this.map.delete(key);
|
|
156
|
+
if (abstractFile && !(abstractFile instanceof import_obsidian.TFolder)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
154
159
|
const descendantPrefix = `${key}/`;
|
|
155
160
|
for (const existingKey of (0, import_array.snapshot)(this.map.keys())) {
|
|
156
161
|
if (existingKey.startsWith(descendantPrefix)) {
|
|
@@ -192,6 +197,9 @@ class CaseInsensitiveFileIndex {
|
|
|
192
197
|
const newKey = newAbstractFile.path.toLowerCase();
|
|
193
198
|
this.map.delete(oldKey);
|
|
194
199
|
this.map.set(newKey, newAbstractFile);
|
|
200
|
+
if (!(newAbstractFile instanceof import_obsidian.TFolder)) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
195
203
|
const oldDescendantPrefix = `${oldKey}/`;
|
|
196
204
|
const newDescendantPrefix = `${newKey}/`;
|
|
197
205
|
for (const [existingKey, existingValue] of (0, import_array.snapshot)(this.map)) {
|
|
@@ -223,4 +231,4 @@ function unsetCaseInsensitiveFileIndex(index) {
|
|
|
223
231
|
setCaseInsensitiveFileIndex,
|
|
224
232
|
unsetCaseInsensitiveFileIndex
|
|
225
233
|
});
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIGFuIG9wdC1pbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgcmVzb2x2ZXIgZm9yIE9ic2lkaWFuIHZhdWx0cy5cbiAqXG4gKiBPYnNpZGlhbidzIG5hdGl2ZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9WYXVsdCB8IFZhdWx0fSByZXNvbHZlc1xuICogYSBzdHJpbmcgcGF0aCBjYXNlLWluc2Vuc2l0aXZlbHkgKHRoZSBXaW5kb3dzL21hY09TIGRlZmF1bHQpIGluIE8oMSkgb24gYSBoaXQgYnV0IHdpdGggYW5cbiAqIE8odmF1bHQpIHNjYW4gb24gYSBtaXNzLiBUaGUgbWlzcyBjYXNlIGlzIHRoZSBob3Qgb25lIGR1cmluZyBkZWxldGlvbiBjYXNjYWRlcywgd2hlcmUgZXh0ZW5zaW9uXG4gKiBjaGVja3MgYW5kIGNhY2hlIGxvb2t1cHMgYXJlIHBlcmZvcm1lZCBvbiBhbHJlYWR5LXJlbW92ZWQgcGF0aHMuIFRoaXMgbW9kdWxlIGJhY2tzIHRoZVxuICogY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXAgd2l0aCBhIGBsb3dlcmNhc2UtcGF0aCDihpIgVEFic3RyYWN0RmlsZWAgaW5kZXggc28gbWlzc2VzIGFyZSBPKDEpIHRvby5cbiAqXG4gKiBUaGUgaW5kZXggaXMgZXhwbGljaXRseSBvcHQtaW46IGEgY29uc3VtZXIgaW5zdGFsbHMgaXQgYnkgbG9hZGluZyBhXG4gKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9Db21wb25lbnQgfCBDb21wb25lbnR9IHRoYXQga2VlcHMgaXQgaW5cbiAqIHN5bmMgd2l0aCBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCBldmVudHMgKHNlZSBgQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4Q29tcG9uZW50YCkuIFVudGlsIHRoZW4sXG4gKiB0aGUgcmVzb2x1dGlvbiBsYXllciBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgKE8odmF1bHQpLW9uLW1pc3MpIGxvb2t1cCwgc28gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXJyYXknO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYlN0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1saWItc3RhdGUudHMnO1xuXG5jb25zdCBTVEFURV9LRVkgPSAnY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4JztcblxuLyoqXG4gKiBBbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgaW5kZXggb2YgdGhlIGxvYWRlZCBmaWxlcyBhbmQgZm9sZGVycyBvZiBhIHNpbmdsZSB2YXVsdC5cbiAqXG4gKiBUaGUgaW5kZXggbWFwcyB0aGUgbG93ZXJjYXNlZCBwYXRoIG9mIGVhY2ggYWJzdHJhY3QgZmlsZSB0byB0aGUgYWJzdHJhY3QgZmlsZSBpdHNlbGYuIEl0IGlzIGtlcHRcbiAqIGluIHN5bmMgYnkgYW4gb3duaW5nIGNvbXBvbmVudCB0aGF0IGZvcndhcmRzIGBjcmVhdGVgL2BkZWxldGVgL2ByZW5hbWVgIHZhdWx0IGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRBYnN0cmFjdEZpbGU+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdob3NlIHZhdWx0IHRoaXMgaW5kZXggbWlycm9ycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHt9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYWJzdHJhY3QgZmlsZSB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IHZvaWQge1xuICAgIHRoaXMubWFwLnNldChhYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpLCBhYnN0cmFjdEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGFic3RyYWN0IGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggZnJvbSB0aGUgaW5kZXgsIGFsb25nIHdpdGggYWxsIG9mIGl0cyBkZXNjZW5kYW50c1xuICAgKiAoZm9yIGZvbGRlciBkZWxldGlvbnMsIHdoZXJlIE9ic2lkaWFuIHJlbW92ZXMgdGhlIHdob2xlIHN1YnRyZWUpLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBhYnN0cmFjdCBmaWxlIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyBkZWxldGUocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubWFwLmRlbGV0ZShrZXkpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRQcmVmaXggPSBgJHtrZXl9L2A7XG4gICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBzbmFwc2hvdCh0aGlzLm1hcC5rZXlzKCkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdLZXkuc3RhcnRzV2l0aChkZXNjZW5kYW50UHJlZml4KSkge1xuICAgICAgICB0aGlzLm1hcC5kZWxldGUoZXhpc3RpbmdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBhYnN0cmFjdCBmaWxlIGJ5IGl0cyBwYXRoLCBjYXNlLWluc2Vuc2l0aXZlbHksIGluIE8oMSkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gcmVzb2x2ZS5cbiAgICogQHJldHVybnMgVGhlIGFic3RyYWN0IGZpbGUgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAqL1xuICBwdWJsaWMgZ2V0KHBhdGg6IHN0cmluZyk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KHBhdGgudG9Mb3dlckNhc2UoKSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIGluZGV4IG1pcnJvcnMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uJ3MgdmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoaXMgaW5kZXggYmVsb25ncyB0byB0aGUgZ2l2ZW4gYXBwbGljYXRpb24sIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIG93bnNBcHAoYXBwOiBBcHApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hcHAgPT09IGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1rZXlzIGFuIGFic3RyYWN0IGZpbGUgKGFuZCwgZm9yIGZvbGRlcnMsIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMpIGFmdGVyIGEgcmVuYW1lLlxuICAgKlxuICAgKiBPYnNpZGlhbiBmaXJlcyBhIHNpbmdsZSBgcmVuYW1lYCBldmVudCBmb3IgdGhlIHJlbmFtZWQgYWJzdHJhY3QgZmlsZSBhbmQgdXBkYXRlcyBpdHNcbiAgICogZGVzY2VuZGFudHMnIHBhdGhzIGluIHBsYWNlIHdpdGhvdXQgZmlyaW5nIHBlci1kZXNjZW5kYW50IGV2ZW50cywgc28gZGVzY2VuZGFudCBrZXlzIGFyZVxuICAgKiByZWNvbXB1dGVkIGhlcmUgYnkgc3dhcHBpbmcgdGhlIG9sZCBwYXRoIHByZWZpeCBmb3IgdGhlIG5ldyBvbmUuIEhhbmRsZXMgY2FzZS1vbmx5IHJlbmFtZXMgKHRoZVxuICAgKiBvbGQgYW5kIG5ldyBrZXlzIGNvaW5jaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIG9sZFBhdGggLSBUaGUgcGF0aCB0aGUgYWJzdHJhY3QgZmlsZSBoYWQgYmVmb3JlIHRoZSByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdBYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB3aXRoIGl0cyB1cGRhdGVkIChwb3N0LXJlbmFtZSkgcGF0aC5cbiAgICovXG4gIHB1YmxpYyByZW5hbWUob2xkUGF0aDogc3RyaW5nLCBuZXdBYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRLZXkgPSBvbGRQYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbmV3S2V5ID0gbmV3QWJzdHJhY3RGaWxlLnBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLm1hcC5kZWxldGUob2xkS2V5KTtcbiAgICB0aGlzLm1hcC5zZXQobmV3S2V5LCBuZXdBYnN0cmFjdEZpbGUpO1xuXG4gICAgY29uc3Qgb2xkRGVzY2VuZGFudFByZWZpeCA9IGAke29sZEtleX0vYDtcbiAgICBjb25zdCBuZXdEZXNjZW5kYW50UHJlZml4ID0gYCR7bmV3S2V5fS9gO1xuICAgIGZvciAoY29uc3QgW2V4aXN0aW5nS2V5LCBleGlzdGluZ1ZhbHVlXSBvZiBzbmFwc2hvdCh0aGlzLm1hcCkpIHtcbiAgICAgIGlmICghZXhpc3RpbmdLZXkuc3RhcnRzV2l0aChvbGREZXNjZW5kYW50UHJlZml4KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGV4aXN0aW5nS2V5KTtcbiAgICAgIHRoaXMubWFwLnNldChuZXdEZXNjZW5kYW50UHJlZml4ICsgZXhpc3RpbmdLZXkuc2xpY2Uob2xkRGVzY2VuZGFudFByZWZpeC5sZW5ndGgpLCBleGlzdGluZ1ZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGluc3RhbGxlZCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXggZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiwgaWYgYW55LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hvc2UgaW5kZXggdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyBUaGUgaW5kZXggaWYgb25lIGlzIGluc3RhbGxlZCBmb3IgdGhpcyBhcHBsaWNhdGlvbiwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChhcHA6IEFwcCk6IENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB8IG51bGwge1xuICBjb25zdCBpbmRleCA9IGdldE9ic2lkaWFuTGliU3RhdGU8Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbD4oU1RBVEVfS0VZLCBudWxsKS52YWx1ZTtcbiAgcmV0dXJuIGluZGV4Py5vd25zQXBwKGFwcCkgPyBpbmRleCA6IG51bGw7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXggYXMgdGhlIGFjdGl2ZSByZXNvbHZlci5cbiAqXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggdG8gaW5zdGFsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChpbmRleDogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KTogdm9pZCB7XG4gIGdldE9ic2lkaWFuTGliU3RhdGU8Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbD4oU1RBVEVfS0VZLCBudWxsKS52YWx1ZSA9IGluZGV4O1xufVxuXG4vKipcbiAqIFVuaW5zdGFsbHMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXgsIGJ1dCBvbmx5IGlmIGl0IGlzIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIG9uZS5cbiAqXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggdG8gdW5pbnN0YWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoaW5kZXg6IENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCk6IHZvaWQge1xuICBjb25zdCB3cmFwcGVyID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpO1xuICBpZiAod3JhcHBlci52YWx1ZSA9PT0gaW5kZXgpIHtcbiAgICB3cmFwcGVyLnZhbHVlID0gbnVsbDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JBLG1CQUF5QjtBQUV6QixnQ0FBb0M7QUFFcEMsTUFBTSxZQUFZO0FBUVgsTUFBTSx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRN0IsWUFBK0IsS0FBVTtBQUFWO0FBQUEsRUFBVztBQUFBLEVBQVg7QUFBQSxFQVByQixNQUFNLG9CQUFJLElBQTJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYy9DLElBQUksY0FBbUM7QUFDNUMsU0FBSyxJQUFJLElBQUksYUFBYSxLQUFLLFlBQVksR0FBRyxZQUFZO0FBQUEsRUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sTUFBb0I7QUFDaEMsVUFBTSxNQUFNLEtBQUssWUFBWTtBQUM3QixTQUFLLElBQUksT0FBTyxHQUFHO0FBQ25CLFVBQU0sbUJBQW1CLEdBQUcsR0FBRztBQUMvQixlQUFXLG1CQUFlLHVCQUFTLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRztBQUNuRCxVQUFJLFlBQVksV0FBVyxnQkFBZ0IsR0FBRztBQUM1QyxhQUFLLElBQUksT0FBTyxXQUFXO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sSUFBSSxNQUFvQztBQUM3QyxXQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUs7QUFBQSxFQUM3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sUUFBUSxLQUFtQjtBQUNoQyxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYU8sT0FBTyxTQUFpQixpQkFBc0M7QUFDbkUsVUFBTSxTQUFTLFFBQVEsWUFBWTtBQUNuQyxVQUFNLFNBQVMsZ0JBQWdCLEtBQUssWUFBWTtBQUNoRCxTQUFLLElBQUksT0FBTyxNQUFNO0FBQ3RCLFNBQUssSUFBSSxJQUFJLFFBQVEsZUFBZTtBQUVwQyxVQUFNLHNCQUFzQixHQUFHLE1BQU07QUFDckMsVUFBTSxzQkFBc0IsR0FBRyxNQUFNO0FBQ3JDLGVBQVcsQ0FBQyxhQUFhLGFBQWEsU0FBSyx1QkFBUyxLQUFLLEdBQUcsR0FBRztBQUM3RCxVQUFJLENBQUMsWUFBWSxXQUFXLG1CQUFtQixHQUFHO0FBQ2hEO0FBQUEsTUFDRjtBQUVBLFdBQUssSUFBSSxPQUFPLFdBQVc7QUFDM0IsV0FBSyxJQUFJLElBQUksc0JBQXNCLFlBQVksTUFBTSxvQkFBb0IsTUFBTSxHQUFHLGFBQWE7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFDRjtBQVFPLFNBQVMsNEJBQTRCLEtBQTJDO0FBQ3JGLFFBQU0sWUFBUSwrQ0FBcUQsV0FBVyxJQUFJLEVBQUU7QUFDcEYsU0FBTyxPQUFPLFFBQVEsR0FBRyxJQUFJLFFBQVE7QUFDdkM7QUFPTyxTQUFTLDRCQUE0QixPQUF1QztBQUNqRixxREFBcUQsV0FBVyxJQUFJLEVBQUUsUUFBUTtBQUNoRjtBQU9PLFNBQVMsOEJBQThCLE9BQXVDO0FBQ25GLFFBQU0sY0FBVSwrQ0FBcUQsV0FBVyxJQUFJO0FBQ3BGLE1BQUksUUFBUSxVQUFVLE9BQU87QUFDM0IsWUFBUSxRQUFRO0FBQUEsRUFDbEI7QUFDRjsiLCJuYW1lcyI6W119
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIGFuIG9wdC1pbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgcmVzb2x2ZXIgZm9yIE9ic2lkaWFuIHZhdWx0cy5cbiAqXG4gKiBPYnNpZGlhbidzIG5hdGl2ZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9WYXVsdCB8IFZhdWx0fSByZXNvbHZlc1xuICogYSBzdHJpbmcgcGF0aCBjYXNlLWluc2Vuc2l0aXZlbHkgKHRoZSBXaW5kb3dzL21hY09TIGRlZmF1bHQpIGluIE8oMSkgb24gYSBoaXQgYnV0IHdpdGggYW5cbiAqIE8odmF1bHQpIHNjYW4gb24gYSBtaXNzLiBUaGUgbWlzcyBjYXNlIGlzIHRoZSBob3Qgb25lIGR1cmluZyBkZWxldGlvbiBjYXNjYWRlcywgd2hlcmUgZXh0ZW5zaW9uXG4gKiBjaGVja3MgYW5kIGNhY2hlIGxvb2t1cHMgYXJlIHBlcmZvcm1lZCBvbiBhbHJlYWR5LXJlbW92ZWQgcGF0aHMuIFRoaXMgbW9kdWxlIGJhY2tzIHRoZVxuICogY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXAgd2l0aCBhIGBsb3dlcmNhc2UtcGF0aCDihpIgVEFic3RyYWN0RmlsZWAgaW5kZXggc28gbWlzc2VzIGFyZSBPKDEpIHRvby5cbiAqXG4gKiBUaGUgaW5kZXggaXMgZXhwbGljaXRseSBvcHQtaW46IGEgY29uc3VtZXIgaW5zdGFsbHMgaXQgYnkgbG9hZGluZyBhXG4gKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9Db21wb25lbnQgfCBDb21wb25lbnR9IHRoYXQga2VlcHMgaXQgaW5cbiAqIHN5bmMgd2l0aCBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCBldmVudHMgKHNlZSBgQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4Q29tcG9uZW50YCkuIFVudGlsIHRoZW4sXG4gKiB0aGUgcmVzb2x1dGlvbiBsYXllciBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgKE8odmF1bHQpLW9uLW1pc3MpIGxvb2t1cCwgc28gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXJyYXknO1xuaW1wb3J0IHsgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tbGliLXN0YXRlLnRzJztcblxuY29uc3QgU1RBVEVfS0VZID0gJ2Nhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCc7XG5cbi8qKlxuICogQW4gTygxKSBjYXNlLWluc2Vuc2l0aXZlIGluZGV4IG9mIHRoZSBsb2FkZWQgZmlsZXMgYW5kIGZvbGRlcnMgb2YgYSBzaW5nbGUgdmF1bHQuXG4gKlxuICogVGhlIGluZGV4IG1hcHMgdGhlIGxvd2VyY2FzZWQgcGF0aCBvZiBlYWNoIGFic3RyYWN0IGZpbGUgdG8gdGhlIGFic3RyYWN0IGZpbGUgaXRzZWxmLiBJdCBpcyBrZXB0XG4gKiBpbiBzeW5jIGJ5IGFuIG93bmluZyBjb21wb25lbnQgdGhhdCBmb3J3YXJkcyBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCB2YXVsdCBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUQWJzdHJhY3RGaWxlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSB2YXVsdCB0aGlzIGluZGV4IG1pcnJvcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFic3RyYWN0IGZpbGUgdG8gdGhlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZChhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5zZXQoYWJzdHJhY3RGaWxlLnBhdGgudG9Mb3dlckNhc2UoKSwgYWJzdHJhY3RGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBhYnN0cmFjdCBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGZyb20gdGhlIGluZGV4LCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgZGVzY2VuZGFudHNcbiAgICogKGZvciBmb2xkZXIgZGVsZXRpb25zLCB3aGVyZSBPYnNpZGlhbiByZW1vdmVzIHRoZSB3aG9sZSBzdWJ0cmVlKS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgYWJzdHJhY3QgZmlsZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhYnN0cmFjdEZpbGUgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAvLyBPbmx5IGEgZm9sZGVyIGhhcyBkZXNjZW5kYW50czsgc2Nhbm5pbmcgdGhlIHdob2xlIGluZGV4IGZvciBhIGZpbGUncyBtYWRlIGV2ZXJ5IGRlbGV0ZSBPKHZhdWx0KS5cbiAgICBpZiAoYWJzdHJhY3RGaWxlICYmICEoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVzY2VuZGFudFByZWZpeCA9IGAke2tleX0vYDtcbiAgICBmb3IgKGNvbnN0IGV4aXN0aW5nS2V5IG9mIHNuYXBzaG90KHRoaXMubWFwLmtleXMoKSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0tleS5zdGFydHNXaXRoKGRlc2NlbmRhbnRQcmVmaXgpKSB7XG4gICAgICAgIHRoaXMubWFwLmRlbGV0ZShleGlzdGluZ0tleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGFic3RyYWN0IGZpbGUgYnkgaXRzIHBhdGgsIGNhc2UtaW5zZW5zaXRpdmVseSwgaW4gTygxKS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byByZXNvbHZlLlxuICAgKiBAcmV0dXJucyBUaGUgYWJzdHJhY3QgZmlsZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICovXG4gIHB1YmxpYyBnZXQocGF0aDogc3RyaW5nKTogbnVsbCB8IFRBYnN0cmFjdEZpbGUge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXQocGF0aC50b0xvd2VyQ2FzZSgpKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgaW5kZXggbWlycm9ycyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24ncyB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBpbmRleCBiZWxvbmdzIHRvIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgb3duc0FwcChhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcCA9PT0gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWtleXMgYW4gYWJzdHJhY3QgZmlsZSAoYW5kLCBmb3IgZm9sZGVycywgYWxsIG9mIGl0cyBkZXNjZW5kYW50cykgYWZ0ZXIgYSByZW5hbWUuXG4gICAqXG4gICAqIE9ic2lkaWFuIGZpcmVzIGEgc2luZ2xlIGByZW5hbWVgIGV2ZW50IGZvciB0aGUgcmVuYW1lZCBhYnN0cmFjdCBmaWxlIGFuZCB1cGRhdGVzIGl0c1xuICAgKiBkZXNjZW5kYW50cycgcGF0aHMgaW4gcGxhY2Ugd2l0aG91dCBmaXJpbmcgcGVyLWRlc2NlbmRhbnQgZXZlbnRzLCBzbyBkZXNjZW5kYW50IGtleXMgYXJlXG4gICAqIHJlY29tcHV0ZWQgaGVyZSBieSBzd2FwcGluZyB0aGUgb2xkIHBhdGggcHJlZml4IGZvciB0aGUgbmV3IG9uZS4gSGFuZGxlcyBjYXNlLW9ubHkgcmVuYW1lcyAodGhlXG4gICAqIG9sZCBhbmQgbmV3IGtleXMgY29pbmNpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aCAtIFRoZSBwYXRoIHRoZSBhYnN0cmFjdCBmaWxlIGhhZCBiZWZvcmUgdGhlIHJlbmFtZS5cbiAgICogQHBhcmFtIG5ld0Fic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHdpdGggaXRzIHVwZGF0ZWQgKHBvc3QtcmVuYW1lKSBwYXRoLlxuICAgKi9cbiAgcHVibGljIHJlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld0Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IG9sZEtleSA9IG9sZFBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuZXdLZXkgPSBuZXdBYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubWFwLmRlbGV0ZShvbGRLZXkpO1xuICAgIHRoaXMubWFwLnNldChuZXdLZXksIG5ld0Fic3RyYWN0RmlsZSk7XG4gICAgLy8gT25seSBhIGZvbGRlciBoYXMgZGVzY2VuZGFudHM7IHNjYW5uaW5nIHRoZSB3aG9sZSBpbmRleCBmb3IgYSBmaWxlJ3MgbWFkZSBldmVyeSByZW5hbWUgTyh2YXVsdCkuXG4gICAgaWYgKCEobmV3QWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGREZXNjZW5kYW50UHJlZml4ID0gYCR7b2xkS2V5fS9gO1xuICAgIGNvbnN0IG5ld0Rlc2NlbmRhbnRQcmVmaXggPSBgJHtuZXdLZXl9L2A7XG4gICAgZm9yIChjb25zdCBbZXhpc3RpbmdLZXksIGV4aXN0aW5nVmFsdWVdIG9mIHNuYXBzaG90KHRoaXMubWFwKSkge1xuICAgICAgaWYgKCFleGlzdGluZ0tleS5zdGFydHNXaXRoKG9sZERlc2NlbmRhbnRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcC5kZWxldGUoZXhpc3RpbmdLZXkpO1xuICAgICAgdGhpcy5tYXAuc2V0KG5ld0Rlc2NlbmRhbnRQcmVmaXggKyBleGlzdGluZ0tleS5zbGljZShvbGREZXNjZW5kYW50UHJlZml4Lmxlbmd0aCksIGV4aXN0aW5nVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgaW5zdGFsbGVkIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uLCBpZiBhbnkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSBpbmRleCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBpZiBvbmUgaXMgaW5zdGFsbGVkIGZvciB0aGlzIGFwcGxpY2F0aW9uLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KGFwcDogQXBwKTogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbCB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpLnZhbHVlO1xuICByZXR1cm4gaW5kZXg/Lm93bnNBcHAoYXBwKSA/IGluZGV4IDogbnVsbDtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCBhcyB0aGUgYWN0aXZlIHJlc29sdmVyLlxuICpcbiAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCB0byBpbnN0YWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KGluZGV4OiBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgpOiB2b2lkIHtcbiAgZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpLnZhbHVlID0gaW5kZXg7XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCwgYnV0IG9ubHkgaWYgaXQgaXMgdGhlIGN1cnJlbnRseS1pbnN0YWxsZWQgb25lLlxuICpcbiAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCB0byB1bmluc3RhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChpbmRleDogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KTogdm9pZCB7XG4gIGNvbnN0IHdyYXBwZXIgPSBnZXRPYnNpZGlhbkxpYlN0YXRlPENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB8IG51bGw+KFNUQVRFX0tFWSwgbnVsbCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpbmRleCkge1xuICAgIHdyYXBwZXIudmFsdWUgPSBudWxsO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEsbUJBQXlCO0FBQ3pCLHNCQUF3QjtBQUV4QixnQ0FBb0M7QUFFcEMsTUFBTSxZQUFZO0FBUVgsTUFBTSx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRN0IsWUFBK0IsS0FBVTtBQUFWO0FBQUEsRUFBVztBQUFBLEVBQVg7QUFBQSxFQVByQixNQUFNLG9CQUFJLElBQTJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYy9DLElBQUksY0FBbUM7QUFDNUMsU0FBSyxJQUFJLElBQUksYUFBYSxLQUFLLFlBQVksR0FBRyxZQUFZO0FBQUEsRUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sTUFBb0I7QUFDaEMsVUFBTSxNQUFNLEtBQUssWUFBWTtBQUM3QixVQUFNLGVBQWUsS0FBSyxJQUFJLElBQUksR0FBRztBQUNyQyxTQUFLLElBQUksT0FBTyxHQUFHO0FBRW5CLFFBQUksZ0JBQWdCLEVBQUUsd0JBQXdCLDBCQUFVO0FBQ3REO0FBQUEsSUFDRjtBQUNBLFVBQU0sbUJBQW1CLEdBQUcsR0FBRztBQUMvQixlQUFXLG1CQUFlLHVCQUFTLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRztBQUNuRCxVQUFJLFlBQVksV0FBVyxnQkFBZ0IsR0FBRztBQUM1QyxhQUFLLElBQUksT0FBTyxXQUFXO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sSUFBSSxNQUFvQztBQUM3QyxXQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUs7QUFBQSxFQUM3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sUUFBUSxLQUFtQjtBQUNoQyxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYU8sT0FBTyxTQUFpQixpQkFBc0M7QUFDbkUsVUFBTSxTQUFTLFFBQVEsWUFBWTtBQUNuQyxVQUFNLFNBQVMsZ0JBQWdCLEtBQUssWUFBWTtBQUNoRCxTQUFLLElBQUksT0FBTyxNQUFNO0FBQ3RCLFNBQUssSUFBSSxJQUFJLFFBQVEsZUFBZTtBQUVwQyxRQUFJLEVBQUUsMkJBQTJCLDBCQUFVO0FBQ3pDO0FBQUEsSUFDRjtBQUVBLFVBQU0sc0JBQXNCLEdBQUcsTUFBTTtBQUNyQyxVQUFNLHNCQUFzQixHQUFHLE1BQU07QUFDckMsZUFBVyxDQUFDLGFBQWEsYUFBYSxTQUFLLHVCQUFTLEtBQUssR0FBRyxHQUFHO0FBQzdELFVBQUksQ0FBQyxZQUFZLFdBQVcsbUJBQW1CLEdBQUc7QUFDaEQ7QUFBQSxNQUNGO0FBRUEsV0FBSyxJQUFJLE9BQU8sV0FBVztBQUMzQixXQUFLLElBQUksSUFBSSxzQkFBc0IsWUFBWSxNQUFNLG9CQUFvQixNQUFNLEdBQUcsYUFBYTtBQUFBLElBQ2pHO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyw0QkFBNEIsS0FBMkM7QUFDckYsUUFBTSxZQUFRLCtDQUFxRCxXQUFXLElBQUksRUFBRTtBQUNwRixTQUFPLE9BQU8sUUFBUSxHQUFHLElBQUksUUFBUTtBQUN2QztBQU9PLFNBQVMsNEJBQTRCLE9BQXVDO0FBQ2pGLHFEQUFxRCxXQUFXLElBQUksRUFBRSxRQUFRO0FBQ2hGO0FBT08sU0FBUyw4QkFBOEIsT0FBdUM7QUFDbkYsUUFBTSxjQUFVLCtDQUFxRCxXQUFXLElBQUk7QUFDcEYsTUFBSSxRQUFRLFVBQVUsT0FBTztBQUMzQixZQUFRLFFBQVE7QUFBQSxFQUNsQjtBQUNGOyIsIm5hbWVzIjpbXX0=
|