obsidian-dev-utils 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.9.0
4
+
5
+ - Extract RenameDeleteHandler
6
+
3
7
  ## 3.8.0
4
8
 
5
9
  - Implement getAvailablePathForAttachments without patching mkdir
@@ -0,0 +1,284 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var RenameDeleteHandler_exports = {};
25
+ __export(RenameDeleteHandler_exports, {
26
+ RenameDeleteHandler: () => RenameDeleteHandler
27
+ });
28
+ module.exports = __toCommonJS(RenameDeleteHandler_exports);
29
+ var import_obsidian = require("obsidian");
30
+ var import_implementations = require("obsidian-typings/implementations");
31
+ var import_Object = require("../Object.cjs");
32
+ var import_Path = require("../Path.cjs");
33
+ var import_AttachmentPath = require("./AttachmentPath.cjs");
34
+ var import_Link = require("./Link.cjs");
35
+ var import_MetadataCache = require("./MetadataCache.cjs");
36
+ var import_TAbstractFile = require("./TAbstractFile.cjs");
37
+ var import_Vault = require("./Vault.cjs");
38
+ var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
39
+ if (typeof __filename !== "string") {
40
+ return new URL(window.location.href);
41
+ }
42
+ return require("node:url").pathToFileURL(__filename);
43
+ })();
44
+ var __process = globalThis["process"] ?? {
45
+ "cwd": () => "/",
46
+ "env": {},
47
+ "platform": "android"
48
+ };
49
+ class RenameDeleteHandler {
50
+ constructor(app, settingsBuilder) {
51
+ this.app = app;
52
+ this.settingsBuilder = settingsBuilder;
53
+ }
54
+ renamingPaths = /* @__PURE__ */ new Set();
55
+ specialRenames = [];
56
+ async handleRename(file, oldPath) {
57
+ console.debug(`Handle Rename ${oldPath} -> ${file.path}`);
58
+ if (this.renamingPaths.has(oldPath)) {
59
+ return;
60
+ }
61
+ if (!(file instanceof import_obsidian.TFile)) {
62
+ return;
63
+ }
64
+ const specialRename = this.specialRenames.find((x) => x.oldPath === file.path);
65
+ if (specialRename) {
66
+ await this.app.vault.rename(file, specialRename.tempPath);
67
+ return;
68
+ }
69
+ if (this.app.vault.adapter.insensitive && oldPath.toLowerCase() === file.path.toLowerCase() && (0, import_Path.dirname)(oldPath) === (0, import_Path.dirname)(file.path)) {
70
+ this.specialRenames.push({
71
+ oldPath,
72
+ newPath: file.path,
73
+ tempPath: (0, import_Path.join)(file.parent?.path ?? "", "__temp__" + file.name)
74
+ });
75
+ await this.app.vault.rename(file, oldPath);
76
+ return;
77
+ }
78
+ const updateAllLinks = this.app.fileManager.updateAllLinks;
79
+ try {
80
+ this.app.fileManager.updateAllLinks = async () => {
81
+ };
82
+ const renameMap = /* @__PURE__ */ new Map();
83
+ await this.fillRenameMap(file, oldPath, renameMap);
84
+ for (const oldPath2 of renameMap.keys()) {
85
+ this.renamingPaths.add(oldPath2);
86
+ }
87
+ for (const [oldPath2, newPath2] of renameMap.entries()) {
88
+ await this.processRename(oldPath2, newPath2, renameMap);
89
+ }
90
+ await this.processRename(oldPath, file.path, renameMap);
91
+ } finally {
92
+ this.renamingPaths.delete(oldPath);
93
+ this.app.fileManager.updateAllLinks = updateAllLinks;
94
+ const specialRename2 = this.specialRenames.find((x) => x.tempPath === file.path);
95
+ if (specialRename2) {
96
+ await this.app.vault.rename(file, specialRename2.newPath);
97
+ this.specialRenames.remove(specialRename2);
98
+ }
99
+ }
100
+ }
101
+ async handleDelete(file) {
102
+ console.debug(`Handle Delete ${file.path}`);
103
+ if (!(0, import_TAbstractFile.isNote)(file)) {
104
+ return;
105
+ }
106
+ if (this.renamingPaths.has(file.path)) {
107
+ return;
108
+ }
109
+ const attachmentFolder = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, file.path);
110
+ await (0, import_Vault.removeFolderSafe)(this.app, attachmentFolder, file.path);
111
+ }
112
+ async fillRenameMap(file, oldPath, renameMap) {
113
+ renameMap.set(oldPath, file.path);
114
+ if (!(0, import_TAbstractFile.isNote)(file)) {
115
+ return;
116
+ }
117
+ const oldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, oldPath);
118
+ const newAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, file.path);
119
+ const dummyOldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, (0, import_Path.join)((0, import_Path.dirname)(oldPath), "DUMMY_FILE.md"));
120
+ const oldAttachmentFolder = this.app.vault.getFolderByPath(oldAttachmentFolderPath);
121
+ if (!oldAttachmentFolder) {
122
+ return;
123
+ }
124
+ if (oldAttachmentFolderPath === newAttachmentFolderPath) {
125
+ return;
126
+ }
127
+ const children = [];
128
+ if (oldAttachmentFolderPath === dummyOldAttachmentFolderPath) {
129
+ const cache = await (0, import_MetadataCache.getCacheSafe)(this.app, file);
130
+ if (!cache) {
131
+ return;
132
+ }
133
+ for (const link of (0, import_MetadataCache.getAllLinks)(cache)) {
134
+ const attachmentFile = (0, import_Link.extractLinkFile)(this.app, link, oldPath);
135
+ if (!attachmentFile) {
136
+ continue;
137
+ }
138
+ if (attachmentFile.path.startsWith(oldAttachmentFolderPath)) {
139
+ const backlinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, attachmentFile);
140
+ if (backlinks.keys().length === 1) {
141
+ children.push(attachmentFile);
142
+ }
143
+ }
144
+ }
145
+ } else {
146
+ import_obsidian.Vault.recurseChildren(oldAttachmentFolder, (child) => {
147
+ if (child instanceof import_obsidian.TFile) {
148
+ children.push(child);
149
+ }
150
+ });
151
+ }
152
+ for (const child of children) {
153
+ if ((0, import_TAbstractFile.isNote)(child)) {
154
+ continue;
155
+ }
156
+ const relativePath = (0, import_Path.relative)(oldAttachmentFolderPath, child.path);
157
+ const newDir = (0, import_Path.join)(newAttachmentFolderPath, (0, import_Path.dirname)(relativePath));
158
+ let newChildPath = (0, import_Path.join)(newDir, child.name);
159
+ if (child.path !== newChildPath) {
160
+ newChildPath = this.app.vault.getAvailablePath((0, import_Path.join)(newDir, child.basename), child.extension);
161
+ renameMap.set(child.path, newChildPath);
162
+ }
163
+ }
164
+ }
165
+ async processRename(oldPath, newPath, renameMap) {
166
+ let oldFile = null;
167
+ try {
168
+ oldFile = this.app.vault.getFileByPath(oldPath);
169
+ let newFile = this.app.vault.getFileByPath(newPath);
170
+ if (oldFile) {
171
+ await (0, import_Vault.createFolderSafe)(this.app, (0, import_Path.dirname)(newPath));
172
+ const oldFolder = oldFile.parent;
173
+ try {
174
+ if (newFile) {
175
+ try {
176
+ await this.app.vault.delete(newFile);
177
+ } catch (e) {
178
+ if (this.app.vault.getAbstractFileByPath(newPath)) {
179
+ throw e;
180
+ }
181
+ }
182
+ }
183
+ await this.app.vault.rename(oldFile, newPath);
184
+ } catch (e) {
185
+ if (!this.app.vault.getAbstractFileByPath(newPath) || this.app.vault.getAbstractFileByPath(oldPath)) {
186
+ throw e;
187
+ }
188
+ }
189
+ if (this.settingsBuilder().shouldDeleteEmptyFolders) {
190
+ await (0, import_Vault.removeEmptyFolderHierarchy)(this.app, oldFolder);
191
+ }
192
+ }
193
+ oldFile = (0, import_implementations.createTFileInstance)(this.app.vault, oldPath);
194
+ newFile = this.app.vault.getFileByPath(newPath);
195
+ if (!oldFile.deleted || !newFile) {
196
+ throw new Error(`Could not rename ${oldPath} to ${newPath}`);
197
+ }
198
+ const backlinks = await this.getBacklinks(oldFile, newFile);
199
+ for (const parentNotePath of backlinks.keys()) {
200
+ let parentNote = this.app.vault.getFileByPath(parentNotePath);
201
+ if (!parentNote) {
202
+ const newParentNotePath = renameMap.get(parentNotePath);
203
+ if (newParentNotePath) {
204
+ parentNote = this.app.vault.getFileByPath(newParentNotePath);
205
+ }
206
+ }
207
+ if (!parentNote) {
208
+ console.warn(`Parent note not found: ${parentNotePath}`);
209
+ continue;
210
+ }
211
+ await (0, import_Vault.applyFileChanges)(this.app, parentNote, async () => {
212
+ if (!oldFile) {
213
+ return [];
214
+ }
215
+ const links = (await this.getBacklinks(oldFile, newFile)).get(parentNotePath) ?? [];
216
+ const changes = [];
217
+ for (const link of links) {
218
+ changes.push({
219
+ startIndex: link.position.start.offset,
220
+ endIndex: link.position.end.offset,
221
+ oldContent: link.original,
222
+ newContent: (0, import_Link.updateLink)({
223
+ app: this.app,
224
+ link,
225
+ pathOrFile: newFile,
226
+ oldPathOrFile: oldPath,
227
+ sourcePathOrFile: parentNote,
228
+ renameMap
229
+ })
230
+ });
231
+ }
232
+ return changes;
233
+ });
234
+ }
235
+ if ((0, import_TAbstractFile.isCanvasFile)(newFile)) {
236
+ await (0, import_Vault.processWithRetry)(this.app, newFile, (content) => {
237
+ const canvasData = JSON.parse(content);
238
+ for (const node of canvasData.nodes) {
239
+ if (node.type !== "file") {
240
+ continue;
241
+ }
242
+ const newPath2 = renameMap.get(node.file);
243
+ if (!newPath2) {
244
+ continue;
245
+ }
246
+ node.file = newPath2;
247
+ }
248
+ return (0, import_Object.toJson)(canvasData);
249
+ });
250
+ } else if ((0, import_TAbstractFile.isMarkdownFile)(newFile)) {
251
+ await (0, import_Link.updateLinksInFile)({
252
+ app: this.app,
253
+ pathOrFile: newFile,
254
+ oldPathOrFile: oldPath,
255
+ renameMap
256
+ });
257
+ }
258
+ } finally {
259
+ this.renamingPaths.delete(oldPath);
260
+ }
261
+ }
262
+ async getBacklinks(oldFile, newFile) {
263
+ const backlinks = /* @__PURE__ */ new Map();
264
+ const oldLinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, oldFile);
265
+ for (const path of oldLinks.keys()) {
266
+ backlinks.set(path, oldLinks.get(path) ?? []);
267
+ }
268
+ if (!newFile) {
269
+ return backlinks;
270
+ }
271
+ const newLinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, newFile);
272
+ for (const path of newLinks.keys()) {
273
+ const links = backlinks.get(path) ?? [];
274
+ links.push(...newLinks.get(path) ?? []);
275
+ backlinks.set(path, links);
276
+ }
277
+ return backlinks;
278
+ }
279
+ }
280
+ // Annotate the CommonJS export names for ESM import in node:
281
+ 0 && (module.exports = {
282
+ RenameDeleteHandler
283
+ });
284
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vY2FudmFzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVRGaWxlSW5zdGFuY2UgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB7IHRvSnNvbiB9IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICByZWxhdGl2ZVxufSBmcm9tICcuLi9QYXRoLnRzJztcbmltcG9ydCB7IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi9BdHRhY2htZW50UGF0aC50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0TGlua0ZpbGUsXG4gIHVwZGF0ZUxpbmssXG4gIHVwZGF0ZUxpbmtzSW5GaWxlXG59IGZyb20gJy4vTGluay50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZVxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgaXNOb3RlXG59IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5pbXBvcnQge1xuICBhcHBseUZpbGVDaGFuZ2VzLFxuICBjcmVhdGVGb2xkZXJTYWZlLFxuICBwcm9jZXNzV2l0aFJldHJ5LFxuICByZW1vdmVFbXB0eUZvbGRlckhpZXJhcmNoeSxcbiAgcmVtb3ZlRm9sZGVyU2FmZVxufSBmcm9tICcuL1ZhdWx0LnRzJztcblxuaW50ZXJmYWNlIFNwZWNpYWxSZW5hbWUge1xuICBvbGRQYXRoOiBzdHJpbmc7XG4gIG5ld1BhdGg6IHN0cmluZztcbiAgdGVtcFBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncyB7XG4gIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVyczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHJlbmFtaW5nIGFuZCBkZWxldGluZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbmFtZURlbGV0ZUhhbmRsZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCwgcHJpdmF0ZSBzZXR0aW5nc0J1aWxkZXI6ICgpID0+IFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncykgeyB9XG5cbiAgcHJpdmF0ZSByZW5hbWluZ1BhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgc3BlY2lhbFJlbmFtZXM6IFNwZWNpYWxSZW5hbWVbXSA9IFtdO1xuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVSZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5kZWJ1ZyhgSGFuZGxlIFJlbmFtZSAke29sZFBhdGh9IC0+ICR7ZmlsZS5wYXRofWApO1xuXG4gICAgaWYgKHRoaXMucmVuYW1pbmdQYXRocy5oYXMob2xkUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHRoaXMuc3BlY2lhbFJlbmFtZXMuZmluZCgoeCkgPT4geC5vbGRQYXRoID09PSBmaWxlLnBhdGgpO1xuICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUoZmlsZSwgc3BlY2lhbFJlbmFtZS50ZW1wUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuaW5zZW5zaXRpdmUgJiYgb2xkUGF0aC50b0xvd2VyQ2FzZSgpID09PSBmaWxlLnBhdGgudG9Mb3dlckNhc2UoKSAmJiBkaXJuYW1lKG9sZFBhdGgpID09PSBkaXJuYW1lKGZpbGUucGF0aCkpIHtcbiAgICAgIHRoaXMuc3BlY2lhbFJlbmFtZXMucHVzaCh7XG4gICAgICAgIG9sZFBhdGgsXG4gICAgICAgIG5ld1BhdGg6IGZpbGUucGF0aCxcbiAgICAgICAgdGVtcFBhdGg6IGpvaW4oZmlsZS5wYXJlbnQ/LnBhdGggPz8gJycsICdfX3RlbXBfXycgKyBmaWxlLm5hbWUpXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICBjb25zdCB1cGRhdGVBbGxMaW5rcyA9IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnVwZGF0ZUFsbExpbmtzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVuYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbFJlbmFtZU1hcChmaWxlLCBvbGRQYXRoLCByZW5hbWVNYXApO1xuICAgICAgZm9yIChjb25zdCBvbGRQYXRoIG9mIHJlbmFtZU1hcC5rZXlzKCkpIHtcbiAgICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmFkZChvbGRQYXRoKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbb2xkUGF0aDIsIG5ld1BhdGgyXSBvZiByZW5hbWVNYXAuZW50cmllcygpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1JlbmFtZShvbGRQYXRoMiwgbmV3UGF0aDIsIHJlbmFtZU1hcCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1JlbmFtZShvbGRQYXRoLCBmaWxlLnBhdGgsIHJlbmFtZU1hcCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5kZWxldGUob2xkUGF0aCk7XG4gICAgICB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcyA9IHVwZGF0ZUFsbExpbmtzO1xuXG4gICAgICBjb25zdCBzcGVjaWFsUmVuYW1lID0gdGhpcy5zcGVjaWFsUmVuYW1lcy5maW5kKCh4KSA9PiB4LnRlbXBQYXRoID09PSBmaWxlLnBhdGgpO1xuICAgICAgaWYgKHNwZWNpYWxSZW5hbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIHNwZWNpYWxSZW5hbWUubmV3UGF0aCk7XG4gICAgICAgIHRoaXMuc3BlY2lhbFJlbmFtZXMucmVtb3ZlKHNwZWNpYWxSZW5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVEZWxldGUoZmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBEZWxldGUgJHtmaWxlLnBhdGh9YCk7XG4gICAgaWYgKCFpc05vdGUoZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5hbWluZ1BhdGhzLmhhcyhmaWxlLnBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGF3YWl0IHJlbW92ZUZvbGRlclNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGb2xkZXIsIGZpbGUucGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbGxSZW5hbWVNYXAoZmlsZTogVEZpbGUsIG9sZFBhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBmaWxlLnBhdGgpO1xuXG4gICAgaWYgKCFpc05vdGUoZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBvbGRQYXRoKTtcbiAgICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGNvbnN0IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgam9pbihkaXJuYW1lKG9sZFBhdGgpLCAnRFVNTVlfRklMRS5tZCcpKTtcblxuICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuOiBURmlsZVtdID0gW107XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGgpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKHRoaXMuYXBwLCBmaWxlKTtcbiAgICAgIGlmICghY2FjaGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGdldEFsbExpbmtzKGNhY2hlKSkge1xuICAgICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgbGluaywgb2xkUGF0aCk7XG4gICAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRhY2htZW50RmlsZS5wYXRoLnN0YXJ0c1dpdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgICBpZiAoYmFja2xpbmtzLmtleXMoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBWYXVsdC5yZWN1cnNlQ2hpbGRyZW4ob2xkQXR0YWNobWVudEZvbGRlciwgKGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChpc05vdGUoY2hpbGQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIGNoaWxkLnBhdGgpO1xuICAgICAgY29uc3QgbmV3RGlyID0gam9pbihuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCwgZGlybmFtZShyZWxhdGl2ZVBhdGgpKTtcbiAgICAgIGxldCBuZXdDaGlsZFBhdGggPSBqb2luKG5ld0RpciwgY2hpbGQubmFtZSk7XG4gICAgICBpZiAoY2hpbGQucGF0aCAhPT0gbmV3Q2hpbGRQYXRoKSB7XG4gICAgICAgIG5ld0NoaWxkUGF0aCA9IHRoaXMuYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIGNoaWxkLmJhc2VuYW1lKSwgY2hpbGQuZXh0ZW5zaW9uKTtcbiAgICAgICAgcmVuYW1lTWFwLnNldChjaGlsZC5wYXRoLCBuZXdDaGlsZFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IG9sZEZpbGU6IFRGaWxlIHwgbnVsbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb2xkRmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgob2xkUGF0aCk7XG4gICAgICBsZXQgbmV3RmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobmV3UGF0aCk7XG5cbiAgICAgIGlmIChvbGRGaWxlKSB7XG4gICAgICAgIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUodGhpcy5hcHAsIGRpcm5hbWUobmV3UGF0aCkpO1xuICAgICAgICBjb25zdCBvbGRGb2xkZXIgPSBvbGRGaWxlLnBhcmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuZGVsZXRlKG5ld0ZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUob2xkRmlsZSwgbmV3UGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKSB8fCB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2xkUGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzQnVpbGRlcigpLnNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycykge1xuICAgICAgICAgIGF3YWl0IHJlbW92ZUVtcHR5Rm9sZGVySGllcmFyY2h5KHRoaXMuYXBwLCBvbGRGb2xkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9sZEZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKHRoaXMuYXBwLnZhdWx0LCBvbGRQYXRoKTtcbiAgICAgIG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXG4gICAgICBpZiAoIW9sZEZpbGUuZGVsZXRlZCB8fCAhbmV3RmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCByZW5hbWUgJHtvbGRQYXRofSB0byAke25ld1BhdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhY2tsaW5rcyA9IGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudE5vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICAgICAgbGV0IHBhcmVudE5vdGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICAgICAgY29uc3QgbmV3UGFyZW50Tm90ZVBhdGggPSByZW5hbWVNYXAuZ2V0KHBhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgICBpZiAobmV3UGFyZW50Tm90ZVBhdGgpIHtcbiAgICAgICAgICAgIHBhcmVudE5vdGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudE5vdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFBhcmVudCBub3RlIG5vdCBmb3VuZDogJHtwYXJlbnROb3RlUGF0aH1gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGFwcGx5RmlsZUNoYW5nZXModGhpcy5hcHAsIHBhcmVudE5vdGUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIW9sZEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbGlua3NcbiAgICAgICAgICAgID0gKGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpKS5nZXQocGFyZW50Tm90ZVBhdGgpID8/IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgIGVuZEluZGV4OiBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICAgICAgICAgIG9sZENvbnRlbnQ6IGxpbmsub3JpZ2luYWwsXG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQ6IHVwZGF0ZUxpbmsoe1xuICAgICAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgbGluayxcbiAgICAgICAgICAgICAgICBwYXRoT3JGaWxlOiBuZXdGaWxlLFxuICAgICAgICAgICAgICAgIG9sZFBhdGhPckZpbGU6IG9sZFBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aE9yRmlsZTogcGFyZW50Tm90ZSxcbiAgICAgICAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2FudmFzRmlsZShuZXdGaWxlKSkge1xuICAgICAgICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KHRoaXMuYXBwLCBuZXdGaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbnZhc0RhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG4gICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGNhbnZhc0RhdGEubm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgICAgICBpZiAoIW5ld1BhdGgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmZpbGUgPSBuZXdQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXJrZG93bkZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgIHJlbmFtZU1hcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmRlbGV0ZShvbGRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEJhY2tsaW5rcyhvbGRGaWxlOiBURmlsZSwgbmV3RmlsZTogVEZpbGUgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPj4ge1xuICAgIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPigpO1xuICAgIGNvbnN0IG9sZExpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG9sZEZpbGUpO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBvbGRMaW5rcy5rZXlzKCkpIHtcbiAgICAgIGJhY2tsaW5rcy5zZXQocGF0aCwgb2xkTGlua3MuZ2V0KHBhdGgpID8/IFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIW5ld0ZpbGUpIHtcbiAgICAgIHJldHVybiBiYWNrbGlua3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgbmV3RmlsZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbmV3TGlua3Mua2V5cygpKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQocGF0aCkgPz8gW107XG4gICAgICBsaW5rcy5wdXNoKC4uLm5ld0xpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIGxpbmtzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2xpbmtzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxzQkFJTztBQUVQLDZCQUFvQztBQUVwQyxvQkFBdUI7QUFDdkIsa0JBSU87QUFDUCw0QkFBd0M7QUFDeEMsa0JBSU87QUFDUCwyQkFJTztBQUNQLDJCQUlPO0FBQ1AsbUJBTU87QUE5Q1AsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFB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QUFDO0FBQUEsVUFDSDtBQUVBLGlCQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSDtBQUVBLGNBQUksbUNBQWEsT0FBTyxHQUFHO0FBQ3pCLGtCQUFNLCtCQUFpQixLQUFLLEtBQUssU0FBUyxDQUFDLFlBQVk7QUFDckQsZ0JBQU0sYUFBYSxLQUFLLE1BQU0sT0FBTztBQUNyQyxxQkFBVyxRQUFRLFdBQVcsT0FBTztBQUNuQyxnQkFBSSxLQUFLLFNBQVMsUUFBUTtBQUN4QjtBQUFBLFlBQ0Y7QUFDQSxrQkFBTUMsV0FBVSxVQUFVLElBQUksS0FBSyxJQUFJO0FBQ3ZDLGdCQUFJLENBQUNBLFVBQVM7QUFDWjtBQUFBLFlBQ0Y7QUFDQSxpQkFBSyxPQUFPQTtBQUFBLFVBQ2Q7QUFDQSxxQkFBTyxzQkFBTyxVQUFVO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0gsZUFBVyxxQ0FBZSxPQUFPLEdBQUc7QUFDbEMsa0JBQU0sK0JBQWtCO0FBQUEsVUFDdEIsS0FBSyxLQUFLO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsVUFDZjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLFVBQUU7QUFDQSxXQUFLLGNBQWMsT0FBTyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFjLGFBQWEsU0FBZ0IsU0FBK0Q7QUFDeEcsVUFBTSxZQUFZLG9CQUFJLElBQThCO0FBQ3BELFVBQU0sV0FBVyxVQUFNLDhDQUF3QixLQUFLLEtBQUssT0FBTztBQUNoRSxlQUFXLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDbEMsZ0JBQVUsSUFBSSxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQUEsSUFDOUM7QUFFQSxRQUFJLENBQUMsU0FBUztBQUNaLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxXQUFXLFVBQU0sOENBQXdCLEtBQUssS0FBSyxPQUFPO0FBRWhFLGVBQVcsUUFBUSxTQUFTLEtBQUssR0FBRztBQUNsQyxZQUFNLFFBQVEsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3RDLFlBQU0sS0FBSyxHQUFHLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLGdCQUFVLElBQUksTUFBTSxLQUFLO0FBQUEsSUFDM0I7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJvbGRQYXRoIiwgInNwZWNpYWxSZW5hbWUiLCAibmV3UGF0aCJdCn0K
@@ -0,0 +1,21 @@
1
+ import type { TAbstractFile } from 'obsidian';
2
+ import { App } from 'obsidian';
3
+ interface RenameDeleteHandlerSettings {
4
+ shouldDeleteEmptyFolders: boolean;
5
+ }
6
+ /**
7
+ * Handles renaming and deleting files.
8
+ */
9
+ export declare class RenameDeleteHandler {
10
+ private app;
11
+ private settingsBuilder;
12
+ constructor(app: App, settingsBuilder: () => RenameDeleteHandlerSettings);
13
+ private renamingPaths;
14
+ private specialRenames;
15
+ handleRename(file: TAbstractFile, oldPath: string): Promise<void>;
16
+ handleDelete(file: TAbstractFile): Promise<void>;
17
+ private fillRenameMap;
18
+ private processRename;
19
+ private getBacklinks;
20
+ }
21
+ export {};
@@ -46,6 +46,7 @@ __export(obsidian_exports, {
46
46
  Modal: () => Modal,
47
47
  ObsidianSettings: () => ObsidianSettings,
48
48
  Plugin: () => Plugin,
49
+ RenameDeleteHandler: () => RenameDeleteHandler,
49
50
  ResourceUrl: () => ResourceUrl,
50
51
  TAbstractFile: () => TAbstractFile,
51
52
  TFile: () => TFile,
@@ -66,6 +67,7 @@ var MetadataCache = __toESM(require("./MetadataCache.cjs"), 1);
66
67
  var Modal = __toESM(require("./Modal/index.cjs"), 1);
67
68
  var ObsidianSettings = __toESM(require("./ObsidianSettings.cjs"), 1);
68
69
  var Plugin = __toESM(require("./Plugin/index.cjs"), 1);
70
+ var RenameDeleteHandler = __toESM(require("./RenameDeleteHandler.cjs"), 1);
69
71
  var ResourceUrl = __toESM(require("./ResourceUrl.cjs"), 1);
70
72
  var TAbstractFile = __toESM(require("./TAbstractFile.cjs"), 1);
71
73
  var TFile = __toESM(require("./TFile.cjs"), 1);
@@ -97,10 +99,11 @@ var __process = globalThis["process"] ?? {
97
99
  Modal,
98
100
  ObsidianSettings,
99
101
  Plugin,
102
+ RenameDeleteHandler,
100
103
  ResourceUrl,
101
104
  TAbstractFile,
102
105
  TFile,
103
106
  TFolder,
104
107
  Vault
105
108
  });
106
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgQXBwIGZyb20gJy4vQXBwLnRzJztcbmV4cG9ydCAqIGFzIEF0dGFjaG1lbnRQYXRoIGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuZXhwb3J0ICogYXMgQmFja2xpbmsgZnJvbSAnLi9CYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyBDYWxsb3V0IGZyb20gJy4vQ2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyBEYXRhdmlldyBmcm9tICcuL0RhdGF2aWV3LnRzJztcbmV4cG9ydCAqIGFzIERhdGF2aWV3TGluayBmcm9tICcuL0RhdGF2aWV3TGluay50cyc7XG5leHBvcnQgKiBhcyBGcm9udE1hdHRlciBmcm9tICcuL0Zyb250TWF0dGVyLnRzJztcbmV4cG9ydCAqIGFzIExpbmsgZnJvbSAnLi9MaW5rLnRzJztcbmV4cG9ydCAqIGFzIE1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIGZyb20gJy4vTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgTWV0YWRhdGFDYWNoZSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuZXhwb3J0ICogYXMgTW9kYWwgZnJvbSAnLi9Nb2RhbC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBPYnNpZGlhblNldHRpbmdzIGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyBQbHVnaW4gZnJvbSAnLi9QbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUmVzb3VyY2VVcmwgZnJvbSAnLi9SZXNvdXJjZVVybC50cyc7XG5leHBvcnQgKiBhcyBUQWJzdHJhY3RGaWxlIGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5leHBvcnQgKiBhcyBURmlsZSBmcm9tICcuL1RGaWxlLnRzJztcbmV4cG9ydCAqIGFzIFRGb2xkZXIgZnJvbSAnLi9URm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzIFZhdWx0IGZyb20gJy4vVmF1bHQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxVQUFxQjtBQUNyQixxQkFBZ0M7QUFDaEMsZUFBMEI7QUFDMUIsY0FBeUI7QUFDekIsZUFBMEI7QUFDMUIsbUJBQThCO0FBQzlCLGtCQUE2QjtBQUM3QixXQUFzQjtBQUN0QixpQ0FBNEM7QUFDNUMsb0JBQStCO0FBQy9CLFlBQXVCO0FBQ3ZCLHVCQUFrQztBQUNsQyxhQUF3QjtBQUN4QixrQkFBNkI7QUFDN0Isb0JBQStCO0FBQy9CLFlBQXVCO0FBQ3ZCLGNBQXlCO0FBQ3pCLFlBQXVCO0FBekJ2QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
109
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgQXBwIGZyb20gJy4vQXBwLnRzJztcbmV4cG9ydCAqIGFzIEF0dGFjaG1lbnRQYXRoIGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuZXhwb3J0ICogYXMgQmFja2xpbmsgZnJvbSAnLi9CYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyBDYWxsb3V0IGZyb20gJy4vQ2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyBEYXRhdmlldyBmcm9tICcuL0RhdGF2aWV3LnRzJztcbmV4cG9ydCAqIGFzIERhdGF2aWV3TGluayBmcm9tICcuL0RhdGF2aWV3TGluay50cyc7XG5leHBvcnQgKiBhcyBGcm9udE1hdHRlciBmcm9tICcuL0Zyb250TWF0dGVyLnRzJztcbmV4cG9ydCAqIGFzIExpbmsgZnJvbSAnLi9MaW5rLnRzJztcbmV4cG9ydCAqIGFzIE1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIGZyb20gJy4vTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgTWV0YWRhdGFDYWNoZSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuZXhwb3J0ICogYXMgTW9kYWwgZnJvbSAnLi9Nb2RhbC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBPYnNpZGlhblNldHRpbmdzIGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyBQbHVnaW4gZnJvbSAnLi9QbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUmVuYW1lRGVsZXRlSGFuZGxlciBmcm9tICcuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgUmVzb3VyY2VVcmwgZnJvbSAnLi9SZXNvdXJjZVVybC50cyc7XG5leHBvcnQgKiBhcyBUQWJzdHJhY3RGaWxlIGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5leHBvcnQgKiBhcyBURmlsZSBmcm9tICcuL1RGaWxlLnRzJztcbmV4cG9ydCAqIGFzIFRGb2xkZXIgZnJvbSAnLi9URm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzIFZhdWx0IGZyb20gJy4vVmF1bHQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQXFCO0FBQ3JCLHFCQUFnQztBQUNoQyxlQUEwQjtBQUMxQixjQUF5QjtBQUN6QixlQUEwQjtBQUMxQixtQkFBOEI7QUFDOUIsa0JBQTZCO0FBQzdCLFdBQXNCO0FBQ3RCLGlDQUE0QztBQUM1QyxvQkFBK0I7QUFDL0IsWUFBdUI7QUFDdkIsdUJBQWtDO0FBQ2xDLGFBQXdCO0FBQ3hCLDBCQUFxQztBQUNyQyxrQkFBNkI7QUFDN0Isb0JBQStCO0FBQy9CLFlBQXVCO0FBQ3ZCLGNBQXlCO0FBQ3pCLFlBQXVCO0FBMUJ2QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -11,6 +11,7 @@ export * as MetadataCache from './MetadataCache.ts';
11
11
  export * as Modal from './Modal/index.ts';
12
12
  export * as ObsidianSettings from './ObsidianSettings.ts';
13
13
  export * as Plugin from './Plugin/index.ts';
14
+ export * as RenameDeleteHandler from './RenameDeleteHandler.ts';
14
15
  export * as ResourceUrl from './ResourceUrl.ts';
15
16
  export * as TAbstractFile from './TAbstractFile.ts';
16
17
  export * as TFile from './TFile.ts';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "main": "./dist/lib/index.cjs",
6
6
  "types": "./dist/lib/index.d.ts",