obsidian-dev-utils 3.30.0 → 3.31.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 +8 -0
- package/dist/lib/obsidian/Callout.cjs +2 -2
- package/dist/lib/obsidian/ChainedPromise.cjs +5 -5
- package/dist/lib/obsidian/ChainedPromise.d.ts +3 -2
- package/dist/lib/obsidian/FileSystem.cjs +3 -3
- package/dist/lib/obsidian/FileSystem.d.ts +5 -4
- package/dist/lib/obsidian/Link.cjs +5 -3
- package/dist/lib/obsidian/Link.d.ts +2 -2
- package/dist/lib/obsidian/Logger.cjs +1 -9
- package/dist/lib/obsidian/Logger.d.ts +2 -9
- package/dist/lib/obsidian/MetadataCache.cjs +5 -1
- package/dist/lib/obsidian/MetadataCache.d.ts +12 -0
- package/dist/lib/obsidian/Plugin/PluginBase.cjs +2 -2
- package/dist/lib/obsidian/RenameDeleteHandler.cjs +154 -151
- package/dist/lib/obsidian/Vault.cjs +5 -2
- package/package.json +1 -1
@@ -23,6 +23,18 @@ export declare function getCacheSafe(app: App, fileOrPath: PathOrFile, retryOpti
|
|
23
23
|
* @returns An array of reference caches representing the links.
|
24
24
|
*/
|
25
25
|
export declare function getAllLinks(cache: CachedMetadata): ReferenceCache[];
|
26
|
+
/**
|
27
|
+
* Wrapper for the getBacklinksForFile method that provides a safe overload.
|
28
|
+
*/
|
29
|
+
export interface GetBacklinksForFileSafeWrapper {
|
30
|
+
/**
|
31
|
+
* Retrieves the backlinks for a file safely.
|
32
|
+
*
|
33
|
+
* @param pathOrFile - The path or file object.
|
34
|
+
* @returns A promise that resolves to an array dictionary of backlinks.
|
35
|
+
*/
|
36
|
+
safe(pathOrFile: PathOrFile): Promise<CustomArrayDict<ReferenceCache>>;
|
37
|
+
}
|
26
38
|
/**
|
27
39
|
* Retrieves the backlinks for a file safely.
|
28
40
|
*
|
@@ -78,7 +78,7 @@ class PluginBase extends import_obsidian.Plugin {
|
|
78
78
|
this.register((0, import_Error.registerAsyncErrorEventHandler)(() => {
|
79
79
|
this.showNotice("An unhandled error occurred. Please check the console for more information.");
|
80
80
|
}));
|
81
|
-
(0, import_ChainedPromise.
|
81
|
+
(0, import_ChainedPromise.chain)(this.app, async () => {
|
82
82
|
await this.loadSettings();
|
83
83
|
const pluginSettingsTab = this.createPluginSettingsTab();
|
84
84
|
if (pluginSettingsTab) {
|
@@ -146,4 +146,4 @@ ${message}`);
|
|
146
146
|
0 && (module.exports = {
|
147
147
|
PluginBase
|
148
148
|
});
|
149
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5CYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/
|
149
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5CYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBQbHVnaW5CYXNlXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHByb3ZpZGluZyB1dGlsaXR5IG1ldGhvZHMgZm9yIHNldHRpbmdzIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNsYXNzIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2YgbWFuYWdpbmcgcGx1Z2luIHNldHRpbmdzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsIGFuZCBoYW5kbGluZyBlcnJvcnMuXG4gKiBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgbWV0aG9kcyB0byBjcmVhdGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgc2V0dGluZ3MgdGFicywgYW5kIGNvbXBsZXRlIHBsdWdpbi1zcGVjaWZpY1xuICogbG9hZGluZyB0YXNrcy5cbiAqL1xuXG5pbXBvcnQge1xuICBOb3RpY2UsXG4gIFBsdWdpbixcbiAgUGx1Z2luU2V0dGluZ1RhYlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVQcm9taXNlIH0gZnJvbSAnLi4vLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgY2hhaW4gfSBmcm9tICcuLi9DaGFpbmVkUHJvbWlzZS50cyc7XG5pbXBvcnQge1xuICBjbG9uZVBsdWdpblNldHRpbmdzLFxuICBsb2FkUGx1Z2luU2V0dGluZ3Ncbn0gZnJvbSAnLi9QbHVnaW5TZXR0aW5ncy50cyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgT2JzaWRpYW4gcGx1Z2lucyB3aXRoIGJ1aWx0LWluIHN1cHBvcnQgZm9yIHNldHRpbmdzIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBwbHVnaW4gc2V0dGluZ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luQmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBQbHVnaW4ge1xuICBwcml2YXRlIF9zZXR0aW5ncyE6IFBsdWdpblNldHRpbmdzO1xuICBwcml2YXRlIG5vdGljZT86IE5vdGljZTtcbiAgcHJpdmF0ZSBfYWJvcnRTaWduYWwhOiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgQWJvcnRTaWduYWwgdXNlZCBmb3IgYWJvcnRpbmcgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhYm9ydCBzaWduYWwuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgICByZXR1cm4gdGhpcy5fYWJvcnRTaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcGx1Z2luIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvcHkgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dGluZ3NDb3B5KCk6IFBsdWdpblNldHRpbmdzIHtcbiAgICByZXR1cm4gY2xvbmVQbHVnaW5TZXR0aW5ncyh0aGlzLmNyZWF0ZURlZmF1bHRQbHVnaW5TZXR0aW5ncy5iaW5kKHRoaXMpLCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNldHRpbmdzKCk6IFBsdWdpblNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZURlZmF1bHRQbHVnaW5TZXR0aW5ncygpOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBsdWdpbiBzZXR0aW5ncyB0YWIuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmdzIHRhYiBvciBudWxsIGlmIG5vdCBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVBsdWdpblNldHRpbmdzVGFiKCk6IFBsdWdpblNldHRpbmdUYWIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyKHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLnNob3dOb3RpY2UoJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgIH0pKTtcblxuICAgIGNoYWluKHRoaXMuYXBwLCBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ3NUYWIgPSB0aGlzLmNyZWF0ZVBsdWdpblNldHRpbmdzVGFiKCk7XG4gICAgICBpZiAocGx1Z2luU2V0dGluZ3NUYWIpIHtcbiAgICAgICAgdGhpcy5hZGRTZXR0aW5nVGFiKHBsdWdpblNldHRpbmdzVGFiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5fYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLm9ubG9hZENvbXBsZXRlKCk7XG4gICAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSh0aGlzLm9uTGF5b3V0UmVhZHkuYmluZCh0aGlzKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBsb2FkaW5nIGlzIGNvbXBsZXRlLiBUaGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gcGVyZm9ybVxuICAgKiBhbnkgYWRkaXRpb25hbCBzZXR1cCByZXF1aXJlZCBhZnRlciBsb2FkaW5nIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb3Igdm9pZCBpbmRpY2F0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBsb2FkIHByb2Nlc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25sb2FkQ29tcGxldGUoKTogTWF5YmVQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbGF5b3V0IGlzIHJlYWR5LiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0gYWN0aW9ucyBvbmNlXG4gICAqIHRoZSBsYXlvdXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvciB2b2lkIGluZGljYXRpbmcgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGxheW91dCBzZXR1cC5cbiAgICovXG4gIHByb3RlY3RlZCBvbkxheW91dFJlYWR5KCk6IE1heWJlUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tIHRoZSBzYXZlZCBkYXRhLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGEoKSBhcyB1bmtub3duO1xuICAgIHRoaXMuX3NldHRpbmdzID0gYXdhaXQgdGhpcy5wYXJzZVNldHRpbmdzKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgcHJvdmlkZWQgc2V0dGluZ3MgZGF0YSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIGBQbHVnaW5TZXR0aW5nc2AuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHJhdyBkYXRhIHRvIGJlIHBhcnNlZCBpbnRvIGBQbHVnaW5TZXR0aW5nc2AuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGBQbHVnaW5TZXR0aW5nc2Agb3IgdGhlIHNldHRpbmdzIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlU2V0dGluZ3MoZGF0YTogdW5rbm93bik6IE1heWJlUHJvbWlzZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiBsb2FkUGx1Z2luU2V0dGluZ3ModGhpcy5jcmVhdGVEZWZhdWx0UGx1Z2luU2V0dGluZ3MuYmluZCh0aGlzKSwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIG5ldyBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBuZXdTZXR0aW5ncyAtIFRoZSBuZXcgc2V0dGluZ3MgdG8gc2F2ZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmVTZXR0aW5ncyhuZXdTZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IGNsb25lUGx1Z2luU2V0dGluZ3ModGhpcy5jcmVhdGVEZWZhdWx0UGx1Z2luU2V0dGluZ3MuYmluZCh0aGlzKSwgbmV3U2V0dGluZ3MpO1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBub3RpY2UgbWVzc2FnZSB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3dOb3RpY2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubm90aWNlKSB7XG4gICAgICB0aGlzLm5vdGljZS5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpY2UgPSBuZXcgTm90aWNlKGAke3RoaXMubWFuaWZlc3QubmFtZX1cXG4ke21lc3NhZ2V9YCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsc0JBSU87QUFHUCxtQkFBK0M7QUFDL0MsNEJBQXNCO0FBQ3RCLDRCQUdPO0FBM0JQLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSTtBQUFDLE1BQUcsT0FBTyxlQUFhLFVBQVM7QUFBQyxXQUFPLElBQUksSUFBSSxPQUFPLFNBQVMsSUFBSTtBQUFBLEVBQUM7QUFBQyxTQUFPLFFBQVEsVUFBVSxFQUFFLGNBQWMsVUFBVTtBQUFDLEdBQUc7QUFDNUwsSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQTZCTyxNQUFlLG1CQUFrRCx1QkFBTztBQUFBLEVBQ3JFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPUixJQUFjLGNBQTJCO0FBQ3ZDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLGVBQStCO0FBQ3hDLGVBQU8sMkNBQW9CLEtBQUssNEJBQTRCLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUTtBQUFBLEVBQ3ZGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxXQUEyQjtBQUN2QyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFtQmdCLFNBQWU7QUFDN0IsU0FBSyxhQUFTLDZDQUErQixNQUFNO0FBQ2pELFdBQUssV0FBVyw2RUFBNkU7QUFBQSxJQUMvRixDQUFDLENBQUM7QUFFRixxQ0FBTSxLQUFLLEtBQUssWUFBMkI7QUFDekMsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxvQkFBb0IsS0FBSyx3QkFBd0I7QUFDdkQsVUFBSSxtQkFBbUI7QUFDckIsYUFBSyxjQUFjLGlCQUFpQjtBQUFBLE1BQ3RDO0FBRUEsWUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFDNUMsV0FBSyxlQUFlLGdCQUFnQjtBQUNwQyxXQUFLLFNBQVMsTUFBTTtBQUNsQix3QkFBZ0IsTUFBTTtBQUFBLE1BQ3hCLENBQUM7QUFDRCxZQUFNLEtBQUssZUFBZTtBQUMxQixXQUFLLElBQUksVUFBVSxjQUFjLEtBQUssY0FBYyxLQUFLLElBQUksQ0FBQztBQUFBLElBQ2hFLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFnQlUsZ0JBQW9DO0FBQUEsRUFFOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFjLGVBQThCO0FBQzFDLFVBQU0sT0FBTyxNQUFNLEtBQUssU0FBUztBQUNqQyxTQUFLLFlBQVksTUFBTSxLQUFLLGNBQWMsSUFBSTtBQUFBLEVBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRVSxjQUFjLE1BQTZDO0FBQ25FLGVBQU8sMENBQW1CLEtBQUssNEJBQTRCLEtBQUssSUFBSSxHQUFHLElBQUk7QUFBQSxFQUM3RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxhQUFhLGFBQTRDO0FBQ3BFLFNBQUssZ0JBQVksMkNBQW9CLEtBQUssNEJBQTRCLEtBQUssSUFBSSxHQUFHLFdBQVc7QUFDN0YsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVSxXQUFXLFNBQXVCO0FBQzFDLFFBQUksS0FBSyxRQUFRO0FBQ2YsV0FBSyxPQUFPLEtBQUs7QUFBQSxJQUNuQjtBQUVBLFNBQUssU0FBUyxJQUFJLHVCQUFPLEdBQUcsS0FBSyxTQUFTLElBQUk7QUFBQSxFQUFLLE9BQU8sRUFBRTtBQUFBLEVBQzlEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
@@ -49,8 +49,8 @@ var __process = globalThis["process"] ?? {
|
|
49
49
|
"env": {},
|
50
50
|
"platform": "android"
|
51
51
|
};
|
52
|
-
const specialRenames = [];
|
53
52
|
const deletedMetadataCacheMap = /* @__PURE__ */ new Map();
|
53
|
+
const handledRenames = /* @__PURE__ */ new Set();
|
54
54
|
function registerRenameDeleteHandlers(plugin, settingsBuilder) {
|
55
55
|
const renameDeleteHandlersMap = getRenameDeleteHandlersMap(plugin.app);
|
56
56
|
const pluginId = plugin.manifest.id;
|
@@ -66,7 +66,8 @@ function registerRenameDeleteHandlers(plugin, settingsBuilder) {
|
|
66
66
|
if (!shouldInvokeHandler(app, pluginId, "Delete")) {
|
67
67
|
return;
|
68
68
|
}
|
69
|
-
|
69
|
+
const path = file.path;
|
70
|
+
(0, import_ChainedPromise.chain)(app, () => handleDelete(app, path));
|
70
71
|
})
|
71
72
|
);
|
72
73
|
plugin.registerEvent(
|
@@ -74,7 +75,8 @@ function registerRenameDeleteHandlers(plugin, settingsBuilder) {
|
|
74
75
|
if (!shouldInvokeHandler(app, pluginId, "Rename")) {
|
75
76
|
return;
|
76
77
|
}
|
77
|
-
|
78
|
+
const newPath = file.path;
|
79
|
+
(0, import_ChainedPromise.chain)(app, () => handleRename(app, oldPath, newPath));
|
78
80
|
})
|
79
81
|
);
|
80
82
|
plugin.registerEvent(
|
@@ -99,83 +101,153 @@ function logPluginSettingsOrder(app) {
|
|
99
101
|
const renameDeleteHandlersMap = getRenameDeleteHandlersMap(app);
|
100
102
|
console.debug(`Rename/delete handlers will use plugin settings in the following order: ${Array.from(renameDeleteHandlersMap.keys()).join(", ")}`);
|
101
103
|
}
|
102
|
-
async function handleRename(app,
|
103
|
-
console.debug(`Handle Rename ${oldPath} -> ${
|
104
|
-
|
105
|
-
|
106
|
-
}
|
107
|
-
const specialRename = specialRenames.find((x) => x.oldPath === file.path);
|
108
|
-
if (specialRename) {
|
109
|
-
const newTempPath = await (0, import_Vault.renameSafe)(app, file, specialRename.tempPath);
|
110
|
-
specialRename.tempPath = newTempPath;
|
104
|
+
async function handleRename(app, oldPath, newPath) {
|
105
|
+
console.debug(`Handle Rename ${oldPath} -> ${newPath}`);
|
106
|
+
const newFile = (0, import_FileSystem.getFileOrNull)(app, newPath);
|
107
|
+
if (!newFile) {
|
111
108
|
return;
|
112
109
|
}
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
newPath: file.path,
|
117
|
-
tempPath: (0, import_Path.join)(file.parent?.path ?? "", "__temp__" + file.name)
|
118
|
-
});
|
119
|
-
await (0, import_Vault.renameSafe)(app, file, oldPath);
|
110
|
+
const key = makeKey(oldPath, newPath);
|
111
|
+
if (handledRenames.has(key)) {
|
112
|
+
handledRenames.delete(key);
|
120
113
|
return;
|
121
114
|
}
|
122
115
|
const updateAllLinks = app.fileManager.updateAllLinks;
|
116
|
+
app.fileManager.updateAllLinks = async () => {
|
117
|
+
};
|
123
118
|
try {
|
124
|
-
app
|
125
|
-
|
126
|
-
const renameMap = /* @__PURE__ */ new Map();
|
127
|
-
await fillRenameMap(app, file, oldPath, renameMap);
|
128
|
-
renameMap.set(oldPath, file.path);
|
129
|
-
for (const [oldPath2, newPath2] of renameMap.entries()) {
|
130
|
-
await processRename(app, oldPath2, newPath2, renameMap);
|
131
|
-
}
|
119
|
+
await renameHandled(app, newPath, oldPath);
|
120
|
+
await processAndRename(app, oldPath, newPath);
|
132
121
|
} finally {
|
133
122
|
app.fileManager.updateAllLinks = updateAllLinks;
|
134
|
-
const
|
135
|
-
|
136
|
-
|
137
|
-
|
123
|
+
const orphanKeys = Array.from(handledRenames);
|
124
|
+
(0, import_ChainedPromise.chain)(app, () => {
|
125
|
+
for (const key2 of orphanKeys) {
|
126
|
+
handledRenames.delete(key2);
|
127
|
+
}
|
128
|
+
});
|
129
|
+
}
|
130
|
+
}
|
131
|
+
async function processAndRename(app, oldPath, newPath) {
|
132
|
+
if (app.vault.adapter.insensitive && newPath.toLowerCase() === oldPath.toLowerCase() && (0, import_Path.dirname)(newPath) === (0, import_Path.dirname)(oldPath)) {
|
133
|
+
const tempPath = (0, import_Path.join)((0, import_Path.dirname)(oldPath), "__temp__" + (0, import_Path.basename)(newPath));
|
134
|
+
await processAndRename(app, oldPath, tempPath);
|
135
|
+
await processAndRename(app, tempPath, newPath);
|
136
|
+
return;
|
137
|
+
}
|
138
|
+
const settings = getSettings(app);
|
139
|
+
const renameMap = /* @__PURE__ */ new Map();
|
140
|
+
await fillRenameMap(app, oldPath, newPath, renameMap);
|
141
|
+
const backlinksMap = /* @__PURE__ */ new Map();
|
142
|
+
for (const oldPath2 of renameMap.keys()) {
|
143
|
+
const currentBacklinksMap = await (0, import_MetadataCache.getBacklinksMap)(app, [oldPath2]);
|
144
|
+
for (const [backlinkPath, links] of currentBacklinksMap.entries()) {
|
145
|
+
const newBacklinkPath = renameMap.get(backlinkPath) ?? backlinkPath;
|
146
|
+
const linkJsonToPathMap = backlinksMap.get(newBacklinkPath) ?? /* @__PURE__ */ new Map();
|
147
|
+
backlinksMap.set(newBacklinkPath, linkJsonToPathMap);
|
148
|
+
for (const link of links) {
|
149
|
+
linkJsonToPathMap.set((0, import_Object.toJson)(link), oldPath2);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
const parentFolders = /* @__PURE__ */ new Set();
|
154
|
+
for (const entry of renameMap.entries()) {
|
155
|
+
const oldRelatedPath = entry[0];
|
156
|
+
let newRelatedPath = entry[1];
|
157
|
+
newRelatedPath = await renameHandled(app, oldRelatedPath, newRelatedPath);
|
158
|
+
renameMap.set(oldRelatedPath, newRelatedPath);
|
159
|
+
parentFolders.add((0, import_Path.dirname)(oldRelatedPath));
|
160
|
+
}
|
161
|
+
if (settings.shouldDeleteEmptyFolders) {
|
162
|
+
for (const parentFolder of parentFolders) {
|
163
|
+
await (0, import_Vault.deleteEmptyFolderHierarchy)(app, parentFolder);
|
138
164
|
}
|
139
165
|
}
|
166
|
+
for (const [newBacklinkPath, linkJsonToPathMap] of backlinksMap.entries()) {
|
167
|
+
await (0, import_Link.editLinks)(app, newBacklinkPath, (link) => {
|
168
|
+
const oldRelatedPath = linkJsonToPathMap.get((0, import_Object.toJson)(link));
|
169
|
+
if (!oldRelatedPath) {
|
170
|
+
return;
|
171
|
+
}
|
172
|
+
const newRelatedPath = renameMap.get(oldRelatedPath);
|
173
|
+
if (!newRelatedPath) {
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
return (0, import_Link.updateLink)({
|
177
|
+
app,
|
178
|
+
link,
|
179
|
+
pathOrFile: newRelatedPath,
|
180
|
+
oldPathOrFile: oldRelatedPath,
|
181
|
+
sourcePathOrFile: newBacklinkPath,
|
182
|
+
renameMap,
|
183
|
+
shouldUpdateFilenameAlias: settings.shouldUpdateFilenameAliases
|
184
|
+
});
|
185
|
+
});
|
186
|
+
}
|
187
|
+
if ((0, import_FileSystem.isCanvasFile)(newPath)) {
|
188
|
+
await (0, import_Vault.processWithRetry)(app, newPath, (content) => {
|
189
|
+
const canvasData = JSON.parse(content);
|
190
|
+
for (const node of canvasData.nodes) {
|
191
|
+
if (node.type !== "file") {
|
192
|
+
continue;
|
193
|
+
}
|
194
|
+
const newPath2 = renameMap.get(node.file);
|
195
|
+
if (!newPath2) {
|
196
|
+
continue;
|
197
|
+
}
|
198
|
+
node.file = newPath2;
|
199
|
+
}
|
200
|
+
return (0, import_Object.toJson)(canvasData);
|
201
|
+
});
|
202
|
+
} else if ((0, import_FileSystem.isMarkdownFile)(newPath)) {
|
203
|
+
await (0, import_Link.updateLinksInFile)({
|
204
|
+
app,
|
205
|
+
pathOrFile: newPath,
|
206
|
+
oldPathOrFile: oldPath,
|
207
|
+
renameMap,
|
208
|
+
shouldUpdateFilenameAlias: settings.shouldUpdateFilenameAliases
|
209
|
+
});
|
210
|
+
}
|
140
211
|
}
|
141
|
-
async function handleDelete(app,
|
142
|
-
console.debug(`Handle Delete ${
|
143
|
-
if (!(0, import_FileSystem.isNote)(
|
212
|
+
async function handleDelete(app, path) {
|
213
|
+
console.debug(`Handle Delete ${path}`);
|
214
|
+
if (!(0, import_FileSystem.isNote)(path)) {
|
144
215
|
return;
|
145
216
|
}
|
146
217
|
const settings = getSettings(app);
|
147
218
|
if (!settings.shouldDeleteOrphanAttachments) {
|
148
219
|
return;
|
149
220
|
}
|
150
|
-
const cache = deletedMetadataCacheMap.get(
|
151
|
-
deletedMetadataCacheMap.delete(
|
221
|
+
const cache = deletedMetadataCacheMap.get(path);
|
222
|
+
deletedMetadataCacheMap.delete(path);
|
152
223
|
if (cache) {
|
153
224
|
const links = (0, import_MetadataCache.getAllLinks)(cache);
|
154
225
|
for (const link of links) {
|
155
|
-
const attachmentFile = (0, import_Link.extractLinkFile)(app, link,
|
226
|
+
const attachmentFile = (0, import_Link.extractLinkFile)(app, link, path);
|
156
227
|
if (!attachmentFile) {
|
157
228
|
continue;
|
158
229
|
}
|
159
230
|
if ((0, import_FileSystem.isNote)(attachmentFile)) {
|
160
231
|
continue;
|
161
232
|
}
|
162
|
-
await (0, import_Vault.deleteSafe)(app, attachmentFile,
|
233
|
+
await (0, import_Vault.deleteSafe)(app, attachmentFile, path, settings.shouldDeleteEmptyFolders);
|
163
234
|
}
|
164
235
|
}
|
165
|
-
const attachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(app,
|
236
|
+
const attachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(app, path);
|
166
237
|
const attachmentFolder = (0, import_FileSystem.getFolderOrNull)(app, attachmentFolderPath);
|
167
238
|
if (!attachmentFolder) {
|
168
239
|
return;
|
169
240
|
}
|
170
|
-
await (0, import_Vault.deleteSafe)(app, attachmentFolder,
|
241
|
+
await (0, import_Vault.deleteSafe)(app, attachmentFolder, path, false, settings.shouldDeleteEmptyFolders);
|
171
242
|
}
|
172
|
-
async function fillRenameMap(app,
|
173
|
-
|
243
|
+
async function fillRenameMap(app, oldPath, newPath, renameMap) {
|
244
|
+
renameMap.set(oldPath, newPath);
|
245
|
+
if (!(0, import_FileSystem.isNote)(oldPath)) {
|
174
246
|
return;
|
175
247
|
}
|
176
248
|
const settings = getSettings(app);
|
177
249
|
const oldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(app, oldPath);
|
178
|
-
const newAttachmentFolderPath = settings.shouldRenameAttachmentFolder ? await (0, import_AttachmentPath.getAttachmentFolderPath)(app,
|
250
|
+
const newAttachmentFolderPath = settings.shouldRenameAttachmentFolder ? await (0, import_AttachmentPath.getAttachmentFolderPath)(app, newPath) : oldAttachmentFolderPath;
|
179
251
|
const dummyOldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(app, (0, import_Path.join)((0, import_Path.dirname)(oldPath), "DUMMY_FILE.md"));
|
180
252
|
const oldAttachmentFolder = (0, import_FileSystem.getFolderOrNull)(app, oldAttachmentFolderPath);
|
181
253
|
if (!oldAttachmentFolder) {
|
@@ -184,131 +256,53 @@ async function fillRenameMap(app, file, oldPath, renameMap) {
|
|
184
256
|
if (oldAttachmentFolderPath === newAttachmentFolderPath && !settings.shouldRenameAttachmentFiles) {
|
185
257
|
return;
|
186
258
|
}
|
187
|
-
const
|
259
|
+
const oldAttachmentFiles = [];
|
188
260
|
if (oldAttachmentFolderPath === dummyOldAttachmentFolderPath) {
|
189
|
-
const
|
190
|
-
if (!
|
261
|
+
const oldCache = await (0, import_MetadataCache.getCacheSafe)(app, oldPath);
|
262
|
+
if (!oldCache) {
|
191
263
|
return;
|
192
264
|
}
|
193
|
-
for (const
|
194
|
-
const
|
195
|
-
if (!
|
265
|
+
for (const oldLink of (0, import_MetadataCache.getAllLinks)(oldCache)) {
|
266
|
+
const oldAttachmentFile = (0, import_Link.extractLinkFile)(app, oldLink, oldPath);
|
267
|
+
if (!oldAttachmentFile) {
|
196
268
|
continue;
|
197
269
|
}
|
198
|
-
if (
|
199
|
-
const
|
200
|
-
if (
|
201
|
-
|
270
|
+
if (oldAttachmentFile.path.startsWith(oldAttachmentFolderPath)) {
|
271
|
+
const oldAttachmentBacklinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(app, oldAttachmentFile);
|
272
|
+
if (oldAttachmentBacklinks.keys().length === 1) {
|
273
|
+
oldAttachmentFiles.push(oldAttachmentFile);
|
202
274
|
}
|
203
275
|
}
|
204
276
|
}
|
205
277
|
} else {
|
206
|
-
import_obsidian.Vault.recurseChildren(oldAttachmentFolder, (
|
207
|
-
if (
|
208
|
-
|
278
|
+
import_obsidian.Vault.recurseChildren(oldAttachmentFolder, (oldAttachmentFile) => {
|
279
|
+
if (oldAttachmentFile instanceof import_obsidian.TFile) {
|
280
|
+
oldAttachmentFiles.push(oldAttachmentFile);
|
209
281
|
}
|
210
282
|
});
|
211
283
|
}
|
212
|
-
const
|
213
|
-
|
214
|
-
|
284
|
+
const oldBasename = (0, import_Path.basename)(oldPath, (0, import_Path.extname)(oldPath));
|
285
|
+
const newBasename = (0, import_Path.basename)(newPath, (0, import_Path.extname)(newPath));
|
286
|
+
for (const oldAttachmentFile of oldAttachmentFiles) {
|
287
|
+
if ((0, import_FileSystem.isNote)(oldAttachmentFile)) {
|
215
288
|
continue;
|
216
289
|
}
|
217
|
-
const relativePath = (0, import_Path.relative)(oldAttachmentFolderPath,
|
290
|
+
const relativePath = (0, import_Path.relative)(oldAttachmentFolderPath, oldAttachmentFile.path);
|
218
291
|
const newDir = (0, import_Path.join)(newAttachmentFolderPath, (0, import_Path.dirname)(relativePath));
|
219
|
-
const newChildBasename = settings.shouldRenameAttachmentFiles ?
|
220
|
-
let newChildPath = (0, import_Path.join)(newDir, (0, import_Path.makeFileName)(newChildBasename,
|
221
|
-
if (
|
222
|
-
if (settings.shouldDeleteConflictingAttachments) {
|
223
|
-
const newChildFile = (0, import_FileSystem.getFileOrNull)(app, newChildPath);
|
224
|
-
if (newChildFile) {
|
225
|
-
await app.fileManager.trashFile(newChildFile);
|
226
|
-
}
|
227
|
-
} else {
|
228
|
-
newChildPath = app.vault.getAvailablePath((0, import_Path.join)(newDir, newChildBasename), child.extension);
|
229
|
-
}
|
230
|
-
renameMap.set(child.path, newChildPath);
|
231
|
-
}
|
232
|
-
}
|
233
|
-
}
|
234
|
-
async function processRename(app, oldPath, newPath, renameMap) {
|
235
|
-
const settings = getSettings(app);
|
236
|
-
let oldFile = (0, import_FileSystem.getFileOrNull)(app, oldPath);
|
237
|
-
if (oldFile) {
|
238
|
-
const oldFolder = oldFile.parent;
|
239
|
-
newPath = await (0, import_Vault.renameSafe)(app, oldFile, newPath);
|
240
|
-
renameMap.set(oldPath, newPath);
|
241
|
-
if (settings.shouldDeleteEmptyFolders) {
|
242
|
-
await (0, import_Vault.deleteEmptyFolderHierarchy)(app, oldFolder);
|
243
|
-
}
|
244
|
-
}
|
245
|
-
oldFile = (0, import_FileSystem.getFile)(app, oldPath, true);
|
246
|
-
const newFile = (0, import_FileSystem.getFileOrNull)(app, newPath);
|
247
|
-
if (!oldFile.deleted || !newFile) {
|
248
|
-
throw new Error(`Could not rename ${oldPath} to ${newPath}`);
|
249
|
-
}
|
250
|
-
if (!settings.shouldUpdateLinks) {
|
251
|
-
return;
|
252
|
-
}
|
253
|
-
const backlinks = await (0, import_MetadataCache.getBacklinksMap)(app, [oldFile, newFile]);
|
254
|
-
for (const parentNotePath of backlinks.keys()) {
|
255
|
-
let parentNote = (0, import_FileSystem.getFileOrNull)(app, parentNotePath);
|
256
|
-
if (!parentNote) {
|
257
|
-
const newParentNotePath = renameMap.get(parentNotePath);
|
258
|
-
if (newParentNotePath) {
|
259
|
-
parentNote = (0, import_FileSystem.getFileOrNull)(app, newParentNotePath);
|
260
|
-
}
|
261
|
-
}
|
262
|
-
if (!parentNote) {
|
263
|
-
console.warn(`Parent note not found: ${parentNotePath}`);
|
292
|
+
const newChildBasename = settings.shouldRenameAttachmentFiles ? oldAttachmentFile.basename.replaceAll(oldBasename, newBasename) : oldAttachmentFile.basename;
|
293
|
+
let newChildPath = (0, import_Path.join)(newDir, (0, import_Path.makeFileName)(newChildBasename, oldAttachmentFile.extension));
|
294
|
+
if (oldAttachmentFile.path === newChildPath) {
|
264
295
|
continue;
|
265
296
|
}
|
266
|
-
|
267
|
-
const
|
268
|
-
|
269
|
-
|
270
|
-
for (const link of links) {
|
271
|
-
changes.push({
|
272
|
-
startIndex: link.position.start.offset,
|
273
|
-
endIndex: link.position.end.offset,
|
274
|
-
oldContent: link.original,
|
275
|
-
newContent: (0, import_Link.updateLink)({
|
276
|
-
app,
|
277
|
-
link,
|
278
|
-
pathOrFile: newFile,
|
279
|
-
oldPathOrFile: oldPath,
|
280
|
-
sourcePathOrFile: parentNote,
|
281
|
-
renameMap,
|
282
|
-
shouldUpdateFilenameAlias: settings.shouldUpdateFilenameAliases
|
283
|
-
})
|
284
|
-
});
|
297
|
+
if (settings.shouldDeleteConflictingAttachments) {
|
298
|
+
const newChildFile = (0, import_FileSystem.getFileOrNull)(app, newChildPath);
|
299
|
+
if (newChildFile) {
|
300
|
+
await app.fileManager.trashFile(newChildFile);
|
285
301
|
}
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
await (0, import_Vault.processWithRetry)(app, newFile, (content) => {
|
291
|
-
const canvasData = JSON.parse(content);
|
292
|
-
for (const node of canvasData.nodes) {
|
293
|
-
if (node.type !== "file") {
|
294
|
-
continue;
|
295
|
-
}
|
296
|
-
const newPath2 = renameMap.get(node.file);
|
297
|
-
if (!newPath2) {
|
298
|
-
continue;
|
299
|
-
}
|
300
|
-
node.file = newPath2;
|
301
|
-
}
|
302
|
-
return (0, import_Object.toJson)(canvasData);
|
303
|
-
});
|
304
|
-
} else if ((0, import_FileSystem.isMarkdownFile)(newFile)) {
|
305
|
-
await (0, import_Link.updateLinksInFile)({
|
306
|
-
app,
|
307
|
-
pathOrFile: newFile,
|
308
|
-
oldPathOrFile: oldPath,
|
309
|
-
renameMap,
|
310
|
-
shouldUpdateFilenameAlias: settings.shouldUpdateFilenameAliases
|
311
|
-
});
|
302
|
+
} else {
|
303
|
+
newChildPath = app.vault.getAvailablePath((0, import_Path.join)(newDir, newChildBasename), oldAttachmentFile.extension);
|
304
|
+
}
|
305
|
+
renameMap.set(oldAttachmentFile.path, newChildPath);
|
312
306
|
}
|
313
307
|
}
|
314
308
|
function getSettings(app) {
|
@@ -328,8 +322,17 @@ function handleMetadataDeleted(file, prevCache) {
|
|
328
322
|
deletedMetadataCacheMap.set(file.path, prevCache);
|
329
323
|
}
|
330
324
|
}
|
325
|
+
function makeKey(oldPath, newPath) {
|
326
|
+
return `${oldPath} -> ${newPath}`;
|
327
|
+
}
|
328
|
+
async function renameHandled(app, oldPath, newPath) {
|
329
|
+
newPath = await (0, import_Vault.renameSafe)(app, (0, import_FileSystem.getFile)(app, oldPath), newPath);
|
330
|
+
const key = makeKey(oldPath, newPath);
|
331
|
+
handledRenames.add(key);
|
332
|
+
return newPath;
|
333
|
+
}
|
331
334
|
// Annotate the CommonJS export names for ESM import in node:
|
332
335
|
0 && (module.exports = {
|
333
336
|
registerRenameDeleteHandlers
|
334
337
|
});
|
335
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFBsdWdpbixcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuXG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL0FwcC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHsgY2hhaW5Bc3luY0ZuIH0gZnJvbSAnLi9DaGFpbmVkUHJvbWlzZS50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGlzQ2FudmFzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICBnZXRCYWNrbGlua3NNYXAsXG4gIGdldENhY2hlU2FmZVxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmUsXG4gIHByb2Nlc3NXaXRoUmV0cnksXG4gIHJlbmFtZVNhZmVcbn0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmNvbnN0IHNwZWNpYWxSZW5hbWVzOiBTcGVjaWFsUmVuYW1lW10gPSBbXTtcbmNvbnN0IGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlZE1ldGFkYXRhPigpO1xuXG5pbnRlcmZhY2UgU3BlY2lhbFJlbmFtZSB7XG4gIG9sZFBhdGg6IHN0cmluZztcbiAgbmV3UGF0aDogc3RyaW5nO1xuICB0ZW1wUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlbGV0ZSBjb25mbGljdGluZyBhdHRhY2htZW50cy5cbiAgICovXG4gIHNob3VsZERlbGV0ZUNvbmZsaWN0aW5nQXR0YWNobWVudHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBzaG91bGREZWxldGVFbXB0eUZvbGRlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIG9ycGhhbiBhdHRhY2htZW50cyBhZnRlciBhIGRlbGV0ZS5cbiAgICovXG4gIHNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbmFtZSBhdHRhY2htZW50IGZpbGVzIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRSZW5hbWVBdHRhY2htZW50RmlsZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAgKiBXaGV0aGVyIHRvIHJlbmFtZSBhdHRhY2htZW50IGZvbGRlciB3aGVuIGEgbm90ZSBpcyByZW5hbWVkLlxuICAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXBkYXRlIGZpbGVuYW1lIGFsaWFzZXMgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgbGlua3Mgd2hlbiBhIG5vdGUgb3IgYXR0YWNobWVudCBpcyByZW5hbWVkLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlTGlua3M6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXJzLlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcGFyYW0gc2V0dGluZ3NCdWlsZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNldHRpbmdzIGZvciB0aGUgcmVuYW1lIGRlbGV0ZSBoYW5kbGVyLlxuICogQHJldHVybnMgdm9pZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSZW5hbWVEZWxldGVIYW5kbGVycyhwbHVnaW46IFBsdWdpbiwgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4pOiB2b2lkIHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChwbHVnaW4uYXBwKTtcbiAgY29uc3QgcGx1Z2luSWQgPSBwbHVnaW4ubWFuaWZlc3QuaWQ7XG5cbiAgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAuc2V0KHBsdWdpbklkLCBzZXR0aW5nc0J1aWxkZXIpO1xuICBsb2dQbHVnaW5TZXR0aW5nc09yZGVyKHBsdWdpbi5hcHApO1xuXG4gIHBsdWdpbi5yZWdpc3RlcigoKSA9PiB7XG4gICAgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAuZGVsZXRlKHBsdWdpbklkKTtcbiAgICBsb2dQbHVnaW5TZXR0aW5nc09yZGVyKHBsdWdpbi5hcHApO1xuICB9KTtcblxuICBjb25zdCBhcHAgPSBwbHVnaW4uYXBwO1xuICBwbHVnaW4ucmVnaXN0ZXJFdmVudChcbiAgICBhcHAudmF1bHQub24oJ2RlbGV0ZScsIChmaWxlKSA9PiB7XG4gICAgICBpZiAoIXNob3VsZEludm9rZUhhbmRsZXIoYXBwLCBwbHVnaW5JZCwgJ0RlbGV0ZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNoYWluQXN5bmNGbihhcHAsICgpID0+IGhhbmRsZURlbGV0ZShhcHAsIGZpbGUpKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGlmICghc2hvdWxkSW52b2tlSGFuZGxlcihhcHAsIHBsdWdpbklkLCAnUmVuYW1lJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2hhaW5Bc3luY0ZuKGFwcCwgKCkgPT4gaGFuZGxlUmVuYW1lKGFwcCwgZmlsZSwgb2xkUGF0aCkpO1xuICAgIH0pXG4gICk7XG5cbiAgcGx1Z2luLnJlZ2lzdGVyRXZlbnQoXG4gICAgYXBwLm1ldGFkYXRhQ2FjaGUub24oJ2RlbGV0ZWQnLCAoZmlsZSwgcHJldkNhY2hlKSA9PiB7XG4gICAgICBoYW5kbGVNZXRhZGF0YURlbGV0ZWQoZmlsZSwgcHJldkNhY2hlKTtcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBzaG91bGRJbnZva2VIYW5kbGVyKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nLCBoYW5kbGVyVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChhcHApO1xuICBjb25zdCBtYWluUGx1Z2luSWQgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMua2V5cygpKVswXTtcbiAgaWYgKG1haW5QbHVnaW5JZCAhPT0gcGx1Z2luSWQpIHtcbiAgICBjb25zb2xlLmRlYnVnKGAke2hhbmRsZXJUeXBlfSBoYW5kbGVyIGZvciBwbHVnaW4gJHtwbHVnaW5JZH0gaXMgc2tpcHBlZCwgYmVjYXVzZSBpdCBpcyBoYW5kbGVkIGJ5IHBsdWdpbiAke21haW5QbHVnaW5JZCA/PyAnKG5vbmUpJ31gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcDogQXBwKTogTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoYXBwLCAncmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAnLCBuZXcgTWFwPHN0cmluZywgKCkgPT4gUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+PigpKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gbG9nUGx1Z2luU2V0dGluZ3NPcmRlcihhcHA6IEFwcCk6IHZvaWQge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGNvbnNvbGUuZGVidWcoYFJlbmFtZS9kZWxldGUgaGFuZGxlcnMgd2lsbCB1c2UgcGx1Z2luIHNldHRpbmdzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6ICR7QXJyYXkuZnJvbShyZW5hbWVEZWxldGVIYW5kbGVyc01hcC5rZXlzKCkpLmpvaW4oJywgJyl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlbmFtZShhcHA6IEFwcCwgZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBSZW5hbWUgJHtvbGRQYXRofSAtPiAke2ZpbGUucGF0aH1gKTtcblxuICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHNwZWNpYWxSZW5hbWVzLmZpbmQoKHgpID0+IHgub2xkUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgaWYgKHNwZWNpYWxSZW5hbWUpIHtcbiAgICBjb25zdCBuZXdUZW1wUGF0aCA9IGF3YWl0IHJlbmFtZVNhZmUoYXBwLCBmaWxlLCBzcGVjaWFsUmVuYW1lLnRlbXBQYXRoKTtcbiAgICBzcGVjaWFsUmVuYW1lLnRlbXBQYXRoID0gbmV3VGVtcFBhdGg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlICYmIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgJiYgZGlybmFtZShvbGRQYXRoKSA9PT0gZGlybmFtZShmaWxlLnBhdGgpKSB7XG4gICAgc3BlY2lhbFJlbmFtZXMucHVzaCh7XG4gICAgICBvbGRQYXRoLFxuICAgICAgbmV3UGF0aDogZmlsZS5wYXRoLFxuICAgICAgdGVtcFBhdGg6IGpvaW4oZmlsZS5wYXJlbnQ/LnBhdGggPz8gJycsICdfX3RlbXBfXycgKyBmaWxlLm5hbWUpXG4gICAgfSk7XG5cbiAgICBhd2FpdCByZW5hbWVTYWZlKGFwcCwgZmlsZSwgb2xkUGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBjb25zdCB1cGRhdGVBbGxMaW5rcyA9IGFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcztcbiAgdHJ5IHtcbiAgICBhcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgYXdhaXQgZmlsbFJlbmFtZU1hcChhcHAsIGZpbGUsIG9sZFBhdGgsIHJlbmFtZU1hcCk7XG4gICAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBmaWxlLnBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBbb2xkUGF0aDIsIG5ld1BhdGgyXSBvZiByZW5hbWVNYXAuZW50cmllcygpKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzUmVuYW1lKGFwcCwgb2xkUGF0aDIsIG5ld1BhdGgyLCByZW5hbWVNYXApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSB1cGRhdGVBbGxMaW5rcztcblxuICAgIGNvbnN0IHNwZWNpYWxSZW5hbWUgPSBzcGVjaWFsUmVuYW1lcy5maW5kKCh4KSA9PiB4LnRlbXBQYXRoID09PSBmaWxlLnBhdGgpO1xuICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICBhd2FpdCByZW5hbWVTYWZlKGFwcCwgZmlsZSwgc3BlY2lhbFJlbmFtZS5uZXdQYXRoKTtcbiAgICAgIHNwZWNpYWxSZW5hbWVzLnJlbW92ZShzcGVjaWFsUmVuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlRGVsZXRlKGFwcDogQXBwLCBmaWxlOiBUQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBEZWxldGUgJHtmaWxlLnBhdGh9YCk7XG4gIGlmICghaXNOb3RlKGZpbGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRTZXR0aW5ncyhhcHApO1xuICBpZiAoIXNldHRpbmdzLnNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2FjaGUgPSBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5nZXQoZmlsZS5wYXRoKTtcbiAgZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZGVsZXRlKGZpbGUucGF0aCk7XG4gIGlmIChjYWNoZSkge1xuICAgIGNvbnN0IGxpbmtzID0gZ2V0QWxsTGlua3MoY2FjaGUpO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZShhcHAsIGxpbmssIGZpbGUucGF0aCk7XG4gICAgICBpZiAoIWF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOb3RlKGF0dGFjaG1lbnRGaWxlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGVsZXRlU2FmZShhcHAsIGF0dGFjaG1lbnRGaWxlLCBmaWxlLnBhdGgsIHNldHRpbmdzLnNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIGZpbGUucGF0aCk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgaWYgKCFhdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgZGVsZXRlU2FmZShhcHAsIGF0dGFjaG1lbnRGb2xkZXIsIGZpbGUucGF0aCwgZmFsc2UsIHNldHRpbmdzLnNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGxSZW5hbWVNYXAoYXBwOiBBcHAsIGZpbGU6IFRGaWxlLCBvbGRQYXRoOiBzdHJpbmcsIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzTm90ZShmaWxlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcblxuICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgb2xkUGF0aCk7XG4gIGNvbnN0IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoID0gc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlclxuICAgID8gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoYXBwLCBmaWxlLnBhdGgpXG4gICAgOiBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aDtcbiAgY29uc3QgZHVtbXlPbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgam9pbihkaXJuYW1lKG9sZFBhdGgpLCAnRFVNTVlfRklMRS5tZCcpKTtcblxuICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgb2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gIGlmICghb2xkQXR0YWNobWVudEZvbGRlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gbmV3QXR0YWNobWVudEZvbGRlclBhdGggJiYgIXNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkcmVuOiBURmlsZVtdID0gW107XG5cbiAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBkdW1teU9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUoYXBwLCBmaWxlKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGluayBvZiBnZXRBbGxMaW5rcyhjYWNoZSkpIHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKGFwcCwgbGluaywgb2xkUGF0aCk7XG4gICAgICBpZiAoIWF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0YWNobWVudEZpbGUucGF0aC5zdGFydHNXaXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSkge1xuICAgICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZShhcHAsIGF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgaWYgKGJhY2tsaW5rcy5rZXlzKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChhdHRhY2htZW50RmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKG9sZEF0dGFjaG1lbnRGb2xkZXIsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBvbGROb3RlQmFzZU5hbWUgPSBiYXNlbmFtZShvbGRQYXRoLCBleHRuYW1lKG9sZFBhdGgpKTtcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgaWYgKGlzTm90ZShjaGlsZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCwgY2hpbGQucGF0aCk7XG4gICAgY29uc3QgbmV3RGlyID0gam9pbihuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCwgZGlybmFtZShyZWxhdGl2ZVBhdGgpKTtcbiAgICBjb25zdCBuZXdDaGlsZEJhc2VuYW1lID0gc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzXG4gICAgICA/IGNoaWxkLmJhc2VuYW1lLnJlcGxhY2VBbGwob2xkTm90ZUJhc2VOYW1lLCBmaWxlLmJhc2VuYW1lKVxuICAgICAgOiBjaGlsZC5iYXNlbmFtZTtcbiAgICBsZXQgbmV3Q2hpbGRQYXRoID0gam9pbihuZXdEaXIsIG1ha2VGaWxlTmFtZShuZXdDaGlsZEJhc2VuYW1lLCBjaGlsZC5leHRlbnNpb24pKTtcbiAgICBpZiAoY2hpbGQucGF0aCAhPT0gbmV3Q2hpbGRQYXRoKSB7XG4gICAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgICBjb25zdCBuZXdDaGlsZEZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbmV3Q2hpbGRQYXRoKTtcbiAgICAgICAgaWYgKG5ld0NoaWxkRmlsZSkge1xuICAgICAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUobmV3Q2hpbGRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q2hpbGRQYXRoID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIG5ld0NoaWxkQmFzZW5hbWUpLCBjaGlsZC5leHRlbnNpb24pO1xuICAgICAgfVxuICAgICAgcmVuYW1lTWFwLnNldChjaGlsZC5wYXRoLCBuZXdDaGlsZFBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzUmVuYW1lKGFwcDogQXBwLCBvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcbiAgbGV0IG9sZEZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgb2xkUGF0aCk7XG5cbiAgaWYgKG9sZEZpbGUpIHtcbiAgICBjb25zdCBvbGRGb2xkZXIgPSBvbGRGaWxlLnBhcmVudDtcbiAgICBuZXdQYXRoID0gYXdhaXQgcmVuYW1lU2FmZShhcHAsIG9sZEZpbGUsIG5ld1BhdGgpO1xuICAgIHJlbmFtZU1hcC5zZXQob2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIG9sZEZvbGRlcik7XG4gICAgfVxuICB9XG5cbiAgb2xkRmlsZSA9IGdldEZpbGUoYXBwLCBvbGRQYXRoLCB0cnVlKTtcbiAgY29uc3QgbmV3RmlsZSA9IGdldEZpbGVPck51bGwoYXBwLCBuZXdQYXRoKTtcblxuICBpZiAoIW9sZEZpbGUuZGVsZXRlZCB8fCAhbmV3RmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlbmFtZSAke29sZFBhdGh9IHRvICR7bmV3UGF0aH1gKTtcbiAgfVxuXG4gIGlmICghc2V0dGluZ3Muc2hvdWxkVXBkYXRlTGlua3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NNYXAoYXBwLCBbb2xkRmlsZSwgbmV3RmlsZV0pO1xuXG4gIGZvciAoY29uc3QgcGFyZW50Tm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgIGxldCBwYXJlbnROb3RlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhcmVudE5vdGVQYXRoKTtcbiAgICBpZiAoIXBhcmVudE5vdGUpIHtcbiAgICAgIGNvbnN0IG5ld1BhcmVudE5vdGVQYXRoID0gcmVuYW1lTWFwLmdldChwYXJlbnROb3RlUGF0aCk7XG4gICAgICBpZiAobmV3UGFyZW50Tm90ZVBhdGgpIHtcbiAgICAgICAgcGFyZW50Tm90ZSA9IGdldEZpbGVPck51bGwoYXBwLCBuZXdQYXJlbnROb3RlUGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFBhcmVudCBub3RlIG5vdCBmb3VuZDogJHtwYXJlbnROb3RlUGF0aH1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IGFwcGx5RmlsZUNoYW5nZXMoYXBwLCBwYXJlbnROb3RlLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NNYXAoYXBwLCBbb2xkRmlsZSwgbmV3RmlsZV0pO1xuICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KHBhcmVudE5vdGVQYXRoKSA/PyBbXTtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgZW5kSW5kZXg6IGxpbmsucG9zaXRpb24uZW5kLm9mZnNldCxcbiAgICAgICAgICBvbGRDb250ZW50OiBsaW5rLm9yaWdpbmFsLFxuICAgICAgICAgIG5ld0NvbnRlbnQ6IHVwZGF0ZUxpbmsoe1xuICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICAgIG9sZFBhdGhPckZpbGU6IG9sZFBhdGgsXG4gICAgICAgICAgICBzb3VyY2VQYXRoT3JGaWxlOiBwYXJlbnROb3RlLFxuICAgICAgICAgICAgcmVuYW1lTWFwLFxuICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhczogc2V0dGluZ3Muc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQ2FudmFzRmlsZShuZXdGaWxlKSkge1xuICAgIGF3YWl0IHByb2Nlc3NXaXRoUmV0cnkoYXBwLCBuZXdGaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzRGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjYW52YXNEYXRhLm5vZGVzKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgIGlmICghbmV3UGF0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZmlsZSA9IG5ld1BhdGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFya2Rvd25GaWxlKG5ld0ZpbGUpKSB7XG4gICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgYXBwOiBhcHAsXG4gICAgICBwYXRoT3JGaWxlOiBuZXdGaWxlLFxuICAgICAgb2xkUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgIHJlbmFtZU1hcCxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM6IHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNlc1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNldHRpbmdzKGFwcDogQXBwKTogUGFydGlhbDxSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3M+IHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyc01hcChhcHApO1xuICBjb25zdCBzZXR0aW5nc0J1aWxkZXJzID0gQXJyYXkuZnJvbShyZW5hbWVEZWxldGVIYW5kbGVyc01hcC52YWx1ZXMoKSkucmV2ZXJzZSgpO1xuXG4gIGNvbnN0IHNldHRpbmdzOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4gPSB7fTtcbiAgZm9yIChjb25zdCBzZXR0aW5nc0J1aWxkZXIgb2Ygc2V0dGluZ3NCdWlsZGVycykge1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0gc2V0dGluZ3NCdWlsZGVyKCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U2V0dGluZ3MpIGFzIFtrZXlvZiBSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3MsIGJvb2xlYW5dW10pIHtcbiAgICAgIHNldHRpbmdzW2tleV0gfHw9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gaGFuZGxlTWV0YWRhdGFEZWxldGVkKGZpbGU6IFRBYnN0cmFjdEZpbGUsIHByZXZDYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsKTogdm9pZCB7XG4gIGlmIChpc01hcmtkb3duRmlsZShmaWxlKSAmJiBwcmV2Q2FjaGUpIHtcbiAgICBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5zZXQoZmlsZS5wYXRoLCBwcmV2Q2FjaGUpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHNCQUlPO0FBR1Asb0JBQXVCO0FBQ3ZCLGtCQU9PO0FBQ1AsaUJBQXlDO0FBQ3pDLDRCQUF3QztBQUN4Qyw0QkFBNkI7QUFDN0Isd0JBT087QUFDUCxrQkFJTztBQUNQLDJCQUtPO0FBQ1AsbUJBTU87QUF2RFAsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBb0RBLE1BQU0saUJBQWtDLENBQUM7QUFDekMsTUFBTSwwQkFBMEIsb0JBQUksSUFBNEI7QUFzRHpELFNBQVMsNkJBQTZCLFFBQWdCLGlCQUFtRTtBQUM5SCxRQUFNLDBCQUEwQiwyQkFBMkIsT0FBTyxHQUFHO0FBQ3JFLFFBQU0sV0FBVyxPQUFPLFNBQVM7QUFFakMsMEJBQXdCLElBQUksVUFBVSxlQUFlO0FBQ3JELHlCQUF1QixPQUFPLEdBQUc7QUFFakMsU0FBTyxTQUFTLE1BQU07QUFDcEIsNEJBQXdCLE9BQU8sUUFBUTtBQUN2QywyQkFBdUIsT0FBTyxHQUFHO0FBQUEsRUFDbkMsQ0FBQztBQUVELFFBQU0sTUFBTSxPQUFPO0FBQ25CLFNBQU87QUFBQSxJQUNMLElBQUksTUFB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
|
338
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVkTWV0YWRhdGEsXG4gIFBsdWdpbixcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuXG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL0FwcC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHsgY2hhaW4gfSBmcm9tICcuL0NoYWluZWRQcm9taXNlLnRzJztcbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlck9yTnVsbCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgaXNOb3RlXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBlZGl0TGlua3MsXG4gIGV4dHJhY3RMaW5rRmlsZSxcbiAgdXBkYXRlTGluayxcbiAgdXBkYXRlTGlua3NJbkZpbGVcbn0gZnJvbSAnLi9MaW5rLnRzJztcbmltcG9ydCB7XG4gIGdldEFsbExpbmtzLFxuICBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSxcbiAgZ2V0QmFja2xpbmtzTWFwLFxuICBnZXRDYWNoZVNhZmVcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5LFxuICBkZWxldGVTYWZlLFxuICBwcm9jZXNzV2l0aFJldHJ5LFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vVmF1bHQudHMnO1xuXG5jb25zdCBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRNZXRhZGF0YT4oKTtcbmNvbnN0IGhhbmRsZWRSZW5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGNvbmZsaWN0aW5nIGF0dGFjaG1lbnRzLlxuICAgKi9cbiAgc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50czogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZWxldGUgZW1wdHkgZm9sZGVycy5cbiAgICovXG4gIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZWxldGUgb3JwaGFuIGF0dGFjaG1lbnRzIGFmdGVyIGEgZGVsZXRlLlxuICAgKi9cbiAgc2hvdWxkRGVsZXRlT3JwaGFuQXR0YWNobWVudHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZmlsZXMgd2hlbiBhIG5vdGUgaXMgcmVuYW1lZC5cbiAgICovXG4gIHNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlczogYm9vbGVhbjtcblxuICAvKipcbiAgICAqIFdoZXRoZXIgdG8gcmVuYW1lIGF0dGFjaG1lbnQgZm9sZGVyIHdoZW4gYSBub3RlIGlzIHJlbmFtZWQuXG4gICAgKi9cbiAgc2hvdWxkUmVuYW1lQXR0YWNobWVudEZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgZmlsZW5hbWUgYWxpYXNlcyB3aGVuIGEgbm90ZSBpcyByZW5hbWVkLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlRmlsZW5hbWVBbGlhc2VzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBsaW5rcyB3aGVuIGEgbm90ZSBvciBhdHRhY2htZW50IGlzIHJlbmFtZWQuXG4gICAqL1xuICBzaG91bGRVcGRhdGVMaW5rczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHJlbmFtZS9kZWxldGUgaGFuZGxlcnMuXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzZXR0aW5nc0J1aWxkZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgc2V0dGluZ3MgZm9yIHRoZSByZW5hbWUgZGVsZXRlIGhhbmRsZXIuXG4gKiBAcmV0dXJucyB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclJlbmFtZURlbGV0ZUhhbmRsZXJzKHBsdWdpbjogUGx1Z2luLCBzZXR0aW5nc0J1aWxkZXI6ICgpID0+IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPik6IHZvaWQge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKHBsdWdpbi5hcHApO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcblxuICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5zZXQocGx1Z2luSWQsIHNldHRpbmdzQnVpbGRlcik7XG4gIGxvZ1BsdWdpblNldHRpbmdzT3JkZXIocGx1Z2luLmFwcCk7XG5cbiAgcGx1Z2luLnJlZ2lzdGVyKCgpID0+IHtcbiAgICByZW5hbWVEZWxldGVIYW5kbGVyc01hcC5kZWxldGUocGx1Z2luSWQpO1xuICAgIGxvZ1BsdWdpblNldHRpbmdzT3JkZXIocGx1Z2luLmFwcCk7XG4gIH0pO1xuXG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGlmICghc2hvdWxkSW52b2tlSGFuZGxlcihhcHAsIHBsdWdpbklkLCAnRGVsZXRlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF0aCA9IGZpbGUucGF0aDtcbiAgICAgIGNoYWluKGFwcCwgKCkgPT4gaGFuZGxlRGVsZXRlKGFwcCwgcGF0aCkpO1xuICAgIH0pXG4gICk7XG5cbiAgcGx1Z2luLnJlZ2lzdGVyRXZlbnQoXG4gICAgYXBwLnZhdWx0Lm9uKCdyZW5hbWUnLCAoZmlsZSwgb2xkUGF0aCkgPT4ge1xuICAgICAgaWYgKCFzaG91bGRJbnZva2VIYW5kbGVyKGFwcCwgcGx1Z2luSWQsICdSZW5hbWUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdQYXRoID0gZmlsZS5wYXRoO1xuICAgICAgY2hhaW4oYXBwLCAoKSA9PiBoYW5kbGVSZW5hbWUoYXBwLCBvbGRQYXRoLCBuZXdQYXRoKSk7XG4gICAgfSlcbiAgKTtcblxuICBwbHVnaW4ucmVnaXN0ZXJFdmVudChcbiAgICBhcHAubWV0YWRhdGFDYWNoZS5vbignZGVsZXRlZCcsIChmaWxlLCBwcmV2Q2FjaGUpID0+IHtcbiAgICAgIGhhbmRsZU1ldGFkYXRhRGVsZXRlZChmaWxlLCBwcmV2Q2FjaGUpO1xuICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEludm9rZUhhbmRsZXIoYXBwOiBBcHAsIHBsdWdpbklkOiBzdHJpbmcsIGhhbmRsZXJUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkcyA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGNvbnN0IG1haW5QbHVnaW5JZCA9IEFycmF5LmZyb20ocmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkcy5rZXlzKCkpWzBdO1xuICBpZiAobWFpblBsdWdpbklkICE9PSBwbHVnaW5JZCkge1xuICAgIGNvbnNvbGUuZGVidWcoYCR7aGFuZGxlclR5cGV9IGhhbmRsZXIgZm9yIHBsdWdpbiAke3BsdWdpbklkfSBpcyBza2lwcGVkLCBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgYnkgcGx1Z2luICR7bWFpblBsdWdpbklkID8/ICcobm9uZSknfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAoYXBwOiBBcHApOiBNYXA8c3RyaW5nLCAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdyZW5hbWVEZWxldGVIYW5kbGVyc01hcCcsIG5ldyBNYXA8c3RyaW5nLCAoKSA9PiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4+KCkpLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBsb2dQbHVnaW5TZXR0aW5nc09yZGVyKGFwcDogQXBwKTogdm9pZCB7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwID0gZ2V0UmVuYW1lRGVsZXRlSGFuZGxlcnNNYXAoYXBwKTtcbiAgY29uc29sZS5kZWJ1ZyhgUmVuYW1lL2RlbGV0ZSBoYW5kbGVycyB3aWxsIHVzZSBwbHVnaW4gc2V0dGluZ3MgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogJHtBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwLmtleXMoKSkuam9pbignLCAnKX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVuYW1lKGFwcDogQXBwLCBvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zb2xlLmRlYnVnKGBIYW5kbGUgUmVuYW1lICR7b2xkUGF0aH0gLT4gJHtuZXdQYXRofWApO1xuXG4gIGNvbnN0IG5ld0ZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbmV3UGF0aCk7XG4gIGlmICghbmV3RmlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGtleSA9IG1ha2VLZXkob2xkUGF0aCwgbmV3UGF0aCk7XG4gIGlmIChoYW5kbGVkUmVuYW1lcy5oYXMoa2V5KSkge1xuICAgIGhhbmRsZWRSZW5hbWVzLmRlbGV0ZShrZXkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgY29uc3QgdXBkYXRlQWxsTGlua3MgPSBhcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3M7XG4gIGFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVuYW1lSGFuZGxlZChhcHAsIG5ld1BhdGgsIG9sZFBhdGgpO1xuICAgIGF3YWl0IHByb2Nlc3NBbmRSZW5hbWUoYXBwLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSB1cGRhdGVBbGxMaW5rcztcbiAgICBjb25zdCBvcnBoYW5LZXlzID0gQXJyYXkuZnJvbShoYW5kbGVkUmVuYW1lcyk7XG4gICAgY2hhaW4oYXBwLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBvcnBoYW5LZXlzKSB7XG4gICAgICAgIGhhbmRsZWRSZW5hbWVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NBbmRSZW5hbWUoYXBwOiBBcHAsIG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChhcHAudmF1bHQuYWRhcHRlci5pbnNlbnNpdGl2ZSAmJiBuZXdQYXRoLnRvTG93ZXJDYXNlKCkgPT09IG9sZFBhdGgudG9Mb3dlckNhc2UoKSAmJiBkaXJuYW1lKG5ld1BhdGgpID09PSBkaXJuYW1lKG9sZFBhdGgpKSB7XG4gICAgY29uc3QgdGVtcFBhdGggPSBqb2luKGRpcm5hbWUob2xkUGF0aCksICdfX3RlbXBfXycgKyBiYXNlbmFtZShuZXdQYXRoKSk7XG4gICAgYXdhaXQgcHJvY2Vzc0FuZFJlbmFtZShhcHAsIG9sZFBhdGgsIHRlbXBQYXRoKTtcbiAgICBhd2FpdCBwcm9jZXNzQW5kUmVuYW1lKGFwcCwgdGVtcFBhdGgsIG5ld1BhdGgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcbiAgY29uc3QgcmVuYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgYXdhaXQgZmlsbFJlbmFtZU1hcChhcHAsIG9sZFBhdGgsIG5ld1BhdGgsIHJlbmFtZU1hcCk7XG5cbiAgY29uc3QgYmFja2xpbmtzTWFwID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+KCk7XG5cbiAgZm9yIChjb25zdCBvbGRQYXRoMiBvZiByZW5hbWVNYXAua2V5cygpKSB7XG4gICAgY29uc3QgY3VycmVudEJhY2tsaW5rc01hcCA9IGF3YWl0IGdldEJhY2tsaW5rc01hcChhcHAsIFtvbGRQYXRoMl0pO1xuICAgIGZvciAoY29uc3QgW2JhY2tsaW5rUGF0aCwgbGlua3NdIG9mIGN1cnJlbnRCYWNrbGlua3NNYXAuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBuZXdCYWNrbGlua1BhdGggPSByZW5hbWVNYXAuZ2V0KGJhY2tsaW5rUGF0aCkgPz8gYmFja2xpbmtQYXRoO1xuICAgICAgY29uc3QgbGlua0pzb25Ub1BhdGhNYXAgPSBiYWNrbGlua3NNYXAuZ2V0KG5ld0JhY2tsaW5rUGF0aCkgPz8gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIGJhY2tsaW5rc01hcC5zZXQobmV3QmFja2xpbmtQYXRoLCBsaW5rSnNvblRvUGF0aE1hcCk7XG4gICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgbGlua0pzb25Ub1BhdGhNYXAuc2V0KHRvSnNvbihsaW5rKSwgb2xkUGF0aDIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlbmFtZU1hcC5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBvbGRSZWxhdGVkUGF0aCA9IGVudHJ5WzBdO1xuICAgIGxldCBuZXdSZWxhdGVkUGF0aCA9IGVudHJ5WzFdO1xuICAgIG5ld1JlbGF0ZWRQYXRoID0gYXdhaXQgcmVuYW1lSGFuZGxlZChhcHAsIG9sZFJlbGF0ZWRQYXRoLCBuZXdSZWxhdGVkUGF0aCk7XG4gICAgcmVuYW1lTWFwLnNldChvbGRSZWxhdGVkUGF0aCwgbmV3UmVsYXRlZFBhdGgpO1xuICAgIHBhcmVudEZvbGRlcnMuYWRkKGRpcm5hbWUob2xkUmVsYXRlZFBhdGgpKTtcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IHBhcmVudEZvbGRlciBvZiBwYXJlbnRGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIHBhcmVudEZvbGRlcik7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbmV3QmFja2xpbmtQYXRoLCBsaW5rSnNvblRvUGF0aE1hcF0gb2YgYmFja2xpbmtzTWFwLmVudHJpZXMoKSkge1xuICAgIGF3YWl0IGVkaXRMaW5rcyhhcHAsIG5ld0JhY2tsaW5rUGF0aCwgKGxpbmspID0+IHtcbiAgICAgIGNvbnN0IG9sZFJlbGF0ZWRQYXRoID0gbGlua0pzb25Ub1BhdGhNYXAuZ2V0KHRvSnNvbihsaW5rKSk7XG4gICAgICBpZiAoIW9sZFJlbGF0ZWRQYXRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UmVsYXRlZFBhdGggPSByZW5hbWVNYXAuZ2V0KG9sZFJlbGF0ZWRQYXRoKTtcbiAgICAgIGlmICghbmV3UmVsYXRlZFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlTGluayh7XG4gICAgICAgIGFwcDogYXBwLFxuICAgICAgICBsaW5rLFxuICAgICAgICBwYXRoT3JGaWxlOiBuZXdSZWxhdGVkUGF0aCxcbiAgICAgICAgb2xkUGF0aE9yRmlsZTogb2xkUmVsYXRlZFBhdGgsXG4gICAgICAgIHNvdXJjZVBhdGhPckZpbGU6IG5ld0JhY2tsaW5rUGF0aCxcbiAgICAgICAgcmVuYW1lTWFwLFxuICAgICAgICBzaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzOiBzZXR0aW5ncy5zaG91bGRVcGRhdGVGaWxlbmFtZUFsaWFzZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQ2FudmFzRmlsZShuZXdQYXRoKSkge1xuICAgIGF3YWl0IHByb2Nlc3NXaXRoUmV0cnkoYXBwLCBuZXdQYXRoLCAoY29udGVudCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzRGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjYW52YXNEYXRhLm5vZGVzKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgIGlmICghbmV3UGF0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZmlsZSA9IG5ld1BhdGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFya2Rvd25GaWxlKG5ld1BhdGgpKSB7XG4gICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgYXBwOiBhcHAsXG4gICAgICBwYXRoT3JGaWxlOiBuZXdQYXRoLFxuICAgICAgb2xkUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgIHJlbmFtZU1hcCxcbiAgICAgIHNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXM6IHNldHRpbmdzLnNob3VsZFVwZGF0ZUZpbGVuYW1lQWxpYXNlc1xuICAgIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZURlbGV0ZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBEZWxldGUgJHtwYXRofWApO1xuICBpZiAoIWlzTm90ZShwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoYXBwKTtcbiAgaWYgKCFzZXR0aW5ncy5zaG91bGREZWxldGVPcnBoYW5BdHRhY2htZW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlID0gZGVsZXRlZE1ldGFkYXRhQ2FjaGVNYXAuZ2V0KHBhdGgpO1xuICBkZWxldGVkTWV0YWRhdGFDYWNoZU1hcC5kZWxldGUocGF0aCk7XG4gIGlmIChjYWNoZSkge1xuICAgIGNvbnN0IGxpbmtzID0gZ2V0QWxsTGlua3MoY2FjaGUpO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZShhcHAsIGxpbmssIHBhdGgpO1xuICAgICAgaWYgKCFhdHRhY2htZW50RmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTm90ZShhdHRhY2htZW50RmlsZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBhdHRhY2htZW50RmlsZSwgcGF0aCwgc2V0dGluZ3Muc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgcGF0aCk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgaWYgKCFhdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgZGVsZXRlU2FmZShhcHAsIGF0dGFjaG1lbnRGb2xkZXIsIHBhdGgsIGZhbHNlLCBzZXR0aW5ncy5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxsUmVuYW1lTWFwKGFwcDogQXBwLCBvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gIHJlbmFtZU1hcC5zZXQob2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgaWYgKCFpc05vdGUob2xkUGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKGFwcCk7XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChhcHAsIG9sZFBhdGgpO1xuICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGb2xkZXJcbiAgICA/IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKGFwcCwgbmV3UGF0aClcbiAgICA6IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoO1xuICBjb25zdCBkdW1teU9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoYXBwLCBqb2luKGRpcm5hbWUob2xkUGF0aCksICdEVU1NWV9GSUxFLm1kJykpO1xuXG4gIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCAmJiAhc2V0dGluZ3Muc2hvdWxkUmVuYW1lQXR0YWNobWVudEZpbGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb2xkQXR0YWNobWVudEZpbGVzOiBURmlsZVtdID0gW107XG5cbiAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBkdW1teU9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSB7XG4gICAgY29uc3Qgb2xkQ2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUoYXBwLCBvbGRQYXRoKTtcbiAgICBpZiAoIW9sZENhY2hlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb2xkTGluayBvZiBnZXRBbGxMaW5rcyhvbGRDYWNoZSkpIHtcbiAgICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKGFwcCwgb2xkTGluaywgb2xkUGF0aCk7XG4gICAgICBpZiAoIW9sZEF0dGFjaG1lbnRGaWxlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkQXR0YWNobWVudEZpbGUucGF0aC5zdGFydHNXaXRoKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoKSkge1xuICAgICAgICBjb25zdCBvbGRBdHRhY2htZW50QmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUoYXBwLCBvbGRBdHRhY2htZW50RmlsZSk7XG4gICAgICAgIGlmIChvbGRBdHRhY2htZW50QmFja2xpbmtzLmtleXMoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBvbGRBdHRhY2htZW50RmlsZXMucHVzaChvbGRBdHRhY2htZW50RmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKG9sZEF0dGFjaG1lbnRGb2xkZXIsIChvbGRBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgICAgaWYgKG9sZEF0dGFjaG1lbnRGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgb2xkQXR0YWNobWVudEZpbGVzLnB1c2gob2xkQXR0YWNobWVudEZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgb2xkQmFzZW5hbWUgPSBiYXNlbmFtZShvbGRQYXRoLCBleHRuYW1lKG9sZFBhdGgpKTtcbiAgY29uc3QgbmV3QmFzZW5hbWUgPSBiYXNlbmFtZShuZXdQYXRoLCBleHRuYW1lKG5ld1BhdGgpKTtcblxuICBmb3IgKGNvbnN0IG9sZEF0dGFjaG1lbnRGaWxlIG9mIG9sZEF0dGFjaG1lbnRGaWxlcykge1xuICAgIGlmIChpc05vdGUob2xkQXR0YWNobWVudEZpbGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgpO1xuICAgIGNvbnN0IG5ld0RpciA9IGpvaW4obmV3QXR0YWNobWVudEZvbGRlclBhdGgsIGRpcm5hbWUocmVsYXRpdmVQYXRoKSk7XG4gICAgY29uc3QgbmV3Q2hpbGRCYXNlbmFtZSA9IHNldHRpbmdzLnNob3VsZFJlbmFtZUF0dGFjaG1lbnRGaWxlc1xuICAgICAgPyBvbGRBdHRhY2htZW50RmlsZS5iYXNlbmFtZS5yZXBsYWNlQWxsKG9sZEJhc2VuYW1lLCBuZXdCYXNlbmFtZSlcbiAgICAgIDogb2xkQXR0YWNobWVudEZpbGUuYmFzZW5hbWU7XG4gICAgbGV0IG5ld0NoaWxkUGF0aCA9IGpvaW4obmV3RGlyLCBtYWtlRmlsZU5hbWUobmV3Q2hpbGRCYXNlbmFtZSwgb2xkQXR0YWNobWVudEZpbGUuZXh0ZW5zaW9uKSk7XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZpbGUucGF0aCA9PT0gbmV3Q2hpbGRQYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3Muc2hvdWxkRGVsZXRlQ29uZmxpY3RpbmdBdHRhY2htZW50cykge1xuICAgICAgY29uc3QgbmV3Q2hpbGRGaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIG5ld0NoaWxkUGF0aCk7XG4gICAgICBpZiAobmV3Q2hpbGRGaWxlKSB7XG4gICAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUobmV3Q2hpbGRGaWxlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Q2hpbGRQYXRoID0gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIG5ld0NoaWxkQmFzZW5hbWUpLCBvbGRBdHRhY2htZW50RmlsZS5leHRlbnNpb24pO1xuICAgIH1cbiAgICByZW5hbWVNYXAuc2V0KG9sZEF0dGFjaG1lbnRGaWxlLnBhdGgsIG5ld0NoaWxkUGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2V0dGluZ3MoYXBwOiBBcHApOiBQYXJ0aWFsPFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncz4ge1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyc01hcCA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwKGFwcCk7XG4gIGNvbnN0IHNldHRpbmdzQnVpbGRlcnMgPSBBcnJheS5mcm9tKHJlbmFtZURlbGV0ZUhhbmRsZXJzTWFwLnZhbHVlcygpKS5yZXZlcnNlKCk7XG5cbiAgY29uc3Qgc2V0dGluZ3M6IFBhcnRpYWw8UmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzPiA9IHt9O1xuICBmb3IgKGNvbnN0IHNldHRpbmdzQnVpbGRlciBvZiBzZXR0aW5nc0J1aWxkZXJzKSB7XG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSBzZXR0aW5nc0J1aWxkZXIoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTZXR0aW5ncykgYXMgW2tleW9mIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncywgYm9vbGVhbl1bXSkge1xuICAgICAgc2V0dGluZ3Nba2V5XSB8fD0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNldHRpbmdzO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVNZXRhZGF0YURlbGV0ZWQoZmlsZTogVEFic3RyYWN0RmlsZSwgcHJldkNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKGlzTWFya2Rvd25GaWxlKGZpbGUpICYmIHByZXZDYWNoZSkge1xuICAgIGRlbGV0ZWRNZXRhZGF0YUNhY2hlTWFwLnNldChmaWxlLnBhdGgsIHByZXZDYWNoZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUtleShvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtvbGRQYXRofSAtPiAke25ld1BhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuYW1lSGFuZGxlZChhcHA6IEFwcCwgb2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBuZXdQYXRoID0gYXdhaXQgcmVuYW1lU2FmZShhcHAsIGdldEZpbGUoYXBwLCBvbGRQYXRoKSwgbmV3UGF0aCk7XG4gIGNvbnN0IGtleSA9IG1ha2VLZXkob2xkUGF0aCwgbmV3UGF0aCk7XG4gIGhhbmRsZWRSZW5hbWVzLmFkZChrZXkpO1xuICByZXR1cm4gbmV3UGF0aDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0Esc0JBSU87QUFHUCxvQkFBdUI7QUFDdkIsa0JBT087QUFDUCxpQkFBeUM7QUFDekMsNEJBQXdDO0FBQ3hDLDRCQUFzQjtBQUN0Qix3QkFPTztBQUNQLGtCQUtPO0FBQ1AsMkJBS087QUFDUCxtQkFLTztBQXZEUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFvREEsTUFBTSwwQkFBMEIsb0JBQUksSUFBNEI7QUFDaEUsTUFBTSxp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LE9BQU8sQ0FBQztBQUV0RCxhQUFXLHFCQUFxQixvQkFBb0I7QUFDbEQsWUFBSSwwQkFBTyxpQkFBaUIsR0FBRztBQUM3QjtBQUFBLElBQ0Y7QUFDQSxVQUFNLG1CQUFlLHNCQUFTLHlCQUF5QixrQkFBa0IsSUFBSTtBQUM3RSxVQUFNLGFBQVMsa0JBQUssNkJBQXlCLHFCQUFRLFlBQVksQ0FBQztBQUNsRSxVQUFNLG1CQUFtQixTQUFTLDhCQUM5QixrQkFBa0IsU0FBUyxXQUFXLGFBQWEsV0FBVyxJQUM5RCxrQkFBa0I7QUFDdEIsUUFBSSxtQkFBZSxrQkFBSyxZQUFRLDBCQUFhLGtCQUFrQixrQkFBa0IsU0FBUyxDQUFDO0FBRTNGLFFBQUksa0JBQWtCLFNBQVMsY0FBYztBQUMzQztBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVMsb0NBQW9DO0FBQy9DLFlBQU0sbUJBQWUsaUNBQWMsS0FBSyxZQUFZO0FBQ3BELFVBQUksY0FBYztBQUNoQixjQUFNLElBQUksWUFBWSxVQUFVLFlBQVk7QUFBQSxNQUM5QztBQUFBLElBQ0YsT0FBTztBQUNMLHFCQUFlLElBQUksTUFBTSxxQkFBaUIsa0JBQUssUUFBUSxnQkFBZ0IsR0FBRyxrQkFBa0IsU0FBUztBQUFBLElBQ3ZHO0FBQ0EsY0FBVSxJQUFJLGtCQUFrQixNQUFNLFlBQVk7QUFBQSxFQUNwRDtBQUNGO0FBRUEsU0FBUyxZQUFZLEtBQWdEO0FBQ25FLFFBQU0sMEJBQTBCLDJCQUEyQixHQUFHO0FBQzlELFFBQU0sbUJBQW1CLE1BQU0sS0FBSyx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsUUFBUTtBQUU5RSxRQUFNLFdBQWlELENBQUM7QUFDeEQsYUFBVyxtQkFBbUIsa0JBQWtCO0FBQzlDLFVBQU0sY0FBYyxnQkFBZ0I7QUFDcEMsZUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxXQUFXLEdBQXFEO0FBQ3hHLGVBQVMsR0FBRyxNQUFNO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxzQkFBc0IsTUFBcUIsV0FBd0M7QUFDMUYsVUFBSSxrQ0FBZSxJQUFJLEtBQUssV0FBVztBQUNyQyw0QkFBd0IsSUFBSSxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQ2xEO0FBQ0Y7QUFFQSxTQUFTLFFBQVEsU0FBaUIsU0FBeUI7QUFDekQsU0FBTyxHQUFHLE9BQU8sT0FBTyxPQUFPO0FBQ2pDO0FBRUEsZUFBZSxjQUFjLEtBQVUsU0FBaUIsU0FBa0M7QUFDeEYsWUFBVSxVQUFNLHlCQUFXLFNBQUssMkJBQVEsS0FBSyxPQUFPLEdBQUcsT0FBTztBQUM5RCxRQUFNLE1BQU0sUUFBUSxTQUFTLE9BQU87QUFDcEMsaUJBQWUsSUFBSSxHQUFHO0FBQ3RCLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsia2V5IiwgIm5ld1BhdGgiXQp9Cg==
|