@mnaoumov/obsidian-lib 10.9.0 → 10.10.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/codemirror/editor-mode-extension/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +28 -1
- package/dist/lib/cjs/__merged.d.cts +4 -1
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +180 -0
- package/dist/lib/cjs/codemirror/editor-mode-extension.d.cts +50 -0
- package/dist/lib/cjs/codemirror/index.cjs +4 -1
- package/dist/lib/cjs/codemirror/index.d.cts +1 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +4 -7
- package/dist/lib/cjs/components/plugin-settings-component.cjs +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +2 -1
- package/dist/lib/cjs/css-class.cjs +7 -1
- package/dist/lib/cjs/css-class.d.cts +24 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/i18n/i18n.cjs +38 -10
- package/dist/lib/cjs/i18n/i18n.d.cts +29 -2
- package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
- package/dist/lib/cjs/modals/code-block-builder.cjs +486 -0
- package/dist/lib/cjs/modals/code-block-builder.d.cts +321 -0
- package/dist/lib/cjs/modals/index.cjs +4 -1
- package/dist/lib/cjs/modals/index.d.cts +1 -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-async-cleanup.cjs +189 -0
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +111 -0
- package/dist/lib/cjs/plugin/plugin.cjs +47 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +25 -1
- package/dist/lib/esm/__merged.d.mts +4 -1
- package/dist/lib/esm/__merged.mjs +31 -1
- package/dist/lib/esm/codemirror/editor-mode-extension.d.mts +50 -0
- package/dist/lib/esm/codemirror/editor-mode-extension.mjs +93 -0
- package/dist/lib/esm/codemirror/index.d.mts +1 -0
- package/dist/lib/esm/codemirror/index.mjs +3 -1
- package/dist/lib/esm/codemirror/inline-token-widgets.mjs +3 -9
- package/dist/lib/esm/components/plugin-settings-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-settings-component.mjs +4 -3
- package/dist/lib/esm/css-class.d.mts +24 -0
- package/dist/lib/esm/css-class.mjs +7 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/i18n/i18n.d.mts +29 -2
- package/dist/lib/esm/i18n/i18n.mjs +40 -10
- package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
- package/dist/lib/esm/i18n/locales/en.mjs +13 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
- package/dist/lib/esm/modals/code-block-builder.d.mts +321 -0
- package/dist/lib/esm/modals/code-block-builder.mjs +408 -0
- package/dist/lib/esm/modals/index.d.mts +1 -0
- package/dist/lib/esm/modals/index.mjs +3 -1
- 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-async-cleanup.d.mts +111 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +96 -0
- package/dist/lib/esm/plugin/plugin.d.mts +25 -1
- package/dist/lib/esm/plugin/plugin.mjs +52 -2
- package/dist/styles.css +31 -1
- package/modals/code-block-builder/package.json +6 -0
- package/package.json +1 -1
- package/plugin/plugin-async-cleanup/package.json +6 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { invokeAsyncSafely } from "@mnaoumov/typescript-lib/async";
|
|
34
|
+
import {
|
|
35
|
+
assertNever,
|
|
36
|
+
ensureNonNullable
|
|
37
|
+
} from "@mnaoumov/typescript-lib/type-guards";
|
|
38
|
+
import {
|
|
39
|
+
DropdownComponent,
|
|
40
|
+
Notice,
|
|
41
|
+
Setting,
|
|
42
|
+
TextAreaComponent
|
|
43
|
+
} from "obsidian";
|
|
44
|
+
import { CssClass } from "../css-class.mjs";
|
|
45
|
+
import { t } from "../i18n/i18n.mjs";
|
|
46
|
+
import { MultipleDropdownComponent } from "../setting-components/multiple-dropdown-component.mjs";
|
|
47
|
+
import {
|
|
48
|
+
ModalBase,
|
|
49
|
+
showModal
|
|
50
|
+
} from "./modal.mjs";
|
|
51
|
+
const DEFAULT_SEPARATOR = ",";
|
|
52
|
+
const MIN_FENCE_LENGTH = 3;
|
|
53
|
+
const ROOT_FOLDER_PATH = "/";
|
|
54
|
+
class CodeBlockBuilderModal extends ModalBase {
|
|
55
|
+
codeBlock = "";
|
|
56
|
+
editor;
|
|
57
|
+
fields;
|
|
58
|
+
groupStates = [];
|
|
59
|
+
insertedCodeBlock = null;
|
|
60
|
+
language;
|
|
61
|
+
onUpdatePreview;
|
|
62
|
+
outputComponent = null;
|
|
63
|
+
previewEl = null;
|
|
64
|
+
title;
|
|
65
|
+
values = /* @__PURE__ */ new Map();
|
|
66
|
+
constructor(params) {
|
|
67
|
+
super(params);
|
|
68
|
+
this.addCssClasses(CssClass.CodeBlockBuilderModal);
|
|
69
|
+
this.editor = params.editor === void 0 ? params.app.workspace.activeEditor?.editor ?? null : params.editor;
|
|
70
|
+
this.fields = params.fields;
|
|
71
|
+
this.language = params.language;
|
|
72
|
+
this.onUpdatePreview = params.onUpdatePreview;
|
|
73
|
+
this.title = params.title ?? t(($) => $.obsidianLib.codeBlockBuilder.title);
|
|
74
|
+
for (const field of flattenFields(this.fields)) {
|
|
75
|
+
this.values.set(field.key, field.defaultValue);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
onClose() {
|
|
79
|
+
this.promiseResolve(this.insertedCodeBlock);
|
|
80
|
+
}
|
|
81
|
+
onOpen() {
|
|
82
|
+
this.titleEl.setText(this.title);
|
|
83
|
+
for (const input of this.fields) {
|
|
84
|
+
if (input.type !== "group" && input.isRequired) {
|
|
85
|
+
this.renderField(this.contentEl, input);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const input of this.fields) {
|
|
89
|
+
if (input.type === "group") {
|
|
90
|
+
this.renderGroup(input);
|
|
91
|
+
} else if (!input.isRequired) {
|
|
92
|
+
this.renderField(this.contentEl, input);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.previewEl = this.contentEl.createDiv({ cls: CssClass.CodeBlockBuilderPreview });
|
|
96
|
+
this.renderOutput();
|
|
97
|
+
this.update();
|
|
98
|
+
}
|
|
99
|
+
addResetButton(setting, field, reset) {
|
|
100
|
+
if (field.isRequired) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
setting.addExtraButton((button) => {
|
|
104
|
+
button.setIcon("lucide-rotate-ccw").setTooltip(t(($) => $.obsidianLib.codeBlockBuilder.reset, { value: formatValue(field, field.defaultValue) || '""' })).onClick(() => {
|
|
105
|
+
reset();
|
|
106
|
+
this.setValue(field.key, field.defaultValue);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async copy() {
|
|
111
|
+
try {
|
|
112
|
+
await this.containerEl.win.navigator.clipboard.writeText(this.codeBlock);
|
|
113
|
+
new Notice(t(($) => $.obsidianLib.codeBlockBuilder.copied));
|
|
114
|
+
} catch {
|
|
115
|
+
new Notice(t(($) => $.obsidianLib.codeBlockBuilder.copyFailed));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
insert() {
|
|
119
|
+
if (!this.editor) {
|
|
120
|
+
new Notice(t(($) => $.obsidianLib.codeBlockBuilder.insertUnavailable));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const cursor = this.editor.getCursor("from");
|
|
124
|
+
const textBeforeCursor = this.editor.getLine(cursor.line).slice(0, cursor.ch);
|
|
125
|
+
const prefix = textBeforeCursor === "" ? "" : "\n";
|
|
126
|
+
this.editor.replaceSelection(`${prefix}${this.codeBlock}
|
|
127
|
+
`);
|
|
128
|
+
this.insertedCodeBlock = this.codeBlock;
|
|
129
|
+
this.close();
|
|
130
|
+
}
|
|
131
|
+
renderBooleanField(setting, field) {
|
|
132
|
+
setting.addToggle((toggle) => {
|
|
133
|
+
toggle.setValue(field.defaultValue).onChange((value) => {
|
|
134
|
+
this.setValue(field.key, value);
|
|
135
|
+
});
|
|
136
|
+
this.addResetButton(setting, field, () => {
|
|
137
|
+
toggle.setValue(field.defaultValue);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
renderColorField(setting, field) {
|
|
142
|
+
setting.addColorPicker((colorPicker) => {
|
|
143
|
+
colorPicker.setValue(field.defaultValue).onChange((value) => {
|
|
144
|
+
this.setValue(field.key, value);
|
|
145
|
+
});
|
|
146
|
+
this.addResetButton(setting, field, () => {
|
|
147
|
+
colorPicker.setValue(field.defaultValue);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
renderConditionalDropdownField(setting, field) {
|
|
152
|
+
const initialGroupIndex = Math.max(0, field.groups.findIndex((group) => Object.hasOwn(toRecord(group.options), field.defaultValue)));
|
|
153
|
+
const groupDropdown = new DropdownComponent(setting.controlEl);
|
|
154
|
+
for (const [index, group] of field.groups.entries()) {
|
|
155
|
+
groupDropdown.addOption(String(index), group.name);
|
|
156
|
+
}
|
|
157
|
+
groupDropdown.setValue(String(initialGroupIndex));
|
|
158
|
+
const optionDropdown = new DropdownComponent(setting.controlEl);
|
|
159
|
+
function fillOptions(groupIndex, value) {
|
|
160
|
+
const options = toRecord(field.groups[groupIndex]?.options ?? []);
|
|
161
|
+
const selectedValue = value ?? Object.keys(options)[0] ?? "";
|
|
162
|
+
optionDropdown.selectEl.empty();
|
|
163
|
+
optionDropdown.addOptions(options);
|
|
164
|
+
optionDropdown.setValue(selectedValue);
|
|
165
|
+
return selectedValue;
|
|
166
|
+
}
|
|
167
|
+
fillOptions(initialGroupIndex, field.defaultValue);
|
|
168
|
+
optionDropdown.onChange((value) => {
|
|
169
|
+
this.setValue(field.key, value);
|
|
170
|
+
});
|
|
171
|
+
groupDropdown.onChange((value) => {
|
|
172
|
+
this.setValue(field.key, fillOptions(Number(value)));
|
|
173
|
+
});
|
|
174
|
+
this.addResetButton(setting, field, () => {
|
|
175
|
+
groupDropdown.setValue(String(initialGroupIndex));
|
|
176
|
+
fillOptions(initialGroupIndex, field.defaultValue);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
renderDropdownField(setting, field) {
|
|
180
|
+
setting.addDropdown((dropdown) => {
|
|
181
|
+
dropdown.addOptions(toRecord(field.options)).setValue(field.defaultValue).onChange((value) => {
|
|
182
|
+
this.setValue(field.key, value);
|
|
183
|
+
});
|
|
184
|
+
this.addResetButton(setting, field, () => {
|
|
185
|
+
dropdown.setValue(field.defaultValue);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
renderField(containerEl, field) {
|
|
190
|
+
const setting = new Setting(containerEl).setName(field.name);
|
|
191
|
+
if (field.description !== void 0) {
|
|
192
|
+
setting.setDesc(field.description);
|
|
193
|
+
}
|
|
194
|
+
switch (field.type) {
|
|
195
|
+
case "boolean": {
|
|
196
|
+
this.renderBooleanField(setting, field);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
case "color": {
|
|
200
|
+
this.renderColorField(setting, field);
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case "conditionalDropdown": {
|
|
204
|
+
this.renderConditionalDropdownField(setting, field);
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case "dropdown": {
|
|
208
|
+
this.renderDropdownField(setting, field);
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case "folder": {
|
|
212
|
+
this.renderFolderField(setting, field);
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
case "multipleDropdown": {
|
|
216
|
+
this.renderMultipleDropdownField(setting, field);
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
case "slider": {
|
|
220
|
+
this.renderSliderField(setting, field);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case "text": {
|
|
224
|
+
this.renderTextField(setting, field);
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
default: {
|
|
228
|
+
assertNever(field);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
renderFolderField(setting, field) {
|
|
233
|
+
const options = {
|
|
234
|
+
[ROOT_FOLDER_PATH]: t(($) => $.obsidianLib.codeBlockBuilder.rootFolder)
|
|
235
|
+
};
|
|
236
|
+
const folderPaths = this.app.vault.getAllFolders(false).map((folder) => folder.path).sort((a, b) => a.localeCompare(b));
|
|
237
|
+
for (const folderPath of folderPaths) {
|
|
238
|
+
options[folderPath] = folderPath;
|
|
239
|
+
}
|
|
240
|
+
options[field.defaultValue] ??= field.defaultValue;
|
|
241
|
+
setting.addDropdown((dropdown) => {
|
|
242
|
+
dropdown.addOptions(options).setValue(field.defaultValue).onChange((value) => {
|
|
243
|
+
this.setValue(field.key, value);
|
|
244
|
+
});
|
|
245
|
+
this.addResetButton(setting, field, () => {
|
|
246
|
+
dropdown.setValue(field.defaultValue);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
renderGroup(group) {
|
|
251
|
+
const groupEl = this.contentEl.createDiv({ cls: CssClass.CodeBlockBuilderGroup });
|
|
252
|
+
const headingSetting = new Setting(groupEl).setName(group.name).setHeading();
|
|
253
|
+
const bodyEl = groupEl.createDiv({ cls: CssClass.CodeBlockBuilderGroupBody });
|
|
254
|
+
groupEl.addClass(CssClass.IsCollapsed);
|
|
255
|
+
headingSetting.addExtraButton((button) => {
|
|
256
|
+
const groupState = { button, groupEl };
|
|
257
|
+
this.groupStates.push(groupState);
|
|
258
|
+
updateGroupIcon(groupState);
|
|
259
|
+
button.onClick(() => {
|
|
260
|
+
this.setGroupExpanded(groupEl, groupEl.hasClass(CssClass.IsCollapsed));
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
for (const field of group.fields) {
|
|
264
|
+
this.renderField(bodyEl, field);
|
|
265
|
+
}
|
|
266
|
+
if (group.isInitiallyExpanded) {
|
|
267
|
+
this.setGroupExpanded(groupEl, true);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
renderMultipleDropdownField(setting, field) {
|
|
271
|
+
const dropdown = new MultipleDropdownComponent(setting.controlEl).addOptions(toRecord(field.options)).setValue(field.defaultValue).onChange((value) => {
|
|
272
|
+
this.setValue(field.key, value);
|
|
273
|
+
});
|
|
274
|
+
setting.addComponent(() => dropdown);
|
|
275
|
+
this.addResetButton(setting, field, () => {
|
|
276
|
+
dropdown.setValue(field.defaultValue);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
renderOutput() {
|
|
280
|
+
const setting = new Setting(this.contentEl).setName(t(($) => $.obsidianLib.codeBlockBuilder.output));
|
|
281
|
+
setting.settingEl.addClass(CssClass.CodeBlockBuilderOutput);
|
|
282
|
+
setting.addTextArea((textArea) => {
|
|
283
|
+
this.outputComponent = textArea;
|
|
284
|
+
textArea.inputEl.readOnly = true;
|
|
285
|
+
});
|
|
286
|
+
setting.addExtraButton((button) => {
|
|
287
|
+
button.setIcon("lucide-copy").setTooltip(t(($) => $.obsidianLib.codeBlockBuilder.copy)).onClick(() => {
|
|
288
|
+
invokeAsyncSafely(() => this.copy());
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
setting.addExtraButton((button) => {
|
|
292
|
+
button.setIcon("lucide-file-input").setTooltip(t(($) => this.editor ? $.obsidianLib.codeBlockBuilder.insert : $.obsidianLib.codeBlockBuilder.insertUnavailable)).onClick(() => {
|
|
293
|
+
this.insert();
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
renderSliderField(setting, field) {
|
|
298
|
+
setting.addSlider((slider) => {
|
|
299
|
+
slider.setLimits(Math.min(field.min, field.defaultValue), Math.max(field.max, field.defaultValue), field.step).setValue(field.defaultValue).onChange((value) => {
|
|
300
|
+
this.setValue(field.key, value);
|
|
301
|
+
});
|
|
302
|
+
this.addResetButton(setting, field, () => {
|
|
303
|
+
slider.setValue(field.defaultValue);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
renderTextField(setting, field) {
|
|
308
|
+
setting.addText((text) => {
|
|
309
|
+
text.setPlaceholder(field.placeholder ?? "").setValue(field.defaultValue).onChange((value) => {
|
|
310
|
+
if (field.validationPattern && !doesMatchPattern(field.validationPattern, value)) {
|
|
311
|
+
text.inputEl.setCustomValidity(t(($) => $.obsidianLib.codeBlockBuilder.invalidValue));
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
text.inputEl.setCustomValidity("");
|
|
315
|
+
this.setValue(field.key, value);
|
|
316
|
+
});
|
|
317
|
+
this.addResetButton(setting, field, () => {
|
|
318
|
+
text.setValue(field.defaultValue);
|
|
319
|
+
text.inputEl.setCustomValidity("");
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
setGroupExpanded(groupEl, isExpanded) {
|
|
324
|
+
for (const groupState of this.groupStates) {
|
|
325
|
+
const shouldExpand = isExpanded && groupState.groupEl === groupEl;
|
|
326
|
+
groupState.groupEl.toggleClass(CssClass.IsCollapsed, !shouldExpand);
|
|
327
|
+
updateGroupIcon(groupState);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
setValue(key, value) {
|
|
331
|
+
this.values.set(key, value);
|
|
332
|
+
this.update();
|
|
333
|
+
}
|
|
334
|
+
update() {
|
|
335
|
+
this.codeBlock = formatCodeBlock({
|
|
336
|
+
fields: this.fields,
|
|
337
|
+
language: this.language,
|
|
338
|
+
values: this.values
|
|
339
|
+
});
|
|
340
|
+
const outputComponent = ensureNonNullable(this.outputComponent);
|
|
341
|
+
outputComponent.setValue(this.codeBlock);
|
|
342
|
+
outputComponent.inputEl.rows = this.codeBlock.split("\n").length;
|
|
343
|
+
if (this.onUpdatePreview) {
|
|
344
|
+
this.onUpdatePreview({
|
|
345
|
+
codeBlock: this.codeBlock,
|
|
346
|
+
previewEl: ensureNonNullable(this.previewEl),
|
|
347
|
+
values: this.values
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function formatCodeBlock(params) {
|
|
353
|
+
const lines = [];
|
|
354
|
+
for (const field of flattenFields(params.fields)) {
|
|
355
|
+
const value = params.values.get(field.key) ?? field.defaultValue;
|
|
356
|
+
const formattedValue = formatValue(field, value);
|
|
357
|
+
if (formattedValue === "") {
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
if (!field.isRequired && isSameValue(value, field.defaultValue)) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
lines.push(field.shouldOmitKey ? formattedValue : `${field.key}: ${formattedValue}`);
|
|
364
|
+
}
|
|
365
|
+
const body = lines.join("\n");
|
|
366
|
+
const longestBacktickRun = Math.max(0, ...Array.from(body.matchAll(/`+/g), (match) => match[0].length));
|
|
367
|
+
const fence = "`".repeat(Math.max(MIN_FENCE_LENGTH, longestBacktickRun + 1));
|
|
368
|
+
return lines.length === 0 ? `${fence}${params.language}
|
|
369
|
+
${fence}` : `${fence}${params.language}
|
|
370
|
+
${body}
|
|
371
|
+
${fence}`;
|
|
372
|
+
}
|
|
373
|
+
async function showCodeBlockBuilder(params) {
|
|
374
|
+
return await showModal(
|
|
375
|
+
(promiseResolve) => new CodeBlockBuilderModal({
|
|
376
|
+
...params,
|
|
377
|
+
promiseResolve
|
|
378
|
+
})
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
function doesMatchPattern(pattern, value) {
|
|
382
|
+
pattern.lastIndex = 0;
|
|
383
|
+
return pattern.test(value);
|
|
384
|
+
}
|
|
385
|
+
function flattenFields(inputs) {
|
|
386
|
+
return inputs.flatMap((input) => input.type === "group" ? input.fields : [input]);
|
|
387
|
+
}
|
|
388
|
+
function formatValue(field, value) {
|
|
389
|
+
const separator = field.type === "multipleDropdown" ? field.separator ?? DEFAULT_SEPARATOR : DEFAULT_SEPARATOR;
|
|
390
|
+
return isStringArray(value) ? value.join(separator) : String(value);
|
|
391
|
+
}
|
|
392
|
+
function isSameValue(a, b) {
|
|
393
|
+
return isStringArray(a) && isStringArray(b) ? a.length === b.length && a.every((item, index) => item === b[index]) : a === b;
|
|
394
|
+
}
|
|
395
|
+
function isStringArray(value) {
|
|
396
|
+
return Array.isArray(value);
|
|
397
|
+
}
|
|
398
|
+
function toRecord(options) {
|
|
399
|
+
return isStringArray(options) ? Object.fromEntries(options.map((option) => [option, option])) : { ...options };
|
|
400
|
+
}
|
|
401
|
+
function updateGroupIcon(groupState) {
|
|
402
|
+
groupState.button.setIcon(groupState.groupEl.hasClass(CssClass.IsCollapsed) ? "lucide-chevron-down" : "lucide-chevron-up");
|
|
403
|
+
}
|
|
404
|
+
export {
|
|
405
|
+
formatCodeBlock,
|
|
406
|
+
showCodeBlockBuilder
|
|
407
|
+
};
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvY29kZS1ibG9jay1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB7QGxpbmsgc2hvd0NvZGVCbG9ja0J1aWxkZXJ9LCBhIG1vZGFsIHRoYXQgYnVpbGRzIGEgcGx1Z2luJ3MgY29kZSBibG9jayBmcm9tIGEgZGVjbGFyYXRpdmUgbGlzdCBvZiBmaWVsZHMsIGFuZFxuICoge0BsaW5rIGZvcm1hdENvZGVCbG9ja30sIHRoZSBwdXJlIGZvcm1hdHRlciBiZWhpbmQgaXQuXG4gKlxuICogRXZlcnkgZmllbGQgcmVuZGVycyBhcyBvbmUgc2V0dGluZ3Mgcm93LiBBIGZpZWxkIHdob3NlIHZhbHVlIGRpZmZlcnMgZnJvbSBpdHMgZGVmYXVsdCB3cml0ZXMgb25lIGBrZXk6IHZhbHVlYCBsaW5lXG4gKiBpbnRvIHRoZSBibG9jayAoYSByZXF1aXJlZCBmaWVsZCBhbHdheXMgZG9lcyksIHRoZSBibG9jayBpcyBzaG93biBsaXZlIHdpdGggYW4gb3B0aW9uYWwgcHJldmlldyB0aGUgcGx1Z2luIGRyYXdzLCBhbmRcbiAqIHRoZSB1c2VyIGNvcGllcyBpdCBvciBpbnNlcnRzIGl0IGludG8gdGhlIG5vdGUgYmVpbmcgZWRpdGVkLlxuICpcbiAqIEFkYXB0ZWQgZnJvbSB0aGUgY29kZSBibG9jayBjcmVhdG9yIG1vZGFsIG9mIGFsdGFyb2sncyBgb2JzaWRpYW4tZGV2LXV0aWxzYFxuICogKGh0dHBzOi8vZ2l0aHViLmNvbS9hbHRhcm9rL29ic2lkaWFuLWRldi11dGlscywgYHNyYy9jb2RlLWJsb2NrLWNyZWF0b3IvYCksIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBiZWxvdy4gVGhlIHBvcnRcbiAqIHRha2VzIHRoZSBhcHAgZnJvbSB0aGUgY2FsbGVyLCBtb3ZlcyB0aGUgc3R5bGVzIGludG8gdGhlIGxpYnJhcnkgc3R5bGVzaGVldCwgcmV1c2VzIHRoaXMgbGlicmFyeSdzIHNldHRpbmdcbiAqIGNvbXBvbmVudHMsIGFuZCBwaWNrcyBhIGZlbmNlIGxvbmdlciB0aGFuIGFueSBiYWNrdGljayBydW4gaW4gdGhlIHZhbHVlcy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgQWx0YXJva1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuICogZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGVcbiAqIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEVcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICovXG5cbi8vIGNzcGVsbDp3b3JkcyBhbHRhcm9rIEFsdGFyb2sgcnJnZ2JiIC0tIFRoZSBhdXRob3IncyBoYW5kbGUsIGFzIHRoZSBsaWNlbnNlIG5vdGljZSBhYm92ZSBuYW1lcyBpdCwgYW5kIHRoZSBoZXggY29sb3Igbm90YXRpb24uXG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdG9yLFxuICBFeHRyYUJ1dHRvbkNvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7XG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25Db21wb25lbnQsXG4gIE5vdGljZSxcbiAgU2V0dGluZyxcbiAgVGV4dEFyZWFDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7XG4gIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zLFxuICBNb2RhbFBhcmFtc0Jhc2Vcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxCYXNlLFxuICBzaG93TW9kYWxcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbi8qKlxuICogQSBib29sZWFuIGZpZWxkLCByZW5kZXJlZCBhcyBhIHRvZ2dsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCdWlsZGVyQm9vbGVhbkZpZWxkIGV4dGVuZHMgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZTxib29sZWFuPiB7XG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnYm9vbGVhbic7XG59XG5cbi8qKlxuICogQSBjb2xvciBmaWVsZCwgcmVuZGVyZWQgYXMgYSBjb2xvciBwaWNrZXIuIFRoZSB2YWx1ZSBpcyB0aGUgY29sb3IgYXMgYCNycmdnYmJgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJDb2xvckZpZWxkIGV4dGVuZHMgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZTxzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIHRoZSBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdjb2xvcic7XG59XG5cbi8qKlxuICogQSBwYWlyIG9mIGNhc2NhZGluZyBkcm9wZG93bnM6IHRoZSBmaXJzdCBwaWNrcyBhIGdyb3VwLCB0aGUgc2Vjb25kIG9uZSBvZiB0aGF0IGdyb3VwJ3Mgb3B0aW9ucy4gT25seSB0aGUgc2Vjb25kXG4gKiBkcm9wZG93bidzIHZhbHVlIGlzIHdyaXR0ZW4gaW50byB0aGUgY29kZSBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCdWlsZGVyQ29uZGl0aW9uYWxEcm9wZG93bkZpZWxkIGV4dGVuZHMgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZTxzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBncm91cHMgb2Ygb3B0aW9ucy4gVGhlIGdyb3VwIGNvbnRhaW5pbmcge0BsaW5rIENvZGVCbG9ja0J1aWxkZXJGaWVsZEJhc2UuZGVmYXVsdFZhbHVlfSBpcyBzZWxlY3RlZCBmaXJzdCwgZWxzZVxuICAgKiB0aGUgZmlyc3QgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSBncm91cHM6IHJlYWRvbmx5IENvZGVCbG9ja0J1aWxkZXJPcHRpb25Hcm91cFtdO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnY29uZGl0aW9uYWxEcm9wZG93bic7XG59XG5cbi8qKlxuICogQSBzaW5nbGUtY2hvaWNlIGRyb3Bkb3duIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJEcm9wZG93bkZpZWxkIGV4dGVuZHMgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZTxzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIG9mIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvZGVCbG9ja0J1aWxkZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnZHJvcGRvd24nO1xufVxuXG4vKipcbiAqIEEgZmllbGQgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciwgb3RoZXIgdGhhbiBhIHtAbGluayBDb2RlQmxvY2tCdWlsZGVyR3JvdXB9LlxuICovXG5leHBvcnQgdHlwZSBDb2RlQmxvY2tCdWlsZGVyRmllbGQgPVxuICB8IENvZGVCbG9ja0J1aWxkZXJCb29sZWFuRmllbGRcbiAgfCBDb2RlQmxvY2tCdWlsZGVyQ29sb3JGaWVsZFxuICB8IENvZGVCbG9ja0J1aWxkZXJDb25kaXRpb25hbERyb3Bkb3duRmllbGRcbiAgfCBDb2RlQmxvY2tCdWlsZGVyRHJvcGRvd25GaWVsZFxuICB8IENvZGVCbG9ja0J1aWxkZXJGb2xkZXJGaWVsZFxuICB8IENvZGVCbG9ja0J1aWxkZXJNdWx0aXBsZURyb3Bkb3duRmllbGRcbiAgfCBDb2RlQmxvY2tCdWlsZGVyU2xpZGVyRmllbGRcbiAgfCBDb2RlQmxvY2tCdWlsZGVyVGV4dEZpZWxkO1xuXG4vKipcbiAqIFRoZSBtZW1iZXJzIGV2ZXJ5IHtAbGluayBDb2RlQmxvY2tCdWlsZGVyRmllbGR9IGhhcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIGZpZWxkJ3MgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZTxWYWx1ZSBleHRlbmRzIENvZGVCbG9ja0J1aWxkZXJWYWx1ZT4ge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBmaWVsZCBzdGFydHMgd2l0aC4gV2hpbGUgdGhlIGZpZWxkIGhvbGRzIGl0LCB0aGUgZmllbGQgd3JpdGVzIG5vdGhpbmcgaW50byB0aGUgY29kZSBibG9jaywgdW5sZXNzIGl0XG4gICAqIGlzIHtAbGluayBDb2RlQmxvY2tCdWlsZGVyRmllbGRCYXNlLmlzUmVxdWlyZWR9LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBzaG93biB1bmRlciB0aGUgZmllbGQncyBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGFsd2F5cyB3cml0dGVuIGludG8gdGhlIGNvZGUgYmxvY2suIEEgcmVxdWlyZWQgZmllbGQgaXMgc2hvd24gYWJvdmUgdGhlIG9wdGlvbmFsIG9uZXMgYW5kIGhhc1xuICAgKiBubyByZXNldCBidXR0b24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoZSBmaWVsZCdzIGxpbmUgaXMgd3JpdHRlbiB3aXRoLCBhbmQgdGhlIGtleSBvZiBpdHMgdmFsdWUgaW4gdGhlIHZhbHVlcyB0aGUgcHJldmlldyByZWNlaXZlcy4gVW5pcXVlIGFjcm9zc1xuICAgKiBhbGwgZmllbGRzLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCwgc2hvd24gdG8gdGhlIHVzZXIuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkJ3MgbGluZSBob2xkcyBpdHMgdmFsdWUgYWxvbmUsIHdpdGhvdXQgdGhlIGBrZXk6IGAgcHJlZml4LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRPbWl0S2V5PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGZvbGRlciBmaWVsZDogYSBkcm9wZG93biBvZiBldmVyeSBmb2xkZXIgb2YgdGhlIHZhdWx0LiBUaGUgdmFsdWUgaXMgdGhlIGZvbGRlciBwYXRoLCBgL2AgZm9yIHRoZSB2YXVsdCByb290LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJGb2xkZXJGaWVsZCBleHRlbmRzIENvZGVCbG9ja0J1aWxkZXJGaWVsZEJhc2U8c3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnZm9sZGVyJztcbn1cblxuLyoqXG4gKiBBIGNvbGxhcHNpYmxlIGdyb3VwIG9mIGZpZWxkcy4gT25lIGdyb3VwIGlzIGV4cGFuZGVkIGF0IGEgdGltZTogZXhwYW5kaW5nIGEgZ3JvdXAgY29sbGFwc2VzIHRoZSBvdGhlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrQnVpbGRlckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZHMgb2YgdGhlIGdyb3VwLiBBIHJlcXVpcmVkIGZpZWxkIGluc2lkZSBhIGdyb3VwIGlzIHN0aWxsIHdyaXR0ZW4gaW50byB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkczogcmVhZG9ubHkgQ29kZUJsb2NrQnVpbGRlckZpZWxkW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyb3VwIHN0YXJ0cyBleHBhbmRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbml0aWFsbHlFeHBhbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkaW5nIG9mIHRoZSBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2dyb3VwJztcbn1cblxuLyoqXG4gKiBBbiBlbnRyeSBvZiB7QGxpbmsgU2hvd0NvZGVCbG9ja0J1aWxkZXJQYXJhbXMuZmllbGRzfTogYSBmaWVsZCwgb3IgYSBncm91cCBvZiBmaWVsZHMuXG4gKi9cbmV4cG9ydCB0eXBlIENvZGVCbG9ja0J1aWxkZXJJbnB1dCA9IENvZGVCbG9ja0J1aWxkZXJGaWVsZCB8IENvZGVCbG9ja0J1aWxkZXJHcm91cDtcblxuLyoqXG4gKiBBIG11bHRpcGxlLWNob2ljZSBkcm9wZG93biBmaWVsZC4gSXRzIGxpbmUgaG9sZHMgdGhlIHNlbGVjdGVkIG9wdGlvbnMgam9pbmVkIGJ5XG4gKiB7QGxpbmsgQ29kZUJsb2NrQnVpbGRlck11bHRpcGxlRHJvcGRvd25GaWVsZC5zZXBhcmF0b3J9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJNdWx0aXBsZURyb3Bkb3duRmllbGQgZXh0ZW5kcyBDb2RlQmxvY2tCdWlsZGVyRmllbGRCYXNlPHJlYWRvbmx5IHN0cmluZ1tdPiB7XG4gIC8qKlxuICAgKiBUaGUgb3B0aW9ucyBvZiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBDb2RlQmxvY2tCdWlsZGVyT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHRleHQgdGhlIHNlbGVjdGVkIG9wdGlvbnMgYXJlIGpvaW5lZCB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJywnYFxuICAgKi9cbiAgcmVhZG9ubHkgc2VwYXJhdG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnbXVsdGlwbGVEcm9wZG93bic7XG59XG5cbi8qKlxuICogQSBuYW1lZCBncm91cCBvZiBvcHRpb25zIG9mIGEge0BsaW5rIENvZGVCbG9ja0J1aWxkZXJDb25kaXRpb25hbERyb3Bkb3duRmllbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJPcHRpb25Hcm91cCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAsIHNob3duIGluIHRoZSBmaXJzdCBkcm9wZG93bi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wdGlvbnMgb2YgdGhlIGdyb3VwLCBzaG93biBpbiB0aGUgc2Vjb25kIGRyb3Bkb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29kZUJsb2NrQnVpbGRlck9wdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgb2YgYSBkcm9wZG93bjogYSBsaXN0IG9mIHZhbHVlcyBzaG93biBhcyB0aGV5IGFyZSwgb3IgYSBtYXAgZnJvbSBlYWNoIHZhbHVlIHRvIGl0cyBkaXNwbGF5IHRleHQuXG4gKi9cbmV4cG9ydCB0eXBlIENvZGVCbG9ja0J1aWxkZXJPcHRpb25zID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gfCByZWFkb25seSBzdHJpbmdbXTtcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBvZiB7QGxpbmsgU2hvd0NvZGVCbG9ja0J1aWxkZXJQYXJhbXMub25VcGRhdGVQcmV2aWV3fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCdWlsZGVyUHJldmlld1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29kZSBibG9jayBhcyBpdCBzdGFuZHMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gZHJhdyB0aGUgcHJldmlldyBpbnRvLiBUaGUgbW9kYWwgbmV2ZXIgY2xlYXJzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJldmlld0VsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgZXZlcnkgZmllbGQsIGJ5IGl0cyBrZXkuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgQ29kZUJsb2NrQnVpbGRlclZhbHVlPjtcbn1cblxuLyoqXG4gKiBBIHNsaWRlciBmaWVsZC4gQSB7QGxpbmsgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZS5kZWZhdWx0VmFsdWV9IG91dHNpZGUgdGhlIGJvdW5kcyB3aWRlbnMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCdWlsZGVyU2xpZGVyRmllbGQgZXh0ZW5kcyBDb2RlQmxvY2tCdWlsZGVyRmllbGRCYXNlPG51bWJlcj4ge1xuICAvKipcbiAgICogVGhlIHVwcGVyIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb3dlciBib3VuZC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXA6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ3NsaWRlcic7XG59XG5cbi8qKlxuICogQSB0ZXh0IGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0J1aWxkZXJUZXh0RmllbGQgZXh0ZW5kcyBDb2RlQmxvY2tCdWlsZGVyRmllbGRCYXNlPHN0cmluZz4ge1xuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciBzaG93biB3aGlsZSB0aGUgZmllbGQgaXMgZW1wdHkuXG4gICAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ3RleHQnO1xuXG4gIC8qKlxuICAgKiBBIHBhdHRlcm4gdGhlIHZhbHVlIG11c3QgbWF0Y2guIFdoaWxlIGl0IGRvZXMgbm90LCB0aGUgZmllbGQgaXMgbWFya2VkIGludmFsaWQgYW5kIGtlZXBzIGl0cyBsYXN0IHZhbGlkIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvblBhdHRlcm4/OiBSZWdFeHA7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIGEge0BsaW5rIENvZGVCbG9ja0J1aWxkZXJGaWVsZH0uXG4gKi9cbmV4cG9ydCB0eXBlIENvZGVCbG9ja0J1aWxkZXJWYWx1ZSA9IGJvb2xlYW4gfCBudW1iZXIgfCByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBvZiB7QGxpbmsgZm9ybWF0Q29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRDb2RlQmxvY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZpZWxkcyBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkczogcmVhZG9ubHkgQ29kZUJsb2NrQnVpbGRlcklucHV0W107XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiBlYWNoIGZpZWxkLCBieSBpdHMga2V5LiBBIGZpZWxkIG1pc3NpbmcgZnJvbSBpdCBob2xkcyBpdHMgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBDb2RlQmxvY2tCdWlsZGVyVmFsdWU+O1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIG9mIHtAbGluayBzaG93Q29kZUJsb2NrQnVpbGRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hvd0NvZGVCbG9ja0J1aWxkZXJQYXJhbXMgZXh0ZW5kcyBNb2RhbFBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0aGUgSW5zZXJ0IGJ1dHRvbiB3cml0ZXMgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGFjdGl2ZSBlZGl0b3Igd2hlbiB0aGUgbW9kYWwgb3BlbnMuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I/OiBFZGl0b3IgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZmllbGRzIG9mIHRoZSBjb2RlIGJsb2NrLCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgd3JpdHRlbiBpbnRvIGl0LiBSZXF1aXJlZCBmaWVsZHMgYXJlIHNob3duIGZpcnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRzOiByZWFkb25seSBDb2RlQmxvY2tCdWlsZGVySW5wdXRbXTtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIG9mIHRoZSBjb2RlIGJsb2NrOiB0aGUgdGV4dCBhZnRlciBpdHMgb3BlbmluZyBmZW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERyYXdzIGEgbGl2ZSBwcmV2aWV3IG9mIHRoZSBjb2RlIGJsb2NrLiBDYWxsZWQgb25jZSB3aGVuIHRoZSBtb2RhbCBvcGVucyBhbmQgYWdhaW4gYWZ0ZXIgZXZlcnkgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHByZXZpZXcgZWxlbWVudCwgdGhlIGNvZGUgYmxvY2sgYW5kIHRoZSBjdXJyZW50IHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uVXBkYXRlUHJldmlldz86IChwYXJhbXM6IENvZGVCbG9ja0J1aWxkZXJQcmV2aWV3UGFyYW1zKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ0NvZGUgYmxvY2sgYnVpbGRlcidgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBNSU5fRkVOQ0VfTEVOR1RIID0gMztcbmNvbnN0IFJPT1RfRk9MREVSX1BBVEggPSAnLyc7XG5cbnR5cGUgQ29kZUJsb2NrQnVpbGRlck1vZGFsQ29uc3RydWN0b3JQYXJhbXMgPSBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxudWxsIHwgc3RyaW5nPiAmIFNob3dDb2RlQmxvY2tCdWlsZGVyUGFyYW1zO1xuXG5pbnRlcmZhY2UgR3JvdXBTdGF0ZSB7XG4gIHJlYWRvbmx5IGJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQ7XG4gIHJlYWRvbmx5IGdyb3VwRWw6IEhUTUxFbGVtZW50O1xufVxuXG5jbGFzcyBDb2RlQmxvY2tCdWlsZGVyTW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8bnVsbCB8IHN0cmluZz4ge1xuICBwcml2YXRlIGNvZGVCbG9jayA9ICcnO1xuICBwcml2YXRlIHJlYWRvbmx5IGVkaXRvcjogRWRpdG9yIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHM6IHJlYWRvbmx5IENvZGVCbG9ja0J1aWxkZXJJbnB1dFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwU3RhdGVzOiBHcm91cFN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSBpbnNlcnRlZENvZGVCbG9jazogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvblVwZGF0ZVByZXZpZXc6ICgocGFyYW1zOiBDb2RlQmxvY2tCdWlsZGVyUHJldmlld1BhcmFtcykgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb3V0cHV0Q29tcG9uZW50OiBudWxsIHwgVGV4dEFyZWFDb21wb25lbnQgPSBudWxsO1xuICBwcml2YXRlIHByZXZpZXdFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlcyA9IG5ldyBNYXA8c3RyaW5nLCBDb2RlQmxvY2tCdWlsZGVyVmFsdWU+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29kZUJsb2NrQnVpbGRlck1vZGFsQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuYWRkQ3NzQ2xhc3NlcyhDc3NDbGFzcy5Db2RlQmxvY2tCdWlsZGVyTW9kYWwpO1xuICAgIHRoaXMuZWRpdG9yID0gcGFyYW1zLmVkaXRvciA9PT0gdW5kZWZpbmVkID8gcGFyYW1zLmFwcC53b3Jrc3BhY2UuYWN0aXZlRWRpdG9yPy5lZGl0b3IgPz8gbnVsbCA6IHBhcmFtcy5lZGl0b3I7XG4gICAgdGhpcy5maWVsZHMgPSBwYXJhbXMuZmllbGRzO1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBwYXJhbXMubGFuZ3VhZ2U7XG4gICAgdGhpcy5vblVwZGF0ZVByZXZpZXcgPSBwYXJhbXMub25VcGRhdGVQcmV2aWV3O1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGUgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5jb2RlQmxvY2tCdWlsZGVyLnRpdGxlKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZsYXR0ZW5GaWVsZHModGhpcy5maWVsZHMpKSB7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQoZmllbGQua2V5LCBmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucHJvbWlzZVJlc29sdmUodGhpcy5pbnNlcnRlZENvZGVCbG9jayk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMudGl0bGVFbC5zZXRUZXh0KHRoaXMudGl0bGUpO1xuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgaWYgKGlucHV0LnR5cGUgIT09ICdncm91cCcgJiYgaW5wdXQuaXNSZXF1aXJlZCkge1xuICAgICAgICB0aGlzLnJlbmRlckZpZWxkKHRoaXMuY29udGVudEVsLCBpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJHcm91cChpbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKCFpbnB1dC5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyRmllbGQodGhpcy5jb250ZW50RWwsIGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByZXZpZXdFbCA9IHRoaXMuY29udGVudEVsLmNyZWF0ZURpdih7IGNsczogQ3NzQ2xhc3MuQ29kZUJsb2NrQnVpbGRlclByZXZpZXcgfSk7XG4gICAgdGhpcy5yZW5kZXJPdXRwdXQoKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZXNldEJ1dHRvbihzZXR0aW5nOiBTZXR0aW5nLCBmaWVsZDogQ29kZUJsb2NrQnVpbGRlckZpZWxkLCByZXNldDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChmaWVsZC5pc1JlcXVpcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICBidXR0b25cbiAgICAgICAgLnNldEljb24oJ2x1Y2lkZS1yb3RhdGUtY2N3JylcbiAgICAgICAgLnNldFRvb2x0aXAodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5jb2RlQmxvY2tCdWlsZGVyLnJlc2V0LCB7IHZhbHVlOiBmb3JtYXRWYWx1ZShmaWVsZCwgZmllbGQuZGVmYXVsdFZhbHVlKSB8fCAnXCJcIicgfSkpXG4gICAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmllbGQua2V5LCBmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29weSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb250YWluZXJFbC53aW4ubmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5jb2RlQmxvY2spO1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmNvZGVCbG9ja0J1aWxkZXIuY29waWVkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBuZXcgTm90aWNlKHQoKCQpID0+ICQub2JzaWRpYW5MaWIuY29kZUJsb2NrQnVpbGRlci5jb3B5RmFpbGVkKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikge1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmNvZGVCbG9ja0J1aWxkZXIuaW5zZXJ0VW5hdmFpbGFibGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJzb3IgPSB0aGlzLmVkaXRvci5nZXRDdXJzb3IoJ2Zyb20nKTtcbiAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gdGhpcy5lZGl0b3IuZ2V0TGluZShjdXJzb3IubGluZSkuc2xpY2UoMCwgY3Vyc29yLmNoKTtcbiAgICBjb25zdCBwcmVmaXggPSB0ZXh0QmVmb3JlQ3Vyc29yID09PSAnJyA/ICcnIDogJ1xcbic7XG4gICAgdGhpcy5lZGl0b3IucmVwbGFjZVNlbGVjdGlvbihgJHtwcmVmaXh9JHt0aGlzLmNvZGVCbG9ja31cXG5gKTtcbiAgICB0aGlzLmluc2VydGVkQ29kZUJsb2NrID0gdGhpcy5jb2RlQmxvY2s7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJCb29sZWFuRmllbGQoc2V0dGluZzogU2V0dGluZywgZmllbGQ6IENvZGVCbG9ja0J1aWxkZXJCb29sZWFuRmllbGQpOiB2b2lkIHtcbiAgICBzZXR0aW5nLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICB0b2dnbGVcbiAgICAgICAgLnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmllbGQua2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRSZXNldEJ1dHRvbihzZXR0aW5nLCBmaWVsZCwgKCkgPT4ge1xuICAgICAgICB0b2dnbGUuc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb2xvckZpZWxkKHNldHRpbmc6IFNldHRpbmcsIGZpZWxkOiBDb2RlQmxvY2tCdWlsZGVyQ29sb3JGaWVsZCk6IHZvaWQge1xuICAgIHNldHRpbmcuYWRkQ29sb3JQaWNrZXIoKGNvbG9yUGlja2VyKSA9PiB7XG4gICAgICBjb2xvclBpY2tlclxuICAgICAgICAuc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKVxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShmaWVsZC5rZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFJlc2V0QnV0dG9uKHNldHRpbmcsIGZpZWxkLCAoKSA9PiB7XG4gICAgICAgIGNvbG9yUGlja2VyLnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29uZGl0aW9uYWxEcm9wZG93bkZpZWxkKHNldHRpbmc6IFNldHRpbmcsIGZpZWxkOiBDb2RlQmxvY2tCdWlsZGVyQ29uZGl0aW9uYWxEcm9wZG93bkZpZWxkKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbEdyb3VwSW5kZXggPSBNYXRoLm1heCgwLCBmaWVsZC5ncm91cHMuZmluZEluZGV4KChncm91cCkgPT4gT2JqZWN0Lmhhc093bih0b1JlY29yZChncm91cC5vcHRpb25zKSwgZmllbGQuZGVmYXVsdFZhbHVlKSkpO1xuICAgIGNvbnN0IGdyb3VwRHJvcGRvd24gPSBuZXcgRHJvcGRvd25Db21wb25lbnQoc2V0dGluZy5jb250cm9sRWwpO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBncm91cF0gb2YgZmllbGQuZ3JvdXBzLmVudHJpZXMoKSkge1xuICAgICAgZ3JvdXBEcm9wZG93bi5hZGRPcHRpb24oU3RyaW5nKGluZGV4KSwgZ3JvdXAubmFtZSk7XG4gICAgfVxuICAgIGdyb3VwRHJvcGRvd24uc2V0VmFsdWUoU3RyaW5nKGluaXRpYWxHcm91cEluZGV4KSk7XG5cbiAgICBjb25zdCBvcHRpb25Ecm9wZG93biA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChzZXR0aW5nLmNvbnRyb2xFbCk7XG5cbiAgICBmdW5jdGlvbiBmaWxsT3B0aW9ucyhncm91cEluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0b1JlY29yZChmaWVsZC5ncm91cHNbZ3JvdXBJbmRleF0/Lm9wdGlvbnMgPz8gW10pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlID8/IE9iamVjdC5rZXlzKG9wdGlvbnMpWzBdID8/ICcnO1xuICAgICAgb3B0aW9uRHJvcGRvd24uc2VsZWN0RWwuZW1wdHkoKTtcbiAgICAgIG9wdGlvbkRyb3Bkb3duLmFkZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBvcHRpb25Ecm9wZG93bi5zZXRWYWx1ZShzZWxlY3RlZFZhbHVlKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZFZhbHVlO1xuICAgIH1cblxuICAgIGZpbGxPcHRpb25zKGluaXRpYWxHcm91cEluZGV4LCBmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgIG9wdGlvbkRyb3Bkb3duLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5zZXRWYWx1ZShmaWVsZC5rZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGdyb3VwRHJvcGRvd24ub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnNldFZhbHVlKGZpZWxkLmtleSwgZmlsbE9wdGlvbnMoTnVtYmVyKHZhbHVlKSkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRSZXNldEJ1dHRvbihzZXR0aW5nLCBmaWVsZCwgKCkgPT4ge1xuICAgICAgZ3JvdXBEcm9wZG93bi5zZXRWYWx1ZShTdHJpbmcoaW5pdGlhbEdyb3VwSW5kZXgpKTtcbiAgICAgIGZpbGxPcHRpb25zKGluaXRpYWxHcm91cEluZGV4LCBmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJEcm9wZG93bkZpZWxkKHNldHRpbmc6IFNldHRpbmcsIGZpZWxkOiBDb2RlQmxvY2tCdWlsZGVyRHJvcGRvd25GaWVsZCk6IHZvaWQge1xuICAgIHNldHRpbmcuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG4gICAgICBkcm9wZG93blxuICAgICAgICAuYWRkT3B0aW9ucyh0b1JlY29yZChmaWVsZC5vcHRpb25zKSlcbiAgICAgICAgLnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmllbGQua2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRSZXNldEJ1dHRvbihzZXR0aW5nLCBmaWVsZCwgKCkgPT4ge1xuICAgICAgICBkcm9wZG93bi5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckZpZWxkKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgZmllbGQ6IENvZGVCbG9ja0J1aWxkZXJGaWVsZCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0TmFtZShmaWVsZC5uYW1lKTtcbiAgICBpZiAoZmllbGQuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0dGluZy5zZXREZXNjKGZpZWxkLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOiB7XG4gICAgICAgIHRoaXMucmVuZGVyQm9vbGVhbkZpZWxkKHNldHRpbmcsIGZpZWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjb2xvcic6IHtcbiAgICAgICAgdGhpcy5yZW5kZXJDb2xvckZpZWxkKHNldHRpbmcsIGZpZWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjb25kaXRpb25hbERyb3Bkb3duJzoge1xuICAgICAgICB0aGlzLnJlbmRlckNvbmRpdGlvbmFsRHJvcGRvd25GaWVsZChzZXR0aW5nLCBmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZHJvcGRvd24nOiB7XG4gICAgICAgIHRoaXMucmVuZGVyRHJvcGRvd25GaWVsZChzZXR0aW5nLCBmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZm9sZGVyJzoge1xuICAgICAgICB0aGlzLnJlbmRlckZvbGRlckZpZWxkKHNldHRpbmcsIGZpZWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdtdWx0aXBsZURyb3Bkb3duJzoge1xuICAgICAgICB0aGlzLnJlbmRlck11bHRpcGxlRHJvcGRvd25GaWVsZChzZXR0aW5nLCBmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2xpZGVyJzoge1xuICAgICAgICB0aGlzLnJlbmRlclNsaWRlckZpZWxkKHNldHRpbmcsIGZpZWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICB0aGlzLnJlbmRlclRleHRGaWVsZChzZXR0aW5nLCBmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcihmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJGb2xkZXJGaWVsZChzZXR0aW5nOiBTZXR0aW5nLCBmaWVsZDogQ29kZUJsb2NrQnVpbGRlckZvbGRlckZpZWxkKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFtST09UX0ZPTERFUl9QQVRIXTogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5jb2RlQmxvY2tCdWlsZGVyLnJvb3RGb2xkZXIpXG4gICAgfTtcbiAgICBjb25zdCBmb2xkZXJQYXRocyA9IHRoaXMuYXBwLnZhdWx0LmdldEFsbEZvbGRlcnMoZmFsc2UpLm1hcCgoZm9sZGVyKSA9PiBmb2xkZXIucGF0aCkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICBmb3IgKGNvbnN0IGZvbGRlclBhdGggb2YgZm9sZGVyUGF0aHMpIHtcbiAgICAgIG9wdGlvbnNbZm9sZGVyUGF0aF0gPSBmb2xkZXJQYXRoO1xuICAgIH1cblxuICAgIG9wdGlvbnNbZmllbGQuZGVmYXVsdFZhbHVlXSA/Pz0gZmllbGQuZGVmYXVsdFZhbHVlO1xuXG4gICAgc2V0dGluZy5hZGREcm9wZG93bigoZHJvcGRvd24pID0+IHtcbiAgICAgIGRyb3Bkb3duXG4gICAgICAgIC5hZGRPcHRpb25zKG9wdGlvbnMpXG4gICAgICAgIC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGZpZWxkLmtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYWRkUmVzZXRCdXR0b24oc2V0dGluZywgZmllbGQsICgpID0+IHtcbiAgICAgICAgZHJvcGRvd24uc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJHcm91cChncm91cDogQ29kZUJsb2NrQnVpbGRlckdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXBFbCA9IHRoaXMuY29udGVudEVsLmNyZWF0ZURpdih7IGNsczogQ3NzQ2xhc3MuQ29kZUJsb2NrQnVpbGRlckdyb3VwIH0pO1xuICAgIGNvbnN0IGhlYWRpbmdTZXR0aW5nID0gbmV3IFNldHRpbmcoZ3JvdXBFbCkuc2V0TmFtZShncm91cC5uYW1lKS5zZXRIZWFkaW5nKCk7XG4gICAgY29uc3QgYm9keUVsID0gZ3JvdXBFbC5jcmVhdGVEaXYoeyBjbHM6IENzc0NsYXNzLkNvZGVCbG9ja0J1aWxkZXJHcm91cEJvZHkgfSk7XG5cbiAgICBncm91cEVsLmFkZENsYXNzKENzc0NsYXNzLklzQ29sbGFwc2VkKTtcbiAgICBoZWFkaW5nU2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICBjb25zdCBncm91cFN0YXRlID0geyBidXR0b24sIGdyb3VwRWwgfTtcbiAgICAgIHRoaXMuZ3JvdXBTdGF0ZXMucHVzaChncm91cFN0YXRlKTtcbiAgICAgIHVwZGF0ZUdyb3VwSWNvbihncm91cFN0YXRlKTtcbiAgICAgIGJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRHcm91cEV4cGFuZGVkKGdyb3VwRWwsIGdyb3VwRWwuaGFzQ2xhc3MoQ3NzQ2xhc3MuSXNDb2xsYXBzZWQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBncm91cC5maWVsZHMpIHtcbiAgICAgIHRoaXMucmVuZGVyRmllbGQoYm9keUVsLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLmlzSW5pdGlhbGx5RXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc2V0R3JvdXBFeHBhbmRlZChncm91cEVsLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlck11bHRpcGxlRHJvcGRvd25GaWVsZChzZXR0aW5nOiBTZXR0aW5nLCBmaWVsZDogQ29kZUJsb2NrQnVpbGRlck11bHRpcGxlRHJvcGRvd25GaWVsZCk6IHZvaWQge1xuICAgIGNvbnN0IGRyb3Bkb3duID0gbmV3IE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQoc2V0dGluZy5jb250cm9sRWwpXG4gICAgICAuYWRkT3B0aW9ucyh0b1JlY29yZChmaWVsZC5vcHRpb25zKSlcbiAgICAgIC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpXG4gICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoZmllbGQua2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICBzZXR0aW5nLmFkZENvbXBvbmVudCgoKSA9PiBkcm9wZG93bik7XG4gICAgdGhpcy5hZGRSZXNldEJ1dHRvbihzZXR0aW5nLCBmaWVsZCwgKCkgPT4ge1xuICAgICAgZHJvcGRvd24uc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3V0cHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmNvZGVCbG9ja0J1aWxkZXIub3V0cHV0KSk7XG4gICAgc2V0dGluZy5zZXR0aW5nRWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuQ29kZUJsb2NrQnVpbGRlck91dHB1dCk7XG4gICAgc2V0dGluZy5hZGRUZXh0QXJlYSgodGV4dEFyZWEpID0+IHtcbiAgICAgIHRoaXMub3V0cHV0Q29tcG9uZW50ID0gdGV4dEFyZWE7XG4gICAgICB0ZXh0QXJlYS5pbnB1dEVsLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgIGJ1dHRvblxuICAgICAgICAuc2V0SWNvbignbHVjaWRlLWNvcHknKVxuICAgICAgICAuc2V0VG9vbHRpcCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmNvZGVCbG9ja0J1aWxkZXIuY29weSkpXG4gICAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmNvcHkoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge1xuICAgICAgYnV0dG9uXG4gICAgICAgIC5zZXRJY29uKCdsdWNpZGUtZmlsZS1pbnB1dCcpXG4gICAgICAgIC5zZXRUb29sdGlwKHQoKCQpID0+IHRoaXMuZWRpdG9yID8gJC5vYnNpZGlhbkxpYi5jb2RlQmxvY2tCdWlsZGVyLmluc2VydCA6ICQub2JzaWRpYW5MaWIuY29kZUJsb2NrQnVpbGRlci5pbnNlcnRVbmF2YWlsYWJsZSkpXG4gICAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmluc2VydCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU2xpZGVyRmllbGQoc2V0dGluZzogU2V0dGluZywgZmllbGQ6IENvZGVCbG9ja0J1aWxkZXJTbGlkZXJGaWVsZCk6IHZvaWQge1xuICAgIHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtcbiAgICAgIHNsaWRlclxuICAgICAgICAuc2V0TGltaXRzKE1hdGgubWluKGZpZWxkLm1pbiwgZmllbGQuZGVmYXVsdFZhbHVlKSwgTWF0aC5tYXgoZmllbGQubWF4LCBmaWVsZC5kZWZhdWx0VmFsdWUpLCBmaWVsZC5zdGVwKVxuICAgICAgICAuc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKVxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShmaWVsZC5rZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFJlc2V0QnV0dG9uKHNldHRpbmcsIGZpZWxkLCAoKSA9PiB7XG4gICAgICAgIHNsaWRlci5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRleHRGaWVsZChzZXR0aW5nOiBTZXR0aW5nLCBmaWVsZDogQ29kZUJsb2NrQnVpbGRlclRleHRGaWVsZCk6IHZvaWQge1xuICAgIHNldHRpbmcuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgdGV4dFxuICAgICAgICAuc2V0UGxhY2Vob2xkZXIoZmllbGQucGxhY2Vob2xkZXIgPz8gJycpXG4gICAgICAgIC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvblBhdHRlcm4gJiYgIWRvZXNNYXRjaFBhdHRlcm4oZmllbGQudmFsaWRhdGlvblBhdHRlcm4sIHZhbHVlKSkge1xuICAgICAgICAgICAgdGV4dC5pbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KHQoKCQpID0+ICQub2JzaWRpYW5MaWIuY29kZUJsb2NrQnVpbGRlci5pbnZhbGlkVmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0ZXh0LmlucHV0RWwuc2V0Q3VzdG9tVmFsaWRpdHkoJycpO1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmllbGQua2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRSZXNldEJ1dHRvbihzZXR0aW5nLCBmaWVsZCwgKCkgPT4ge1xuICAgICAgICB0ZXh0LnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHRleHQuaW5wdXRFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0R3JvdXBFeHBhbmRlZChncm91cEVsOiBIVE1MRWxlbWVudCwgaXNFeHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZ3JvdXBTdGF0ZSBvZiB0aGlzLmdyb3VwU3RhdGVzKSB7XG4gICAgICBjb25zdCBzaG91bGRFeHBhbmQgPSBpc0V4cGFuZGVkICYmIGdyb3VwU3RhdGUuZ3JvdXBFbCA9PT0gZ3JvdXBFbDtcbiAgICAgIGdyb3VwU3RhdGUuZ3JvdXBFbC50b2dnbGVDbGFzcyhDc3NDbGFzcy5Jc0NvbGxhcHNlZCwgIXNob3VsZEV4cGFuZCk7XG4gICAgICB1cGRhdGVHcm91cEljb24oZ3JvdXBTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IENvZGVCbG9ja0J1aWxkZXJWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlQmxvY2sgPSBmb3JtYXRDb2RlQmxvY2soe1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlc1xuICAgIH0pO1xuXG4gICAgLy8gT25seSByZWFjaGVkIG9uY2UgYG9uT3BlbmAgaGFzIHJlbmRlcmVkIHRoZSBvdXRwdXQgYW5kIHRoZSBwcmV2aWV3IGVsZW1lbnQuXG4gICAgY29uc3Qgb3V0cHV0Q29tcG9uZW50ID0gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5vdXRwdXRDb21wb25lbnQpO1xuICAgIG91dHB1dENvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLmNvZGVCbG9jayk7XG4gICAgb3V0cHV0Q29tcG9uZW50LmlucHV0RWwucm93cyA9IHRoaXMuY29kZUJsb2NrLnNwbGl0KCdcXG4nKS5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5vblVwZGF0ZVByZXZpZXcpIHtcbiAgICAgIHRoaXMub25VcGRhdGVQcmV2aWV3KHtcbiAgICAgICAgY29kZUJsb2NrOiB0aGlzLmNvZGVCbG9jayxcbiAgICAgICAgcHJldmlld0VsOiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnByZXZpZXdFbCksXG4gICAgICAgIHZhbHVlczogdGhpcy52YWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBjb2RlIGJsb2NrIGZyb20gaXRzIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVzLlxuICpcbiAqIEVhY2ggZmllbGQgaG9sZGluZyBhIHZhbHVlIG90aGVyIHRoYW4gaXRzIGRlZmF1bHQsIG9yIG1hcmtlZCB7QGxpbmsgQ29kZUJsb2NrQnVpbGRlckZpZWxkQmFzZS5pc1JlcXVpcmVkfSwgd3JpdGVzIG9uZVxuICogbGluZSwgaW4gdGhlIG9yZGVyIG9mIHRoZSBmaWVsZHM7IGFuIGVtcHR5IHZhbHVlIHdyaXRlcyBub3RoaW5nLiBUaGUgZmVuY2UgaXMgb25lIGJhY2t0aWNrIGxvbmdlciB0aGFuIHRoZSBsb25nZXN0XG4gKiBiYWNrdGljayBydW4gaW4gdGhlIGxpbmVzLCBhbmQgbmV2ZXIgc2hvcnRlciB0aGFuIHRocmVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGRzLCB0aGUgbGFuZ3VhZ2UgYW5kIHRoZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBibG9jaywgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDb2RlQmxvY2socGFyYW1zOiBGb3JtYXRDb2RlQmxvY2tQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBmbGF0dGVuRmllbGRzKHBhcmFtcy5maWVsZHMpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVzLmdldChmaWVsZC5rZXkpID8/IGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdFZhbHVlKGZpZWxkLCB2YWx1ZSk7XG4gICAgaWYgKGZvcm1hdHRlZFZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZC5pc1JlcXVpcmVkICYmIGlzU2FtZVZhbHVlKHZhbHVlLCBmaWVsZC5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKGZpZWxkLnNob3VsZE9taXRLZXkgPyBmb3JtYXR0ZWRWYWx1ZSA6IGAke2ZpZWxkLmtleX06ICR7Zm9ybWF0dGVkVmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCBib2R5ID0gbGluZXMuam9pbignXFxuJyk7XG4gIGNvbnN0IGxvbmdlc3RCYWNrdGlja1J1biA9IE1hdGgubWF4KDAsIC4uLkFycmF5LmZyb20oYm9keS5tYXRjaEFsbCgvYCsvZyksIChtYXRjaCkgPT4gbWF0Y2hbMF0ubGVuZ3RoKSk7XG4gIGNvbnN0IGZlbmNlID0gJ2AnLnJlcGVhdChNYXRoLm1heChNSU5fRkVOQ0VfTEVOR1RILCBsb25nZXN0QmFja3RpY2tSdW4gKyAxKSk7XG4gIHJldHVybiBsaW5lcy5sZW5ndGggPT09IDAgPyBgJHtmZW5jZX0ke3BhcmFtcy5sYW5ndWFnZX1cXG4ke2ZlbmNlfWAgOiBgJHtmZW5jZX0ke3BhcmFtcy5sYW5ndWFnZX1cXG4ke2JvZHl9XFxuJHtmZW5jZX1gO1xufVxuXG4vKipcbiAqIE9wZW5zIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWVsZHMgb2YgdGhlIGNvZGUgYmxvY2sgYW5kIGhvdyB0byBwcmVzZW50IHRoZW0uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvZGUgYmxvY2sgd2hlbiB0aGUgdXNlciBpbnNlcnRlZCBpdCBpbnRvIHRoZSBub3RlLCBvciB3aXRoIGBudWxsYFxuICogd2hlbiB0aGUgbW9kYWwgd2FzIGNsb3NlZCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93Q29kZUJsb2NrQnVpbGRlcihwYXJhbXM6IFNob3dDb2RlQmxvY2tCdWlsZGVyUGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBzaG93TW9kYWw8bnVsbCB8IHN0cmluZz4oKHByb21pc2VSZXNvbHZlKSA9PlxuICAgIG5ldyBDb2RlQmxvY2tCdWlsZGVyTW9kYWwoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcHJvbWlzZVJlc29sdmVcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBkb2VzTWF0Y2hQYXR0ZXJuKHBhdHRlcm46IFJlZ0V4cCwgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBwYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuRmllbGRzKGlucHV0czogcmVhZG9ubHkgQ29kZUJsb2NrQnVpbGRlcklucHV0W10pOiBDb2RlQmxvY2tCdWlsZGVyRmllbGRbXSB7XG4gIHJldHVybiBpbnB1dHMuZmxhdE1hcCgoaW5wdXQpID0+IGlucHV0LnR5cGUgPT09ICdncm91cCcgPyBpbnB1dC5maWVsZHMgOiBbaW5wdXRdKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoZmllbGQ6IENvZGVCbG9ja0J1aWxkZXJGaWVsZCwgdmFsdWU6IENvZGVCbG9ja0J1aWxkZXJWYWx1ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IGZpZWxkLnR5cGUgPT09ICdtdWx0aXBsZURyb3Bkb3duJyA/IGZpZWxkLnNlcGFyYXRvciA/PyBERUZBVUxUX1NFUEFSQVRPUiA6IERFRkFVTFRfU0VQQVJBVE9SO1xuICByZXR1cm4gaXNTdHJpbmdBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKHNlcGFyYXRvcikgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVWYWx1ZShhOiBDb2RlQmxvY2tCdWlsZGVyVmFsdWUsIGI6IENvZGVCbG9ja0J1aWxkZXJWYWx1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTdHJpbmdBcnJheShhKSAmJiBpc1N0cmluZ0FycmF5KGIpID8gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBiW2luZGV4XSkgOiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZ0FycmF5KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgcmVhZG9ubHkgc3RyaW5nW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHRvUmVjb3JkKG9wdGlvbnM6IENvZGVCbG9ja0J1aWxkZXJPcHRpb25zKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBpc1N0cmluZ0FycmF5KG9wdGlvbnMpID8gT2JqZWN0LmZyb21FbnRyaWVzKG9wdGlvbnMubWFwKChvcHRpb24pID0+IFtvcHRpb24sIG9wdGlvbl0pKSA6IHsgLi4ub3B0aW9ucyB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVHcm91cEljb24oZ3JvdXBTdGF0ZTogR3JvdXBTdGF0ZSk6IHZvaWQge1xuICBncm91cFN0YXRlLmJ1dHRvbi5zZXRJY29uKGdyb3VwU3RhdGUuZ3JvdXBFbC5oYXNDbGFzcyhDc3NDbGFzcy5Jc0NvbGxhcHNlZCkgPyAnbHVjaWRlLWNoZXZyb24tZG93bicgOiAnbHVjaWRlLWNoZXZyb24tdXAnKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1AsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsaUNBQWlDO0FBQzFDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBa1VQLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sbUJBQW1CO0FBU3pCLE1BQU0sOEJBQThCLFVBQXlCO0FBQUEsRUFDbkQsWUFBWTtBQUFBLEVBQ0g7QUFBQSxFQUNBO0FBQUEsRUFDQSxjQUE0QixDQUFDO0FBQUEsRUFDdEMsb0JBQW1DO0FBQUEsRUFDMUI7QUFBQSxFQUNBO0FBQUEsRUFDVCxrQkFBNEM7QUFBQSxFQUM1QyxZQUFnQztBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxTQUFTLG9CQUFJLElBQW1DO0FBQUEsRUFFMUQsWUFBWSxRQUFnRDtBQUNqRSxVQUFNLE1BQU07QUFDWixTQUFLLGNBQWMsU0FBUyxxQkFBcUI7QUFDakQsU0FBSyxTQUFTLE9B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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference path="../library-references.d.mts" />
|
|
2
2
|
export * as 'alert' from './alert.mjs';
|
|
3
|
+
export * as 'code-block-builder' from './code-block-builder.mjs';
|
|
3
4
|
export * as 'confirm' from './confirm.mjs';
|
|
4
5
|
export * as 'minimizable-modal' from './minimizable-modal.mjs';
|
|
5
6
|
export * as 'modal-command-builder' from './modal-command-builder.mjs';
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import * as alert from "./alert.mjs";
|
|
7
|
+
import * as code_block_builder from "./code-block-builder.mjs";
|
|
7
8
|
import * as confirm from "./confirm.mjs";
|
|
8
9
|
import * as minimizable_modal from "./minimizable-modal.mjs";
|
|
9
10
|
import * as modal_command_builder from "./modal-command-builder.mjs";
|
|
@@ -14,6 +15,7 @@ import * as select_option from "./select-option.mjs";
|
|
|
14
15
|
import * as suggest_modal_command_builder from "./suggest-modal-command-builder.mjs";
|
|
15
16
|
export {
|
|
16
17
|
alert,
|
|
18
|
+
code_block_builder as "code-block-builder",
|
|
17
19
|
confirm,
|
|
18
20
|
minimizable_modal as "minimizable-modal",
|
|
19
21
|
modal,
|
|
@@ -23,4 +25,4 @@ export {
|
|
|
23
25
|
select_option as "select-option",
|
|
24
26
|
suggest_modal_command_builder as "suggest-modal-command-builder"
|
|
25
27
|
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL21vZGFscy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhbGVydCcgZnJvbSAnLi9hbGVydC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1idWlsZGVyJyBmcm9tICcuL2NvZGUtYmxvY2stYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnY29uZmlybScgZnJvbSAnLi9jb25maXJtLnRzJztcbmV4cG9ydCAqIGFzICdtaW5pbWl6YWJsZS1tb2RhbCcgZnJvbSAnLi9taW5pbWl6YWJsZS1tb2RhbC50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwnIGZyb20gJy4vbW9kYWwudHMnO1xuZXhwb3J0ICogYXMgJ3Byb21wdCcgZnJvbSAnLi9wcm9tcHQudHMnO1xuZXhwb3J0ICogYXMgJ3NlbGVjdC1pdGVtJyBmcm9tICcuL3NlbGVjdC1pdGVtLnRzJztcbmV4cG9ydCAqIGFzICdzZWxlY3Qtb3B0aW9uJyBmcm9tICcuL3NlbGVjdC1vcHRpb24udHMnO1xuZXhwb3J0ICogYXMgJ3N1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL3N1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWSxXQUFhO0FBQ3pCLFlBQVlBLHdCQUEwQjtBQUN0QyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLFdBQWE7QUFDekIsWUFBWSxZQUFjO0FBQzFCLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsbUNBQXFDOyIsCiAgIm5hbWVzIjogWyJjb2RlLWJsb2NrLWJ1aWxkZXIiLCAibWluaW1pemFibGUtbW9kYWwiLCAibW9kYWwtY29tbWFuZC1idWlsZGVyIiwgInNlbGVjdC1pdGVtIiwgInNlbGVjdC1vcHRpb24iLCAic3VnZ2VzdC1tb2RhbC1jb21tYW5kLWJ1aWxkZXIiXQp9Cg==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference path="../library-references.d.mts" />
|
|
2
2
|
export * as 'plugin-api' from './plugin-api.mjs';
|
|
3
|
+
export * as 'plugin-async-cleanup' from './plugin-async-cleanup.mjs';
|
|
3
4
|
export * as 'plugin-context' from './plugin-context.mjs';
|
|
4
5
|
export * as 'plugin-event-source' from './plugin-event-source.mjs';
|
|
5
6
|
export * as 'plugin-install-state' from './plugin-install-state.mjs';
|
|
@@ -4,6 +4,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import * as plugin_api from "./plugin-api.mjs";
|
|
7
|
+
import * as plugin_async_cleanup from "./plugin-async-cleanup.mjs";
|
|
7
8
|
import * as plugin_context from "./plugin-context.mjs";
|
|
8
9
|
import * as plugin_event_source from "./plugin-event-source.mjs";
|
|
9
10
|
import * as plugin_install_state from "./plugin-install-state.mjs";
|
|
@@ -14,6 +15,7 @@ import * as settings_migration_api from "./settings-migration-api.mjs";
|
|
|
14
15
|
export {
|
|
15
16
|
plugin,
|
|
16
17
|
plugin_api as "plugin-api",
|
|
18
|
+
plugin_async_cleanup as "plugin-async-cleanup",
|
|
17
19
|
plugin_context as "plugin-context",
|
|
18
20
|
plugin_event_source as "plugin-event-source",
|
|
19
21
|
plugin_install_state as "plugin-install-state",
|
|
@@ -21,4 +23,4 @@ export {
|
|
|
21
23
|
plugin_settings_tab as "plugin-settings-tab",
|
|
22
24
|
settings_migration_api as "settings-migration-api"
|
|
23
25
|
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdwbHVnaW4tYXBpJyBmcm9tICcuL3BsdWdpbi1hcGkudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1hc3luYy1jbGVhbnVwJyBmcm9tICcuL3BsdWdpbi1hc3luYy1jbGVhbnVwLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY29udGV4dCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWV2ZW50LXNvdXJjZScgZnJvbSAnLi9wbHVnaW4tZXZlbnQtc291cmNlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4taW5zdGFsbC1zdGF0ZScgZnJvbSAnLi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWxpZmVjeWNsZS1ldmVudHMnIGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWInIGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luJyBmcm9tICcuL3BsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnc2V0dGluZ3MtbWlncmF0aW9uLWFwaScgZnJvbSAnLi9zZXR0aW5ncy1taWdyYXRpb24tYXBpLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEsZ0JBQWtCO0FBQzlCLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVksWUFBYztBQUMxQixZQUFZQyw0QkFBOEI7IiwKICAibmFtZXMiOiBbInBsdWdpbi1hcGkiLCAicGx1Z2luLWFzeW5jLWNsZWFudXAiLCAicGx1Z2luLWNvbnRleHQiLCAicGx1Z2luLWV2ZW50LXNvdXJjZSIsICJwbHVnaW4taW5zdGFsbC1zdGF0ZSIsICJwbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cyIsICJwbHVnaW4tc2V0dGluZ3MtdGFiIiwgInNldHRpbmdzLW1pZ3JhdGlvbi1hcGkiXQp9Cg==
|