@mnaoumov/obsidian-lib 10.10.0 → 10.12.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/README.md +26 -0
- package/components/all-windows-status-bar-item-component/package.json +6 -0
- package/components/shared-component-pool-component/package.json +6 -0
- package/components/workspace-layout-state-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +90 -1
- package/dist/lib/cjs/__merged.d.cts +13 -4
- package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
- package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
- package/dist/lib/cjs/bug-report.cjs +36 -10
- package/dist/lib/cjs/bug-report.d.cts +65 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
- package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
- package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
- package/dist/lib/cjs/components/index.cjs +12 -3
- package/dist/lib/cjs/components/index.d.cts +3 -0
- package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
- package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
- package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
- package/dist/lib/cjs/css-class.cjs +5 -1
- package/dist/lib/cjs/css-class.d.cts +16 -0
- package/dist/lib/cjs/data-handler.cjs +156 -5
- package/dist/lib/cjs/data-handler.d.cts +128 -2
- package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
- package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/git-rename-history.cjs +1 -1
- package/dist/lib/cjs/git-rename-history.d.cts +2 -2
- package/dist/lib/cjs/i18n/locales/en.cjs +29 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +28 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +28 -0
- package/dist/lib/cjs/index.cjs +10 -1
- package/dist/lib/cjs/index.d.cts +3 -0
- package/dist/lib/cjs/link.cjs +40 -1
- package/dist/lib/cjs/link.d.cts +37 -1
- package/dist/lib/cjs/markdown-view.cjs +191 -3
- package/dist/lib/cjs/markdown-view.d.cts +48 -1
- package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
- package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
- package/dist/lib/cjs/modals/index.cjs +7 -1
- package/dist/lib/cjs/modals/index.d.cts +2 -0
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
- package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
- package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
- package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
- package/dist/lib/cjs/plugin/plugin.cjs +16 -1
- package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
- package/dist/lib/cjs/reference-definition.cjs +234 -0
- package/dist/lib/cjs/reference-definition.d.cts +47 -0
- package/dist/lib/cjs/release-asset.cjs +279 -0
- package/dist/lib/cjs/release-asset.d.cts +190 -0
- package/dist/lib/cjs/workspace.cjs +3 -2
- package/dist/lib/cjs/workspace.d.cts +6 -0
- package/dist/lib/esm/__merged.d.mts +13 -4
- package/dist/lib/esm/__merged.mjs +97 -3
- package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
- package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
- package/dist/lib/esm/bug-report.d.mts +65 -0
- package/dist/lib/esm/bug-report.mjs +33 -10
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
- package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
- package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
- package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
- package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
- package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
- package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
- package/dist/lib/esm/components/index.d.mts +3 -0
- package/dist/lib/esm/components/index.mjs +8 -2
- package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
- package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
- package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
- package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
- package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
- package/dist/lib/esm/css-class.d.mts +16 -0
- package/dist/lib/esm/css-class.mjs +5 -1
- package/dist/lib/esm/data-handler.d.mts +128 -2
- package/dist/lib/esm/data-handler.mjs +152 -4
- package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
- package/dist/lib/esm/desktop-git-runner.mjs +3 -3
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/git-rename-history.d.mts +2 -2
- package/dist/lib/esm/git-rename-history.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +28 -0
- package/dist/lib/esm/i18n/locales/en.mjs +29 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +28 -0
- package/dist/lib/esm/index.d.mts +3 -0
- package/dist/lib/esm/index.mjs +7 -1
- package/dist/lib/esm/link.d.mts +37 -1
- package/dist/lib/esm/link.mjs +40 -1
- package/dist/lib/esm/markdown-view.d.mts +48 -1
- package/dist/lib/esm/markdown-view.mjs +192 -2
- package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
- package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
- package/dist/lib/esm/modals/index.d.mts +2 -0
- package/dist/lib/esm/modals/index.mjs +5 -1
- package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
- package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
- package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
- package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
- package/dist/lib/esm/plugin/plugin.d.mts +7 -0
- package/dist/lib/esm/plugin/plugin.mjs +16 -1
- package/dist/lib/esm/reference-definition.d.mts +47 -0
- package/dist/lib/esm/reference-definition.mjs +146 -0
- package/dist/lib/esm/release-asset.d.mts +190 -0
- package/dist/lib/esm/release-asset.mjs +187 -0
- package/dist/lib/esm/workspace.d.mts +6 -0
- package/dist/lib/esm/workspace.mjs +3 -2
- package/dist/styles.css +16 -1
- package/modals/copy-text-manually/package.json +6 -0
- package/modals/review-bug-report-diagnostics/package.json +6 -0
- package/package.json +2 -1
- package/plugin/plugin-instance/package.json +6 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Optional diagnostics a plugin can attach to a bug report: sections of text the user reviews before
|
|
6
|
+
* anything leaves Obsidian, a bounded log buffer, and redaction of a plugin's own settings.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here reads logs or settings by itself. A log buffer holds only what the plugin wrote to it since
|
|
9
|
+
* the buffer was created, never the console's history, and a settings section holds only the object the
|
|
10
|
+
* plugin hands over. Redaction replaces the values of caller-declared keys; it is not a promise to find
|
|
11
|
+
* every secret, which is why every section is shown to the user, and a potentially private one is left
|
|
12
|
+
* out unless the user includes it.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* A section of diagnostics for a bug report.
|
|
16
|
+
*/
|
|
17
|
+
export interface BugReportDiagnosticSection {
|
|
18
|
+
/**
|
|
19
|
+
* The section's text, shown to the user and sent as written.
|
|
20
|
+
*/
|
|
21
|
+
readonly content: string;
|
|
22
|
+
/**
|
|
23
|
+
* A stable id, unique among the sections of one report.
|
|
24
|
+
*/
|
|
25
|
+
readonly id: string;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the section can hold private data, such as logs or settings. A potentially private section is
|
|
28
|
+
* left out of the report unless the user includes it.
|
|
29
|
+
*
|
|
30
|
+
* @default `false`
|
|
31
|
+
*/
|
|
32
|
+
readonly isPotentiallyPrivate?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* The section's title.
|
|
35
|
+
*/
|
|
36
|
+
readonly title: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Constructor parameters for {@link BugReportLogBuffer}.
|
|
40
|
+
*/
|
|
41
|
+
export interface BugReportLogBufferConstructorOptions {
|
|
42
|
+
/**
|
|
43
|
+
* The most entries kept. Older entries are dropped first.
|
|
44
|
+
*
|
|
45
|
+
* @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES}
|
|
46
|
+
*/
|
|
47
|
+
readonly maxEntries?: number;
|
|
48
|
+
/**
|
|
49
|
+
* The most characters kept of one entry. A longer entry is cut, and says so.
|
|
50
|
+
*
|
|
51
|
+
* @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH}
|
|
52
|
+
*/
|
|
53
|
+
readonly maxEntryLength?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Gets the current time. For tests.
|
|
56
|
+
*
|
|
57
|
+
* @default `() => new Date()`
|
|
58
|
+
*/
|
|
59
|
+
readonly now?: () => Date;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Parameters for {@link BugReportLogBuffer.toSection}.
|
|
63
|
+
*/
|
|
64
|
+
export interface BugReportLogBufferToSectionOptions {
|
|
65
|
+
/**
|
|
66
|
+
* The section's id.
|
|
67
|
+
*
|
|
68
|
+
* @default `'logs'`
|
|
69
|
+
*/
|
|
70
|
+
readonly id?: string;
|
|
71
|
+
/**
|
|
72
|
+
* The section's title.
|
|
73
|
+
*
|
|
74
|
+
* @default `'Logs'`
|
|
75
|
+
*/
|
|
76
|
+
readonly title?: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parameters for {@link createSettingsDiagnosticSection}.
|
|
80
|
+
*/
|
|
81
|
+
export interface CreateSettingsDiagnosticSectionParams {
|
|
82
|
+
/**
|
|
83
|
+
* The section's id.
|
|
84
|
+
*
|
|
85
|
+
* @default `'settings'`
|
|
86
|
+
*/
|
|
87
|
+
readonly id?: string;
|
|
88
|
+
/**
|
|
89
|
+
* The keys whose values are replaced with {@link REDACTED_VALUE}, at any depth, compared without case.
|
|
90
|
+
*/
|
|
91
|
+
readonly secretKeys?: readonly string[];
|
|
92
|
+
/**
|
|
93
|
+
* The reporting plugin's own settings, such as its `data.json`.
|
|
94
|
+
*/
|
|
95
|
+
readonly settings: unknown;
|
|
96
|
+
/**
|
|
97
|
+
* The section's title.
|
|
98
|
+
*
|
|
99
|
+
* @default `'Plugin settings'`
|
|
100
|
+
*/
|
|
101
|
+
readonly title?: string;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The value that replaces a redacted setting.
|
|
105
|
+
*/
|
|
106
|
+
export declare const REDACTED_VALUE = "[redacted]";
|
|
107
|
+
/**
|
|
108
|
+
* The default number of entries a {@link BugReportLogBuffer} keeps.
|
|
109
|
+
*/
|
|
110
|
+
export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
|
|
111
|
+
/**
|
|
112
|
+
* The default number of characters a {@link BugReportLogBuffer} keeps of one entry.
|
|
113
|
+
*/
|
|
114
|
+
export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2000;
|
|
115
|
+
/**
|
|
116
|
+
* A bounded buffer of log entries a plugin writes for its bug reports. It keeps only what the plugin adds
|
|
117
|
+
* after creating it, at most {@link BugReportLogBufferConstructorOptions.maxEntries} entries, each cut to
|
|
118
|
+
* {@link BugReportLogBufferConstructorOptions.maxEntryLength} characters.
|
|
119
|
+
*/
|
|
120
|
+
export declare class BugReportLogBuffer {
|
|
121
|
+
private readonly entries;
|
|
122
|
+
private readonly maxEntries;
|
|
123
|
+
private readonly maxEntryLength;
|
|
124
|
+
private readonly now;
|
|
125
|
+
/**
|
|
126
|
+
* Constructs a new instance.
|
|
127
|
+
*
|
|
128
|
+
* @param options - Constructor options.
|
|
129
|
+
*/
|
|
130
|
+
constructor(options?: BugReportLogBufferConstructorOptions);
|
|
131
|
+
/**
|
|
132
|
+
* Adds an entry, stamped with the current time.
|
|
133
|
+
*
|
|
134
|
+
* @param message - The entry's text.
|
|
135
|
+
*/
|
|
136
|
+
add(message: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Removes every entry.
|
|
139
|
+
*/
|
|
140
|
+
clear(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Gets the entries, oldest first.
|
|
143
|
+
*
|
|
144
|
+
* @returns The entries.
|
|
145
|
+
*/
|
|
146
|
+
getEntries(): readonly string[];
|
|
147
|
+
/**
|
|
148
|
+
* Builds a potentially private diagnostic section holding the entries.
|
|
149
|
+
*
|
|
150
|
+
* @param options - The options.
|
|
151
|
+
* @returns The section.
|
|
152
|
+
*/
|
|
153
|
+
toSection(options?: BugReportLogBufferToSectionOptions): BugReportDiagnosticSection;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Builds a potentially private diagnostic section holding the plugin's settings as JSON, with the values
|
|
157
|
+
* of {@link CreateSettingsDiagnosticSectionParams.secretKeys} redacted.
|
|
158
|
+
*
|
|
159
|
+
* @param params - The parameters.
|
|
160
|
+
* @returns The section.
|
|
161
|
+
*/
|
|
162
|
+
export declare function createSettingsDiagnosticSection(params: CreateSettingsDiagnosticSectionParams): BugReportDiagnosticSection;
|
|
163
|
+
/**
|
|
164
|
+
* Renders diagnostic sections as Markdown: a level-3 heading and a fenced code block per section. The
|
|
165
|
+
* fence is longer than any run of backticks in the content, so no content can close it.
|
|
166
|
+
*
|
|
167
|
+
* @param sections - The sections.
|
|
168
|
+
* @returns The Markdown, or an empty string when there are no sections.
|
|
169
|
+
*/
|
|
170
|
+
export declare function formatBugReportDiagnostics(sections: readonly BugReportDiagnosticSection[]): string;
|
|
171
|
+
/**
|
|
172
|
+
* Gets a Markdown code fence that the given content cannot close.
|
|
173
|
+
*
|
|
174
|
+
* @param content - The content to fence.
|
|
175
|
+
* @returns A run of backticks longer than the longest run in the content, and at least three long.
|
|
176
|
+
*/
|
|
177
|
+
export declare function getMarkdownFence(content: string): string;
|
|
178
|
+
/**
|
|
179
|
+
* Copies settings, replacing the value of every key in `secretKeys`, at any depth and compared without
|
|
180
|
+
* case, with {@link REDACTED_VALUE}. The original is not changed.
|
|
181
|
+
*
|
|
182
|
+
* @param settings - The settings.
|
|
183
|
+
* @param secretKeys - The keys to redact.
|
|
184
|
+
* @returns The redacted copy.
|
|
185
|
+
*/
|
|
186
|
+
export declare function redactSettings(settings: unknown, secretKeys: readonly string[]): unknown;
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
const REDACTED_VALUE = "[redacted]";
|
|
7
|
+
const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
|
|
8
|
+
const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2e3;
|
|
9
|
+
const JSON_INDENT = 2;
|
|
10
|
+
const MIN_FENCE_LENGTH = 3;
|
|
11
|
+
const TRUNCATION_MARKER = " [truncated]";
|
|
12
|
+
class BugReportLogBuffer {
|
|
13
|
+
entries = [];
|
|
14
|
+
maxEntries;
|
|
15
|
+
maxEntryLength;
|
|
16
|
+
now;
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new instance.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Constructor options.
|
|
21
|
+
*/
|
|
22
|
+
constructor(options = {}) {
|
|
23
|
+
this.maxEntries = Math.max(1, Math.floor(options.maxEntries ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES));
|
|
24
|
+
this.maxEntryLength = Math.max(1, Math.floor(options.maxEntryLength ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH));
|
|
25
|
+
this.now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Adds an entry, stamped with the current time.
|
|
29
|
+
*
|
|
30
|
+
* @param message - The entry's text.
|
|
31
|
+
*/
|
|
32
|
+
add(message) {
|
|
33
|
+
const text = message.length > this.maxEntryLength ? message.slice(0, this.maxEntryLength) + TRUNCATION_MARKER : message;
|
|
34
|
+
this.entries.push(`${this.now().toISOString()} ${text}`);
|
|
35
|
+
if (this.entries.length > this.maxEntries) {
|
|
36
|
+
this.entries.splice(0, this.entries.length - this.maxEntries);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Removes every entry.
|
|
41
|
+
*/
|
|
42
|
+
clear() {
|
|
43
|
+
this.entries.length = 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Gets the entries, oldest first.
|
|
47
|
+
*
|
|
48
|
+
* @returns The entries.
|
|
49
|
+
*/
|
|
50
|
+
getEntries() {
|
|
51
|
+
return [...this.entries];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Builds a potentially private diagnostic section holding the entries.
|
|
55
|
+
*
|
|
56
|
+
* @param options - The options.
|
|
57
|
+
* @returns The section.
|
|
58
|
+
*/
|
|
59
|
+
toSection(options = {}) {
|
|
60
|
+
return {
|
|
61
|
+
content: this.entries.length === 0 ? "(no log entries)" : this.entries.join("\n"),
|
|
62
|
+
id: options.id ?? "logs",
|
|
63
|
+
isPotentiallyPrivate: true,
|
|
64
|
+
title: options.title ?? "Logs"
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function createSettingsDiagnosticSection(params) {
|
|
69
|
+
return {
|
|
70
|
+
content: JSON.stringify(redactSettings(params.settings, params.secretKeys ?? []), null, JSON_INDENT) ?? "undefined",
|
|
71
|
+
id: params.id ?? "settings",
|
|
72
|
+
isPotentiallyPrivate: true,
|
|
73
|
+
title: params.title ?? "Plugin settings"
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function formatBugReportDiagnostics(sections) {
|
|
77
|
+
return sections.map((section) => {
|
|
78
|
+
const fence = getMarkdownFence(section.content);
|
|
79
|
+
return `### ${section.title}
|
|
80
|
+
|
|
81
|
+
${fence}
|
|
82
|
+
${section.content}
|
|
83
|
+
${fence}`;
|
|
84
|
+
}).join("\n\n");
|
|
85
|
+
}
|
|
86
|
+
function getMarkdownFence(content) {
|
|
87
|
+
let longestRun = 0;
|
|
88
|
+
for (const match of content.matchAll(/`+/g)) {
|
|
89
|
+
longestRun = Math.max(longestRun, match[0].length);
|
|
90
|
+
}
|
|
91
|
+
return "`".repeat(Math.max(MIN_FENCE_LENGTH, longestRun + 1));
|
|
92
|
+
}
|
|
93
|
+
function redactSettings(settings, secretKeys) {
|
|
94
|
+
const lowerCaseSecretKeys = new Set(secretKeys.map((key) => key.toLowerCase()));
|
|
95
|
+
return redactValue(settings, lowerCaseSecretKeys, /* @__PURE__ */ new WeakSet());
|
|
96
|
+
}
|
|
97
|
+
function redactValue(value, lowerCaseSecretKeys, seen) {
|
|
98
|
+
if (typeof value !== "object" || value === null) {
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
if (seen.has(value)) {
|
|
102
|
+
return "[circular]";
|
|
103
|
+
}
|
|
104
|
+
seen.add(value);
|
|
105
|
+
if (Array.isArray(value)) {
|
|
106
|
+
const result2 = value.map((item) => redactValue(item, lowerCaseSecretKeys, seen));
|
|
107
|
+
seen.delete(value);
|
|
108
|
+
return result2;
|
|
109
|
+
}
|
|
110
|
+
const result = {};
|
|
111
|
+
for (const [key, child] of Object.entries(value)) {
|
|
112
|
+
result[key] = lowerCaseSecretKeys.has(key.toLowerCase()) ? REDACTED_VALUE : redactValue(child, lowerCaseSecretKeys, seen);
|
|
113
|
+
}
|
|
114
|
+
seen.delete(value);
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
BugReportLogBuffer,
|
|
119
|
+
DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES,
|
|
120
|
+
DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH,
|
|
121
|
+
REDACTED_VALUE,
|
|
122
|
+
createSettingsDiagnosticSection,
|
|
123
|
+
formatBugReportDiagnostics,
|
|
124
|
+
getMarkdownFence,
|
|
125
|
+
redactSettings
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPcHRpb25hbCBkaWFnbm9zdGljcyBhIHBsdWdpbiBjYW4gYXR0YWNoIHRvIGEgYnVnIHJlcG9ydDogc2VjdGlvbnMgb2YgdGV4dCB0aGUgdXNlciByZXZpZXdzIGJlZm9yZVxuICogYW55dGhpbmcgbGVhdmVzIE9ic2lkaWFuLCBhIGJvdW5kZWQgbG9nIGJ1ZmZlciwgYW5kIHJlZGFjdGlvbiBvZiBhIHBsdWdpbidzIG93biBzZXR0aW5ncy5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgcmVhZHMgbG9ncyBvciBzZXR0aW5ncyBieSBpdHNlbGYuIEEgbG9nIGJ1ZmZlciBob2xkcyBvbmx5IHdoYXQgdGhlIHBsdWdpbiB3cm90ZSB0byBpdCBzaW5jZVxuICogdGhlIGJ1ZmZlciB3YXMgY3JlYXRlZCwgbmV2ZXIgdGhlIGNvbnNvbGUncyBoaXN0b3J5LCBhbmQgYSBzZXR0aW5ncyBzZWN0aW9uIGhvbGRzIG9ubHkgdGhlIG9iamVjdCB0aGVcbiAqIHBsdWdpbiBoYW5kcyBvdmVyLiBSZWRhY3Rpb24gcmVwbGFjZXMgdGhlIHZhbHVlcyBvZiBjYWxsZXItZGVjbGFyZWQga2V5czsgaXQgaXMgbm90IGEgcHJvbWlzZSB0byBmaW5kXG4gKiBldmVyeSBzZWNyZXQsIHdoaWNoIGlzIHdoeSBldmVyeSBzZWN0aW9uIGlzIHNob3duIHRvIHRoZSB1c2VyLCBhbmQgYSBwb3RlbnRpYWxseSBwcml2YXRlIG9uZSBpcyBsZWZ0XG4gKiBvdXQgdW5sZXNzIHRoZSB1c2VyIGluY2x1ZGVzIGl0LlxuICovXG5cbi8qKlxuICogQSBzZWN0aW9uIG9mIGRpYWdub3N0aWNzIGZvciBhIGJ1ZyByZXBvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb24ge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0ZXh0LCBzaG93biB0byB0aGUgdXNlciBhbmQgc2VudCBhcyB3cml0dGVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YWJsZSBpZCwgdW5pcXVlIGFtb25nIHRoZSBzZWN0aW9ucyBvZiBvbmUgcmVwb3J0LlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VjdGlvbiBjYW4gaG9sZCBwcml2YXRlIGRhdGEsIHN1Y2ggYXMgbG9ncyBvciBzZXR0aW5ncy4gQSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb24gaXNcbiAgICogbGVmdCBvdXQgb2YgdGhlIHJlcG9ydCB1bmxlc3MgdGhlIHVzZXIgaW5jbHVkZXMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUG90ZW50aWFsbHlQcml2YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0TG9nQnVmZmVyQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3N0IGVudHJpZXMga2VwdC4gT2xkZXIgZW50cmllcyBhcmUgZHJvcHBlZCBmaXJzdC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVN9XG4gICAqL1xuICByZWFkb25seSBtYXhFbnRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBjaGFyYWN0ZXJzIGtlcHQgb2Ygb25lIGVudHJ5LiBBIGxvbmdlciBlbnRyeSBpcyBjdXQsIGFuZCBzYXlzIHNvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9CVUdfUkVQT1JUX0xPR19NQVhfRU5UUllfTEVOR1RIfVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZS4gRm9yIHRlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgKCkgPT4gbmV3IERhdGUoKWBcbiAgICovXG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IERhdGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlci50b1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsb2dzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbidzIHRpdGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ0xvZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdzZXR0aW5ncydgXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgd2hvc2UgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0sIGF0IGFueSBkZXB0aCwgY29tcGFyZWQgd2l0aG91dCBjYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0S2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIG93biBzZXR0aW5ncywgc3VjaCBhcyBpdHMgYGRhdGEuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gc2V0dGluZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgcmVwbGFjZXMgYSByZWRhY3RlZCBzZXR0aW5nLlxuICovXG5leHBvcnQgY29uc3QgUkVEQUNURURfVkFMVUUgPSAnW3JlZGFjdGVkXSc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMgPSAyMDA7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcyBvZiBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVR19SRVBPUlRfTE9HX01BWF9FTlRSWV9MRU5HVEggPSAyMDAwO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5jb25zdCBNSU5fRkVOQ0VfTEVOR1RIID0gMztcbmNvbnN0IFRSVU5DQVRJT05fTUFSS0VSID0gJyBbdHJ1bmNhdGVkXSc7XG5cbi8qKlxuICogQSBib3VuZGVkIGJ1ZmZlciBvZiBsb2cgZW50cmllcyBhIHBsdWdpbiB3cml0ZXMgZm9yIGl0cyBidWcgcmVwb3J0cy4gSXQga2VlcHMgb25seSB3aGF0IHRoZSBwbHVnaW4gYWRkc1xuICogYWZ0ZXIgY3JlYXRpbmcgaXQsIGF0IG1vc3Qge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyaWVzfSBlbnRyaWVzLCBlYWNoIGN1dCB0b1xuICoge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyeUxlbmd0aH0gY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Z1JlcG9ydExvZ0J1ZmZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhFbnRyaWVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBub3c6ICgpID0+IERhdGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWdSZXBvcnRMb2dCdWZmZXJDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubWF4RW50cmllcyA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iob3B0aW9ucy5tYXhFbnRyaWVzID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMpKTtcbiAgICB0aGlzLm1heEVudHJ5TGVuZ3RoID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihvcHRpb25zLm1heEVudHJ5TGVuZ3RoID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJZX0xFTkdUSCkpO1xuICAgIHRoaXMubm93ID0gb3B0aW9ucy5ub3cgPz8gKCgpOiBEYXRlID0+IG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW50cnksIHN0YW1wZWQgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlbnRyeSdzIHRleHQuXG4gICAqL1xuICBwdWJsaWMgYWRkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSBtZXNzYWdlLmxlbmd0aCA+IHRoaXMubWF4RW50cnlMZW5ndGhcbiAgICAgID8gbWVzc2FnZS5zbGljZSgwLCB0aGlzLm1heEVudHJ5TGVuZ3RoKSArIFRSVU5DQVRJT05fTUFSS0VSXG4gICAgICA6IG1lc3NhZ2U7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goYCR7dGhpcy5ub3coKS50b0lTT1N0cmluZygpfSAke3RleHR9YCk7XG4gICAgaWYgKHRoaXMuZW50cmllcy5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoMCwgdGhpcy5lbnRyaWVzLmxlbmd0aCAtIHRoaXMubWF4RW50cmllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXZlcnkgZW50cnkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZW50cmllcywgb2xkZXN0IGZpcnN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZW50cmllcy5cbiAgICovXG4gIHB1YmxpYyBnZXRFbnRyaWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcG90ZW50aWFsbHkgcHJpdmF0ZSBkaWFnbm9zdGljIHNlY3Rpb24gaG9sZGluZyB0aGUgZW50cmllcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgdG9TZWN0aW9uKG9wdGlvbnM6IEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMgPSB7fSk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogdGhpcy5lbnRyaWVzLmxlbmd0aCA9PT0gMCA/ICcobm8gbG9nIGVudHJpZXMpJyA6IHRoaXMuZW50cmllcy5qb2luKCdcXG4nKSxcbiAgICAgIGlkOiBvcHRpb25zLmlkID8/ICdsb2dzJyxcbiAgICAgIGlzUG90ZW50aWFsbHlQcml2YXRlOiB0cnVlLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPz8gJ0xvZ3MnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBvdGVudGlhbGx5IHByaXZhdGUgZGlhZ25vc3RpYyBzZWN0aW9uIGhvbGRpbmcgdGhlIHBsdWdpbidzIHNldHRpbmdzIGFzIEpTT04sIHdpdGggdGhlIHZhbHVlc1xuICogb2Yge0BsaW5rIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMuc2VjcmV0S2V5c30gcmVkYWN0ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR0aW5nc0RpYWdub3N0aWNTZWN0aW9uKHBhcmFtczogQ3JlYXRlU2V0dGluZ3NEaWFnbm9zdGljU2VjdGlvblBhcmFtcyk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShyZWRhY3RTZXR0aW5ncyhwYXJhbXMuc2V0dGluZ3MsIHBhcmFtcy5zZWNyZXRLZXlzID8/IFtdKSwgbnVsbCwgSlNPTl9JTkRFTlQpID8/ICd1bmRlZmluZWQnLFxuICAgIGlkOiBwYXJhbXMuaWQgPz8gJ3NldHRpbmdzJyxcbiAgICBpc1BvdGVudGlhbGx5UHJpdmF0ZTogdHJ1ZSxcbiAgICB0aXRsZTogcGFyYW1zLnRpdGxlID8/ICdQbHVnaW4gc2V0dGluZ3MnXG4gIH07XG59XG5cbi8qKlxuICogUmVuZGVycyBkaWFnbm9zdGljIHNlY3Rpb25zIGFzIE1hcmtkb3duOiBhIGxldmVsLTMgaGVhZGluZyBhbmQgYSBmZW5jZWQgY29kZSBibG9jayBwZXIgc2VjdGlvbi4gVGhlXG4gKiBmZW5jZSBpcyBsb25nZXIgdGhhbiBhbnkgcnVuIG9mIGJhY2t0aWNrcyBpbiB0aGUgY29udGVudCwgc28gbm8gY29udGVudCBjYW4gY2xvc2UgaXQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25zIC0gVGhlIHNlY3Rpb25zLlxuICogQHJldHVybnMgVGhlIE1hcmtkb3duLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGVyZSBhcmUgbm8gc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyhzZWN0aW9uczogcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXSk6IHN0cmluZyB7XG4gIHJldHVybiBzZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBjb25zdCBmZW5jZSA9IGdldE1hcmtkb3duRmVuY2Uoc2VjdGlvbi5jb250ZW50KTtcbiAgICByZXR1cm4gYCMjIyAke3NlY3Rpb24udGl0bGV9XFxuXFxuJHtmZW5jZX1cXG4ke3NlY3Rpb24uY29udGVudH1cXG4ke2ZlbmNlfWA7XG4gIH0pLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vKipcbiAqIEdldHMgYSBNYXJrZG93biBjb2RlIGZlbmNlIHRoYXQgdGhlIGdpdmVuIGNvbnRlbnQgY2Fubm90IGNsb3NlLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZmVuY2UuXG4gKiBAcmV0dXJucyBBIHJ1biBvZiBiYWNrdGlja3MgbG9uZ2VyIHRoYW4gdGhlIGxvbmdlc3QgcnVuIGluIHRoZSBjb250ZW50LCBhbmQgYXQgbGVhc3QgdGhyZWUgbG9uZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmVuY2UoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGxvbmdlc3RSdW4gPSAwO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbnRlbnQubWF0Y2hBbGwoL2ArL2cpKSB7XG4gICAgbG9uZ2VzdFJ1biA9IE1hdGgubWF4KGxvbmdlc3RSdW4sIG1hdGNoWzBdLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuICdgJy5yZXBlYXQoTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbG9uZ2VzdFJ1biArIDEpKTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgc2V0dGluZ3MsIHJlcGxhY2luZyB0aGUgdmFsdWUgb2YgZXZlcnkga2V5IGluIGBzZWNyZXRLZXlzYCwgYXQgYW55IGRlcHRoIGFuZCBjb21wYXJlZCB3aXRob3V0XG4gKiBjYXNlLCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0uIFRoZSBvcmlnaW5hbCBpcyBub3QgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gc2VjcmV0S2V5cyAtIFRoZSBrZXlzIHRvIHJlZGFjdC5cbiAqIEByZXR1cm5zIFRoZSByZWRhY3RlZCBjb3B5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0U2V0dGluZ3Moc2V0dGluZ3M6IHVua25vd24sIHNlY3JldEtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGxvd2VyQ2FzZVNlY3JldEtleXMgPSBuZXcgU2V0KHNlY3JldEtleXMubWFwKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gIHJldHVybiByZWRhY3RWYWx1ZShzZXR0aW5ncywgbG93ZXJDYXNlU2VjcmV0S2V5cywgbmV3IFdlYWtTZXQoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdFZhbHVlKHZhbHVlOiB1bmtub3duLCBsb3dlckNhc2VTZWNyZXRLZXlzOiBSZWFkb25seVNldDxzdHJpbmc+LCBzZWVuOiBXZWFrU2V0PG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuICdbY2lyY3VsYXJdJztcbiAgfVxuICBzZWVuLmFkZCh2YWx1ZSk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUubWFwKChpdGVtOiB1bmtub3duKSA9PiByZWRhY3RWYWx1ZShpdGVtLCBsb3dlckNhc2VTZWNyZXRLZXlzLCBzZWVuKSk7XG4gICAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIHJlc3VsdFtrZXldID0gbG93ZXJDYXNlU2VjcmV0S2V5cy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpID8gUkVEQUNURURfVkFMVUUgOiByZWRhY3RWYWx1ZShjaGlsZCwgbG93ZXJDYXNlU2VjcmV0S2V5cywgc2Vlbik7XG4gIH1cbiAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFzSE8sTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxxQ0FBcUM7QUFLM0MsTUFBTSwwQ0FBMEM7QUFFdkQsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sb0JBQW9CO0FBT25CLE1BQU0sbUJBQW1CO0FBQUEsRUFDYixVQUFvQixDQUFDO0FBQUEsRUFDckI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVks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
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* structurally here, and reads as `unknown` if a later version drops it.
|
|
14
14
|
*/
|
|
15
15
|
import type { App } from 'obsidian';
|
|
16
|
+
import type { BugReportDiagnosticSection } from './bug-report-diagnostics.mjs';
|
|
16
17
|
/**
|
|
17
18
|
* The ids of the bug-report issue form's fields that {@link getBugReportIssueFormUrl} prefills. GitHub
|
|
18
19
|
* prefills a field from a query parameter named after the field's `id`, so a form must give its fields
|
|
@@ -40,6 +41,59 @@ export declare enum BugReportIssueFormFieldId {
|
|
|
40
41
|
* The file name of the bug-report issue form, under `.github/ISSUE_TEMPLATE`.
|
|
41
42
|
*/
|
|
42
43
|
export declare const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
|
|
44
|
+
/**
|
|
45
|
+
* The default budget, in characters of the encoded URL, of a prefilled bug-report link.
|
|
46
|
+
*
|
|
47
|
+
* Measured against `github.com` on 2026-11-07, signed out: an issue-form URL up to about 6,540 characters
|
|
48
|
+
* was answered with the usual redirect to the form, about 8,088 with a 502, and 8,288 and more with a 414.
|
|
49
|
+
* 6,000 leaves room for a longer repository name and for a signed-in session's own limits.
|
|
50
|
+
*/
|
|
51
|
+
export declare const DEFAULT_BUG_REPORT_MAX_URL_LENGTH = 6000;
|
|
52
|
+
/**
|
|
53
|
+
* A link to a bug-report issue form, as {@link buildBugReportIssueFormLink} builds it.
|
|
54
|
+
*/
|
|
55
|
+
export interface BugReportIssueFormLink {
|
|
56
|
+
/**
|
|
57
|
+
* The text the user must paste into the form's environment field, when the full report did not fit the
|
|
58
|
+
* URL budget; `null` when the URL carries the whole report.
|
|
59
|
+
*/
|
|
60
|
+
readonly clipboardText: null | string;
|
|
61
|
+
/**
|
|
62
|
+
* The link.
|
|
63
|
+
*/
|
|
64
|
+
readonly url: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parameters for {@link buildBugReportIssueFormLink}.
|
|
68
|
+
*/
|
|
69
|
+
export interface BuildBugReportIssueFormLinkParams {
|
|
70
|
+
/**
|
|
71
|
+
* The diagnostics the user agreed to include, appended to the environment field.
|
|
72
|
+
*/
|
|
73
|
+
readonly diagnostics?: readonly BugReportDiagnosticSection[];
|
|
74
|
+
/**
|
|
75
|
+
* The environment, from {@link getBugReportEnvironment}.
|
|
76
|
+
*/
|
|
77
|
+
readonly environment: BugReportEnvironment;
|
|
78
|
+
/**
|
|
79
|
+
* The plugin's GitHub repository, as `owner/name`.
|
|
80
|
+
*/
|
|
81
|
+
readonly gitHubRepo: string;
|
|
82
|
+
/**
|
|
83
|
+
* The most characters the encoded URL may have before the report moves to the clipboard.
|
|
84
|
+
*
|
|
85
|
+
* @default {@link DEFAULT_BUG_REPORT_MAX_URL_LENGTH}
|
|
86
|
+
*/
|
|
87
|
+
readonly maxUrlLength?: number;
|
|
88
|
+
/**
|
|
89
|
+
* The issue's title. Leave it out to keep the form's own default title.
|
|
90
|
+
*/
|
|
91
|
+
readonly title?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The text the environment field holds when the report moved to the clipboard.
|
|
95
|
+
*/
|
|
96
|
+
export declare const BUG_REPORT_PASTE_INSTRUCTIONS = "The full environment and diagnostics were copied to your clipboard because they are too long for a link. Replace this text by pasting them here.";
|
|
43
97
|
/**
|
|
44
98
|
* The environment a bug report needs.
|
|
45
99
|
*/
|
|
@@ -129,6 +183,17 @@ export interface GetGitHubIssueFormUrlParams {
|
|
|
129
183
|
*/
|
|
130
184
|
readonly title?: string;
|
|
131
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Builds a link to a plugin's bug-report issue form, prefilled with the environment and the given
|
|
188
|
+
* diagnostics. When the encoded link would be longer than
|
|
189
|
+
* {@link BuildBugReportIssueFormLinkParams.maxUrlLength}, the environment field gets
|
|
190
|
+
* {@link BUG_REPORT_PASTE_INSTRUCTIONS} instead, and the full text is returned as
|
|
191
|
+
* {@link BugReportIssueFormLink.clipboardText} for the caller to copy. Nothing is cut.
|
|
192
|
+
*
|
|
193
|
+
* @param params - The parameters.
|
|
194
|
+
* @returns The link, and the text to paste when it did not fit.
|
|
195
|
+
*/
|
|
196
|
+
export declare function buildBugReportIssueFormLink(params: BuildBugReportIssueFormLinkParams): BugReportIssueFormLink;
|
|
132
197
|
/**
|
|
133
198
|
* Renders a bug report's environment as a Markdown list.
|
|
134
199
|
*
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
apiVersion,
|
|
35
35
|
Platform
|
|
36
36
|
} from "obsidian";
|
|
37
|
+
import { formatBugReportDiagnostics } from "./bug-report-diagnostics.mjs";
|
|
37
38
|
import { getMobileAppInfo } from "./mobile-app-info.mjs";
|
|
38
39
|
var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) => {
|
|
39
40
|
BugReportIssueFormFieldId2["Environment"] = "environment";
|
|
@@ -43,7 +44,31 @@ var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) =>
|
|
|
43
44
|
return BugReportIssueFormFieldId2;
|
|
44
45
|
})(BugReportIssueFormFieldId || {});
|
|
45
46
|
const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
|
|
47
|
+
const DEFAULT_BUG_REPORT_MAX_URL_LENGTH = 6e3;
|
|
48
|
+
const BUG_REPORT_PASTE_INSTRUCTIONS = "The full environment and diagnostics were copied to your clipboard because they are too long for a link. Replace this text by pasting them here.";
|
|
46
49
|
const UNKNOWN = "unknown";
|
|
50
|
+
function buildBugReportIssueFormLink(params) {
|
|
51
|
+
const { environment } = params;
|
|
52
|
+
const diagnosticsMarkdown = formatBugReportDiagnostics(params.diagnostics ?? []);
|
|
53
|
+
const environmentText = diagnosticsMarkdown === "" ? formatBugReportEnvironment(environment) : `${formatBugReportEnvironment(environment)}
|
|
54
|
+
|
|
55
|
+
${diagnosticsMarkdown}`;
|
|
56
|
+
function buildUrl(environmentFieldValue) {
|
|
57
|
+
return getGitHubIssueFormUrl({
|
|
58
|
+
fields: {
|
|
59
|
+
["environment" /* Environment */]: environmentFieldValue,
|
|
60
|
+
["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
|
|
61
|
+
["operating-system" /* OperatingSystem */]: environment.operatingSystem,
|
|
62
|
+
["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
|
|
63
|
+
},
|
|
64
|
+
gitHubRepo: params.gitHubRepo,
|
|
65
|
+
template: BUG_REPORT_ISSUE_FORM_TEMPLATE,
|
|
66
|
+
...params.title !== void 0 && { title: params.title }
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const fullUrl = buildUrl(environmentText);
|
|
70
|
+
return fullUrl.length <= (params.maxUrlLength ?? DEFAULT_BUG_REPORT_MAX_URL_LENGTH) ? { clipboardText: null, url: fullUrl } : { clipboardText: environmentText, url: buildUrl(BUG_REPORT_PASTE_INSTRUCTIONS) };
|
|
71
|
+
}
|
|
47
72
|
function formatBugReportEnvironment(environment) {
|
|
48
73
|
const enabledPlugins = environment.enabledPlugins.length === 0 ? "none" : environment.enabledPlugins.map((pluginInfo) => formatPluginInfo(pluginInfo)).join(", ");
|
|
49
74
|
return `- Plugin: ${formatPluginInfo(environment.plugin)}
|
|
@@ -68,17 +93,12 @@ async function getBugReportEnvironment(params) {
|
|
|
68
93
|
}
|
|
69
94
|
async function getBugReportIssueFormUrl(params) {
|
|
70
95
|
const environment = await getBugReportEnvironment(params);
|
|
71
|
-
return
|
|
72
|
-
|
|
73
|
-
["environment" /* Environment */]: formatBugReportEnvironment(environment),
|
|
74
|
-
["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
|
|
75
|
-
["operating-system" /* OperatingSystem */]: environment.operatingSystem,
|
|
76
|
-
["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
|
|
77
|
-
},
|
|
96
|
+
return buildBugReportIssueFormLink({
|
|
97
|
+
environment,
|
|
78
98
|
gitHubRepo: params.gitHubRepo,
|
|
79
|
-
|
|
99
|
+
maxUrlLength: Infinity,
|
|
80
100
|
...params.title !== void 0 && { title: params.title }
|
|
81
|
-
});
|
|
101
|
+
}).url;
|
|
82
102
|
}
|
|
83
103
|
function getGitHubIssueFormUrl(params) {
|
|
84
104
|
const searchParams = new URLSearchParams({ template: params.template });
|
|
@@ -134,10 +154,13 @@ function getPluginInfo(app, pluginId) {
|
|
|
134
154
|
}
|
|
135
155
|
export {
|
|
136
156
|
BUG_REPORT_ISSUE_FORM_TEMPLATE,
|
|
157
|
+
BUG_REPORT_PASTE_INSTRUCTIONS,
|
|
137
158
|
BugReportIssueFormFieldId,
|
|
159
|
+
DEFAULT_BUG_REPORT_MAX_URL_LENGTH,
|
|
160
|
+
buildBugReportIssueFormLink,
|
|
138
161
|
formatBugReportEnvironment,
|
|
139
162
|
getBugReportEnvironment,
|
|
140
163
|
getBugReportIssueFormUrl,
|
|
141
164
|
getGitHubIssueFormUrl
|
|
142
165
|
};
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBsb2FkZWQgcGx1Z2lucywgc29ydGVkIGJ5IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZFBsdWdpbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbGxlZCBhcHAncyB2ZXJzaW9uLCB3aGljaCBjYW4gbGFnIGJlaGluZCB7QGxpbmsgb2JzaWRpYW5WZXJzaW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhblZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybTogYEFuZHJvaWRgLCBgaU9TYCwgYG1hY09TYCwgYFdpbmRvd3NgLCBgTGludXhgIG9yIGB1bmtub3duYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBCdWdSZXBvcnRQbHVnaW5JbmZvO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luLCBhcyBhIGJ1ZyByZXBvcnQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaW5zdGFsbGVkIHZlcnNpb24sIG9yIGBudWxsYCB3aGVuIGl0cyBtYW5pZmVzdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyBleHRlbmRzIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIHByZWZpbGwsIGtleWVkIGJ5IGZpZWxkIGBpZGAuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtJ3MgZmlsZSBuYW1lLCB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwQW5kT3BlcmF0aW5nU3lzdGVtIHtcbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtV2l0aEJ1aWxkIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiB1bmtub3duO1xufVxuXG5jb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBidWcgcmVwb3J0J3MgZW52aXJvbm1lbnQgYXMgYSBNYXJrZG93biBsaXN0LlxuICpcbiAqIEBwYXJhbSBlbnZpcm9ubWVudCAtIFRoZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIFRoZSBNYXJrZG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50KGVudmlyb25tZW50OiBCdWdSZXBvcnRFbnZpcm9ubWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IGVuYWJsZWRQbHVnaW5zID0gZW52aXJvbm1lbnQuZW5hYmxlZFBsdWdpbnMubGVuZ3RoID09PSAwXG4gICAgPyAnbm9uZSdcbiAgICA6IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLm1hcCgocGx1Z2luSW5mbykgPT4gZm9ybWF0UGx1Z2luSW5mbyhwbHVnaW5JbmZvKSkuam9pbignLCAnKTtcblxuICByZXR1cm4gYC0gUGx1Z2luOiAke2Zvcm1hdFBsdWdpbkluZm8oZW52aXJvbm1lbnQucGx1Z2luKX1cXG5gXG4gICAgKyBgLSBPYnNpZGlhbjogJHtlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb259IChpbnN0YWxsZXIgJHtlbnZpcm9ubWVudC5pbnN0YWxsZXJWZXJzaW9ufSlcXG5gXG4gICAgKyBgLSBQbGF0Zm9ybTogJHtlbnZpcm9ubWVudC5wbGF0Zm9ybX1cXG5gXG4gICAgKyBgLSBPcGVyYXRpbmcgc3lzdGVtOiAke2Vudmlyb25tZW50Lm9wZXJhdGluZ1N5c3RlbX1cXG5gXG4gICAgKyBgLSBPdGhlciBlbmFibGVkIHBsdWdpbnM6ICR7ZW5hYmxlZFBsdWdpbnN9YDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBlbnZpcm9ubWVudCBhIGJ1ZyByZXBvcnQgbmVlZHM6IHRoZSBwbHVnaW4ncyB2ZXJzaW9uLCB0aGUgb3RoZXIgZW5hYmxlZCBwbHVnaW5zLCB0aGVcbiAqIE9ic2lkaWFuIGFuZCBpbnN0YWxsZXIgdmVyc2lvbnMsIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zOiBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyk6IFByb21pc2U8QnVnUmVwb3J0RW52aXJvbm1lbnQ+IHtcbiAgY29uc3QgeyBhcHAsIHBsdWdpbklkIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHsgaW5zdGFsbGVyVmVyc2lvbiwgb3BlcmF0aW5nU3lzdGVtIH0gPSBhd2FpdCBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTtcblxuICByZXR1cm4ge1xuICAgIC8vIFRoZSBsb2FkZWQgcGx1Z2lucywgYXMgT2JzaWRpYW4ncyBTaG93IGRlYnVnIGluZm8gbGlzdHMgdGhlbTogYGVuYWJsZWRQbHVnaW5zYCBhbHNvIGhvbGRzIGFuIGlkXG4gICAgLy8gd2hvc2UgZm9sZGVyIHdhcyBkZWxldGVkLCBvciB3aG9zZSBsb2FkIGZhaWxlZC5cbiAgICBlbmFibGVkUGx1Z2luczogT2JqZWN0LmtleXMoYXBwLnBsdWdpbnMucGx1Z2lucylcbiAgICAgIC5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gcGx1Z2luSWQpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChpZCkgPT4gZ2V0UGx1Z2luSW5mbyhhcHAsIGlkKSksXG4gICAgaW5zdGFsbGVyVmVyc2lvbixcbiAgICBvYnNpZGlhblZlcnNpb246IGFwaVZlcnNpb24sXG4gICAgb3BlcmF0aW5nU3lzdGVtLFxuICAgIHBsYXRmb3JtOiBnZXRQbGF0Zm9ybU5hbWUoKSxcbiAgICBwbHVnaW46IGdldFBsdWdpbkluZm8oYXBwLCBwbHVnaW5JZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0byBhIHBsdWdpbidzIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSAoe0BsaW5rIEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURX0pLCBwcmVmaWxsZWQgd2l0aFxuICogdGhlIGVudmlyb25tZW50LCBpbiB0aGUgZmllbGRzIHtAbGluayBCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkfSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybChwYXJhbXM6IEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zKTtcblxuICByZXR1cm4gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIFtCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkLkVudmlyb25tZW50XTogZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT2JzaWRpYW5WZXJzaW9uXTogZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9uLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT3BlcmF0aW5nU3lzdGVtXTogZW52aXJvbm1lbnQub3BlcmF0aW5nU3lzdGVtLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuUGx1Z2luVmVyc2lvbl06IGVudmlyb25tZW50LnBsdWdpbi52ZXJzaW9uID8/IFVOS05PV05cbiAgICB9LFxuICAgIGdpdEh1YlJlcG86IHBhcmFtcy5naXRIdWJSZXBvLFxuICAgIHRlbXBsYXRlOiBCVUdfUkVQT1JUX0lTU1VFX0ZPUk1fVEVNUExBVEUsXG4gICAgLi4ucGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgeyB0aXRsZTogcGFyYW1zLnRpdGxlIH1cbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdGhhdCBvcGVucyBhIEdpdEh1YiBpc3N1ZSBmb3JtIHdpdGggZmllbGRzIHByZWZpbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdpdEh1Yklzc3VlRm9ybVVybChwYXJhbXM6IEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0ZW1wbGF0ZTogcGFyYW1zLnRlbXBsYXRlIH0pO1xuICBpZiAocGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KCd0aXRsZScsIHBhcmFtcy50aXRsZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtmaWVsZElkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpZWxkcyA/PyB7fSkpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KGZpZWxkSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cGFyYW1zLmdpdEh1YlJlcG99L2lzc3Vlcy9uZXc/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5JbmZvKHBsdWdpbkluZm86IEJ1Z1JlcG9ydFBsdWdpbkluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7cGx1Z2luSW5mby5pZH1cXGAgJHtwbHVnaW5JbmZvLnZlcnNpb24gPz8gVU5LTk9XTn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTogUHJvbWlzZTxBcHBBbmRPcGVyYXRpbmdTeXN0ZW0+IHtcbiAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XG4gICAgY29uc3QgbW9iaWxlQXBwSW5mbyA9IGF3YWl0IGdldE1vYmlsZUFwcEluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVyVmVyc2lvbjogbW9iaWxlQXBwSW5mbz8uaW5zdGFsbGVyVmVyc2lvbiA/PyBVTktOT1dOLFxuICAgICAgb3BlcmF0aW5nU3lzdGVtOiBtb2JpbGVBcHBJbmZvPy5vcGVyYXRpbmdTeXN0ZW0gPz8gVU5LTk9XTlxuICAgIH07XG4gIH1cblxuICBpZiAoIVBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xuICAgIHJldHVybiB7IGluc3RhbGxlclZlcnNpb246IFVOS05PV04sIG9wZXJhdGluZ1N5c3RlbTogVU5LTk9XTiB9O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9uYWwgaW1wb3J0IG9mIHRoZSBkZXNrdG9wLW9ubHkgbG9va3VwLCB3aGljaCByZWFkcyBgbm9kZTpvc2A7IHRoaXMgYnJhbmNoIHJ1bnMgb25seSBvbiBkZXNrdG9wLlxuICBjb25zdCB7IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0gfSA9IGF3YWl0IGltcG9ydCgnLi9kZXNrdG9wLW9wZXJhdGluZy1zeXN0ZW0udHMnKTtcbiAgY29uc3QgYnVpbGQgPSAoUGxhdGZvcm0gYXMgUGxhdGZvcm1XaXRoQnVpbGQpLmJ1aWxkO1xuICByZXR1cm4ge1xuICAgIGluc3RhbGxlclZlcnNpb246IHR5cGVvZiBidWlsZCA9PT0gJ3N0cmluZycgPyBidWlsZCA6IFVOS05PV04sXG4gICAgb3BlcmF0aW5nU3lzdGVtOiBnZXREZXNrdG9wT3BlcmF0aW5nU3lzdGVtKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc0lvc0FwcCkge1xuICAgIHJldHVybiAnaU9TJztcbiAgfVxuICBpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xuICAgIHJldHVybiAnbWFjT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc1dpbikge1xuICAgIHJldHVybiAnV2luZG93cyc7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtLmlzTGludXggPyAnTGludXgnIDogVU5LTk9XTjtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICByZXR1cm4ge1xuICAgIGlkOiBwbHVnaW5JZCxcbiAgICB2ZXJzaW9uOiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uID8/IG51bGxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHdCQUF3QjtBQU8xQixJQUFLLDRCQUFMLGtCQUFL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UUFBTSxRQUFTLFNBQStCO0FBQzlDLFNBQU87QUFBQSxJQUNMLGtCQUFrQixPQUFPLFVBQVUsV0FBVyxRQUFRO0FBQUEsSUFDdEQsaUJBQWlCLDBCQUEwQjtBQUFBLEVBQzdDO0FBQ0Y7QUFFQSxTQUFTLGtCQUEwQjtBQUNqQyxNQUFJLFNBQVMsY0FBYztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksU0FBUyxVQUFVO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLFNBQVM7QUFDcEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsT0FBTztBQUNsQixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sU0FBUyxVQUFVLFVBQVU7QUFDdEM7QUFFQSxTQUFTLGNBQWMsS0FBVSxVQUF1QztBQUN0RSxTQUFPO0FBQUEsSUFDTCxJQUFJO0FBQUEsSUFDSixTQUFTLElBQUksUUFBUSxVQUFVLFFBQVEsR0FBRyxXQUFXO0FBQUEsRUFDdkQ7QUFDRjsiLCJuYW1lcyI6WyJCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkIl19
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb24gfSBmcm9tICcuL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuXG5pbXBvcnQgeyBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyB9IGZyb20gJy4vYnVnLXJlcG9ydC1kaWFnbm9zdGljcy50cyc7XG5pbXBvcnQgeyBnZXRNb2JpbGVBcHBJbmZvIH0gZnJvbSAnLi9tb2JpbGUtYXBwLWluZm8udHMnO1xuXG4vKipcbiAqIFRoZSBpZHMgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSdzIGZpZWxkcyB0aGF0IHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9IHByZWZpbGxzLiBHaXRIdWJcbiAqIHByZWZpbGxzIGEgZmllbGQgZnJvbSBhIHF1ZXJ5IHBhcmFtZXRlciBuYW1lZCBhZnRlciB0aGUgZmllbGQncyBgaWRgLCBzbyBhIGZvcm0gbXVzdCBnaXZlIGl0cyBmaWVsZHNcbiAqIHRoZXNlIGlkcyBmb3IgdGhlbSB0byBiZSBmaWxsZWQuXG4gKi9cbmV4cG9ydCBlbnVtIEJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQge1xuICAvKipcbiAgICogVGhlIHdob2xlIGVudmlyb25tZW50LCBhcyB7QGxpbmsgZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnR9IHJlbmRlcnMgaXQuXG4gICAqL1xuICBFbnZpcm9ubWVudCA9ICdlbnZpcm9ubWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgT2JzaWRpYW5WZXJzaW9uID0gJ29ic2lkaWFuLXZlcnNpb24nLFxuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICovXG4gIE9wZXJhdGluZ1N5c3RlbSA9ICdvcGVyYXRpbmctc3lzdGVtJyxcblxuICAvKipcbiAgICogVGhlIHJlcG9ydGluZyBwbHVnaW4ncyB2ZXJzaW9uLlxuICAgKi9cbiAgUGx1Z2luVmVyc2lvbiA9ICdwbHVnaW4tdmVyc2lvbidcbn1cblxuLyoqXG4gKiBUaGUgZmlsZSBuYW1lIG9mIHRoZSBidWctcmVwb3J0IGlzc3VlIGZvcm0sIHVuZGVyIGAuZ2l0aHViL0lTU1VFX1RFTVBMQVRFYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURSA9ICdidWdfcmVwb3J0LnltbCc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYnVkZ2V0LCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBlbmNvZGVkIFVSTCwgb2YgYSBwcmVmaWxsZWQgYnVnLXJlcG9ydCBsaW5rLlxuICpcbiAqIE1lYXN1cmVkIGFnYWluc3QgYGdpdGh1Yi5jb21gIG9uIDIwMjYtMTEtMDcsIHNpZ25lZCBvdXQ6IGFuIGlzc3VlLWZvcm0gVVJMIHVwIHRvIGFib3V0IDYsNTQwIGNoYXJhY3RlcnNcbiAqIHdhcyBhbnN3ZXJlZCB3aXRoIHRoZSB1c3VhbCByZWRpcmVjdCB0byB0aGUgZm9ybSwgYWJvdXQgOCwwODggd2l0aCBhIDUwMiwgYW5kIDgsMjg4IGFuZCBtb3JlIHdpdGggYSA0MTQuXG4gKiA2LDAwMCBsZWF2ZXMgcm9vbSBmb3IgYSBsb25nZXIgcmVwb3NpdG9yeSBuYW1lIGFuZCBmb3IgYSBzaWduZWQtaW4gc2Vzc2lvbidzIG93biBsaW1pdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVR19SRVBPUlRfTUFYX1VSTF9MRU5HVEggPSA2MDAwO1xuXG4vKipcbiAqIEEgbGluayB0byBhIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgYXMge0BsaW5rIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGlua30gYnVpbGRzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmsge1xuICAvKipcbiAgICogVGhlIHRleHQgdGhlIHVzZXIgbXVzdCBwYXN0ZSBpbnRvIHRoZSBmb3JtJ3MgZW52aXJvbm1lbnQgZmllbGQsIHdoZW4gdGhlIGZ1bGwgcmVwb3J0IGRpZCBub3QgZml0IHRoZVxuICAgKiBVUkwgYnVkZ2V0OyBgbnVsbGAgd2hlbiB0aGUgVVJMIGNhcnJpZXMgdGhlIHdob2xlIHJlcG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IGNsaXBib2FyZFRleHQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGlua30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljcyB0aGUgdXNlciBhZ3JlZWQgdG8gaW5jbHVkZSwgYXBwZW5kZWQgdG8gdGhlIGVudmlyb25tZW50IGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlhZ25vc3RpY3M/OiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQsIGZyb20ge0BsaW5rIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50fS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBCdWdSZXBvcnRFbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IGNoYXJhY3RlcnMgdGhlIGVuY29kZWQgVVJMIG1heSBoYXZlIGJlZm9yZSB0aGUgcmVwb3J0IG1vdmVzIHRvIHRoZSBjbGlwYm9hcmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX0JVR19SRVBPUlRfTUFYX1VSTF9MRU5HVEh9XG4gICAqL1xuICByZWFkb25seSBtYXhVcmxMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpc3N1ZSdzIHRpdGxlLiBMZWF2ZSBpdCBvdXQgdG8ga2VlcCB0aGUgZm9ybSdzIG93biBkZWZhdWx0IHRpdGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRleHQgdGhlIGVudmlyb25tZW50IGZpZWxkIGhvbGRzIHdoZW4gdGhlIHJlcG9ydCBtb3ZlZCB0byB0aGUgY2xpcGJvYXJkLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9QQVNURV9JTlNUUlVDVElPTlMgPSAnVGhlIGZ1bGwgZW52aXJvbm1lbnQgYW5kIGRpYWdub3N0aWNzIHdlcmUgY29waWVkIHRvIHlvdXIgY2xpcGJvYXJkIGJlY2F1c2UgdGhleSBhcmUgdG9vIGxvbmcgZm9yIGEgbGluay4gUmVwbGFjZSB0aGlzIHRleHQgYnkgcGFzdGluZyB0aGVtIGhlcmUuJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBsb2FkZWQgcGx1Z2lucywgc29ydGVkIGJ5IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZFBsdWdpbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbGxlZCBhcHAncyB2ZXJzaW9uLCB3aGljaCBjYW4gbGFnIGJlaGluZCB7QGxpbmsgb2JzaWRpYW5WZXJzaW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhblZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybTogYEFuZHJvaWRgLCBgaU9TYCwgYG1hY09TYCwgYFdpbmRvd3NgLCBgTGludXhgIG9yIGB1bmtub3duYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBCdWdSZXBvcnRQbHVnaW5JbmZvO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luLCBhcyBhIGJ1ZyByZXBvcnQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaW5zdGFsbGVkIHZlcnNpb24sIG9yIGBudWxsYCB3aGVuIGl0cyBtYW5pZmVzdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyBleHRlbmRzIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIHByZWZpbGwsIGtleWVkIGJ5IGZpZWxkIGBpZGAuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtJ3MgZmlsZSBuYW1lLCB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwQW5kT3BlcmF0aW5nU3lzdGVtIHtcbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtV2l0aEJ1aWxkIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiB1bmtub3duO1xufVxuXG5jb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmsgdG8gYSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0sIHByZWZpbGxlZCB3aXRoIHRoZSBlbnZpcm9ubWVudCBhbmQgdGhlIGdpdmVuXG4gKiBkaWFnbm9zdGljcy4gV2hlbiB0aGUgZW5jb2RlZCBsaW5rIHdvdWxkIGJlIGxvbmdlciB0aGFuXG4gKiB7QGxpbmsgQnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rUGFyYW1zLm1heFVybExlbmd0aH0sIHRoZSBlbnZpcm9ubWVudCBmaWVsZCBnZXRzXG4gKiB7QGxpbmsgQlVHX1JFUE9SVF9QQVNURV9JTlNUUlVDVElPTlN9IGluc3RlYWQsIGFuZCB0aGUgZnVsbCB0ZXh0IGlzIHJldHVybmVkIGFzXG4gKiB7QGxpbmsgQnVnUmVwb3J0SXNzdWVGb3JtTGluay5jbGlwYm9hcmRUZXh0fSBmb3IgdGhlIGNhbGxlciB0byBjb3B5LiBOb3RoaW5nIGlzIGN1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluaywgYW5kIHRoZSB0ZXh0IHRvIHBhc3RlIHdoZW4gaXQgZGlkIG5vdCBmaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmsocGFyYW1zOiBCdWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmtQYXJhbXMpOiBCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rIHtcbiAgY29uc3QgeyBlbnZpcm9ubWVudCB9ID0gcGFyYW1zO1xuICBjb25zdCBkaWFnbm9zdGljc01hcmtkb3duID0gZm9ybWF0QnVnUmVwb3J0RGlhZ25vc3RpY3MocGFyYW1zLmRpYWdub3N0aWNzID8/IFtdKTtcbiAgY29uc3QgZW52aXJvbm1lbnRUZXh0ID0gZGlhZ25vc3RpY3NNYXJrZG93biA9PT0gJydcbiAgICA/IGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50KGVudmlyb25tZW50KVxuICAgIDogYCR7Zm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpfVxcblxcbiR7ZGlhZ25vc3RpY3NNYXJrZG93bn1gO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVXJsKGVudmlyb25tZW50RmllbGRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5FbnZpcm9ubWVudF06IGVudmlyb25tZW50RmllbGRWYWx1ZSxcbiAgICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT2JzaWRpYW5WZXJzaW9uXTogZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9uLFxuICAgICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PcGVyYXRpbmdTeXN0ZW1dOiBlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW0sXG4gICAgICAgIFtCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkLlBsdWdpblZlcnNpb25dOiBlbnZpcm9ubWVudC5wbHVnaW4udmVyc2lvbiA/PyBVTktOT1dOXG4gICAgICB9LFxuICAgICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgICB0ZW1wbGF0ZTogQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFLFxuICAgICAgLi4ucGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgeyB0aXRsZTogcGFyYW1zLnRpdGxlIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZ1bGxVcmwgPSBidWlsZFVybChlbnZpcm9ubWVudFRleHQpO1xuICByZXR1cm4gZnVsbFVybC5sZW5ndGggPD0gKHBhcmFtcy5tYXhVcmxMZW5ndGggPz8gREVGQVVMVF9CVUdfUkVQT1JUX01BWF9VUkxfTEVOR1RIKSA/IHsgY2xpcGJvYXJkVGV4dDogbnVsbCwgdXJsOiBmdWxsVXJsIH0gOiB7IGNsaXBib2FyZFRleHQ6IGVudmlyb25tZW50VGV4dCwgdXJsOiBidWlsZFVybChCVUdfUkVQT1JUX1BBU1RFX0lOU1RSVUNUSU9OUykgfTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgYnVnIHJlcG9ydCdzIGVudmlyb25tZW50IGFzIGEgTWFya2Rvd24gbGlzdC5cbiAqXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudDogQnVnUmVwb3J0RW52aXJvbm1lbnQpOiBzdHJpbmcge1xuICBjb25zdCBlbmFibGVkUGx1Z2lucyA9IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFxuICAgID8gJ25vbmUnXG4gICAgOiBlbnZpcm9ubWVudC5lbmFibGVkUGx1Z2lucy5tYXAoKHBsdWdpbkluZm8pID0+IGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbykpLmpvaW4oJywgJyk7XG5cbiAgcmV0dXJuIGAtIFBsdWdpbjogJHtmb3JtYXRQbHVnaW5JbmZvKGVudmlyb25tZW50LnBsdWdpbil9XFxuYFxuICAgICsgYC0gT2JzaWRpYW46ICR7ZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9ufSAoaW5zdGFsbGVyICR7ZW52aXJvbm1lbnQuaW5zdGFsbGVyVmVyc2lvbn0pXFxuYFxuICAgICsgYC0gUGxhdGZvcm06ICR7ZW52aXJvbm1lbnQucGxhdGZvcm19XFxuYFxuICAgICsgYC0gT3BlcmF0aW5nIHN5c3RlbTogJHtlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW19XFxuYFxuICAgICsgYC0gT3RoZXIgZW5hYmxlZCBwbHVnaW5zOiAke2VuYWJsZWRQbHVnaW5zfWA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzOiB0aGUgcGx1Z2luJ3MgdmVyc2lvbiwgdGhlIG90aGVyIGVuYWJsZWQgcGx1Z2lucywgdGhlXG4gKiBPYnNpZGlhbiBhbmQgaW5zdGFsbGVyIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtczogR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMpOiBQcm9taXNlPEJ1Z1JlcG9ydEVudmlyb25tZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBwbHVnaW5JZCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGluc3RhbGxlclZlcnNpb24sIG9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgZ2V0QXBwQW5kT3BlcmF0aW5nU3lzdGVtKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUaGUgbG9hZGVkIHBsdWdpbnMsIGFzIE9ic2lkaWFuJ3MgU2hvdyBkZWJ1ZyBpbmZvIGxpc3RzIHRoZW06IGBlbmFibGVkUGx1Z2luc2AgYWxzbyBob2xkcyBhbiBpZFxuICAgIC8vIHdob3NlIGZvbGRlciB3YXMgZGVsZXRlZCwgb3Igd2hvc2UgbG9hZCBmYWlsZWQuXG4gICAgZW5hYmxlZFBsdWdpbnM6IE9iamVjdC5rZXlzKGFwcC5wbHVnaW5zLnBsdWdpbnMpXG4gICAgICAuZmlsdGVyKChpZCkgPT4gaWQgIT09IHBsdWdpbklkKVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcCgoaWQpID0+IGdldFBsdWdpbkluZm8oYXBwLCBpZCkpLFxuICAgIGluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgIG9wZXJhdGluZ1N5c3RlbSxcbiAgICBwbGF0Zm9ybTogZ2V0UGxhdGZvcm1OYW1lKCksXG4gICAgcGx1Z2luOiBnZXRQbHVnaW5JbmZvKGFwcCwgcGx1Z2luSWQpXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdG8gYSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0gKHtAbGluayBCVUdfUkVQT1JUX0lTU1VFX0ZPUk1fVEVNUExBVEV9KSwgcHJlZmlsbGVkIHdpdGhcbiAqIHRoZSBlbnZpcm9ubWVudCwgaW4gdGhlIGZpZWxkcyB7QGxpbmsgQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZH0gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmwocGFyYW1zOiBHZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmxQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtcyk7XG5cbiAgcmV0dXJuIGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGluayh7XG4gICAgZW52aXJvbm1lbnQsXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgbWF4VXJsTGVuZ3RoOiBJbmZpbml0eSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KS51cmw7XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdGhhdCBvcGVucyBhIEdpdEh1YiBpc3N1ZSBmb3JtIHdpdGggZmllbGRzIHByZWZpbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdpdEh1Yklzc3VlRm9ybVVybChwYXJhbXM6IEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0ZW1wbGF0ZTogcGFyYW1zLnRlbXBsYXRlIH0pO1xuICBpZiAocGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KCd0aXRsZScsIHBhcmFtcy50aXRsZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtmaWVsZElkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpZWxkcyA/PyB7fSkpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KGZpZWxkSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cGFyYW1zLmdpdEh1YlJlcG99L2lzc3Vlcy9uZXc/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5JbmZvKHBsdWdpbkluZm86IEJ1Z1JlcG9ydFBsdWdpbkluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7cGx1Z2luSW5mby5pZH1cXGAgJHtwbHVnaW5JbmZvLnZlcnNpb24gPz8gVU5LTk9XTn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTogUHJvbWlzZTxBcHBBbmRPcGVyYXRpbmdTeXN0ZW0+IHtcbiAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XG4gICAgY29uc3QgbW9iaWxlQXBwSW5mbyA9IGF3YWl0IGdldE1vYmlsZUFwcEluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVyVmVyc2lvbjogbW9iaWxlQXBwSW5mbz8uaW5zdGFsbGVyVmVyc2lvbiA/PyBVTktOT1dOLFxuICAgICAgb3BlcmF0aW5nU3lzdGVtOiBtb2JpbGVBcHBJbmZvPy5vcGVyYXRpbmdTeXN0ZW0gPz8gVU5LTk9XTlxuICAgIH07XG4gIH1cblxuICBpZiAoIVBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xuICAgIHJldHVybiB7IGluc3RhbGxlclZlcnNpb246IFVOS05PV04sIG9wZXJhdGluZ1N5c3RlbTogVU5LTk9XTiB9O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9uYWwgaW1wb3J0IG9mIHRoZSBkZXNrdG9wLW9ubHkgbG9va3VwLCB3aGljaCByZWFkcyBgbm9kZTpvc2A7IHRoaXMgYnJhbmNoIHJ1bnMgb25seSBvbiBkZXNrdG9wLlxuICBjb25zdCB7IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0gfSA9IGF3YWl0IGltcG9ydCgnLi9kZXNrdG9wLW9wZXJhdGluZy1zeXN0ZW0udHMnKTtcbiAgY29uc3QgYnVpbGQgPSAoUGxhdGZvcm0gYXMgUGxhdGZvcm1XaXRoQnVpbGQpLmJ1aWxkO1xuICByZXR1cm4ge1xuICAgIGluc3RhbGxlclZlcnNpb246IHR5cGVvZiBidWlsZCA9PT0gJ3N0cmluZycgPyBidWlsZCA6IFVOS05PV04sXG4gICAgb3BlcmF0aW5nU3lzdGVtOiBnZXREZXNrdG9wT3BlcmF0aW5nU3lzdGVtKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc0lvc0FwcCkge1xuICAgIHJldHVybiAnaU9TJztcbiAgfVxuICBpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xuICAgIHJldHVybiAnbWFjT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc1dpbikge1xuICAgIHJldHVybiAnV2luZG93cyc7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtLmlzTGludXggPyAnTGludXgnIDogVU5LTk9XTjtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICByZXR1cm4ge1xuICAgIGlkOiBwbHVnaW5JZCxcbiAgICB2ZXJzaW9uOiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uID8/IG51bGxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWdCLEVBQUUsVUFBVSxPQUFPLFNBQVMsQ0FBQztBQUN0RSxNQUFJLE9BQU8sVUFBVSxRQUFXO0FBQzlCLGlCQUFhLElBQUksU0FBUyxPQUFPLEtBQUs7QUFBQSxFQUN4QztBQUVBLGFBQVcsQ0FBQyxTQUFTLEtBQUssS0FBSyxPQUFPLFFBQVEsT0FBTyxVQUFVLENBQUMsQ0FBQyxHQUFHO0FBQ2xFLGlCQUFhLElBQUksU0FBUyxLQUFLO0FBQUEsRUFDakM7QUFFQSxTQUFPLHNCQUFzQixPQUFPLFVBQVUsZUFBZSxhQUFhLFNBQVMsQ0FBQztBQUN0RjtBQUVBLFNBQVMsaUJBQWlCLFlBQXlDO0FBQ2pFLFNBQU8sS0FBSyxXQUFXLEVBQUUsTUFBTSxXQUFXLFdBQVcsT0FBTztBQUM5RDtBQUVBLGVBQWUsMkJBQTJEO0FBQ3hFLE1BQUksU0FBUyxhQUFhO0FBQ3hCLFVBQU0sZ0JBQWdCLE1BQU0saUJBQWlCO0FBQzdDLFdBQU87QUFBQSxNQUNMLGtCQUFrQixlQUFlLG9CQUFvQjtBQUFBLE1BQ3JELGlCQUFpQixlQUFlLG1CQUFtQjtBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxTQUFTLGNBQWM7QUFDMUIsV0FBTyxFQUFFLGtCQUFrQixTQUFTLGlCQUFpQixRQUFRO0FBQUEsRUFDL0Q7QUFHQSxRQUFNLEVBQUUsMEJBQTBCLElBQUksTUFBTSxPQUFPLCtCQUErQjtBQUNsRixRQUFNLFFBQVMsU0FBK0I7QUFDOUMsU0FBTztBQUFBLElBQ0wsa0JBQWtCLE9BQU8sVUFBVSxXQUFXLFFBQVE7QUFBQSxJQUN0RCxpQkFBaUIsMEJBQTBCO0FBQUEsRUFDN0M7QUFDRjtBQUVBLFNBQVMsa0JBQTBCO0FBQ2pDLE1BQUksU0FBUyxjQUFjO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLFVBQVU7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsU0FBUztBQUNwQixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksU0FBUyxPQUFPO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxTQUFTLFVBQVUsVUFBVTtBQUN0QztBQUVBLFNBQVMsY0FBYyxLQUFVLFVBQXVDO0FBQ3RFLFNBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLFNBQVMsSUFBSSxRQUFRLFVBQVUsUUFBUSxHQUFHLFdBQVc7QUFBQSxFQUN2RDtBQUNGOyIsIm5hbWVzIjpbIkJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQiXX0=
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* Handles the "Report a bug" command.
|
|
6
6
|
*/
|
|
7
7
|
import type { App } from 'obsidian';
|
|
8
|
+
import type { Promisable } from 'type-fest';
|
|
9
|
+
import type { BugReportDiagnosticSection } from '../bug-report-diagnostics.mjs';
|
|
8
10
|
import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
|
|
9
11
|
/**
|
|
10
12
|
* Constructor parameters for {@link OpenBugReportCommandHandler}.
|
|
@@ -14,10 +16,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
|
|
|
14
16
|
* The Obsidian app instance.
|
|
15
17
|
*/
|
|
16
18
|
readonly app: App;
|
|
19
|
+
/**
|
|
20
|
+
* Gets the optional diagnostics the report can carry, such as a `BugReportLogBuffer`'s section or the
|
|
21
|
+
* plugin's own redacted settings. Called each time the command runs. When it returns any section, the
|
|
22
|
+
* user reviews them and chooses which to include before the form opens; a potentially private section
|
|
23
|
+
* starts excluded. Leave it out to open the form with the environment only, as before.
|
|
24
|
+
*/
|
|
25
|
+
readonly getDiagnostics?: () => Promisable<readonly BugReportDiagnosticSection[]>;
|
|
17
26
|
/**
|
|
18
27
|
* The plugin's GitHub repository, as `owner/name`.
|
|
19
28
|
*/
|
|
20
29
|
readonly gitHubRepo: string;
|
|
30
|
+
/**
|
|
31
|
+
* The most characters the encoded link may have before the report moves to the clipboard.
|
|
32
|
+
*
|
|
33
|
+
* @default `DEFAULT_BUG_REPORT_MAX_URL_LENGTH`
|
|
34
|
+
*/
|
|
35
|
+
readonly maxUrlLength?: number;
|
|
21
36
|
/**
|
|
22
37
|
* The id of the reporting plugin.
|
|
23
38
|
*/
|
|
@@ -25,13 +40,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
|
|
|
25
40
|
}
|
|
26
41
|
/**
|
|
27
42
|
* A command handler that opens the plugin's bug-report issue form on GitHub, prefilled with the
|
|
28
|
-
* environment. See {@link getBugReportIssueFormUrl} for the
|
|
43
|
+
* environment and any diagnostics the user agreed to include. See {@link getBugReportIssueFormUrl} for the
|
|
44
|
+
* field ids the form must use, and {@link buildBugReportIssueFormLink} for what happens to a report too long
|
|
45
|
+
* for a link.
|
|
29
46
|
*/
|
|
30
47
|
export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
|
|
31
48
|
/**
|
|
32
49
|
* The Obsidian app instance.
|
|
33
50
|
*/
|
|
34
51
|
protected readonly app: App;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the optional diagnostics the report can carry.
|
|
54
|
+
*/
|
|
55
|
+
protected readonly getDiagnostics: (() => Promisable<readonly BugReportDiagnosticSection[]>) | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* The most characters the encoded link may have before the report moves to the clipboard.
|
|
58
|
+
*/
|
|
59
|
+
protected readonly maxUrlLength: number | undefined;
|
|
35
60
|
/**
|
|
36
61
|
* The id of the reporting plugin.
|
|
37
62
|
*/
|
|
@@ -43,9 +68,16 @@ export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandle
|
|
|
43
68
|
*/
|
|
44
69
|
constructor(params: OpenBugReportCommandHandlerConstructorParams);
|
|
45
70
|
/**
|
|
46
|
-
*
|
|
71
|
+
* Lets the user review the diagnostics, if any, then opens the issue form. When the report is too long
|
|
72
|
+
* for a link, it is copied to the clipboard first, or shown for copying by hand when the clipboard
|
|
73
|
+
* refuses it.
|
|
74
|
+
*/
|
|
75
|
+
execute(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Builds the prefilled bug-report URL, with the environment only.
|
|
47
78
|
*
|
|
48
79
|
* @returns The link.
|
|
49
80
|
*/
|
|
50
81
|
protected getUrl(): Promise<string>;
|
|
82
|
+
private copyReport;
|
|
51
83
|
}
|