obsidian-dev-utils 3.27.0 → 3.28.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.
@@ -26,11 +26,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
26
26
  var Vault_exports = {};
27
27
  __export(Vault_exports, {
28
28
  applyFileChanges: () => applyFileChanges,
29
+ copySafe: () => copySafe,
29
30
  createFolderSafe: () => createFolderSafe,
30
31
  createTempFile: () => createTempFile,
31
32
  createTempFolder: () => createTempFolder,
32
33
  deleteEmptyFolderHierarchy: () => deleteEmptyFolderHierarchy,
33
34
  deleteSafe: () => deleteSafe,
35
+ getAvailablePath: () => getAvailablePath,
34
36
  getMarkdownFilesSorted: () => getMarkdownFilesSorted,
35
37
  isEmptyFolder: () => isEmptyFolder,
36
38
  listSafe: () => listSafe,
@@ -39,15 +41,14 @@ __export(Vault_exports, {
39
41
  });
40
42
  module.exports = __toCommonJS(Vault_exports);
41
43
  var import_obsidian = require('obsidian');
44
+ var import_implementations = require('obsidian-typings/implementations');
42
45
  var import_Async = require('../Async.cjs');
43
46
  var import_Error = require('../Error.cjs');
44
47
  var import_Object = require('../Object.cjs');
45
48
  var import_Path = require('../Path.cjs');
46
49
  var import_ValueProvider = require('../ValueProvider.cjs');
50
+ var import_FileSystem = require('./FileSystem.cjs');
47
51
  var import_MetadataCache = require('./MetadataCache.cjs');
48
- var import_TAbstractFile = require('./TAbstractFile.cjs');
49
- var import_TFile = require('./TFile.cjs');
50
- var import_TFolder = require('./TFolder.cjs');
51
52
  var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
52
53
  if (typeof __filename !== "string") {
53
54
  return new URL(window.location.href);
@@ -63,7 +64,7 @@ function getMarkdownFilesSorted(app) {
63
64
  return app.vault.getMarkdownFiles().sort((a, b) => a.path.localeCompare(b.path));
64
65
  }
65
66
  async function processWithRetry(app, pathOrFile, newContentProvider, retryOptions = {}) {
66
- const file = (0, import_TFile.getFile)(app, pathOrFile);
67
+ const file = (0, import_FileSystem.getFile)(app, pathOrFile);
67
68
  const DEFAULT_RETRY_OPTIONS = { timeoutInMilliseconds: 6e4 };
68
69
  const overriddenOptions = { ...DEFAULT_RETRY_OPTIONS, ...retryOptions };
69
70
  await (0, import_Async.retryWithTimeout)(async () => {
@@ -99,7 +100,7 @@ async function applyFileChanges(app, pathOrFile, changesProvider, retryOptions =
99
100
  console.warn("Content mismatch", {
100
101
  startIndex: change.startIndex,
101
102
  endIndex: change.endIndex,
102
- path: (0, import_TAbstractFile.getPath)(pathOrFile),
103
+ path: (0, import_FileSystem.getPath)(pathOrFile),
103
104
  expectedContent: change.oldContent,
104
105
  actualContent
105
106
  });
@@ -136,7 +137,7 @@ async function applyFileChanges(app, pathOrFile, changesProvider, retryOptions =
136
137
  }, overriddenOptions);
137
138
  }
138
139
  async function deleteSafe(app, pathOrFile, deletedNotePath, shouldReportUsedAttachments, shouldDeleteEmptyFolders) {
139
- const file = (0, import_TAbstractFile.getAbstractFileOrNull)(app, pathOrFile);
140
+ const file = (0, import_FileSystem.getAbstractFileOrNull)(app, pathOrFile);
140
141
  if (!file) {
141
142
  return false;
142
143
  }
@@ -185,7 +186,7 @@ async function createFolderSafe(app, path) {
185
186
  }
186
187
  }
187
188
  async function listSafe(app, pathOrFolder) {
188
- const path = (0, import_TAbstractFile.getPath)(pathOrFolder);
189
+ const path = (0, import_FileSystem.getPath)(pathOrFolder);
189
190
  const EMPTY = { files: [], folders: [] };
190
191
  if ((await app.vault.adapter.stat(path))?.type !== "folder") {
191
192
  return EMPTY;
@@ -200,7 +201,7 @@ async function listSafe(app, pathOrFolder) {
200
201
  }
201
202
  }
202
203
  async function deleteEmptyFolderHierarchy(app, pathOrFolder) {
203
- let folder = (0, import_TFolder.getFolderOrNull)(app, pathOrFolder);
204
+ let folder = (0, import_FileSystem.getFolderOrNull)(app, pathOrFolder);
204
205
  while (folder) {
205
206
  if (!await isEmptyFolder(app, folder)) {
206
207
  return;
@@ -211,12 +212,12 @@ async function deleteEmptyFolderHierarchy(app, pathOrFolder) {
211
212
  }
212
213
  }
213
214
  async function createTempFile(app, path) {
214
- let file = app.vault.getFileByPath(path);
215
+ let file = (0, import_FileSystem.getFileOrNull)(app, path);
215
216
  if (file) {
216
217
  return async () => {
217
218
  };
218
219
  }
219
- const folderCleanup = await createTempFolder(app, (0, import_Path.dirname)(path));
220
+ const folderCleanup = await createTempFolder(app, (0, import_implementations.parentFolderPath)(path));
220
221
  try {
221
222
  await app.vault.create(path, "");
222
223
  } catch (e) {
@@ -224,7 +225,7 @@ async function createTempFile(app, path) {
224
225
  throw e;
225
226
  }
226
227
  }
227
- file = app.vault.getFileByPath(path) ?? (0, import_Error.throwExpression)(new Error("File not found"));
228
+ file = (0, import_FileSystem.getFile)(app, path);
228
229
  return async () => {
229
230
  if (!file.deleted) {
230
231
  await app.fileManager.trashFile(file);
@@ -233,16 +234,16 @@ async function createTempFile(app, path) {
233
234
  };
234
235
  }
235
236
  async function createTempFolder(app, path) {
236
- let folder = app.vault.getFolderByPath(path);
237
+ let folder = (0, import_FileSystem.getFolderOrNull)(app, path);
237
238
  if (folder) {
238
239
  return async () => {
239
240
  };
240
241
  }
241
- const dirPath = (0, import_Path.dirname)(path);
242
+ const dirPath = (0, import_implementations.parentFolderPath)(path);
242
243
  await createTempFolder(app, dirPath);
243
- const folderCleanup = await createTempFolder(app, (0, import_Path.dirname)(path));
244
+ const folderCleanup = await createTempFolder(app, (0, import_implementations.parentFolderPath)(path));
244
245
  await createFolderSafe(app, path);
245
- folder = app.vault.getFolderByPath(path) ?? (0, import_Error.throwExpression)(new Error("Folder not found"));
246
+ folder = (0, import_FileSystem.getFolder)(app, path);
246
247
  return async () => {
247
248
  if (!folder.deleted) {
248
249
  await app.fileManager.trashFile(folder);
@@ -251,18 +252,17 @@ async function createTempFolder(app, path) {
251
252
  };
252
253
  }
253
254
  async function isEmptyFolder(app, pathOrFolder) {
254
- const listedFiles = await listSafe(app, (0, import_TAbstractFile.getPath)(pathOrFolder));
255
+ const listedFiles = await listSafe(app, (0, import_FileSystem.getPath)(pathOrFolder));
255
256
  return listedFiles.files.length === 0 && listedFiles.folders.length === 0;
256
257
  }
257
258
  async function renameSafe(app, oldPathOrFile, newPath) {
258
- const file = (0, import_TFile.getFile)(app, oldPathOrFile);
259
+ const file = (0, import_FileSystem.getFile)(app, oldPathOrFile);
259
260
  if (file.path === newPath) {
260
261
  return newPath;
261
262
  }
262
- const newDir = (0, import_Path.dirname)(newPath);
263
- await createFolderSafe(app, newDir);
264
- const ext = (0, import_Path.extname)(newPath);
265
- const newAvailablePath = app.vault.getAvailablePath((0, import_Path.join)(newDir, (0, import_Path.basename)(newPath, ext)), ext);
263
+ const newFolderPath = (0, import_implementations.parentFolderPath)(newPath);
264
+ await createFolderSafe(app, newFolderPath);
265
+ const newAvailablePath = getAvailablePath(app, newPath);
266
266
  try {
267
267
  await app.vault.rename(file, newAvailablePath);
268
268
  } catch (e) {
@@ -272,18 +272,38 @@ async function renameSafe(app, oldPathOrFile, newPath) {
272
272
  }
273
273
  return newAvailablePath;
274
274
  }
275
+ async function copySafe(app, oldPathOrFile, newPath) {
276
+ const file = (0, import_FileSystem.getFile)(app, oldPathOrFile);
277
+ const newFolderPath = (0, import_implementations.parentFolderPath)(newPath);
278
+ await createFolderSafe(app, newFolderPath);
279
+ const newAvailablePath = getAvailablePath(app, newPath);
280
+ try {
281
+ await app.vault.copy(file, newAvailablePath);
282
+ } catch (e) {
283
+ if (!await app.vault.exists(newAvailablePath)) {
284
+ throw e;
285
+ }
286
+ }
287
+ return newAvailablePath;
288
+ }
289
+ function getAvailablePath(app, path) {
290
+ const ext = (0, import_Path.extname)(path);
291
+ return app.vault.getAvailablePath((0, import_Path.join)((0, import_Path.dirname)(path), (0, import_Path.basename)(path, ext)), ext.slice(1));
292
+ }
275
293
  // Annotate the CommonJS export names for ESM import in node:
276
294
  0 && (module.exports = {
277
295
  applyFileChanges,
296
+ copySafe,
278
297
  createFolderSafe,
279
298
  createTempFile,
280
299
  createTempFolder,
281
300
  deleteEmptyFolderHierarchy,
282
301
  deleteSafe,
302
+ getAvailablePath,
283
303
  getMarkdownFilesSorted,
284
304
  isEmptyFolder,
285
305
  listSafe,
286
306
  processWithRetry,
287
307
  renameSafe
288
308
  });
289
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBWYXVsdFxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaXN0ZWRGaWxlcyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgTm90aWNlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dCB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7XG4gIHByaW50RXJyb3IsXG4gIHRocm93RXhwcmVzc2lvblxufSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUgfSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JBYnN0cmFjdEZpbGUgfSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB7IGdldEZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRm9sZGVyIH0gZnJvbSAnLi9URm9sZGVyLnRzJztcbmltcG9ydCB7IGdldEZvbGRlck9yTnVsbCB9IGZyb20gJy4vVEZvbGRlci50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBzdGFydEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZW5kSW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyBjb250ZW50IHRvIHJlcGxhY2UgdGhlIG9sZCBjb250ZW50LlxuICAgKi9cbiAgbmV3Q29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBmaWxlIHdpdGggcmV0cnkgbG9naWMsIHVwZGF0aW5nIGl0cyBjb250ZW50IGJhc2VkIG9uIGEgcHJvdmlkZWQgdmFsdWUgb3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gYmUgcHJvY2Vzc2VkLiBJdCBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXRoIG9yIGEgZmlsZSBvYmplY3QuXG4gKiBAcGFyYW0gbmV3Q29udGVudFByb3ZpZGVyIC0gQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAqIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9sZCBjb250ZW50IGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIHRoZSBuZXcgY29udGVudC5cbiAqIElmIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgcmV0dXJuIGBudWxsYCBpZiB0aGUgcHJvY2VzcyBzaG91bGQgYmUgcmV0cmllZC5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbC4gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgcHJvY2Vzcy4gSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0IG9wdGlvbnMgd2lsbCBiZSB1c2VkLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHByb2Nlc3MgaXMgY29tcGxldGUuXG4gKlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcm9jZXNzIGZhaWxzIGFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldHJpZXMgb3IgdGltZW91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NXaXRoUmV0cnkoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG5ld0NvbnRlbnRQcm92aWRlcjogVmFsdWVQcm92aWRlcjxzdHJpbmcgfCBudWxsLCBbc3RyaW5nXT4sIHJldHJ5T3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7IHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNjAwMDAgfTtcbiAgY29uc3Qgb3ZlcnJpZGRlbk9wdGlvbnM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5yZXRyeU9wdGlvbnMgfTtcbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCByZXNvbHZlVmFsdWUobmV3Q29udGVudFByb3ZpZGVyLCBvbGRDb250ZW50KTtcbiAgICBpZiAobmV3Q29udGVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgIGlmIChjb250ZW50ICE9PSBvbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBoYXMgY2hhbmdlZCBzaW5jZSBpdCB3YXMgcmVhZC4gUmV0cnlpbmcuLi4nLCB7XG4gICAgICAgICAgcGF0aDogZmlsZS5wYXRoLFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogb2xkQ29udGVudCxcbiAgICAgICAgICBhY3R1YWxDb250ZW50OiBjb250ZW50XG4gICAgICAgIH0pO1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9LCBvdmVycmlkZGVuT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHNlcmllcyBvZiBmaWxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlIG9yIHBhdGggd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIGNoYW5nZXNQcm92aWRlciAtIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyB0aGF0IGRldGVybWluZSBob3cgdGhlIG9wZXJhdGlvbiBzaG91bGQgcmV0cnkgb24gZmFpbHVyZS5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4sIHJldHJ5T3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7IHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNjAwMDAgfTtcbiAgY29uc3Qgb3ZlcnJpZGRlbk9wdGlvbnM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5yZXRyeU9wdGlvbnMgfTtcbiAgYXdhaXQgcHJvY2Vzc1dpdGhSZXRyeShhcHAsIHBhdGhPckZpbGUsIGFzeW5jIChjb250ZW50KSA9PiB7XG4gICAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcblxuICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBzdGFydEluZGV4OiBjaGFuZ2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICBlbmRJbmRleDogY2hhbmdlLmVuZEluZGV4LFxuICAgICAgICAgIHBhdGg6IGdldFBhdGgocGF0aE9yRmlsZSksXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBhY3R1YWxDb250ZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KTtcblxuICAgIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICAgIGNoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcigoY2hhbmdlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0NoYW5nZSBub3QgZm91bmQnKSk7XG4gICAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ1ByZXZpb3VzIGNoYW5nZSBub3QgZm91bmQnKSk7XG4gICAgICBpZiAocHJldmlvdXNDaGFuZ2UuZW5kSW5kZXggPiBjaGFuZ2Uuc3RhcnRJbmRleCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgICAgcHJldmlvdXNDaGFuZ2UsXG4gICAgICAgICAgY2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICAgIGxldCBsYXN0SW5kZXggPSAwO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCwgY2hhbmdlLnN0YXJ0SW5kZXgpO1xuICAgICAgbmV3Q29udGVudCArPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICB9XG5cbiAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgfSwgb3ZlcnJpZGRlbk9wdGlvbnMpO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgYWJzdHJhY3QgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byBkZWxldGUuXG4gKiBAcGFyYW0gZGVsZXRlZE5vdGVQYXRoIC0gT3B0aW9uYWwuIFRoZSBwYXRoIG9mIHRoZSBub3RlIHRoYXQgdHJpZ2dlcmVkIHRoZSByZW1vdmFsLlxuICogQHBhcmFtIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEgbm90aWNlIHdpbGwgYmUgc2hvd24gZm9yIGVhY2ggYXR0YWNobWVudCB0aGF0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuXG4gKiBAcGFyYW0gc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgZW1wdHkgZm9sZGVycyB3aWxsIGJlIGRlbGV0ZWQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBkZWxldGVkTm90ZVBhdGg/OiBzdHJpbmcsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cz86IGJvb2xlYW4sIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjYW5EZWxldGUgPSBmaWxlIGluc3RhbmNlb2YgVEZpbGUgfHwgKHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycyA/PyB0cnVlKTtcblxuICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUoYXBwLCBmaWxlKTtcbiAgICBpZiAoZGVsZXRlZE5vdGVQYXRoKSB7XG4gICAgICBiYWNrbGlua3MucmVtb3ZlS2V5KGRlbGV0ZWROb3RlUGF0aCk7XG4gICAgfVxuICAgIGlmIChiYWNrbGlua3MuY291bnQoKSAhPT0gMCkge1xuICAgICAgaWYgKHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cykge1xuICAgICAgICBuZXcgTm90aWNlKGBBdHRhY2htZW50ICR7ZmlsZS5wYXRofSBpcyBzdGlsbCB1c2VkIGJ5IG90aGVyIG5vdGVzLiBJdCB3aWxsIG5vdCBiZSBkZWxldGVkLmApO1xuICAgICAgfVxuICAgICAgY2FuRGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBmaWxlLmNoaWxkcmVuKSB7XG4gICAgICBjYW5EZWxldGUgJiY9IGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBjaGlsZC5wYXRoLCBkZWxldGVkTm90ZVBhdGgsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyk7XG4gICAgfVxuXG4gICAgY2FuRGVsZXRlICYmPSBhd2FpdCBpc0VtcHR5Rm9sZGVyKGFwcCwgZmlsZSk7XG4gIH1cblxuICBpZiAoY2FuRGVsZXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZmlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGF3YWl0IGFwcC52YXVsdC5leGlzdHMoZmlsZS5wYXRoKSkge1xuICAgICAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke2ZpbGUucGF0aH1gLCB7IGNhdXNlOiBlIH0pKTtcbiAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNhbkRlbGV0ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBTYWZlbHkgbGlzdHMgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gbGlzdC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYExpc3RlZEZpbGVzYCBvYmplY3QgY29udGFpbmluZyB0aGUgbGlzdGVkIGZpbGVzIGFuZCBmb2xkZXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNhZmUoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyKTogUHJvbWlzZTxMaXN0ZWRGaWxlcz4ge1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChwYXRoT3JGb2xkZXIpO1xuICBjb25zdCBFTVBUWSA9IHsgZmlsZXM6IFtdLCBmb2xkZXJzOiBbXSB9O1xuXG4gIGlmICgoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuc3RhdChwYXRoKSk/LnR5cGUgIT09ICdmb2xkZXInKSB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubGlzdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGVtcHR5IGZvbGRlciBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIGZvbGRlciB0byBzdGFydCByZW1vdmluZyBlbXB0eSBoaWVyYXJjaHkgZnJvbS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVtcHR5IGhpZXJhcmNoeSBpcyBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHkoYXBwOiBBcHAsIHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgcGF0aE9yRm9sZGVyKTtcblxuICB3aGlsZSAoZm9sZGVyKSB7XG4gICAgaWYgKCFhd2FpdCBpc0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBmb2xkZXIucGFyZW50O1xuICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBmb2xkZXIucGF0aCk7XG4gICAgZm9sZGVyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBEbyBub3RoaW5nXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgZGlybmFtZShwYXRoKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCkgPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignRmlsZSBub3QgZm91bmQnKSk7XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZm9sZGVyIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZm9sZGVyIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgaWYgKGZvbGRlcikge1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBEbyBub3RoaW5nXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRpclBhdGggPSBkaXJuYW1lKHBhdGgpO1xuICBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgZGlyUGF0aCk7XG5cbiAgY29uc3QgZm9sZGVyQ2xlYW51cCA9IGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBkaXJuYW1lKHBhdGgpKTtcblxuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgcGF0aCk7XG5cbiAgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKSA/PyB0aHJvd0V4cHJlc3Npb24obmV3IEVycm9yKCdGb2xkZXIgbm90IGZvdW5kJykpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmb2xkZXIuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9sZGVyIGlzIGVtcHR5LlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0VtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZ2V0UGF0aChwYXRoT3JGb2xkZXIpKTtcbiAgcmV0dXJuIGxpc3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMCAmJiBsaXN0ZWRGaWxlcy5mb2xkZXJzLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBSZW5hbWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICogSWYgdGhlIG5ldyBwYXRoIGFscmVhZHkgZXhpc3RzLCB0aGUgZmlsZSB3aWxsIGJlIHJlbmFtZWQgdG8gYW4gYXZhaWxhYmxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBvbGRQYXRoT3JGaWxlIC0gVGhlIG9sZCBwYXRoIG9yIGZpbGUgdG8gcmVuYW1lLlxuICogQHBhcmFtIG5ld1BhdGggLSBUaGUgbmV3IHBhdGggdG8gcmVuYW1lIHRoZSBmaWxlIHRvLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lU2FmZShhcHA6IEFwcCwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBvbGRQYXRoT3JGaWxlKTtcblxuICBpZiAoZmlsZS5wYXRoID09PSBuZXdQYXRoKSB7XG4gICAgcmV0dXJuIG5ld1BhdGg7XG4gIH1cblxuICBjb25zdCBuZXdEaXIgPSBkaXJuYW1lKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3RGlyKTtcblxuICBjb25zdCBleHQgPSBleHRuYW1lKG5ld1BhdGgpO1xuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIGJhc2VuYW1lKG5ld1BhdGgsIGV4dCkpLCBleHQpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhuZXdBdmFpbGFibGVQYXRoKSB8fCBhd2FpdCBhcHAudmF1bHQuZXhpc3RzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
309
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBWYXVsdFxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaXN0ZWRGaWxlcyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgTm90aWNlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFJldHJ5T3B0aW9ucyB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXQgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQge1xuICBwcmludEVycm9yLFxuICB0aHJvd0V4cHJlc3Npb25cbn0gZnJvbSAnLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi4vT2JqZWN0LnRzJztcbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luXG59IGZyb20gJy4uL1BhdGgudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGF0aE9yQWJzdHJhY3RGaWxlLFxuICBQYXRoT3JGaWxlLFxuICBQYXRoT3JGb2xkZXJcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGhcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlIH0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIHN0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVuZCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBlbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIGNvbnRlbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgb2xkQ29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICBuZXdDb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIE1hcmtkb3duIGZpbGVzIGZyb20gdGhlIGFwcCdzIHZhdWx0IGFuZCBzb3J0cyB0aGVtIGFscGhhYmV0aWNhbGx5IGJ5IHRoZWlyIGZpbGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIE1hcmtkb3duIGZpbGVzIHNvcnRlZCBieSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93bkZpbGVzU29ydGVkKGFwcDogQXBwKTogVEZpbGVbXSB7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIGZpbGUgd2l0aCByZXRyeSBsb2dpYywgdXBkYXRpbmcgaXRzIGNvbnRlbnQgYmFzZWQgb24gYSBwcm92aWRlZCB2YWx1ZSBvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLCB0eXBpY2FsbHkgdXNlZCBmb3IgYWNjZXNzaW5nIHRoZSB2YXVsdC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBiZSBwcm9jZXNzZWQuIEl0IGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggb3IgYSBmaWxlIG9iamVjdC5cbiAqIEBwYXJhbSBuZXdDb250ZW50UHJvdmlkZXIgLSBBIHZhbHVlIHByb3ZpZGVyIHRoYXQgcmV0dXJucyB0aGUgbmV3IGNvbnRlbnQgYmFzZWQgb24gdGhlIG9sZCBjb250ZW50IG9mIHRoZSBmaWxlLlxuICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICogSWYgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IHNob3VsZCByZXR1cm4gYG51bGxgIGlmIHRoZSBwcm9jZXNzIHNob3VsZCBiZSByZXRyaWVkLlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsLiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHJldHJ5aW5nIHRoZSBwcm9jZXNzLiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHQgb3B0aW9ucyB3aWxsIGJlIHVzZWQuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHByb2Nlc3MgZmFpbHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV0cmllcyBvciB0aW1lb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1dpdGhSZXRyeShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbmV3Q29udGVudFByb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPHN0cmluZyB8IG51bGwsIFtzdHJpbmddPiwgcmV0cnlPcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiA2MDAwMCB9O1xuICBjb25zdCBvdmVycmlkZGVuT3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvbGRDb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIG9sZENvbnRlbnQpO1xuICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBhd2FpdCBhcHAudmF1bHQucHJvY2VzcyhmaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IGhhcyBjaGFuZ2VkIHNpbmNlIGl0IHdhcyByZWFkLiBSZXRyeWluZy4uLicsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH0sIG92ZXJyaWRkZW5PcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgb3BlcmF0aW9uIHNob3VsZCByZXRyeSBvbiBmYWlsdXJlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPiwgcmV0cnlPcHRpb25zOiBQYXJ0aWFsPFJldHJ5T3B0aW9ucz4gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiA2MDAwMCB9O1xuICBjb25zdCBvdmVycmlkZGVuT3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIHN0YXJ0SW5kZXg6IGNoYW5nZS5zdGFydEluZGV4LFxuICAgICAgICAgIGVuZEluZGV4OiBjaGFuZ2UuZW5kSW5kZXgsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aChwYXRoT3JGaWxlKSxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGFjdHVhbENvbnRlbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpO1xuXG4gICAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gICAgY2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignQ2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gY2hhbmdlc1tpIC0gMV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignUHJldmlvdXMgY2hhbmdlIG5vdCBmb3VuZCcpKTtcbiAgICAgIGlmIChwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignT3ZlcmxhcHBpbmcgY2hhbmdlcycsIHtcbiAgICAgICAgICBwcmV2aW91c0NoYW5nZSxcbiAgICAgICAgICBjaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdDb250ZW50ID0gJyc7XG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH1cblxuICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXdDb250ZW50O1xuICB9LCBvdmVycmlkZGVuT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhYnN0cmFjdCBmaWxlIHNhZmVseSBmcm9tIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIGRlbGV0ZS5cbiAqIEBwYXJhbSBkZWxldGVkTm90ZVBhdGggLSBPcHRpb25hbC4gVGhlIHBhdGggb2YgdGhlIG5vdGUgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlbW92YWwuXG4gKiBAcGFyYW0gc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgYSBub3RpY2Ugd2lsbCBiZSBzaG93biBmb3IgZWFjaCBhdHRhY2htZW50IHRoYXQgaXMgc3RpbGwgdXNlZCBieSBvdGhlciBub3Rlcy5cbiAqIEBwYXJhbSBzaG91bGREZWxldGVFbXB0eUZvbGRlcnMgLSBPcHRpb25hbC4gSWYgYHRydWVgLCBlbXB0eSBmb2xkZXJzIHdpbGwgYmUgZGVsZXRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlbW92YWwgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIGRlbGV0ZWROb3RlUGF0aD86IHN0cmluZywgc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzPzogYm9vbGVhbiwgc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzPzogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgaWYgKCFmaWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGNhbkRlbGV0ZSA9IGZpbGUgaW5zdGFuY2VvZiBURmlsZSB8fCAoc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzID8/IHRydWUpO1xuXG4gIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIGZpbGUpO1xuICAgIGlmIChkZWxldGVkTm90ZVBhdGgpIHtcbiAgICAgIGJhY2tsaW5rcy5yZW1vdmVLZXkoZGVsZXRlZE5vdGVQYXRoKTtcbiAgICB9XG4gICAgaWYgKGJhY2tsaW5rcy5jb3VudCgpICE9PSAwKSB7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKSB7XG4gICAgICAgIG5ldyBOb3RpY2UoYEF0dGFjaG1lbnQgJHtmaWxlLnBhdGh9IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuIEl0IHdpbGwgbm90IGJlIGRlbGV0ZWQuYCk7XG4gICAgICB9XG4gICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpbGUuY2hpbGRyZW4pIHtcbiAgICAgIGNhbkRlbGV0ZSAmJj0gYXdhaXQgZGVsZXRlU2FmZShhcHAsIGNoaWxkLnBhdGgsIGRlbGV0ZWROb3RlUGF0aCwgc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKTtcbiAgICB9XG5cbiAgICBjYW5EZWxldGUgJiY9IGF3YWl0IGlzRW1wdHlGb2xkZXIoYXBwLCBmaWxlKTtcbiAgfVxuXG4gIGlmIChjYW5EZWxldGUpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhmaWxlLnBhdGgpKSB7XG4gICAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7ZmlsZS5wYXRofWAsIHsgY2F1c2U6IGUgfSkpO1xuICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FuRGVsZXRlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAqIEB0aHJvd3MgSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNyZWF0aW5nIHRoZSBmb2xkZXIgYW5kIGl0IHN0aWxsIGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGb2xkZXJTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBsaXN0LlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBgTGlzdGVkRmlsZXNgIG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKHBhdGhPckZvbGRlcik7XG4gIGNvbnN0IEVNUFRZID0geyBmaWxlczogW10sIGZvbGRlcnM6IFtdIH07XG5cbiAgaWYgKChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5zdGF0KHBhdGgpKT8udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5saXN0KHBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgZm9sZGVyIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIHN0YXJ0IHJlbW92aW5nIGVtcHR5IGhpZXJhcmNoeSBmcm9tLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZW1wdHkgaGllcmFyY2h5IGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBwYXRoT3JGb2xkZXIpO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICBpZiAoIWF3YWl0IGlzRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGZvbGRlci5wYXJlbnQ7XG4gICAgYXdhaXQgZGVsZXRlU2FmZShhcHAsIGZvbGRlci5wYXRoKTtcbiAgICBmb2xkZXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBEbyBub3RoaW5nXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGgpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZmlsZSk7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlciBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRm9sZGVyKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIHBhdGgpO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZGlyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBkaXJQYXRoKTtcblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuXG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXRoKTtcblxuICBmb2xkZXIgPSBnZXRGb2xkZXIoYXBwLCBwYXRoKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZm9sZGVyLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUoZm9sZGVyKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBpcyBlbXB0eS5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9sZGVyIGlzIGVtcHR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBsaXN0U2FmZShhcHAsIGdldFBhdGgocGF0aE9yRm9sZGVyKSk7XG4gIHJldHVybiBsaXN0ZWRGaWxlcy5maWxlcy5sZW5ndGggPT09IDAgJiYgbGlzdGVkRmlsZXMuZm9sZGVycy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogUmVuYW1lcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqIElmIHRoZSBuZXcgcGF0aCBhbHJlYWR5IGV4aXN0cywgdGhlIGZpbGUgd2lsbCBiZSByZW5hbWVkIHRvIGFuIGF2YWlsYWJsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIHJlbmFtZS5cbiAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgZmlsZSB0by5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZVNhZmUoYXBwOiBBcHAsIG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgb2xkUGF0aE9yRmlsZSk7XG5cbiAgaWYgKGZpbGUucGF0aCA9PT0gbmV3UGF0aCkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3UGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIG5ld1BhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhuZXdBdmFpbGFibGVQYXRoKSB8fCBhd2FpdCBhcHAudmF1bHQuZXhpc3RzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbi8qKlxuICogQ29waWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIGNvcHkuXG4gKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIHRvLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBjb3BpZWQgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlTYWZlKGFwcDogQXBwLCBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIG9sZFBhdGhPckZpbGUpO1xuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIEdldHMgYW4gYXZhaWxhYmxlIHBhdGggZm9yIGEgZmlsZSBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgcGF0aCBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleHQgPSBleHRuYW1lKHBhdGgpO1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihkaXJuYW1lKHBh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
@@ -6,9 +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';
10
- import type { PathOrFile } from './TFile.ts';
11
- import type { PathOrFolder } from './TFolder.ts';
9
+ import type { PathOrAbstractFile, PathOrFile, PathOrFolder } from './FileSystem.ts';
12
10
  /**
13
11
  * Represents a file change in the Vault.
14
12
  */
@@ -130,3 +128,20 @@ export declare function isEmptyFolder(app: App, pathOrFolder: PathOrFolder): Pro
130
128
  * @returns A promise that resolves to the new path of the file.
131
129
  */
132
130
  export declare function renameSafe(app: App, oldPathOrFile: PathOrFile, newPath: string): Promise<string>;
131
+ /**
132
+ * Copies a file safely in the vault.
133
+ *
134
+ * @param app - The application instance.
135
+ * @param oldPathOrFile - The old path or file to copy.
136
+ * @param newPath - The new path to copy the file to.
137
+ * @returns A promise that resolves to the new path of the copied file.
138
+ */
139
+ export declare function copySafe(app: App, oldPathOrFile: PathOrFile, newPath: string): Promise<string>;
140
+ /**
141
+ * Gets an available path for a file in the vault.
142
+ *
143
+ * @param app - The application instance.
144
+ * @param path - The path of the file to get an available path for.
145
+ * @returns The available path for the file.
146
+ */
147
+ export declare function getAvailablePath(app: App, path: string): string;
@@ -42,6 +42,7 @@ __export(obsidian_exports, {
42
42
  ChainedPromise: () => ChainedPromise,
43
43
  Dataview: () => Dataview,
44
44
  DataviewLink: () => DataviewLink,
45
+ FileSystem: () => FileSystem,
45
46
  FrontMatter: () => FrontMatter,
46
47
  Link: () => Link,
47
48
  Logger: () => Logger,
@@ -52,9 +53,6 @@ __export(obsidian_exports, {
52
53
  Plugin: () => Plugin,
53
54
  RenameDeleteHandler: () => RenameDeleteHandler,
54
55
  ResourceUrl: () => ResourceUrl,
55
- TAbstractFile: () => TAbstractFile,
56
- TFile: () => TFile,
57
- TFolder: () => TFolder,
58
56
  Vault: () => Vault
59
57
  });
60
58
  module.exports = __toCommonJS(obsidian_exports);
@@ -65,6 +63,7 @@ var Callout = __toESM(require('./Callout.cjs'), 1);
65
63
  var ChainedPromise = __toESM(require('./ChainedPromise.cjs'), 1);
66
64
  var Dataview = __toESM(require('./Dataview.cjs'), 1);
67
65
  var DataviewLink = __toESM(require('./DataviewLink.cjs'), 1);
66
+ var FileSystem = __toESM(require('./FileSystem.cjs'), 1);
68
67
  var FrontMatter = __toESM(require('./FrontMatter.cjs'), 1);
69
68
  var Link = __toESM(require('./Link.cjs'), 1);
70
69
  var Logger = __toESM(require('./Logger.cjs'), 1);
@@ -75,9 +74,6 @@ var ObsidianSettings = __toESM(require('./ObsidianSettings.cjs'), 1);
75
74
  var Plugin = __toESM(require('./Plugin/index.cjs'), 1);
76
75
  var RenameDeleteHandler = __toESM(require('./RenameDeleteHandler.cjs'), 1);
77
76
  var ResourceUrl = __toESM(require('./ResourceUrl.cjs'), 1);
78
- var TAbstractFile = __toESM(require('./TAbstractFile.cjs'), 1);
79
- var TFile = __toESM(require('./TFile.cjs'), 1);
80
- var TFolder = __toESM(require('./TFolder.cjs'), 1);
81
77
  var Vault = __toESM(require('./Vault.cjs'), 1);
82
78
  var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
83
79
  if (typeof __filename !== "string") {
@@ -99,6 +95,7 @@ var __process = globalThis["process"] ?? {
99
95
  ChainedPromise,
100
96
  Dataview,
101
97
  DataviewLink,
98
+ FileSystem,
102
99
  FrontMatter,
103
100
  Link,
104
101
  Logger,
@@ -109,9 +106,6 @@ var __process = globalThis["process"] ?? {
109
106
  Plugin,
110
107
  RenameDeleteHandler,
111
108
  ResourceUrl,
112
- TAbstractFile,
113
- TFile,
114
- TFolder,
115
109
  Vault
116
110
  });
117
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgQXBwIGZyb20gJy4vQXBwLnRzJztcbmV4cG9ydCAqIGFzIEF0dGFjaG1lbnRQYXRoIGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuZXhwb3J0ICogYXMgQmFja2xpbmsgZnJvbSAnLi9CYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyBDYWxsb3V0IGZyb20gJy4vQ2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyBDaGFpbmVkUHJvbWlzZSBmcm9tICcuL0NoYWluZWRQcm9taXNlLnRzJztcbmV4cG9ydCAqIGFzIERhdGF2aWV3IGZyb20gJy4vRGF0YXZpZXcudHMnO1xuZXhwb3J0ICogYXMgRGF0YXZpZXdMaW5rIGZyb20gJy4vRGF0YXZpZXdMaW5rLnRzJztcbmV4cG9ydCAqIGFzIEZyb250TWF0dGVyIGZyb20gJy4vRnJvbnRNYXR0ZXIudHMnO1xuZXhwb3J0ICogYXMgTGluayBmcm9tICcuL0xpbmsudHMnO1xuZXhwb3J0ICogYXMgTG9nZ2VyIGZyb20gJy4vTG9nZ2VyLnRzJztcbmV4cG9ydCAqIGFzIE1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIGZyb20gJy4vTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgTWV0YWRhdGFDYWNoZSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuZXhwb3J0ICogYXMgTW9kYWwgZnJvbSAnLi9Nb2RhbC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBPYnNpZGlhblNldHRpbmdzIGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyBQbHVnaW4gZnJvbSAnLi9QbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUmVuYW1lRGVsZXRlSGFuZGxlciBmcm9tICcuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgUmVzb3VyY2VVcmwgZnJvbSAnLi9SZXNvdXJjZVVybC50cyc7XG5leHBvcnQgKiBhcyBUQWJzdHJhY3RGaWxlIGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5leHBvcnQgKiBhcyBURmlsZSBmcm9tICcuL1RGaWxlLnRzJztcbmV4cG9ydCAqIGFzIFRGb2xkZXIgZnJvbSAnLi9URm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzIFZhdWx0IGZyb20gJy4vVmF1bHQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQXFCO0FBQ3JCLHFCQUFnQztBQUNoQyxlQUEwQjtBQUMxQixjQUF5QjtBQUN6QixxQkFBZ0M7QUFDaEMsZUFBMEI7QUFDMUIsbUJBQThCO0FBQzlCLGtCQUE2QjtBQUM3QixXQUFzQjtBQUN0QixhQUF3QjtBQUN4QixpQ0FBNEM7QUFDNUMsb0JBQStCO0FBQy9CLFlBQXVCO0FBQ3ZCLHVCQUFrQztBQUNsQyxhQUF3QjtBQUN4QiwwQkFBcUM7QUFDckMsa0JBQTZCO0FBQzdCLG9CQUErQjtBQUMvQixZQUF1QjtBQUN2QixjQUF5QjtBQUN6QixZQUF1QjtBQTVCdkIsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkOyIsCiAgIm5hbWVzIjogW10KfQo=
111
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgQXBwIGZyb20gJy4vQXBwLnRzJztcbmV4cG9ydCAqIGFzIEF0dGFjaG1lbnRQYXRoIGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuZXhwb3J0ICogYXMgQmFja2xpbmsgZnJvbSAnLi9CYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyBDYWxsb3V0IGZyb20gJy4vQ2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyBDaGFpbmVkUHJvbWlzZSBmcm9tICcuL0NoYWluZWRQcm9taXNlLnRzJztcbmV4cG9ydCAqIGFzIERhdGF2aWV3IGZyb20gJy4vRGF0YXZpZXcudHMnO1xuZXhwb3J0ICogYXMgRGF0YXZpZXdMaW5rIGZyb20gJy4vRGF0YXZpZXdMaW5rLnRzJztcbmV4cG9ydCAqIGFzIEZpbGVTeXN0ZW0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmV4cG9ydCAqIGFzIEZyb250TWF0dGVyIGZyb20gJy4vRnJvbnRNYXR0ZXIudHMnO1xuZXhwb3J0ICogYXMgTGluayBmcm9tICcuL0xpbmsudHMnO1xuZXhwb3J0ICogYXMgTG9nZ2VyIGZyb20gJy4vTG9nZ2VyLnRzJztcbmV4cG9ydCAqIGFzIE1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIGZyb20gJy4vTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgTWV0YWRhdGFDYWNoZSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuZXhwb3J0ICogYXMgTW9kYWwgZnJvbSAnLi9Nb2RhbC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBPYnNpZGlhblNldHRpbmdzIGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyBQbHVnaW4gZnJvbSAnLi9QbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUmVuYW1lRGVsZXRlSGFuZGxlciBmcm9tICcuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgUmVzb3VyY2VVcmwgZnJvbSAnLi9SZXNvdXJjZVVybC50cyc7XG5leHBvcnQgKiBhcyBWYXVsdCBmcm9tICcuL1ZhdWx0LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQXFCO0FBQ3JCLHFCQUFnQztBQUNoQyxlQUEwQjtBQUMxQixjQUF5QjtBQUN6QixxQkFBZ0M7QUFDaEMsZUFBMEI7QUFDMUIsbUJBQThCO0FBQzlCLGlCQUE0QjtBQUM1QixrQkFBNkI7QUFDN0IsV0FBc0I7QUFDdEIsYUFBd0I7QUFDeEIsaUNBQTRDO0FBQzVDLG9CQUErQjtBQUMvQixZQUF1QjtBQUN2Qix1QkFBa0M7QUFDbEMsYUFBd0I7QUFDeEIsMEJBQXFDO0FBQ3JDLGtCQUE2QjtBQUM3QixZQUF1QjtBQTFCdkIsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,6 +5,7 @@ export * as Callout from './Callout.ts';
5
5
  export * as ChainedPromise from './ChainedPromise.ts';
6
6
  export * as Dataview from './Dataview.ts';
7
7
  export * as DataviewLink from './DataviewLink.ts';
8
+ export * as FileSystem from './FileSystem.ts';
8
9
  export * as FrontMatter from './FrontMatter.ts';
9
10
  export * as Link from './Link.ts';
10
11
  export * as Logger from './Logger.ts';
@@ -15,7 +16,4 @@ export * as ObsidianSettings from './ObsidianSettings.ts';
15
16
  export * as Plugin from './Plugin/index.ts';
16
17
  export * as RenameDeleteHandler from './RenameDeleteHandler.ts';
17
18
  export * as ResourceUrl from './ResourceUrl.ts';
18
- export * as TAbstractFile from './TAbstractFile.ts';
19
- export * as TFile from './TFile.ts';
20
- export * as TFolder from './TFolder.ts';
21
19
  export * as Vault from './Vault.ts';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "3.27.0",
3
+ "version": "3.28.1",
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",
@@ -1,113 +0,0 @@
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
- (function patchRequireEsmDefault(){const __require=require;require=Object.assign(id=>{const module=__require(id);return module.__esModule&&module.default?module.default:module},__require)})()
7
-
8
- "use strict";
9
- var __defProp = Object.defineProperty;
10
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
- var __getOwnPropNames = Object.getOwnPropertyNames;
12
- var __hasOwnProp = Object.prototype.hasOwnProperty;
13
- var __export = (target, all) => {
14
- for (var name in all)
15
- __defProp(target, name, { get: all[name], enumerable: true });
16
- };
17
- var __copyProps = (to, from, except, desc) => {
18
- if (from && typeof from === "object" || typeof from === "function") {
19
- for (let key of __getOwnPropNames(from))
20
- if (!__hasOwnProp.call(to, key) && key !== except)
21
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
- }
23
- return to;
24
- };
25
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
- var TAbstractFile_exports = {};
27
- __export(TAbstractFile_exports, {
28
- CANVAS_FILE_EXTENSION: () => CANVAS_FILE_EXTENSION,
29
- MARKDOWN_FILE_EXTENSION: () => MARKDOWN_FILE_EXTENSION,
30
- checkExtension: () => checkExtension,
31
- getAbstractFile: () => getAbstractFile,
32
- getAbstractFileOrNull: () => getAbstractFileOrNull,
33
- getPath: () => getPath,
34
- isCanvasFile: () => isCanvasFile,
35
- isFile: () => isFile,
36
- isFolder: () => isFolder,
37
- isMarkdownFile: () => isMarkdownFile,
38
- isNote: () => isNote,
39
- trimMarkdownExtension: () => trimMarkdownExtension
40
- });
41
- module.exports = __toCommonJS(TAbstractFile_exports);
42
- var import_obsidian = require('obsidian');
43
- var import_Path = require('../Path.cjs');
44
- var import_String = require('../String.cjs');
45
- var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
46
- if (typeof __filename !== "string") {
47
- return new URL(window.location.href);
48
- }
49
- return require('node:url').pathToFileURL(__filename);
50
- })();
51
- var __process = globalThis["process"] ?? {
52
- "cwd": () => "/",
53
- "env": {},
54
- "platform": "android"
55
- };
56
- const MARKDOWN_FILE_EXTENSION = "md";
57
- const CANVAS_FILE_EXTENSION = "canvas";
58
- function getAbstractFile(app, pathOrFile) {
59
- const file = getAbstractFileOrNull(app, pathOrFile);
60
- if (!file) {
61
- throw new Error(`Abstract file not found: ${pathOrFile}`);
62
- }
63
- return file;
64
- }
65
- function getAbstractFileOrNull(app, pathOrFile) {
66
- return pathOrFile instanceof import_obsidian.TAbstractFile ? pathOrFile : app.vault.getAbstractFileByPath(pathOrFile);
67
- }
68
- function isNote(file) {
69
- return isMarkdownFile(file) || isCanvasFile(file);
70
- }
71
- function isMarkdownFile(pathOrFile) {
72
- return checkExtension(pathOrFile, MARKDOWN_FILE_EXTENSION);
73
- }
74
- function isCanvasFile(pathOrFile) {
75
- return checkExtension(pathOrFile, CANVAS_FILE_EXTENSION);
76
- }
77
- function checkExtension(pathOrFile, extension) {
78
- if (pathOrFile === null) {
79
- return false;
80
- }
81
- return (0, import_Path.extname)(getPath(pathOrFile)).toLowerCase().slice(1) === extension.toLowerCase();
82
- }
83
- function trimMarkdownExtension(file) {
84
- if (!isMarkdownFile(file)) {
85
- return file.path;
86
- }
87
- return (0, import_String.trimEnd)(file.path, "." + MARKDOWN_FILE_EXTENSION);
88
- }
89
- function isFile(file) {
90
- return file instanceof import_obsidian.TFile;
91
- }
92
- function isFolder(file) {
93
- return file instanceof import_obsidian.TFolder;
94
- }
95
- function getPath(pathOrFile) {
96
- return pathOrFile instanceof import_obsidian.TAbstractFile ? pathOrFile.path : pathOrFile;
97
- }
98
- // Annotate the CommonJS export names for ESM import in node:
99
- 0 && (module.exports = {
100
- CANVAS_FILE_EXTENSION,
101
- MARKDOWN_FILE_EXTENSION,
102
- checkExtension,
103
- getAbstractFile,
104
- getAbstractFileOrNull,
105
- getPath,
106
- isCanvasFile,
107
- isFile,
108
- isFolder,
109
- isMarkdownFile,
110
- isNote,
111
- trimMarkdownExtension
112
- });
113
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1RBYnN0cmFjdEZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFRBYnN0cmFjdEZpbGVcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYWJzdHJhY3QgZmlsZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGV4dG5hbWUgfSBmcm9tICcuLi9QYXRoLnRzJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuXG4vKipcbiAqIFRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgTWFya2Rvd24gZmlsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA9ICdtZCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZmlsZSBleHRlbnNpb24gZm9yIGNhbnZhcyBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENBTlZBU19GSUxFX0VYVEVOU0lPTiA9ICdjYW52YXMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXRoIG9yIGFuIGluc3RhbmNlIG9mIFRBYnN0cmFjdEZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhPckFic3RyYWN0RmlsZSA9IHN0cmluZyB8IFRBYnN0cmFjdEZpbGU7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBUQWJzdHJhY3RGaWxlIG9iamVjdCBmb3IgdGhlIGdpdmVuIHBhdGggb3IgYWJzdHJhY3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIEFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZXRyaWV2ZSB0aGUgVEFic3RyYWN0RmlsZSBmb3IuXG4gKiBAcmV0dXJucyBUaGUgVEFic3RyYWN0RmlsZSBvYmplY3QuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlKTogVEFic3RyYWN0RmlsZSB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoYXBwLCBwYXRoT3JGaWxlKTtcbiAgaWYgKCFmaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBYnN0cmFjdCBmaWxlIG5vdCBmb3VuZDogJHtwYXRoT3JGaWxlIGFzIHN0cmluZ31gKTtcbiAgfVxuXG4gIHJldHVybiBmaWxlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBpbnN0YW5jZSBvZiBUQWJzdHJhY3RGaWxlIG9yIG51bGwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGggb3IgYWJzdHJhY3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJldHJpZXZlLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIFRBYnN0cmFjdEZpbGUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBUQWJzdHJhY3RGaWxlIHwgbnVsbCB7XG4gIHJldHVybiBwYXRoT3JGaWxlIGluc3RhbmNlb2YgVEFic3RyYWN0RmlsZSA/IHBhdGhPckZpbGUgOiBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIG5vdGUuXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIG5vdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdGUoZmlsZTogVEFic3RyYWN0RmlsZSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTWFya2Rvd25GaWxlKGZpbGUpIHx8IGlzQ2FudmFzRmlsZShmaWxlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBNYXJrZG93biBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGlzIGEgTWFya2Rvd24gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoZWNrRXh0ZW5zaW9uKHBhdGhPckZpbGUsIE1BUktET1dOX0ZJTEVfRVhURU5TSU9OKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBjYW52YXMgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIGNhbnZhcyBmaWxlIG9yIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUgfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlLCBDQU5WQVNfRklMRV9FWFRFTlNJT04pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gVGhlIGV4dGVuc2lvbiB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUgfCBudWxsLCBleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAocGF0aE9yRmlsZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZXh0bmFtZShnZXRQYXRoKHBhdGhPckZpbGUpKS50b0xvd2VyQ2FzZSgpLnNsaWNlKDEpID09PSBleHRlbnNpb24udG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgbWFya2Rvd24gZXh0ZW5zaW9uIGZyb20gdGhlIGZpbGUgcGF0aCBpZiB0aGUgZmlsZSBpcyBhIG1hcmtkb3duIGZpbGUuXG4gKiBJZiB0aGUgZmlsZSBpcyBub3QgYSBtYXJrZG93biBmaWxlLCB0aGUgb3JpZ2luYWwgZmlsZSBwYXRoIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gdHJpbSB0aGUgbWFya2Rvd24gZXh0ZW5zaW9uIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBwYXRoIHdpdGggdGhlIG1hcmtkb3duIGV4dGVuc2lvbiB0cmltbWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiBzdHJpbmcge1xuICBpZiAoIWlzTWFya2Rvd25GaWxlKGZpbGUpKSB7XG4gICAgcmV0dXJuIGZpbGUucGF0aDtcbiAgfVxuXG4gIHJldHVybiB0cmltRW5kKGZpbGUucGF0aCwgJy4nICsgTUFSS0RPV05fRklMRV9FWFRFTlNJT04pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBpbnN0YW5jZSBvZiBURmlsZS5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhbiBpbnN0YW5jZSBvZiBURmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShmaWxlOiBUQWJzdHJhY3RGaWxlIHwgbnVsbCk6IGZpbGUgaXMgVEZpbGUge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIGlzIGEgZm9sZGVyLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm9sZGVyKGZpbGU6IFRBYnN0cmFjdEZpbGUgfCBudWxsKTogZmlsZSBpcyBURm9sZGVyIHtcbiAgcmV0dXJuIGZpbGUgaW5zdGFuY2VvZiBURm9sZGVyO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIGdpdmVuIGBwYXRoT3JGaWxlYC5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgYHBhdGhPckZpbGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aE9yRmlsZSBpbnN0YW5jZW9mIFRBYnN0cmFjdEZpbGUgPyBwYXRoT3JGaWxlLnBhdGggOiBwYXRoT3JGaWxlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0Esc0JBS087QUFFUCxrQkFBd0I7QUFDeEIsb0JBQXdCO0FBbkJ4QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFtQk8sTUFBTSwwQkFBMEI7QUFLaEMsTUFBTSx3QkFBd0I7QUFlOUIsU0FBUyxnQkFBZ0IsS0FBVSxZQUErQztBQUN2RixRQUFNLE9BQU8sc0JBQXNCLEtBQUssVUFBVTtBQUNsRCxNQUFJLENBQUMsTUFBTTtBQUNULFVBQU0sSUFBSSxNQUFNLDRCQUE0QixVQUFvQixFQUFFO0FBQUEsRUFDcEU7QUFFQSxTQUFPO0FBQ1Q7QUFTTyxTQUFTLHNCQUFzQixLQUFVLFlBQXNEO0FBQ3BHLFNBQU8sc0JBQXNCLGdDQUFnQixhQUFhLElBQUksTUFBTSxzQkFBc0IsVUFBVTtBQUN0RztBQU9PLFNBQVMsT0FBTyxNQUFxQztBQUMxRCxTQUFPLGVBQWUsSUFBSSxLQUFLLGFBQWEsSUFBSTtBQUNsRDtBQVFPLFNBQVMsZUFBZSxZQUFnRDtBQUM3RSxTQUFPLGVBQWUsWUFBWSx1QkFBdUI7QUFDM0Q7QUFRTyxTQUFTLGFBQWEsWUFBZ0Q7QUFDM0UsU0FBTyxlQUFlLFlBQVkscUJBQXFCO0FBQ3pEO0FBU08sU0FBUyxlQUFlLFlBQXVDLFdBQTRCO0FBQ2hHLE1BQUksZUFBZSxNQUFNO0FBQ3ZCLFdBQU87QUFBQSxFQUNUO0FBQ0EsYUFBTyxxQkFBUSxRQUFRLFVBQVUsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxVQUFVLFlBQVk7QUFDdkY7QUFTTyxTQUFTLHNCQUFzQixNQUE2QjtBQUNqRSxNQUFJLENBQUMsZUFBZSxJQUFJLEdBQUc7QUFDekIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUVBLGFBQU8sdUJBQVEsS0FBSyxNQUFNLE1BQU0sdUJBQXVCO0FBQ3pEO0FBUU8sU0FBUyxPQUFPLE1BQTJDO0FBQ2hFLFNBQU8sZ0JBQWdCO0FBQ3pCO0FBUU8sU0FBUyxTQUFTLE1BQTZDO0FBQ3BFLFNBQU8sZ0JBQWdCO0FBQ3pCO0FBUU8sU0FBUyxRQUFRLFlBQXdDO0FBQzlELFNBQU8sc0JBQXNCLGdDQUFnQixXQUFXLE9BQU87QUFDakU7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,91 +0,0 @@
1
- /**
2
- * @packageDocumentation TAbstractFile
3
- * This module provides utility functions for working with abstract files in Obsidian.
4
- */
5
- import { App, TAbstractFile, TFile, TFolder } from 'obsidian';
6
- /**
7
- * The file extension for Markdown files.
8
- */
9
- export declare const MARKDOWN_FILE_EXTENSION = "md";
10
- /**
11
- * Represents the file extension for canvas files.
12
- */
13
- export declare const CANVAS_FILE_EXTENSION = "canvas";
14
- /**
15
- * Represents a path or an instance of TAbstractFile.
16
- */
17
- export type PathOrAbstractFile = string | TAbstractFile;
18
- /**
19
- * Retrieves the TAbstractFile object for the given path or abstract file.
20
- *
21
- * @param app - The App instance.
22
- * @param pathOrFile - The path or abstract file to retrieve the TAbstractFile for.
23
- * @returns The TAbstractFile object.
24
- * @throws Error if the abstract file is not found.
25
- */
26
- export declare function getAbstractFile(app: App, pathOrFile: PathOrAbstractFile): TAbstractFile;
27
- /**
28
- * Retrieves an instance of TAbstractFile or null based on the provided path or abstract file.
29
- *
30
- * @param app - The application instance.
31
- * @param pathOrFile - The path or abstract file to retrieve.
32
- * @returns The instance of TAbstractFile if found, otherwise null.
33
- */
34
- export declare function getAbstractFileOrNull(app: App, pathOrFile: PathOrAbstractFile): TAbstractFile | null;
35
- /**
36
- * Checks if the given file is a note.
37
- * @param file - The file to check.
38
- * @returns A boolean indicating whether the file is a note.
39
- */
40
- export declare function isNote(file: TAbstractFile | null): boolean;
41
- /**
42
- * Checks if the given file is a Markdown file.
43
- *
44
- * @param pathOrFile - The file to check.
45
- * @returns A boolean indicating whether the file is a Markdown file.
46
- */
47
- export declare function isMarkdownFile(pathOrFile: PathOrAbstractFile | null): boolean;
48
- /**
49
- * Checks if the given file is a canvas file.
50
- *
51
- * @param pathOrFile - The file to check.
52
- * @returns A boolean indicating whether the file is a canvas file or not.
53
- */
54
- export declare function isCanvasFile(pathOrFile: PathOrAbstractFile | null): boolean;
55
- /**
56
- * Checks if the given path or file has the specified extension.
57
- *
58
- * @param pathOrFile - The path or abstract file to check.
59
- * @param extension - The extension to compare against.
60
- * @returns Returns `true` if the path or file has the specified extension, `false` otherwise.
61
- */
62
- export declare function checkExtension(pathOrFile: PathOrAbstractFile | null, extension: string): boolean;
63
- /**
64
- * Trims the markdown extension from the file path if the file is a markdown file.
65
- * If the file is not a markdown file, the original file path is returned.
66
- *
67
- * @param file - The file to trim the markdown extension from.
68
- * @returns The file path with the markdown extension trimmed.
69
- */
70
- export declare function trimMarkdownExtension(file: TAbstractFile): string;
71
- /**
72
- * Checks if the given file is an instance of TFile.
73
- *
74
- * @param file - The file to check.
75
- * @returns A boolean indicating whether the file is an instance of TFile.
76
- */
77
- export declare function isFile(file: TAbstractFile | null): file is TFile;
78
- /**
79
- * Checks if the given file is a folder.
80
- *
81
- * @param file - The file to check.
82
- * @returns `true` if the file is a folder, `false` otherwise.
83
- */
84
- export declare function isFolder(file: TAbstractFile | null): file is TFolder;
85
- /**
86
- * Returns the path of the given `pathOrFile`.
87
- *
88
- * @param pathOrFile - The path or abstract file.
89
- * @returns The path of the `pathOrFile`.
90
- */
91
- export declare function getPath(pathOrFile: PathOrAbstractFile): string;