obsidian-dev-utils 82.0.0-beta.7 → 82.0.0-beta.9
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/CHANGELOG.md +10 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-lock.cjs +89 -11
- package/dist/lib/cjs/obsidian/editor-lock.d.cts +32 -3
- package/dist/lib/cjs/obsidian/editor.cjs +16 -27
- package/dist/lib/cjs/obsidian/editor.d.cts +12 -11
- package/dist/lib/cjs/obsidian/file-manager.cjs +1 -1
- package/dist/lib/cjs/obsidian/file-manager.d.cts +2 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +5 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +1 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
- package/dist/lib/cjs/obsidian/vault.cjs +1 -1
- package/dist/lib/cjs/obsidian/vault.d.cts +1 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-lock.d.mts +32 -3
- package/dist/lib/esm/obsidian/editor-lock.mjs +90 -15
- package/dist/lib/esm/obsidian/editor.d.mts +12 -11
- package/dist/lib/esm/obsidian/editor.mjs +15 -25
- package/dist/lib/esm/obsidian/file-manager.d.mts +2 -2
- package/dist/lib/esm/obsidian/file-manager.mjs +1 -1
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +5 -2
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +1 -1
- package/dist/lib/esm/obsidian/vault.d.mts +1 -1
- package/dist/lib/esm/obsidian/vault.mjs +1 -1
- package/package.json +1 -1
|
@@ -128,11 +128,13 @@ __export(editor_lock_exports, {
|
|
|
128
128
|
EditorLockComponent: () => EditorLockComponent,
|
|
129
129
|
isEditorLockedForPath: () => isEditorLockedForPath,
|
|
130
130
|
lockEditorForPath: () => lockEditorForPath,
|
|
131
|
+
requestEditorUnlockForPath: () => requestEditorUnlockForPath,
|
|
131
132
|
unlockEditorForPath: () => unlockEditorForPath
|
|
132
133
|
});
|
|
133
134
|
module.exports = __toCommonJS(editor_lock_exports);
|
|
134
135
|
var import_implementations = require('@obsidian-typings/obsidian-public-latest/implementations');
|
|
135
136
|
var import_obsidian = require('obsidian');
|
|
137
|
+
var import_async = require('../async.cjs');
|
|
136
138
|
var import_disposable = require('../disposable.cjs');
|
|
137
139
|
var import_function = require('../function.cjs');
|
|
138
140
|
var import_obsidian_dev_utils_state = require('../obsidian-dev-utils-state.cjs');
|
|
@@ -141,12 +143,14 @@ var import_component_ex = require('./components/component-ex.cjs');
|
|
|
141
143
|
var import_editor = require('./editor.cjs');
|
|
142
144
|
var import_file_system = require('./file-system.cjs');
|
|
143
145
|
var import_i18n = require('./i18n/i18n.cjs');
|
|
146
|
+
var import_confirm = require('./modals/confirm.cjs');
|
|
144
147
|
var import_plugin_id = require('./plugin/plugin-id.cjs');
|
|
145
148
|
const EDITOR_LOCK_STATE_KEY = "editorLock";
|
|
146
149
|
const LOCK_ICON_ID = "lock";
|
|
147
150
|
const LOCK_INDICATOR_CSS_CLASS = "obsidian-dev-utils-lock-indicator";
|
|
148
151
|
const STATUS_BAR_ITEM_CSS_CLASS = "status-bar-item";
|
|
149
152
|
const STATUS_BAR_CSS_SELECTOR = ".status-bar";
|
|
153
|
+
const UNLOCK_ICON_ID = "unlock";
|
|
150
154
|
class EditorLockEventsComponent extends import_component_ex.ComponentEx {
|
|
151
155
|
constructor(app, onChange) {
|
|
152
156
|
super();
|
|
@@ -163,6 +167,7 @@ class EditorLockEventsComponent extends import_component_ex.ComponentEx {
|
|
|
163
167
|
}
|
|
164
168
|
}
|
|
165
169
|
class EditorPathLockManager {
|
|
170
|
+
abortControllersByPath = /* @__PURE__ */ new Map();
|
|
166
171
|
eventsComponent;
|
|
167
172
|
indicatorsByView = /* @__PURE__ */ new Map();
|
|
168
173
|
lockCountByPluginIdByPath = /* @__PURE__ */ new Map();
|
|
@@ -170,7 +175,7 @@ class EditorPathLockManager {
|
|
|
170
175
|
isLocked(app, pathOrFile) {
|
|
171
176
|
return this.isPathLocked((0, import_file_system.getPath)(app, pathOrFile));
|
|
172
177
|
}
|
|
173
|
-
lock(app, pathOrFile, pluginId) {
|
|
178
|
+
lock(app, pathOrFile, pluginId, abortController) {
|
|
174
179
|
const path = (0, import_file_system.getPath)(app, pathOrFile);
|
|
175
180
|
let lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
176
181
|
if (!lockCountByPluginId) {
|
|
@@ -178,15 +183,49 @@ class EditorPathLockManager {
|
|
|
178
183
|
this.lockCountByPluginIdByPath.set(path, lockCountByPluginId);
|
|
179
184
|
}
|
|
180
185
|
lockCountByPluginId.set(pluginId, (lockCountByPluginId.get(pluginId) ?? 0) + 1);
|
|
186
|
+
if (abortController) {
|
|
187
|
+
let abortControllers = this.abortControllersByPath.get(path);
|
|
188
|
+
if (!abortControllers) {
|
|
189
|
+
abortControllers = /* @__PURE__ */ new Set();
|
|
190
|
+
this.abortControllersByPath.set(path, abortControllers);
|
|
191
|
+
}
|
|
192
|
+
abortControllers.add(abortController);
|
|
193
|
+
}
|
|
181
194
|
this.ensureSubscribed(app);
|
|
182
195
|
this.reconcile(app);
|
|
183
196
|
return new import_disposable.CallbackDisposable({
|
|
184
197
|
callback: () => {
|
|
198
|
+
if (abortController) {
|
|
199
|
+
const abortControllers = this.abortControllersByPath.get(path);
|
|
200
|
+
(0, import_type_guards.assertNonNullable)(abortControllers);
|
|
201
|
+
abortControllers.delete(abortController);
|
|
202
|
+
if (abortControllers.size === 0) {
|
|
203
|
+
this.abortControllersByPath.delete(path);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
185
206
|
this.unlockPath(app, path, pluginId);
|
|
186
207
|
},
|
|
187
208
|
multipleDisposeBehavior: import_disposable.MultipleDisposeBehavior.Ignore
|
|
188
209
|
});
|
|
189
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Aborts every {@link AbortController} currently registered for the note at the given path, which
|
|
213
|
+
* cancels the operations holding the lock. Each operation releases its own lock in its `finally`
|
|
214
|
+
* when it observes the abort, so this does not unlock the path directly. A no-op when no controller
|
|
215
|
+
* is registered for the path.
|
|
216
|
+
*
|
|
217
|
+
* @param app - The Obsidian app instance.
|
|
218
|
+
* @param pathOrFile - The path or file of the note to request an unlock for.
|
|
219
|
+
*/
|
|
220
|
+
requestUnlock(app, pathOrFile) {
|
|
221
|
+
const abortControllers = this.abortControllersByPath.get((0, import_file_system.getPath)(app, pathOrFile));
|
|
222
|
+
if (!abortControllers) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
for (const controller of abortControllers) {
|
|
226
|
+
controller.abort();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
190
229
|
unlock(app, pathOrFile, pluginId) {
|
|
191
230
|
this.unlockPath(app, (0, import_file_system.getPath)(app, pathOrFile), pluginId);
|
|
192
231
|
}
|
|
@@ -198,14 +237,16 @@ class EditorPathLockManager {
|
|
|
198
237
|
}
|
|
199
238
|
this.reconcileAndCleanup(app);
|
|
200
239
|
}
|
|
201
|
-
createIndicators(view, tooltip) {
|
|
240
|
+
createIndicators(app, view, path, tooltip) {
|
|
202
241
|
const actionIconEl = view.addAction(LOCK_ICON_ID, tooltip, import_function.noop);
|
|
242
|
+
this.registerUnlockMenu(app, actionIconEl, () => path);
|
|
203
243
|
let tabIconEl = null;
|
|
204
244
|
const tabStatusContainerEl = view.leaf.tabHeaderStatusContainerEl;
|
|
205
245
|
if (tabStatusContainerEl) {
|
|
206
246
|
tabIconEl = tabStatusContainerEl.createSpan({ cls: LOCK_INDICATOR_CSS_CLASS });
|
|
207
247
|
(0, import_obsidian.setIcon)(tabIconEl, LOCK_ICON_ID);
|
|
208
248
|
(0, import_obsidian.setTooltip)(tabIconEl, tooltip);
|
|
249
|
+
this.registerUnlockMenu(app, tabIconEl, () => path);
|
|
209
250
|
}
|
|
210
251
|
return {
|
|
211
252
|
actionIconEl,
|
|
@@ -224,12 +265,14 @@ class EditorPathLockManager {
|
|
|
224
265
|
isPathLocked(path) {
|
|
225
266
|
return (this.lockCountByPluginIdByPath.get(path)?.size ?? 0) > 0;
|
|
226
267
|
}
|
|
227
|
-
|
|
268
|
+
lockingPluginNames(app, path) {
|
|
228
269
|
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
229
270
|
(0, import_type_guards.assertNonNullable)(lockCountByPluginId);
|
|
271
|
+
return Array.from(lockCountByPluginId.keys()).map((pluginId) => app.plugins.manifests[pluginId]?.name ?? pluginId);
|
|
272
|
+
}
|
|
273
|
+
lockTooltip(app, path) {
|
|
230
274
|
const header = (0, import_i18n.t)(($) => $.obsidianDevUtils.editorLock.lockedByTooltip);
|
|
231
|
-
|
|
232
|
-
return [header, ...pluginNames].join("\n");
|
|
275
|
+
return [header, ...this.lockingPluginNames(app, path)].join("\n");
|
|
233
276
|
}
|
|
234
277
|
reconcile(app) {
|
|
235
278
|
const viewsToLock = /* @__PURE__ */ new Set();
|
|
@@ -245,18 +288,18 @@ class EditorPathLockManager {
|
|
|
245
288
|
if (this.isPathLocked(path)) {
|
|
246
289
|
viewsToLock.add(view);
|
|
247
290
|
const tooltip = this.lockTooltip(app, path);
|
|
291
|
+
(0, import_editor.toggleEditorReadOnly)(view.editor, true);
|
|
248
292
|
const indicators = this.indicatorsByView.get(view);
|
|
249
293
|
if (indicators) {
|
|
250
294
|
this.updateIndicatorTooltips(indicators, tooltip);
|
|
251
295
|
} else {
|
|
252
|
-
(
|
|
253
|
-
this.indicatorsByView.set(view, this.createIndicators(view, tooltip));
|
|
296
|
+
this.indicatorsByView.set(view, this.createIndicators(app, view, path, tooltip));
|
|
254
297
|
}
|
|
255
298
|
}
|
|
256
299
|
}
|
|
257
300
|
for (const [view, indicators] of this.indicatorsByView) {
|
|
258
301
|
if (!viewsToLock.has(view)) {
|
|
259
|
-
(0, import_editor.
|
|
302
|
+
(0, import_editor.toggleEditorReadOnly)(view.editor, false);
|
|
260
303
|
indicators.actionIconEl.remove();
|
|
261
304
|
indicators.tabIconEl?.remove();
|
|
262
305
|
this.indicatorsByView.delete(view);
|
|
@@ -271,6 +314,33 @@ class EditorPathLockManager {
|
|
|
271
314
|
this.eventsComponent = void 0;
|
|
272
315
|
}
|
|
273
316
|
}
|
|
317
|
+
registerUnlockMenu(app, el, getContextPath) {
|
|
318
|
+
el.addEventListener("contextmenu", (evt) => {
|
|
319
|
+
evt.preventDefault();
|
|
320
|
+
const path = getContextPath();
|
|
321
|
+
if (path === void 0) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const menu = new import_obsidian.Menu();
|
|
325
|
+
menu.addItem((item) => {
|
|
326
|
+
item.setTitle((0, import_i18n.t)(($) => $.obsidianDevUtils.editorLock.unlockMenuItem)).setIcon(UNLOCK_ICON_ID).onClick((0, import_async.convertAsyncToSync)(async () => {
|
|
327
|
+
const isConfirmed = await (0, import_confirm.confirm)({
|
|
328
|
+
app,
|
|
329
|
+
message: this.unlockConfirmMessage(app, path),
|
|
330
|
+
title: (0, import_i18n.t)(($) => $.obsidianDevUtils.editorLock.unlockConfirmTitle)
|
|
331
|
+
});
|
|
332
|
+
if (isConfirmed) {
|
|
333
|
+
this.requestUnlock(app, path);
|
|
334
|
+
}
|
|
335
|
+
}));
|
|
336
|
+
});
|
|
337
|
+
menu.showAtMouseEvent(evt);
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
unlockConfirmMessage(app, path) {
|
|
341
|
+
const header = (0, import_i18n.t)(($) => $.obsidianDevUtils.editorLock.unlockConfirmMessage);
|
|
342
|
+
return [header, ...this.lockingPluginNames(app, path)].join("\n");
|
|
343
|
+
}
|
|
274
344
|
unlockPath(app, path, pluginId) {
|
|
275
345
|
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
276
346
|
if (!lockCountByPluginId) {
|
|
@@ -312,6 +382,7 @@ class EditorPathLockManager {
|
|
|
312
382
|
}
|
|
313
383
|
this.statusBarItemEl = statusBarEl.createDiv({ cls: [STATUS_BAR_ITEM_CSS_CLASS, LOCK_INDICATOR_CSS_CLASS] });
|
|
314
384
|
(0, import_obsidian.setIcon)(this.statusBarItemEl, LOCK_ICON_ID);
|
|
385
|
+
this.registerUnlockMenu(app, this.statusBarItemEl, () => app.workspace.getActiveViewOfType(import_obsidian.MarkdownView)?.file?.path);
|
|
315
386
|
}
|
|
316
387
|
(0, import_obsidian.setTooltip)(this.statusBarItemEl, this.lockTooltip(app, activePath));
|
|
317
388
|
}
|
|
@@ -347,10 +418,13 @@ class EditorLockComponent extends import_component_ex.ComponentEx {
|
|
|
347
418
|
* with a dispose of the returned {@link Disposable} (ideally via `using`) or {@link unlockForPath}.
|
|
348
419
|
*
|
|
349
420
|
* @param pathOrFile - The path or file of the note to lock.
|
|
421
|
+
* @param options - Optional locking options. Pass an
|
|
422
|
+
* {@link EditorLockComponentLockForPathOptions.abortController} to make the lock cancelable via the
|
|
423
|
+
* indicator's right-click "unlock" menu or {@link requestEditorUnlockForPath}.
|
|
350
424
|
* @returns A {@link Disposable} that releases this lock when disposed. Disposing more than once is a no-op.
|
|
351
425
|
*/
|
|
352
|
-
lockForPath(pathOrFile) {
|
|
353
|
-
return getManager().lock(this.app, pathOrFile, this.pluginId);
|
|
426
|
+
lockForPath(pathOrFile, options) {
|
|
427
|
+
return getManager().lock(this.app, pathOrFile, this.pluginId, options?.abortController);
|
|
354
428
|
}
|
|
355
429
|
/**
|
|
356
430
|
* Releases every lock still held by this plugin when the component (and thus the plugin) unloads,
|
|
@@ -375,6 +449,9 @@ function isEditorLockedForPath(app, pathOrFile) {
|
|
|
375
449
|
function lockEditorForPath(app, pathOrFile) {
|
|
376
450
|
return getManager().lock(app, pathOrFile, (0, import_plugin_id.getPluginId)());
|
|
377
451
|
}
|
|
452
|
+
function requestEditorUnlockForPath(app, pathOrFile) {
|
|
453
|
+
getManager().requestUnlock(app, pathOrFile);
|
|
454
|
+
}
|
|
378
455
|
function unlockEditorForPath(app, pathOrFile) {
|
|
379
456
|
getManager().unlock(app, pathOrFile, (0, import_plugin_id.getPluginId)());
|
|
380
457
|
}
|
|
@@ -386,6 +463,7 @@ function getManager() {
|
|
|
386
463
|
EditorLockComponent,
|
|
387
464
|
isEditorLockedForPath,
|
|
388
465
|
lockEditorForPath,
|
|
466
|
+
requestEditorUnlockForPath,
|
|
389
467
|
unlockEditorForPath
|
|
390
468
|
});
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayBsb2NrRWRpdG9yfSAvIHtAbGluayB1bmxvY2tFZGl0b3J9IGZyb20gYC4vZWRpdG9yLnRzYCB0b2dnbGUgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhXG4gKiBzaW5nbGUge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGluZGljYXRvciBpbiBpdHMgdGFiIGhlYWRlciwgaXRzIHZpZXcgYWN0aW9uIGJhciwgYW5kXG4gKiB0aGUgc3RhdHVzIGJhciAod2hpbGUgdGhlIG5vdGUgaXMgYWN0aXZlKS4gTG9ja3MgYXJlIHJlZmVyZW5jZS1jb3VudGVkIHBlciBsb2NraW5nIHBsdWdpbiwgc29cbiAqIG5lc3RlZCBvciBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZVxuICogbGFzdCBsb2NrIGlzIHJlbGVhc2VkIFx1MjAxNCBhbmQgdGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKlxuICogVGhlIGFjcXVpcmVycyByZXR1cm4gYSB7QGxpbmsgRGlzcG9zYWJsZX0sIHNvIHRoZSBwcmVmZXJyZWQgY2FsbCBzdHlsZSBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb25cbiAqIHRoYXQgcmVsZWFzZXMgYXV0b21hdGljYWxseSBhdCBzY29wZSBleGl0IChpbmNsdWRpbmcgb24gdGhyb3cpOlxuICpcbiAqIGBgYHRzXG4gKiB1c2luZyBfbG9jayA9IGxvY2tFZGl0b3JGb3JQYXRoKGFwcCwgcGF0aCk7XG4gKiAvLyAuLi4gbG9uZy1ydW5uaW5nIHdvcmsgKHByb2Nlc3MsIHByb2Nlc3NGcm9udE1hdHRlciwgbWVyZ2Uvc3BsaXQpIC4uLlxuICogLy8gYXV0by11bmxvY2tlZCBhdCBzY29wZSBleGl0XG4gKiBgYGBcbiAqXG4gKiBUaGUgZXhwbGljaXQge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IHBhaXIgcmVtYWlucyBhdmFpbGFibGUgZm9yIG5vbi1gdXNpbmdgIGNhbGwgc2l0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Jcbn0gZnJvbSAnLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7XG4gIGxvY2tFZGl0b3IsXG4gIHVubG9ja0VkaXRvclxufSBmcm9tICcuL2VkaXRvci50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luSWQgfSBmcm9tICcuL3BsdWdpbi9wbHVnaW4taWQudHMnO1xuXG5jb25zdCBFRElUT1JfTE9DS19TVEFURV9LRVkgPSAnZWRpdG9yTG9jayc7XG5jb25zdCBMT0NLX0lDT05fSUQgPSAnbG9jayc7XG5jb25zdCBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1MgPSAnb2JzaWRpYW4tZGV2LXV0aWxzLWxvY2staW5kaWNhdG9yJztcbmNvbnN0IFNUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1MgPSAnc3RhdHVzLWJhci1pdGVtJztcbmNvbnN0IFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SID0gJy5zdGF0dXMtYmFyJztcblxuaW50ZXJmYWNlIExvY2tJbmRpY2F0b3JzIHtcbiAgcmVhZG9ubHkgYWN0aW9uSWNvbkVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgdGFiSWNvbkVsOiBIVE1MRWxlbWVudCB8IG51bGw7XG59XG5cbi8qKlxuICogU3Vic2NyaWJlcyB0byB0aGUgd29ya3NwYWNlIGV2ZW50cyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgbG9jayByZWNvbmNpbGUuIEltcGxlbWVudGVkIGFzIGFcbiAqIHtAbGluayBDb21wb25lbnRFeH0gc28gdGhlIHN1YnNjcmlwdGlvbnMgYXJlIHJlZ2lzdGVyZWQgb24gYGxvYWQoKWAgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBvblxuICogYHVubG9hZCgpYCwgaW5zdGVhZCBvZiBiZWluZyB0cmFja2VkIGFuZCB0b3JuIGRvd24gYnkgaGFuZC5cbiAqL1xuY2xhc3MgRWRpdG9yTG9ja0V2ZW50c0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHAsIHByaXZhdGUgcmVhZG9ubHkgb25DaGFuZ2U6ICgpID0+IHZvaWQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCdhY3RpdmUtbGVhZi1jaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKSk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignbGF5b3V0LWNoYW5nZScsIHRoaXMub25DaGFuZ2UpKTtcbiAgICAvLyBTYW1lLWxlYWYgbmF2aWdhdGlvbiB0byBhbm90aGVyIG5vdGUgZmlyZXMgbm8gbGVhZi9sYXlvdXQgY2hhbmdlOyB3aXRob3V0IHRoaXMgaXQgc3RheXMgcmVhZC1vbmx5LlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtb3BlbicsIHRoaXMub25DaGFuZ2UpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYWNrcyByZWZlcmVuY2UtY291bnRlZCwgcGF0aC1zY29wZWQgZWRpdG9yIGxvY2tzIGFuZCBrZWVwcyBldmVyeSBvcGVuIHtAbGluayBNYXJrZG93blZpZXd9IGluXG4gKiBzeW5jIHdpdGggdGhlIGxvY2tlZC1wYXRoIHNldC4gQSBzaW5nbGUgaW5zdGFuY2UgbGl2ZXMgb24gdGhlIHNoYXJlZCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBzdGF0ZS5cbiAqIEZvciBlYWNoIGxvY2tlZCBwYXRoIHRoZSBsb2NrIGNvdW50IGlzIHRyYWNrZWQgcGVyIGxvY2tpbmcgcGx1Z2luLCBzbyB0aGUgaW5kaWNhdG9ycyBjYW4gcmVwb3J0XG4gKiB3aGljaCBwbHVnaW5zIGN1cnJlbnRseSBob2xkIGEgbG9jay5cbiAqL1xuY2xhc3MgRWRpdG9yUGF0aExvY2tNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBldmVudHNDb21wb25lbnQ6IEVkaXRvckxvY2tFdmVudHNDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kaWNhdG9yc0J5VmlldyA9IG5ldyBNYXA8TWFya2Rvd25WaWV3LCBMb2NrSW5kaWNhdG9ycz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIG51bWJlcj4+KCk7XG4gIHByaXZhdGUgc3RhdHVzQmFySXRlbUVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBpc0xvY2tlZChhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGF0aExvY2tlZChnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSkpO1xuICB9XG5cbiAgcHVibGljIGxvY2soYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIHBsdWdpbklkOiBzdHJpbmcpOiBEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICAgIGxldCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoIWxvY2tDb3VudEJ5UGx1Z2luSWQpIHtcbiAgICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNldChwYXRoLCBsb2NrQ291bnRCeVBsdWdpbklkKTtcbiAgICB9XG4gICAgbG9ja0NvdW50QnlQbHVnaW5JZC5zZXQocGx1Z2luSWQsIChsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMCkgKyAxKTtcbiAgICB0aGlzLmVuc3VyZVN1YnNjcmliZWQoYXBwKTtcbiAgICB0aGlzLnJlY29uY2lsZShhcHApO1xuXG4gICAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgcGF0aCwgcGx1Z2luSWQpO1xuICAgICAgfSxcbiAgICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmxvY2soYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9ja1BhdGgoYXBwLCBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksIHBsdWdpbklkKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmxvY2tBbGxGb3JQbHVnaW4oYXBwOiBBcHAsIHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBsb2NrQ291bnRCeVBsdWdpbklkXSBvZiB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGgpIHtcbiAgICAgIGlmIChsb2NrQ291bnRCeVBsdWdpbklkLmRlbGV0ZShwbHVnaW5JZCkgJiYgbG9ja0NvdW50QnlQbHVnaW5JZC5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5kZWxldGUocGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVjb25jaWxlQW5kQ2xlYW51cChhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbmRpY2F0b3JzKHZpZXc6IE1hcmtkb3duVmlldywgdG9vbHRpcDogc3RyaW5nKTogTG9ja0luZGljYXRvcnMge1xuICAgIGNvbnN0IGFjdGlvbkljb25FbCA9IHZpZXcuYWRkQWN0aW9uKExPQ0tfSUNPTl9JRCwgdG9vbHRpcCwgbm9vcCk7XG5cbiAgICBsZXQgdGFiSWNvbkVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IHRhYlN0YXR1c0NvbnRhaW5lckVsID0gdmlldy5sZWFmLnRhYkhlYWRlclN0YXR1c0NvbnRhaW5lckVsO1xuICAgIGlmICh0YWJTdGF0dXNDb250YWluZXJFbCkge1xuICAgICAgdGFiSWNvbkVsID0gdGFiU3RhdHVzQ29udGFpbmVyRWwuY3JlYXRlU3Bhbih7IGNsczogTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTIH0pO1xuICAgICAgc2V0SWNvbih0YWJJY29uRWwsIExPQ0tfSUNPTl9JRCk7XG4gICAgICBzZXRUb29sdGlwKHRhYkljb25FbCwgdG9vbHRpcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbkljb25FbCxcbiAgICAgIHRhYkljb25FbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVN1YnNjcmliZWQoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudHNDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudHNDb21wb25lbnQgPSBuZXcgRWRpdG9yTG9ja0V2ZW50c0NvbXBvbmVudChhcHAsICgpID0+IHtcbiAgICAgIHRoaXMucmVjb25jaWxlKGFwcCk7XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudHNDb21wb25lbnQubG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhdGhMb2NrZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZ2V0KHBhdGgpPy5zaXplID8/IDApID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgbG9ja1Rvb2x0aXAoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgLy8gYGxvY2tUb29sdGlwYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBhIGxvY2tlZCBwYXRoLCBzbyB0aGUgcGVyLXBsdWdpbiBtYXAgaXMgYWx3YXlzIHByZXNlbnQuXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUobG9ja0NvdW50QnlQbHVnaW5JZCk7XG4gICAgY29uc3QgaGVhZGVyID0gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2subG9ja2VkQnlUb29sdGlwKTtcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IEFycmF5LmZyb20obG9ja0NvdW50QnlQbHVnaW5JZC5rZXlzKCkpLm1hcCgocGx1Z2luSWQpID0+IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/Lm5hbWUgPz8gcGx1Z2luSWQpO1xuICAgIC8vIEEgcnVudGltZS1sZW5ndGggbGlzdCBvZiBwbHVnaW4gbmFtZXMsIG9uZSBwZXIgbGluZSB1bmRlciB0aGUgaGVhZGVyLlxuICAgIHJldHVybiBbaGVhZGVyLCAuLi5wbHVnaW5OYW1lc10uam9pbignXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIHJlY29uY2lsZShhcHA6IEFwcCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZXdzVG9Mb2NrID0gbmV3IFNldDxNYXJrZG93blZpZXc+KCk7XG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZpZXdUeXBlLk1hcmtkb3duKSkge1xuICAgICAgY29uc3QgdmlldyA9IGxlYWYudmlldztcbiAgICAgIGlmICghKHZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoID0gdmlldy5maWxlPy5wYXRoO1xuICAgICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNQYXRoTG9ja2VkKHBhdGgpKSB7XG4gICAgICAgIHZpZXdzVG9Mb2NrLmFkZCh2aWV3KTtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMubG9ja1Rvb2x0aXAoYXBwLCBwYXRoKTtcbiAgICAgICAgY29uc3QgaW5kaWNhdG9ycyA9IHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5nZXQodmlldyk7XG4gICAgICAgIGlmIChpbmRpY2F0b3JzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzLCB0b29sdGlwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NrRWRpdG9yKHZpZXcuZWRpdG9yKTtcbiAgICAgICAgICB0aGlzLmluZGljYXRvcnNCeVZpZXcuc2V0KHZpZXcsIHRoaXMuY3JlYXRlSW5kaWNhdG9ycyh2aWV3LCB0b29sdGlwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFt2aWV3LCBpbmRpY2F0b3JzXSBvZiB0aGlzLmluZGljYXRvcnNCeVZpZXcpIHtcbiAgICAgIGlmICghdmlld3NUb0xvY2suaGFzKHZpZXcpKSB7XG4gICAgICAgIHVubG9ja0VkaXRvcih2aWV3LmVkaXRvcik7XG4gICAgICAgIGluZGljYXRvcnMuYWN0aW9uSWNvbkVsLnJlbW92ZSgpO1xuICAgICAgICBpbmRpY2F0b3JzLnRhYkljb25FbD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5kZWxldGUodmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXNCYXIoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25jaWxlQW5kQ2xlYW51cChhcHA6IEFwcCk6IHZvaWQge1xuICAgIHRoaXMucmVjb25jaWxlKGFwcCk7XG4gICAgaWYgKHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmV2ZW50c0NvbXBvbmVudD8udW5sb2FkKCk7XG4gICAgICB0aGlzLmV2ZW50c0NvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVubG9ja1BhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZywgcGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2tDb3VudEJ5UGx1Z2luSWQgPSB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZ2V0KHBhdGgpO1xuICAgIGlmICghbG9ja0NvdW50QnlQbHVnaW5JZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50ID0gbG9ja0NvdW50QnlQbHVnaW5JZC5nZXQocGx1Z2luSWQpID8/IDA7XG4gICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQuZGVsZXRlKHBsdWdpbklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9ja0NvdW50QnlQbHVnaW5JZC5zZXQocGx1Z2luSWQsIGNvdW50IC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKGxvY2tDb3VudEJ5UGx1Z2luSWQuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmRlbGV0ZShwYXRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29uY2lsZUFuZENsZWFudXAoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5kaWNhdG9yVG9vbHRpcHMoaW5kaWNhdG9yczogTG9ja0luZGljYXRvcnMsIHRvb2x0aXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHNldFRvb2x0aXAoaW5kaWNhdG9ycy5hY3Rpb25JY29uRWwsIHRvb2x0aXApO1xuICAgIGlmIChpbmRpY2F0b3JzLnRhYkljb25FbCkge1xuICAgICAgc2V0VG9vbHRpcChpbmRpY2F0b3JzLnRhYkljb25FbCwgdG9vbHRpcCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0dXNCYXIoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVWaWV3ID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gICAgY29uc3QgYWN0aXZlUGF0aCA9IGFjdGl2ZVZpZXc/LmZpbGU/LnBhdGg7XG4gICAgY29uc3QgaXNBY3RpdmVMb2NrZWQgPSBhY3RpdmVQYXRoICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc1BhdGhMb2NrZWQoYWN0aXZlUGF0aCk7XG5cbiAgICBpZiAoIWlzQWN0aXZlTG9ja2VkIHx8ICFhY3RpdmVWaWV3KSB7XG4gICAgICB0aGlzLnN0YXR1c0Jhckl0ZW1FbD8ucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN0YXR1c0Jhckl0ZW1FbCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXR1c0Jhckl0ZW1FbCkge1xuICAgICAgY29uc3Qgc3RhdHVzQmFyRWwgPSBhY3RpdmVWaWV3LmNvbnRhaW5lckVsLm93bmVyRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihTVEFUVVNfQkFSX0NTU19TRUxFQ1RPUik7XG4gICAgICBpZiAoIXN0YXR1c0JhckVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsID0gc3RhdHVzQmFyRWwuY3JlYXRlRGl2KHsgY2xzOiBbU1RBVFVTX0JBUl9JVEVNX0NTU19DTEFTUywgTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTXSB9KTtcbiAgICAgIHNldEljb24odGhpcy5zdGF0dXNCYXJJdGVtRWwsIExPQ0tfSUNPTl9JRCk7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcCh0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgdGhpcy5sb2NrVG9vbHRpcChhcHAsIGFjdGl2ZVBhdGgpKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGVyLXBsdWdpbiBoYW5kbGUgZm9yIG5vdGUtc2NvcGVkIGVkaXRvciBsb2NraW5nLiBBZGQgaXQgYXMgYSBjaGlsZCBvZiB5b3VyIHBsdWdpblxuICogKGB0aGlzLmFkZENoaWxkKG5ldyBFZGl0b3JMb2NrQ29tcG9uZW50KHRoaXMuYXBwKSlgKSBzbyB0aGF0IGFueSBsb2NrcyBpdCBzdGlsbCBob2xkcyBhcmUgcmVsZWFzZWRcbiAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMgXHUyMDE0IGEgbm90ZSBjYW4gbmV2ZXIgYmUgbGVmdCBzdHVjayByZWFkLW9ubHkgYmVjYXVzZSB0aGVcbiAqIHBsdWdpbiB0aGF0IGxvY2tlZCBpdCB3YXMgZGlzYWJsZWQgb3IgcmVsb2FkZWQgbWlkLW9wZXJhdGlvbi5cbiAqXG4gKiBMb2NrcyBhcmUgcmVmZXJlbmNlLWNvdW50ZWQgYW5kIGF0dHJpYnV0ZWQgdG8gdGhpcyBwbHVnaW4sIHNvIHRoZSBsb2NrIGluZGljYXRvcnMnIHRvb2x0aXAgbmFtZXNcbiAqIGl0IGFtb25nIHRoZSBwbHVnaW5zIGN1cnJlbnRseSBob2xkaW5nIGEgbG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckxvY2tDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3ItbG9jayBoYW5kbGUgb3duZWQgYnkgYSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgaWQgb2YgdGhlIG93bmluZyBwbHVnaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsdWdpbiBjb250ZXh0J3MgaWQ7IHBhc3NcbiAgICogaXQgZXhwbGljaXRseSAoZS5nLiBmcm9tIGEgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCkgd2hlbiBjb25zdHJ1Y3RpbmcgYmVmb3JlIHRoZSBwbHVnaW4gY29udGV4dCBpc1xuICAgKiBpbml0aWFsaXplZCwgc3VjaCBhcyBpbnNpZGUgYFBsdWdpbkJhc2Uub25sb2FkYC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyA9IGdldFBsdWdpbklkKCkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkIGJ5IGFueSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzTG9ja2VkRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3MgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggb24gYmVoYWxmIG9mIHRoaXMgcGx1Z2luLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnRcbiAgICogYW5kIGZ1dHVyZSB7QGxpbmsgTWFya2Rvd25WaWV3fSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gUmVmZXJlbmNlLWNvdW50ZWQ6IGJhbGFuY2UgZWFjaCBjYWxsXG4gICAqIHdpdGggYSBkaXNwb3NlIG9mIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gKGlkZWFsbHkgdmlhIGB1c2luZ2ApIG9yIHtAbGluayB1bmxvY2tGb3JQYXRofS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVsZWFzZXMgdGhpcyBsb2NrIHdoZW4gZGlzcG9zZWQuIERpc3Bvc2luZyBtb3JlIHRoYW4gb25jZSBpcyBhIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGxvY2tGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gZ2V0TWFuYWdlcigpLmxvY2sodGhpcy5hcHAsIHBhdGhPckZpbGUsIHRoaXMucGx1Z2luSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGV2ZXJ5IGxvY2sgc3RpbGwgaGVsZCBieSB0aGlzIHBsdWdpbiB3aGVuIHRoZSBjb21wb25lbnQgKGFuZCB0aHVzIHRoZSBwbHVnaW4pIHVubG9hZHMsXG4gICAqIHNvIG5vIG5vdGUgaXMgbGVmdCBzdHVjayByZWFkLW9ubHkgYnkgYW4gb3BlcmF0aW9uIHRoYXQgbmV2ZXIgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIGdldE1hbmFnZXIoKS51bmxvY2tBbGxGb3JQbHVnaW4odGhpcy5hcHAsIHRoaXMucGx1Z2luSWQpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgb25lIGxvY2sgcHJldmlvdXNseSBhY3F1aXJlZCBmb3IgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggdmlhIHtAbGluayBsb2NrRm9yUGF0aH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gICAqL1xuICBwdWJsaWMgdW5sb2NrRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgZ2V0TWFuYWdlcigpLnVubG9jayh0aGlzLmFwcCwgcGF0aE9yRmlsZSwgdGhpcy5wbHVnaW5JZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0b3JMb2NrZWRGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkuaXNMb2NrZWQoYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBMb2NrcyB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgbWFraW5nIGl0IHJlYWQtb25seSBpbiBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmVcbiAqIHtAbGluayBNYXJrZG93blZpZXd9IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbmQgc2hvd2luZyBhIGxvY2sgaW5kaWNhdG9yIGluIHRoZSB0YWIgaGVhZGVyLFxuICogdmlldyBhY3Rpb24gYmFyLCBhbmQgKHdoaWxlIGFjdGl2ZSkgdGhlIHN0YXR1cyBiYXIuIFRoZSBpbmRpY2F0b3JzJyB0b29sdGlwIGxpc3RzIHRoZSBwbHVnaW5zXG4gKiB0aGF0IGN1cnJlbnRseSBob2xkIGEgbG9jayBvbiB0aGUgbm90ZS5cbiAqXG4gKiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCBwZXIgY2FsbGluZyBwbHVnaW46IGVhY2ggY2FsbCBtdXN0IGJlIGJhbGFuY2VkIGJ5IGV4YWN0bHkgb25lXG4gKiByZWxlYXNlIChlaXRoZXIgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gXHUyMDE0IGlkZWFsbHkgdmlhIGEgYHVzaW5nYCBkZWNsYXJhdGlvbiBcdTIwMTQgb3JcbiAqIGEgbWF0Y2hpbmcge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IGNhbGwpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbGVhc2VzIHRoaXMgbG9jayB3aGVuIGRpc3Bvc2VkLiBEaXNwb3NpbmcgbW9yZSB0aGFuIG9uY2UgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogRGlzcG9zYWJsZSB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayhhcHAsIHBhdGhPckZpbGUsIGdldFBsdWdpbklkKCkpO1xufVxuXG4vKipcbiAqIFJlbGVhc2VzIG9uZSBsb2NrIHByZXZpb3VzbHkgYWNxdWlyZWQgZm9yIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoIHZpYSB7QGxpbmsgbG9ja0VkaXRvckZvclBhdGh9LlxuICpcbiAqIFdoZW4gdGhlIGxhc3QgbG9jayBpcyByZWxlYXNlZCB0aGUgbm90ZSBiZWNvbWVzIGZ1bGx5IGVkaXRhYmxlIGFnYWluIGFuZCBpdHMgbG9jayBpbmRpY2F0b3JzIGFyZVxuICogcmVtb3ZlZC4gQ2FsbGluZyB0aGlzIHdoZW4gdGhlIG5vdGUgaXMgbm90IGxvY2tlZCBpcyBhIG5vLW9wLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIHVubG9jay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubG9ja0VkaXRvckZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgZ2V0TWFuYWdlcigpLnVubG9jayhhcHAsIHBhdGhPckZpbGUsIGdldFBsdWdpbklkKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRNYW5hZ2VyKCk6IEVkaXRvclBhdGhMb2NrTWFuYWdlciB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8RWRpdG9yUGF0aExvY2tNYW5hZ2VyPihFRElUT1JfTE9DS19TVEFURV9LRVksIG5ldyBFZGl0b3JQYXRoTG9ja01hbmFnZXIoKSkudmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyQkEsNkJBQXlCO0FBQ3pCLHNCQUlPO0FBSVAsd0JBR087QUFDUCxzQkFBcUI7QUFDckIsc0NBQXlDO0FBQ3pDLHlCQUFrQztBQUNsQywwQkFBNEI7QUFDNUIsb0JBR087QUFDUCx5QkFBd0I7QUFDeEIsa0JBQWtCO0FBQ2xCLHVCQUE0QjtBQUU1QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLGVBQWU7QUFDckIsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSw0QkFBNEI7QUFDbEMsTUFBTSwwQkFBMEI7QUFZaEMsTUFBTSxrQ0FBa0Ms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
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayB0b2dnbGVFZGl0b3JSZWFkT25seX0gZnJvbSBgLi9lZGl0b3IudHNgIHRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZVxuICoge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGluZGljYXRvciBpbiBpdHMgdGFiIGhlYWRlciwgaXRzIHZpZXcgYWN0aW9uIGJhciwgYW5kXG4gKiB0aGUgc3RhdHVzIGJhciAod2hpbGUgdGhlIG5vdGUgaXMgYWN0aXZlKS4gTG9ja3MgYXJlIHJlZmVyZW5jZS1jb3VudGVkIHBlciBsb2NraW5nIHBsdWdpbiwgc29cbiAqIG5lc3RlZCBvciBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZVxuICogbGFzdCBsb2NrIGlzIHJlbGVhc2VkIFx1MjAxNCBhbmQgdGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKlxuICogVGhlIGFjcXVpcmVycyByZXR1cm4gYSB7QGxpbmsgRGlzcG9zYWJsZX0sIHNvIHRoZSBwcmVmZXJyZWQgY2FsbCBzdHlsZSBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb25cbiAqIHRoYXQgcmVsZWFzZXMgYXV0b21hdGljYWxseSBhdCBzY29wZSBleGl0IChpbmNsdWRpbmcgb24gdGhyb3cpOlxuICpcbiAqIGBgYHRzXG4gKiB1c2luZyBfbG9jayA9IGxvY2tFZGl0b3JGb3JQYXRoKGFwcCwgcGF0aCk7XG4gKiAvLyAuLi4gbG9uZy1ydW5uaW5nIHdvcmsgKHByb2Nlc3MsIHByb2Nlc3NGcm9udE1hdHRlciwgbWVyZ2Uvc3BsaXQpIC4uLlxuICogLy8gYXV0by11bmxvY2tlZCBhdCBzY29wZSBleGl0XG4gKiBgYGBcbiAqXG4gKiBUaGUgZXhwbGljaXQge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IHBhaXIgcmVtYWlucyBhdmFpbGFibGUgZm9yIG5vbi1gdXNpbmdgIGNhbGwgc2l0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBNZW51LFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Jcbn0gZnJvbSAnLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IHRvZ2dsZUVkaXRvclJlYWRPbmx5IH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuL21vZGFscy9jb25maXJtLnRzJztcbmltcG9ydCB7IGdldFBsdWdpbklkIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWlkLnRzJztcblxuY29uc3QgRURJVE9SX0xPQ0tfU1RBVEVfS0VZID0gJ2VkaXRvckxvY2snO1xuY29uc3QgTE9DS19JQ09OX0lEID0gJ2xvY2snO1xuY29uc3QgTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWRldi11dGlscy1sb2NrLWluZGljYXRvcic7XG5jb25zdCBTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTID0gJ3N0YXR1cy1iYXItaXRlbSc7XG5jb25zdCBTVEFUVVNfQkFSX0NTU19TRUxFQ1RPUiA9ICcuc3RhdHVzLWJhcic7XG5jb25zdCBVTkxPQ0tfSUNPTl9JRCA9ICd1bmxvY2snO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50LmxvY2tGb3JQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9jay4gV2hlbiB0aGUgbG9jayBpbmRpY2F0b3IgaXNcbiAgICogcmlnaHQtY2xpY2tlZCBhbmQgdGhlIHVzZXIgY29uZmlybXMgYW4gdW5sb2NrIChvciB7QGxpbmsgcmVxdWVzdEVkaXRvclVubG9ja0ZvclBhdGh9IGlzIGNhbGxlZCBmb3JcbiAgICogdGhlIHBhdGgpLCB0aGlzIGNvbnRyb2xsZXIgaXMgYWJvcnRlZCBzbyB0aGUgb3BlcmF0aW9uIGhvbGRpbmcgdGhlIGxvY2sgY2FuIGNhbmNlbCBpdHNlbGYgYW5kXG4gICAqIHJlbGVhc2UgdGhlIGxvY2sgaW4gaXRzIG93biBjbGVhbnVwLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xufVxuXG5pbnRlcmZhY2UgTG9ja0luZGljYXRvcnMge1xuICByZWFkb25seSBhY3Rpb25JY29uRWw6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSB0YWJJY29uRWw6IEhUTUxFbGVtZW50IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIHRoZSB3b3Jrc3BhY2UgZXZlbnRzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBsb2NrIHJlY29uY2lsZS4gSW1wbGVtZW50ZWQgYXMgYVxuICoge0BsaW5rIENvbXBvbmVudEV4fSBzbyB0aGUgc3Vic2NyaXB0aW9ucyBhcmUgcmVnaXN0ZXJlZCBvbiBgbG9hZCgpYCBhbmQgYXV0b21hdGljYWxseSByZW1vdmVkIG9uXG4gKiBgdW5sb2FkKClgLCBpbnN0ZWFkIG9mIGJlaW5nIHRyYWNrZWQgYW5kIHRvcm4gZG93biBieSBoYW5kLlxuICovXG5jbGFzcyBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcCwgcHJpdmF0ZSByZWFkb25seSBvbkNoYW5nZTogKCkgPT4gdm9pZCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2FjdGl2ZS1sZWFmLWNoYW5nZScsIHRoaXMub25DaGFuZ2UpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCdsYXlvdXQtY2hhbmdlJywgdGhpcy5vbkNoYW5nZSkpO1xuICAgIC8vIFNhbWUtbGVhZiBuYXZpZ2F0aW9uIHRvIGFub3RoZXIgbm90ZSBmaXJlcyBubyBsZWFmL2xheW91dCBjaGFuZ2U7IHdpdGhvdXQgdGhpcyBpdCBzdGF5cyByZWFkLW9ubHkuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignZmlsZS1vcGVuJywgdGhpcy5vbkNoYW5nZSkpO1xuICB9XG59XG5cbi8qKlxuICogVHJhY2tzIHJlZmVyZW5jZS1jb3VudGVkLCBwYXRoLXNjb3BlZCBlZGl0b3IgbG9ja3MgYW5kIGtlZXBzIGV2ZXJ5IG9wZW4ge0BsaW5rIE1hcmtkb3duVmlld30gaW5cbiAqIHN5bmMgd2l0aCB0aGUgbG9ja2VkLXBhdGggc2V0LiBBIHNpbmdsZSBpbnN0YW5jZSBsaXZlcyBvbiB0aGUgc2hhcmVkIGBvYnNpZGlhbi1kZXYtdXRpbHNgIHN0YXRlLlxuICogRm9yIGVhY2ggbG9ja2VkIHBhdGggdGhlIGxvY2sgY291bnQgaXMgdHJhY2tlZCBwZXIgbG9ja2luZyBwbHVnaW4sIHNvIHRoZSBpbmRpY2F0b3JzIGNhbiByZXBvcnRcbiAqIHdoaWNoIHBsdWdpbnMgY3VycmVudGx5IGhvbGQgYSBsb2NrLlxuICovXG5jbGFzcyBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcnNCeVBhdGggPSBuZXcgTWFwPHN0cmluZywgU2V0PEFib3J0Q29udHJvbGxlcj4+KCk7XG4gIHByaXZhdGUgZXZlbnRzQ29tcG9uZW50OiBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvcnNCeVZpZXcgPSBuZXcgTWFwPE1hcmtkb3duVmlldywgTG9ja0luZGljYXRvcnM+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpO1xuICBwcml2YXRlIHN0YXR1c0Jhckl0ZW1FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgaXNMb2NrZWQoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdGhMb2NrZWQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nLCBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXIpOiBEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICAgIGxldCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoIWxvY2tDb3VudEJ5UGx1Z2luSWQpIHtcbiAgICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNldChwYXRoLCBsb2NrQ291bnRCeVBsdWdpbklkKTtcbiAgICB9XG4gICAgbG9ja0NvdW50QnlQbHVnaW5JZC5zZXQocGx1Z2luSWQsIChsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMCkgKyAxKTtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICBsZXQgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQocGF0aCk7XG4gICAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVycyA9IG5ldyBTZXQ8QWJvcnRDb250cm9sbGVyPigpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlcnNCeVBhdGguc2V0KHBhdGgsIGFib3J0Q29udHJvbGxlcnMpO1xuICAgICAgfVxuICAgICAgYWJvcnRDb250cm9sbGVycy5hZGQoYWJvcnRDb250cm9sbGVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVTdWJzY3JpYmVkKGFwcCk7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcblxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXJzID0gdGhpcy5hYm9ydENvbnRyb2xsZXJzQnlQYXRoLmdldChwYXRoKTtcbiAgICAgICAgICAvLyBUaGUgc2V0IHdhcyBjcmVhdGVkIHdoZW4gdGhpcyBsb2NrIGFkZGVkIGl0cyBjb250cm9sbGVyIGFuZCBpcyBvbmx5IHJlbW92ZWQgaGVyZS5cbiAgICAgICAgICAvLyBJdCBpcyB0aGVyZWZvcmUgYWx3YXlzIHByZXNlbnQgd2hpbGUgdGhpcyAoc2luZ2xlLXJ1bikgZGlzcG9zYWJsZSBjYWxsYmFjayBleGVjdXRlcy5cbiAgICAgICAgICBhc3NlcnROb25OdWxsYWJsZShhYm9ydENvbnRyb2xsZXJzKTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5kZWxldGUocGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5sb2NrUGF0aChhcHAsIHBhdGgsIHBsdWdpbklkKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnRzIGV2ZXJ5IHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGN1cnJlbnRseSByZWdpc3RlcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgd2hpY2hcbiAgICogY2FuY2VscyB0aGUgb3BlcmF0aW9ucyBob2xkaW5nIHRoZSBsb2NrLiBFYWNoIG9wZXJhdGlvbiByZWxlYXNlcyBpdHMgb3duIGxvY2sgaW4gaXRzIGBmaW5hbGx5YFxuICAgKiB3aGVuIGl0IG9ic2VydmVzIHRoZSBhYm9ydCwgc28gdGhpcyBkb2VzIG5vdCB1bmxvY2sgdGhlIHBhdGggZGlyZWN0bHkuIEEgbm8tb3Agd2hlbiBubyBjb250cm9sbGVyXG4gICAqIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIHJlcXVlc3QgYW4gdW5sb2NrIGZvci5cbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0VW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBwbHVnaW5JZCk7XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrQWxsRm9yUGx1Z2luKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgbG9ja0NvdW50QnlQbHVnaW5JZF0gb2YgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoKSB7XG4gICAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpICYmIGxvY2tDb3VudEJ5UGx1Z2luSWQuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlY29uY2lsZUFuZENsZWFudXAoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5kaWNhdG9ycyhhcHA6IEFwcCwgdmlldzogTWFya2Rvd25WaWV3LCBwYXRoOiBzdHJpbmcsIHRvb2x0aXA6IHN0cmluZyk6IExvY2tJbmRpY2F0b3JzIHtcbiAgICBjb25zdCBhY3Rpb25JY29uRWwgPSB2aWV3LmFkZEFjdGlvbihMT0NLX0lDT05fSUQsIHRvb2x0aXAsIG5vb3ApO1xuICAgIHRoaXMucmVnaXN0ZXJVbmxvY2tNZW51KGFwcCwgYWN0aW9uSWNvbkVsLCAoKSA9PiBwYXRoKTtcblxuICAgIGxldCB0YWJJY29uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgdGFiU3RhdHVzQ29udGFpbmVyRWwgPSB2aWV3LmxlYWYudGFiSGVhZGVyU3RhdHVzQ29udGFpbmVyRWw7XG4gICAgaWYgKHRhYlN0YXR1c0NvbnRhaW5lckVsKSB7XG4gICAgICB0YWJJY29uRWwgPSB0YWJTdGF0dXNDb250YWluZXJFbC5jcmVhdGVTcGFuKHsgY2xzOiBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1MgfSk7XG4gICAgICBzZXRJY29uKHRhYkljb25FbCwgTE9DS19JQ09OX0lEKTtcbiAgICAgIHNldFRvb2x0aXAodGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJVbmxvY2tNZW51KGFwcCwgdGFiSWNvbkVsLCAoKSA9PiBwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uSWNvbkVsLFxuICAgICAgdGFiSWNvbkVsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU3Vic2NyaWJlZChhcHA6IEFwcCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50c0NvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50c0NvbXBvbmVudCA9IG5ldyBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50KGFwcCwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50c0NvbXBvbmVudC5sb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGlzUGF0aExvY2tlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk/LnNpemUgPz8gMCkgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NraW5nUGx1Z2luTmFtZXMoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICAvLyBgbG9ja2luZ1BsdWdpbk5hbWVzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBhIGxvY2tlZCBwYXRoLCBzbyB0aGUgcGVyLXBsdWdpbiBtYXAgaXMgYWx3YXlzIHByZXNlbnQuXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUobG9ja0NvdW50QnlQbHVnaW5JZCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obG9ja0NvdW50QnlQbHVnaW5JZC5rZXlzKCkpLm1hcCgocGx1Z2luSWQpID0+IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/Lm5hbWUgPz8gcGx1Z2luSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NrVG9vbHRpcChhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZWRpdG9yTG9jay5sb2NrZWRCeVRvb2x0aXApO1xuICAgIC8vIEEgcnVudGltZS1sZW5ndGggbGlzdCBvZiBwbHVnaW4gbmFtZXMsIG9uZSBwZXIgbGluZSB1bmRlciB0aGUgaGVhZGVyLlxuICAgIHJldHVybiBbaGVhZGVyLCAuLi50aGlzLmxvY2tpbmdQbHVnaW5OYW1lcyhhcHAsIHBhdGgpXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25jaWxlKGFwcDogQXBwKTogdm9pZCB7XG4gICAgY29uc3Qgdmlld3NUb0xvY2sgPSBuZXcgU2V0PE1hcmtkb3duVmlldz4oKTtcbiAgICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKCEodmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGggPSB2aWV3LmZpbGU/LnBhdGg7XG4gICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc1BhdGhMb2NrZWQocGF0aCkpIHtcbiAgICAgICAgdmlld3NUb0xvY2suYWRkKHZpZXcpO1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5sb2NrVG9vbHRpcChhcHAsIHBhdGgpO1xuICAgICAgICAvLyBSZS1hcHBseSB0aGUgcmVhZC1vbmx5IHRvZ2dsZSBvbiBldmVyeSByZWNvbmNpbGUsIG5vdCBvbmx5IHRoZSBmaXJzdCB0aW1lIGEgdmlldyBpcyB0cmFja2VkLlxuICAgICAgICAvLyBUaGUgdG9nZ2xlIGlzIGlkZW1wb3RlbnQsIHNvIHJlLWFwcGx5aW5nIHRvIGFuIGFscmVhZHktbG9ja2VkIHZpZXcgaXMgY2hlYXAuXG4gICAgICAgIC8vIEEgdmlldyBvcGVuZWQgYWZ0ZXIgdGhlIGxvY2sgaXMgcmVjb25jaWxlZCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgaXRzIENvZGVNaXJyb3IgaXMgcmVhZHkuXG4gICAgICAgIC8vIEl0cyBmaXJzdCB0b2dnbGUgaXMgdGhlcmVmb3JlIGEgbm8tb3A7IHJlLWFwcGx5aW5nIG1ha2VzIHRoZSBsb2NrIHRha2UgaG9sZCBvbmNlIGl0IHNldHRsZXMuXG4gICAgICAgIHRvZ2dsZUVkaXRvclJlYWRPbmx5KHZpZXcuZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaW5kaWNhdG9ycyA9IHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5nZXQodmlldyk7XG4gICAgICAgIGlmIChpbmRpY2F0b3JzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzLCB0b29sdGlwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluZGljYXRvcnNCeVZpZXcuc2V0KHZpZXcsIHRoaXMuY3JlYXRlSW5kaWNhdG9ycyhhcHAsIHZpZXcsIHBhdGgsIHRvb2x0aXApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZpZXcsIGluZGljYXRvcnNdIG9mIHRoaXMuaW5kaWNhdG9yc0J5Vmlldykge1xuICAgICAgaWYgKCF2aWV3c1RvTG9jay5oYXModmlldykpIHtcbiAgICAgICAgdG9nZ2xlRWRpdG9yUmVhZE9ubHkodmlldy5lZGl0b3IsIGZhbHNlKTtcbiAgICAgICAgaW5kaWNhdG9ycy5hY3Rpb25JY29uRWwucmVtb3ZlKCk7XG4gICAgICAgIGluZGljYXRvcnMudGFiSWNvbkVsPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmRlbGV0ZSh2aWV3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1c0JhcihhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVBbmRDbGVhbnVwKGFwcDogQXBwKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICBpZiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50Py51bmxvYWQoKTtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJVbmxvY2tNZW51KGFwcDogQXBwLCBlbDogSFRNTEVsZW1lbnQsIGdldENvbnRleHRQYXRoOiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAvLyBBIHBsYWluIGxpc3RlbmVyIGRpZXMgd2l0aCB0aGUgZWxlbWVudCB3aGVuIGl0IGlzIGAucmVtb3ZlKClgZCBvbiB1bmxvY2ssIHNvIGl0IG5ldmVyIGxlYWtzLlxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0Q29udGV4dFBhdGgoKTtcbiAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVudSA9IG5ldyBNZW51KCk7XG4gICAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbVxuICAgICAgICAgIC5zZXRUaXRsZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZWRpdG9yTG9jay51bmxvY2tNZW51SXRlbSkpXG4gICAgICAgICAgLnNldEljb24oVU5MT0NLX0lDT05fSUQpXG4gICAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29uZmlybWVkID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy51bmxvY2tDb25maXJtTWVzc2FnZShhcHAsIHBhdGgpLFxuICAgICAgICAgICAgICB0aXRsZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2sudW5sb2NrQ29uZmlybVRpdGxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VW5sb2NrKGFwcCwgcGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgICBtZW51LnNob3dBdE1vdXNlRXZlbnQoZXZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrQ29uZmlybU1lc3NhZ2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2sudW5sb2NrQ29uZmlybU1lc3NhZ2UpO1xuICAgIC8vIEEgcnVudGltZS1sZW5ndGggbGlzdCBvZiB0aGUgcGx1Z2lucyBjdXJyZW50bHkgaG9sZGluZyBhIGxvY2ssIG9uZSBwZXIgbGluZSB1bmRlciB0aGUgaGVhZGVyLlxuICAgIHJldHVybiBbaGVhZGVyLCAuLi50aGlzLmxvY2tpbmdQbHVnaW5OYW1lcyhhcHAsIHBhdGgpXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKCFsb2NrQ291bnRCeVBsdWdpbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMDtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgbG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NrQ291bnRCeVBsdWdpbklkLnNldChwbHVnaW5JZCwgY291bnQgLSAxKTtcbiAgICB9XG5cbiAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb25jaWxlQW5kQ2xlYW51cChhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzOiBMb2NrSW5kaWNhdG9ycywgdG9vbHRpcDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VG9vbHRpcChpbmRpY2F0b3JzLmFjdGlvbkljb25FbCwgdG9vbHRpcCk7XG4gICAgaWYgKGluZGljYXRvcnMudGFiSWNvbkVsKSB7XG4gICAgICBzZXRUb29sdGlwKGluZGljYXRvcnMudGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXR1c0JhcihhcHA6IEFwcCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgICBjb25zdCBhY3RpdmVQYXRoID0gYWN0aXZlVmlldz8uZmlsZT8ucGF0aDtcbiAgICBjb25zdCBpc0FjdGl2ZUxvY2tlZCA9IGFjdGl2ZVBhdGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzUGF0aExvY2tlZChhY3RpdmVQYXRoKTtcblxuICAgIGlmICghaXNBY3RpdmVMb2NrZWQgfHwgIWFjdGl2ZVZpZXcpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhdHVzQmFySXRlbUVsKSB7XG4gICAgICBjb25zdCBzdGF0dXNCYXJFbCA9IGFjdGl2ZVZpZXcuY29udGFpbmVyRWwub3duZXJEb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SKTtcbiAgICAgIGlmICghc3RhdHVzQmFyRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtRWwgPSBzdGF0dXNCYXJFbC5jcmVhdGVEaXYoeyBjbHM6IFtTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTLCBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1NdIH0pO1xuICAgICAgc2V0SWNvbih0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgTE9DS19JQ09OX0lEKTtcbiAgICAgIC8vIFRoZSBzaW5nbGUgc3RhdHVzLWJhciBpdGVtIGlzIHJldXNlZCBhY3Jvc3MgYWN0aXZlLW5vdGUgc3dpdGNoZXMuXG4gICAgICAvLyBJdCBtdXN0IHJlc29sdmUgdGhlIGN1cnJlbnRseSBhY3RpdmUgbm90ZSdzIHBhdGggYXQgY2xpY2sgdGltZSByYXRoZXIgdGhhbiBjYXB0dXJpbmcgb25lIHBhdGguXG4gICAgICB0aGlzLnJlZ2lzdGVyVW5sb2NrTWVudShhcHAsIHRoaXMuc3RhdHVzQmFySXRlbUVsLCAoKSA9PiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KT8uZmlsZT8ucGF0aCk7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcCh0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgdGhpcy5sb2NrVG9vbHRpcChhcHAsIGFjdGl2ZVBhdGgpKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGVyLXBsdWdpbiBoYW5kbGUgZm9yIG5vdGUtc2NvcGVkIGVkaXRvciBsb2NraW5nLiBBZGQgaXQgYXMgYSBjaGlsZCBvZiB5b3VyIHBsdWdpblxuICogKGB0aGlzLmFkZENoaWxkKG5ldyBFZGl0b3JMb2NrQ29tcG9uZW50KHRoaXMuYXBwKSlgKSBzbyB0aGF0IGFueSBsb2NrcyBpdCBzdGlsbCBob2xkcyBhcmUgcmVsZWFzZWRcbiAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMgXHUyMDE0IGEgbm90ZSBjYW4gbmV2ZXIgYmUgbGVmdCBzdHVjayByZWFkLW9ubHkgYmVjYXVzZSB0aGVcbiAqIHBsdWdpbiB0aGF0IGxvY2tlZCBpdCB3YXMgZGlzYWJsZWQgb3IgcmVsb2FkZWQgbWlkLW9wZXJhdGlvbi5cbiAqXG4gKiBMb2NrcyBhcmUgcmVmZXJlbmNlLWNvdW50ZWQgYW5kIGF0dHJpYnV0ZWQgdG8gdGhpcyBwbHVnaW4sIHNvIHRoZSBsb2NrIGluZGljYXRvcnMnIHRvb2x0aXAgbmFtZXNcbiAqIGl0IGFtb25nIHRoZSBwbHVnaW5zIGN1cnJlbnRseSBob2xkaW5nIGEgbG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckxvY2tDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3ItbG9jayBoYW5kbGUgb3duZWQgYnkgYSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgaWQgb2YgdGhlIG93bmluZyBwbHVnaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsdWdpbiBjb250ZXh0J3MgaWQ7IHBhc3NcbiAgICogaXQgZXhwbGljaXRseSAoZS5nLiBmcm9tIGEgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCkgd2hlbiBjb25zdHJ1Y3RpbmcgYmVmb3JlIHRoZSBwbHVnaW4gY29udGV4dCBpc1xuICAgKiBpbml0aWFsaXplZCwgc3VjaCBhcyBpbnNpZGUgYFBsdWdpbkJhc2Uub25sb2FkYC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyA9IGdldFBsdWdpbklkKCkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkIGJ5IGFueSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzTG9ja2VkRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3MgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggb24gYmVoYWxmIG9mIHRoaXMgcGx1Z2luLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnRcbiAgICogYW5kIGZ1dHVyZSB7QGxpbmsgTWFya2Rvd25WaWV3fSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gUmVmZXJlbmNlLWNvdW50ZWQ6IGJhbGFuY2UgZWFjaCBjYWxsXG4gICAqIHdpdGggYSBkaXNwb3NlIG9mIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gKGlkZWFsbHkgdmlhIGB1c2luZ2ApIG9yIHtAbGluayB1bmxvY2tGb3JQYXRofS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgbG9ja2luZyBvcHRpb25zLiBQYXNzIGFuXG4gICAqIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zLmFib3J0Q29udHJvbGxlcn0gdG8gbWFrZSB0aGUgbG9jayBjYW5jZWxhYmxlIHZpYSB0aGVcbiAgICogaW5kaWNhdG9yJ3MgcmlnaHQtY2xpY2sgXCJ1bmxvY2tcIiBtZW51IG9yIHtAbGluayByZXF1ZXN0RWRpdG9yVW5sb2NrRm9yUGF0aH0uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVsZWFzZXMgdGhpcyBsb2NrIHdoZW4gZGlzcG9zZWQuIERpc3Bvc2luZyBtb3JlIHRoYW4gb25jZSBpcyBhIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGxvY2tGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG9wdGlvbnM/OiBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5sb2NrKHRoaXMuYXBwLCBwYXRoT3JGaWxlLCB0aGlzLnBsdWdpbklkLCBvcHRpb25zPy5hYm9ydENvbnRyb2xsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGV2ZXJ5IGxvY2sgc3RpbGwgaGVsZCBieSB0aGlzIHBsdWdpbiB3aGVuIHRoZSBjb21wb25lbnQgKGFuZCB0aHVzIHRoZSBwbHVnaW4pIHVubG9hZHMsXG4gICAqIHNvIG5vIG5vdGUgaXMgbGVmdCBzdHVjayByZWFkLW9ubHkgYnkgYW4gb3BlcmF0aW9uIHRoYXQgbmV2ZXIgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIGdldE1hbmFnZXIoKS51bmxvY2tBbGxGb3JQbHVnaW4odGhpcy5hcHAsIHRoaXMucGx1Z2luSWQpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgb25lIGxvY2sgcHJldmlvdXNseSBhY3F1aXJlZCBmb3IgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggdmlhIHtAbGluayBsb2NrRm9yUGF0aH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gICAqL1xuICBwdWJsaWMgdW5sb2NrRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgZ2V0TWFuYWdlcigpLnVubG9jayh0aGlzLmFwcCwgcGF0aE9yRmlsZSwgdGhpcy5wbHVnaW5JZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0b3JMb2NrZWRGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkuaXNMb2NrZWQoYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBMb2NrcyB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgbWFraW5nIGl0IHJlYWQtb25seSBpbiBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmVcbiAqIHtAbGluayBNYXJrZG93blZpZXd9IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbmQgc2hvd2luZyBhIGxvY2sgaW5kaWNhdG9yIGluIHRoZSB0YWIgaGVhZGVyLFxuICogdmlldyBhY3Rpb24gYmFyLCBhbmQgKHdoaWxlIGFjdGl2ZSkgdGhlIHN0YXR1cyBiYXIuIFRoZSBpbmRpY2F0b3JzJyB0b29sdGlwIGxpc3RzIHRoZSBwbHVnaW5zXG4gKiB0aGF0IGN1cnJlbnRseSBob2xkIGEgbG9jayBvbiB0aGUgbm90ZS5cbiAqXG4gKiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCBwZXIgY2FsbGluZyBwbHVnaW46IGVhY2ggY2FsbCBtdXN0IGJlIGJhbGFuY2VkIGJ5IGV4YWN0bHkgb25lXG4gKiByZWxlYXNlIChlaXRoZXIgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gXHUyMDE0IGlkZWFsbHkgdmlhIGEgYHVzaW5nYCBkZWNsYXJhdGlvbiBcdTIwMTQgb3JcbiAqIGEgbWF0Y2hpbmcge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IGNhbGwpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbGVhc2VzIHRoaXMgbG9jayB3aGVuIGRpc3Bvc2VkLiBEaXNwb3NpbmcgbW9yZSB0aGFuIG9uY2UgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogRGlzcG9zYWJsZSB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayhhcHAsIHBhdGhPckZpbGUsIGdldFBsdWdpbklkKCkpO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIGFuIHVubG9jayBvZiB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBieSBhYm9ydGluZyBldmVyeSB7QGxpbmsgQWJvcnRDb250cm9sbGVyfSB0aGF0IHdhc1xuICogYXNzb2NpYXRlZCB3aXRoIGEgbG9jayBvbiBpdCAodmlhIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50LmxvY2tGb3JQYXRofSdzXG4gKiB7QGxpbmsgRWRpdG9yTG9ja0NvbXBvbmVudExvY2tGb3JQYXRoT3B0aW9ucy5hYm9ydENvbnRyb2xsZXJ9KS4gVGhlIG9wZXJhdGlvbnMgaG9sZGluZyB0aGUgbG9ja1xuICogb2JzZXJ2ZSB0aGUgYWJvcnQgYW5kIHJlbGVhc2UgdGhlaXIgb3duIGxvY2tzLiBBIG5vLW9wIHdoZW4gbm8gYWJvcnRhYmxlIGxvY2sgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gKiBwYXRoLlxuICpcbiAqIFRoaXMgbGV0cyBhIGNvbnN1bWluZyBwbHVnaW4gd2lyZSBpdHMgb3duIFwidW5sb2NrIGFjdGl2ZSBub3RlXCIgY29tbWFuZCB3aXRob3V0IHJlYWNoaW5nIGludG8gdGhlXG4gKiBsb2NrIG1hbmFnZXIgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gcmVxdWVzdCBhbiB1bmxvY2sgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEVkaXRvclVubG9ja0ZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgZ2V0TWFuYWdlcigpLnJlcXVlc3RVbmxvY2soYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBSZWxlYXNlcyBvbmUgbG9jayBwcmV2aW91c2x5IGFjcXVpcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCB2aWEge0BsaW5rIGxvY2tFZGl0b3JGb3JQYXRofS5cbiAqXG4gKiBXaGVuIHRoZSBsYXN0IGxvY2sgaXMgcmVsZWFzZWQgdGhlIG5vdGUgYmVjb21lcyBmdWxseSBlZGl0YWJsZSBhZ2FpbiBhbmQgaXRzIGxvY2sgaW5kaWNhdG9ycyBhcmVcbiAqIHJlbW92ZWQuIENhbGxpbmcgdGhpcyB3aGVuIHRoZSBub3RlIGlzIG5vdCBsb2NrZWQgaXMgYSBuby1vcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gIGdldE1hbmFnZXIoKS51bmxvY2soYXBwLCBwYXRoT3JGaWxlLCBnZXRQbHVnaW5JZCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuYWdlcigpOiBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPEVkaXRvclBhdGhMb2NrTWFuYWdlcj4oRURJVE9SX0xPQ0tfU1RBVEVf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
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Note-scoped, reference-counted editor locking.
|
|
6
6
|
*
|
|
7
|
-
* Where {@link
|
|
8
|
-
*
|
|
7
|
+
* Where {@link toggleEditorReadOnly} from `./editor.ts` toggles the read-only state of a single
|
|
8
|
+
* {@link Editor} instance, the helpers here lock a note by its **path**: while a path is
|
|
9
9
|
* locked, every current and future {@link MarkdownView} of that note (in any window, including
|
|
10
10
|
* popouts) is made read-only and shows a lock indicator in its tab header, its view action bar, and
|
|
11
11
|
* the status bar (while the note is active). Locks are reference-counted per locking plugin, so
|
|
@@ -26,6 +26,18 @@
|
|
|
26
26
|
import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
27
27
|
import type { PathOrFile } from './file-system.cjs';
|
|
28
28
|
import { ComponentEx } from './components/component-ex.cjs';
|
|
29
|
+
/**
|
|
30
|
+
* Options for {@link EditorLockComponent.lockForPath}.
|
|
31
|
+
*/
|
|
32
|
+
export interface EditorLockComponentLockForPathOptions {
|
|
33
|
+
/**
|
|
34
|
+
* An optional {@link AbortController} associated with the lock. When the lock indicator is
|
|
35
|
+
* right-clicked and the user confirms an unlock (or {@link requestEditorUnlockForPath} is called for
|
|
36
|
+
* the path), this controller is aborted so the operation holding the lock can cancel itself and
|
|
37
|
+
* release the lock in its own cleanup.
|
|
38
|
+
*/
|
|
39
|
+
readonly abortController?: AbortController;
|
|
40
|
+
}
|
|
29
41
|
/**
|
|
30
42
|
* A per-plugin handle for note-scoped editor locking. Add it as a child of your plugin
|
|
31
43
|
* (`this.addChild(new EditorLockComponent(this.app))`) so that any locks it still holds are released
|
|
@@ -60,9 +72,12 @@ export declare class EditorLockComponent extends ComponentEx {
|
|
|
60
72
|
* with a dispose of the returned {@link Disposable} (ideally via `using`) or {@link unlockForPath}.
|
|
61
73
|
*
|
|
62
74
|
* @param pathOrFile - The path or file of the note to lock.
|
|
75
|
+
* @param options - Optional locking options. Pass an
|
|
76
|
+
* {@link EditorLockComponentLockForPathOptions.abortController} to make the lock cancelable via the
|
|
77
|
+
* indicator's right-click "unlock" menu or {@link requestEditorUnlockForPath}.
|
|
63
78
|
* @returns A {@link Disposable} that releases this lock when disposed. Disposing more than once is a no-op.
|
|
64
79
|
*/
|
|
65
|
-
lockForPath(pathOrFile: PathOrFile): Disposable;
|
|
80
|
+
lockForPath(pathOrFile: PathOrFile, options?: EditorLockComponentLockForPathOptions): Disposable;
|
|
66
81
|
/**
|
|
67
82
|
* Releases every lock still held by this plugin when the component (and thus the plugin) unloads,
|
|
68
83
|
* so no note is left stuck read-only by an operation that never completed.
|
|
@@ -98,6 +113,20 @@ export declare function isEditorLockedForPath(app: App, pathOrFile: PathOrFile):
|
|
|
98
113
|
* @returns A {@link Disposable} that releases this lock when disposed. Disposing more than once is a no-op.
|
|
99
114
|
*/
|
|
100
115
|
export declare function lockEditorForPath(app: App, pathOrFile: PathOrFile): Disposable;
|
|
116
|
+
/**
|
|
117
|
+
* Requests an unlock of the note at the given path by aborting every {@link AbortController} that was
|
|
118
|
+
* associated with a lock on it (via {@link EditorLockComponent.lockForPath}'s
|
|
119
|
+
* {@link EditorLockComponentLockForPathOptions.abortController}). The operations holding the lock
|
|
120
|
+
* observe the abort and release their own locks. A no-op when no abortable lock is registered for the
|
|
121
|
+
* path.
|
|
122
|
+
*
|
|
123
|
+
* This lets a consuming plugin wire its own "unlock active note" command without reaching into the
|
|
124
|
+
* lock manager directly.
|
|
125
|
+
*
|
|
126
|
+
* @param app - The Obsidian app instance.
|
|
127
|
+
* @param pathOrFile - The path or file of the note to request an unlock for.
|
|
128
|
+
*/
|
|
129
|
+
export declare function requestEditorUnlockForPath(app: App, pathOrFile: PathOrFile): void;
|
|
101
130
|
/**
|
|
102
131
|
* Releases one lock previously acquired for the note at the given path via {@link lockEditorForPath}.
|
|
103
132
|
*
|
|
@@ -125,44 +125,33 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
125
125
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
126
|
var editor_exports = {};
|
|
127
127
|
__export(editor_exports, {
|
|
128
|
-
|
|
129
|
-
unlockEditor: () => unlockEditor
|
|
128
|
+
toggleEditorReadOnly: () => toggleEditorReadOnly
|
|
130
129
|
});
|
|
131
130
|
module.exports = __toCommonJS(editor_exports);
|
|
132
131
|
var import_state = require('@codemirror/state');
|
|
133
|
-
var
|
|
134
|
-
const
|
|
135
|
-
function
|
|
132
|
+
var import_object_utils = require('../object-utils.cjs');
|
|
133
|
+
const compartmentByCodeMirror = /* @__PURE__ */ new WeakMap();
|
|
134
|
+
function toggleEditorReadOnly(editor, isReadOnly) {
|
|
136
135
|
const compartment = ensureCompartment(editor);
|
|
137
136
|
editor.cm.dispatch({
|
|
138
|
-
effects: compartment.reconfigure(import_state.EditorState.readOnly.of(true))
|
|
139
|
-
});
|
|
140
|
-
return new import_disposable.CallbackDisposable({
|
|
141
|
-
callback: () => {
|
|
142
|
-
unlockEditor(editor);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
function unlockEditor(editor) {
|
|
147
|
-
const compartment = ensureCompartment(editor);
|
|
148
|
-
editor.cm.dispatch({
|
|
149
|
-
effects: compartment.reconfigure([])
|
|
137
|
+
effects: compartment.reconfigure(isReadOnly ? import_state.EditorState.readOnly.of(true) : [])
|
|
150
138
|
});
|
|
151
139
|
}
|
|
152
140
|
function ensureCompartment(editor) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
editor.cm.dispatch({
|
|
158
|
-
effects: import_state.StateEffect.appendConfig.of(compartment.of([]))
|
|
159
|
-
});
|
|
141
|
+
const codeMirror = editor.cm;
|
|
142
|
+
const cachedCompartment = compartmentByCodeMirror.get(codeMirror);
|
|
143
|
+
if (cachedCompartment?.get((0, import_object_utils.castTo)(codeMirror.state)) !== void 0) {
|
|
144
|
+
return cachedCompartment;
|
|
160
145
|
}
|
|
146
|
+
const compartment = new import_state.Compartment();
|
|
147
|
+
compartmentByCodeMirror.set(codeMirror, compartment);
|
|
148
|
+
codeMirror.dispatch({
|
|
149
|
+
effects: import_state.StateEffect.appendConfig.of(compartment.of([]))
|
|
150
|
+
});
|
|
161
151
|
return compartment;
|
|
162
152
|
}
|
|
163
153
|
// Annotate the CommonJS export names for ESM import in node:
|
|
164
154
|
0 && (module.exports = {
|
|
165
|
-
|
|
166
|
-
unlockEditor
|
|
155
|
+
toggleEditorReadOnly
|
|
167
156
|
});
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggbWFya2Rvd24gZWRpdG9ycyBpbiBPYnNpZGlhblxuICovXG5cbmltcG9ydCB0eXBlIHsgRWRpdG9yIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDb21wYXJ0bWVudCxcbiAgRWRpdG9yU3RhdGUsXG4gIFN0YXRlRWZmZWN0XG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcblxuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuY29uc3QgY29tcGFydG1lbnRCeUNvZGVNaXJyb3IgPSBuZXcgV2Vha01hcDxFZGl0b3JbJ2NtJ10sIENvbXBhcnRtZW50PigpO1xuXG4vKipcbiAqIFRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZSBDb2RlTWlycm9yIGluc3RhbmNlIFx1MjAxNCB0aGUgbG93LWxldmVsIHByaW1pdGl2ZSBiZWhpbmRcbiAqIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZW4gcmVhZC1vbmx5LCB0aGUgZWRpdG9yIHN0YXlzIGZvY3VzYWJsZSBhbmQgaW50ZXJhY3RpdmUgKHNlbGVjdGlvbiwgY29weSwgYW5kIGFwcCBob3RrZXlzIHN1Y2hcbiAqIGFzIHRoZSBjb21tYW5kIHBhbGV0dGUga2VlcCB3b3JraW5nKSBcdTIwMTQgb25seSBkb2N1bWVudCBlZGl0cyBhcmUgcHJldmVudGVkLCB2aWEgdGhlIENvZGVNaXJyb3JcbiAqIGByZWFkT25seWAgc3RhdGUuXG4gKlxuICogVGhpcyB0b2dnbGVzIE9ORSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgXCJhIGZpbGVcIjogYW4gT2JzaWRpYW4ge0BsaW5rIEVkaXRvcn0gaXMgcmV1c2VkIGFzIGl0c1xuICogbGVhZiBuYXZpZ2F0ZXMgYmV0d2VlbiBub3Rlcywgc28gdGhpcyBwcmltaXRpdmUgZG9lcyBub3QgZm9sbG93IGEgbm90ZSBhcm91bmQuIFRvIGxvY2sgYSBub3RlXG4gKiBhY3Jvc3MgZXZlcnkgZWRpdG9yIHRoYXQgc2hvd3MgaXQgKGN1cnJlbnQgYW5kIGZ1dHVyZSwgaW4gYW55IHdpbmRvdyksIHVzZSBgbG9ja0VkaXRvckZvclBhdGhgXG4gKiBmcm9tIGAuL2VkaXRvci1sb2NrLnRzYC5cbiAqXG4gKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciB3aG9zZSBDb2RlTWlycm9yIGluc3RhbmNlIHRvIHRvZ2dsZS5cbiAqIEBwYXJhbSBpc1JlYWRPbmx5IC0gYHRydWVgIHRvIG1ha2UgdGhlIGVkaXRvciByZWFkLW9ubHksIGBmYWxzZWAgdG8gbWFrZSBpdCBlZGl0YWJsZSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclJlYWRPbmx5KGVkaXRvcjogRWRpdG9yLCBpc1JlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXBhcnRtZW50ID0gZW5zdXJlQ29tcGFydG1lbnQoZWRpdG9yKTtcbiAgZWRpdG9yLmNtLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShpc1JlYWRPbmx5ID8gRWRpdG9yU3RhdGUucmVhZE9ubHkub2YodHJ1ZSkgOiBbXSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbXBhcnRtZW50KGVkaXRvcjogRWRpdG9yKTogQ29tcGFydG1lbnQge1xuICAvLyBLZXkgdGhlIGNhY2hlIGJ5IHRoZSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgYnkgdGhlIGBFZGl0b3JgIHdyYXBwZXIuXG4gIC8vIEFuIGBFZGl0b3JgIGtlZXBzIGl0cyBpZGVudGl0eSB3aGlsZSBpdHMgdW5kZXJseWluZyBDb2RlTWlycm9yIHZpZXcgaXMgc3dhcHBlZCBvdXQuXG4gIGNvbnN0IGNvZGVNaXJyb3IgPSBlZGl0b3IuY207XG4gIGNvbnN0IGNhY2hlZENvbXBhcnRtZW50ID0gY29tcGFydG1lbnRCeUNvZGVNaXJyb3IuZ2V0KGNvZGVNaXJyb3IpO1xuICAvLyBSZXVzZSB0aGUgY2FjaGVkIGNvbXBhcnRtZW50IG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAvLyBBIHZpZXcgY2FuIHNpbGVudGx5IGRyb3AgYW4gYXBwZW5kZWQgY29tcGFydG1lbnQgd2hlbiBpdCByZWJ1aWxkcyBpdHMgc3RhdGUuXG4gIC8vIE9wZW5pbmcgYSBub3RlIGludG8gYSBmcmVzaGx5IGNyZWF0ZWQgbGVhZiBkb2VzIHRoaXM6IGl0IGluc3RhbGxzIHRoZSBjb21wYXJ0bWVudCBtaWQtb3Blbi5cbiAgLy8gVGhlIHN1YnNlcXVlbnQgbG9hZCB0aGVuIHJlcGxhY2VzIHRoZSB3aG9sZSBzdGF0ZSwgdGFraW5nIHRoZSBjb21wYXJ0bWVudCB3aXRoIGl0LlxuICAvLyBUaGVuIGBDb21wYXJ0bWVudC5nZXRgIHJldHVybnMgYHVuZGVmaW5lZGAsIHNpbmNlIHRoZSBjb21wYXJ0bWVudCBpcyBubyBsb25nZXIgY29uZmlndXJlZC5cbiAgLy8gUmUtaW5zdGFsbCBpdCBpbiB0aGF0IGNhc2UsIG9yIGV2ZXJ5IGxhdGVyIGByZWNvbmZpZ3VyZWAgaXMgc2lsZW50bHkgaWdub3JlZCBhbmQgbm90aGluZyBsb2Nrcy5cbiAgLy8gVGhlIGBjYXN0VG9gIGJyaWRnZXMgdGhlIGR1YWwgQ29tbW9uSlMgYW5kIEVTTSBgRWRpdG9yU3RhdGVgIGRlY2xhcmF0aW9ucyBvZiBgQGNvZGVtaXJyb3Ivc3RhdGVgLlxuICAvLyBUaGV5IGFyZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsLCBidXQgVHlwZVNjcmlwdCB0cmVhdHMgdGhlbSBhcyBub21pbmFsbHkgaW5jb21wYXRpYmxlLlxuICBpZiAoY2FjaGVkQ29tcGFydG1lbnQ/LmdldChjYXN0VG88RWRpdG9yU3RhdGU+KGNvZGVNaXJyb3Iuc3RhdGUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZENvbXBhcnRtZW50O1xuICB9XG5cbiAgY29uc3QgY29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgY29tcGFydG1lbnRCeUNvZGVNaXJyb3Iuc2V0KGNvZGVNaXJyb3IsIGNvbXBhcnRtZW50KTtcbiAgLy8gQSBgQ29tcGFydG1lbnRgIG9ubHkgdGFrZXMgZWZmZWN0IG9uY2UgaXQgaXMgcGFydCBvZiB0aGUgZWRpdG9yJ3MgY29uZmlndXJhdGlvbi5cbiAgLy8gVGhlIGNvbXBhcnRtZW50IGlzIGNyZWF0ZWQgbGF6aWx5IGhlcmUsIHNvIGluc3RhbGwgaXQgKGluaXRpYWxseSBlbXB0eSkgdmlhIGBhcHBlbmRDb25maWdgLlxuICBjb2RlTWlycm9yLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBTdGF0ZUVmZmVjdC5hcHBlbmRDb25maWcub2YoY29tcGFydG1lbnQub2YoW10pKVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcnRtZW50O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsbUJBSU87QUFFUCwwQkFBdUI7QUFFdkIsTUFBTSwwQkFBMEIsb0JBQUksUUFBbUM7QUFrQmhFLFNBQVMscUJBQXFCLFFBQWdCLFlBQTJCO0FBQzlFLFFBQU0sY0FBYyxrQkFBa0IsTUFBTTtBQUM1QyxTQUFPLEdBQUcsU0FBUztBQUFBLElBQ2pCLFNBQVMsWUFBWSxZQUFZLGFBQWEseUJBQVksU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNsRixDQUFDO0FBQ0g7QUFFQSxTQUFTLGtCQUFrQixRQUE2QjtBQUd0RCxRQUFNLGFBQWEsT0FBTztBQUMxQixRQUFNLG9CQUFvQix3QkFBd0IsSUFBSSxVQUFVO0FBU2hFLE1BQUksbUJBQW1CLFFBQUksNEJBQW9CLFdBQVcsS0FBSyxDQUFDLE1BQU0sUUFBVztBQUMvRSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sY0FBYyxJQUFJLHlCQUFZO0FBQ3BDLDBCQUF3QixJQUFJLFlBQVksV0FBVztBQUduRCxhQUFXLFNBQVM7QUFBQSxJQUNsQixTQUFTLHlCQUFZLGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUN6RCxDQUFDO0FBQ0QsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -6,18 +6,19 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Editor } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Toggles the read-only state of a single CodeMirror instance — the low-level primitive behind
|
|
10
|
+
* editor locking.
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
-
* palette keep working) — only document edits are prevented, via the CodeMirror
|
|
12
|
+
* When read-only, the editor stays focusable and interactive (selection, copy, and app hotkeys such
|
|
13
|
+
* as the command palette keep working) — only document edits are prevented, via the CodeMirror
|
|
14
|
+
* `readOnly` state.
|
|
13
15
|
*
|
|
14
|
-
* @
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Unlocks the editor, making it editable again.
|
|
16
|
+
* This toggles ONE CodeMirror instance, not "a file": an Obsidian {@link Editor} is reused as its
|
|
17
|
+
* leaf navigates between notes, so this primitive does not follow a note around. To lock a note
|
|
18
|
+
* across every editor that shows it (current and future, in any window), use `lockEditorForPath`
|
|
19
|
+
* from `./editor-lock.ts`.
|
|
20
20
|
*
|
|
21
|
-
* @param editor - The editor to
|
|
21
|
+
* @param editor - The editor whose CodeMirror instance to toggle.
|
|
22
|
+
* @param isReadOnly - `true` to make the editor read-only, `false` to make it editable again.
|
|
22
23
|
*/
|
|
23
|
-
export declare function
|
|
24
|
+
export declare function toggleEditorReadOnly(editor: Editor, isReadOnly: boolean): void;
|
|
@@ -227,4 +227,4 @@ async function processFrontmatter(params) {
|
|
|
227
227
|
deleteAlias,
|
|
228
228
|
processFrontmatter
|
|
229
229
|
});
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtbWFuYWdlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yTG9ja0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9yLWxvY2sudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvY2Vzc09wdGlvbnMsXG4gIFByb2Nlc3NQYXJhbXNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhZGRBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGFkZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgVEZpbGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZUFsaWFzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgdG8gZGVsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGVkaXRvci1sb2NrIGNvbXBvbmVudCB1c2VkIHRvIGxvY2sgdGhlIG5vdGUgd2hpbGUgaXQgaXMgYmVpbmcgbW9kaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JMb2NrQ29tcG9uZW50OiBFZGl0b3JMb2NrQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcHJvY2Vzc0Zyb250bWF0dGVyfS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvY2Vzc0Zyb250bWF0dGVyT3B0aW9ucyA9IFByb2Nlc3NPcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcm9jZXNzRnJvbnRtYXR0ZXJ9LlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NGcm9udG1hdHRlclBhcmFtczxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+IGV4dGVuZHMgUHJvY2Vzc0Zyb250bWF0dGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBtb2RpZmllcyB0aGUgZnJvbnQgbWF0dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIEEgdmFsdWUgdGhhdCBtYXkgYmUgYG51bGxgIHRvIGFib3J0IHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJGbih0aGlzOiB2b2lkLCBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4sIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8TWF5YmVSZXR1cm48bnVsbD4+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBhZGRpbmcgdGhlIGFsaWFzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBhZGRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEFsaWFzKHBhcmFtczogQWRkQWxpYXNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBlZGl0b3JMb2NrQ29tcG9uZW50LFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFhbGlhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuXG4gIGlmICghaXNNYXJrZG93bkZpbGUoZmlsZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmaWxlLnBhdGh9IGlzIG5vdCBhIG1hcmtkb3duIGZpbGUuYCk7XG4gIH1cblxuICBpZiAoYWxpYXMgPT09IGZpbGUuYmFzZW5hbWUgfHwgYWxpYXMgPT09IGZpbGUubmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcih7XG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgZnJvbnRtYXR0ZXJGbjogKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzID8/PSBbXTtcblxuICAgICAgaWYgKCFmcm9udG1hdHRlci5hbGlhc2VzLmluY2x1ZGVzKGFsaWFzKSkge1xuICAgICAgICBmcm9udG1hdHRlci5hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIGFuIGFsaWFzIGZyb20gdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZGVsZXRpbmcgdGhlIGFsaWFzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQWxpYXMocGFyYW1zOiBEZWxldGVBbGlhc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWxpYXMsXG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc01hcmtkb3duRmlsZShwYXRoT3JGaWxlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2dldFBhdGgoYXBwLCBwYXRoT3JGaWxlKX0gaXMgbm90IGEgbWFya2Rvd24gZmlsZS5gKTtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcih7XG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgZnJvbnRtYXR0ZXJGbjogKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzID0gZnJvbnRtYXR0ZXIuYWxpYXNlcy5maWx0ZXIoKGEpID0+IGEgIT09IGFsaWFzKTtcblxuICAgICAgaWYgKGZyb250bWF0dGVyLmFsaWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBmcm9udG1hdHRlci5hbGlhc2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUsIGFsbG93aW5nIG1vZGlmaWNhdGlvbnMgdmlhIGEgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByb2Nlc3NpbmcgdGhlIGZyb250IG1hdHRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnJvbnQgbWF0dGVyIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgc2F2ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihwYXJhbXM6IFByb2Nlc3NGcm9udG1hdHRlclBhcmFtczxDdXN0b21Gcm9udG1hdHRlcj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBmcm9udG1hdHRlckZuLFxuICAgIHBhdGhPckZpbGUsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIWlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Z2V0UGF0aChhcHAsIHBhdGhPckZpbGUpfSBpcyBub3QgYSBtYXJrZG93biBmaWxlLmApO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzcyhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UHJvY2Vzc1BhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBhc3luYyBuZXdDb250ZW50UHJvdmlkZXIoeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KSB7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBvbGRGcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KGNvbnRlbnQpO1xuICAgICAgY29uc3QgbmV3RnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPihjb250ZW50KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZyb250bWF0dGVyRm4obmV3RnJvbnRtYXR0ZXIsIGFib3J0U2lnbmFsKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWVwRXF1YWwob2xkRnJvbnRtYXR0ZXIsIG5ld0Zyb250bWF0dGVyKSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldEZyb250bWF0dGVyKGNvbnRlbnQsIG5ld0Zyb250bWF0dGVyKTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGUsXG4gICAgLi4ub3B0aW9uc1xuICB9KSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLDBCQUdPO0FBQ1AseUJBSU87QUFDUCx5QkFHTztBQUNQLG1CQUF3QjtBQXlGeEIsZUFBc0IsU0FBUyxRQUF1QztBQUNwRSxRQUFN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
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtbWFuYWdlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yTG9ja0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9yLWxvY2sudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvY2Vzc09wdGlvbnMsXG4gIFByb2Nlc3NQYXJhbXNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhZGRBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGFkZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkZWxldGVBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGRlbGV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9jZXNzRnJvbnRtYXR0ZXJ9LlxuICovXG5leHBvcnQgdHlwZSBQcm9jZXNzRnJvbnRtYXR0ZXJPcHRpb25zID0gUHJvY2Vzc09wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByb2Nlc3NGcm9udG1hdHRlcn0uXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0Zyb250bWF0dGVyUGFyYW1zPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gZXh0ZW5kcyBQcm9jZXNzRnJvbnRtYXR0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBmcm9udCBtYXR0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBmcm9udG1hdHRlciAtIFRoZSBmcm9udCBtYXR0ZXIgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICogQHJldHVybnMgQSB2YWx1ZSB0aGF0IG1heSBiZSBgbnVsbGAgdG8gYWJvcnQgdGhlIHByb2Nlc3MuXG4gICAqL1xuICBmcm9udG1hdHRlckZuKHRoaXM6IHZvaWQsIGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxNYXliZVJldHVybjxudWxsPj47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYWxpYXMgdG8gdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFkZGluZyB0aGUgYWxpYXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGFkZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkQWxpYXMocGFyYW1zOiBBZGRBbGlhc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWxpYXMsXG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG5cbiAgaWYgKCFpc01hcmtkb3duRmlsZShmaWxlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGUucGF0aH0gaXMgbm90IGEgbWFya2Rvd24gZmlsZS5gKTtcbiAgfVxuXG4gIGlmIChhbGlhcyA9PT0gZmlsZS5iYXNlbmFtZSB8fCBhbGlhcyA9PT0gZmlsZS5uYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKHtcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXIpID0+IHtcbiAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPz89IFtdO1xuXG4gICAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMuaW5jbHVkZXMoYWxpYXMpKSB7XG4gICAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMucHVzaChhbGlhcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgYW4gYWxpYXMgZnJvbSB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWxldGluZyB0aGUgYWxpYXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGlhcyhwYXJhbXM6IERlbGV0ZUFsaWFzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhbGlhcyxcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghYWxpYXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Z2V0UGF0aChhcHAsIHBhdGhPckZpbGUpfSBpcyBub3QgYSBtYXJrZG93biBmaWxlLmApO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKHtcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXIpID0+IHtcbiAgICAgIGlmICghZnJvbnRtYXR0ZXIuYWxpYXNlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPSBmcm9udG1hdHRlci5hbGlhc2VzLmZpbHRlcigoYSkgPT4gYSAhPT0gYWxpYXMpO1xuXG4gICAgICBpZiAoZnJvbnRtYXR0ZXIuYWxpYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyLmFsaWFzZXM7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSwgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB2aWEgYSBwcm92aWRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJvY2Vzc2luZyB0aGUgZnJvbnQgbWF0dGVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmcm9udCBtYXR0ZXIgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KHBhcmFtczogUHJvY2Vzc0Zyb250bWF0dGVyUGFyYW1zPEN1c3RvbUZyb250bWF0dGVyPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGZyb250bWF0dGVyRm4sXG4gICAgcGF0aE9yRmlsZSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSl9IGlzIG5vdCBhIG1hcmtkb3duIGZpbGUuYCk7XG4gIH1cblxuICBhd2FpdCBwcm9jZXNzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQcm9jZXNzUGFyYW1zPih7XG4gICAgYXBwLFxuICAgIGFzeW5jIG5ld0NvbnRlbnRQcm92aWRlcih7IGFib3J0U2lnbmFsLCBjb250ZW50IH0pIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGNvbnN0IG9sZEZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4oY29udGVudCk7XG4gICAgICBjb25zdCBuZXdGcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KGNvbnRlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZnJvbnRtYXR0ZXJGbihuZXdGcm9udG1hdHRlciwgYWJvcnRTaWduYWwpO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZXBFcXVhbChvbGRGcm9udG1hdHRlciwgbmV3RnJvbnRtYXR0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2V0RnJvbnRtYXR0ZXIoY29udGVudCwgbmV3RnJvbnRtYXR0ZXIpO1xuICAgIH0sXG4gICAgcGF0aE9yRmlsZSxcbiAgICAuLi5vcHRpb25zXG4gIH0pKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsMEJBR087QUFDUCx5QkFJTztBQUNQLHlCQUdPO0FBQ1AsbUJBQXdCO0FBeUZ4QixlQUFzQixTQUFTLFFBQXVDO0FBQ3BFLFFBQU07QUFBQSxJQUNK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
|
|
@@ -26,7 +26,7 @@ export interface AddAliasParams {
|
|
|
26
26
|
/**
|
|
27
27
|
* The editor-lock component used to lock the note while it is being modified.
|
|
28
28
|
*/
|
|
29
|
-
readonly editorLockComponent: EditorLockComponent |
|
|
29
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
30
30
|
/**
|
|
31
31
|
* The path or TFile object representing the note.
|
|
32
32
|
*/
|
|
@@ -47,7 +47,7 @@ export interface DeleteAliasParams {
|
|
|
47
47
|
/**
|
|
48
48
|
* The editor-lock component used to lock the note while it is being modified.
|
|
49
49
|
*/
|
|
50
|
-
readonly editorLockComponent: EditorLockComponent |
|
|
50
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
51
51
|
/**
|
|
52
52
|
* The path or TFile object representing the note.
|
|
53
53
|
*/
|