obsidian-dev-utils
Version:
This is the collection of useful functions that you can use for your Obsidian plugin development
331 lines (317 loc) • 26.9 kB
JavaScript
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
(function initCjs() {
const globalThisRecord = globalThis;
globalThisRecord['__name'] ??= name;
const originalRequire = require;
if (originalRequire && !originalRequire.__isPatched) {
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
require = Object.assign(
(id) => requirePatched(id),
originalRequire,
{
__isPatched: true
}
);
}
const newFuncs = {
__extractDefault() {
return extractDefault;
},
process() {
const browserProcess = {
browser: true,
cwd() {
return '/';
},
env: {},
platform: 'android'
};
return browserProcess;
}
};
for (const key of Object.keys(newFuncs)) {
globalThisRecord[key] ??= newFuncs[key]?.();
}
function name(obj) {
return obj;
}
function extractDefault(module) {
return module && module.__esModule && 'default' in module ? module.default : module;
}
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
'obsidian',
'@codemirror/autocomplete',
'@codemirror/collab',
'@codemirror/commands',
'@codemirror/language',
'@codemirror/lint',
'@codemirror/search',
'@codemirror/state',
'@codemirror/text',
'@codemirror/view',
'@lezer/common',
'@lezer/lr',
'@lezer/highlight'];
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
'@codemirror/closebrackets',
'@codemirror/comment',
'@codemirror/fold',
'@codemirror/gutter',
'@codemirror/highlight',
'@codemirror/history',
'@codemirror/matchbrackets',
'@codemirror/panel',
'@codemirror/rangeset',
'@codemirror/rectangular-selection',
'@codemirror/stream-parser',
'@codemirror/tooltip'];
function requirePatched(id) {
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
return originalRequire?.(id);
}
// eslint-disable-next-line @typescript-eslint/no-deprecated, @typescript-eslint/no-unnecessary-condition -- We need access to app here which might not be available yet.
if (globalThis?.app?.isMobile) {
if (id === 'process' || id === 'node:process') {
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
return globalThis.process;
}
} else {
const module = originalRequire?.(id);
if (module) {
return extractDefault(module);
}
}
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
return {};
}
})();
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var FileCommandBase_exports = {};
__export(FileCommandBase_exports, {
ArrayDelegatingFileCommandInvocation: () => ArrayDelegatingFileCommandInvocation,
FileCommandBase: () => FileCommandBase,
FileCommandInvocationBase: () => FileCommandInvocationBase,
FilesCommandInvocationBase: () => FilesCommandInvocationBase,
SequentialFilesCommandInvocationBase: () => SequentialFilesCommandInvocationBase
});
module.exports = __toCommonJS(FileCommandBase_exports);
var import_obsidian = require('obsidian');
var import_FileSystem = require('../FileSystem.cjs');
var import_AbstractFileCommandBase = require('./AbstractFileCommandBase.cjs');
class FileCommandInvocationBase extends import_AbstractFileCommandBase.AbstractFileCommandInvocationBase {
/**
* Gets the file that the command invocation belongs to.
*
* @returns The file that the command invocation belongs to.
* @throws If the abstract file is not a file.
*/
get file() {
return (0, import_FileSystem.asFile)(this._abstractFile);
}
/**
* Creates a new file command invocation.
*
* @param plugin - The plugin that the command invocation belongs to.
* @param file - The file to invoke the command for.
*/
constructor(plugin, file) {
super(plugin, file);
}
/**
* Checks if the command can execute.
*
* @returns Whether the command can execute.
*/
canExecute() {
return super.canExecute() && !!this._abstractFile;
}
}
class ArrayDelegatingFileCommandInvocation extends FileCommandInvocationBase {
/**
* Creates a new array-delegating file command invocation.
*
* @param plugin - The plugin that the command invocation belongs to.
* @param file - The file to invoke the command for.
* @param createCommandInvocationForFiles - The function to create a command invocation for files.
*/
constructor(plugin, file, createCommandInvocationForFiles) {
super(plugin, file);
this.createCommandInvocationForFiles = createCommandInvocationForFiles;
}
/**
* Checks if the command can execute.
*
* @returns Whether the command can execute.
*/
canExecute() {
return super.canExecute() && this.createCommandInvocationForFiles([this.file]).invoke(true);
}
/**
* Executes the command.
*
* @returns A promise that resolves when the command has been executed.
*/
async execute() {
await this.createCommandInvocationForFiles([this.file]).invokeAsync(false);
}
}
class FileCommandBase extends import_AbstractFileCommandBase.AbstractFileCommandBase {
/**
* Creates a new abstract file command invocation.
*
* @param abstractFile - The abstract file to invoke the command for.
* @returns The command invocation.
*/
createCommandInvocation(abstractFile) {
return this.createCommandInvocationForAbstractFile(abstractFile ?? this.app.workspace.getActiveFile());
}
/**
* Creates a new abstract file command invocation for an abstract file.
*
* @param abstractFile - The abstract file to invoke the command for. If `null`, the active file is used.
* @returns The command invocation.
*/
createCommandInvocationForAbstractFile(abstractFile) {
return this.createCommandInvocationForFile((0, import_FileSystem.asFileOrNull)(abstractFile));
}
/**
* Creates a new abstract files command invocation for abstract files.
*
* @param abstractFiles - The abstract files to invoke the command for.
* @returns A new abstract files command invocation.
*/
createCommandInvocationForAbstractFiles(abstractFiles) {
return this.createCommandInvocationForFiles((0, import_FileSystem.asArrayOfFiles)(abstractFiles));
}
/**
* Creates a new files command invocation for files.
*
* @param files - The files to invoke the command for.
* @returns A new files command invocation.
*/
createCommandInvocationForFiles(files) {
return new SequentialFilesCommandInvocationBase(this.plugin, files, this.createCommandInvocationForFile.bind(this));
}
/**
* Checks if the command should be added to the abstract file menu.
*
* @param abstractFile - The abstract file to check.
* @param source - The source of the abstract file.
* @param leaf - The leaf to check.
* @returns Whether the command should be added to the abstract file menu.
*/
shouldAddToAbstractFileMenu(abstractFile, source, leaf) {
if (!(0, import_FileSystem.isFile)(abstractFile)) {
return false;
}
return this.shouldAddToFileMenu(abstractFile, source, leaf);
}
/**
* Checks if the command should be added to the abstract files menu.
*
* @param abstractFiles - The abstract files to check.
* @param source - The source of the abstract files.
* @param leaf - The leaf to check.
* @returns Whether the command should be added to the abstract files menu.
*/
shouldAddToAbstractFilesMenu(abstractFiles, source, leaf) {
if (!abstractFiles.every((abstractFile) => (0, import_FileSystem.isFile)(abstractFile))) {
return false;
}
return this.shouldAddToFilesMenu((0, import_FileSystem.asArrayOfFiles)(abstractFiles), source, leaf);
}
/**
* Checks if the command should be added to the file menu.
*
* @param _file - The file to check.
* @param _source - The source of the file.
* @param _leaf - The leaf to check.
* @returns Whether the command should be added to the file menu.
*/
shouldAddToFileMenu(_file, _source, _leaf) {
return false;
}
/**
* Checks if the command should be added to the files menu.
*
* @param _files - The files to check.
* @param _source - The source of the files.
* @param _leaf - The leaf to check.
* @returns Whether the command should be added to the files menu.
*/
shouldAddToFilesMenu(_files, _source, _leaf) {
return false;
}
}
class FilesCommandInvocationBase extends import_AbstractFileCommandBase.AbstractFilesCommandInvocationBase {
/**
* Creates a new files command invocation.
*
* @param plugin - The plugin that the command invocation belongs to.
* @param files - The files to invoke the command for.
*/
constructor(plugin, files) {
super(plugin, files);
this.files = files;
}
}
class SequentialFilesCommandInvocationBase extends FilesCommandInvocationBase {
/**
* Creates a new sequential files command invocation.
*
* @param plugin - The plugin that the command invocation belongs to.
* @param files - The files to invoke the command for.
* @param createCommandInvocationForFile - The function to create a command invocation for a file.
*/
constructor(plugin, files, createCommandInvocationForFile) {
super(plugin, files);
this.createCommandInvocationForFile = createCommandInvocationForFile;
}
/**
* Checks if the command can execute.
*
* @returns Whether the command can execute.
*/
canExecute() {
return super.canExecute() && this.files.length > 0 && this.files.every((file) => this.createCommandInvocationForFile(file).invoke(true));
}
/**
* Executes the command.
*
* @returns A promise that resolves when the command has been executed.
*/
async execute() {
for (const file of this.files) {
await this.createCommandInvocationForFile(file).invokeAsync(false);
}
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ArrayDelegatingFileCommandInvocation,
FileCommandBase,
FileCommandInvocationBase,
FilesCommandInvocationBase,
SequentialFilesCommandInvocationBase
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0NvbW1hbmRzL0ZpbGVDb21tYW5kQmFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBCYXNlIGNsYXNzZXMgZm9yIGZpbGUgY29tbWFuZHMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBQbHVnaW4sXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFdvcmtzcGFjZUxlYWZcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBURmlsZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgYXNBcnJheU9mRmlsZXMsXG4gIGFzRmlsZSxcbiAgYXNGaWxlT3JOdWxsLFxuICBpc0ZpbGVcbn0gZnJvbSAnLi4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEZpbGVDb21tYW5kQmFzZSxcbiAgQWJzdHJhY3RGaWxlQ29tbWFuZEludm9jYXRpb25CYXNlLFxuICBBYnN0cmFjdEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlXG59IGZyb20gJy4vQWJzdHJhY3RGaWxlQ29tbWFuZEJhc2UudHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGZpbGUgY29tbWFuZCBpbnZvY2F0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgYmVsb25ncyB0by5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbiBleHRlbmRzIFBsdWdpbj4gZXh0ZW5kcyBBYnN0cmFjdEZpbGVDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbj4ge1xuICAvKipcbiAgICogR2V0cyB0aGUgZmlsZSB0aGF0IHRoZSBjb21tYW5kIGludm9jYXRpb24gYmVsb25ncyB0by5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZpbGUgdGhhdCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIGJlbG9uZ3MgdG8uXG4gICAqIEB0aHJvd3MgSWYgdGhlIGFic3RyYWN0IGZpbGUgaXMgbm90IGEgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZSgpOiBURmlsZSB7XG4gICAgcmV0dXJuIGFzRmlsZSh0aGlzLl9hYnN0cmFjdEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBjb21tYW5kIGludm9jYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGludm9rZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGx1Z2luOiBUUGx1Z2luLCBmaWxlOiBudWxsIHwgVEZpbGUpIHtcbiAgICBzdXBlcihwbHVnaW4sIGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5FeGVjdXRlKCkgJiYgISF0aGlzLl9hYnN0cmFjdEZpbGU7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhcnJheS1kZWxlZ2F0aW5nIGZpbGUgY29tbWFuZCBpbnZvY2F0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgYmVsb25ncyB0by5cbiAqL1xuZXhwb3J0IGNsYXNzIEFycmF5RGVsZWdhdGluZ0ZpbGVDb21tYW5kSW52b2NhdGlvbjxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPiBleHRlbmRzIEZpbGVDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbj4ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhcnJheS1kZWxlZ2F0aW5nIGZpbGUgY29tbWFuZCBpbnZvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0aGF0IHRoZSBjb21tYW5kIGludm9jYXRpb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBpbnZva2UgdGhlIGNvbW1hbmQgZm9yLlxuICAgKiBAcGFyYW0gY3JlYXRlQ29tbWFuZEludm9jYXRpb25Gb3JGaWxlcyAtIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb21tYW5kIGludm9jYXRpb24gZm9yIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHBsdWdpbjogVFBsdWdpbixcbiAgICBmaWxlOiBudWxsIHwgVEZpbGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGVzOiAoZmlsZXM6IFRGaWxlW10pID0+IEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+XG4gICkge1xuICAgIHN1cGVyKHBsdWdpbiwgZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhbkV4ZWN1dGUoKSAmJiB0aGlzLmNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yRmlsZXMoW3RoaXMuZmlsZV0pLmludm9rZSh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlQ29tbWFuZEludm9jYXRpb25Gb3JGaWxlcyhbdGhpcy5maWxlXSkuaW52b2tlQXN5bmMoZmFsc2UpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgYmVsb25ncyB0by5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVDb21tYW5kQmFzZTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luID0gUGx1Z2luPiBleHRlbmRzIEFic3RyYWN0RmlsZUNvbW1hbmRCYXNlPFRQbHVnaW4+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYWJzdHJhY3QgZmlsZSBjb21tYW5kIGludm9jYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBpbnZva2UgdGhlIGNvbW1hbmQgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgY29tbWFuZCBpbnZvY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uKGFic3RyYWN0RmlsZT86IFRBYnN0cmFjdEZpbGUpOiBBYnN0cmFjdEZpbGVDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbj4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSA/PyB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBpbnZvY2F0aW9uIGZvciBhbiBhYnN0cmFjdCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gaW52b2tlIHRoZSBjb21tYW5kIGZvci4gSWYgYG51bGxgLCB0aGUgYWN0aXZlIGZpbGUgaXMgdXNlZC5cbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaW52b2NhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGU6IG51bGwgfCBUQWJzdHJhY3RGaWxlKTogQWJzdHJhY3RGaWxlQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGUoYXNGaWxlT3JOdWxsKGFic3RyYWN0RmlsZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYWJzdHJhY3QgZmlsZXMgY29tbWFuZCBpbnZvY2F0aW9uIGZvciBhYnN0cmFjdCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgYWJzdHJhY3QgZmlsZXMgdG8gaW52b2tlIHRoZSBjb21tYW5kIGZvci5cbiAgICogQHJldHVybnMgQSBuZXcgYWJzdHJhY3QgZmlsZXMgY29tbWFuZCBpbnZvY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBBYnN0cmFjdEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGVzKGFzQXJyYXlPZkZpbGVzKGFic3RyYWN0RmlsZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGZpbGUgY29tbWFuZCBpbnZvY2F0aW9uIGZvciBhIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gaW52b2tlIHRoZSBjb21tYW5kIGZvci5cbiAgICogQHJldHVybnMgQSBuZXcgZmlsZSBjb21tYW5kIGludm9jYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQ29tbWFuZEludm9jYXRpb25Gb3JGaWxlKGZpbGU6IG51bGwgfCBURmlsZSk6IEZpbGVDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZXMgY29tbWFuZCBpbnZvY2F0aW9uIGZvciBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIGludm9rZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqIEByZXR1cm5zIEEgbmV3IGZpbGVzIGNvbW1hbmQgaW52b2NhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGVzKGZpbGVzOiBURmlsZVtdKTogRmlsZXNDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbj4ge1xuICAgIHJldHVybiBuZXcgU2VxdWVudGlhbEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlKHRoaXMucGx1Z2luLCBmaWxlcywgdGhpcy5jcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWJzdHJhY3QgZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBhYnN0cmFjdCBmaWxlLlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWJzdHJhY3QgZmlsZSBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUsIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIGlmICghaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlTWVudShhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWJzdHJhY3QgZmlsZXMgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgYWJzdHJhY3QgZmlsZXMgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgbGVhZiB0byBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGFic3RyYWN0IGZpbGVzIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudShhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10sIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIGlmICghYWJzdHJhY3RGaWxlcy5ldmVyeSgoYWJzdHJhY3RGaWxlKSA9PiBpc0ZpbGUoYWJzdHJhY3RGaWxlKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlc01lbnUoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcyksIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZSB0byBjaGVjay5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBmaWxlLlxuICAgKiBAcGFyYW0gX2xlYWYgLSBUaGUgbGVhZiB0byBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGZpbGUgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0ZpbGVNZW51KF9maWxlOiBURmlsZSwgX3NvdXJjZTogc3RyaW5nLCBfbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZmlsZXMgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9maWxlcyAtIFRoZSBmaWxlcyB0byBjaGVjay5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBmaWxlcy5cbiAgICogQHBhcmFtIF9sZWFmIC0gVGhlIGxlYWYgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvRmlsZXNNZW51KF9maWxlczogVEZpbGVbXSwgX3NvdXJjZTogc3RyaW5nLCBfbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBmaWxlcyBjb21tYW5kIGludm9jYXRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVFBsdWdpbiAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gdGhhdCB0aGUgY29tbWFuZCBiZWxvbmdzIHRvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmlsZXNDb21tYW5kSW52b2NhdGlvbkJhc2U8VFBsdWdpbiBleHRlbmRzIFBsdWdpbj4gZXh0ZW5kcyBBYnN0cmFjdEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZXMgY29tbWFuZCBpbnZvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0aGF0IHRoZSBjb21tYW5kIGludm9jYXRpb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIGludm9rZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGx1Z2luOiBUUGx1Z2luLCBwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFRGaWxlW10pIHtcbiAgICBzdXBlcihwbHVnaW4sIGZpbGVzKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHNlcXVlbnRpYWwgZmlsZXMgY29tbWFuZCBpbnZvY2F0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgYmVsb25ncyB0by5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcXVlbnRpYWxGaWxlc0NvbW1hbmRJbnZvY2F0aW9uQmFzZTxUUGx1Z2luIGV4dGVuZHMgUGx1Z2luPiBleHRlbmRzIEZpbGVzQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgc2VxdWVudGlhbCBmaWxlcyBjb21tYW5kIGludm9jYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRoYXQgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gaW52b2tlIHRoZSBjb21tYW5kIGZvci5cbiAgICogQHBhcmFtIGNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yRmlsZSAtIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb21tYW5kIGludm9jYXRpb24gZm9yIGEgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwbHVnaW46IFRQbHVnaW4sIGZpbGVzOiBURmlsZVtdLCBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yRmlsZTogKGZpbGU6IFRGaWxlKSA9PiBGaWxlQ29tbWFuZEludm9jYXRpb25CYXNlPFRQbHVnaW4+KSB7XG4gICAgc3VwZXIocGx1Z2luLCBmaWxlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhbkV4ZWN1dGUoKSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5maWxlcy5ldmVyeSgoZmlsZSkgPT4gdGhpcy5jcmVhdGVDb21tYW5kSW52b2NhdGlvbkZvckZpbGUoZmlsZSkuaW52b2tlKHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLmZpbGVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUNvbW1hbmRJbnZvY2F0aW9uRm9yRmlsZShmaWxlKS5pbnZva2VBc3luYyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsc0JBQXNCO0FBRXRCLHdCQUtPO0FBQ1AscUNBSU87QUFPQSxNQUFlLGtDQUEwRCxpRUFBMkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU96SCxJQUFjLE9BQWM7QUFDMUIsZUFBTywwQkFBTyxLQUFLLGFBQWE7QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sWUFBWSxRQUFpQixNQUFvQjtBQUN0RCxVQUFNLFFBQVEsSUFBSTtBQUFBLEVBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLGFBQXNCO0FBQ3ZDLFdBQU8sTUFBTSxXQUFXLEtBQUssQ0FBQyxDQUFDLEtBQUs7QUFBQSxFQUN0QztBQUNGO0FBT08sTUFBTSw2Q0FBcUUsMEJBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE1RyxZQUNMLFFBQ0EsTUFDaUIsaUNBQ2pCO0FBQ0EsVUFBTSxRQUFRLElBQUk7QUFGRDtBQUFBLEVBR25CO0FBQUE7QUFBQTtBQUFBO0FB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