obsidian-dev-utils 82.0.0-beta.0 → 82.0.0-beta.10
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 +52 -0
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +10 -1
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
- package/dist/lib/cjs/obsidian/editor-lock.cjs +265 -41
- package/dist/lib/cjs/obsidian/editor-lock.d.cts +93 -11
- package/dist/lib/cjs/obsidian/editor.cjs +16 -31
- package/dist/lib/cjs/obsidian/editor.d.cts +13 -9
- package/dist/lib/cjs/obsidian/file-manager.cjs +5 -1
- package/dist/lib/cjs/obsidian/file-manager.d.cts +9 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +6 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +4 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +4 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +4 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +13 -0
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +5 -2
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +2 -0
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +21 -1
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +15 -0
- package/dist/lib/cjs/obsidian/vault.cjs +67 -37
- package/dist/lib/cjs/obsidian/vault.d.cts +7 -6
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +29 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +4 -0
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +10 -1
- package/dist/lib/esm/obsidian/editor-lock.d.mts +93 -11
- package/dist/lib/esm/obsidian/editor-lock.mjs +270 -46
- package/dist/lib/esm/obsidian/editor.d.mts +13 -9
- package/dist/lib/esm/obsidian/editor.mjs +17 -30
- package/dist/lib/esm/obsidian/file-manager.d.mts +9 -0
- package/dist/lib/esm/obsidian/file-manager.mjs +5 -1
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +4 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +6 -2
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +4 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +13 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +4 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +5 -2
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +2 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +15 -0
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +21 -1
- package/dist/lib/esm/obsidian/vault.d.mts +7 -6
- package/dist/lib/esm/obsidian/vault.mjs +67 -40
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +4 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +33 -3
- package/dist/styles.css +73 -1
- package/package.json +1 -1
|
@@ -22,54 +22,154 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
24
|
import { ViewType } from "@obsidian-typings/obsidian-public-latest/implementations";
|
|
25
|
-
import {
|
|
25
|
+
import {
|
|
26
|
+
MarkdownView,
|
|
27
|
+
Menu,
|
|
28
|
+
setIcon,
|
|
29
|
+
setTooltip
|
|
30
|
+
} from "obsidian";
|
|
31
|
+
import { convertAsyncToSync } from "../async.mjs";
|
|
26
32
|
import {
|
|
27
33
|
CallbackDisposable,
|
|
28
34
|
MultipleDisposeBehavior
|
|
29
35
|
} from "../disposable.mjs";
|
|
30
36
|
import { noop } from "../function.mjs";
|
|
31
37
|
import { getObsidianDevUtilsState } from "../obsidian-dev-utils-state.mjs";
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
} from "./editor.mjs";
|
|
38
|
+
import { assertNonNullable } from "../type-guards.mjs";
|
|
39
|
+
import { ComponentEx } from "./components/component-ex.mjs";
|
|
40
|
+
import { toggleEditorReadOnly } from "./editor.mjs";
|
|
36
41
|
import { getPath } from "./file-system.mjs";
|
|
37
42
|
import { t } from "./i18n/i18n.mjs";
|
|
43
|
+
import { confirm } from "./modals/confirm.mjs";
|
|
44
|
+
import { getPluginId } from "./plugin/plugin-id.mjs";
|
|
38
45
|
const EDITOR_LOCK_STATE_KEY = "editorLock";
|
|
39
46
|
const LOCK_ICON_ID = "lock";
|
|
47
|
+
const LOCK_INDICATOR_CSS_CLASS = "obsidian-dev-utils-lock-indicator";
|
|
48
|
+
const STATUS_BAR_ITEM_CSS_CLASS = "status-bar-item";
|
|
49
|
+
const STATUS_BAR_CSS_SELECTOR = ".status-bar";
|
|
50
|
+
const UNLOCK_ICON_ID = "unlock";
|
|
51
|
+
class EditorLockEventsComponent extends ComponentEx {
|
|
52
|
+
constructor(app, onChange) {
|
|
53
|
+
super();
|
|
54
|
+
this.app = app;
|
|
55
|
+
this.onChange = onChange;
|
|
56
|
+
}
|
|
57
|
+
app;
|
|
58
|
+
onChange;
|
|
59
|
+
onload() {
|
|
60
|
+
super.onload();
|
|
61
|
+
this.registerEvent(this.app.workspace.on("active-leaf-change", this.onChange));
|
|
62
|
+
this.registerEvent(this.app.workspace.on("layout-change", this.onChange));
|
|
63
|
+
this.registerEvent(this.app.workspace.on("file-open", this.onChange));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
40
66
|
class EditorPathLockManager {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
abortControllersByPath = /* @__PURE__ */ new Map();
|
|
68
|
+
eventsComponent;
|
|
69
|
+
indicatorsByView = /* @__PURE__ */ new Map();
|
|
70
|
+
lockCountByPluginIdByPath = /* @__PURE__ */ new Map();
|
|
71
|
+
statusBarItemEl = null;
|
|
44
72
|
isLocked(app, pathOrFile) {
|
|
45
|
-
return
|
|
73
|
+
return this.isPathLocked(getPath(app, pathOrFile));
|
|
46
74
|
}
|
|
47
|
-
lock(app, pathOrFile) {
|
|
75
|
+
lock(app, pathOrFile, pluginId, abortController) {
|
|
48
76
|
const path = getPath(app, pathOrFile);
|
|
49
|
-
|
|
50
|
-
|
|
77
|
+
let lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
78
|
+
if (!lockCountByPluginId) {
|
|
79
|
+
lockCountByPluginId = /* @__PURE__ */ new Map();
|
|
80
|
+
this.lockCountByPluginIdByPath.set(path, lockCountByPluginId);
|
|
81
|
+
}
|
|
82
|
+
lockCountByPluginId.set(pluginId, (lockCountByPluginId.get(pluginId) ?? 0) + 1);
|
|
83
|
+
if (abortController) {
|
|
84
|
+
let abortControllers = this.abortControllersByPath.get(path);
|
|
85
|
+
if (!abortControllers) {
|
|
86
|
+
abortControllers = /* @__PURE__ */ new Set();
|
|
87
|
+
this.abortControllersByPath.set(path, abortControllers);
|
|
88
|
+
}
|
|
89
|
+
abortControllers.add(abortController);
|
|
90
|
+
}
|
|
91
|
+
this.ensureSubscribed(app);
|
|
51
92
|
this.reconcile(app);
|
|
52
93
|
return new CallbackDisposable({
|
|
53
94
|
callback: () => {
|
|
54
|
-
|
|
95
|
+
if (abortController) {
|
|
96
|
+
const abortControllers = this.abortControllersByPath.get(path);
|
|
97
|
+
assertNonNullable(abortControllers);
|
|
98
|
+
abortControllers.delete(abortController);
|
|
99
|
+
if (abortControllers.size === 0) {
|
|
100
|
+
this.abortControllersByPath.delete(path);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.unlockPath(app, path, pluginId);
|
|
55
104
|
},
|
|
56
105
|
multipleDisposeBehavior: MultipleDisposeBehavior.Ignore
|
|
57
106
|
});
|
|
58
107
|
}
|
|
59
|
-
|
|
60
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Aborts every {@link AbortController} currently registered for the note at the given path, which
|
|
110
|
+
* cancels the operations holding the lock. Each operation releases its own lock in its `finally`
|
|
111
|
+
* when it observes the abort, so this does not unlock the path directly. A no-op when no controller
|
|
112
|
+
* is registered for the path.
|
|
113
|
+
*
|
|
114
|
+
* @param app - The Obsidian app instance.
|
|
115
|
+
* @param pathOrFile - The path or file of the note to request an unlock for.
|
|
116
|
+
*/
|
|
117
|
+
requestUnlock(app, pathOrFile) {
|
|
118
|
+
const abortControllers = this.abortControllersByPath.get(getPath(app, pathOrFile));
|
|
119
|
+
if (!abortControllers) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
for (const controller of abortControllers) {
|
|
123
|
+
controller.abort();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
unlock(app, pathOrFile, pluginId) {
|
|
127
|
+
this.unlockPath(app, getPath(app, pathOrFile), pluginId);
|
|
128
|
+
}
|
|
129
|
+
unlockAllForPlugin(app, pluginId) {
|
|
130
|
+
for (const [path, lockCountByPluginId] of this.lockCountByPluginIdByPath) {
|
|
131
|
+
if (lockCountByPluginId.delete(pluginId) && lockCountByPluginId.size === 0) {
|
|
132
|
+
this.lockCountByPluginIdByPath.delete(path);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
this.reconcileAndCleanup(app);
|
|
136
|
+
}
|
|
137
|
+
createIndicators(app, view, path, tooltip) {
|
|
138
|
+
const actionIconEl = view.addAction(LOCK_ICON_ID, tooltip, noop);
|
|
139
|
+
this.registerUnlockMenu(app, actionIconEl, () => path);
|
|
140
|
+
let tabIconEl = null;
|
|
141
|
+
const tabStatusContainerEl = view.leaf.tabHeaderStatusContainerEl;
|
|
142
|
+
if (tabStatusContainerEl) {
|
|
143
|
+
tabIconEl = tabStatusContainerEl.createSpan({ cls: LOCK_INDICATOR_CSS_CLASS });
|
|
144
|
+
setIcon(tabIconEl, LOCK_ICON_ID);
|
|
145
|
+
setTooltip(tabIconEl, tooltip);
|
|
146
|
+
this.registerUnlockMenu(app, tabIconEl, () => path);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
actionIconEl,
|
|
150
|
+
tabIconEl
|
|
151
|
+
};
|
|
61
152
|
}
|
|
62
|
-
|
|
63
|
-
if (this.
|
|
153
|
+
ensureSubscribed(app) {
|
|
154
|
+
if (this.eventsComponent) {
|
|
64
155
|
return;
|
|
65
156
|
}
|
|
66
|
-
|
|
157
|
+
this.eventsComponent = new EditorLockEventsComponent(app, () => {
|
|
67
158
|
this.reconcile(app);
|
|
68
|
-
};
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
);
|
|
159
|
+
});
|
|
160
|
+
this.eventsComponent.load();
|
|
161
|
+
}
|
|
162
|
+
isPathLocked(path) {
|
|
163
|
+
return (this.lockCountByPluginIdByPath.get(path)?.size ?? 0) > 0;
|
|
164
|
+
}
|
|
165
|
+
lockingPluginNames(app, path) {
|
|
166
|
+
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
167
|
+
assertNonNullable(lockCountByPluginId);
|
|
168
|
+
return Array.from(lockCountByPluginId.keys()).map((pluginId) => app.plugins.manifests[pluginId]?.name ?? pluginId);
|
|
169
|
+
}
|
|
170
|
+
lockTooltip(app, path) {
|
|
171
|
+
const header = t(($) => $.obsidianDevUtils.editorLock.lockedByTooltip);
|
|
172
|
+
return [header, ...this.lockingPluginNames(app, path)].join("\n");
|
|
73
173
|
}
|
|
74
174
|
reconcile(app) {
|
|
75
175
|
const viewsToLock = /* @__PURE__ */ new Set();
|
|
@@ -82,60 +182,184 @@ class EditorPathLockManager {
|
|
|
82
182
|
if (path === void 0) {
|
|
83
183
|
continue;
|
|
84
184
|
}
|
|
85
|
-
if (
|
|
185
|
+
if (this.isPathLocked(path)) {
|
|
86
186
|
viewsToLock.add(view);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
187
|
+
const tooltip = this.lockTooltip(app, path);
|
|
188
|
+
toggleEditorReadOnly(view.editor, true);
|
|
189
|
+
const indicators = this.indicatorsByView.get(view);
|
|
190
|
+
if (indicators) {
|
|
191
|
+
this.updateIndicatorTooltips(indicators, tooltip);
|
|
192
|
+
} else {
|
|
193
|
+
this.indicatorsByView.set(view, this.createIndicators(app, view, path, tooltip));
|
|
91
194
|
}
|
|
92
195
|
}
|
|
93
196
|
}
|
|
94
|
-
for (const [view,
|
|
197
|
+
for (const [view, indicators] of this.indicatorsByView) {
|
|
95
198
|
if (!viewsToLock.has(view)) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
199
|
+
toggleEditorReadOnly(view.editor, false);
|
|
200
|
+
indicators.actionIconEl.remove();
|
|
201
|
+
indicators.tabIconEl?.remove();
|
|
202
|
+
this.indicatorsByView.delete(view);
|
|
99
203
|
}
|
|
100
204
|
}
|
|
205
|
+
this.updateStatusBar(app);
|
|
101
206
|
}
|
|
102
|
-
|
|
103
|
-
|
|
207
|
+
reconcileAndCleanup(app) {
|
|
208
|
+
this.reconcile(app);
|
|
209
|
+
if (this.lockCountByPluginIdByPath.size === 0) {
|
|
210
|
+
this.eventsComponent?.unload();
|
|
211
|
+
this.eventsComponent = void 0;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
registerUnlockMenu(app, el, getContextPath) {
|
|
215
|
+
el.addEventListener("contextmenu", (evt) => {
|
|
216
|
+
evt.preventDefault();
|
|
217
|
+
const path = getContextPath();
|
|
218
|
+
if (path === void 0) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const menu = new Menu();
|
|
222
|
+
menu.addItem((item) => {
|
|
223
|
+
item.setTitle(t(($) => $.obsidianDevUtils.editorLock.unlockMenuItem)).setIcon(UNLOCK_ICON_ID).onClick(convertAsyncToSync(async () => {
|
|
224
|
+
const isConfirmed = await confirm({
|
|
225
|
+
app,
|
|
226
|
+
message: this.unlockConfirmMessage(app, path),
|
|
227
|
+
title: t(($) => $.obsidianDevUtils.editorLock.unlockConfirmTitle)
|
|
228
|
+
});
|
|
229
|
+
if (isConfirmed) {
|
|
230
|
+
this.requestUnlock(app, path);
|
|
231
|
+
}
|
|
232
|
+
}));
|
|
233
|
+
});
|
|
234
|
+
menu.showAtMouseEvent(evt);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
unlockConfirmMessage(app, path) {
|
|
238
|
+
const header = t(($) => $.obsidianDevUtils.editorLock.unlockConfirmMessage);
|
|
239
|
+
return [header, ...this.lockingPluginNames(app, path)].join("\n");
|
|
240
|
+
}
|
|
241
|
+
unlockPath(app, path, pluginId) {
|
|
242
|
+
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
243
|
+
if (!lockCountByPluginId) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const count = lockCountByPluginId.get(pluginId) ?? 0;
|
|
104
247
|
if (count <= 0) {
|
|
105
248
|
return;
|
|
106
249
|
}
|
|
107
250
|
if (count === 1) {
|
|
108
|
-
|
|
251
|
+
lockCountByPluginId.delete(pluginId);
|
|
109
252
|
} else {
|
|
110
|
-
|
|
253
|
+
lockCountByPluginId.set(pluginId, count - 1);
|
|
111
254
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
this.unregisterEvents(app);
|
|
255
|
+
if (lockCountByPluginId.size === 0) {
|
|
256
|
+
this.lockCountByPluginIdByPath.delete(path);
|
|
115
257
|
}
|
|
258
|
+
this.reconcileAndCleanup(app);
|
|
116
259
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
260
|
+
updateIndicatorTooltips(indicators, tooltip) {
|
|
261
|
+
setTooltip(indicators.actionIconEl, tooltip);
|
|
262
|
+
if (indicators.tabIconEl) {
|
|
263
|
+
setTooltip(indicators.tabIconEl, tooltip);
|
|
120
264
|
}
|
|
121
|
-
|
|
265
|
+
}
|
|
266
|
+
updateStatusBar(app) {
|
|
267
|
+
const activeView = app.workspace.getActiveViewOfType(MarkdownView);
|
|
268
|
+
const activePath = activeView?.file?.path;
|
|
269
|
+
const isActiveLocked = activePath !== void 0 && this.isPathLocked(activePath);
|
|
270
|
+
if (!isActiveLocked || !activeView) {
|
|
271
|
+
this.statusBarItemEl?.remove();
|
|
272
|
+
this.statusBarItemEl = null;
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
if (!this.statusBarItemEl) {
|
|
276
|
+
const statusBarEl = activeView.containerEl.ownerDocument.body.querySelector(STATUS_BAR_CSS_SELECTOR);
|
|
277
|
+
if (!statusBarEl) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this.statusBarItemEl = statusBarEl.createDiv({ cls: [STATUS_BAR_ITEM_CSS_CLASS, LOCK_INDICATOR_CSS_CLASS] });
|
|
281
|
+
setIcon(this.statusBarItemEl, LOCK_ICON_ID);
|
|
282
|
+
this.registerUnlockMenu(app, this.statusBarItemEl, () => app.workspace.getActiveViewOfType(MarkdownView)?.file?.path);
|
|
283
|
+
}
|
|
284
|
+
setTooltip(this.statusBarItemEl, this.lockTooltip(app, activePath));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
class EditorLockComponent extends ComponentEx {
|
|
288
|
+
app;
|
|
289
|
+
pluginId;
|
|
290
|
+
/**
|
|
291
|
+
* Creates an editor-lock handle owned by a plugin.
|
|
292
|
+
*
|
|
293
|
+
* @param app - The Obsidian app instance.
|
|
294
|
+
* @param pluginId - The id of the owning plugin. Defaults to the current plugin context's id; pass
|
|
295
|
+
* it explicitly (e.g. from a plugin's `manifest.id`) when constructing before the plugin context is
|
|
296
|
+
* initialized, such as inside `PluginBase.onload`.
|
|
297
|
+
*/
|
|
298
|
+
constructor(app, pluginId = getPluginId()) {
|
|
299
|
+
super();
|
|
300
|
+
this.app = app;
|
|
301
|
+
this.pluginId = pluginId;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Checks whether the note at the given path is currently locked by any plugin.
|
|
305
|
+
*
|
|
306
|
+
* @param pathOrFile - The path or file of the note to check.
|
|
307
|
+
* @returns `true` if the note has at least one active lock, `false` otherwise.
|
|
308
|
+
*/
|
|
309
|
+
isLockedForPath(pathOrFile) {
|
|
310
|
+
return getManager().isLocked(this.app, pathOrFile);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Locks the note at the given path on behalf of this plugin, making it read-only in every current
|
|
314
|
+
* and future {@link MarkdownView} until the lock is released. Reference-counted: balance each call
|
|
315
|
+
* with a dispose of the returned {@link Disposable} (ideally via `using`) or {@link unlockForPath}.
|
|
316
|
+
*
|
|
317
|
+
* @param pathOrFile - The path or file of the note to lock.
|
|
318
|
+
* @param options - Optional locking options. Pass an
|
|
319
|
+
* {@link EditorLockComponentLockForPathOptions.abortController} to make the lock cancelable via the
|
|
320
|
+
* indicator's right-click "unlock" menu or {@link requestEditorUnlockForPath}.
|
|
321
|
+
* @returns A {@link Disposable} that releases this lock when disposed. Disposing more than once is a no-op.
|
|
322
|
+
*/
|
|
323
|
+
lockForPath(pathOrFile, options) {
|
|
324
|
+
return getManager().lock(this.app, pathOrFile, this.pluginId, options?.abortController);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Releases every lock still held by this plugin when the component (and thus the plugin) unloads,
|
|
328
|
+
* so no note is left stuck read-only by an operation that never completed.
|
|
329
|
+
*/
|
|
330
|
+
onunload() {
|
|
331
|
+
getManager().unlockAllForPlugin(this.app, this.pluginId);
|
|
332
|
+
super.onunload();
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Releases one lock previously acquired for the note at the given path via {@link lockForPath}.
|
|
336
|
+
*
|
|
337
|
+
* @param pathOrFile - The path or file of the note to unlock.
|
|
338
|
+
*/
|
|
339
|
+
unlockForPath(pathOrFile) {
|
|
340
|
+
getManager().unlock(this.app, pathOrFile, this.pluginId);
|
|
122
341
|
}
|
|
123
342
|
}
|
|
124
343
|
function isEditorLockedForPath(app, pathOrFile) {
|
|
125
344
|
return getManager().isLocked(app, pathOrFile);
|
|
126
345
|
}
|
|
127
346
|
function lockEditorForPath(app, pathOrFile) {
|
|
128
|
-
return getManager().lock(app, pathOrFile);
|
|
347
|
+
return getManager().lock(app, pathOrFile, getPluginId());
|
|
348
|
+
}
|
|
349
|
+
function requestEditorUnlockForPath(app, pathOrFile) {
|
|
350
|
+
getManager().requestUnlock(app, pathOrFile);
|
|
129
351
|
}
|
|
130
352
|
function unlockEditorForPath(app, pathOrFile) {
|
|
131
|
-
getManager().unlock(app, pathOrFile);
|
|
353
|
+
getManager().unlock(app, pathOrFile, getPluginId());
|
|
132
354
|
}
|
|
133
355
|
function getManager() {
|
|
134
356
|
return getObsidianDevUtilsState(EDITOR_LOCK_STATE_KEY, new EditorPathLockManager()).value;
|
|
135
357
|
}
|
|
136
358
|
export {
|
|
359
|
+
EditorLockComponent,
|
|
137
360
|
isEditorLockedForPath,
|
|
138
361
|
lockEditorForPath,
|
|
362
|
+
requestEditorUnlockForPath,
|
|
139
363
|
unlockEditorForPath
|
|
140
364
|
};
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayBsb2NrRWRpdG9yfSAvIHtAbGluayB1bmxvY2tFZGl0b3J9IGZyb20gYC4vZWRpdG9yLnRzYCB0b2dnbGUgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhXG4gKiBzaW5nbGUge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGljb24uIExvY2tzIGFyZSByZWZlcmVuY2UtY291bnRlZCwgc28gbmVzdGVkIG9yXG4gKiBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZSBsYXN0IGxvY2sgaXNcbiAqIHJlbGVhc2VkLlxuICpcbiAqIFRoZSBhY3F1aXJlcnMgcmV0dXJuIGEge0BsaW5rIERpc3Bvc2FibGV9LCBzbyB0aGUgcHJlZmVycmVkIGNhbGwgc3R5bGUgaXMgYSBgdXNpbmdgIGRlY2xhcmF0aW9uXG4gKiB0aGF0IHJlbGVhc2VzIGF1dG9tYXRpY2FsbHkgYXQgc2NvcGUgZXhpdCAoaW5jbHVkaW5nIG9uIHRocm93KTpcbiAqXG4gKiBgYGB0c1xuICogdXNpbmcgX2xvY2sgPSBsb2NrRWRpdG9yRm9yUGF0aChhcHAsIHBhdGgpO1xuICogLy8gLi4uIGxvbmctcnVubmluZyB3b3JrIChwcm9jZXNzLCBwcm9jZXNzRnJvbnRNYXR0ZXIsIG1lcmdlL3NwbGl0KSAuLi5cbiAqIC8vIGF1dG8tdW5sb2NrZWQgYXQgc2NvcGUgZXhpdFxuICogYGBgXG4gKlxuICogVGhlIGV4cGxpY2l0IHtAbGluayB1bmxvY2tFZGl0b3JGb3JQYXRofSBwYWlyIHJlbWFpbnMgYXZhaWxhYmxlIGZvciBub24tYHVzaW5nYCBjYWxsIHNpdGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBFdmVudFJlZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgbG9ja0VkaXRvcixcbiAgdW5sb2NrRWRpdG9yXG59IGZyb20gJy4vZWRpdG9yLnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbmNvbnN0IEVESVRPUl9MT0NLX1NUQVRFX0tFWSA9ICdlZGl0b3JMb2NrJztcbmNvbnN0IExPQ0tfSUNPTl9JRCA9ICdsb2NrJztcblxuLyoqXG4gKiBUcmFja3MgcmVmZXJlbmNlLWNvdW50ZWQsIHBhdGgtc2NvcGVkIGVkaXRvciBsb2NrcyBhbmQga2VlcHMgZXZlcnkgb3BlbiB7QGxpbmsgTWFya2Rvd25WaWV3fSBpblxuICogc3luYyB3aXRoIHRoZSBsb2NrZWQtcGF0aCBzZXQuIEEgc2luZ2xlIGluc3RhbmNlIGxpdmVzIG9uIHRoZSBzaGFyZWQgYG9ic2lkaWFuLWRldi11dGlsc2Agc3RhdGUuXG4gKi9cbmNsYXNzIEVkaXRvclBhdGhMb2NrTWFuYWdlciB7XG4gIHByaXZhdGUgZXZlbnRSZWZzOiBFdmVudFJlZltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0NvdW50QnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NrZWRJY29uRWxCeVZpZXcgPSBuZXcgTWFwPE1hcmtkb3duVmlldywgSFRNTEVsZW1lbnQ+KCk7XG5cbiAgcHVibGljIGlzTG9ja2VkKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2tDb3VudEJ5UGF0aC5nZXQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKSA/PyAwKSA+IDA7XG4gIH1cblxuICBwdWJsaWMgbG9jayhhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IERpc3Bvc2FibGUge1xuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgdGhpcy5sb2NrQ291bnRCeVBhdGguc2V0KHBhdGgsICh0aGlzLmxvY2tDb3VudEJ5UGF0aC5nZXQocGF0aCkgPz8gMCkgKyAxKTtcbiAgICB0aGlzLmVuc3VyZUV2ZW50c1JlZ2lzdGVyZWQoYXBwKTtcbiAgICB0aGlzLnJlY29uY2lsZShhcHApO1xuXG4gICAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgcGF0aCk7XG4gICAgICB9LFxuICAgICAgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVubG9jayhhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICAgIHRoaXMudW5sb2NrUGF0aChhcHAsIGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUV2ZW50c1JlZ2lzdGVyZWQoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFJlZnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29uY2lsZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMucmVjb25jaWxlKGFwcCk7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50UmVmcy5wdXNoKFxuICAgICAgYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgcmVjb25jaWxlKSxcbiAgICAgIGFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCByZWNvbmNpbGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25jaWxlKGFwcDogQXBwKTogdm9pZCB7XG4gICAgY29uc3Qgdmlld3NUb0xvY2sgPSBuZXcgU2V0PE1hcmtkb3duVmlldz4oKTtcbiAgICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKCEodmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGggPSB2aWV3LmZpbGU/LnBhdGg7XG4gICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHRoaXMubG9ja0NvdW50QnlQYXRoLmdldChwYXRoKSA/PyAwKSA+IDApIHtcbiAgICAgICAgdmlld3NUb0xvY2suYWRkKHZpZXcpO1xuICAgICAgICBpZiAoIXRoaXMubG9ja2VkSWNvbkVsQnlWaWV3Lmhhcyh2aWV3KSkge1xuICAgICAgICAgIGxvY2tFZGl0b3Iodmlldy5lZGl0b3IpO1xuICAgICAgICAgIGNvbnN0IGljb25FbCA9IHZpZXcuYWRkQWN0aW9uKExPQ0tfSUNPTl9JRCwgdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2subG9ja2VkTm90ZVRvb2x0aXApLCBub29wKTtcbiAgICAgICAgICB0aGlzLmxvY2tlZEljb25FbEJ5Vmlldy5zZXQodmlldywgaWNvbkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZpZXcsIGljb25FbF0gb2YgdGhpcy5sb2NrZWRJY29uRWxCeVZpZXcpIHtcbiAgICAgIGlmICghdmlld3NUb0xvY2suaGFzKHZpZXcpKSB7XG4gICAgICAgIHVubG9ja0VkaXRvcih2aWV3LmVkaXRvcik7XG4gICAgICAgIGljb25FbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5sb2NrZWRJY29uRWxCeVZpZXcuZGVsZXRlKHZpZXcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLmxvY2tDb3VudEJ5UGF0aC5nZXQocGF0aCkgPz8gMDtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2tDb3VudEJ5UGF0aC5zZXQocGF0aCwgY291bnQgLSAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29uY2lsZShhcHApO1xuXG4gICAgaWYgKHRoaXMubG9ja0NvdW50QnlQYXRoLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMudW5yZWdpc3RlckV2ZW50cyhhcHApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5yZWdpc3RlckV2ZW50cyhhcHA6IEFwcCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZXZlbnRSZWYgb2YgdGhpcy5ldmVudFJlZnMpIHtcbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gICAgdGhpcy5ldmVudFJlZnMgPSBbXTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoIGlzIGN1cnJlbnRseSBsb2NrZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vdGUgaGFzIGF0IGxlYXN0IG9uZSBhY3RpdmUgbG9jaywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VkaXRvckxvY2tlZEZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZChhcHAsIHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIExvY2tzIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnQgYW5kIGZ1dHVyZVxuICoge0BsaW5rIE1hcmtkb3duVmlld30gdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuXG4gKlxuICogVGhlIGxvY2sgaXMgcmVmZXJlbmNlLWNvdW50ZWQ6IGVhY2ggY2FsbCBtdXN0IGJlIGJhbGFuY2VkIGJ5IGV4YWN0bHkgb25lIHJlbGVhc2UgKGVpdGhlciBkaXNwb3NpbmdcbiAqIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gXHUyMDE0IGlkZWFsbHkgdmlhIGEgYHVzaW5nYCBkZWNsYXJhdGlvbiBcdTIwMTQgb3IgYSBtYXRjaGluZ1xuICoge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IGNhbGwpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbGVhc2VzIHRoaXMgbG9jayB3aGVuIGRpc3Bvc2VkLiBEaXNwb3NpbmcgbW9yZSB0aGFuIG9uY2UgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogRGlzcG9zYWJsZSB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayhhcHAsIHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIFJlbGVhc2VzIG9uZSBsb2NrIHByZXZpb3VzbHkgYWNxdWlyZWQgZm9yIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoIHZpYSB7QGxpbmsgbG9ja0VkaXRvckZvclBhdGh9LlxuICpcbiAqIFdoZW4gdGhlIGxhc3QgbG9jayBpcyByZWxlYXNlZCB0aGUgbm90ZSBiZWNvbWVzIGZ1bGx5IGVkaXRhYmxlIGFnYWluIGFuZCBpdHMgbG9jayBpY29uIGlzIHJlbW92ZWQuXG4gKiBDYWxsaW5nIHRoaXMgd2hlbiB0aGUgbm90ZSBpcyBub3QgbG9ja2VkIGlzIGEgbm8tb3AuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gdW5sb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5sb2NrRWRpdG9yRm9yUGF0aChhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICBnZXRNYW5hZ2VyKCkudW5sb2NrKGFwcCwgcGF0aE9yRmlsZSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hbmFnZXIoKTogRWRpdG9yUGF0aExvY2tNYW5hZ2VyIHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxFZGl0b3JQYXRoTG9ja01hbmFnZXI+KEVESVRPUl9MT0NLX1NUQVRFX0tFWSwgbmV3IEVkaXRvclBhdGhMb2NrTWFuYWdlcigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsb0JBQW9CO0FBSTdCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsZ0NBQWdDO0FBQ3pDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsU0FBUztBQUVsQixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLGVBQWU7QUFNckIsTUFBTSxzQkFBc0I7QUFBQSxFQUNsQixZQUF3QixDQUFDO0FBQUEsRUFDaEIsa0JBQWtCLG9CQUFJLElBQW9CO0FBQUEsRUFDMUMscUJBQXFCLG9CQUFJLElBQStCO0FBQUEsRUFFbEUsU0FBUyxLQUFVLFlBQWlDO0FBQ3pELFlBQVEsS0FBSyxnQkFBZ0IsSUFBSSxRQUFRLEtBQUssVUFBVSxDQUFDLEtBQUssS0FBSztBQUFBLEVBQ3JFO0FBQUEsRUFFTyxLQUFLLEtBQVUsWUFBb0M7QUFDeEQsVUFBTSxPQUFPLFFBQVEsS0FBSyxVQUFVO0FBQ3BDLFNBQUssZ0JBQWdCLElBQUksT0FBTyxLQUFLLGdCQUFnQixJQUFJLElBQUksS0FBSyxLQUFLLENBQUM7QUFDeEUsU0FBSyx1QkFBdUIsR0FBRztBQUMvQixTQUFLLFVBQVUsR0FBRztBQUVsQixXQUFPLElBQUksbUJBQW1CO0FBQUEsTUFDNUIsVUFBVSxNQUFZO0FBQ3BCLGFBQUssV0FBVyxLQUFLLElBQUk7QUFBQSxNQUMzQjtBQUFBLE1BQ0EseUJBQXlCLHdCQUF3QjtBQUFBLElBQ25ELENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFTyxPQUFPLEtBQVUsWUFBOEI7QUFDcEQsU0FBSyxXQUFXLEtBQUssUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUFBLEVBQy9DO0FBQUEsRUFFUSx1QkFBdUIsS0FBZ0I7QUFDN0MsUUFBSSxLQUFLLFVBQVUsU0FBUyxHQUFHO0FBQzdCO0FBQUEsSUFDRjtBQUVBLFVBQU0sWUFBWSxNQUFZO0FBQzVCLFdBQUssVUFBVSxHQUFHO0FBQUEsSUFDcEI7QUFDQSxTQUFLLFVBQVU7QUFBQSxNQUNiLElBQUksVUFBVSxHQUFHLHNCQUFzQixTQUFTO0FBQUEsTUFDaEQsSUFBSSxVQUFVLEdBQUcsaUJBQWlCLFNBQVM7QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFBQSxFQUVRLFVBQVUsS0FBZ0I7QUFDaEMsVUFBTSxjQUFjLG9CQUFJLElBQWtCO0FBQzFDLGVBQVcsUUFBUSxJQUFJLFVBQVUsZ0JBQWdCLFNBQVMsUUFBUSxHQUFHO0FBQ25FLFlBQU0sT0FBTyxLQUFLO0FBQ2xCLFVBQUksRUFBRSxnQkFBZ0IsZUFBZTtBQUNuQztBQUFBLE1BQ0Y7QUFFQSxZQUFNLE9BQU8sS0FBSyxNQUFNO0FBQ3hCLFVBQUksU0FBUyxRQUFXO0FBQ3RCO0FBQUEsTUFDRjtBQUVBLFdBQUssS0FBSyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQzdDLG9CQUFZLElBQUksSUFBSTtBQUNwQixZQUFJLENBQUMsS0FBSyxtQkFBbUIsSUFBSSxJQUFJLEdBQUc7QUFDdEMscUJBQVcsS0FBSyxNQUFNO0FBQ3RCLGdCQUFNLFNBQVMsS0FBSyxVQUFVLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsV0FBVyxpQkFBaUIsR0FBRyxJQUFJO0FBQzNHLGVBQUssbUJBQW1CLElBQUksTUFBTSxNQUFNO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLGVBQVcsQ0FBQyxNQUFNLE1BQU0sS0FBSyxLQUFLLG9CQUFvQjtBQUNwRCxVQUFJLENBQUMsWUFBWSxJQUFJLElBQUksR0FBRztBQUMxQixxQkFBYSxLQUFLLE1BQU07QUFDeEIsZUFBTyxPQUFPO0FBQ2QsYUFBSyxtQkFBbUIsT0FBTyxJQUFJO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRVEsV0FBVyxLQUFVLE1BQW9CO0FBQy9DLFVBQU0sUUFBUSxLQUFLLGdCQUFnQixJQUFJLElBQUksS0FBSztBQUNoRCxRQUFJLFNBQVMsR0FBRztBQUNkO0FBQUEsSUFDRjtBQUVBLFFBQUksVUFBVSxHQUFHO0FBQ2YsV0FBSyxnQkFBZ0IsT0FBTyxJQUFJO0FBQUEsSUFDbEMsT0FBTztBQUNMLFdBQUssZ0JBQWdCLElBQUksTUFBTSxRQUFRLENBQUM7QUFBQSxJQUMxQztBQUVBLFNBQUssVUFBVSxHQUFHO0FBRWxCLFFBQUksS0FBSyxnQkFBZ0IsU0FBUyxHQUFHO0FBQ25DLFdBQUssaUJBQWlCLEdBQUc7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFBQSxFQUVRLGlCQUFpQixLQUFnQjtBQUN2QyxlQUFXLFlBQVksS0FBSyxXQUFXO0FBQ3JDLFVBQUksVUFBVSxPQUFPLFFBQVE7QUFBQSxJQUMvQjtBQUNBLFNBQUssWUFBWSxDQUFDO0FBQUEsRUFDcEI7QUFDRjtBQVNPLFNBQVMsc0JBQXNCLEtBQVUsWUFBaUM7QUFDL0UsU0FBTyxXQUFXLEVBQUUsU0FBUyxLQUFLLFVBQVU7QUFDOUM7QUFjTyxTQUFTLGtCQUFrQixLQUFVLFlBQW9DO0FBQzlFLFNBQU8sV0FBVyxFQUFFLEtBQUssS0FBSyxVQUFVO0FBQzFDO0FBV08sU0FBUyxvQkFBb0IsS0FBVSxZQUE4QjtBQUMxRSxhQUFXLEVBQUUsT0FBTyxLQUFLLFVBQVU7QUFDckM7QUFFQSxTQUFTLGFBQW9DO0FBQzNDLFNBQU8seUJBQWdELHVCQUF1QixJQUFJLHNCQUFzQixDQUFDLEVBQUU7QUFDN0c7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayB0b2dnbGVFZGl0b3JSZWFkT25seX0gZnJvbSBgLi9lZGl0b3IudHNgIHRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZVxuICoge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGluZGljYXRvciBpbiBpdHMgdGFiIGhlYWRlciwgaXRzIHZpZXcgYWN0aW9uIGJhciwgYW5kXG4gKiB0aGUgc3RhdHVzIGJhciAod2hpbGUgdGhlIG5vdGUgaXMgYWN0aXZlKS4gTG9ja3MgYXJlIHJlZmVyZW5jZS1jb3VudGVkIHBlciBsb2NraW5nIHBsdWdpbiwgc29cbiAqIG5lc3RlZCBvciBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZVxuICogbGFzdCBsb2NrIGlzIHJlbGVhc2VkIFx1MjAxNCBhbmQgdGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKlxuICogVGhlIGFjcXVpcmVycyByZXR1cm4gYSB7QGxpbmsgRGlzcG9zYWJsZX0sIHNvIHRoZSBwcmVmZXJyZWQgY2FsbCBzdHlsZSBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb25cbiAqIHRoYXQgcmVsZWFzZXMgYXV0b21hdGljYWxseSBhdCBzY29wZSBleGl0IChpbmNsdWRpbmcgb24gdGhyb3cpOlxuICpcbiAqIGBgYHRzXG4gKiB1c2luZyBfbG9jayA9IGxvY2tFZGl0b3JGb3JQYXRoKGFwcCwgcGF0aCk7XG4gKiAvLyAuLi4gbG9uZy1ydW5uaW5nIHdvcmsgKHByb2Nlc3MsIHByb2Nlc3NGcm9udE1hdHRlciwgbWVyZ2Uvc3BsaXQpIC4uLlxuICogLy8gYXV0by11bmxvY2tlZCBhdCBzY29wZSBleGl0XG4gKiBgYGBcbiAqXG4gKiBUaGUgZXhwbGljaXQge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IHBhaXIgcmVtYWlucyBhdmFpbGFibGUgZm9yIG5vbi1gdXNpbmdgIGNhbGwgc2l0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBNZW51LFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Jcbn0gZnJvbSAnLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IHRvZ2dsZUVkaXRvclJlYWRPbmx5IH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuL21vZGFscy9jb25maXJtLnRzJztcbmltcG9ydCB7IGdldFBsdWdpbklkIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWlkLnRzJztcblxuY29uc3QgRURJVE9SX0xPQ0tfU1RBVEVfS0VZID0gJ2VkaXRvckxvY2snO1xuY29uc3QgTE9DS19JQ09OX0lEID0gJ2xvY2snO1xuY29uc3QgTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWRldi11dGlscy1sb2NrLWluZGljYXRvcic7XG5jb25zdCBTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTID0gJ3N0YXR1cy1iYXItaXRlbSc7XG5jb25zdCBTVEFUVVNfQkFSX0NTU19TRUxFQ1RPUiA9ICcuc3RhdHVzLWJhcic7XG5jb25zdCBVTkxPQ0tfSUNPTl9JRCA9ICd1bmxvY2snO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50LmxvY2tGb3JQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9jay4gV2hlbiB0aGUgbG9jayBpbmRpY2F0b3IgaXNcbiAgICogcmlnaHQtY2xpY2tlZCBhbmQgdGhlIHVzZXIgY29uZmlybXMgYW4gdW5sb2NrIChvciB7QGxpbmsgcmVxdWVzdEVkaXRvclVubG9ja0ZvclBhdGh9IGlzIGNhbGxlZCBmb3JcbiAgICogdGhlIHBhdGgpLCB0aGlzIGNvbnRyb2xsZXIgaXMgYWJvcnRlZCBzbyB0aGUgb3BlcmF0aW9uIGhvbGRpbmcgdGhlIGxvY2sgY2FuIGNhbmNlbCBpdHNlbGYgYW5kXG4gICAqIHJlbGVhc2UgdGhlIGxvY2sgaW4gaXRzIG93biBjbGVhbnVwLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xufVxuXG5pbnRlcmZhY2UgTG9ja0luZGljYXRvcnMge1xuICByZWFkb25seSBhY3Rpb25JY29uRWw6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSB0YWJJY29uRWw6IEhUTUxFbGVtZW50IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIHRoZSB3b3Jrc3BhY2UgZXZlbnRzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBsb2NrIHJlY29uY2lsZS4gSW1wbGVtZW50ZWQgYXMgYVxuICoge0BsaW5rIENvbXBvbmVudEV4fSBzbyB0aGUgc3Vic2NyaXB0aW9ucyBhcmUgcmVnaXN0ZXJlZCBvbiBgbG9hZCgpYCBhbmQgYXV0b21hdGljYWxseSByZW1vdmVkIG9uXG4gKiBgdW5sb2FkKClgLCBpbnN0ZWFkIG9mIGJlaW5nIHRyYWNrZWQgYW5kIHRvcm4gZG93biBieSBoYW5kLlxuICovXG5jbGFzcyBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcCwgcHJpdmF0ZSByZWFkb25seSBvbkNoYW5nZTogKCkgPT4gdm9pZCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2FjdGl2ZS1sZWFmLWNoYW5nZScsIHRoaXMub25DaGFuZ2UpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCdsYXlvdXQtY2hhbmdlJywgdGhpcy5vbkNoYW5nZSkpO1xuICAgIC8vIFNhbWUtbGVhZiBuYXZpZ2F0aW9uIHRvIGFub3RoZXIgbm90ZSBmaXJlcyBubyBsZWFmL2xheW91dCBjaGFuZ2U7IHdpdGhvdXQgdGhpcyBpdCBzdGF5cyByZWFkLW9ubHkuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignZmlsZS1vcGVuJywgdGhpcy5vbkNoYW5nZSkpO1xuICB9XG59XG5cbi8qKlxuICogVHJhY2tzIHJlZmVyZW5jZS1jb3VudGVkLCBwYXRoLXNjb3BlZCBlZGl0b3IgbG9ja3MgYW5kIGtlZXBzIGV2ZXJ5IG9wZW4ge0BsaW5rIE1hcmtkb3duVmlld30gaW5cbiAqIHN5bmMgd2l0aCB0aGUgbG9ja2VkLXBhdGggc2V0LiBBIHNpbmdsZSBpbnN0YW5jZSBsaXZlcyBvbiB0aGUgc2hhcmVkIGBvYnNpZGlhbi1kZXYtdXRpbHNgIHN0YXRlLlxuICogRm9yIGVhY2ggbG9ja2VkIHBhdGggdGhlIGxvY2sgY291bnQgaXMgdHJhY2tlZCBwZXIgbG9ja2luZyBwbHVnaW4sIHNvIHRoZSBpbmRpY2F0b3JzIGNhbiByZXBvcnRcbiAqIHdoaWNoIHBsdWdpbnMgY3VycmVudGx5IGhvbGQgYSBsb2NrLlxuICovXG5jbGFzcyBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcnNCeVBhdGggPSBuZXcgTWFwPHN0cmluZywgU2V0PEFib3J0Q29udHJvbGxlcj4+KCk7XG4gIHByaXZhdGUgZXZlbnRzQ29tcG9uZW50OiBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvcnNCeVZpZXcgPSBuZXcgTWFwPE1hcmtkb3duVmlldywgTG9ja0luZGljYXRvcnM+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpO1xuICBwcml2YXRlIHN0YXR1c0Jhckl0ZW1FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgaXNMb2NrZWQoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdGhMb2NrZWQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nLCBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXIpOiBEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICAgIGxldCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoIWxvY2tDb3VudEJ5UGx1Z2luSWQpIHtcbiAgICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNldChwYXRoLCBsb2NrQ291bnRCeVBsdWdpbklkKTtcbiAgICB9XG4gICAgbG9ja0NvdW50QnlQbHVnaW5JZC5zZXQocGx1Z2luSWQsIChsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMCkgKyAxKTtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICBsZXQgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQocGF0aCk7XG4gICAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVycyA9IG5ldyBTZXQ8QWJvcnRDb250cm9sbGVyPigpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlcnNCeVBhdGguc2V0KHBhdGgsIGFib3J0Q29udHJvbGxlcnMpO1xuICAgICAgfVxuICAgICAgYWJvcnRDb250cm9sbGVycy5hZGQoYWJvcnRDb250cm9sbGVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVTdWJzY3JpYmVkKGFwcCk7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcblxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXJzID0gdGhpcy5hYm9ydENvbnRyb2xsZXJzQnlQYXRoLmdldChwYXRoKTtcbiAgICAgICAgICAvLyBUaGUgc2V0IHdhcyBjcmVhdGVkIHdoZW4gdGhpcyBsb2NrIGFkZGVkIGl0cyBjb250cm9sbGVyIGFuZCBpcyBvbmx5IHJlbW92ZWQgaGVyZS5cbiAgICAgICAgICAvLyBJdCBpcyB0aGVyZWZvcmUgYWx3YXlzIHByZXNlbnQgd2hpbGUgdGhpcyAoc2luZ2xlLXJ1bikgZGlzcG9zYWJsZSBjYWxsYmFjayBleGVjdXRlcy5cbiAgICAgICAgICBhc3NlcnROb25OdWxsYWJsZShhYm9ydENvbnRyb2xsZXJzKTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5kZWxldGUocGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5sb2NrUGF0aChhcHAsIHBhdGgsIHBsdWdpbklkKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnRzIGV2ZXJ5IHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGN1cnJlbnRseSByZWdpc3RlcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgd2hpY2hcbiAgICogY2FuY2VscyB0aGUgb3BlcmF0aW9ucyBob2xkaW5nIHRoZSBsb2NrLiBFYWNoIG9wZXJhdGlvbiByZWxlYXNlcyBpdHMgb3duIGxvY2sgaW4gaXRzIGBmaW5hbGx5YFxuICAgKiB3aGVuIGl0IG9ic2VydmVzIHRoZSBhYm9ydCwgc28gdGhpcyBkb2VzIG5vdCB1bmxvY2sgdGhlIHBhdGggZGlyZWN0bHkuIEEgbm8tb3Agd2hlbiBubyBjb250cm9sbGVyXG4gICAqIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIHJlcXVlc3QgYW4gdW5sb2NrIGZvci5cbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0VW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBwbHVnaW5JZCk7XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrQWxsRm9yUGx1Z2luKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgbG9ja0NvdW50QnlQbHVnaW5JZF0gb2YgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoKSB7XG4gICAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpICYmIGxvY2tDb3VudEJ5UGx1Z2luSWQuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlY29uY2lsZUFuZENsZWFudXAoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5kaWNhdG9ycyhhcHA6IEFwcCwgdmlldzogTWFya2Rvd25WaWV3LCBwYXRoOiBzdHJpbmcsIHRvb2x0aXA6IHN0cmluZyk6IExvY2tJbmRpY2F0b3JzIHtcbiAgICBjb25zdCBhY3Rpb25JY29uRWwgPSB2aWV3LmFkZEFjdGlvbihMT0NLX0lDT05fSUQsIHRvb2x0aXAsIG5vb3ApO1xuICAgIHRoaXMucmVnaXN0ZXJVbmxvY2tNZW51KGFwcCwgYWN0aW9uSWNvbkVsLCAoKSA9PiBwYXRoKTtcblxuICAgIGxldCB0YWJJY29uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgdGFiU3RhdHVzQ29udGFpbmVyRWwgPSB2aWV3LmxlYWYudGFiSGVhZGVyU3RhdHVzQ29udGFpbmVyRWw7XG4gICAgaWYgKHRhYlN0YXR1c0NvbnRhaW5lckVsKSB7XG4gICAgICB0YWJJY29uRWwgPSB0YWJTdGF0dXNDb250YWluZXJFbC5jcmVhdGVTcGFuKHsgY2xzOiBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1MgfSk7XG4gICAgICBzZXRJY29uKHRhYkljb25FbCwgTE9DS19JQ09OX0lEKTtcbiAgICAgIHNldFRvb2x0aXAodGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJVbmxvY2tNZW51KGFwcCwgdGFiSWNvbkVsLCAoKSA9PiBwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uSWNvbkVsLFxuICAgICAgdGFiSWNvbkVsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU3Vic2NyaWJlZChhcHA6IEFwcCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50c0NvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50c0NvbXBvbmVudCA9IG5ldyBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50KGFwcCwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50c0NvbXBvbmVudC5sb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGlzUGF0aExvY2tlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk/LnNpemUgPz8gMCkgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NraW5nUGx1Z2luTmFtZXMoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICAvLyBgbG9ja2luZ1BsdWdpbk5hbWVzYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBhIGxvY2tlZCBwYXRoLCBzbyB0aGUgcGVyLXBsdWdpbiBtYXAgaXMgYWx3YXlzIHByZXNlbnQuXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUobG9ja0NvdW50QnlQbHVnaW5JZCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obG9ja0NvdW50QnlQbHVnaW5JZC5rZXlzKCkpLm1hcCgocGx1Z2luSWQpID0+IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/Lm5hbWUgPz8gcGx1Z2luSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NrVG9vbHRpcChhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZWRpdG9yTG9jay5sb2NrZWRCeVRvb2x0aXApO1xuICAgIC8vIEEgcnVudGltZS1sZW5ndGggbGlzdCBvZiBwbHVnaW4gbmFtZXMsIG9uZSBwZXIgbGluZSB1bmRlciB0aGUgaGVhZGVyLlxuICAgIHJldHVybiBbaGVhZGVyLCAuLi50aGlzLmxvY2tpbmdQbHVnaW5OYW1lcyhhcHAsIHBhdGgpXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25jaWxlKGFwcDogQXBwKTogdm9pZCB7XG4gICAgY29uc3Qgdmlld3NUb0xvY2sgPSBuZXcgU2V0PE1hcmtkb3duVmlldz4oKTtcbiAgICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKCEodmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGggPSB2aWV3LmZpbGU/LnBhdGg7XG4gICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc1BhdGhMb2NrZWQocGF0aCkpIHtcbiAgICAgICAgdmlld3NUb0xvY2suYWRkKHZpZXcpO1xuICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5sb2NrVG9vbHRpcChhcHAsIHBhdGgpO1xuICAgICAgICAvLyBSZS1hcHBseSB0aGUgcmVhZC1vbmx5IHRvZ2dsZSBvbiBldmVyeSByZWNvbmNpbGUsIG5vdCBvbmx5IHRoZSBmaXJzdCB0aW1lIGEgdmlldyBpcyB0cmFja2VkLlxuICAgICAgICAvLyBUaGUgdG9nZ2xlIGlzIGlkZW1wb3RlbnQsIHNvIHJlLWFwcGx5aW5nIHRvIGFuIGFscmVhZHktbG9ja2VkIHZpZXcgaXMgY2hlYXAuXG4gICAgICAgIC8vIEEgdmlldyBvcGVuZWQgYWZ0ZXIgdGhlIGxvY2sgaXMgcmVjb25jaWxlZCBzeW5jaHJvbm91c2x5LCBiZWZvcmUgaXRzIENvZGVNaXJyb3IgaXMgcmVhZHkuXG4gICAgICAgIC8vIEl0cyBmaXJzdCB0b2dnbGUgaXMgdGhlcmVmb3JlIGEgbm8tb3A7IHJlLWFwcGx5aW5nIG1ha2VzIHRoZSBsb2NrIHRha2UgaG9sZCBvbmNlIGl0IHNldHRsZXMuXG4gICAgICAgIHRvZ2dsZUVkaXRvclJlYWRPbmx5KHZpZXcuZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaW5kaWNhdG9ycyA9IHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5nZXQodmlldyk7XG4gICAgICAgIGlmIChpbmRpY2F0b3JzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzLCB0b29sdGlwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluZGljYXRvcnNCeVZpZXcuc2V0KHZpZXcsIHRoaXMuY3JlYXRlSW5kaWNhdG9ycyhhcHAsIHZpZXcsIHBhdGgsIHRvb2x0aXApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZpZXcsIGluZGljYXRvcnNdIG9mIHRoaXMuaW5kaWNhdG9yc0J5Vmlldykge1xuICAgICAgaWYgKCF2aWV3c1RvTG9jay5oYXModmlldykpIHtcbiAgICAgICAgdG9nZ2xlRWRpdG9yUmVhZE9ubHkodmlldy5lZGl0b3IsIGZhbHNlKTtcbiAgICAgICAgaW5kaWNhdG9ycy5hY3Rpb25JY29uRWwucmVtb3ZlKCk7XG4gICAgICAgIGluZGljYXRvcnMudGFiSWNvbkVsPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmRlbGV0ZSh2aWV3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1c0JhcihhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVBbmRDbGVhbnVwKGFwcDogQXBwKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICBpZiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50Py51bmxvYWQoKTtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJVbmxvY2tNZW51KGFwcDogQXBwLCBlbDogSFRNTEVsZW1lbnQsIGdldENvbnRleHRQYXRoOiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAvLyBBIHBsYWluIGxpc3RlbmVyIGRpZXMgd2l0aCB0aGUgZWxlbWVudCB3aGVuIGl0IGlzIGAucmVtb3ZlKClgZCBvbiB1bmxvY2ssIHNvIGl0IG5ldmVyIGxlYWtzLlxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0Q29udGV4dFBhdGgoKTtcbiAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVudSA9IG5ldyBNZW51KCk7XG4gICAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbVxuICAgICAgICAgIC5zZXRUaXRsZSh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuZWRpdG9yTG9jay51bmxvY2tNZW51SXRlbSkpXG4gICAgICAgICAgLnNldEljb24oVU5MT0NLX0lDT05fSUQpXG4gICAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29uZmlybWVkID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy51bmxvY2tDb25maXJtTWVzc2FnZShhcHAsIHBhdGgpLFxuICAgICAgICAgICAgICB0aXRsZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2sudW5sb2NrQ29uZmlybVRpdGxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VW5sb2NrKGFwcCwgcGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgICBtZW51LnNob3dBdE1vdXNlRXZlbnQoZXZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrQ29uZmlybU1lc3NhZ2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2sudW5sb2NrQ29uZmlybU1lc3NhZ2UpO1xuICAgIC8vIEEgcnVudGltZS1sZW5ndGggbGlzdCBvZiB0aGUgcGx1Z2lucyBjdXJyZW50bHkgaG9sZGluZyBhIGxvY2ssIG9uZSBwZXIgbGluZSB1bmRlciB0aGUgaGVhZGVyLlxuICAgIHJldHVybiBbaGVhZGVyLCAuLi50aGlzLmxvY2tpbmdQbHVnaW5OYW1lcyhhcHAsIHBhdGgpXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKCFsb2NrQ291bnRCeVBsdWdpbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMDtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgbG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NrQ291bnRCeVBsdWdpbklkLnNldChwbHVnaW5JZCwgY291bnQgLSAxKTtcbiAgICB9XG5cbiAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb25jaWxlQW5kQ2xlYW51cChhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzOiBMb2NrSW5kaWNhdG9ycywgdG9vbHRpcDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VG9vbHRpcChpbmRpY2F0b3JzLmFjdGlvbkljb25FbCwgdG9vbHRpcCk7XG4gICAgaWYgKGluZGljYXRvcnMudGFiSWNvbkVsKSB7XG4gICAgICBzZXRUb29sdGlwKGluZGljYXRvcnMudGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXR1c0JhcihhcHA6IEFwcCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgICBjb25zdCBhY3RpdmVQYXRoID0gYWN0aXZlVmlldz8uZmlsZT8ucGF0aDtcbiAgICBjb25zdCBpc0FjdGl2ZUxvY2tlZCA9IGFjdGl2ZVBhdGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzUGF0aExvY2tlZChhY3RpdmVQYXRoKTtcblxuICAgIGlmICghaXNBY3RpdmVMb2NrZWQgfHwgIWFjdGl2ZVZpZXcpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhdHVzQmFySXRlbUVsKSB7XG4gICAgICBjb25zdCBzdGF0dXNCYXJFbCA9IGFjdGl2ZVZpZXcuY29udGFpbmVyRWwub3duZXJEb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SKTtcbiAgICAgIGlmICghc3RhdHVzQmFyRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtRWwgPSBzdGF0dXNCYXJFbC5jcmVhdGVEaXYoeyBjbHM6IFtTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTLCBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1NdIH0pO1xuICAgICAgc2V0SWNvbih0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgTE9DS19JQ09OX0lEKTtcbiAgICAgIC8vIFRoZSBzaW5nbGUgc3RhdHVzLWJhciBpdGVtIGlzIHJldXNlZCBhY3Jvc3MgYWN0aXZlLW5vdGUgc3dpdGNoZXMuXG4gICAgICAvLyBJdCBtdXN0IHJlc29sdmUgdGhlIGN1cnJlbnRseSBhY3RpdmUgbm90ZSdzIHBhdGggYXQgY2xpY2sgdGltZSByYXRoZXIgdGhhbiBjYXB0dXJpbmcgb25lIHBhdGguXG4gICAgICB0aGlzLnJlZ2lzdGVyVW5sb2NrTWVudShhcHAsIHRoaXMuc3RhdHVzQmFySXRlbUVsLCAoKSA9PiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KT8uZmlsZT8ucGF0aCk7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcCh0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgdGhpcy5sb2NrVG9vbHRpcChhcHAsIGFjdGl2ZVBhdGgpKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGVyLXBsdWdpbiBoYW5kbGUgZm9yIG5vdGUtc2NvcGVkIGVkaXRvciBsb2NraW5nLiBBZGQgaXQgYXMgYSBjaGlsZCBvZiB5b3VyIHBsdWdpblxuICogKGB0aGlzLmFkZENoaWxkKG5ldyBFZGl0b3JMb2NrQ29tcG9uZW50KHRoaXMuYXBwKSlgKSBzbyB0aGF0IGFueSBsb2NrcyBpdCBzdGlsbCBob2xkcyBhcmUgcmVsZWFzZWRcbiAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMgXHUyMDE0IGEgbm90ZSBjYW4gbmV2ZXIgYmUgbGVmdCBzdHVjayByZWFkLW9ubHkgYmVjYXVzZSB0aGVcbiAqIHBsdWdpbiB0aGF0IGxvY2tlZCBpdCB3YXMgZGlzYWJsZWQgb3IgcmVsb2FkZWQgbWlkLW9wZXJhdGlvbi5cbiAqXG4gKiBMb2NrcyBhcmUgcmVmZXJlbmNlLWNvdW50ZWQgYW5kIGF0dHJpYnV0ZWQgdG8gdGhpcyBwbHVnaW4sIHNvIHRoZSBsb2NrIGluZGljYXRvcnMnIHRvb2x0aXAgbmFtZXNcbiAqIGl0IGFtb25nIHRoZSBwbHVnaW5zIGN1cnJlbnRseSBob2xkaW5nIGEgbG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckxvY2tDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3ItbG9jayBoYW5kbGUgb3duZWQgYnkgYSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgaWQgb2YgdGhlIG93bmluZyBwbHVnaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsdWdpbiBjb250ZXh0J3MgaWQ7IHBhc3NcbiAgICogaXQgZXhwbGljaXRseSAoZS5nLiBmcm9tIGEgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCkgd2hlbiBjb25zdHJ1Y3RpbmcgYmVmb3JlIHRoZSBwbHVnaW4gY29udGV4dCBpc1xuICAgKiBpbml0aWFsaXplZCwgc3VjaCBhcyBpbnNpZGUgYFBsdWdpbkJhc2Uub25sb2FkYC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyA9IGdldFBsdWdpbklkKCkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkIGJ5IGFueSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzTG9ja2VkRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3MgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggb24gYmVoYWxmIG9mIHRoaXMgcGx1Z2luLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnRcbiAgICogYW5kIGZ1dHVyZSB7QGxpbmsgTWFya2Rvd25WaWV3fSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gUmVmZXJlbmNlLWNvdW50ZWQ6IGJhbGFuY2UgZWFjaCBjYWxsXG4gICAqIHdpdGggYSBkaXNwb3NlIG9mIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gKGlkZWFsbHkgdmlhIGB1c2luZ2ApIG9yIHtAbGluayB1bmxvY2tGb3JQYXRofS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgbG9ja2luZyBvcHRpb25zLiBQYXNzIGFuXG4gICAqIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zLmFib3J0Q29udHJvbGxlcn0gdG8gbWFrZSB0aGUgbG9jayBjYW5jZWxhYmxlIHZpYSB0aGVcbiAgICogaW5kaWNhdG9yJ3MgcmlnaHQtY2xpY2sgXCJ1bmxvY2tcIiBtZW51IG9yIHtAbGluayByZXF1ZXN0RWRpdG9yVW5sb2NrRm9yUGF0aH0uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVsZWFzZXMgdGhpcyBsb2NrIHdoZW4gZGlzcG9zZWQuIERpc3Bvc2luZyBtb3JlIHRoYW4gb25jZSBpcyBhIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGxvY2tGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG9wdGlvbnM/OiBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5sb2NrKHRoaXMuYXBwLCBwYXRoT3JGaWxlLCB0aGlzLnBsdWdpbklkLCBvcHRpb25zPy5hYm9ydENvbnRyb2xsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGV2ZXJ5IGxvY2sgc3RpbGwgaGVsZCBieSB0aGlzIHBsdWdpbiB3aGVuIHRoZSBjb21wb25lbnQgKGFuZCB0aHVzIHRoZSBwbHVnaW4pIHVubG9hZHMsXG4gICAqIHNvIG5vIG5vdGUgaXMgbGVmdCBzdHVjayByZWFkLW9ubHkgYnkgYW4gb3BlcmF0aW9uIHRoYXQgbmV2ZXIgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIGdldE1hbmFnZXIoKS51bmxvY2tBbGxGb3JQbHVnaW4odGhpcy5hcHAsIHRoaXMucGx1Z2luSWQpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgb25lIGxvY2sgcHJldmlvdXNseSBhY3F1aXJlZCBmb3IgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggdmlhIHtAbGluayBsb2NrRm9yUGF0aH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gICAqL1xuICBwdWJsaWMgdW5sb2NrRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgZ2V0TWFuYWdlcigpLnVubG9jayh0aGlzLmFwcCwgcGF0aE9yRmlsZSwgdGhpcy5wbHVnaW5JZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0b3JMb2NrZWRGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkuaXNMb2NrZWQoYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBMb2NrcyB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgbWFraW5nIGl0IHJlYWQtb25seSBpbiBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmVcbiAqIHtAbGluayBNYXJrZG93blZpZXd9IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbmQgc2hvd2luZyBhIGxvY2sgaW5kaWNhdG9yIGluIHRoZSB0YWIgaGVhZGVyLFxuICogdmlldyBhY3Rpb24gYmFyLCBhbmQgKHdoaWxlIGFjdGl2ZSkgdGhlIHN0YXR1cyBiYXIuIFRoZSBpbmRpY2F0b3JzJyB0b29sdGlwIGxpc3RzIHRoZSBwbHVnaW5zXG4gKiB0aGF0IGN1cnJlbnRseSBob2xkIGEgbG9jayBvbiB0aGUgbm90ZS5cbiAqXG4gKiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCBwZXIgY2FsbGluZyBwbHVnaW46IGVhY2ggY2FsbCBtdXN0IGJlIGJhbGFuY2VkIGJ5IGV4YWN0bHkgb25lXG4gKiByZWxlYXNlIChlaXRoZXIgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gXHUyMDE0IGlkZWFsbHkgdmlhIGEgYHVzaW5nYCBkZWNsYXJhdGlvbiBcdTIwMTQgb3JcbiAqIGEgbWF0Y2hpbmcge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IGNhbGwpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbGVhc2VzIHRoaXMgbG9jayB3aGVuIGRpc3Bvc2VkLiBEaXNwb3NpbmcgbW9yZSB0aGFuIG9uY2UgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogRGlzcG9zYWJsZSB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayhhcHAsIHBhdGhPckZpbGUsIGdldFBsdWdpbklkKCkpO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIGFuIHVubG9jayBvZiB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBieSBhYm9ydGluZyBldmVyeSB7QGxpbmsgQWJvcnRDb250cm9sbGVyfSB0aGF0IHdhc1xuICogYXNzb2NpYXRlZCB3aXRoIGEgbG9jayBvbiBpdCAodmlhIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50LmxvY2tGb3JQYXRofSdzXG4gKiB7QGxpbmsgRWRpdG9yTG9ja0NvbXBvbmVudExvY2tGb3JQYXRoT3B0aW9ucy5hYm9ydENvbnRyb2xsZXJ9KS4gVGhlIG9wZXJhdGlvbnMgaG9sZGluZyB0aGUgbG9ja1xuICogb2JzZXJ2ZSB0aGUgYWJvcnQgYW5kIHJlbGVhc2UgdGhlaXIgb3duIGxvY2tzLiBBIG5vLW9wIHdoZW4gbm8gYWJvcnRhYmxlIGxvY2sgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gKiBwYXRoLlxuICpcbiAqIFRoaXMgbGV0cyBhIGNvbnN1bWluZyBwbHVnaW4gd2lyZSBpdHMgb3duIFwidW5sb2NrIGFjdGl2ZSBub3RlXCIgY29tbWFuZCB3aXRob3V0IHJlYWNoaW5nIGludG8gdGhlXG4gKiBsb2NrIG1hbmFnZXIgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gcmVxdWVzdCBhbiB1bmxvY2sgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEVkaXRvclVubG9ja0ZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgZ2V0TWFuYWdlcigpLnJlcXVlc3RVbmxvY2soYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBSZWxlYXNlcyBvbmUgbG9jayBwcmV2aW91c2x5IGFjcXVpcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCB2aWEge0BsaW5rIGxvY2tFZGl0b3JGb3JQYXRofS5cbiAqXG4gKiBXaGVuIHRoZSBsYXN0IGxvY2sgaXMgcmVsZWFzZWQgdGhlIG5vdGUgYmVjb21lcyBmdWxseSBlZGl0YWJsZSBhZ2FpbiBhbmQgaXRzIGxvY2sgaW5kaWNhdG9ycyBhcmVcbiAqIHJlbW92ZWQuIENhbGxpbmcgdGhpcyB3aGVuIHRoZSBub3RlIGlzIG5vdCBsb2NrZWQgaXMgYSBuby1vcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gIGdldE1hbmFnZXIoKS51bmxvY2soYXBwLCBwYXRoT3JGaWxlLCBnZXRQbHVnaW5JZCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuYWdlcigpOiBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPEVkaXRvclBhdGhMb2NrTWFuYWdlcj4oRURJVE9SX0xPQ0tfU1RBVEVf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
|
|
@@ -6,15 +6,19 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Editor } from 'obsidian';
|
|
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
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
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.
|
|
15
|
+
*
|
|
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`.
|
|
17
20
|
*
|
|
18
|
-
* @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.
|
|
19
23
|
*/
|
|
20
|
-
export declare function
|
|
24
|
+
export declare function toggleEditorReadOnly(editor: Editor, isReadOnly: boolean): void;
|
|
@@ -23,44 +23,31 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
Compartment,
|
|
26
|
-
EditorState
|
|
26
|
+
EditorState,
|
|
27
|
+
StateEffect
|
|
27
28
|
} from "@codemirror/state";
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
function lockEditor(editor) {
|
|
29
|
+
import { castTo } from "../object-utils.mjs";
|
|
30
|
+
const compartmentByCodeMirror = /* @__PURE__ */ new WeakMap();
|
|
31
|
+
function toggleEditorReadOnly(editor, isReadOnly) {
|
|
32
32
|
const compartment = ensureCompartment(editor);
|
|
33
33
|
editor.cm.dispatch({
|
|
34
|
-
effects: compartment.reconfigure([
|
|
35
|
-
EditorState.readOnly.of(true),
|
|
36
|
-
EditorView.editable.of(false)
|
|
37
|
-
])
|
|
38
|
-
});
|
|
39
|
-
return new CallbackDisposable({
|
|
40
|
-
callback: () => {
|
|
41
|
-
unlockEditor(editor);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
function unlockEditor(editor) {
|
|
46
|
-
const compartment = ensureCompartment(editor);
|
|
47
|
-
editor.cm.dispatch({
|
|
48
|
-
effects: compartment.reconfigure([
|
|
49
|
-
EditorState.readOnly.of(false),
|
|
50
|
-
EditorView.editable.of(true)
|
|
51
|
-
])
|
|
34
|
+
effects: compartment.reconfigure(isReadOnly ? EditorState.readOnly.of(true) : [])
|
|
52
35
|
});
|
|
53
36
|
}
|
|
54
37
|
function ensureCompartment(editor) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
38
|
+
const codeMirror = editor.cm;
|
|
39
|
+
const cachedCompartment = compartmentByCodeMirror.get(codeMirror);
|
|
40
|
+
if (cachedCompartment?.get(castTo(codeMirror.state)) !== void 0) {
|
|
41
|
+
return cachedCompartment;
|
|
59
42
|
}
|
|
43
|
+
const compartment = new Compartment();
|
|
44
|
+
compartmentByCodeMirror.set(codeMirror, compartment);
|
|
45
|
+
codeMirror.dispatch({
|
|
46
|
+
effects: StateEffect.appendConfig.of(compartment.of([]))
|
|
47
|
+
});
|
|
60
48
|
return compartment;
|
|
61
49
|
}
|
|
62
50
|
export {
|
|
63
|
-
|
|
64
|
-
unlockEditor
|
|
51
|
+
toggleEditorReadOnly
|
|
65
52
|
};
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggbWFya2Rvd24gZWRpdG9ycyBpbiBPYnNpZGlhblxuICovXG5cbmltcG9ydCB0eXBlIHsgRWRpdG9yIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDb21wYXJ0bWVudCxcbiAgRWRpdG9yU3RhdGUsXG4gIFN0YXRlRWZmZWN0XG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcblxuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuY29uc3QgY29tcGFydG1lbnRCeUNvZGVNaXJyb3IgPSBuZXcgV2Vha01hcDxFZGl0b3JbJ2NtJ10sIENvbXBhcnRtZW50PigpO1xuXG4vKipcbiAqIFRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZSBDb2RlTWlycm9yIGluc3RhbmNlIFx1MjAxNCB0aGUgbG93LWxldmVsIHByaW1pdGl2ZSBiZWhpbmRcbiAqIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZW4gcmVhZC1vbmx5LCB0aGUgZWRpdG9yIHN0YXlzIGZvY3VzYWJsZSBhbmQgaW50ZXJhY3RpdmUgKHNlbGVjdGlvbiwgY29weSwgYW5kIGFwcCBob3RrZXlzIHN1Y2hcbiAqIGFzIHRoZSBjb21tYW5kIHBhbGV0dGUga2VlcCB3b3JraW5nKSBcdTIwMTQgb25seSBkb2N1bWVudCBlZGl0cyBhcmUgcHJldmVudGVkLCB2aWEgdGhlIENvZGVNaXJyb3JcbiAqIGByZWFkT25seWAgc3RhdGUuXG4gKlxuICogVGhpcyB0b2dnbGVzIE9ORSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgXCJhIGZpbGVcIjogYW4gT2JzaWRpYW4ge0BsaW5rIEVkaXRvcn0gaXMgcmV1c2VkIGFzIGl0c1xuICogbGVhZiBuYXZpZ2F0ZXMgYmV0d2VlbiBub3Rlcywgc28gdGhpcyBwcmltaXRpdmUgZG9lcyBub3QgZm9sbG93IGEgbm90ZSBhcm91bmQuIFRvIGxvY2sgYSBub3RlXG4gKiBhY3Jvc3MgZXZlcnkgZWRpdG9yIHRoYXQgc2hvd3MgaXQgKGN1cnJlbnQgYW5kIGZ1dHVyZSwgaW4gYW55IHdpbmRvdyksIHVzZSBgbG9ja0VkaXRvckZvclBhdGhgXG4gKiBmcm9tIGAuL2VkaXRvci1sb2NrLnRzYC5cbiAqXG4gKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciB3aG9zZSBDb2RlTWlycm9yIGluc3RhbmNlIHRvIHRvZ2dsZS5cbiAqIEBwYXJhbSBpc1JlYWRPbmx5IC0gYHRydWVgIHRvIG1ha2UgdGhlIGVkaXRvciByZWFkLW9ubHksIGBmYWxzZWAgdG8gbWFrZSBpdCBlZGl0YWJsZSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclJlYWRPbmx5KGVkaXRvcjogRWRpdG9yLCBpc1JlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXBhcnRtZW50ID0gZW5zdXJlQ29tcGFydG1lbnQoZWRpdG9yKTtcbiAgZWRpdG9yLmNtLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShpc1JlYWRPbmx5ID8gRWRpdG9yU3RhdGUucmVhZE9ubHkub2YodHJ1ZSkgOiBbXSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbXBhcnRtZW50KGVkaXRvcjogRWRpdG9yKTogQ29tcGFydG1lbnQge1xuICAvLyBLZXkgdGhlIGNhY2hlIGJ5IHRoZSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgYnkgdGhlIGBFZGl0b3JgIHdyYXBwZXIuXG4gIC8vIEFuIGBFZGl0b3JgIGtlZXBzIGl0cyBpZGVudGl0eSB3aGlsZSBpdHMgdW5kZXJseWluZyBDb2RlTWlycm9yIHZpZXcgaXMgc3dhcHBlZCBvdXQuXG4gIGNvbnN0IGNvZGVNaXJyb3IgPSBlZGl0b3IuY207XG4gIGNvbnN0IGNhY2hlZENvbXBhcnRtZW50ID0gY29tcGFydG1lbnRCeUNvZGVNaXJyb3IuZ2V0KGNvZGVNaXJyb3IpO1xuICAvLyBSZXVzZSB0aGUgY2FjaGVkIGNvbXBhcnRtZW50IG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAvLyBBIHZpZXcgY2FuIHNpbGVudGx5IGRyb3AgYW4gYXBwZW5kZWQgY29tcGFydG1lbnQgd2hlbiBpdCByZWJ1aWxkcyBpdHMgc3RhdGUuXG4gIC8vIE9wZW5pbmcgYSBub3RlIGludG8gYSBmcmVzaGx5IGNyZWF0ZWQgbGVhZiBkb2VzIHRoaXM6IGl0IGluc3RhbGxzIHRoZSBjb21wYXJ0bWVudCBtaWQtb3Blbi5cbiAgLy8gVGhlIHN1YnNlcXVlbnQgbG9hZCB0aGVuIHJlcGxhY2VzIHRoZSB3aG9sZSBzdGF0ZSwgdGFraW5nIHRoZSBjb21wYXJ0bWVudCB3aXRoIGl0LlxuICAvLyBUaGVuIGBDb21wYXJ0bWVudC5nZXRgIHJldHVybnMgYHVuZGVmaW5lZGAsIHNpbmNlIHRoZSBjb21wYXJ0bWVudCBpcyBubyBsb25nZXIgY29uZmlndXJlZC5cbiAgLy8gUmUtaW5zdGFsbCBpdCBpbiB0aGF0IGNhc2UsIG9yIGV2ZXJ5IGxhdGVyIGByZWNvbmZpZ3VyZWAgaXMgc2lsZW50bHkgaWdub3JlZCBhbmQgbm90aGluZyBsb2Nrcy5cbiAgLy8gVGhlIGBjYXN0VG9gIGJyaWRnZXMgdGhlIGR1YWwgQ29tbW9uSlMgYW5kIEVTTSBgRWRpdG9yU3RhdGVgIGRlY2xhcmF0aW9ucyBvZiBgQGNvZGVtaXJyb3Ivc3RhdGVgLlxuICAvLyBUaGV5IGFyZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsLCBidXQgVHlwZVNjcmlwdCB0cmVhdHMgdGhlbSBhcyBub21pbmFsbHkgaW5jb21wYXRpYmxlLlxuICBpZiAoY2FjaGVkQ29tcGFydG1lbnQ/LmdldChjYXN0VG88RWRpdG9yU3RhdGU+KGNvZGVNaXJyb3Iuc3RhdGUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZENvbXBhcnRtZW50O1xuICB9XG5cbiAgY29uc3QgY29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgY29tcGFydG1lbnRCeUNvZGVNaXJyb3Iuc2V0KGNvZGVNaXJyb3IsIGNvbXBhcnRtZW50KTtcbiAgLy8gQSBgQ29tcGFydG1lbnRgIG9ubHkgdGFrZXMgZWZmZWN0IG9uY2UgaXQgaXMgcGFydCBvZiB0aGUgZWRpdG9yJ3MgY29uZmlndXJhdGlvbi5cbiAgLy8gVGhlIGNvbXBhcnRtZW50IGlzIGNyZWF0ZWQgbGF6aWx5IGhlcmUsIHNvIGluc3RhbGwgaXQgKGluaXRpYWxseSBlbXB0eSkgdmlhIGBhcHBlbmRDb25maWdgLlxuICBjb2RlTWlycm9yLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBTdGF0ZUVmZmVjdC5hcHBlbmRDb25maWcub2YoY29tcGFydG1lbnQub2YoW10pKVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcnRtZW50O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLGNBQWM7QUFFdkIsTUFBTSwwQkFBMEIsb0JBQUksUUFBbUM7QUFrQmhFLFNBQVMscUJBQXFCLFFBQWdCLFlBQTJCO0FBQzlFLFFBQU0sY0FBYyxrQkFBa0IsTUFBTTtBQUM1QyxTQUFPLEdBQUcsU0FBUztBQUFBLElBQ2pCLFNBQVMsWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ2xGLENBQUM7QUFDSDtBQUVBLFNBQVMsa0JBQWtCLFFBQTZCO0FBR3RELFFBQU0sYUFBYSxPQUFPO0FBQzFCLFFBQU0sb0JBQW9CLHdCQUF3QixJQUFJLFVBQVU7QUFTaEUsTUFBSSxtQkFBbUIsSUFBSSxPQUFvQixXQUFXLEtBQUssQ0FBQyxNQUFNLFFBQVc7QUFDL0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQWMsSUFBSSxZQUFZO0FBQ3BDLDBCQUF3QixJQUFJLFlBQVksV0FBVztBQUduRCxhQUFXLFNBQVM7QUFBQSxJQUNsQixTQUFTLFlBQVksYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3pELENBQUM7QUFDRCxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { App } from 'obsidian';
|
|
8
8
|
import type { Promisable } from 'type-fest';
|
|
9
9
|
import type { MaybeReturn } from '../type.mjs';
|
|
10
|
+
import type { EditorLockComponent } from './editor-lock.mjs';
|
|
10
11
|
import type { PathOrFile } from './file-system.mjs';
|
|
11
12
|
import type { CombinedFrontmatter } from './frontmatter.mjs';
|
|
12
13
|
import type { ProcessOptions } from './vault.mjs';
|
|
@@ -22,6 +23,10 @@ export interface AddAliasParams {
|
|
|
22
23
|
* The Obsidian app instance.
|
|
23
24
|
*/
|
|
24
25
|
readonly app: App;
|
|
26
|
+
/**
|
|
27
|
+
* The editor-lock component used to lock the note while it is being modified.
|
|
28
|
+
*/
|
|
29
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
25
30
|
/**
|
|
26
31
|
* The path or TFile object representing the note.
|
|
27
32
|
*/
|
|
@@ -39,6 +44,10 @@ export interface DeleteAliasParams {
|
|
|
39
44
|
* The Obsidian app instance.
|
|
40
45
|
*/
|
|
41
46
|
readonly app: App;
|
|
47
|
+
/**
|
|
48
|
+
* The editor-lock component used to lock the note while it is being modified.
|
|
49
|
+
*/
|
|
50
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
42
51
|
/**
|
|
43
52
|
* The path or TFile object representing the note.
|
|
44
53
|
*/
|