obsidian-dev-utils 3.16.0 → 3.18.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 +10 -0
- package/dist/lib/obsidian/App.cjs +17 -3
- package/dist/lib/obsidian/App.d.ts +16 -0
- package/dist/lib/obsidian/Link.cjs +44 -20
- package/dist/lib/obsidian/Link.d.ts +47 -1
- package/dist/lib/obsidian/RenameDeleteHandler.cjs +29 -1
- package/dist/lib/obsidian/TFile.cjs +9 -4
- package/dist/lib/obsidian/TFile.d.ts +4 -1
- package/dist/lib/obsidian/TFolder.cjs +9 -4
- package/dist/lib/obsidian/TFolder.d.ts +4 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -25,7 +25,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
25
25
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
26
26
|
var App_exports = {};
|
27
27
|
__export(App_exports, {
|
28
|
-
|
28
|
+
ValueWrapper: () => ValueWrapper,
|
29
|
+
getApp: () => getApp,
|
30
|
+
getObsidianDevUtilsState: () => getObsidianDevUtilsState
|
29
31
|
});
|
30
32
|
module.exports = __toCommonJS(App_exports);
|
31
33
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
@@ -56,8 +58,20 @@ function getApp() {
|
|
56
58
|
}
|
57
59
|
throw new Error("Obsidian app not found");
|
58
60
|
}
|
61
|
+
class ValueWrapper {
|
62
|
+
constructor(value) {
|
63
|
+
this.value = value;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
function getObsidianDevUtilsState(app, key, defaultValue) {
|
67
|
+
const sharedStateWrapper = app;
|
68
|
+
const sharedState = sharedStateWrapper.obsidianDevUtilsState ??= {};
|
69
|
+
return sharedState[key] ??= new ValueWrapper(defaultValue);
|
70
|
+
}
|
59
71
|
// Annotate the CommonJS export names for ESM import in node:
|
60
72
|
0 && (module.exports = {
|
61
|
-
|
73
|
+
ValueWrapper,
|
74
|
+
getApp,
|
75
|
+
getObsidianDevUtilsState
|
62
76
|
});
|
63
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpPT57aWYodHlwZW9mIF9fZmlsZW5hbWUhPT1cInN0cmluZ1wiKXtyZXR1cm4gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZil9cmV0dXJuIHJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpfSkoKTtcbnZhciBfX3Byb2Nlc3MgPSBnbG9iYWxUaGlzWydwcm9jZXNzJ10gPz8ge1xuICBcImN3ZFwiOiAoKT0+
|
77
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpPT57aWYodHlwZW9mIF9fZmlsZW5hbWUhPT1cInN0cmluZ1wiKXtyZXR1cm4gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZil9cmV0dXJuIHJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpfSkoKTtcbnZhciBfX3Byb2Nlc3MgPSBnbG9iYWxUaGlzWydwcm9jZXNzJ10gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gQXBwXG4gKiBQcm92aWRlcyBhIHV0aWxpdHkgdG8gcmV0cmlldmUgdGhlIE9ic2lkaWFuIGBBcHBgIGluc3RhbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIFdyYXBwZXIgdHlwZSBmb3IgYWNjZXNzaW5nIHRoZSBgQXBwYCBpbnN0YW5jZSBnbG9iYWxseS5cbiAqL1xuaW50ZXJmYWNlIEFwcFdyYXBwZXIge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBPYnNpZGlhbiBgQXBwYCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JzaWRpYW4gYEFwcGAgaW5zdGFuY2UuXG4gKlxuICogQHJldHVybnMgVGhlIGBBcHBgIGluc3RhbmNlLlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBgQXBwYCBpbnN0YW5jZSBjYW5ub3QgYmUgZm91bmQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWZpeC1yZXF1aXJlLW1vZHVsZXMvP3RhYj1yZWFkbWUtb3YtZmlsZSNvYnNpZGlhbmFwcC1tb2R1bGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHAoKTogQXBwIHtcbiAgbGV0IGNhblJlcXVpcmU6IGJvb2xlYW47XG4gIHRyeSB7XG4gICAgZ2xvYmFsVGhpcy5yZXF1aXJlLnJlc29sdmUoJ29ic2lkaWFuL2FwcCcpO1xuICAgIGNhblJlcXVpcmUgPSB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICBjYW5SZXF1aXJlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoY2FuUmVxdWlyZSkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnJlcXVpcmUoJ29ic2lkaWFuL2FwcCcpIGFzIEFwcDtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IChnbG9iYWxUaGlzIGFzIFBhcnRpYWw8QXBwV3JhcHBlcj4pLmFwcDtcbiAgaWYgKGFwcCkge1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ09ic2lkaWFuIGFwcCBub3QgZm91bmQnKTtcbn1cblxuaW50ZXJmYWNlIE9ic2lkaWFuRGV2VXRpbHNTdGF0ZVdyYXBwZXIge1xuICBvYnNpZGlhbkRldlV0aWxzU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFdyYXBwZXIgdHlwZSBmb3Igc3RvcmluZyBzaGFyZWQgc3RhdGUgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbHVlV3JhcHBlcjxUPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQpIHsgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBvciBjcmVhdGVzIGEgc2hhcmVkIHN0YXRlIHdyYXBwZXIgb2JqZWN0IGZvciBhIGdpdmVuIGtleSBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgb3IgcmV0cmlldmUgdGhlIHNoYXJlZCBzdGF0ZS5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIHNoYXJlZCBzdGF0ZSBkb2VzIG5vdCBleGlzdC5cbiAqIEByZXR1cm5zIFRoZSBWYWx1ZVdyYXBwZXIgb2JqZWN0IHRoYXQgc3RvcmVzIHRoZSBzaGFyZWQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8VD4oYXBwOiBBcHAsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBWYWx1ZVdyYXBwZXI8VD4ge1xuICBjb25zdCBzaGFyZWRTdGF0ZVdyYXBwZXIgPSBhcHAgYXMgUGFydGlhbDxPYnNpZGlhbkRldlV0aWxzU3RhdGVXcmFwcGVyPjtcbiAgY29uc3Qgc2hhcmVkU3RhdGUgPSBzaGFyZWRTdGF0ZVdyYXBwZXIub2JzaWRpYW5EZXZVdGlsc1N0YXRlID8/PSB7fTtcbiAgcmV0dXJuIChzaGFyZWRTdGF0ZVtrZXldID8/PSBuZXcgVmFsdWVXcmFwcGVyPFQ+KGRlZmF1bHRWYWx1ZSkpIGFzIFZhbHVlV3JhcHBlcjxUPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSTtBQUFDLE1BQUcsT0FBTyxlQUFhLFVBQVM7QUFBQyxXQUFPLElBQUksSUFBSSxPQUFPLFNBQVMsSUFBSTtBQUFBLEVBQUM7QUFBQyxTQUFPLFFBQVEsVUFBVSxFQUFFLGNBQWMsVUFBVTtBQUFDLEdBQUc7QUFDNUwsSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQTBCTyxTQUFTLFNBQWM7QUFDNUIsTUFBSTtBQUNKLE1BQUk7QUFDRixlQUFXLFFBQVEsUUFBUSxjQUFjO0FBQ3pDLGlCQUFhO0FBQUEsRUFDZixRQUFRO0FBQ04saUJBQWE7QUFBQSxFQUNmO0FBRUEsTUFBSSxZQUFZO0FBQ2QsV0FBTyxXQUFXLFFBQVEsY0FBYztBQUFBLEVBQzFDO0FBRUEsUUFBTSxNQUFPLFdBQW1DO0FBQ2hELE1BQUksS0FBSztBQUNQLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQzFDO0FBU08sTUFBTSxhQUFnQjtBQUFBLEVBQ3BCLFlBQW1CLE9BQVU7QUFBVjtBQUFBLEVBQVk7QUFDeEM7QUFVTyxTQUFTLHlCQUE0QixLQUFVLEtBQWEsY0FBa0M7QUFDbkcsUUFBTSxxQkFBcUI7QUFDM0IsUUFBTSxjQUFjLG1CQUFtQiwwQkFBMEIsQ0FBQztBQUNsRSxTQUFRLFlBQVksR0FBRyxNQUFNLElBQUksYUFBZ0IsWUFBWTtBQUMvRDsiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -12,3 +12,19 @@ import type { App } from 'obsidian';
|
|
12
12
|
* @see {@link https://github.com/mnaoumov/obsidian-fix-require-modules/?tab=readme-ov-file#obsidianapp-module}
|
13
13
|
*/
|
14
14
|
export declare function getApp(): App;
|
15
|
+
/**
|
16
|
+
* Wrapper type for storing shared state in the Obsidian app.
|
17
|
+
*/
|
18
|
+
export declare class ValueWrapper<T> {
|
19
|
+
value: T;
|
20
|
+
constructor(value: T);
|
21
|
+
}
|
22
|
+
/**
|
23
|
+
* Retrieves or creates a shared state wrapper object for a given key in the Obsidian app.
|
24
|
+
*
|
25
|
+
* @param app - The Obsidian app instance.
|
26
|
+
* @param key - The key to store or retrieve the shared state.
|
27
|
+
* @param defaultValue - The default value to use if the shared state does not exist.
|
28
|
+
* @returns The ValueWrapper object that stores the shared state.
|
29
|
+
*/
|
30
|
+
export declare function getObsidianDevUtilsState<T>(app: App, key: string, defaultValue: T): ValueWrapper<T>;
|
@@ -30,6 +30,10 @@ __export(Link_exports, {
|
|
30
30
|
generateMarkdownLink: () => generateMarkdownLink,
|
31
31
|
getAlias: () => getAlias,
|
32
32
|
splitSubpath: () => splitSubpath,
|
33
|
+
testAngleBrackets: () => testAngleBrackets,
|
34
|
+
testEmbed: () => testEmbed,
|
35
|
+
testLeadingDot: () => testLeadingDot,
|
36
|
+
testWikilink: () => testWikilink,
|
33
37
|
updateLink: () => updateLink,
|
34
38
|
updateLinksInFile: () => updateLinksInFile
|
35
39
|
});
|
@@ -74,7 +78,7 @@ async function updateLinksInFile(options) {
|
|
74
78
|
embedOnlyLinks
|
75
79
|
} = options;
|
76
80
|
await editLinks(app, pathOrFile, (link) => {
|
77
|
-
const isEmbedLink = link.original
|
81
|
+
const isEmbedLink = testEmbed(link.original);
|
78
82
|
if (embedOnlyLinks !== void 0 && embedOnlyLinks !== isEmbedLink) {
|
79
83
|
return;
|
80
84
|
}
|
@@ -113,7 +117,7 @@ function updateLink(options) {
|
|
113
117
|
let file = (0, import_TFile.getFile)(app, pathOrFile);
|
114
118
|
const sourcePath = (0, import_TAbstractFile.getPath)(source);
|
115
119
|
const oldPath = (0, import_TAbstractFile.getPath)(oldPathOrFile);
|
116
|
-
const isWikilink = link.original
|
120
|
+
const isWikilink = testWikilink(link.original) && forceMarkdownLinks !== true;
|
117
121
|
const { subpath } = splitSubpath(link.link);
|
118
122
|
const newPath = renameMap.get(file.path);
|
119
123
|
const alias = getAlias({
|
@@ -133,10 +137,8 @@ function updateLink(options) {
|
|
133
137
|
sourcePathOrFile: sourcePath,
|
134
138
|
subpath,
|
135
139
|
alias,
|
136
|
-
|
137
|
-
|
138
|
-
useAngleBrackets: link.original.includes("](<") ? true : void 0,
|
139
|
-
useLeadingDot: link.original.includes("](<./") || link.original.includes("](./") ? true : void 0
|
140
|
+
isWikilink: forceMarkdownLinks ? false : void 0,
|
141
|
+
originalLink: link.original
|
140
142
|
});
|
141
143
|
return newLink;
|
142
144
|
}
|
@@ -178,40 +180,46 @@ function getAlias(options) {
|
|
178
180
|
}
|
179
181
|
function generateMarkdownLink(options) {
|
180
182
|
const { app } = options;
|
181
|
-
const
|
182
|
-
const
|
183
|
-
|
184
|
-
|
183
|
+
const configurableDefaultOptionsFn = app.fileManager.generateMarkdownLink.defaultOptionsFn ?? (() => ({}));
|
184
|
+
const configurableDefaultOptions = configurableDefaultOptionsFn();
|
185
|
+
const DEFAULT_OPTIONS = {
|
186
|
+
allowEmptyEmbedAlias: true
|
187
|
+
};
|
188
|
+
options = { ...DEFAULT_OPTIONS, ...configurableDefaultOptions, ...options };
|
189
|
+
const file = (0, import_TFile.getFile)(app, options.pathOrFile, options.allowNonExistingFile);
|
185
190
|
return (0, import_MetadataCache.tempRegisterFileAndRun)(app, file, () => {
|
186
191
|
const sourcePath = (0, import_TAbstractFile.getPath)(options.sourcePathOrFile);
|
187
192
|
const subpath = options.subpath ?? "";
|
188
193
|
let alias = options.alias ?? "";
|
189
|
-
const isEmbed = options.isEmbed ?? !(0, import_TAbstractFile.isMarkdownFile)(file);
|
190
|
-
const isWikilink = options.isWikilink ?? (0, import_ObsidianSettings.shouldUseWikilinks)(app);
|
194
|
+
const isEmbed = options.isEmbed ?? (options.originalLink ? testEmbed(options.originalLink) : void 0) ?? !(0, import_TAbstractFile.isMarkdownFile)(file);
|
195
|
+
const isWikilink = options.isWikilink ?? (options.originalLink ? testWikilink(options.originalLink) : void 0) ?? (0, import_ObsidianSettings.shouldUseWikilinks)(app);
|
191
196
|
const forceRelativePath = options.forceRelativePath ?? (0, import_ObsidianSettings.shouldUseRelativeLinks)(app);
|
197
|
+
const useLeadingDot = options.useLeadingDot ?? (options.originalLink ? testLeadingDot(options.originalLink) : void 0) ?? false;
|
198
|
+
const useAngleBrackets = options.useAngleBrackets ?? (options.originalLink ? testAngleBrackets(options.originalLink) : void 0) ?? false;
|
192
199
|
let linkText = file.path === sourcePath && subpath ? subpath : forceRelativePath ? (0, import_Path.relative)((0, import_Path.dirname)(sourcePath), isWikilink ? (0, import_TAbstractFile.trimMarkdownExtension)(file) : file.path) + subpath : app.metadataCache.fileToLinktext(file, sourcePath, isWikilink) + subpath;
|
193
|
-
if (forceRelativePath &&
|
200
|
+
if (forceRelativePath && useLeadingDot && !linkText.startsWith(".") && !linkText.startsWith("#")) {
|
194
201
|
linkText = "./" + linkText;
|
195
202
|
}
|
203
|
+
const embedPrefix = isEmbed ? "!" : "";
|
196
204
|
if (!isWikilink) {
|
197
|
-
if (
|
205
|
+
if (useAngleBrackets) {
|
198
206
|
linkText = `<${linkText}>`;
|
199
207
|
} else {
|
200
208
|
linkText = linkText.replace(SPECIAL_LINK_SYMBOLS_REGEXP, function(specialLinkSymbol) {
|
201
209
|
return encodeURIComponent(specialLinkSymbol);
|
202
210
|
});
|
203
211
|
}
|
204
|
-
if (!isEmbed) {
|
205
|
-
|
206
|
-
} else {
|
207
|
-
return ``;
|
212
|
+
if (!alias && (!isEmbed || !options.allowEmptyEmbedAlias)) {
|
213
|
+
alias = file.basename;
|
208
214
|
}
|
215
|
+
return `${embedPrefix}[${alias}](${linkText})`;
|
209
216
|
} else {
|
210
217
|
if (alias && alias.toLowerCase() === linkText.toLowerCase()) {
|
211
218
|
linkText = alias;
|
212
219
|
alias = "";
|
213
220
|
}
|
214
|
-
|
221
|
+
const aliasPart = alias ? `|${alias}` : "";
|
222
|
+
return `${embedPrefix}[[${linkText}${aliasPart}]]`;
|
215
223
|
}
|
216
224
|
});
|
217
225
|
}
|
@@ -237,6 +245,18 @@ async function editLinks(app, pathOrFile, linkConverter, retryOptions = {}) {
|
|
237
245
|
return changes;
|
238
246
|
}, retryOptions);
|
239
247
|
}
|
248
|
+
function testEmbed(link) {
|
249
|
+
return link.startsWith(" || link.includes("](<./");
|
256
|
+
}
|
257
|
+
function testAngleBrackets(link) {
|
258
|
+
return link.includes("](<");
|
259
|
+
}
|
240
260
|
// Annotate the CommonJS export names for ESM import in node:
|
241
261
|
0 && (module.exports = {
|
242
262
|
editLinks,
|
@@ -244,7 +264,11 @@ async function editLinks(app, pathOrFile, linkConverter, retryOptions = {}) {
|
|
244
264
|
generateMarkdownLink,
|
245
265
|
getAlias,
|
246
266
|
splitSubpath,
|
267
|
+
testAngleBrackets,
|
268
|
+
testEmbed,
|
269
|
+
testLeadingDot,
|
270
|
+
testWikilink,
|
247
271
|
updateLink,
|
248
272
|
updateLinksInFile
|
249
273
|
});
|
250
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIExpbmtcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgaGFuZGxpbmcgYW5kIHVwZGF0aW5nIGxpbmtzIHdpdGhpbiBPYnNpZGlhbiB2YXVsdHMuIEl0IGluY2x1ZGVzXG4gKiBmdW5jdGlvbnMgdG8gc3BsaXQgcGF0aHMsIHVwZGF0ZSBsaW5rcyBpbiBmaWxlcywgYW5kIGdlbmVyYXRlIG1hcmtkb3duIGxpbmtzIHdpdGggdmFyaW91cyBvcHRpb25zLlxuICogVGhlIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aCBPYnNpZGlhbidzIEFQSSB0byBlbnN1cmUgdGhhdCBsaW5rcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSB2YXVsdC5cbiAqKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFJlZmVyZW5jZUNhY2hlLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUge1xuICBNYXliZVByb21pc2UsXG4gIFJldHJ5T3B0aW9uc1xufSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0aHJvd0V4cHJlc3Npb24gfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldENhY2hlU2FmZSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB7IGdldEZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUNoYW5nZSB9IGZyb20gJy4vVmF1bHQudHMnO1xuaW1wb3J0IHsgYXBwbHlGaWxlQ2hhbmdlcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGxpbmsgcGF0aC5cbiAgICovXG4gIGxpbmtQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoLlxuICAgKi9cbiAgc3VicGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gVGhlIGxpbmsgdG8gc3BsaXQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTdWJwYXRoKGxpbms6IHN0cmluZyk6IFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIGNvbnN0IFNVQlBBVEhfU0VQQVJBVE9SID0gJyMnO1xuICBjb25zdCBbbGlua1BhdGggPSAnJywgc3VicGF0aF0gPSBub3JtYWxpemUobGluaykuc3BsaXQoU1VCUEFUSF9TRVBBUkFUT1IpO1xuICByZXR1cm4ge1xuICAgIGxpbmtQYXRoLFxuICAgIHN1YnBhdGg6IHN1YnBhdGggPyBTVUJQQVRIX1NFUEFSQVRPUiArIHN1YnBhdGggOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB1cGRhdGluZyBsaW5rcyBpbiBhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBvYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGUgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIG9sZCBhbmQgbmV3IHBhdGhzIGZvciByZW5hbWluZyBsaW5rcy5cbiAgICovXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgZm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIGVtYmVkT25seUxpbmtzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGZpbGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdXBkYXRpbmcgdGhlIGxpbmtzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlua3MgYXJlIHVwZGF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVMaW5rc0luRmlsZShvcHRpb25zOiBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlLFxuICAgIG9sZFBhdGhPckZpbGUsXG4gICAgcmVuYW1lTWFwLFxuICAgIGZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBlbWJlZE9ubHlMaW5rc1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdExpbmtzKGFwcCwgcGF0aE9yRmlsZSwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IGxpbmsub3JpZ2luYWwuc3RhcnRzV2l0aCgnIScpO1xuICAgIGlmIChlbWJlZE9ubHlMaW5rcyAhPT0gdW5kZWZpbmVkICYmIGVtYmVkT25seUxpbmtzICE9PSBpc0VtYmVkTGluaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gY29udmVydExpbmsoYXBwLCBsaW5rLCBwYXRoT3JGaWxlLCBvbGRQYXRoT3JGaWxlLCByZW5hbWVNYXAsIGZvcmNlTWFya2Rvd25MaW5rcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbGluayB0byBhIG5ldyBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2UgZmlsZS5cbiAqIEBwYXJhbSBvbGRQYXRoT3JGaWxlIC0gVGhlIG9sZCBwYXRoIG9mIHRoZSBsaW5rLlxuICogQHBhcmFtIHJlbmFtZU1hcCAtIEEgbWFwIG9mIG9sZCBwYXRocyB0byBuZXcgcGF0aHMgZm9yIHJlbmFtaW5nLlxuICogQHBhcmFtIGZvcmNlTWFya2Rvd25MaW5rcyAtIE9wdGlvbmFsIGZsYWcgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGxpbmsuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMaW5rKGFwcDogQXBwLCBsaW5rOiBSZWZlcmVuY2VDYWNoZSwgc291cmNlOiBQYXRoT3JGaWxlLCBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4sIGZvcmNlTWFya2Rvd25MaW5rcz86IGJvb2xlYW4pOiBzdHJpbmcge1xuICBvbGRQYXRoT3JGaWxlIHx8PSBnZXRQYXRoKHNvdXJjZSk7XG4gIHJldHVybiB1cGRhdGVMaW5rKHtcbiAgICBhcHAsXG4gICAgbGluayxcbiAgICBwYXRoT3JGaWxlOiBleHRyYWN0TGlua0ZpbGUoYXBwLCBsaW5rLCBvbGRQYXRoT3JGaWxlKSxcbiAgICBvbGRQYXRoT3JGaWxlLFxuICAgIHNvdXJjZVBhdGhPckZpbGU6IHNvdXJjZSxcbiAgICByZW5hbWVNYXAsXG4gICAgZm9yY2VNYXJrZG93bkxpbmtzXG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGxpbmsuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBsaW5rIC0gVGhlIHJlZmVyZW5jZSBjYWNoZSBmb3IgdGhlIGxpbmsuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlua0ZpbGUoYXBwOiBBcHAsIGxpbms6IFJlZmVyZW5jZUNhY2hlLCBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogVEZpbGUgfCBudWxsIHtcbiAgY29uc3QgeyBsaW5rUGF0aCB9ID0gc3BsaXRTdWJwYXRoKGxpbmsubGluayk7XG4gIHJldHVybiBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChsaW5rUGF0aCwgZ2V0UGF0aChvbGRQYXRoT3JGaWxlKSk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdXBkYXRpbmcgYSBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpbmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSBjYWNoZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBsaW5rOiBSZWZlcmVuY2VDYWNoZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLlxuICAgKi9cbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgc291cmNlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb2xkIGFuZCBuZXcgZmlsZSBwYXRocy5cbiAgICovXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSBtYXJrZG93biBsaW5rcy5cbiAgICovXG4gIGZvcmNlTWFya2Rvd25MaW5rcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVXBkYXRlcyBhIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdXBkYXRpbmcgdGhlIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGluayhvcHRpb25zOiBVcGRhdGVMaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbGluayxcbiAgICBwYXRoT3JGaWxlLFxuICAgIG9sZFBhdGhPckZpbGUsXG4gICAgc291cmNlUGF0aE9yRmlsZTogc291cmNlLFxuICAgIHJlbmFtZU1hcCxcbiAgICBmb3JjZU1hcmtkb3duTGlua3NcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICghcGF0aE9yRmlsZSkge1xuICAgIHJldHVybiBsaW5rLm9yaWdpbmFsO1xuICB9XG4gIGxldCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUpO1xuICBjb25zdCBzb3VyY2VQYXRoID0gZ2V0UGF0aChzb3VyY2UpO1xuICBjb25zdCBvbGRQYXRoID0gZ2V0UGF0aChvbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgaXNXaWtpbGlua1xuICAgID0gbGluay5vcmlnaW5hbC5pbmNsdWRlcygnW1snKSAmJiBmb3JjZU1hcmtkb3duTGlua3MgIT09IHRydWU7XG4gIGNvbnN0IHsgc3VicGF0aCB9ID0gc3BsaXRTdWJwYXRoKGxpbmsubGluayk7XG5cbiAgY29uc3QgbmV3UGF0aCA9IHJlbmFtZU1hcC5nZXQoZmlsZS5wYXRoKTtcbiAgY29uc3QgYWxpYXMgPSBnZXRBbGlhcyh7XG4gICAgYXBwLFxuICAgIGRpc3BsYXlUZXh0OiBsaW5rLmRpc3BsYXlUZXh0LFxuICAgIGZpbGU6IHBhdGhPckZpbGUsXG4gICAgb3RoZXJQYXRoczogW29sZFBhdGgsIG5ld1BhdGhdLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgaXNXaWtpbGlua1xuICB9KTtcblxuICBpZiAobmV3UGF0aCkge1xuICAgIGZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKGFwcC52YXVsdCwgbmV3UGF0aCk7XG4gIH1cblxuICBjb25zdCBuZXdMaW5rID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoe1xuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlOiBmaWxlLFxuICAgIHNvdXJjZVBhdGhPckZpbGU6IHNvdXJjZVBhdGgsXG4gICAgc3VicGF0aCxcbiAgICBhbGlhcyxcbiAgICBpc0VtYmVkOiBsaW5rLm9yaWdpbmFsLnN0YXJ0c1dpdGgoJyEnKSxcbiAgICBpc1dpa2lsaW5rLFxuICAgIHVzZUFuZ2xlQnJhY2tldHM6IGxpbmsub3JpZ2luYWwuaW5jbHVkZXMoJ10oPCcpID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICB1c2VMZWFkaW5nRG90OiBsaW5rLm9yaWdpbmFsLmluY2x1ZGVzKCddKDwuLycpIHx8IGxpbmsub3JpZ2luYWwuaW5jbHVkZXMoJ10oLi8nKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgfSk7XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdldHRpbmcgdGhlIGFsaWFzIG9mIGEgbGluay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBbGlhc09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSB0ZXh0IG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgZGlzcGxheVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbGluay5cbiAgICovXG4gIGZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIE90aGVyIHBhdGhzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay5cbiAgICovXG4gIG90aGVyUGF0aHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgd2lraWxpbmsuXG4gICAqL1xuICBpc1dpa2lsaW5rPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFsaWFzIGZvciBhIGdpdmVuIGxpbmsuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgcmV0cmlldmluZyB0aGUgYWxpYXMuXG4gKiBAcmV0dXJucyBUaGUgYWxpYXMgb2YgdGhlIGxpbmssIG9yIHVuZGVmaW5lZCBpZiBzaG91bGQgYmUgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsaWFzKG9wdGlvbnM6IEdldEFsaWFzT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZGlzcGxheVRleHQsXG4gICAgZmlsZTogcGF0aE9yRmlsZSxcbiAgICBvdGhlclBhdGhzLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgaXNXaWtpbGlua1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKGlzV2lraWxpbmsgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlUZXh0O1xuICB9XG5cbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlKTtcblxuICBpZiAoIWRpc3BsYXlUZXh0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuRGlzcGxheVRleHQgPSBub3JtYWxpemVQYXRoKGRpc3BsYXlUZXh0LnNwbGl0KCcgPiAnKVswXSA/PyB0aHJvd0V4cHJlc3Npb24obmV3IEVycm9yKCdJbnZhbGlkIGRpc3BsYXkgdGV4dCcpKSkucmVwbGFjZSgvXFwuXFwvL2csICcnKTtcblxuICBmb3IgKGNvbnN0IHBhdGggb2YgW2ZpbGUucGF0aCwgLi4ub3RoZXJQYXRoc10pIHtcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKHBhdGgpO1xuICAgIGNvbnN0IGZpbGVOYW1lV2l0aEV4dGVuc2lvbiA9IGJhc2VuYW1lKHBhdGgpO1xuICAgIGNvbnN0IGZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiA9IGJhc2VuYW1lKHBhdGgsIGV4dGVuc2lvbik7XG4gICAgaWYgKGNsZWFuRGlzcGxheVRleHQgPT09IHBhdGggfHwgY2xlYW5EaXNwbGF5VGV4dCA9PT0gZmlsZU5hbWVXaXRoRXh0ZW5zaW9uIHx8IGNsZWFuRGlzcGxheVRleHQgPT09IGZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IG9taXRNZEV4dGVuc2lvbiBvZiBbdHJ1ZSwgZmFsc2VdKSB7XG4gICAgY29uc3QgbGlua1RleHQgPSBhcHAubWV0YWRhdGFDYWNoZS5maWxlVG9MaW5rdGV4dChmaWxlLCBzb3VyY2VQYXRoLCBvbWl0TWRFeHRlbnNpb24pO1xuICAgIGlmIChjbGVhbkRpc3BsYXlUZXh0ID09PSBsaW5rVGV4dCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGxheVRleHQ7XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rRGVmYXVsdE9wdGlvbnNXcmFwcGVyIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBkZWZhdWx0T3B0aW9uc0ZuPzogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIGxpbmsgdG8uXG4gICAqL1xuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggb2YgdGhlIGxpbmsuXG4gICAqL1xuICBzb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VicGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHN1YnBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBhbGlhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBzaG91bGQgYmUgcmVsYXRpdmUuIElmIG5vdCBwcm92aWRlZCBvciBgZmFsc2VgLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBPYnNpZGlhbiBzZXR0aW5ncy5cbiAgICovXG4gIGZvcmNlUmVsYXRpdmVQYXRoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgdXNlTGVhZGluZ0RvdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBzaG91bGQgdXNlIGFuZ2xlIGJyYWNrZXRzLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBIYXMgbm8gZWZmZWN0IGlmIGBpc1dpa2lsaW5rYCBpcyBgdHJ1ZWBcbiAgICovXG4gIHVzZUFuZ2xlQnJhY2tldHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcmtkb3duIGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgbWFya2Rvd24gbGluay5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgbWFya2Rvd24gbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKG9wdGlvbnM6IEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zRm4gPSAoYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rIGFzIEdlbmVyYXRlTWFya2Rvd25MaW5rRGVmYXVsdE9wdGlvbnNXcmFwcGVyKS5kZWZhdWx0T3B0aW9uc0ZuID8/ICgoKTogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0+ICh7fSkpO1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zRm4oKTtcblxuICBvcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy5wYXRoT3JGaWxlKTtcblxuICByZXR1cm4gdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1bihhcHAsIGZpbGUsICgpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gZ2V0UGF0aChvcHRpb25zLnNvdXJjZVBhdGhPckZpbGUpO1xuICAgIGNvbnN0IHN1YnBhdGggPSBvcHRpb25zLnN1YnBhdGggPz8gJyc7XG4gICAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgICBjb25zdCBpc0VtYmVkID0gb3B0aW9ucy5pc0VtYmVkID8/ICFpc01hcmtkb3duRmlsZShmaWxlKTtcbiAgICBjb25zdCBpc1dpa2lsaW5rID0gb3B0aW9ucy5pc1dpa2lsaW5rID8/IHNob3VsZFVzZVdpa2lsaW5rcyhhcHApO1xuICAgIGNvbnN0IGZvcmNlUmVsYXRpdmVQYXRoID0gb3B0aW9ucy5mb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCk7XG5cbiAgICBsZXQgbGlua1RleHQgPSBmaWxlLnBhdGggPT09IHNvdXJjZVBhdGggJiYgc3VicGF0aFxuICAgICAgPyBzdWJwYXRoXG4gICAgICA6IGZvcmNlUmVsYXRpdmVQYXRoXG4gICAgICAgID8gcmVsYXRpdmUoZGlybmFtZShzb3VyY2VQYXRoKSwgaXNXaWtpbGluayA/IHRyaW1NYXJrZG93bkV4dGVuc2lvbihmaWxlKSA6IGZpbGUucGF0aCkgKyBzdWJwYXRoXG4gICAgICAgIDogYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQoZmlsZSwgc291cmNlUGF0aCwgaXNXaWtpbGluaykgKyBzdWJwYXRoO1xuXG4gICAgaWYgKGZvcmNlUmVsYXRpdmVQYXRoICYmIG9wdGlvbnMudXNlTGVhZGluZ0RvdCAmJiAhbGlua1RleHQuc3RhcnRzV2l0aCgnLicpICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGxpbmtUZXh0ID0gJy4vJyArIGxpbmtUZXh0O1xuICAgIH1cblxuICAgIGlmICghaXNXaWtpbGluaykge1xuICAgICAgaWYgKG9wdGlvbnMudXNlQW5nbGVCcmFja2V0cykge1xuICAgICAgICBsaW5rVGV4dCA9IGA8JHtsaW5rVGV4dH0+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmtUZXh0ID0gbGlua1RleHQucmVwbGFjZShTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAsIGZ1bmN0aW9uIChzcGVjaWFsTGlua1N5bWJvbCkge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0VtYmVkKSB7XG4gICAgICAgIHJldHVybiBgWyR7YWxpYXMgfHwgZmlsZS5iYXNlbmFtZX1dKCR7bGlua1RleHR9KWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCFbJHthbGlhc31dKCR7bGlua1RleHR9KWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhbGlhcyAmJiBhbGlhcy50b0xvd2VyQ2FzZSgpID09PSBsaW5rVGV4dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGxpbmtUZXh0ID0gYWxpYXM7XG4gICAgICAgIGFsaWFzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoaXNFbWJlZCA/ICchJyA6ICcnKSArIChhbGlhcyA/IGBbWyR7bGlua1RleHR9fCR7YWxpYXN9XV1gIDogYFtbJHtsaW5rVGV4dH1dXWApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRWRpdHMgdGhlIGxpbmtzIGluIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHVzaW5nIHRoZSBwcm92aWRlZCBsaW5rIGNvbnZlcnRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGVkaXQgdGhlIGxpbmtzIGluLlxuICogQHBhcmFtIGxpbmtDb252ZXJ0ZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBlYWNoIGxpbmsuXG4gKiBAcGFyYW0gcmV0cnlPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxpbmtzIGhhdmUgYmVlbiBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0TGlua3MoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlXG4gIGxpbmtDb252ZXJ0ZXI6IChsaW5rOiBSZWZlcmVuY2VDYWNoZSkgPT4gTWF5YmVQcm9taXNlPHN0cmluZyB8IHZvaWQ+LFxuICByZXRyeU9wdGlvbnM6IFBhcnRpYWw8UmV0cnlPcHRpb25zPiA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGFwcGx5RmlsZUNoYW5nZXMoYXBwLCBwYXRoT3JGaWxlLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbmdlczogRmlsZUNoYW5nZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gYXdhaXQgbGlua0NvbnZlcnRlcihsaW5rKTtcbiAgICAgIGlmIChuZXdDb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0SW5kZXg6IGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICBlbmRJbmRleDogbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0LFxuICAgICAgICBvbGRDb250ZW50OiBsaW5rLm9yaWdpbmFsLFxuICAgICAgICBuZXdDb250ZW50XG4gICAgICB9KTtc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
|
274
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xpbmsudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIExpbmtcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgaGFuZGxpbmcgYW5kIHVwZGF0aW5nIGxpbmtzIHdpdGhpbiBPYnNpZGlhbiB2YXVsdHMuIEl0IGluY2x1ZGVzXG4gKiBmdW5jdGlvbnMgdG8gc3BsaXQgcGF0aHMsIHVwZGF0ZSBsaW5rcyBpbiBmaWxlcywgYW5kIGdlbmVyYXRlIG1hcmtkb3duIGxpbmtzIHdpdGggdmFyaW91cyBvcHRpb25zLlxuICogVGhlIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aCBPYnNpZGlhbidzIEFQSSB0byBlbnN1cmUgdGhhdCBsaW5rcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSB2YXVsdC5cbiAqKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFJlZmVyZW5jZUNhY2hlLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUge1xuICBNYXliZVByb21pc2UsXG4gIFJldHJ5T3B0aW9uc1xufSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0aHJvd0V4cHJlc3Npb24gfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldENhY2hlU2FmZSxcbiAgdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1blxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgc2hvdWxkVXNlUmVsYXRpdmVMaW5rcyxcbiAgc2hvdWxkVXNlV2lraWxpbmtzXG59IGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZSxcbiAgdHJpbU1hcmtkb3duRXh0ZW5zaW9uXG59IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB7IGdldEZpbGUgfSBmcm9tICcuL1RGaWxlLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUNoYW5nZSB9IGZyb20gJy4vVmF1bHQudHMnO1xuaW1wb3J0IHsgYXBwbHlGaWxlQ2hhbmdlcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc3BlY2lhbCBsaW5rIHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAgPSAvW1xcXFxcXHgwMFxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGIF0vZztcblxuLyoqXG4gKiBTcGxpdHMgYSBsaW5rIGludG8gaXRzIGxpbmsgcGF0aCBhbmQgc3VicGF0aC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGxpdFN1YnBhdGhSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGxpbmsgcGF0aC5cbiAgICovXG4gIGxpbmtQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJwYXRoLlxuICAgKi9cbiAgc3VicGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGxpbmsgaW50byBpdHMgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gVGhlIGxpbmsgdG8gc3BsaXQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGluayBwYXRoIGFuZCBzdWJwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTdWJwYXRoKGxpbms6IHN0cmluZyk6IFNwbGl0U3VicGF0aFJlc3VsdCB7XG4gIGNvbnN0IFNVQlBBVEhfU0VQQVJBVE9SID0gJyMnO1xuICBjb25zdCBbbGlua1BhdGggPSAnJywgc3VicGF0aF0gPSBub3JtYWxpemUobGluaykuc3BsaXQoU1VCUEFUSF9TRVBBUkFUT1IpO1xuICByZXR1cm4ge1xuICAgIGxpbmtQYXRoLFxuICAgIHN1YnBhdGg6IHN1YnBhdGggPyBTVUJQQVRIX1NFUEFSQVRPUiArIHN1YnBhdGggOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB1cGRhdGluZyBsaW5rcyBpbiBhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTGlua3NJbkZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBvYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGUgdG8gdXBkYXRlIHRoZSBsaW5rcyBpbi5cbiAgICovXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIG9sZCBhbmQgbmV3IHBhdGhzIGZvciByZW5hbWluZyBsaW5rcy5cbiAgICovXG4gIHJlbmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSB0aGUgbGlua3MgdG8gYmUgaW4gTWFya2Rvd24gZm9ybWF0LlxuICAgKi9cbiAgZm9yY2VNYXJrZG93bkxpbmtzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgb25seSBlbWJlZGRlZCBsaW5rcy5cbiAgICovXG4gIGVtYmVkT25seUxpbmtzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsaW5rcyBpbiBhIGZpbGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdXBkYXRpbmcgdGhlIGxpbmtzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlua3MgYXJlIHVwZGF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVMaW5rc0luRmlsZShvcHRpb25zOiBVcGRhdGVMaW5rc0luRmlsZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlLFxuICAgIG9sZFBhdGhPckZpbGUsXG4gICAgcmVuYW1lTWFwLFxuICAgIGZvcmNlTWFya2Rvd25MaW5rcyxcbiAgICBlbWJlZE9ubHlMaW5rc1xuICB9ID0gb3B0aW9ucztcbiAgYXdhaXQgZWRpdExpbmtzKGFwcCwgcGF0aE9yRmlsZSwgKGxpbmspID0+IHtcbiAgICBjb25zdCBpc0VtYmVkTGluayA9IHRlc3RFbWJlZChsaW5rLm9yaWdpbmFsKTtcbiAgICBpZiAoZW1iZWRPbmx5TGlua3MgIT09IHVuZGVmaW5lZCAmJiBlbWJlZE9ubHlMaW5rcyAhPT0gaXNFbWJlZExpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRMaW5rKGFwcCwgbGluaywgcGF0aE9yRmlsZSwgb2xkUGF0aE9yRmlsZSwgcmVuYW1lTWFwLCBmb3JjZU1hcmtkb3duTGlua3MpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGxpbmsgdG8gYSBuZXcgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGxpbmsgLSBUaGUgcmVmZXJlbmNlIGNhY2hlIGZvciB0aGUgbGluay5cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvZiB0aGUgbGluay5cbiAqIEBwYXJhbSByZW5hbWVNYXAgLSBBIG1hcCBvZiBvbGQgcGF0aHMgdG8gbmV3IHBhdGhzIGZvciByZW5hbWluZy5cbiAqIEBwYXJhbSBmb3JjZU1hcmtkb3duTGlua3MgLSBPcHRpb25hbCBmbGFnIHRvIGZvcmNlIG1hcmtkb3duIGxpbmtzLlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBsaW5rLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluayhhcHA6IEFwcCwgbGluazogUmVmZXJlbmNlQ2FjaGUsIHNvdXJjZTogUGF0aE9yRmlsZSwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+LCBmb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgb2xkUGF0aE9yRmlsZSB8fD0gZ2V0UGF0aChzb3VyY2UpO1xuICByZXR1cm4gdXBkYXRlTGluayh7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgcGF0aE9yRmlsZTogZXh0cmFjdExpbmtGaWxlKGFwcCwgbGluaywgb2xkUGF0aE9yRmlsZSksXG4gICAgb2xkUGF0aE9yRmlsZSxcbiAgICBzb3VyY2VQYXRoT3JGaWxlOiBzb3VyY2UsXG4gICAgcmVuYW1lTWFwLFxuICAgIGZvcmNlTWFya2Rvd25MaW5rc1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbGluayAtIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICogQHBhcmFtIG9sZFBhdGhPckZpbGUgLSBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmssIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpbmtGaWxlKGFwcDogQXBwLCBsaW5rOiBSZWZlcmVuY2VDYWNoZSwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFRGaWxlIHwgbnVsbCB7XG4gIGNvbnN0IHsgbGlua1BhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGlua1BhdGgsIGdldFBhdGgob2xkUGF0aE9yRmlsZSkpO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVwZGF0aW5nIGEgbGluay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgY2FjaGUgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgbGluazogUmVmZXJlbmNlQ2FjaGU7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay5cbiAgICovXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbGluay5cbiAgICovXG4gIHNvdXJjZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIG9sZCBhbmQgbmV3IGZpbGUgcGF0aHMuXG4gICAqL1xuICByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgbWFya2Rvd24gbGlua3MuXG4gICAqL1xuICBmb3JjZU1hcmtkb3duTGlua3M/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBsaW5rLlxuICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmsob3B0aW9uczogVXBkYXRlTGlua09wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxpbmssXG4gICAgcGF0aE9yRmlsZSxcbiAgICBvbGRQYXRoT3JGaWxlLFxuICAgIHNvdXJjZVBhdGhPckZpbGU6IHNvdXJjZSxcbiAgICByZW5hbWVNYXAsXG4gICAgZm9yY2VNYXJrZG93bkxpbmtzXG4gIH0gPSBvcHRpb25zO1xuICBpZiAoIXBhdGhPckZpbGUpIHtcbiAgICByZXR1cm4gbGluay5vcmlnaW5hbDtcbiAgfVxuICBsZXQgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgY29uc3Qgc291cmNlUGF0aCA9IGdldFBhdGgoc291cmNlKTtcbiAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgob2xkUGF0aE9yRmlsZSk7XG4gIGNvbnN0IGlzV2lraWxpbmsgPSB0ZXN0V2lraWxpbmsobGluay5vcmlnaW5hbCkgJiYgZm9yY2VNYXJrZG93bkxpbmtzICE9PSB0cnVlO1xuICBjb25zdCB7IHN1YnBhdGggfSA9IHNwbGl0U3VicGF0aChsaW5rLmxpbmspO1xuXG4gIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KGZpbGUucGF0aCk7XG4gIGNvbnN0IGFsaWFzID0gZ2V0QWxpYXMoe1xuICAgIGFwcCxcbiAgICBkaXNwbGF5VGV4dDogbGluay5kaXNwbGF5VGV4dCxcbiAgICBmaWxlOiBwYXRoT3JGaWxlLFxuICAgIG90aGVyUGF0aHM6IFtvbGRQYXRoLCBuZXdQYXRoXSxcbiAgICBzb3VyY2VQYXRoLFxuICAgIGlzV2lraWxpbmtcbiAgfSk7XG5cbiAgaWYgKG5ld1BhdGgpIHtcbiAgICBmaWxlID0gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHAudmF1bHQsIG5ld1BhdGgpO1xuICB9XG5cbiAgY29uc3QgbmV3TGluayA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKHtcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZTogZmlsZSxcbiAgICBzb3VyY2VQYXRoT3JGaWxlOiBzb3VyY2VQYXRoLFxuICAgIHN1YnBhdGgsXG4gICAgYWxpYXMsXG4gICAgaXNXaWtpbGluazogZm9yY2VNYXJrZG93bkxpbmtzID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgb3JpZ2luYWxMaW5rOiBsaW5rLm9yaWdpbmFsXG4gIH0pO1xuICByZXR1cm4gbmV3TGluaztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBnZXR0aW5nIHRoZSBhbGlhcyBvZiBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QWxpYXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgdGV4dCBvZiB0aGUgbGluay5cbiAgICovXG4gIGRpc3BsYXlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGxpbmsuXG4gICAqL1xuICBmaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBPdGhlciBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmsuXG4gICAqL1xuICBvdGhlclBhdGhzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggb2YgdGhlIGxpbmsuXG4gICAqL1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhIHdpa2lsaW5rLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhbGlhcyBmb3IgYSBnaXZlbiBsaW5rLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHJldHJpZXZpbmcgdGhlIGFsaWFzLlxuICogQHJldHVybnMgVGhlIGFsaWFzIG9mIHRoZSBsaW5rLCBvciB1bmRlZmluZWQgaWYgc2hvdWxkIGJlIGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGlhcyhvcHRpb25zOiBHZXRBbGlhc09wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGRpc3BsYXlUZXh0LFxuICAgIGZpbGU6IHBhdGhPckZpbGUsXG4gICAgb3RoZXJQYXRocyxcbiAgICBzb3VyY2VQYXRoLFxuICAgIGlzV2lraWxpbmtcbiAgfSA9IG9wdGlvbnM7XG4gIGlmIChpc1dpa2lsaW5rID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkaXNwbGF5VGV4dDtcbiAgfVxuXG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgaWYgKCFkaXNwbGF5VGV4dCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjbGVhbkRpc3BsYXlUZXh0ID0gbm9ybWFsaXplUGF0aChkaXNwbGF5VGV4dC5zcGxpdCgnID4gJylbMF0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignSW52YWxpZCBkaXNwbGF5IHRleHQnKSkpLnJlcGxhY2UoL1xcLlxcLy9nLCAnJyk7XG5cbiAgZm9yIChjb25zdCBwYXRoIG9mIFtmaWxlLnBhdGgsIC4uLm90aGVyUGF0aHNdKSB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShwYXRoKTtcbiAgICBjb25zdCBmaWxlTmFtZVdpdGhFeHRlbnNpb24gPSBiYXNlbmFtZShwYXRoKTtcbiAgICBjb25zdCBmaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24gPSBiYXNlbmFtZShwYXRoLCBleHRlbnNpb24pO1xuICAgIGlmIChjbGVhbkRpc3BsYXlUZXh0ID09PSBwYXRoIHx8IGNsZWFuRGlzcGxheVRleHQgPT09IGZpbGVOYW1lV2l0aEV4dGVuc2lvbiB8fCBjbGVhbkRpc3BsYXlUZXh0ID09PSBmaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBvbWl0TWRFeHRlbnNpb24gb2YgW3RydWUsIGZhbHNlXSkge1xuICAgIGNvbnN0IGxpbmtUZXh0ID0gYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZVRvTGlua3RleHQoZmlsZSwgc291cmNlUGF0aCwgb21pdE1kRXh0ZW5zaW9uKTtcbiAgICBpZiAoY2xlYW5EaXNwbGF5VGV4dCA9PT0gbGlua1RleHQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlUZXh0O1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIG1hcmtkb3duIGxpbmtzLlxuICAgKi9cbiAgZGVmYXVsdE9wdGlvbnNGbjogKCkgPT4gUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgYSBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRvIGxpbmsgdG8uXG4gICAqL1xuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHBhdGggb2YgdGhlIGxpbmsuXG4gICAqL1xuICBzb3VyY2VQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VicGF0aCBvZiB0aGUgbGluay5cbiAgICovXG4gIHN1YnBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGlhcyBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBhbGlhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBlbWJlZGRlZC4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBmaWxlIHR5cGUuXG4gICAqL1xuICBpc0VtYmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCBiZSBhIHdpa2lsaW5rLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICAgKi9cbiAgaXNXaWtpbGluaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBzaG91bGQgYmUgcmVsYXRpdmUuIElmIG5vdCBwcm92aWRlZCBvciBgZmFsc2VgLCBpdCB3aWxsIGJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBPYnNpZGlhbiBzZXR0aW5ncy5cbiAgICovXG4gIGZvcmNlUmVsYXRpdmVQYXRoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIHNob3VsZCB1c2UgYSBsZWFkaW5nIGRvdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gSGFzIG5vIGVmZmVjdCBpZiBgaXNXaWtpbGlua2AgaXMgYHRydWVgIG9yIGBpc1JlbGF0aXZlYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgdXNlTGVhZGluZ0RvdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBzaG91bGQgdXNlIGFuZ2xlIGJyYWNrZXRzLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBIYXMgbm8gZWZmZWN0IGlmIGBpc1dpa2lsaW5rYCBpcyBgdHJ1ZWBcbiAgICovXG4gIHVzZUFuZ2xlQnJhY2tldHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgICogVGhlIG9yaWdpbmFsIGxpbmsgdGV4dC4gSWYgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCB0byBpbmZlciB0aGUgdmFsdWVzIG9mIGBpc0VtYmVkYCwgYGlzV2lraWxpbmtgLCBgdXNlTGVhZGluZ0RvdGAsIGFuZCBgdXNlQW5nbGVCcmFja2V0c2AuXG4gICAgKiBUaGVzZSBpbmZlcnJlZCB2YWx1ZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGNvcnJlc3BvbmRpbmcgc2V0dGluZ3MgaWYgc3BlY2lmaWVkLlxuICAgICovXG4gIG9yaWdpbmFsTGluaz86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBub24tZXhpc3RpbmcgZmlsZXMuIElmIGBmYWxzZWAgYW5kIGBwYXRoT3JGaWxlYCBpcyBhIG5vbi1leGlzdGluZyBmaWxlLCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGFsbG93Tm9uRXhpc3RpbmdGaWxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbiBlbXB0eSBhbGlhcyBmb3IgZW1iZWRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBhbGxvd0VtcHR5RW1iZWRBbGlhcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWFya2Rvd24gbGluayBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBtYXJrZG93biBsaW5rLlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBtYXJrZG93biBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsob3B0aW9uczogR2VuZXJhdGVNYXJrZG93bkxpbmtPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBhcHAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbiA9IChhcHAuZmlsZU1hbmFnZXIuZ2VuZXJhdGVNYXJrZG93bkxpbmsgYXMgUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua0RlZmF1bHRPcHRpb25zV3JhcHBlcj4pLmRlZmF1bHRPcHRpb25zRm4gPz8gKCgpOiBQYXJ0aWFsPEdlbmVyYXRlTWFya2Rvd25MaW5rT3B0aW9ucz4gPT4gKHt9KSk7XG4gIGNvbnN0IGNvbmZpZ3VyYWJsZURlZmF1bHRPcHRpb25zID0gY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnNGbigpO1xuXG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUGFydGlhbDxHZW5lcmF0ZU1hcmtkb3duTGlua09wdGlvbnM+ID0ge1xuICAgIGFsbG93RW1wdHlFbWJlZEFsaWFzOiB0cnVlXG4gIH07XG5cbiAgb3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5jb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgb3B0aW9ucy5wYXRoT3JGaWxlLCBvcHRpb25zLmFsbG93Tm9uRXhpc3RpbmdGaWxlKTtcblxuICByZXR1cm4gdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1bihhcHAsIGZpbGUsICgpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gZ2V0UGF0aChvcHRpb25zLnNvdXJjZVBhdGhPckZpbGUpO1xuICAgIGNvbnN0IHN1YnBhdGggPSBvcHRpb25zLnN1YnBhdGggPz8gJyc7XG4gICAgbGV0IGFsaWFzID0gb3B0aW9ucy5hbGlhcyA/PyAnJztcbiAgICBjb25zdCBpc0VtYmVkID0gb3B0aW9ucy5pc0VtYmVkID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RFbWJlZChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/ICFpc01hcmtkb3duRmlsZShmaWxlKTtcbiAgICBjb25zdCBpc1dpa2lsaW5rID0gb3B0aW9ucy5pc1dpa2lsaW5rID8/IChvcHRpb25zLm9yaWdpbmFsTGluayA/IHRlc3RXaWtpbGluayhvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/IHNob3VsZFVzZVdpa2lsaW5rcyhhcHApO1xuICAgIGNvbnN0IGZvcmNlUmVsYXRpdmVQYXRoID0gb3B0aW9ucy5mb3JjZVJlbGF0aXZlUGF0aCA/PyBzaG91bGRVc2VSZWxhdGl2ZUxpbmtzKGFwcCk7XG4gICAgY29uc3QgdXNlTGVhZGluZ0RvdCA9IG9wdGlvbnMudXNlTGVhZGluZ0RvdCA/PyAob3B0aW9ucy5vcmlnaW5hbExpbmsgPyB0ZXN0TGVhZGluZ0RvdChvcHRpb25zLm9yaWdpbmFsTGluaykgOiB1bmRlZmluZWQpID8/IGZhbHNlO1xuICAgIGNvbnN0IHVzZUFuZ2xlQnJhY2tldHMgPSBvcHRpb25zLnVzZUFuZ2xlQnJhY2tldHMgPz8gKG9wdGlvbnMub3JpZ2luYWxMaW5rID8gdGVzdEFuZ2xlQnJhY2tldHMob3B0aW9ucy5vcmlnaW5hbExpbmspIDogdW5kZWZpbmVkKSA/PyBmYWxzZTtcblxuICAgIGxldCBsaW5rVGV4dCA9IGZpbGUucGF0aCA9PT0gc291cmNlUGF0aCAmJiBzdWJwYXRoXG4gICAgICA/IHN1YnBhdGhcbiAgICAgIDogZm9yY2VSZWxhdGl2ZVBhdGhcbiAgICAgICAgPyByZWxhdGl2ZShkaXJuYW1lKHNvdXJjZVBhdGgpLCBpc1dpa2lsaW5rID8gdHJpbU1hcmtkb3duRXh0ZW5zaW9uKGZpbGUpIDogZmlsZS5wYXRoKSArIHN1YnBhdGhcbiAgICAgICAgOiBhcHAubWV0YWRhdGFDYWNoZS5maWxlVG9MaW5rdGV4dChmaWxlLCBzb3VyY2VQYXRoLCBpc1dpa2lsaW5rKSArIHN1YnBhdGg7XG5cbiAgICBpZiAoZm9yY2VSZWxhdGl2ZVBhdGggJiYgdXNlTGVhZGluZ0RvdCAmJiAhbGlua1RleHQuc3RhcnRzV2l0aCgnLicpICYmICFsaW5rVGV4dC5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGxpbmtUZXh0ID0gJy4vJyArIGxpbmtUZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGVtYmVkUHJlZml4ID0gaXNFbWJlZCA/ICchJyA6ICcnO1xuXG4gICAgaWYgKCFpc1dpa2lsaW5rKSB7XG4gICAgICBpZiAodXNlQW5nbGVCcmFja2V0cykge1xuICAgICAgICBsaW5rVGV4dCA9IGA8JHtsaW5rVGV4dH0+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmtUZXh0ID0gbGlua1RleHQucmVwbGFjZShTUEVDSUFMX0xJTktfU1lNQk9MU19SRUdFWFAsIGZ1bmN0aW9uIChzcGVjaWFsTGlua1N5bWJvbCkge1xuICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbExpbmtTeW1ib2wpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbGlhcyAmJiAoIWlzRW1iZWQgfHwgIW9wdGlvbnMuYWxsb3dFbXB0eUVtYmVkQWxpYXMpKSB7XG4gICAgICAgIGFsaWFzID0gZmlsZS5iYXNlbmFtZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVske2FsaWFzfV0oJHtsaW5rVGV4dH0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFsaWFzICYmIGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGxpbmtUZXh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGlua1RleHQgPSBhbGlhcztcbiAgICAgICAgYWxpYXMgPSAnJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWxpYXNQYXJ0ID0gYWxpYXMgPyBgfCR7YWxpYXN9YCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2VtYmVkUHJlZml4fVtbJHtsaW5rVGV4dH0ke2FsaWFzUGFydH1dXWA7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFZGl0cyB0aGUgbGlua3MgaW4gdGhlIHNwZWNpZmllZCBmaWxlIG9yIHBhdGggdXNpbmcgdGhlIHByb3ZpZGVkIGxpbmsgY29udmVydGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gZWRpdCB0aGUgbGlua3MgaW4uXG4gKiBAcGFyYW0gbGlua0NvbnZlcnRlciAtIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGVhY2ggbGluay5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciByZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlua3MgaGF2ZSBiZWVuIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRMaW5rcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcbiAgbGlua0NvbnZlcnRlcjogKGxpbms6IFJlZmVyZW5jZUNhY2hlKSA9PiBNYXliZVByb21pc2U8c3RyaW5nIHwgdm9pZD4sXG4gIHJldHJ5T3B0aW9uczogUGFydGlhbDxSZXRyeU9wdGlvbnM+ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFuZ2VzOiBGaWxlQ2hhbmdlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgbGluayBvZiBnZXRBbGxMaW5rcyhjYWNoZSkpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCBsaW5rQ29udmVydGVyKGxpbmspO1xuICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgIGVuZEluZGV4OiBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICAgIG9sZENvbnRlbnQ6IGxpbmsub3JpZ2luYWwsXG4gICAgICAgIG5ld0NvbnRlbnRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9LCByZXRyeU9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGlzIGFuIGVtYmVkIGxpbms6XG4gKiBgIVtbbGlua11dYCwgYCFbdGl0bGVdKGxpbmspYC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIExpbmsgdG8gdGVzdFxuICogQHJldHVybnMgV2hldGhlciB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RW1iZWQobGluazogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBsaW5rLnN0YXJ0c1dpdGgoJyFbJyk7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGxpbmsgaXMgYSB3aWtpbGluaywgcG9zc2libHkgZW1iZWQ6XG4gKiBgW1tsaW5rXV1gLCBgIVtbbGlua11dYC5cbiAqXG4gKiBAcGFyYW0gbGluayAtIExpbmsgdG8gdGVzdFxuICogQHJldHVybnMgV2hldGhlciB0aGUgbGluayBpcyBhIHdpa2lsaW5rXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0V2lraWxpbmsobGluazogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBsaW5rLmluY2x1ZGVzKCdbWycpO1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90LCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbWy4vbGlua11dYCwgYFt0aXRsZV0oLi9saW5rKWAsIGBbdGl0bGVdKDwuL2xpbms+KWAsXG4gKiBgIVtbLi9saW5rXV1gLCBgIVt0aXRsZV0oLi9saW5rKWAsIGAhW3RpdGxlXSg8Li9saW5rPilgLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gTGluayB0byB0ZXN0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBsaW5rIGhhcyBhIGxlYWRpbmcgZG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0TGVhZGluZ0RvdChsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxpbmsuaW5jbHVkZXMoJ1tbLi8nKSB8fCBsaW5rLmluY2x1ZGVzKCddKC4vJykgfHwgbGluay5pbmNsdWRlcygnXSg8Li8nKTtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgbGluayB1c2VzIGFuZ2xlIGJyYWNrZXRzLCBwb3NzaWJseSBlbWJlZDpcbiAqIGBbdGl0bGVdKDxsaW5rPilgLCBgIVt0aXRsZV0oPGxpbms+KWAuXG4gKlxuICogQHBhcmFtIGxpbmsgLSBMaW5rIHRvIHRlc3RcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGxpbmsgdXNlcyBhbmdsZSBicmFja2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGVzdEFuZ2xlQnJhY2tldHMobGluazogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBsaW5rLmluY2x1ZGVzKCddKDwnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsc0JBQThCO0FBQzlCLDZCQUFvQztBQU1wQyxtQkFBZ0M7QUFDaEMsa0JBS087QUFDUCxvQkFBMEI7QUFDMUIsMkJBSU87QUFDUCw4QkFHTztBQUNQLDJCQUlPO0FBRVAsbUJBQXdCO0FBRXhCLG1C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
|
@@ -155,7 +155,7 @@ export interface GenerateMarkdownLinkDefaultOptionsWrapper {
|
|
155
155
|
/**
|
156
156
|
* The default options for generating markdown links.
|
157
157
|
*/
|
158
|
-
defaultOptionsFn
|
158
|
+
defaultOptionsFn: () => Partial<GenerateMarkdownLinkOptions>;
|
159
159
|
}
|
160
160
|
/**
|
161
161
|
* Options for generating a markdown link.
|
@@ -201,6 +201,19 @@ export interface GenerateMarkdownLinkOptions {
|
|
201
201
|
* Indicates if the link should use angle brackets. Defaults to `false`. Has no effect if `isWikilink` is `true`
|
202
202
|
*/
|
203
203
|
useAngleBrackets?: boolean | undefined;
|
204
|
+
/**
|
205
|
+
* The original link text. If provided, it will be used to infer the values of `isEmbed`, `isWikilink`, `useLeadingDot`, and `useAngleBrackets`.
|
206
|
+
* These inferred values will be overridden by corresponding settings if specified.
|
207
|
+
*/
|
208
|
+
originalLink?: string | undefined;
|
209
|
+
/**
|
210
|
+
* Whether to allow non-existing files. If `false` and `pathOrFile` is a non-existing file, an error will be thrown. Defaults to `false`.
|
211
|
+
*/
|
212
|
+
allowNonExistingFile?: boolean | undefined;
|
213
|
+
/**
|
214
|
+
* Whether to allow an empty alias for embeds. Defaults to `true`.
|
215
|
+
*/
|
216
|
+
allowEmptyEmbedAlias?: boolean | undefined;
|
204
217
|
}
|
205
218
|
/**
|
206
219
|
* Generates a markdown link based on the provided parameters.
|
@@ -219,3 +232,36 @@ export declare function generateMarkdownLink(options: GenerateMarkdownLinkOption
|
|
219
232
|
* @returns A promise that resolves when the links have been edited.
|
220
233
|
*/
|
221
234
|
export declare function editLinks(app: App, pathOrFile: PathOrFile, linkConverter: (link: ReferenceCache) => MaybePromise<string | void>, retryOptions?: Partial<RetryOptions>): Promise<void>;
|
235
|
+
/**
|
236
|
+
* Tests whether a link is an embed link:
|
237
|
+
* `![[link]]`, ``.
|
238
|
+
*
|
239
|
+
* @param link - Link to test
|
240
|
+
* @returns Whether the link is an embed link
|
241
|
+
*/
|
242
|
+
export declare function testEmbed(link: string): boolean;
|
243
|
+
/**
|
244
|
+
* Tests whether a link is a wikilink, possibly embed:
|
245
|
+
* `[[link]]`, `![[link]]`.
|
246
|
+
*
|
247
|
+
* @param link - Link to test
|
248
|
+
* @returns Whether the link is a wikilink
|
249
|
+
*/
|
250
|
+
export declare function testWikilink(link: string): boolean;
|
251
|
+
/**
|
252
|
+
* Tests whether a link has a leading dot, possibly embed:
|
253
|
+
* `[[./link]]`, `[title](./link)`, `[title](<./link>)`,
|
254
|
+
* `![[./link]]`, ``, ``.
|
255
|
+
*
|
256
|
+
* @param link - Link to test
|
257
|
+
* @returns Whether the link has a leading dot
|
258
|
+
*/
|
259
|
+
export declare function testLeadingDot(link: string): boolean;
|
260
|
+
/**
|
261
|
+
* Tests whether a link uses angle brackets, possibly embed:
|
262
|
+
* `[title](<link>)`, ``.
|
263
|
+
*
|
264
|
+
* @param link - Link to test
|
265
|
+
* @returns Whether the link uses angle brackets
|
266
|
+
*/
|
267
|
+
export declare function testAngleBrackets(link: string): boolean;
|
@@ -33,6 +33,7 @@ var import_implementations = require('obsidian-typings/implementations');
|
|
33
33
|
var import_Async = require('../Async.cjs');
|
34
34
|
var import_Object = require('../Object.cjs');
|
35
35
|
var import_Path = require('../Path.cjs');
|
36
|
+
var import_App = require('./App.cjs');
|
36
37
|
var import_AttachmentPath = require('./AttachmentPath.cjs');
|
37
38
|
var import_Link = require('./Link.cjs');
|
38
39
|
var import_MetadataCache = require('./MetadataCache.cjs');
|
@@ -50,19 +51,43 @@ var __process = globalThis["process"] ?? {
|
|
50
51
|
"platform": "android"
|
51
52
|
};
|
52
53
|
function registerRenameDeleteHandlers(plugin, settingsBuilder) {
|
54
|
+
const renameDeleteHandlerPluginIds = getRenameDeleteHandlerPluginIds(plugin.app);
|
55
|
+
const pluginId = plugin.manifest.id;
|
56
|
+
if (renameDeleteHandlerPluginIds.length > 0) {
|
57
|
+
console.warn(`Plugin ${pluginId} is registering a rename/delete handler, but it is already registered by plugins: ${renameDeleteHandlerPluginIds.join(", ")}. The handler for ${pluginId} will be skipped until all previous plugins are disabled.`);
|
58
|
+
}
|
59
|
+
renameDeleteHandlerPluginIds.push(pluginId);
|
60
|
+
plugin.register(() => {
|
61
|
+
renameDeleteHandlerPluginIds.remove(pluginId);
|
62
|
+
});
|
53
63
|
const app = plugin.app;
|
54
64
|
const renameDeleteHandler = new RenameDeleteHandler(app, settingsBuilder);
|
55
65
|
plugin.registerEvent(
|
56
66
|
app.vault.on("delete", (file) => {
|
67
|
+
if (!shouldInvokeHandler(app, pluginId, "Delete")) {
|
68
|
+
return;
|
69
|
+
}
|
57
70
|
(0, import_Async.invokeAsyncSafely)(renameDeleteHandler.handleDelete(file));
|
58
71
|
})
|
59
72
|
);
|
60
73
|
plugin.registerEvent(
|
61
74
|
app.vault.on("rename", (file, oldPath) => {
|
75
|
+
if (!shouldInvokeHandler(app, pluginId, "Rename")) {
|
76
|
+
return;
|
77
|
+
}
|
62
78
|
(0, import_Async.invokeAsyncSafely)(renameDeleteHandler.handleRename(file, oldPath));
|
63
79
|
})
|
64
80
|
);
|
65
81
|
}
|
82
|
+
function shouldInvokeHandler(app, pluginId, handlerType) {
|
83
|
+
const renameDeleteHandlerPluginIds = getRenameDeleteHandlerPluginIds(app);
|
84
|
+
const mainPluginId = renameDeleteHandlerPluginIds[0];
|
85
|
+
if (mainPluginId !== pluginId) {
|
86
|
+
console.warn(`${handlerType} handler for plugin ${pluginId} is skipped, because it is handled by plugin ${mainPluginId ?? "(none)"}`);
|
87
|
+
return false;
|
88
|
+
}
|
89
|
+
return true;
|
90
|
+
}
|
66
91
|
class RenameDeleteHandler {
|
67
92
|
constructor(app, settingsBuilder) {
|
68
93
|
this.app = app;
|
@@ -296,8 +321,11 @@ class RenameDeleteHandler {
|
|
296
321
|
return backlinks;
|
297
322
|
}
|
298
323
|
}
|
324
|
+
function getRenameDeleteHandlerPluginIds(app) {
|
325
|
+
return (0, import_App.getObsidianDevUtilsState)(app, "renameDeleteHandlerPluginIds", []).value;
|
326
|
+
}
|
299
327
|
// Annotate the CommonJS export names for ESM import in node:
|
300
328
|
0 && (module.exports = {
|
301
329
|
registerRenameDeleteHandlers
|
302
330
|
});
|
303
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICBnZXRDYWNoZVNhZmVcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgY3JlYXRlRm9sZGVyU2FmZSxcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmUsXG4gIHByb2Nlc3NXaXRoUmV0cnlcbn0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmludGVyZmFjZSBTcGVjaWFsUmVuYW1lIHtcbiAgb2xkUGF0aDogc3RyaW5nO1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIHRlbXBQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBzaG91bGREZWxldGVFbXB0eUZvbGRlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIG9ycGhhbiBhdHRhY2htZW50cyBhZnRlciBhIGRlbGV0ZS5cbiAgICovXG4gIHNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNldHRpbmdzQnVpbGRlciAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHJlbmFtZSBkZWxldGUgaGFuZGxlci5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUmVuYW1lRGVsZXRlSGFuZGxlcnMocGx1Z2luOiBQbHVnaW4sIHNldHRpbmdzQnVpbGRlcjogKCkgPT4gUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IGFwcCA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXIgPSBuZXcgUmVuYW1lRGVsZXRlSGFuZGxlcihhcHAsIHNldHRpbmdzQnVpbGRlcik7XG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbignZGVsZXRlJywgKGZpbGUpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlRGVsZXRlKGZpbGUpKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlUmVuYW1lKGZpbGUsIG9sZFBhdGgpKTtcbiAgICB9KVxuICApO1xufVxuXG5jbGFzcyBSZW5hbWVEZWxldGVIYW5kbGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsIHByaXZhdGUgc2V0dGluZ3NCdWlsZGVyOiAoKSA9PiBSZW5hbWVEZWxldGVIYW5kbGVyU2V0dGluZ3MpIHsgfVxuXG4gIHByaXZhdGUgcmVuYW1pbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHNwZWNpYWxSZW5hbWVzOiBTcGVjaWFsUmVuYW1lW10gPSBbXTtcblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBSZW5hbWUgJHtvbGRQYXRofSAtPiAke2ZpbGUucGF0aH1gKTtcblxuICAgIGlmICh0aGlzLnJlbmFtaW5nUGF0aHMuaGFzKG9sZFBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxSZW5hbWUgPSB0aGlzLnNwZWNpYWxSZW5hbWVzLmZpbmQoKHgpID0+IHgub2xkUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICBpZiAoc3BlY2lhbFJlbmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIHNwZWNpYWxSZW5hbWUudGVtcFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5hZGFwdGVyLmluc2Vuc2l0aXZlICYmIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgJiYgZGlybmFtZShvbGRQYXRoKSA9PT0gZGlybmFtZShmaWxlLnBhdGgpKSB7XG4gICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnB1c2goe1xuICAgICAgICBvbGRQYXRoLFxuICAgICAgICBuZXdQYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgIHRlbXBQYXRoOiBqb2luKGZpbGUucGFyZW50Py5wYXRoID8/ICcnLCAnX190ZW1wX18nICsgZmlsZS5uYW1lKVxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgdXBkYXRlQWxsTGlua3MgPSB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcztcbiAgICB0cnkge1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlbmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxSZW5hbWVNYXAoZmlsZSwgb2xkUGF0aCwgcmVuYW1lTWFwKTtcbiAgICAgIGZvciAoY29uc3Qgb2xkUGF0aCBvZiByZW5hbWVNYXAua2V5cygpKSB7XG4gICAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5hZGQob2xkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW29sZFBhdGgyLCBuZXdQYXRoMl0gb2YgcmVuYW1lTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aDIsIG5ld1BhdGgyLCByZW5hbWVNYXApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSZW5hbWUob2xkUGF0aCwgZmlsZS5wYXRoLCByZW5hbWVNYXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlbmFtaW5nUGF0aHMuZGVsZXRlKG9sZFBhdGgpO1xuICAgICAgdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3MgPSB1cGRhdGVBbGxMaW5rcztcblxuICAgICAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHRoaXMuc3BlY2lhbFJlbmFtZXMuZmluZCgoeCkgPT4geC50ZW1wUGF0aCA9PT0gZmlsZS5wYXRoKTtcbiAgICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBzcGVjaWFsUmVuYW1lLm5ld1BhdGgpO1xuICAgICAgICB0aGlzLnNwZWNpYWxSZW5hbWVzLnJlbW92ZShzcGVjaWFsUmVuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGVsZXRlKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmRlYnVnKGBIYW5kbGUgRGVsZXRlICR7ZmlsZS5wYXRofWApO1xuICAgIGlmICghaXNOb3RlKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVuYW1pbmdQYXRocy5oYXMoZmlsZS5wYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGZpbGUucGF0aCk7XG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IHRoaXMuYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVPcnBoYW5BdHRhY2htZW50cykge1xuICAgICAgYXdhaXQgZGVsZXRlU2FmZSh0aGlzLmFwcCwgYXR0YWNobWVudEZvbGRlciwgZmlsZS5wYXRoLCBmYWxzZSwgdGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsbFJlbmFtZU1hcChmaWxlOiBURmlsZSwgb2xkUGF0aDogc3RyaW5nLCByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW5hbWVNYXAuc2V0KG9sZFBhdGgsIGZpbGUucGF0aCk7XG5cbiAgICBpZiAoIWlzTm90ZShmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIG9sZFBhdGgpO1xuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgodGhpcy5hcHAsIGZpbGUucGF0aCk7XG4gICAgY29uc3QgZHVtbXlPbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBqb2luKGRpcm5hbWUob2xkUGF0aCksICdEVU1NWV9GSUxFLm1kJykpO1xuXG4gICAgY29uc3Qgb2xkQXR0YWNobWVudEZvbGRlciA9IHRoaXMuYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoIW9sZEF0dGFjaG1lbnRGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW46IFRGaWxlW10gPSBbXTtcblxuICAgIGlmIChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gZHVtbXlPbGRBdHRhY2htZW50Rm9sZGVyUGF0aCkge1xuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBnZXRDYWNoZVNhZmUodGhpcy5hcHAsIGZpbGUpO1xuICAgICAgaWYgKCFjYWNoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgZ2V0QWxsTGlua3MoY2FjaGUpKSB7XG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZXh0cmFjdExpbmtGaWxlKHRoaXMuYXBwLCBsaW5rLCBvbGRQYXRoKTtcbiAgICAgICAgaWYgKCFhdHRhY2htZW50RmlsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dGFjaG1lbnRGaWxlLnBhdGguc3RhcnRzV2l0aChvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgYXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIGlmIChiYWNrbGlua3Mua2V5cygpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChhdHRhY2htZW50RmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihvbGRBdHRhY2htZW50Rm9sZGVyLCAoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgaWYgKGlzTm90ZShjaGlsZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCwgY2hpbGQucGF0aCk7XG4gICAgICBjb25zdCBuZXdEaXIgPSBqb2luKG5ld0F0dGFjaG1lbnRGb2xkZXJQYXRoLCBkaXJuYW1lKHJlbGF0aXZlUGF0aCkpO1xuICAgICAgbGV0IG5ld0NoaWxkUGF0aCA9IGpvaW4obmV3RGlyLCBjaGlsZC5uYW1lKTtcbiAgICAgIGlmIChjaGlsZC5wYXRoICE9PSBuZXdDaGlsZFBhdGgpIHtcbiAgICAgICAgbmV3Q2hpbGRQYXRoID0gdGhpcy5hcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKG5ld0RpciwgY2hpbGQuYmFzZW5hbWUpLCBjaGlsZC5leHRlbnNpb24pO1xuICAgICAgICByZW5hbWVNYXAuc2V0KGNoaWxkLnBhdGgsIG5ld0NoaWxkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUmVuYW1lKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nLCByZW5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IG9sZEZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG9sZFBhdGgpO1xuICAgICAgbGV0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXG4gICAgICBpZiAob2xkRmlsZSkge1xuICAgICAgICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBkaXJuYW1lKG5ld1BhdGgpKTtcbiAgICAgICAgY29uc3Qgb2xkRm9sZGVyID0gb2xkRmlsZS5wYXJlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShuZXdGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKG9sZEZpbGUsIG5ld1BhdGgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCkgfHwgdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9sZFBhdGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0J1aWxkZXIoKS5zaG91bGREZWxldGVFbXB0eUZvbGRlcnMpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeSh0aGlzLmFwcCwgb2xkRm9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbGRGaWxlID0gY3JlYXRlVEZpbGVJbnN0YW5jZSh0aGlzLmFwcC52YXVsdCwgb2xkUGF0aCk7XG4gICAgICBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblxuICAgICAgaWYgKCFvbGRGaWxlLmRlbGV0ZWQgfHwgIW5ld0ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVuYW1lICR7b2xkUGF0aH0gdG8gJHtuZXdQYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYWNrbGlua3MgPSBhd2FpdCB0aGlzLmdldEJhY2tsaW5rcyhvbGRGaWxlLCBuZXdGaWxlKTtcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnROb3RlUGF0aCBvZiBiYWNrbGlua3Mua2V5cygpKSB7XG4gICAgICAgIGxldCBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgIGlmICghcGFyZW50Tm90ZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1BhcmVudE5vdGVQYXRoID0gcmVuYW1lTWFwLmdldChwYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgaWYgKG5ld1BhcmVudE5vdGVQYXRoKSB7XG4gICAgICAgICAgICBwYXJlbnROb3RlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXJlbnROb3RlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBQYXJlbnQgbm90ZSBub3QgZm91bmQ6ICR7cGFyZW50Tm90ZVBhdGh9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBhcHBseUZpbGVDaGFuZ2VzKHRoaXMuYXBwLCBwYXJlbnROb3RlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGlua3NcbiAgICAgICAgICAgID0gKGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpKS5nZXQocGFyZW50Tm90ZVBhdGgpID8/IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgIGVuZEluZGV4OiBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICAgICAgICAgIG9sZENvbnRlbnQ6IGxpbmsub3JpZ2luYWwsXG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQ6IHVwZGF0ZUxpbmsoe1xuICAgICAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgbGluayxcbiAgICAgICAgICAgICAgICBwYXRoT3JGaWxlOiBuZXdGaWxlLFxuICAgICAgICAgICAgICAgIG9sZFBhdGhPckZpbGU6IG9sZFBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aE9yRmlsZTogcGFyZW50Tm90ZSxcbiAgICAgICAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2FudmFzRmlsZShuZXdGaWxlKSkge1xuICAgICAgICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KHRoaXMuYXBwLCBuZXdGaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbnZhc0RhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG4gICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGNhbnZhc0RhdGEubm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgICAgICBpZiAoIW5ld1BhdGgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmZpbGUgPSBuZXdQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXJrZG93bkZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgIHJlbmFtZU1hcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmRlbGV0ZShvbGRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEJhY2tsaW5rcyhvbGRGaWxlOiBURmlsZSwgbmV3RmlsZTogVEZpbGUgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPj4ge1xuICAgIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPigpO1xuICAgIGNvbnN0IG9sZExpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG9sZEZpbGUpO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBvbGRMaW5rcy5rZXlzKCkpIHtcbiAgICAgIGJhY2tsaW5rcy5zZXQocGF0aCwgb2xkTGlua3MuZ2V0KHBhdGgpID8/IFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIW5ld0ZpbGUpIHtcbiAgICAgIHJldHVybiBiYWNrbGlua3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgbmV3RmlsZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbmV3TGlua3Mua2V5cygpKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQocGF0aCkgPz8gW107XG4gICAgICBsaW5rcy5wdXNoKC4uLm5ld0xpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIGxpbmtzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2xpbmtzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHNCQUlPO0FBRVAsNkJBQW9DO0FBRXBDLG1CQUFrQztBQUNsQyxvQkFBdUI7QUFDdkIsa0JBSU87QUFDUCw0QkFBd0M7QUFDeEMsa0JBSU87QUFD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
|
331
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVEFic3RyYWN0RmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBBcHAsXG4gIFRGaWxlLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc0RhdGEgfSBmcm9tICdvYnNpZGlhbi9jYW52YXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlVEZpbGVJbnN0YW5jZSB9IGZyb20gJ29ic2lkaWFuLXR5cGluZ3MvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyB0b0pzb24gfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL0FwcC50cyc7XG5pbXBvcnQgeyBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuaW1wb3J0IHtcbiAgZXh0cmFjdExpbmtGaWxlLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rc0luRmlsZVxufSBmcm9tICcuL0xpbmsudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlLFxuICBnZXRDYWNoZVNhZmVcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL1RBYnN0cmFjdEZpbGUudHMnO1xuaW1wb3J0IHtcbiAgYXBwbHlGaWxlQ2hhbmdlcyxcbiAgY3JlYXRlRm9sZGVyU2FmZSxcbiAgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHksXG4gIGRlbGV0ZVNhZmUsXG4gIHByb2Nlc3NXaXRoUmV0cnlcbn0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmludGVyZmFjZSBTcGVjaWFsUmVuYW1lIHtcbiAgb2xkUGF0aDogc3RyaW5nO1xuICBuZXdQYXRoOiBzdHJpbmc7XG4gIHRlbXBQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIHRoZSByZW5hbWUvZGVsZXRlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIGVtcHR5IGZvbGRlcnMuXG4gICAqL1xuICBzaG91bGREZWxldGVFbXB0eUZvbGRlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIG9ycGhhbiBhdHRhY2htZW50cyBhZnRlciBhIGRlbGV0ZS5cbiAgICovXG4gIHNob3VsZERlbGV0ZU9ycGhhbkF0dGFjaG1lbnRzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgcmVuYW1lL2RlbGV0ZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHBhcmFtIHNldHRpbmdzQnVpbGRlciAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzZXR0aW5ncyBmb3IgdGhlIHJlbmFtZSBkZWxldGUgaGFuZGxlci5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUmVuYW1lRGVsZXRlSGFuZGxlcnMocGx1Z2luOiBQbHVnaW4sIHNldHRpbmdzQnVpbGRlcjogKCkgPT4gUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMgPSBnZXRSZW5hbWVEZWxldGVIYW5kbGVyUGx1Z2luSWRzKHBsdWdpbi5hcHApO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcblxuICBpZiAocmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS53YXJuKGBQbHVnaW4gJHtwbHVnaW5JZH0gaXMgcmVnaXN0ZXJpbmcgYSByZW5hbWUvZGVsZXRlIGhhbmRsZXIsIGJ1dCBpdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgcGx1Z2luczogJHtyZW5hbWVEZWxldGVIYW5kbGVyUGx1Z2luSWRzLmpvaW4oJywgJyl9LiBUaGUgaGFuZGxlciBmb3IgJHtwbHVnaW5JZH0gd2lsbCBiZSBza2lwcGVkIHVudGlsIGFsbCBwcmV2aW91cyBwbHVnaW5zIGFyZSBkaXNhYmxlZC5gKTtcbiAgfVxuXG4gIHJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMucHVzaChwbHVnaW5JZCk7XG4gIHBsdWdpbi5yZWdpc3RlcigoKSA9PiB7XG4gICAgcmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkcy5yZW1vdmUocGx1Z2luSWQpO1xuICB9KTtcblxuICBjb25zdCBhcHAgPSBwbHVnaW4uYXBwO1xuICBjb25zdCByZW5hbWVEZWxldGVIYW5kbGVyID0gbmV3IFJlbmFtZURlbGV0ZUhhbmRsZXIoYXBwLCBzZXR0aW5nc0J1aWxkZXIpO1xuICBwbHVnaW4ucmVnaXN0ZXJFdmVudChcbiAgICBhcHAudmF1bHQub24oJ2RlbGV0ZScsIChmaWxlKSA9PiB7XG4gICAgICBpZiAoIXNob3VsZEludm9rZUhhbmRsZXIoYXBwLCBwbHVnaW5JZCwgJ0RlbGV0ZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KHJlbmFtZURlbGV0ZUhhbmRsZXIuaGFuZGxlRGVsZXRlKGZpbGUpKTtcbiAgICB9KVxuICApO1xuXG4gIHBsdWdpbi5yZWdpc3RlckV2ZW50KFxuICAgIGFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGUsIG9sZFBhdGgpID0+IHtcbiAgICAgIGlmICghc2hvdWxkSW52b2tlSGFuZGxlcihhcHAsIHBsdWdpbklkLCAnUmVuYW1lJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW52b2tlQXN5bmNTYWZlbHkocmVuYW1lRGVsZXRlSGFuZGxlci5oYW5kbGVSZW5hbWUoZmlsZSwgb2xkUGF0aCkpO1xuICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEludm9rZUhhbmRsZXIoYXBwOiBBcHAsIHBsdWdpbklkOiBzdHJpbmcsIGhhbmRsZXJUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkcyA9IGdldFJlbmFtZURlbGV0ZUhhbmRsZXJQbHVnaW5JZHMoYXBwKTtcbiAgY29uc3QgbWFpblBsdWdpbklkID0gcmVuYW1lRGVsZXRlSGFuZGxlclBsdWdpbklkc1swXTtcbiAgaWYgKG1haW5QbHVnaW5JZCAhPT0gcGx1Z2luSWQpIHtcbiAgICBjb25zb2xlLndhcm4oYCR7aGFuZGxlclR5cGV9IGhhbmRsZXIgZm9yIHBsdWdpbiAke3BsdWdpbklkfSBpcyBza2lwcGVkLCBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgYnkgcGx1Z2luICR7bWFpblBsdWdpbklkID8/ICcobm9uZSknfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY2xhc3MgUmVuYW1lRGVsZXRlSGFuZGxlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogQXBwLCBwcml2YXRlIHNldHRpbmdzQnVpbGRlcjogKCkgPT4gUmVuYW1lRGVsZXRlSGFuZGxlclNldHRpbmdzKSB7IH1cblxuICBwcml2YXRlIHJlbmFtaW5nUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBzcGVjaWFsUmVuYW1lczogU3BlY2lhbFJlbmFtZVtdID0gW107XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVJlbmFtZShmaWxlOiBUQWJzdHJhY3RGaWxlLCBvbGRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmRlYnVnKGBIYW5kbGUgUmVuYW1lICR7b2xkUGF0aH0gLT4gJHtmaWxlLnBhdGh9YCk7XG5cbiAgICBpZiAodGhpcy5yZW5hbWluZ1BhdGhzLmhhcyhvbGRQYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsUmVuYW1lID0gdGhpcy5zcGVjaWFsUmVuYW1lcy5maW5kKCh4KSA9PiB4Lm9sZFBhdGggPT09IGZpbGUucGF0aCk7XG4gICAgaWYgKHNwZWNpYWxSZW5hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShmaWxlLCBzcGVjaWFsUmVuYW1lLnRlbXBQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHAudmF1bHQuYWRhcHRlci5pbnNlbnNpdGl2ZSAmJiBvbGRQYXRoLnRvTG93ZXJDYXNlKCkgPT09IGZpbGUucGF0aC50b0xvd2VyQ2FzZSgpICYmIGRpcm5hbWUob2xkUGF0aCkgPT09IGRpcm5hbWUoZmlsZS5wYXRoKSkge1xuICAgICAgdGhpcy5zcGVjaWFsUmVuYW1lcy5wdXNoKHtcbiAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgbmV3UGF0aDogZmlsZS5wYXRoLFxuICAgICAgICB0ZW1wUGF0aDogam9pbihmaWxlLnBhcmVudD8ucGF0aCA/PyAnJywgJ19fdGVtcF9fJyArIGZpbGUubmFtZSlcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUoZmlsZSwgb2xkUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIGNvbnN0IHVwZGF0ZUFsbExpbmtzID0gdGhpcy5hcHAuZmlsZU1hbmFnZXIudXBkYXRlQWxsTGlua3M7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnVwZGF0ZUFsbExpbmtzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW5hbWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgYXdhaXQgdGhpcy5maWxsUmVuYW1lTWFwKGZpbGUsIG9sZFBhdGgsIHJlbmFtZU1hcCk7XG4gICAgICBmb3IgKGNvbnN0IG9sZFBhdGggb2YgcmVuYW1lTWFwLmtleXMoKSkge1xuICAgICAgICB0aGlzLnJlbmFtaW5nUGF0aHMuYWRkKG9sZFBhdGgpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtvbGRQYXRoMiwgbmV3UGF0aDJdIG9mIHJlbmFtZU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzUmVuYW1lKG9sZFBhdGgyLCBuZXdQYXRoMiwgcmVuYW1lTWFwKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzUmVuYW1lKG9sZFBhdGgsIGZpbGUucGF0aCwgcmVuYW1lTWFwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmRlbGV0ZShvbGRQYXRoKTtcbiAgICAgIHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnVwZGF0ZUFsbExpbmtzID0gdXBkYXRlQWxsTGlua3M7XG5cbiAgICAgIGNvbnN0IHNwZWNpYWxSZW5hbWUgPSB0aGlzLnNwZWNpYWxSZW5hbWVzLmZpbmQoKHgpID0+IHgudGVtcFBhdGggPT09IGZpbGUucGF0aCk7XG4gICAgICBpZiAoc3BlY2lhbFJlbmFtZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUoZmlsZSwgc3BlY2lhbFJlbmFtZS5uZXdQYXRoKTtcbiAgICAgICAgdGhpcy5zcGVjaWFsUmVuYW1lcy5yZW1vdmUoc3BlY2lhbFJlbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZURlbGV0ZShmaWxlOiBUQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5kZWJ1ZyhgSGFuZGxlIERlbGV0ZSAke2ZpbGUucGF0aH1gKTtcbiAgICBpZiAoIWlzTm90ZShmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmFtaW5nUGF0aHMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgoYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFhdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3NCdWlsZGVyKCkuc2hvdWxkRGVsZXRlT3JwaGFuQXR0YWNobWVudHMpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGb2xkZXIsIGZpbGUucGF0aCwgZmFsc2UsIHRoaXMuc2V0dGluZ3NCdWlsZGVyKCkuc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbGxSZW5hbWVNYXAoZmlsZTogVEZpbGUsIG9sZFBhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBmaWxlLnBhdGgpO1xuXG4gICAgaWYgKCFpc05vdGUoZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBvbGRQYXRoKTtcbiAgICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGNvbnN0IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgam9pbihkaXJuYW1lKG9sZFBhdGgpLCAnRFVNTVlfRklMRS5tZCcpKTtcblxuICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuOiBURmlsZVtdID0gW107XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGgpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKHRoaXMuYXBwLCBmaWxlKTtcbiAgICAgIGlmICghY2FjaGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGdldEFsbExpbmtzKGNhY2hlKSkge1xuICAgICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgbGluaywgb2xkUGF0aCk7XG4gICAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRhY2htZW50RmlsZS5wYXRoLnN0YXJ0c1dpdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgICBpZiAoYmFja2xpbmtzLmtleXMoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBWYXVsdC5yZWN1cnNlQ2hpbGRyZW4ob2xkQXR0YWNobWVudEZvbGRlciwgKGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChpc05vdGUoY2hpbGQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIGNoaWxkLnBhdGgpO1xuICAgICAgY29uc3QgbmV3RGlyID0gam9pbihuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCwgZGlybmFtZShyZWxhdGl2ZVBhdGgpKTtcbiAgICAgIGxldCBuZXdDaGlsZFBhdGggPSBqb2luKG5ld0RpciwgY2hpbGQubmFtZSk7XG4gICAgICBpZiAoY2hpbGQucGF0aCAhPT0gbmV3Q2hpbGRQYXRoKSB7XG4gICAgICAgIG5ld0NoaWxkUGF0aCA9IHRoaXMuYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIGNoaWxkLmJhc2VuYW1lKSwgY2hpbGQuZXh0ZW5zaW9uKTtcbiAgICAgICAgcmVuYW1lTWFwLnNldChjaGlsZC5wYXRoLCBuZXdDaGlsZFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBvbGRGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChvbGRQYXRoKTtcbiAgICAgIGxldCBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblxuICAgICAgaWYgKG9sZEZpbGUpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZSh0aGlzLmFwcCwgZGlybmFtZShuZXdQYXRoKSk7XG4gICAgICAgIGNvbnN0IG9sZEZvbGRlciA9IG9sZEZpbGUucGFyZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci50cmFzaEZpbGUobmV3RmlsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlbmFtZShvbGRGaWxlLCBuZXdQYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmICghdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpIHx8IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChvbGRQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NCdWlsZGVyKCkuc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzKSB7XG4gICAgICAgICAgYXdhaXQgZGVsZXRlRW1wdHlGb2xkZXJIaWVyYXJjaHkodGhpcy5hcHAsIG9sZEZvbGRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb2xkRmlsZSA9IGNyZWF0ZVRGaWxlSW5zdGFuY2UodGhpcy5hcHAudmF1bHQsIG9sZFBhdGgpO1xuICAgICAgbmV3RmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobmV3UGF0aCk7XG5cbiAgICAgIGlmICghb2xkRmlsZS5kZWxldGVkIHx8ICFuZXdGaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlbmFtZSAke29sZFBhdGh9IHRvICR7bmV3UGF0aH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgdGhpcy5nZXRCYWNrbGlua3Mob2xkRmlsZSwgbmV3RmlsZSk7XG5cbiAgICAgIGZvciAoY29uc3QgcGFyZW50Tm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgICAgICBsZXQgcGFyZW50Tm90ZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGFyZW50Tm90ZVBhdGgpO1xuICAgICAgICBpZiAoIXBhcmVudE5vdGUpIHtcbiAgICAgICAgICBjb25zdCBuZXdQYXJlbnROb3RlUGF0aCA9IHJlbmFtZU1hcC5nZXQocGFyZW50Tm90ZVBhdGgpO1xuICAgICAgICAgIGlmIChuZXdQYXJlbnROb3RlUGF0aCkge1xuICAgICAgICAgICAgcGFyZW50Tm90ZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobmV3UGFyZW50Tm90ZVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50Tm90ZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgUGFyZW50IG5vdGUgbm90IGZvdW5kOiAke3BhcmVudE5vdGVQYXRofWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYXBwbHlGaWxlQ2hhbmdlcyh0aGlzLmFwcCwgcGFyZW50Tm90ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpbmtzXG4gICAgICAgICAgICA9IChhd2FpdCB0aGlzLmdldEJhY2tsaW5rcyhvbGRGaWxlLCBuZXdGaWxlKSkuZ2V0KHBhcmVudE5vdGVQYXRoKSA/PyBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICAgICAgICBlbmRJbmRleDogbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0LFxuICAgICAgICAgICAgICBvbGRDb250ZW50OiBsaW5rLm9yaWdpbmFsLFxuICAgICAgICAgICAgICBuZXdDb250ZW50OiB1cGRhdGVMaW5rKHtcbiAgICAgICAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGhPckZpbGU6IHBhcmVudE5vdGUsXG4gICAgICAgICAgICAgICAgcmVuYW1lTWFwXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0NhbnZhc0ZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc1dpdGhSZXRyeSh0aGlzLmFwcCwgbmV3RmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW52YXNEYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDYW52YXNEYXRhO1xuICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjYW52YXNEYXRhLm5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcmVuYW1lTWFwLmdldChub2RlLmZpbGUpO1xuICAgICAgICAgICAgaWYgKCFuZXdQYXRoKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5maWxlID0gbmV3UGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRvSnNvbihjYW52YXNEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFya2Rvd25GaWxlKG5ld0ZpbGUpKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZUxpbmtzSW5GaWxlKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBhdGhPckZpbGU6IG5ld0ZpbGUsXG4gICAgICAgICAgb2xkUGF0aE9yRmlsZTogb2xkUGF0aCxcbiAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5kZWxldGUob2xkUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYWNrbGlua3Mob2xkRmlsZTogVEZpbGUsIG5ld0ZpbGU6IFRGaWxlIHwgbnVsbCk6IFByb21pc2U8TWFwPHN0cmluZywgUmVmZXJlbmNlQ2FjaGVbXT4+IHtcbiAgICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgUmVmZXJlbmNlQ2FjaGVbXT4oKTtcbiAgICBjb25zdCBvbGRMaW5rcyA9IGF3YWl0IGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHRoaXMuYXBwLCBvbGRGaWxlKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2Ygb2xkTGlua3Mua2V5cygpKSB7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIG9sZExpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdGaWxlKSB7XG4gICAgICByZXR1cm4gYmFja2xpbmtzO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG5ld0ZpbGUpO1xuXG4gICAgZm9yIChjb25zdCBwYXRoIG9mIG5ld0xpbmtzLmtleXMoKSkge1xuICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KHBhdGgpID8/IFtdO1xuICAgICAgbGlua3MucHVzaCguLi5uZXdMaW5rcy5nZXQocGF0aCkgPz8gW10pO1xuICAgICAgYmFja2xpbmtzLnNldChwYXRoLCBsaW5rcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2tsaW5rcztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZW5hbWVEZWxldGVIYW5kbGVyUGx1Z2luSWRzKGFwcDogQXBwKTogc3RyaW5nW10ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPHN0cmluZ1tdPihhcHAsICdyZW5hbWVEZWxldGVIYW5kbGVyUGx1Z2luSWRzJywgW10pLnZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxzQkFJTztBQUVQLDZCQUFvQztBQUVwQyxtQkFBa0M7QUFDbEMsb0JBQXVCO0FBQ3ZCLGtCQUlPO0FBQ1AsaUJBQXlDO0FBQ3pDLDRCQUF3QztBQUN4QyxrQkFJTztBQUNQLDJCQUlPO0FBQ1AsMkJBSU87QUFDUCxtQkFNTztBQWpEUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUF5RU8sU0FBUyw2QkFBNkIsUUFBZ0IsaUJBQTBEO0FBQ3JILFFBQU0sK0JBQStCLGdDQUFnQyxPQUFPLEdBQUc7QUFDL0UsUUFBTSxXQUFXLE9BQU8sU0FBUztBQUVqQyxNQUFJLDZC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Q0FBQztBQUFBLFVBQ0g7QUFFQSxpQkFBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0g7QUFFQSxjQUFJLG1DQUFhLE9BQU8sR0FBRztBQUN6QixrQkFBTSwrQkFBaUIsS0FBSyxLQUFLLFNBQVMsQ0FBQyxZQUFZO0FBQ3JELGdCQUFNLGFBQWEsS0FBSyxNQUFNLE9BQU87QUFDckMscUJBQVcsUUFBUSxXQUFXLE9BQU87QUFDbkMsZ0JBQUksS0FBSyxTQUFTLFFBQVE7QUFDeEI7QUFBQSxZQUNGO0FBQ0Esa0JBQU1DLFdBQVUsVUFBVSxJQUFJLEtBQUssSUFBSTtBQUN2QyxnQkFBSSxDQUFDQSxVQUFTO0FBQ1o7QUFBQSxZQUNGO0FBQ0EsaUJBQUssT0FBT0E7QUFBQSxVQUNkO0FBQ0EscUJBQU8sc0JBQU8sVUFBVTtBQUFBLFFBQzFCLENBQUM7QUFBQSxNQUNILGVBQVcscUNBQWUsT0FBTyxHQUFHO0FBQ2xDLGtCQUFNLCtCQUFrQjtBQUFBLFVBQ3RCLEtBQUssS0FBSztBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBQ1osZUFBZTtBQUFBLFVBQ2Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixVQUFFO0FBQ0EsV0FBSyxjQUFjLE9BQU8sT0FBTztBQUFBLElBQ25DO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBYyxhQUFhLFNBQWdCLFNBQStEO0FBQ3hHLFVBQU0sWUFBWSxvQkFBSSxJQUE4QjtBQUNwRCxVQUFNLFdBQVcsVUFBTSw4Q0FBd0IsS0FBSyxLQUFLLE9BQU87QUFDaEUsZUFBVyxRQUFRLFNBQVMsS0FBSyxHQUFHO0FBQ2xDLGdCQUFVLElBQUksTUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQztBQUFBLElBQzlDO0FBRUEsUUFBSSxDQUFDLFNBQVM7QUFDWixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sV0FBVyxVQUFNLDhDQUF3QixLQUFLLEtBQUssT0FBTztBQUVoRSxlQUFXLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDbEMsWUFBTSxRQUFRLFVBQVUsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUN0QyxZQUFNLEtBQUssR0FBRyxTQUFTLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0QyxnQkFBVSxJQUFJLE1BQU0sS0FBSztBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLFNBQVMsZ0NBQWdDLEtBQW9CO0FBQzNELGFBQU8scUNBQW1DLEtBQUssZ0NBQWdDLENBQUMsQ0FBQyxFQUFFO0FBQ3JGOyIsCiAgIm5hbWVzIjogWyJvbGRQYXRoIiwgInNwZWNpYWxSZW5hbWUiLCAibmV3UGF0aCJdCn0K
|
@@ -30,6 +30,7 @@ __export(TFile_exports, {
|
|
30
30
|
});
|
31
31
|
module.exports = __toCommonJS(TFile_exports);
|
32
32
|
var import_obsidian = require('obsidian');
|
33
|
+
var import_implementations = require('obsidian-typings/implementations');
|
33
34
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
34
35
|
if (typeof __filename !== "string") {
|
35
36
|
return new URL(window.location.href);
|
@@ -41,10 +42,14 @@ var __process = globalThis["process"] ?? {
|
|
41
42
|
"env": {},
|
42
43
|
"platform": "android"
|
43
44
|
};
|
44
|
-
function getFile(app, pathOrFile) {
|
45
|
-
|
45
|
+
function getFile(app, pathOrFile, allowNonExisting) {
|
46
|
+
let file = getFileOrNull(app, pathOrFile);
|
46
47
|
if (!file) {
|
47
|
-
|
48
|
+
if (allowNonExisting) {
|
49
|
+
file = (0, import_implementations.createTFileInstance)(app.vault, pathOrFile);
|
50
|
+
} else {
|
51
|
+
throw new Error(`File not found: ${pathOrFile}`);
|
52
|
+
}
|
48
53
|
}
|
49
54
|
return file;
|
50
55
|
}
|
@@ -56,4 +61,4 @@ function getFileOrNull(app, pathOrFile) {
|
|
56
61
|
getFile,
|
57
62
|
getFileOrNull
|
58
63
|
});
|
59
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1RGaWxlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/
|
64
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1RGaWxlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBURmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBURmlsZSBpbnN0YW5jZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHtcbiAgQXBwLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBjcmVhdGVURmlsZUluc3RhbmNlIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXRoIG9yIGEgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aE9yRmlsZSA9IHN0cmluZyB8IFRGaWxlO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhIFRGaWxlIG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0aCBvciBmaWxlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHJldHJpZXZlIHRoZSBURmlsZSBvYmplY3QgZm9yLlxuICogQHBhcmFtIGFsbG93Tm9uRXhpc3RpbmcgLSBXaGV0aGVyIHRvIGFsbG93IHRoZSBmaWxlIHRvIG5vdCBleGlzdC5cbiAqICBJZiBgdHJ1ZWAsIGEgbmV3IFRGaWxlIG9iamVjdCBpcyBjcmVhdGVkIGZvciB0aGUgcHJvdmlkZWQgcGF0aC5cbiAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kLlxuICogQHJldHVybnMgVGhlIFRGaWxlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZpbGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIGFsbG93Tm9uRXhpc3Rpbmc/OiBib29sZWFuKTogVEZpbGUge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoYXBwLCBwYXRoT3JGaWxlKTtcbiAgaWYgKCFmaWxlKSB7XG4gICAgaWYgKGFsbG93Tm9uRXhpc3RpbmcpIHtcbiAgICAgIGZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKGFwcC52YXVsdCwgcGF0aE9yRmlsZSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke3BhdGhPckZpbGUgYXMgc3RyaW5nfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWxlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIFRGaWxlIG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0aCBvciBmaWxlLlxuICogSWYgdGhlIHByb3ZpZGVkIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBURmlsZSBvYmplY3QsIGl0IGlzIHJldHVybmVkIGFzIGlzLlxuICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYXBwJ3MgdmF1bHQgdG8gcmV0cmlldmUgdGhlIFRGaWxlIG9iamVjdCBieSBpdHMgcGF0aC5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgVEZpbGUgb2JqZWN0IGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVPck51bGwoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBURmlsZSB8IG51bGwge1xuICByZXR1cm4gcGF0aE9yRmlsZSBpbnN0YW5jZW9mIFRGaWxlID8gcGF0aE9yRmlsZSA6IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGhPckZpbGUpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHNCQUdPO0FBQ1AsNkJBQW9DO0FBZnBDLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSTtBQUFDLE1BQUcsT0FBTyxlQUFhLFVBQVM7QUFBQyxXQUFPLElBQUksSUFBSSxPQUFPLFNBQVMsSUFBSTtBQUFBLEVBQUM7QUFBQyxTQUFPLFFBQVEsVUFBVSxFQUFFLGNBQWMsVUFBVTtBQUFDLEdBQUc7QUFDNUwsSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQTRCTyxTQUFTLFFBQVEsS0FBVSxZQUF3QixrQkFBbUM7QUFDM0YsTUFBSSxPQUFPLGNBQWMsS0FBSyxVQUFVO0FBQ3hDLE1BQUksQ0FBQyxNQUFNO0FBQ1QsUUFBSSxrQkFBa0I7QUFDcEIsaUJBQU8sNENBQW9CLElBQUksT0FBTyxVQUFvQjtBQUFBLElBQzVELE9BQU87QUFDTCxZQUFNLElBQUksTUFBTSxtQkFBbUIsVUFBb0IsRUFBRTtBQUFBLElBQzNEO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVVPLFNBQVMsY0FBYyxLQUFVLFlBQXNDO0FBQzVFLFNBQU8sc0JBQXNCLHdCQUFRLGFBQWEsSUFBSSxNQUFNLGNBQWMsVUFBVTtBQUN0RjsiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -12,10 +12,13 @@ export type PathOrFile = string | TFile;
|
|
12
12
|
*
|
13
13
|
* @param app - The Obsidian App instance.
|
14
14
|
* @param pathOrFile - The path or file to retrieve the TFile object for.
|
15
|
+
* @param allowNonExisting - Whether to allow the file to not exist.
|
16
|
+
* If `true`, a new TFile object is created for the provided path.
|
17
|
+
* If `false`, an error is thrown if the file is not found.
|
15
18
|
* @returns The TFile object corresponding to the provided path or file.
|
16
19
|
* @throws Error if the file is not found.
|
17
20
|
*/
|
18
|
-
export declare function getFile(app: App, pathOrFile: PathOrFile): TFile;
|
21
|
+
export declare function getFile(app: App, pathOrFile: PathOrFile, allowNonExisting?: boolean): TFile;
|
19
22
|
/**
|
20
23
|
* Retrieves a TFile object based on the provided path or file.
|
21
24
|
* If the provided argument is already a TFile object, it is returned as is.
|
@@ -31,6 +31,7 @@ __export(TFolder_exports, {
|
|
31
31
|
});
|
32
32
|
module.exports = __toCommonJS(TFolder_exports);
|
33
33
|
var import_obsidian = require('obsidian');
|
34
|
+
var import_implementations = require('obsidian-typings/implementations');
|
34
35
|
var import_TAbstractFile = require('./TAbstractFile.cjs');
|
35
36
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
36
37
|
if (typeof __filename !== "string") {
|
@@ -43,10 +44,14 @@ var __process = globalThis["process"] ?? {
|
|
43
44
|
"env": {},
|
44
45
|
"platform": "android"
|
45
46
|
};
|
46
|
-
function getFolder(app, pathOrFolder) {
|
47
|
-
|
47
|
+
function getFolder(app, pathOrFolder, allowNonExisting) {
|
48
|
+
let folder = getFolderOrNull(app, pathOrFolder);
|
48
49
|
if (!folder) {
|
49
|
-
|
50
|
+
if (allowNonExisting) {
|
51
|
+
folder = (0, import_implementations.createTFolderInstance)(app.vault, pathOrFolder);
|
52
|
+
} else {
|
53
|
+
throw new Error(`Folder not found: ${pathOrFolder}`);
|
54
|
+
}
|
50
55
|
}
|
51
56
|
return folder;
|
52
57
|
}
|
@@ -77,4 +82,4 @@ function getMarkdownFiles(app, pathOrFolder, isRecursive) {
|
|
77
82
|
getFolderOrNull,
|
78
83
|
getMarkdownFiles
|
79
84
|
});
|
80
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1RGb2xkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/
|
85
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1RGb2xkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFRGb2xkZXJcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggVEZvbGRlciBpbnN0YW5jZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQge1xuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgY3JlYXRlVEZvbGRlckluc3RhbmNlIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgeyBpc01hcmtkb3duRmlsZSB9IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHBhdGggb3IgYW4gaW5zdGFuY2Ugb2YgVEZvbGRlci5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aE9yRm9sZGVyID0gc3RyaW5nIHwgVEZvbGRlcjtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBURm9sZGVyIG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXBwIGFuZCBwYXRoT3JGb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gYWxsb3dOb25FeGlzdGluZyAtIFdoZXRoZXIgdG8gYWxsb3cgdGhlIGZvbGRlciB0byBub3QgZXhpc3QuXG4gKiAgSWYgYHRydWVgLCBhIG5ldyBURm9sZGVyIG9iamVjdCBpcyBjcmVhdGVkIGZvciB0aGUgcHJvdmlkZWQgcGF0aC5cbiAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZvbGRlciBpcyBub3QgZm91bmQuXG4gKiBAcmV0dXJucyBUaGUgcmV0cmlldmVkIFRGb2xkZXIgb2JqZWN0LlxuICogQHRocm93cyBJZiB0aGUgZm9sZGVyIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIsIGFsbG93Tm9uRXhpc3Rpbmc/OiBib29sZWFuKTogVEZvbGRlciB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBwYXRoT3JGb2xkZXIpO1xuICBpZiAoIWZvbGRlcikge1xuICAgIGlmIChhbGxvd05vbkV4aXN0aW5nKSB7XG4gICAgICBmb2xkZXIgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLnZhdWx0LCBwYXRoT3JGb2xkZXIgYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgbm90IGZvdW5kOiAke3BhdGhPckZvbGRlciBhcyBzdHJpbmd9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbGRlcjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBURm9sZGVyIG9iamVjdCBvciBudWxsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byByZXRyaWV2ZSB0aGUgVEZvbGRlciBmcm9tLlxuICogQHJldHVybnMgVGhlIFRGb2xkZXIgb2JqZWN0IGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlck9yTnVsbChhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIgfCBudWxsKTogVEZvbGRlciB8IG51bGwge1xuICBpZiAocGF0aE9yRm9sZGVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHBhdGhPckZvbGRlciBpbnN0YW5jZW9mIFRGb2xkZXIgPyBwYXRoT3JGb2xkZXIgOiBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGhPckZvbGRlcik7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIFRGaWxlIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBtYXJrZG93biBmaWxlcyB3aXRoaW4gYSBzcGVjaWZpZWQgZm9sZGVyIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBBcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIHRvIHJldHJpZXZlIHRoZSBtYXJrZG93biBmaWxlcyBmcm9tLlxuICogQHBhcmFtIGlzUmVjdXJzaXZlIC0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgbWFya2Rvd24gZmlsZXMgd2l0aGluIHN1YmZvbGRlcnMuIERlZmF1bHQgaXMgZmFsc2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBURmlsZSBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgbWFya2Rvd24gZmlsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93bkZpbGVzKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlciwgaXNSZWN1cnNpdmU/OiBib29sZWFuKTogVEZpbGVbXSB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlcihhcHAsIHBhdGhPckZvbGRlcik7XG5cbiAgbGV0IG1hcmtkb3duRmlsZXM6IFRGaWxlW10gPSBbXTtcblxuICBpZiAoIWlzUmVjdXJzaXZlKSB7XG4gICAgbWFya2Rvd25GaWxlcyA9IGZvbGRlci5jaGlsZHJlbi5maWx0ZXIoKGZpbGUpID0+IGlzTWFya2Rvd25GaWxlKGZpbGUpKSBhcyBURmlsZVtdO1xuICB9IGVsc2Uge1xuICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmb2xkZXIsIChhYnN0cmFjdEZpbGUpID0+IHtcbiAgICAgIGlmIChpc01hcmtkb3duRmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgICAgIG1hcmtkb3duRmlsZXMucHVzaChhYnN0cmFjdEZpbGUgYXMgVEZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbWFya2Rvd25GaWxlcyA9IG1hcmtkb3duRmlsZXMuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSk7XG4gIHJldHVybiBtYXJrZG93bkZpbGVzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsc0JBSU87QUFDUCw2QkFBc0M7QUFFdEMsMkJBQStCO0FBbkIvQixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFnQ08sU0FBUyxVQUFVLEtBQVUsY0FBNEIsa0JBQXFDO0FBQ25HLE1BQUksU0FBUyxnQkFBZ0IsS0FBSyxZQUFZO0FBQzlDLE1BQUksQ0FBQyxRQUFRO0FBQ1gsUUFBSSxrQkFBa0I7QUFDcEIsbUJBQVMsOENBQXNCLElBQUksT0FBTyxZQUFzQjtBQUFBLElBQ2xFLE9BQU87QUFDTCxZQUFNLElBQUksTUFBTSxxQkFBcUIsWUFBc0IsRUFBRTtBQUFBLElBQy9EO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVNPLFNBQVMsZ0JBQWdCLEtBQVUsY0FBbUQ7QUFDM0YsTUFBSSxpQkFBaUIsTUFBTTtBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sd0JBQXdCLDBCQUFVLGVBQWUsSUFBSSxNQUFNLGdCQUFnQixZQUFZO0FBQ2hHO0FBVU8sU0FBUyxpQkFBaUIsS0FBVSxjQUE0QixhQUFnQztBQUNyRyxRQUFNLFNBQVMsVUFBVSxLQUFLLFlBQVk7QUFFMUMsTUFBSSxnQkFBeUIsQ0FBQztBQUU5QixNQUFJLENBQUMsYUFBYTtBQUNoQixvQkFBZ0IsT0FBTyxTQUFTLE9BQU8sQ0FBQyxhQUFTLHFDQUFlLElBQUksQ0FBQztBQUFBLEVBQ3ZFLE9BQU87QUFDTCwwQkFBTSxnQkFBZ0IsUUFBUSxDQUFDLGlCQUFpQjtBQUM5QyxjQUFJLHFDQUFlLFlBQVksR0FBRztBQUNoQyxzQkFBYyxLQUFLLFlBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsa0JBQWdCLGNBQWMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztBQUN6RSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
@@ -13,10 +13,13 @@ export type PathOrFolder = string | TFolder;
|
|
13
13
|
*
|
14
14
|
* @param app - The Obsidian app instance.
|
15
15
|
* @param pathOrFolder - The path or folder identifier.
|
16
|
+
* @param allowNonExisting - Whether to allow the folder to not exist.
|
17
|
+
* If `true`, a new TFolder object is created for the provided path.
|
18
|
+
* If `false`, an error is thrown if the folder is not found.
|
16
19
|
* @returns The retrieved TFolder object.
|
17
20
|
* @throws If the folder is not found.
|
18
21
|
*/
|
19
|
-
export declare function getFolder(app: App, pathOrFolder: PathOrFolder): TFolder;
|
22
|
+
export declare function getFolder(app: App, pathOrFolder: PathOrFolder, allowNonExisting?: boolean): TFolder;
|
20
23
|
/**
|
21
24
|
* Retrieves a TFolder object or null based on the provided path or folder.
|
22
25
|
*
|
package/package.json
CHANGED