obsidian-dev-utils 3.14.0 → 3.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
@@ -128,8 +128,8 @@ class RenameDeleteHandler {
|
|
128
128
|
if (!attachmentFolder) {
|
129
129
|
return;
|
130
130
|
}
|
131
|
-
if (this.settingsBuilder().shouldDeleteOrphanAttachments
|
132
|
-
await (0, import_Vault.
|
131
|
+
if (this.settingsBuilder().shouldDeleteOrphanAttachments) {
|
132
|
+
await (0, import_Vault.deleteSafe)(this.app, attachmentFolder, file.path, false, this.settingsBuilder().shouldDeleteEmptyFolders);
|
133
133
|
}
|
134
134
|
}
|
135
135
|
async fillRenameMap(file, oldPath, renameMap) {
|
@@ -186,9 +186,8 @@ class RenameDeleteHandler {
|
|
186
186
|
}
|
187
187
|
}
|
188
188
|
async processRename(oldPath, newPath, renameMap) {
|
189
|
-
let oldFile = null;
|
190
189
|
try {
|
191
|
-
oldFile = this.app.vault.getFileByPath(oldPath);
|
190
|
+
let oldFile = this.app.vault.getFileByPath(oldPath);
|
192
191
|
let newFile = this.app.vault.getFileByPath(newPath);
|
193
192
|
if (oldFile) {
|
194
193
|
await (0, import_Vault.createFolderSafe)(this.app, (0, import_Path.dirname)(newPath));
|
@@ -232,9 +231,6 @@ class RenameDeleteHandler {
|
|
232
231
|
continue;
|
233
232
|
}
|
234
233
|
await (0, import_Vault.applyFileChanges)(this.app, parentNote, async () => {
|
235
|
-
if (!oldFile) {
|
236
|
-
return [];
|
237
|
-
}
|
238
234
|
const links = (await this.getBacklinks(oldFile, newFile)).get(parentNotePath) ?? [];
|
239
235
|
const changes = [];
|
240
236
|
for (const link of links) {
|
@@ -304,4 +300,4 @@ class RenameDeleteHandler {
|
|
304
300
|
0 && (module.exports = {
|
305
301
|
registerRenameDeleteHandlers
|
306
302
|
});
|
307
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICBnZXRDYWNoZVNhZmVcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgY3JlYXRlRm9sZGVyU2FmZSxcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZUZvbGRlclNhZmUsXG4gIHByb2Nlc3NXaXRoUmV0cnlcbn0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmludGVyZmFjZSBTcGVjaWFsUmVuYW1lIHtcbiAgb2xkUGF0aDogc3RyaW5nO1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIHRlbXBQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBzaG91bGREZWxldGVFbXB0eUZvbGRlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIG9ycGhhbiBhdHRhY2htZW50cyBhZnRlciBhIGRlbGV0ZS5cbiAgICovXG4gIHNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNldHRpbmdzQnVpbGRlciAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHJlbmFtZSBkZWxldGUgaGFuZGxlci5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUmVuYW1lRGVsZXRlSGFuZGxlcnMocGx1Z2luOiBQbHVnaW4sIHNldHRpbmdzQnVpbGRlcjogKCkgPT4gUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXIgPSBuZXcgUmVuYW1lRGVsZXRlSGFuZGxlcihhcHAsIHNldHRpbmdzQnVpbGRlcik7XG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlRGVsZXRlKGZpbGUpKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlUmVuYW1lKGZpbGUsIG9sZFBhdGgpKTtcbiAgICB9KVxuICApO1xufVxuXG5jbGFzcyBSZW5hbWVEZWxldGVIYW5kbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsIHByaXZhdGUgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3MpIHsgfVxuXG4gIHByaXZhdGUgcmVuYW1pbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHNwZWNpYWxSZW5hbWVzOiBTcGVjaWFsUmVuYW1lW10gPSBbXTtcblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBSZW5hbWUgJHtvbGRQYXRofSAtPiAke2ZpbGUucGF0aH1gKTtcblxuICAgIGlmICh0aGlzLnJlbmFtaW5nUGF0aHMuaGFzKG9sZFBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxSZW5hbWUgPSB0aGlzLnNwZWNpYWxSZW5hbWVzLmZpbmQoKHgpID0+IHgub2xkUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICBpZiAoc3BlY2lhbFJlbmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIHNwZWNpYWxSZW5hbWUudGVtcFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlICYmIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgJiYgZGlybmFtZShvbGRQYXRoKSA9PT0gZGlybmFtZShmaWxlLnBhdGgpKSB7XG4gICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnB1c2goe1xuICAgICAgICBvbGRQYXRoLFxuICAgICAgICBuZXdQYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgIHRlbXBQYXRoOiBqb2luKGZpbGUucGFyZW50Py5wYXRoID8/ICcnLCAnX190ZW1wX18nICsgZmlsZS5uYW1lKVxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgdXBkYXRlQWxsTGlua3MgPSB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcztcbiAgICB0cnkge1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlbmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxSZW5hbWVNYXAoZmlsZSwgb2xkUGF0aCwgcmVuYW1lTWFwKTtcbiAgICAgIGZvciAoY29uc3Qgb2xkUGF0aCBvZiByZW5hbWVNYXAua2V5cygpKSB7XG4gICAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5hZGQob2xkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW29sZFBhdGgyLCBuZXdQYXRoMl0gb2YgcmVuYW1lTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aDIsIG5ld1BhdGgyLCByZW5hbWVNYXApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aCwgZmlsZS5wYXRoLCByZW5hbWVNYXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlbmFtaW5nUGF0aHMuZGVsZXRlKG9sZFBhdGgpO1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSB1cGRhdGVBbGxMaW5rcztcblxuICAgICAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHRoaXMuc3BlY2lhbFJlbmFtZXMuZmluZCgoeCkgPT4geC50ZW1wUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBzcGVjaWFsUmVuYW1lLm5ld1BhdGgpO1xuICAgICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnJlbW92ZShzcGVjaWFsUmVuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGVsZXRlKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmRlYnVnKGBIYW5kbGUgRGVsZXRlICR7ZmlsZS5wYXRofWApO1xuICAgIGlmICghaXNOb3RlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuYW1pbmdQYXRocy5oYXMoZmlsZS5wYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGZpbGUucGF0aCk7XG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IHRoaXMuYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVPcnBoYW5BdHRhY2htZW50cyB8fCBhdHRhY2htZW50Rm9sZGVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgZGVsZXRlRm9sZGVyU2FmZSh0aGlzLmFwcCwgYXR0YWNobWVudEZvbGRlclBhdGgsIGZpbGUucGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWxsUmVuYW1lTWFwKGZpbGU6IFRGaWxlLCBvbGRQYXRoOiBzdHJpbmcsIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlbmFtZU1hcC5zZXQob2xkUGF0aCwgZmlsZS5wYXRoKTtcblxuICAgIGlmICghaXNOb3RlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgb2xkUGF0aCk7XG4gICAgY29uc3QgbmV3QXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgZmlsZS5wYXRoKTtcbiAgICBjb25zdCBkdW1teU9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGpvaW4oZGlybmFtZShvbGRQYXRoKSwgJ0RVTU1ZX0ZJTEUubWQnKSk7XG5cbiAgICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKTtcblxuICAgIGlmICghb2xkQXR0YWNobWVudEZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gbmV3QXR0YWNobWVudEZvbGRlclBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbjogVEZpbGVbXSA9IFtdO1xuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBkdW1teU9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZSh0aGlzLmFwcCwgZmlsZSk7XG4gICAgICBpZiAoIWNhY2hlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbGluayBvZiBnZXRBbGxMaW5rcyhjYWNoZSkpIHtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudEZpbGUgPSBleHRyYWN0TGlua0ZpbGUodGhpcy5hcHAsIGxpbmssIG9sZFBhdGgpO1xuICAgICAgICBpZiAoIWF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0YWNobWVudEZpbGUucGF0aC5zdGFydHNXaXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGJhY2tsaW5rcyA9IGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBhdHRhY2htZW50RmlsZSk7XG4gICAgICAgICAgaWYgKGJhY2tsaW5rcy5rZXlzKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKG9sZEF0dGFjaG1lbnRGb2xkZXIsIChjaGlsZCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoaXNOb3RlKGNoaWxkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoLCBjaGlsZC5wYXRoKTtcbiAgICAgIGNvbnN0IG5ld0RpciA9IGpvaW4obmV3QXR0YWNobWVudEZvbGRlclBhdGgsIGRpcm5hbWUocmVsYXRpdmVQYXRoKSk7XG4gICAgICBsZXQgbmV3Q2hpbGRQYXRoID0gam9pbihuZXdEaXIsIGNoaWxkLm5hbWUpO1xuICAgICAgaWYgKGNoaWxkLnBhdGggIT09IG5ld0NoaWxkUGF0aCkge1xuICAgICAgICBuZXdDaGlsZFBhdGggPSB0aGlzLmFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKGpvaW4obmV3RGlyLCBjaGlsZC5iYXNlbmFtZSksIGNoaWxkLmV4dGVuc2lvbik7XG4gICAgICAgIHJlbmFtZU1hcC5zZXQoY2hpbGQucGF0aCwgbmV3Q2hpbGRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NSZW5hbWUob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcsIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBvbGRGaWxlOiBURmlsZSB8IG51bGwgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9sZEZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG9sZFBhdGgpO1xuICAgICAgbGV0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXG4gICAgICBpZiAob2xkRmlsZSkge1xuICAgICAgICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBkaXJuYW1lKG5ld1BhdGgpKTtcbiAgICAgICAgY29uc3Qgb2xkRm9sZGVyID0gb2xkRmlsZS5wYXJlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShuZXdGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKG9sZEZpbGUsIG5ld1BhdGgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCkgfHwgdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9sZFBhdGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeSh0aGlzLmFwcCwgb2xkRm9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbGRGaWxlID0gY3JlYXRlVEZpbGVJbnN0YW5jZSh0aGlzLmFwcC52YXVsdCwgb2xkUGF0aCk7XG4gICAgICBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblxuICAgICAgaWYgKCFvbGRGaWxlLmRlbGV0ZWQgfHwgIW5ld0ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVuYW1lICR7b2xkUGF0aH0gdG8gJHtuZXdQYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCB0aGlzLmdldEJhY2tsaW5rcyhvbGRGaWxlLCBuZXdGaWxlKTtcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnROb3RlUGF0aCBvZiBiYWNrbGlua3Mua2V5cygpKSB7XG4gICAgICAgIGxldCBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgIGlmICghcGFyZW50Tm90ZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1BhcmVudE5vdGVQYXRoID0gcmVuYW1lTWFwLmdldChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgaWYgKG5ld1BhcmVudE5vdGVQYXRoKSB7XG4gICAgICAgICAgICBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBQYXJlbnQgbm90ZSBub3QgZm91bmQ6ICR7cGFyZW50Tm90ZVBhdGh9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBhcHBseUZpbGVDaGFuZ2VzKHRoaXMuYXBwLCBwYXJlbnROb3RlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFvbGRGaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGxpbmtzXG4gICAgICAgICAgICA9IChhd2FpdCB0aGlzLmdldEJhY2tsaW5rcyhvbGRGaWxlLCBuZXdGaWxlKSkuZ2V0KHBhcmVudE5vdGVQYXRoKSA/PyBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICAgICAgICBlbmRJbmRleDogbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0LFxuICAgICAgICAgICAgICBvbGRDb250ZW50OiBsaW5rLm9yaWdpbmFsLFxuICAgICAgICAgICAgICBuZXdDb250ZW50OiB1cGRhdGVMaW5rKHtcbiAgICAgICAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGhPckZpbGU6IHBhcmVudE5vdGUsXG4gICAgICAgICAgICAgICAgcmVuYW1lTWFwXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0NhbnZhc0ZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc1dpdGhSZXRyeSh0aGlzLmFwcCwgbmV3RmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW52YXNEYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDYW52YXNEYXRhO1xuICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjYW52YXNEYXRhLm5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcmVuYW1lTWFwLmdldChub2RlLmZpbGUpO1xuICAgICAgICAgICAgaWYgKCFuZXdQYXRoKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5maWxlID0gbmV3UGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRvSnNvbihjYW52YXNEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFya2Rvd25GaWxlKG5ld0ZpbGUpKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZUxpbmtzSW5GaWxlKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBhdGhPckZpbGU6IG5ld0ZpbGUsXG4gICAgICAgICAgb2xkUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5kZWxldGUob2xkUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYWNrbGlua3Mob2xkRmlsZTogVEZpbGUsIG5ld0ZpbGU6IFRGaWxlIHwgbnVsbCk6IFByb21pc2U8TWFwPHN0cmluZywgUmVmZXJlbmNlQ2FjaGVbXT4+IHtcbiAgICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgUmVmZXJlbmNlQ2FjaGVbXT4oKTtcbiAgICBjb25zdCBvbGRMaW5rcyA9IGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBvbGRGaWxlKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2Ygb2xkTGlua3Mua2V5cygpKSB7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIG9sZExpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdGaWxlKSB7XG4gICAgICByZXR1cm4gYmFja2xpbmtzO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG5ld0ZpbGUpO1xuXG4gICAgZm9yIChjb25zdCBwYXRoIG9mIG5ld0xpbmtzLmtleXMoKSkge1xuICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KHBhdGgpID8/IFtdO1xuICAgICAgbGlua3MucHVzaCguLi5uZXdMaW5rcy5nZXQocGF0aCkgPz8gW10pO1xuICAgICAgYmFja2xpbmtzLnNldChwYXRoLCBsaW5rcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2tsaW5rcztcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7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
|
303
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICBnZXRDYWNoZVNhZmVcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgY3JlYXRlRm9sZGVyU2FmZSxcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmUsXG4gIHByb2Nlc3NXaXRoUmV0cnlcbn0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmludGVyZmFjZSBTcGVjaWFsUmVuYW1lIHtcbiAgb2xkUGF0aDogc3RyaW5nO1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIHRlbXBQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBzaG91bGREZWxldGVFbXB0eUZvbGRlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIG9ycGhhbiBhdHRhY2htZW50cyBhZnRlciBhIGRlbGV0ZS5cbiAgICovXG4gIHNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNldHRpbmdzQnVpbGRlciAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHJlbmFtZSBkZWxldGUgaGFuZGxlci5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUmVuYW1lRGVsZXRlSGFuZGxlcnMocGx1Z2luOiBQbHVnaW4sIHNldHRpbmdzQnVpbGRlcjogKCkgPT4gUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXIgPSBuZXcgUmVuYW1lRGVsZXRlSGFuZGxlcihhcHAsIHNldHRpbmdzQnVpbGRlcik7XG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlRGVsZXRlKGZpbGUpKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlUmVuYW1lKGZpbGUsIG9sZFBhdGgpKTtcbiAgICB9KVxuICApO1xufVxuXG5jbGFzcyBSZW5hbWVEZWxldGVIYW5kbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsIHByaXZhdGUgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3MpIHsgfVxuXG4gIHByaXZhdGUgcmVuYW1pbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHNwZWNpYWxSZW5hbWVzOiBTcGVjaWFsUmVuYW1lW10gPSBbXTtcblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBSZW5hbWUgJHtvbGRQYXRofSAtPiAke2ZpbGUucGF0aH1gKTtcblxuICAgIGlmICh0aGlzLnJlbmFtaW5nUGF0aHMuaGFzKG9sZFBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxSZW5hbWUgPSB0aGlzLnNwZWNpYWxSZW5hbWVzLmZpbmQoKHgpID0+IHgub2xkUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICBpZiAoc3BlY2lhbFJlbmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIHNwZWNpYWxSZW5hbWUudGVtcFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlICYmIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgJiYgZGlybmFtZShvbGRQYXRoKSA9PT0gZGlybmFtZShmaWxlLnBhdGgpKSB7XG4gICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnB1c2goe1xuICAgICAgICBvbGRQYXRoLFxuICAgICAgICBuZXdQYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgIHRlbXBQYXRoOiBqb2luKGZpbGUucGFyZW50Py5wYXRoID8/ICcnLCAnX190ZW1wX18nICsgZmlsZS5uYW1lKVxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgdXBkYXRlQWxsTGlua3MgPSB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcztcbiAgICB0cnkge1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlbmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxSZW5hbWVNYXAoZmlsZSwgb2xkUGF0aCwgcmVuYW1lTWFwKTtcbiAgICAgIGZvciAoY29uc3Qgb2xkUGF0aCBvZiByZW5hbWVNYXAua2V5cygpKSB7XG4gICAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5hZGQob2xkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW29sZFBhdGgyLCBuZXdQYXRoMl0gb2YgcmVuYW1lTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aDIsIG5ld1BhdGgyLCByZW5hbWVNYXApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aCwgZmlsZS5wYXRoLCByZW5hbWVNYXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlbmFtaW5nUGF0aHMuZGVsZXRlKG9sZFBhdGgpO1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSB1cGRhdGVBbGxMaW5rcztcblxuICAgICAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHRoaXMuc3BlY2lhbFJlbmFtZXMuZmluZCgoeCkgPT4geC50ZW1wUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBzcGVjaWFsUmVuYW1lLm5ld1BhdGgpO1xuICAgICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnJlbW92ZShzcGVjaWFsUmVuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGVsZXRlKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmRlYnVnKGBIYW5kbGUgRGVsZXRlICR7ZmlsZS5wYXRofWApO1xuICAgIGlmICghaXNOb3RlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuYW1pbmdQYXRocy5oYXMoZmlsZS5wYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGZpbGUucGF0aCk7XG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IHRoaXMuYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVPcnBoYW5BdHRhY2htZW50cykge1xuICAgICAgYXdhaXQgZGVsZXRlU2FmZSh0aGlzLmFwcCwgYXR0YWNobWVudEZvbGRlciwgZmlsZS5wYXRoLCBmYWxzZSwgdGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsbFJlbmFtZU1hcChmaWxlOiBURmlsZSwgb2xkUGF0aDogc3RyaW5nLCByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW5hbWVNYXAuc2V0KG9sZFBhdGgsIGZpbGUucGF0aCk7XG5cbiAgICBpZiAoIWlzTm90ZShmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIG9sZFBhdGgpO1xuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGZpbGUucGF0aCk7XG4gICAgY29uc3QgZHVtbXlPbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBqb2luKGRpcm5hbWUob2xkUGF0aCksICdEVU1NWV9GSUxFLm1kJykpO1xuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IHRoaXMuYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoIW9sZEF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW46IFRGaWxlW10gPSBbXTtcblxuICAgIGlmIChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gZHVtbXlPbGRBdHRhY2htZW50Rm9sZGVyUGF0aCkge1xuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUodGhpcy5hcHAsIGZpbGUpO1xuICAgICAgaWYgKCFjYWNoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKHRoaXMuYXBwLCBsaW5rLCBvbGRQYXRoKTtcbiAgICAgICAgaWYgKCFhdHRhY2htZW50RmlsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dGFjaG1lbnRGaWxlLnBhdGguc3RhcnRzV2l0aChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgYXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIGlmIChiYWNrbGlua3Mua2V5cygpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChhdHRhY2htZW50RmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihvbGRBdHRhY2htZW50Rm9sZGVyLCAoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgaWYgKGlzTm90ZShjaGlsZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCwgY2hpbGQucGF0aCk7XG4gICAgICBjb25zdCBuZXdEaXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgbGV0IG5ld0NoaWxkUGF0aCA9IGpvaW4obmV3RGlyLCBjaGlsZC5uYW1lKTtcbiAgICAgIGlmIChjaGlsZC5wYXRoICE9PSBuZXdDaGlsZFBhdGgpIHtcbiAgICAgICAgbmV3Q2hpbGRQYXRoID0gdGhpcy5hcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKG5ld0RpciwgY2hpbGQuYmFzZW5hbWUpLCBjaGlsZC5leHRlbnNpb24pO1xuICAgICAgICByZW5hbWVNYXAuc2V0KGNoaWxkLnBhdGgsIG5ld0NoaWxkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUmVuYW1lKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nLCByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IG9sZEZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG9sZFBhdGgpO1xuICAgICAgbGV0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXG4gICAgICBpZiAob2xkRmlsZSkge1xuICAgICAgICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBkaXJuYW1lKG5ld1BhdGgpKTtcbiAgICAgICAgY29uc3Qgb2xkRm9sZGVyID0gb2xkRmlsZS5wYXJlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShuZXdGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKG9sZEZpbGUsIG5ld1BhdGgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCkgfHwgdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9sZFBhdGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeSh0aGlzLmFwcCwgb2xkRm9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbGRGaWxlID0gY3JlYXRlVEZpbGVJbnN0YW5jZSh0aGlzLmFwcC52YXVsdCwgb2xkUGF0aCk7XG4gICAgICBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblxuICAgICAgaWYgKCFvbGRGaWxlLmRlbGV0ZWQgfHwgIW5ld0ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVuYW1lICR7b2xkUGF0aH0gdG8gJHtuZXdQYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCB0aGlzLmdldEJhY2tsaW5rcyhvbGRGaWxlLCBuZXdGaWxlKTtcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnROb3RlUGF0aCBvZiBiYWNrbGlua3Mua2V5cygpKSB7XG4gICAgICAgIGxldCBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgIGlmICghcGFyZW50Tm90ZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1BhcmVudE5vdGVQYXRoID0gcmVuYW1lTWFwLmdldChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgaWYgKG5ld1BhcmVudE5vdGVQYXRoKSB7XG4gICAgICAgICAgICBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBQYXJlbnQgbm90ZSBub3QgZm91bmQ6ICR7cGFyZW50Tm90ZVBhdGh9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBhcHBseUZpbGVDaGFuZ2VzKHRoaXMuYXBwLCBwYXJlbnROb3RlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGlua3NcbiAgICAgICAgICAgID0gKGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpKS5nZXQocGFyZW50Tm90ZVBhdGgpID8/IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgIGVuZEluZGV4OiBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICAgICAgICAgIG9sZENvbnRlbnQ6IGxpbmsub3JpZ2luYWwsXG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQ6IHVwZGF0ZUxpbmsoe1xuICAgICAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgbGluayxcbiAgICAgICAgICAgICAgICBwYXRoT3JGaWxlOiBuZXdGaWxlLFxuICAgICAgICAgICAgICAgIG9sZFBhdGhPckZpbGU6IG9sZFBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aE9yRmlsZTogcGFyZW50Tm90ZSxcbiAgICAgICAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2FudmFzRmlsZShuZXdGaWxlKSkge1xuICAgICAgICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KHRoaXMuYXBwLCBuZXdGaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbnZhc0RhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG4gICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGNhbnZhc0RhdGEubm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgICAgICBpZiAoIW5ld1BhdGgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmZpbGUgPSBuZXdQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXJrZG93bkZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgIHJlbmFtZU1hcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmRlbGV0ZShvbGRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEJhY2tsaW5rcyhvbGRGaWxlOiBURmlsZSwgbmV3RmlsZTogVEZpbGUgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPj4ge1xuICAgIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPigpO1xuICAgIGNvbnN0IG9sZExpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG9sZEZpbGUpO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBvbGRMaW5rcy5rZXlzKCkpIHtcbiAgICAgIGJhY2tsaW5rcy5zZXQocGF0aCwgb2xkTGlua3MuZ2V0KHBhdGgpID8/IFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIW5ld0ZpbGUpIHtcbiAgICAgIHJldHVybiBiYWNrbGlua3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgbmV3RmlsZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbmV3TGlua3Mua2V5cygpKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQocGF0aCkgPz8gW107XG4gICAgICBsaW5rcy5wdXNoKC4uLm5ld0xpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIGxpbmtzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2xpbmtzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHNCQUlPO0FBRVAsNkJBQW9DO0FBRXBDLG1CQUFrQztBQUNsQyxvQkFBdUI7QUFDdkIsa0JBSU87QUFDUCw0QkFBd0M7QUFDeEMsa0JBSU87QUFD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
|
@@ -30,7 +30,7 @@ __export(Vault_exports, {
|
|
30
30
|
createTempFile: () => createTempFile,
|
31
31
|
createTempFolder: () => createTempFolder,
|
32
32
|
deleteEmptyFolderHierarchy: () => deleteEmptyFolderHierarchy,
|
33
|
-
|
33
|
+
deleteSafe: () => deleteSafe,
|
34
34
|
getMarkdownFilesSorted: () => getMarkdownFilesSorted,
|
35
35
|
processWithRetry: () => processWithRetry,
|
36
36
|
safeList: () => safeList
|
@@ -133,43 +133,34 @@ async function applyFileChanges(app, pathOrFile, changesProvider, retryOptions =
|
|
133
133
|
return newContent;
|
134
134
|
}, overriddenOptions);
|
135
135
|
}
|
136
|
-
async function
|
137
|
-
const
|
138
|
-
if (!
|
136
|
+
async function deleteSafe(app, pathOrFile, deletedNotePath, shouldReportUsedAttachments, shouldDeleteEmptyFolders) {
|
137
|
+
const file = (0, import_TAbstractFile.getAbstractFileOrNull)(app, pathOrFile);
|
138
|
+
if (!file) {
|
139
139
|
return false;
|
140
140
|
}
|
141
|
-
let canDelete = true;
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
if (
|
149
|
-
|
150
|
-
new import_obsidian.Notice(`Attachment ${child.path} is still used by other notes. It will not be deleted.`);
|
151
|
-
}
|
152
|
-
canDelete = false;
|
153
|
-
} else {
|
154
|
-
try {
|
155
|
-
await app.fileManager.trashFile(child);
|
156
|
-
} catch (e) {
|
157
|
-
if (await app.vault.adapter.exists(child.path)) {
|
158
|
-
(0, import_Error.printError)(new Error(`Failed to delete ${child.path}`, { cause: e }));
|
159
|
-
canDelete = false;
|
160
|
-
}
|
161
|
-
}
|
141
|
+
let canDelete = file instanceof import_obsidian.TFile || (shouldDeleteEmptyFolders ?? true);
|
142
|
+
if (file instanceof import_obsidian.TFile) {
|
143
|
+
const backlinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(app, file);
|
144
|
+
if (deletedNotePath) {
|
145
|
+
backlinks.removeKey(deletedNotePath);
|
146
|
+
}
|
147
|
+
if (backlinks.count() !== 0) {
|
148
|
+
if (shouldReportUsedAttachments) {
|
149
|
+
new import_obsidian.Notice(`Attachment ${file.path} is still used by other notes. It will not be deleted.`);
|
162
150
|
}
|
163
|
-
|
164
|
-
|
151
|
+
canDelete = false;
|
152
|
+
}
|
153
|
+
} else if (file instanceof import_obsidian.TFolder) {
|
154
|
+
for (const child of file.children) {
|
155
|
+
canDelete &&= await deleteSafe(app, child.path, deletedNotePath, shouldReportUsedAttachments);
|
165
156
|
}
|
166
157
|
}
|
167
158
|
if (canDelete) {
|
168
159
|
try {
|
169
|
-
await app.fileManager.trashFile(
|
160
|
+
await app.fileManager.trashFile(file);
|
170
161
|
} catch (e) {
|
171
|
-
if (await app.vault.adapter.exists(
|
172
|
-
(0, import_Error.printError)(new Error(`Failed to delete ${
|
162
|
+
if (await app.vault.adapter.exists(file.path)) {
|
163
|
+
(0, import_Error.printError)(new Error(`Failed to delete ${file.path}`, { cause: e }));
|
173
164
|
canDelete = false;
|
174
165
|
}
|
175
166
|
}
|
@@ -211,7 +202,7 @@ async function deleteEmptyFolderHierarchy(app, pathOrFolder) {
|
|
211
202
|
return;
|
212
203
|
}
|
213
204
|
const parent = folder.parent;
|
214
|
-
await
|
205
|
+
await deleteSafe(app, folder.path);
|
215
206
|
folder = parent;
|
216
207
|
}
|
217
208
|
}
|
@@ -262,9 +253,9 @@ async function createTempFolder(app, path) {
|
|
262
253
|
createTempFile,
|
263
254
|
createTempFolder,
|
264
255
|
deleteEmptyFolderHierarchy,
|
265
|
-
|
256
|
+
deleteSafe,
|
266
257
|
getMarkdownFilesSorted,
|
267
258
|
processWithRetry,
|
268
259
|
safeList
|
269
260
|
});
|
270
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBWYXVsdFxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaXN0ZWRGaWxlcyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgTm90aWNlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dCB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7XG4gIHByaW50RXJyb3IsXG4gIHRocm93RXhwcmVzc2lvblxufSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJy4uL1BhdGgudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlIH0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9URmlsZS50cyc7XG5pbXBvcnQgeyBnZXRGaWxlIH0gZnJvbSAnLi9URmlsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhPckZvbGRlciB9IGZyb20gJy4vVEZvbGRlci50cyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJPck51bGwgfSBmcm9tICcuL1RGb2xkZXIudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgc3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGVuZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRNYXJrZG93bkZpbGVzKCkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UsIHR5cGljYWxseSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIHZhdWx0LlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIEEgdmFsdWUgcHJvdmlkZXIgdGhhdCByZXR1cm5zIHRoZSBuZXcgY29udGVudCBiYXNlZCBvbiB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvbGQgY29udGVudCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRlbnQuXG4gKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gKiBAcGFyYW0gcmV0cnlPcHRpb25zIC0gT3B0aW9uYWwuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIHByb2Nlc3MuIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzV2l0aFJldHJ5KGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8c3RyaW5nIHwgbnVsbCwgW3N0cmluZ10+LCByZXRyeU9wdGlvbnM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUzogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IDYwMDAwIH07XG4gIGNvbnN0IG92ZXJyaWRkZW5PcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucmV0cnlPcHRpb25zIH07XG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIG9sZENvbnRlbnQpO1xuICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBhd2FpdCBhcHAudmF1bHQucHJvY2VzcyhmaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IGhhcyBjaGFuZ2VkIHNpbmNlIGl0IHdhcyByZWFkLiBSZXRyeWluZy4uLicsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH0sIG92ZXJyaWRkZW5PcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgb3BlcmF0aW9uIHNob3VsZCByZXRyeSBvbiBmYWlsdXJlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPiwgcmV0cnlPcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiA2MDAwMCB9O1xuICBjb25zdCBvdmVycmlkZGVuT3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIHN0YXJ0SW5kZXg6IGNoYW5nZS5zdGFydEluZGV4LFxuICAgICAgICAgIGVuZEluZGV4OiBjaGFuZ2UuZW5kSW5kZXgsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aChwYXRoT3JGaWxlKSxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpO1xuXG4gICAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gICAgY2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignQ2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gY2hhbmdlc1tpIC0gMV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignUHJldmlvdXMgY2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGlmIChwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignT3ZlcmxhcHBpbmcgY2hhbmdlcycsIHtcbiAgICAgICAgICBwcmV2aW91c0NoYW5nZSxcbiAgICAgICAgICBjaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdDb250ZW50ID0gJyc7XG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH1cblxuICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXdDb250ZW50O1xuICB9LCBvdmVycmlkZGVuT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhIGZvbGRlciBhbmQgaXRzIGNvbnRlbnRzIHNhZmVseSBmcm9tIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZvbGRlclBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGJlIGRlbGV0ZWQuXG4gKiBAcGFyYW0gZGVsZXRlZE5vdGVQYXRoIC0gT3B0aW9uYWwuIFRoZSBwYXRoIG9mIHRoZSBub3RlIHRoYXQgdHJpZ2dlcmVkIHRoZSByZW1vdmFsLlxuICogQHBhcmFtIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEgbm90aWNlIHdpbGwgYmUgc2hvd24gZm9yIGVhY2ggYXR0YWNobWVudCB0aGF0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgZm9sZGVyUGF0aDogc3RyaW5nLCBkZWxldGVkTm90ZVBhdGg/OiBzdHJpbmcsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChmb2xkZXJQYXRoKTtcblxuICBpZiAoIWZvbGRlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjYW5EZWxldGUgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZm9sZGVyLmNoaWxkcmVuKSB7XG4gICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgIGNvbnN0IGJhY2tsaW5rcyA9IGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcCwgY2hpbGQpO1xuICAgICAgaWYgKGRlbGV0ZWROb3RlUGF0aCkge1xuICAgICAgICBiYWNrbGlua3MucmVtb3ZlS2V5KGRlbGV0ZWROb3RlUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAoYmFja2xpbmtzLmNvdW50KCkgIT09IDApIHtcbiAgICAgICAgaWYgKHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cykge1xuICAgICAgICAgIG5ldyBOb3RpY2UoYEF0dGFjaG1lbnQgJHtjaGlsZC5wYXRofSBpcyBzdGlsbCB1c2VkIGJ5IG90aGVyIG5vdGVzLiBJdCB3aWxsIG5vdCBiZSBkZWxldGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGNoaWxkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoY2hpbGQucGF0aCkpIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7Y2hpbGQucGF0aH1gLCB7IGNhdXNlOiBlIH0pKTtcbiAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgICBjYW5EZWxldGUgJiY9IGF3YWl0IGRlbGV0ZUZvbGRlclNhZmUoYXBwLCBjaGlsZC5wYXRoLCBkZWxldGVkTm90ZVBhdGgsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbkRlbGV0ZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhmb2xkZXIucGF0aCkpIHtcbiAgICAgICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgJHtmb2xkZXIucGF0aH1gLCB7IGNhdXNlOiBlIH0pKTtcbiAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNhbkRlbGV0ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKHBhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBTYWZlbHkgbGlzdHMgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gbGlzdCBmaWxlcyBhbmQgZm9sZGVycyBmcm9tLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBgTGlzdGVkRmlsZXNgIG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlTGlzdChhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxMaXN0ZWRGaWxlcz4ge1xuICBjb25zdCBFTVBUWSA9IHsgZmlsZXM6IFtdLCBmb2xkZXJzOiBbXSB9O1xuICBpZiAoIShhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSkge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGVtcHR5IGZvbGRlciBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIGZvbGRlciB0byBzdGFydCByZW1vdmluZyBlbXB0eSBoaWVyYXJjaHkgZnJvbS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVtcHR5IGhpZXJhcmNoeSBpcyBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHkoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgcGF0aE9yRm9sZGVyKTtcblxuICB3aGlsZSAoZm9sZGVyKSB7XG4gICAgaWYgKGZvbGRlci5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGZvbGRlci5wYXJlbnQ7XG4gICAgYXdhaXQgZGVsZXRlRm9sZGVyU2FmZShhcHAsIGZvbGRlci5wYXRoKTtcbiAgICBmb2xkZXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZm9sZGVyQ2xlYW51cCA9IGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBkaXJuYW1lKHBhdGgpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKSA/PyB0aHJvd0V4cHJlc3Npb24obmV3IEVycm9yKCdGaWxlIG5vdCBmb3VuZCcpKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmb2xkZXIgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZvbGRlcihhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGgpO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZGlyUGF0aCA9IGRpcm5hbWUocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBkaXJQYXRoKTtcblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIGRpcm5hbWUocGF0aCkpO1xuXG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXRoKTtcblxuICBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGgpID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0ZvbGRlciBub3QgZm91bmQnKSk7XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZvbGRlci5kZWxldGVkKSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZvbGRlcik7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHNCQUtPO0FBR1AsbUJBQWlDO0FBQ2pDLG1CQUdPO0FBQ1Asb0JBQTBCO0FBQzFCLGtCQUF3QjtBQUV4QiwyQkFBNkI7QUFDN0IsMkJBQXdDO0FBQ3hDLDJCQUF3QjtBQUV4QixtQkFBd0I7QUFFeEIscUJBQWdDO0FBbENoQyxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUE4RE8sU0FBUyx1QkFBdUIsS0FBbUI7QUFDeEQsU0FBTyxJQUFJLE1BQU0saUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztBQUNqRjtBQWdCQSxlQUFzQixpQkFBaUIsS0FBVSxZQUF3QixvQkFBNEQsZUFBc0MsQ0FBQyxHQUFrQjtBQUM1TCxRQUFNLFdBQU8sc0JBQVEsS0FBSyxVQUFVO0FBQ3BDLFFBQU0sd0JBQStDLEVBQUUsdUJBQXVCLElBQU07QUFDcEYsUUFBTSxvQkFBMkMs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
|
261
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBWYXVsdFxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaXN0ZWRGaWxlcyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgTm90aWNlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dCB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7XG4gIHByaW50RXJyb3IsXG4gIHRocm93RXhwcmVzc2lvblxufSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJy4uL1BhdGgudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlIH0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yQWJzdHJhY3RGaWxlIH0gZnJvbSAnLi9UQWJzdHJhY3RGaWxlLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9URmlsZS50cyc7XG5pbXBvcnQgeyBnZXRGaWxlIH0gZnJvbSAnLi9URmlsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhPckZvbGRlciB9IGZyb20gJy4vVEZvbGRlci50cyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJPck51bGwgfSBmcm9tICcuL1RGb2xkZXIudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgc3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGVuZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRNYXJrZG93bkZpbGVzKCkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UsIHR5cGljYWxseSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIHZhdWx0LlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIEEgdmFsdWUgcHJvdmlkZXIgdGhhdCByZXR1cm5zIHRoZSBuZXcgY29udGVudCBiYXNlZCBvbiB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvbGQgY29udGVudCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRlbnQuXG4gKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gKiBAcGFyYW0gcmV0cnlPcHRpb25zIC0gT3B0aW9uYWwuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIHByb2Nlc3MuIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzV2l0aFJldHJ5KGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8c3RyaW5nIHwgbnVsbCwgW3N0cmluZ10+LCByZXRyeU9wdGlvbnM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUzogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IDYwMDAwIH07XG4gIGNvbnN0IG92ZXJyaWRkZW5PcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucmV0cnlPcHRpb25zIH07XG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIG9sZENvbnRlbnQpO1xuICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBhd2FpdCBhcHAudmF1bHQucHJvY2VzcyhmaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IGhhcyBjaGFuZ2VkIHNpbmNlIGl0IHdhcyByZWFkLiBSZXRyeWluZy4uLicsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH0sIG92ZXJyaWRkZW5PcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgb3BlcmF0aW9uIHNob3VsZCByZXRyeSBvbiBmYWlsdXJlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPiwgcmV0cnlPcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiA2MDAwMCB9O1xuICBjb25zdCBvdmVycmlkZGVuT3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIHN0YXJ0SW5kZXg6IGNoYW5nZS5zdGFydEluZGV4LFxuICAgICAgICAgIGVuZEluZGV4OiBjaGFuZ2UuZW5kSW5kZXgsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aChwYXRoT3JGaWxlKSxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpO1xuXG4gICAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gICAgY2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignQ2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gY2hhbmdlc1tpIC0gMV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignUHJldmlvdXMgY2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGlmIChwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignT3ZlcmxhcHBpbmcgY2hhbmdlcycsIHtcbiAgICAgICAgICBwcmV2aW91c0NoYW5nZSxcbiAgICAgICAgICBjaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdDb250ZW50ID0gJyc7XG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH1cblxuICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXdDb250ZW50O1xuICB9LCBvdmVycmlkZGVuT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhYnN0cmFjdCBmaWxlIHNhZmVseSBmcm9tIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIGRlbGV0ZS5cbiAqIEBwYXJhbSBkZWxldGVkTm90ZVBhdGggLSBPcHRpb25hbC4gVGhlIHBhdGggb2YgdGhlIG5vdGUgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlbW92YWwuXG4gKiBAcGFyYW0gc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgYSBub3RpY2Ugd2lsbCBiZSBzaG93biBmb3IgZWFjaCBhdHRhY2htZW50IHRoYXQgaXMgc3RpbGwgdXNlZCBieSBvdGhlciBub3Rlcy5cbiAqIEBwYXJhbSBzaG91bGREZWxldGVFbXB0eUZvbGRlcnMgLSBPcHRpb25hbC4gSWYgYHRydWVgLCBlbXB0eSBmb2xkZXJzIHdpbGwgYmUgZGVsZXRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlbW92YWwgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIGRlbGV0ZWROb3RlUGF0aD86IHN0cmluZywgc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzPzogYm9vbGVhbiwgc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzPzogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgaWYgKCFmaWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGNhbkRlbGV0ZSA9IGZpbGUgaW5zdGFuY2VvZiBURmlsZSB8fCAoc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzID8/IHRydWUpO1xuXG4gIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIGZpbGUpO1xuICAgIGlmIChkZWxldGVkTm90ZVBhdGgpIHtcbiAgICAgIGJhY2tsaW5rcy5yZW1vdmVLZXkoZGVsZXRlZE5vdGVQYXRoKTtcbiAgICB9XG4gICAgaWYgKGJhY2tsaW5rcy5jb3VudCgpICE9PSAwKSB7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKSB7XG4gICAgICAgIG5ldyBOb3RpY2UoYEF0dGFjaG1lbnQgJHtmaWxlLnBhdGh9IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuIEl0IHdpbGwgbm90IGJlIGRlbGV0ZWQuYCk7XG4gICAgICB9XG4gICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpbGUuY2hpbGRyZW4pIHtcbiAgICAgIGNhbkRlbGV0ZSAmJj0gYXdhaXQgZGVsZXRlU2FmZShhcHAsIGNoaWxkLnBhdGgsIGRlbGV0ZWROb3RlUGF0aCwgc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2FuRGVsZXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZmlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhmaWxlLnBhdGgpKSB7XG4gICAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7ZmlsZS5wYXRofWAsIHsgY2F1c2U6IGUgfSkpO1xuICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FuRGVsZXRlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAqIEB0aHJvd3MgSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNyZWF0aW5nIHRoZSBmb2xkZXIgYW5kIGl0IHN0aWxsIGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGb2xkZXJTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBsaXN0IGZpbGVzIGFuZCBmb2xkZXJzIGZyb20uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBMaXN0ZWRGaWxlc2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpc3RlZCBmaWxlcyBhbmQgZm9sZGVycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVMaXN0KGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IEVNUFRZID0geyBmaWxlczogW10sIGZvbGRlcnM6IFtdIH07XG4gIGlmICghKGF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpKSB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubGlzdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgZm9sZGVyIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIHN0YXJ0IHJlbW92aW5nIGVtcHR5IGhpZXJhcmNoeSBmcm9tLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZW1wdHkgaGllcmFyY2h5IGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBwYXRoT3JGb2xkZXIpO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICBpZiAoZm9sZGVyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVTYWZlKGFwcCwgZm9sZGVyLnBhdGgpO1xuICAgIGZvbGRlciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBGaWxlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgaWYgKGZpbGUpIHtcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH07XG4gIH1cblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIGRpcm5hbWUocGF0aCkpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0ZpbGUgbm90IGZvdW5kJykpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZmlsZSk7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlciBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRm9sZGVyKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IGZvbGRlciA9IGFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgocGF0aCk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH07XG4gIH1cblxuICBjb25zdCBkaXJQYXRoID0gZGlybmFtZShwYXRoKTtcbiAgYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIGRpclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgZGlybmFtZShwYXRoKSk7XG5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIHBhdGgpO1xuXG4gIGZvbGRlciA9IGFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgocGF0aCkgPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignRm9sZGVyIG5vdCBmb3VuZCcpKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZm9sZGVyLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZm9sZGVyKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsc0JBS087QUFHUCxtQkFBaUM7QUFDakMsbUJBR087QUFDUCxvQkFBMEI7QUFDMUIsa0JBQXdCO0FBRXhCLDJCQUE2QjtBQUM3QiwyQkFBd0M7QUFFeEMsMkJBR087QUFFUCxtQkFBd0I7QUFFeEIscUJBQWdDO0FBdENoQyxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFrRU8sU0FBUyx1QkFBdUIsS0FBbUI7QUFDeEQsU0FBTyxJQUFJLE1BQU0saUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztBQUNqRjtBQWdCQSxlQUFzQixpQkFBaUIsS0FBVSxZQUF3QixvQkFBNEQsZUFBc0MsQ0FBQyxHQUFrQjtBQUM1TCxRQUFNLFdBQU8sc0JBQVEsS0FBSyxVQUFVO0FBQ3BDLFFBQU0sd0JBQStDLEVBQUUsdUJBQXVCLElBQU07QUFDcEYsUUFBTSxvQkFBMkMsRUFBRSxHQUFHLHVCQUF1QixHQUFHLGFBQWE7QUFDN0YsWUFBTSwrQkFBaUIsWUFBWTtBQUNqQyxVQUFNLGFBQWEsTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFL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
|
@@ -6,6 +6,7 @@ import type { ListedFiles } from 'obsidian';
|
|
6
6
|
import { App, TFile } from 'obsidian';
|
7
7
|
import type { RetryOptions } from '../Async.ts';
|
8
8
|
import type { ValueProvider } from '../ValueProvider.ts';
|
9
|
+
import type { PathOrAbstractFile } from './TAbstractFile.ts';
|
9
10
|
import type { PathOrFile } from './TFile.ts';
|
10
11
|
import type { PathOrFolder } from './TFolder.ts';
|
11
12
|
/**
|
@@ -63,15 +64,16 @@ export declare function processWithRetry(app: App, pathOrFile: PathOrFile, newCo
|
|
63
64
|
*/
|
64
65
|
export declare function applyFileChanges(app: App, pathOrFile: PathOrFile, changesProvider: ValueProvider<FileChange[]>, retryOptions?: Partial<RetryOptions>): Promise<void>;
|
65
66
|
/**
|
66
|
-
* Deletes
|
67
|
+
* Deletes abstract file safely from the vault.
|
67
68
|
*
|
68
69
|
* @param app - The Obsidian application instance.
|
69
|
-
* @param
|
70
|
+
* @param pathOrFile - The path or abstract file to delete.
|
70
71
|
* @param deletedNotePath - Optional. The path of the note that triggered the removal.
|
71
72
|
* @param shouldReportUsedAttachments - Optional. If `true`, a notice will be shown for each attachment that is still used by other notes.
|
73
|
+
* @param shouldDeleteEmptyFolders - Optional. If `true`, empty folders will be deleted.
|
72
74
|
* @returns A promise that resolves to a boolean indicating whether the removal was successful.
|
73
75
|
*/
|
74
|
-
export declare function
|
76
|
+
export declare function deleteSafe(app: App, pathOrFile: PathOrAbstractFile, deletedNotePath?: string, shouldReportUsedAttachments?: boolean, shouldDeleteEmptyFolders?: boolean): Promise<boolean>;
|
75
77
|
/**
|
76
78
|
* Creates a folder safely in the specified path.
|
77
79
|
*
|
package/package.json
CHANGED