obsidian-dev-utils 87.0.2 → 87.0.4
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 +11 -0
- package/dist/demo-vault-helper/main.js +232 -0
- package/dist/demo-vault-helper/manifest.json +9 -0
- package/dist/lib/cjs/__merged.cjs +13 -1
- package/dist/lib/cjs/__merged.d.cts +4 -2
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/code-block-reg-exp.cjs +138 -0
- package/dist/lib/cjs/obsidian/code-block-reg-exp.d.cts +33 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +13 -6
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.d.cts +13 -5
- package/dist/lib/cjs/obsidian/community-plugins.cjs +25 -1
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +28 -0
- package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +159 -0
- package/dist/lib/cjs/obsidian/demo-vault-helper.d.cts +40 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +17 -13
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +13 -5
- package/dist/lib/cjs/obsidian/index.cjs +7 -1
- package/dist/lib/cjs/obsidian/index.d.cts +2 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +12 -10
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +2 -0
- package/dist/lib/cjs/reg-exp.cjs +11 -1
- package/dist/lib/cjs/reg-exp.d.cts +34 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +329 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +298 -0
- package/dist/lib/cjs/script-utils/demo-vault.cjs +36 -3
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +5 -5
- package/dist/lib/cjs/script-utils/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +14 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +4 -5
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +2 -1
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +2 -0
- package/dist/lib/cjs/script-utils/version.cjs +2 -2
- package/dist/lib/esm/__merged.d.mts +4 -2
- package/dist/lib/esm/__merged.mjs +11 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/code-block-reg-exp.d.mts +33 -0
- package/dist/lib/esm/obsidian/code-block-reg-exp.mjs +30 -0
- package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.d.mts +13 -5
- package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +13 -6
- package/dist/lib/esm/obsidian/community-plugins.d.mts +28 -0
- package/dist/lib/esm/obsidian/community-plugins.mjs +24 -1
- package/dist/lib/esm/obsidian/demo-vault-helper.d.mts +40 -0
- package/dist/lib/esm/obsidian/demo-vault-helper.mjs +56 -0
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +13 -5
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +17 -13
- package/dist/lib/esm/obsidian/index.d.mts +2 -0
- package/dist/lib/esm/obsidian/index.mjs +5 -1
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +15 -10
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +2 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/reg-exp.d.mts +34 -0
- package/dist/lib/esm/reg-exp.mjs +11 -2
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +298 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +230 -0
- package/dist/lib/esm/script-utils/demo-vault.d.mts +5 -5
- package/dist/lib/esm/script-utils/demo-vault.mjs +31 -5
- package/dist/lib/esm/script-utils/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +14 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +4 -5
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +2 -0
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +2 -1
- package/dist/lib/esm/script-utils/version.mjs +2 -2
- package/obsidian/code-block-reg-exp/package.json +6 -0
- package/obsidian/demo-vault-helper/package.json +6 -0
- package/package.json +6 -5
- package/script-utils/demo-vault-coverage/package.json +6 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initCjs() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
const globalThisRecord = globalThis;
|
|
9
|
+
globalThisRecord['__name'] ??= name;
|
|
10
|
+
const originalRequire = require;
|
|
11
|
+
if (originalRequire && !originalRequire.__isPatched) {
|
|
12
|
+
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
|
|
13
|
+
require = Object.assign(
|
|
14
|
+
(id) => requirePatched(id),
|
|
15
|
+
originalRequire,
|
|
16
|
+
{
|
|
17
|
+
__isPatched: true
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const newFuncs = {
|
|
23
|
+
__extractDefault() {
|
|
24
|
+
return extractDefault;
|
|
25
|
+
},
|
|
26
|
+
process() {
|
|
27
|
+
const browserProcess = {
|
|
28
|
+
browser: true,
|
|
29
|
+
cwd() {
|
|
30
|
+
return '/';
|
|
31
|
+
},
|
|
32
|
+
env: {},
|
|
33
|
+
platform: 'android'
|
|
34
|
+
};
|
|
35
|
+
return browserProcess;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
for (const key of Object.keys(newFuncs)) {
|
|
40
|
+
globalThisRecord[key] ??= newFuncs[key]?.();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function name(obj) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function extractDefault(module) {
|
|
48
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
52
|
+
'obsidian',
|
|
53
|
+
'@codemirror/autocomplete',
|
|
54
|
+
'@codemirror/collab',
|
|
55
|
+
'@codemirror/commands',
|
|
56
|
+
'@codemirror/language',
|
|
57
|
+
'@codemirror/lint',
|
|
58
|
+
'@codemirror/search',
|
|
59
|
+
'@codemirror/state',
|
|
60
|
+
'@codemirror/text',
|
|
61
|
+
'@codemirror/view',
|
|
62
|
+
'@lezer/common',
|
|
63
|
+
'@lezer/lr',
|
|
64
|
+
'@lezer/highlight'];
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
68
|
+
'@codemirror/closebrackets',
|
|
69
|
+
'@codemirror/comment',
|
|
70
|
+
'@codemirror/fold',
|
|
71
|
+
'@codemirror/gutter',
|
|
72
|
+
'@codemirror/highlight',
|
|
73
|
+
'@codemirror/history',
|
|
74
|
+
'@codemirror/matchbrackets',
|
|
75
|
+
'@codemirror/panel',
|
|
76
|
+
'@codemirror/rangeset',
|
|
77
|
+
'@codemirror/rectangular-selection',
|
|
78
|
+
'@codemirror/stream-parser',
|
|
79
|
+
'@codemirror/tooltip'];
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function requirePatched(id) {
|
|
83
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
|
|
84
|
+
return originalRequire?.(id);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
88
|
+
if (globalThis.app.isMobile) {
|
|
89
|
+
if (id === 'process' || id === 'node:process') {
|
|
90
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
91
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
92
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
93
|
+
return globalThis.process;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const module = originalRequire?.(id);
|
|
97
|
+
if (module) {
|
|
98
|
+
return extractDefault(module);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
103
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
|
|
108
|
+
"use strict";
|
|
109
|
+
var __defProp = Object.defineProperty;
|
|
110
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
111
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
112
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
113
|
+
var __export = (target, all) => {
|
|
114
|
+
for (var name in all)
|
|
115
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
116
|
+
};
|
|
117
|
+
var __copyProps = (to, from, except, desc) => {
|
|
118
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
119
|
+
for (let key of __getOwnPropNames(from))
|
|
120
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
121
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
122
|
+
}
|
|
123
|
+
return to;
|
|
124
|
+
};
|
|
125
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
|
+
var code_block_reg_exp_exports = {};
|
|
127
|
+
__export(code_block_reg_exp_exports, {
|
|
128
|
+
createCodeBlockRegExp: () => createCodeBlockRegExp
|
|
129
|
+
});
|
|
130
|
+
module.exports = __toCommonJS(code_block_reg_exp_exports);
|
|
131
|
+
function createCodeBlockRegExp() {
|
|
132
|
+
return /(?<=^|\n)(?<LinePrefix> {0,3}(?:> {1,3})*)(?<CodeBlockStartDelimiter>(?<CodeBlockStartDelimiterChar>[`~])(?:\k<CodeBlockStartDelimiterChar>{2,}))(?<CodeBlockLanguage>\S*)(?:[ \t](?<CodeBlockArgs>.*?))?(?:\n(?<CodeBlockContent>\k<LinePrefix>.*(?:\n\k<LinePrefix>.*)*?))?\n\k<LinePrefix>(?<CodeBlockEndDelimiter>\k<CodeBlockStartDelimiter>\k<CodeBlockStartDelimiterChar>*)[ \t]*(?=\n|$)/g;
|
|
133
|
+
}
|
|
134
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
135
|
+
0 && (module.exports = {
|
|
136
|
+
createCodeBlockRegExp
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvZGUtYmxvY2stcmVnLWV4cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBsb2NhdGUgZmVuY2VkIGNvZGUgYmxvY2tzIHdpdGhpbiBhIE1hcmtkb3duIG5vdGUsIGluY2x1ZGluZ1xuICogYmxvY2tzIG5lc3RlZCBpbnNpZGUgY2FsbG91dHMgb2YgYW55IGRlcHRoLlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYSBzaW5nbGUgZmVuY2VkIGNvZGUgYmxvY2sgYW55d2hlcmUgaW4gYSBNYXJrZG93biBub3RlLlxuICpcbiAqIEEgZnJlc2ggaW5zdGFuY2UgaXMgcmV0dXJuZWQgb24gZWFjaCBjYWxsIHNvIGNhbGxlcnMgbWF5IHNhZmVseSB1c2Ugc3RhdGVmdWwgbWV0aG9kcyAoZS5nLlxuICoge0BsaW5rIFJlZ0V4cC5leGVjfSkgd2l0aG91dCBzaGFyaW5nIGBsYXN0SW5kZXhgIGJldHdlZW4gc2NhbnMuXG4gKlxuICogTmFtZWQgY2FwdHVyZSBncm91cHM6XG4gKiAtIGBMaW5lUHJlZml4YCBcdTIwMTQgdGhlIGxlYWRpbmcgaW5kZW50YXRpb24gLyBjYWxsb3V0IGJsb2NrcXVvdGUgcHJlZml4IChgPiBgIHJlcGVhdGVkIG9uY2UgcGVyIG5lc3RpbmdcbiAqICAgbGV2ZWwpIHNoYXJlZCBieSBldmVyeSBsaW5lIG9mIHRoZSBibG9jay5cbiAqIC0gYENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyYCAvIGBDb2RlQmxvY2tTdGFydERlbGltaXRlckNoYXJgIFx1MjAxNCB0aGUgb3BlbmluZyBmZW5jZSAoMysgYmFja3RpY2tzIG9yIHRpbGRlcylcbiAqICAgYW5kIHRoZSBmZW5jZSBjaGFyYWN0ZXIuXG4gKiAtIGBDb2RlQmxvY2tMYW5ndWFnZWAgXHUyMDE0IHRoZSBpbmZvLXN0cmluZyBsYW5ndWFnZSB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBmZW5jZS5cbiAqIC0gYENvZGVCbG9ja0FyZ3NgIFx1MjAxNCBhbnkgZXh0cmEgYXJndW1lbnRzIGFmdGVyIHRoZSBsYW5ndWFnZSB0b2tlbi5cbiAqIC0gYENvZGVCbG9ja0NvbnRlbnRgIFx1MjAxNCB0aGUgYmxvY2sgYm9keS4gRWFjaCBjb250ZW50IGxpbmUgY2FycmllcyB0aGUgc2FtZSBgTGluZVByZWZpeGAuXG4gKiAtIGBDb2RlQmxvY2tFbmREZWxpbWl0ZXJgIFx1MjAxNCB0aGUgY2xvc2luZyBmZW5jZS5cbiAqXG4gKiBUaGUgYENvZGVCbG9ja0NvbnRlbnRgIGdyb3VwIGlzIHdyaXR0ZW4gYXMgYFxcazxMaW5lUHJlZml4Pi4qKD86XFxuXFxrPExpbmVQcmVmaXg+LiopKj9gIFx1MjAxNCBhIGZpcnN0IGxpbmVcbiAqIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsaW5lcyBlYWNoIGludHJvZHVjZWQgYnkgYSAqKm1hbmRhdG9yeSoqIG5ld2xpbmUuIFRoaXMgZGVsaWJlcmF0ZWx5IGF2b2lkcyB0aGVcbiAqIGFtYmlndW91cyBgKD86XFxuP1xcazxMaW5lUHJlZml4Pi4qKSs/YCBmb3JtIChvcHRpb25hbCBuZXdsaW5lICsgcmVwZWF0YWJsZSBsaW5lIHJlbWFpbmRlciksIHdoaWNoIGxldHMgYVxuICogc2luZ2xlIGxpbmUgYmUgcGFydGl0aW9uZWQgaW4gZXhwb25lbnRpYWxseSBtYW55IHdheXMgYW5kIGNhdXNlcyBjYXRhc3Ryb3BoaWMgYmFja3RyYWNraW5nIFx1MjAxNCBhXG4gKiBzeW5jaHJvbm91cyBmcmVlemUgXHUyMDE0IHdoZW4gdGhlIHNjYW4gbWVldHMgYSBmZW5jZS1vcGVuIHdpdGggbm8gdmFsaWQgY2xvc2luZyBmZW5jZSBiZWZvcmUgdGhlIGVuZCBvZiB0aGVcbiAqIG5vdGUuIFRoZSBtYW5kYXRvcnktbmV3bGluZSBmb3JtIG1hdGNoZXMgdGhlIHNhbWUgdGV4dCBsaW5lYXJseS5cbiAqXG4gKiBAcmV0dXJucyBBIGZyZXNoIGdsb2JhbCB7QGxpbmsgUmVnRXhwfSBtYXRjaGluZyBvbmUgZmVuY2VkIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2RlQmxvY2tSZWdFeHAoKTogUmVnRXhwIHtcbiAgcmV0dXJuIC8oPzw9XnxcXG4pKD88TGluZVByZWZpeD4gezAsM30oPzo+IHsxLDN9KSopKD88Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXI+KD88Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPltgfl0pKD86XFxrPENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj57Mix9KSkoPzxDb2RlQmxvY2tMYW5ndWFnZT5cXFMqKSg/OlsgXFx0XSg/PENvZGVCbG9ja0FyZ3M+Lio/KSk/KD86XFxuKD88Q29kZUJsb2NrQ29udGVudD5cXGs8TGluZVByZWZpeD4uKig/OlxcblxcazxMaW5lUHJlZml4Pi4qKSo/KSk/XFxuXFxrPExpbmVQcmVmaXg+KD88Q29kZUJsb2NrRW5kRGVsaW1pdGVyPlxcazxDb2RlQmxvY2tTdGFydERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPiopWyBcXHRdKig/PVxcbnwkKS9nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0NPLFNBQVMsd0JBQWdDO0FBQzlDLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/// <reference path="../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Provides the regular expression used to locate fenced code blocks within a Markdown note, including
|
|
6
|
+
* blocks nested inside callouts of any depth.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Creates a regular expression that matches a single fenced code block anywhere in a Markdown note.
|
|
10
|
+
*
|
|
11
|
+
* A fresh instance is returned on each call so callers may safely use stateful methods (e.g.
|
|
12
|
+
* {@link RegExp.exec}) without sharing `lastIndex` between scans.
|
|
13
|
+
*
|
|
14
|
+
* Named capture groups:
|
|
15
|
+
* - `LinePrefix` — the leading indentation / callout blockquote prefix (`> ` repeated once per nesting
|
|
16
|
+
* level) shared by every line of the block.
|
|
17
|
+
* - `CodeBlockStartDelimiter` / `CodeBlockStartDelimiterChar` — the opening fence (3+ backticks or tildes)
|
|
18
|
+
* and the fence character.
|
|
19
|
+
* - `CodeBlockLanguage` — the info-string language token immediately after the opening fence.
|
|
20
|
+
* - `CodeBlockArgs` — any extra arguments after the language token.
|
|
21
|
+
* - `CodeBlockContent` — the block body. Each content line carries the same `LinePrefix`.
|
|
22
|
+
* - `CodeBlockEndDelimiter` — the closing fence.
|
|
23
|
+
*
|
|
24
|
+
* The `CodeBlockContent` group is written as `\k<LinePrefix>.*(?:\n\k<LinePrefix>.*)*?` — a first line
|
|
25
|
+
* followed by zero or more lines each introduced by a **mandatory** newline. This deliberately avoids the
|
|
26
|
+
* ambiguous `(?:\n?\k<LinePrefix>.*)+?` form (optional newline + repeatable line remainder), which lets a
|
|
27
|
+
* single line be partitioned in exponentially many ways and causes catastrophic backtracking — a
|
|
28
|
+
* synchronous freeze — when the scan meets a fence-open with no valid closing fence before the end of the
|
|
29
|
+
* note. The mandatory-newline form matches the same text linearly.
|
|
30
|
+
*
|
|
31
|
+
* @returns A fresh global {@link RegExp} matching one fenced code block.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createCodeBlockRegExp(): RegExp;
|
|
@@ -146,13 +146,17 @@ class OpenDemoVaultCommandHandler extends import_global_command_handler.GlobalCo
|
|
|
146
146
|
*/
|
|
147
147
|
app;
|
|
148
148
|
/**
|
|
149
|
-
* The
|
|
149
|
+
* The id of the plugin whose demo vault the command opens.
|
|
150
150
|
*/
|
|
151
|
-
|
|
151
|
+
pluginId;
|
|
152
152
|
/**
|
|
153
153
|
* The notice component used to report problems while opening the demo vault.
|
|
154
154
|
*/
|
|
155
155
|
pluginNoticeComponent;
|
|
156
|
+
/**
|
|
157
|
+
* The currently installed version of the plugin whose demo vault the command opens.
|
|
158
|
+
*/
|
|
159
|
+
pluginVersion;
|
|
156
160
|
/**
|
|
157
161
|
* Constructs a new instance.
|
|
158
162
|
*
|
|
@@ -165,8 +169,9 @@ class OpenDemoVaultCommandHandler extends import_global_command_handler.GlobalCo
|
|
|
165
169
|
name: "Open demo vault"
|
|
166
170
|
});
|
|
167
171
|
this.app = params.app;
|
|
168
|
-
this.
|
|
172
|
+
this.pluginId = params.pluginId;
|
|
169
173
|
this.pluginNoticeComponent = params.pluginNoticeComponent;
|
|
174
|
+
this.pluginVersion = params.pluginVersion;
|
|
170
175
|
}
|
|
171
176
|
/**
|
|
172
177
|
* Executes the command, opening the plugin's demo vault.
|
|
@@ -175,8 +180,10 @@ class OpenDemoVaultCommandHandler extends import_global_command_handler.GlobalCo
|
|
|
175
180
|
const { openDemoVault } = await import("../desktop-demo-vault-opener.cjs");
|
|
176
181
|
await openDemoVault({
|
|
177
182
|
app: this.app,
|
|
178
|
-
|
|
179
|
-
|
|
183
|
+
pluginId: this.pluginId,
|
|
184
|
+
pluginName: this.pluginName,
|
|
185
|
+
pluginNoticeComponent: this.pluginNoticeComponent,
|
|
186
|
+
pluginVersion: this.pluginVersion
|
|
180
187
|
});
|
|
181
188
|
}
|
|
182
189
|
/**
|
|
@@ -192,4 +199,4 @@ class OpenDemoVaultCommandHandler extends import_global_command_handler.GlobalCo
|
|
|
192
199
|
0 && (module.exports = {
|
|
193
200
|
OpenDemoVaultCommandHandler
|
|
194
201
|
});
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiT3BlbiBkZW1vIHZhdWx0XCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgT3BlbkRlbW9WYXVsdENvbW1hbmRIYW5kbGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuRGVtb1ZhdWx0Q29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcGx1Z2luIHdob3NlIGRlbW8gdmF1bHQgdGhlIGNvbW1hbmQgb3BlbnMuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbXBvbmVudCB1c2VkIHRvIHJlcG9ydCBwcm9ibGVtcyB3aGlsZSBvcGVuaW5nIHRoZSBkZW1vIHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIHBsdWdpbiB3aG9zZSBkZW1vIHZhdWx0IHRoZSBjb21tYW5kIG9wZW5zLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgY29tbWFuZCBoYW5kbGVyIHRoYXQgZG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IHdpbmRvdy4gT25seVxuICogYXZhaWxhYmxlIG9uIGRlc2t0b3AgXHUyMDE0IHtAbGluayBjYW5FeGVjdXRlfSByZXR1cm5zIGBmYWxzZWAgb24gbW9iaWxlLCBzbyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gdGhlcmVcbiAqIChubyBtb2JpbGUgbm90aWNlKS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBzdGF5cyBjcm9zcy1wbGF0Zm9ybS1sb2FkYWJsZSBzbyBhIHBsdWdpbiBjYW4gcmVnaXN0ZXIgaXQgZGlyZWN0bHkgd2l0aG91dCBhIHBsYXRmb3JtXG4gKiBndWFyZDogdGhlIGRlc2t0b3Atb25seSBvcGVuZXIgKHdoaWNoIHN0YXRpY2FsbHkgaW1wb3J0cyBOb2RlIGJ1aWx0aW5zKSBpcyBsb2FkZWQgdmlhIGEgZHluYW1pY1xuICogYGltcG9ydCgpYCBpbnNpZGUge0BsaW5rIGV4ZWN1dGV9LCB3aGljaCBvbmx5IGV2ZXIgcnVucyBvbiBkZXNrdG9wLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkRlbW9WYXVsdENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCB0aGUgY29tbWFuZCBvcGVucy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbXBvbmVudCB1c2VkIHRvIHJlcG9ydCBwcm9ibGVtcyB3aGlsZSBvcGVuaW5nIHRoZSBkZW1vIHZhdWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCB0aGUgY29tbWFuZCBvcGVucy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogT3BlbkRlbW9WYXVsdENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcih7XG4gICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgaWQ6ICdvcGVuLWRlbW8tdmF1bHQnLFxuICAgICAgbmFtZTogJ09wZW4gZGVtbyB2YXVsdCdcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGFyYW1zLnBsdWdpbklkO1xuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gcGFyYW1zLnBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgICB0aGlzLnBsdWdpblZlcnNpb24gPSBwYXJhbXMucGx1Z2luVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCwgb3BlbmluZyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENvbmRpdGlvbmFsIGltcG9ydCBvZiB0aGUgZGVza3RvcC1vbmx5IG9wZW5lcjsgdGhpcyBydW5zIG9ubHkgb24gZGVza3RvcCAoZ2F0ZWQgYnkgYGNhbkV4ZWN1dGVgKSwga2VlcGluZyBpdHMgc3RhdGljIE5vZGUtYnVpbHRpbiBpbXBvcnRzIG9mZiB0aGUgbW9iaWxlIGxvYWQgcGF0aC5cbiAgICBjb25zdCB7IG9wZW5EZW1vVmF1bHQgfSA9IGF3YWl0IGltcG9ydCgnLi4vZGVza3RvcC1kZW1vLXZhdWx0LW9wZW5lci50cycpO1xuICAgIGF3YWl0IG9wZW5EZW1vVmF1bHQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgIHBsdWdpblZlcnNpb246IHRoaXMucGx1Z2luVmVyc2lvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBjdXJyZW50bHkgZXhlY3V0ZTogb25seSBvbiBkZXNrdG9wLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcHAgaXMgcnVubmluZyBvbiBkZXNrdG9wLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBsYXRmb3JtLmlzRGVza3RvcEFwcDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUF5QjtBQUl6QixvQ0FBcUM7QUFvQzlCLE1BQU0sb0NBQW9DLG1EQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWpEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxRQUFzRDtBQUN2RSxVQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsSUFDUixDQUFDO0FBRUQsU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyxXQUFXLE9BQU87QUFDdkIsU0FBSyx3QkFBd0IsT0FBTztBQUNwQyxTQUFLLGdCQUFnQixPQUFPO0FBQUEsRUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE1BQXNCLFVBQXlCO0FBRTdDLFVBQU0sRUFBRSxjQUFjLElBQUksTUFBTSxPQUFPLGlDQUFpQztBQUN4RSxVQUFNLGNBQWM7QUFBQSxNQUNsQixLQUFLLEtBQUs7QUFBQSxNQUNWLFVBQVUsS0FBSztBQUFBLE1BQ2YsWUFBWSxLQUFLO0FBQUEsTUFDakIsdUJBQXVCLEtBQUs7QUFBQSxNQUM1QixlQUFlLEtBQUs7QUFBQSxJQUN0QixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9tQixhQUFzQjtBQUN2QyxXQUFPLHlCQUFTO0FBQUEsRUFDbEI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Handles the "Open demo vault" command.
|
|
6
6
|
*/
|
|
7
|
-
import type { App
|
|
7
|
+
import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
8
8
|
import type { PluginNoticeComponent } from '../components/plugin-notice-component.cjs';
|
|
9
9
|
import { GlobalCommandHandler } from './global-command-handler.cjs';
|
|
10
10
|
/**
|
|
@@ -16,13 +16,17 @@ export interface OpenDemoVaultCommandHandlerConstructorParams {
|
|
|
16
16
|
*/
|
|
17
17
|
readonly app: App;
|
|
18
18
|
/**
|
|
19
|
-
* The
|
|
19
|
+
* The id of the plugin whose demo vault the command opens.
|
|
20
20
|
*/
|
|
21
|
-
readonly
|
|
21
|
+
readonly pluginId: string;
|
|
22
22
|
/**
|
|
23
23
|
* The notice component used to report problems while opening the demo vault.
|
|
24
24
|
*/
|
|
25
25
|
readonly pluginNoticeComponent: PluginNoticeComponent;
|
|
26
|
+
/**
|
|
27
|
+
* The currently installed version of the plugin whose demo vault the command opens.
|
|
28
|
+
*/
|
|
29
|
+
readonly pluginVersion: string;
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
28
32
|
* A command handler that downloads and opens the plugin's shipped demo vault in a new window. Only
|
|
@@ -39,13 +43,17 @@ export declare class OpenDemoVaultCommandHandler extends GlobalCommandHandler {
|
|
|
39
43
|
*/
|
|
40
44
|
protected readonly app: App;
|
|
41
45
|
/**
|
|
42
|
-
* The
|
|
46
|
+
* The id of the plugin whose demo vault the command opens.
|
|
43
47
|
*/
|
|
44
|
-
protected readonly
|
|
48
|
+
protected readonly pluginId: string;
|
|
45
49
|
/**
|
|
46
50
|
* The notice component used to report problems while opening the demo vault.
|
|
47
51
|
*/
|
|
48
52
|
protected readonly pluginNoticeComponent: PluginNoticeComponent;
|
|
53
|
+
/**
|
|
54
|
+
* The currently installed version of the plugin whose demo vault the command opens.
|
|
55
|
+
*/
|
|
56
|
+
protected readonly pluginVersion: string;
|
|
49
57
|
/**
|
|
50
58
|
* Constructs a new instance.
|
|
51
59
|
*
|
|
@@ -125,6 +125,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
125
125
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
126
|
var community_plugins_exports = {};
|
|
127
127
|
__export(community_plugins_exports, {
|
|
128
|
+
configureCommunityPlugin: () => configureCommunityPlugin,
|
|
128
129
|
disableCommunityPlugin: () => disableCommunityPlugin,
|
|
129
130
|
enableCommunityPlugin: () => enableCommunityPlugin,
|
|
130
131
|
getCommunityPluginRepo: () => getCommunityPluginRepo,
|
|
@@ -140,6 +141,28 @@ var import_obsidian = require('obsidian');
|
|
|
140
141
|
var import_obsidian_dev_utils_state = require('../obsidian-dev-utils-state.cjs');
|
|
141
142
|
const COMMUNITY_PLUGINS_STATE_KEY = "communityPluginEntriesPromise";
|
|
142
143
|
const COMMUNITY_PLUGINS_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
|
|
144
|
+
const DATA_JSON_INDENT = 2;
|
|
145
|
+
async function configureCommunityPlugin(params) {
|
|
146
|
+
const { app, settings } = params;
|
|
147
|
+
const pluginId = await resolveCommunityPluginId(params);
|
|
148
|
+
const dataPath = `${app.vault.configDir}/plugins/${pluginId}/data.json`;
|
|
149
|
+
let data = {};
|
|
150
|
+
if (await app.vault.adapter.exists(dataPath)) {
|
|
151
|
+
const parsed = JSON.parse(await app.vault.adapter.read(dataPath));
|
|
152
|
+
if (parsed !== null && typeof parsed === "object") {
|
|
153
|
+
data = parsed;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const serializedBefore = JSON.stringify(data);
|
|
157
|
+
Object.assign(data, settings);
|
|
158
|
+
if (JSON.stringify(data) === serializedBefore) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
const serialized = String(JSON.stringify(data, null, DATA_JSON_INDENT));
|
|
162
|
+
await app.vault.adapter.write(dataPath, `${serialized}
|
|
163
|
+
`);
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
143
166
|
async function disableCommunityPlugin(params) {
|
|
144
167
|
const { app } = params;
|
|
145
168
|
const pluginId = await resolveCommunityPluginId(params);
|
|
@@ -243,6 +266,7 @@ async function resolveCommunityPluginId(ref) {
|
|
|
243
266
|
}
|
|
244
267
|
// Annotate the CommonJS export names for ESM import in node:
|
|
245
268
|
0 && (module.exports = {
|
|
269
|
+
configureCommunityPlugin,
|
|
246
270
|
disableCommunityPlugin,
|
|
247
271
|
enableCommunityPlugin,
|
|
248
272
|
getCommunityPluginRepo,
|
|
@@ -253,4 +277,4 @@ async function resolveCommunityPluginId(ref) {
|
|
|
253
277
|
toggleInstallCommunityPlugin,
|
|
254
278
|
uninstallCommunityPlugin
|
|
255
279
|
});
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlSW5zdGFsbFN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgaWQuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBkaXNwbGF5IG5hbWUgKGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5FbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGF1dGhvci5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UgYSBjb21tdW5pdHktcGx1Z2luIG9wZXJhdGlvbiBydW5zIGFnYWluc3QuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGU6IGB0cnVlYCBlbmFibGVzIHRoZSBwbHVnaW4sIGBmYWxzZWAgZGlzYWJsZXMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVJbnN0YWxsU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlOiBgdHJ1ZWAgaW5zdGFsbHMgdGhlIHBsdWdpbiwgYGZhbHNlYCB1bmluc3RhbGxzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnN0YWxsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBhIEdpdEh1YiByZWxlYXNlIHdlIHJlYWQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZywgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnX25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZID0gJ2NvbW11bml0eVBsdWdpbkVudHJpZXNQcm9taXNlJztcbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1VSTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9IRUFEL2NvbW11bml0eS1wbHVnaW5zLmpzb24nO1xuXG4vKipcbiAqIERpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgb2YgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gT2JzaWRpYW4ncyBwdWJsaWNcbiAqIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgZmV0Y2hlZCBvbmNlIGFuZCBjYWNoZWQgb24gdGhlIHNoYXJlZCBwbHVnaW4gc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHM7IGEgZmFpbGVkXG4gKiBmZXRjaCBpcyBub3QgY2FjaGVkLCBzbyBhIGxhdGVyIGNhbGwgcmV0cmllcy5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIGlkIHRvIGxvb2sgdXAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCByZXBvc2l0b3J5LCBvciBgbnVsbGAgaWYgdGhlXG4gKiBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBwbHVnaW5JZCk7XG4gIHJldHVybiBlbnRyeT8ucmVwbyA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uICh0aGUgcmVsZWFzZSBgdGFnX25hbWVgLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2ApIG9mIGFcbiAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICpcbiAqIEBwYXJhbSByZXBvIC0gVGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICBjb25zdCByZWxlYXNlID0gcmVzcG9uc2UuanNvbiBhcyBHaXRIdWJSZWxlYXNlO1xuICByZXR1cm4gcmVsZWFzZS50YWdfbmFtZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSB0aGUgb2ZmaWNpYWwgc3RvcmUgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhXG4gKiBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5IGZyb20gT2JzaWRpYW4nc1xuICogY29tbXVuaXR5IHJlZ2lzdHJ5LCByZWFkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiBhbmQgaXRzIG1hbmlmZXN0LCBhbmQgaW5zdGFsbHMgaXQgdGhyb3VnaFxuICogT2JzaWRpYW4ncyBvd24gYGluc3RhbGxQbHVnaW5gIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXBvID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZCk7XG4gIGlmICghcmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICcke3BsdWdpbklkfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbyk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZ2V0UGx1Z2luTWFuaWZlc3QocmVwbywgdmVyc2lvbik7XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4ocmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xufVxuXG4vKipcbiAqIFNlYXJjaGVzIE9ic2lkaWFuJ3MgcHVibGljIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIGlkIGFuZCBkaXNwbGF5IG5hbWUgb2YgZXZlcnlcbiAqIHBsdWdpbiB3aG9zZSBpZCwgbmFtZSwgYXV0aG9yIG9yIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBxdWVyeSAoY2FzZS1pbnNlbnNpdGl2ZSkuIEFuIGVtcHR5IHF1ZXJ5XG4gKiBtYXRjaGVzIGV2ZXJ5IHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcXVlcnkgLSBUaGUgc2VhcmNoIHF1ZXJ5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBtYXRjaGluZyBwbHVnaW5zJyB7QGxpbmsgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0fXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hDb21tdW5pdHlQbHVnaW5zKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdFtdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBlbnRyaWVzXG4gICAgLmZpbHRlcigoZW50cnkpID0+XG4gICAgICBlbnRyeS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5hdXRob3IudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICApXG4gICAgLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICBpZDogZW50cnkuaWQsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNFbmFibGVkKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbHMgb3IgdW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59IC8ge0BsaW5rIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBtYXRjaGVzIHRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgaW5zdGFsbGluZyBhbmQgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGNvbW11bml0eSBwbHVnaW4gaWYgaXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYSBuby1vcCB3aGVuIHRoZSBwbHVnaW4gaXNcbiAqIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIHVuaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoIWFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMudW5pbnN0YWxsUGx1Z2luKHBsdWdpbklkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoQ09NTVVOSVRZX1BMVUdJTlNfVVJMKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgQ29tbXVuaXR5UGx1Z2luRW50cnlbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgY2FjaGUgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8bnVsbCB8IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4+KENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSwgbnVsbCk7XG4gIGNhY2hlLnZhbHVlID8/PSBmZXRjaENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjYWNoZS52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYWNoZS52YWx1ZSA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luTWFuaWZlc3QocmVwbzogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPFBsdWdpbk1hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb30vcmVsZWFzZXMvZG93bmxvYWQvJHt2ZXJzaW9ufS9tYW5pZmVzdC5qc29uYCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIFBsdWdpbk1hbmlmZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWYpIHtcbiAgICByZXR1cm4gcmVmLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZi5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZi5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxzQkFBMkI7QUFFM0Isc0NBQXlDO0FBcUp6QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtBQVU5QixlQUFzQix1QkFBdUIsUUFBcUQ7QUFDaEcsUUFB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
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBcdTIwMTQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VuaW5zdGFsbC9lbmFibGUvZGlzYWJsZSBhbiBhcmJpdHJhcnkgY29tbXVuaXR5IHBsdWdpbiBcdTIwMTQgc2VsZWN0ZWRcbiAqIGJ5IGVpdGhlciBpdHMgYGlkYCBvciBpdHMgZGlzcGxheSBgbmFtZWAgXHUyMDE0IHZpYSBPYnNpZGlhbidzIG93biBzdG9yZSBwYXRoIChgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbmBcbiAqICsgYGVuYWJsZVBsdWdpbkFuZFNhdmVgKSwgc28gYW55IGRldi9kZXBsb3kgb3IgdG9vbGluZyBmbG93IGNhbiByZXVzZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGVpdGhlciBieSBpdHMgaWQgKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeUlkUmVmfSkgb3IgYnkgaXRzIGRpc3BsYXkgbmFtZVxuICogKHtAbGluayBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWZ9KS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbXVuaXR5UGx1Z2luUmVmID0gQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB8IENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZjtcblxuLyoqXG4gKiBBIHNpbmdsZSByZXN1bHQgb2Yge0BsaW5rIHNlYXJjaENvbW11bml0eVBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luU2V0dGluZ3M7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRpc2FibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGlzYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUVuYWJsZVN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMgPSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0ICYgQ29tbXVuaXR5UGx1Z2luUmVmICYgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlSW5zdGFsbFN0YXRlO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgaWQuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgYSBjb21tdW5pdHkgcGx1Z2luIGJ5IGl0cyBkaXNwbGF5IG5hbWUgKGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSByZWdpc3RyeSkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5CeU5hbWVSZWYge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5FbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGF1dGhvci5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UgYSBjb21tdW5pdHktcGx1Z2luIG9wZXJhdGlvbiBydW5zIGFnYWluc3QuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5PcGVyYXRpb25Db250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgdG8gbWVyZ2UgaW50byBhIGNvbW11bml0eSBwbHVnaW4ncyBgZGF0YS5qc29uYC5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBvYmplY3Qgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgcGx1Z2luJ3MgZXhpc3RpbmcgYGRhdGEuanNvbmAgKHRoZSBmaWxlIGlzIGNyZWF0ZWQgaWZcbiAgICogYWJzZW50KS5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzOiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZSBmb3Ige0BsaW5rIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlOiBgdHJ1ZWAgZW5hYmxlcyB0aGUgcGx1Z2luLCBgZmFsc2VgIGRpc2FibGVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZSBmb3Ige0BsaW5rIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlSW5zdGFsbFN0YXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGluc3RhbGxlZCBzdGF0ZTogYHRydWVgIGluc3RhbGxzIHRoZSBwbHVnaW4sIGBmYWxzZWAgdW5pbnN0YWxscyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSB3ZSByZWFkLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVsZWFzZSB0YWcsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ19uYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSA9ICdjb21tdW5pdHlQbHVnaW5FbnRyaWVzUHJvbWlzZSc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19VUkwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvSEVBRC9jb21tdW5pdHktcGx1Z2lucy5qc29uJztcbmNvbnN0IERBVEFfSlNPTl9JTkRFTlQgPSAyO1xuXG4vKipcbiAqIFdyaXRlcyBzZXR0aW5ncyBpbnRvIGEgY29tbXVuaXR5IHBsdWdpbidzIGBkYXRhLmpzb25gLCBzaGFsbG93LW1lcmdpbmcgdGhlbSBvdmVyIGFueSBleGlzdGluZyBzZXR0aW5nc1xuICogKGNyZWF0aW5nIHRoZSBmaWxlIGlmIGFic2VudCkuIFdyaXRpbmcgc2V0dGluZ3MgQkVGT1JFIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBtYWtlcyBpdCBsb2FkIGFscmVhZHlcbiAqIGNvbmZpZ3VyZWQsIHdpdGggbm8gcmVsb2FkLiBBIG5vLW9wIHdyaXRlIGlzIHNraXBwZWQ6IHdoZW4gdGhlIG1lcmdlIGNoYW5nZXMgbm90aGluZywgdGhlIGZpbGUgaXMgbGVmdFxuICogdW50b3VjaGVkIGFuZCBgZmFsc2VgIGlzIHJldHVybmVkLCBzbyBhIGNhbGxlciBjYW4gYXZvaWQgcmVsb2FkaW5nIGFuIGFscmVhZHktY29ycmVjdGx5LWNvbmZpZ3VyZWRcbiAqIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhc1xuICogd3JpdHRlbiksIG9yIGBmYWxzZWAgaWYgdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGFwcCwgc2V0dGluZ3MgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgY3VycmVudGx5IGVuYWJsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3BcbiAqIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGRpc2FibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IERpc2FibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgY29tbXVuaXR5IHBsdWdpbiAocGVyc2lzdGluZyB0aGUgY2hhbmdlKSBpZiBpdCBpcyBub3QgYWxyZWFkeSBlbmFibGVkLiBJZGVtcG90ZW50IFx1MjAxNCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBlbmFibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5IG9mIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIE9ic2lkaWFuJ3MgcHVibGljXG4gKiBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKlxuICogVGhlIHJlZ2lzdHJ5IGlzIGZldGNoZWQgb25jZSBhbmQgY2FjaGVkIG9uIHRoZSBzaGFyZWQgcGx1Z2luIHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzOyBhIGZhaWxlZFxuICogZmV0Y2ggaXMgbm90IGNhY2hlZCwgc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBpZCB0byBsb29rIHVwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSwgb3IgYG51bGxgIGlmIHRoZVxuICogcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGx1Z2luSWQpO1xuICByZXR1cm4gZW50cnk/LnJlcG8gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbGF0ZXN0IHJlbGVhc2UgdmVyc2lvbiAodGhlIHJlbGVhc2UgYHRhZ19uYW1lYCwgYSBiYXJlIHZlcnNpb24gc3VjaCBhcyBgMS4yLjNgKSBvZiBhXG4gKiBHaXRIdWIgcmVwb3NpdG9yeS5cbiAqXG4gKiBAcGFyYW0gcmVwbyAtIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9yZWxlYXNlcy9sYXRlc3RgKTtcbiAgY29uc3QgcmVsZWFzZSA9IHJlc3BvbnNlLmpzb24gYXMgR2l0SHViUmVsZWFzZTtcbiAgcmV0dXJuIHJlbGVhc2UudGFnX25hbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGZyb20gdGhlIG9mZmljaWFsIHN0b3JlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gSWRlbXBvdGVudCBcdTIwMTQgYVxuICogbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBSZXNvbHZlcyB0aGUgcGx1Z2luJ3MgcmVwb3NpdG9yeSBmcm9tIE9ic2lkaWFuJ3NcbiAqIGNvbW11bml0eSByZWdpc3RyeSwgcmVhZHMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gYW5kIGl0cyBtYW5pZmVzdCwgYW5kIGluc3RhbGxzIGl0IHRocm91Z2hcbiAqIE9ic2lkaWFuJ3Mgb3duIGBpbnN0YWxsUGx1Z2luYCBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBJZiB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmIChhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGdldFBsdWdpbk1hbmlmZXN0KHJlcG8sIHZlcnNpb24pO1xuICBhd2FpdCBhcHAucGx1Z2lucy5pbnN0YWxsUGx1Z2luKHJlcG8sIHZlcnNpb24sIG1hbmlmZXN0KTtcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBPYnNpZGlhbidzIHB1YmxpYyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSwgcmV0dXJuaW5nIHRoZSBpZCBhbmQgZGlzcGxheSBuYW1lIG9mIGV2ZXJ5XG4gKiBwbHVnaW4gd2hvc2UgaWQsIG5hbWUsIGF1dGhvciBvciBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgcXVlcnkgKGNhc2UtaW5zZW5zaXRpdmUpLiBBbiBlbXB0eSBxdWVyeVxuICogbWF0Y2hlcyBldmVyeSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHNlYXJjaCBxdWVyeS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbWF0Y2hpbmcgcGx1Z2lucycge0BsaW5rIENvbW11bml0eVBsdWdpblNlYXJjaFJlc3VsdH1zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQ29tbXVuaXR5UGx1Z2lucyhxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHRbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZW50cmllc1xuICAgIC5maWx0ZXIoKGVudHJ5KSA9PlxuICAgICAgZW50cnkuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICB8fCBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuYXV0aG9yLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgKVxuICAgIC5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgbmFtZTogZW50cnkubmFtZVxuICAgIH0pKTtcbn1cblxuLyoqXG4gKiBFbmFibGVzIG9yIGRpc2FibGVzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayBkaXNhYmxlQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBlbmFibGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGFyYW1zLmlzRW5hYmxlZCkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGxzIG9yIHVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIHRvIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBpbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSAvIHtAbGluayB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW59LCBzbyBpdCBpcyBpZGVtcG90ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUuXG4gKiBAdGhyb3dzIElmIGluc3RhbGxpbmcgYW5kIHRoZSBwbHVnaW4gaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbihwYXJhbXM6IFRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKipcbiAqIFVuaW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luIGlmIGl0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQuIElkZW1wb3RlbnQgXHUyMDE0IGEgbm8tb3Agd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyB1bmluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGFwcC5wbHVnaW5zLnVuaW5zdGFsbFBsdWdpbihwbHVnaW5JZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPG51bGwgfCBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+PihDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVksIG51bGwpO1xuICBjYWNoZS52YWx1ZSA/Pz0gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY2FjaGUudmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FjaGUudmFsdWUgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBsdWdpbk1hbmlmZXN0KHJlcG86IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxQbHVnaW5NYW5pZmVzdD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG99L3JlbGVhc2VzL2Rvd25sb2FkLyR7dmVyc2lvbn0vbWFuaWZlc3QuanNvbmApO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBQbHVnaW5NYW5pZmVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHJlZjogQ29tbXVuaXR5UGx1Z2luUmVmKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCdwbHVnaW5JZCcgaW4gcmVmKSB7XG4gICAgcmV0dXJuIHJlZi5wbHVnaW5JZDtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSByZWYucGx1Z2luTmFtZSk7XG4gIGlmICghZW50cnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBuYW1lZCAnJHtyZWYucGx1Z2luTmFtZX0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxzQkFBMkI7QUFFM0Isc0NBQXlDO0FBc0t6QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLG1CQUFtQjtBQWN6QixlQUFzQix5QkFBeUIsUUFBMEQ7QUFDdkcsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBQzFCLFFBQU0sV0FBVyxNQUFNLHlCQUF5QixNQUFNO0FBQ3RELFFBQU0sV0FBVyxHQUFHLElBQUksTUFBTSxTQUFTLFlBQVksUUFBUTtBQUUzRCxNQUFJLE9BQWUsQ0FBQztBQUNwQixNQUFJLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDNUMsVUFBTSxTQUFrQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUN6RSxRQUFJLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVTtBQUNqRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFVBQVUsSUFBSTtBQUM1QyxTQUFPLE9BQU8sTUFBTSxRQUFRO0FBQzVCLE1BQUksS0FBSyxVQUFVLElBQUksTUFBTSxrQkFBa0I7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxNQUFNLGdCQUFn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
|
|
@@ -31,6 +31,11 @@ export interface CommunityPluginSearchResult {
|
|
|
31
31
|
*/
|
|
32
32
|
readonly name: string;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Parameters for {@link configureCommunityPlugin}. Selects the plugin by either `pluginId` or
|
|
36
|
+
* `pluginName`.
|
|
37
|
+
*/
|
|
38
|
+
export type ConfigureCommunityPluginParams = CommunityPluginOperationContext & CommunityPluginRef & CommunityPluginSettings;
|
|
34
39
|
/**
|
|
35
40
|
* Parameters for {@link disableCommunityPlugin}. Selects the plugin by either `pluginId` or
|
|
36
41
|
* `pluginName`.
|
|
@@ -88,6 +93,16 @@ interface CommunityPluginOperationContext {
|
|
|
88
93
|
*/
|
|
89
94
|
readonly app: App;
|
|
90
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* The settings to merge into a community plugin's `data.json`.
|
|
98
|
+
*/
|
|
99
|
+
interface CommunityPluginSettings {
|
|
100
|
+
/**
|
|
101
|
+
* The settings object shallow-merged over the plugin's existing `data.json` (the file is created if
|
|
102
|
+
* absent).
|
|
103
|
+
*/
|
|
104
|
+
readonly settings: object;
|
|
105
|
+
}
|
|
91
106
|
/**
|
|
92
107
|
* The desired enabled state for {@link toggleEnableCommunityPlugin}.
|
|
93
108
|
*/
|
|
@@ -106,6 +121,19 @@ interface CommunityPluginToggleInstallState {
|
|
|
106
121
|
*/
|
|
107
122
|
readonly isInstalled: boolean;
|
|
108
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Writes settings into a community plugin's `data.json`, shallow-merging them over any existing settings
|
|
126
|
+
* (creating the file if absent). Writing settings BEFORE the plugin is enabled makes it load already
|
|
127
|
+
* configured, with no reload. A no-op write is skipped: when the merge changes nothing, the file is left
|
|
128
|
+
* untouched and `false` is returned, so a caller can avoid reloading an already-correctly-configured
|
|
129
|
+
* plugin.
|
|
130
|
+
*
|
|
131
|
+
* @param params - The {@link ConfigureCommunityPluginParams}.
|
|
132
|
+
* @returns A {@link Promise} that resolves to `true` if the `data.json` content changed (and was
|
|
133
|
+
* written), or `false` if the settings were already present (nothing written).
|
|
134
|
+
* @throws If selected by `pluginName` and the name is not listed in Obsidian's community plugins registry.
|
|
135
|
+
*/
|
|
136
|
+
export declare function configureCommunityPlugin(params: ConfigureCommunityPluginParams): Promise<boolean>;
|
|
109
137
|
/**
|
|
110
138
|
* Disables a community plugin (persisting the change) if it is currently enabled. Idempotent — a no-op
|
|
111
139
|
* when the plugin is already disabled.
|