obsidian-dev-utils 96.6.0 → 98.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/LICENSE +1 -1
- package/dist/integration-test-plugin/main.js +1762 -4197
- package/dist/lib/cjs/__merged.cjs +17 -9
- package/dist/lib/cjs/__merged.d.cts +3 -1
- package/dist/lib/cjs/desktop-zip-extractor.cjs +276 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +94 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
- package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
- package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +20 -21
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +21 -16
- package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
- package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
- package/dist/lib/cjs/obsidian/index.cjs +10 -1
- package/dist/lib/cjs/obsidian/index.d.cts +3 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
- 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 +4 -0
- package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
- package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
- package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
- package/dist/lib/cjs/script-utils/build.cjs +30 -6
- package/dist/lib/cjs/script-utils/build.d.cts +5 -0
- package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
- package/dist/lib/cjs/script-utils/exec.cjs +1 -1
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
- 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/cspell.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
- package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
- package/dist/lib/cjs/script-utils/package-manager.cjs +287 -0
- package/dist/lib/cjs/script-utils/package-manager.d.cts +77 -0
- package/dist/lib/cjs/script-utils/version.cjs +21 -9
- package/dist/lib/esm/__merged.d.mts +3 -1
- package/dist/lib/esm/__merged.mjs +18 -10
- package/dist/lib/esm/desktop-zip-extractor.d.mts +94 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +174 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
- package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
- package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +21 -16
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +23 -11
- package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
- package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
- package/dist/lib/esm/obsidian/index.d.mts +3 -0
- package/dist/lib/esm/obsidian/index.mjs +7 -1
- package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
- package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
- package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
- package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
- package/dist/lib/esm/script-utils/build.d.mts +5 -0
- package/dist/lib/esm/script-utils/build.mjs +30 -6
- package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
- package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
- package/dist/lib/esm/script-utils/exec.mjs +1 -1
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
- 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/cspell.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
- package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
- package/dist/lib/esm/script-utils/package-manager.d.mts +77 -0
- package/dist/lib/esm/script-utils/package-manager.mjs +173 -0
- package/dist/lib/esm/script-utils/version.mjs +21 -9
- package/obsidian/demo-vault-naming/package.json +6 -0
- package/obsidian/mobile-trusted-input/package.json +6 -0
- package/obsidian/trusted-input/package.json +6 -0
- package/package.json +19 -17
- package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
- package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
- package/script-utils/package-manager/package.json +6 -0
|
@@ -0,0 +1,206 @@
|
|
|
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 () {
|
|
7
|
+
function ensureBrowserProcess() {
|
|
8
|
+
const browserProcess = {
|
|
9
|
+
browser: true,
|
|
10
|
+
cwd() {
|
|
11
|
+
return '/';
|
|
12
|
+
},
|
|
13
|
+
env: {},
|
|
14
|
+
platform: 'android'
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
18
|
+
const existingProcess = globalThis.process;
|
|
19
|
+
|
|
20
|
+
if (!existingProcess) {
|
|
21
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
22
|
+
globalThis.process = browserProcess;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const existingProcessRecord = existingProcess;
|
|
31
|
+
|
|
32
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
33
|
+
existingProcessRecord[key] ??= value;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
existingProcessRecord['browser'] = true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function keepName($unknown) {
|
|
40
|
+
return $unknown;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
(function initCjs() {
|
|
44
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
45
|
+
const globalThisRecord = globalThis;
|
|
46
|
+
globalThisRecord['__name'] ??= keepName;
|
|
47
|
+
const originalRequire = require;
|
|
48
|
+
if (originalRequire && !originalRequire.__isPatched) {
|
|
49
|
+
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
|
|
50
|
+
require = Object.assign(
|
|
51
|
+
(id) => requirePatched(id),
|
|
52
|
+
originalRequire,
|
|
53
|
+
{
|
|
54
|
+
__isPatched: true
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
60
|
+
|
|
61
|
+
ensureBrowserProcess();
|
|
62
|
+
|
|
63
|
+
function extractDefault(module) {
|
|
64
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
68
|
+
'@codemirror/autocomplete',
|
|
69
|
+
'@codemirror/collab',
|
|
70
|
+
'@codemirror/commands',
|
|
71
|
+
'@codemirror/language',
|
|
72
|
+
'@codemirror/lint',
|
|
73
|
+
'@codemirror/search',
|
|
74
|
+
'@codemirror/state',
|
|
75
|
+
'@codemirror/text',
|
|
76
|
+
'@codemirror/view',
|
|
77
|
+
'@lezer/common',
|
|
78
|
+
'@lezer/highlight',
|
|
79
|
+
'@lezer/lr',
|
|
80
|
+
'obsidian']
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
84
|
+
'@codemirror/closebrackets',
|
|
85
|
+
'@codemirror/comment',
|
|
86
|
+
'@codemirror/fold',
|
|
87
|
+
'@codemirror/gutter',
|
|
88
|
+
'@codemirror/highlight',
|
|
89
|
+
'@codemirror/history',
|
|
90
|
+
'@codemirror/matchbrackets',
|
|
91
|
+
'@codemirror/panel',
|
|
92
|
+
'@codemirror/rangeset',
|
|
93
|
+
'@codemirror/rectangular-selection',
|
|
94
|
+
'@codemirror/stream-parser',
|
|
95
|
+
'@codemirror/tooltip']
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
function requirePatched(id) {
|
|
99
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
100
|
+
return originalRequire?.(id);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
104
|
+
if (globalThis.app.isMobile) {
|
|
105
|
+
if (id === 'process' || id === 'node:process') {
|
|
106
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
107
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
108
|
+
|
|
109
|
+
return process;
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
const module = originalRequire?.(id);
|
|
113
|
+
if (module) {
|
|
114
|
+
return extractDefault(module);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
119
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
120
|
+
return {};
|
|
121
|
+
}
|
|
122
|
+
})();
|
|
123
|
+
})();
|
|
124
|
+
|
|
125
|
+
"use strict";
|
|
126
|
+
var __create = Object.create;
|
|
127
|
+
var __defProp = Object.defineProperty;
|
|
128
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
129
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
130
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
131
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
132
|
+
var __export = (target, all) => {
|
|
133
|
+
for (var name in all)
|
|
134
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
135
|
+
};
|
|
136
|
+
var __copyProps = (to, from, except, desc) => {
|
|
137
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
138
|
+
for (let key of __getOwnPropNames(from))
|
|
139
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
140
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
141
|
+
}
|
|
142
|
+
return to;
|
|
143
|
+
};
|
|
144
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
145
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
146
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
147
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
148
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
149
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
150
|
+
mod
|
|
151
|
+
));
|
|
152
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
153
|
+
var trusted_input_exports = {};
|
|
154
|
+
__export(trusted_input_exports, {
|
|
155
|
+
clickElement: () => clickElement,
|
|
156
|
+
clickMouse: () => clickMouse,
|
|
157
|
+
hoverElement: () => hoverElement,
|
|
158
|
+
moveMouse: () => moveMouse,
|
|
159
|
+
pressKey: () => pressKey,
|
|
160
|
+
typeIntoEditor: () => typeIntoEditor,
|
|
161
|
+
unhoverElement: () => unhoverElement
|
|
162
|
+
});
|
|
163
|
+
module.exports = __toCommonJS(trusted_input_exports);
|
|
164
|
+
var import_obsidian = require('obsidian');
|
|
165
|
+
async function clickElement(params) {
|
|
166
|
+
const arm = await loadArm();
|
|
167
|
+
await arm.clickElement(params);
|
|
168
|
+
}
|
|
169
|
+
async function clickMouse(params) {
|
|
170
|
+
const arm = await loadArm();
|
|
171
|
+
await arm.clickMouse(params);
|
|
172
|
+
}
|
|
173
|
+
async function hoverElement(params) {
|
|
174
|
+
const arm = await loadArm();
|
|
175
|
+
await arm.hoverElement(params);
|
|
176
|
+
}
|
|
177
|
+
async function moveMouse(params) {
|
|
178
|
+
const arm = await loadArm();
|
|
179
|
+
await arm.moveMouse(params);
|
|
180
|
+
}
|
|
181
|
+
async function pressKey(params) {
|
|
182
|
+
const arm = await loadArm();
|
|
183
|
+
await arm.pressKey(params);
|
|
184
|
+
}
|
|
185
|
+
async function typeIntoEditor(params) {
|
|
186
|
+
const arm = await loadArm();
|
|
187
|
+
await arm.typeIntoEditor(params);
|
|
188
|
+
}
|
|
189
|
+
async function unhoverElement(params) {
|
|
190
|
+
const arm = await loadArm();
|
|
191
|
+
await arm.unhoverElement(params);
|
|
192
|
+
}
|
|
193
|
+
async function loadArm() {
|
|
194
|
+
return import_obsidian.Platform.isDesktopApp ? await import("./desktop-trusted-input.cjs") : await import("./mobile-trusted-input.cjs");
|
|
195
|
+
}
|
|
196
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
197
|
+
0 && (module.exports = {
|
|
198
|
+
clickElement,
|
|
199
|
+
clickMouse,
|
|
200
|
+
hoverElement,
|
|
201
|
+
moveMouse,
|
|
202
|
+
pressKey,
|
|
203
|
+
typeIntoEditor,
|
|
204
|
+
unhoverElement
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3RydXN0ZWQtaW5wdXQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUcnVzdGVkIGlucHV0IGhlbHBlcnMgdGhhdCB3b3JrIG9uICoqZWl0aGVyIHBsYXRmb3JtKiogXHUyMDE0IHRoZSBkb2N1bWVudGVkIGVudHJ5IHBvaW50IGZvciBrZXlzdHJva2VzLFxuICogcG9pbnRlciBtb3ZlcyBhbmQgY2xpY2tzIHRoYXQgT2JzaWRpYW4gYWN0dWFsbHkgYmVsaWV2ZXMuXG4gKlxuICogVW50cnVzdGVkIGlucHV0IChgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKWApIGlzIHNpbGVudGx5IGlnbm9yZWQgYnkgQ29kZU1pcnJvcixcbiAqIGJ5IHRoZSBDU1MgYDpob3ZlcmAgZW5naW5lIGFuZCBieSBldmVyeSBgZS5pc1RydXN0ZWRgIGd1YXJkIGluIE9ic2lkaWFuLCBzbyBhIHRlc3QgZHJpdmluZyBpdCBleGVyY2lzZXNcbiAqIG5vdGhpbmcgd2hpbGUgc3RpbGwgcGFzc2luZy4gQSB0cnVzdGVkIGV2ZW50IGhhcyB0byBjb21lIGZyb20gb3V0c2lkZSB0aGUgcmVuZGVyZXIsIGFuZCBob3cgaXQgZ2V0c1xuICogdGhlcmUgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IEVsZWN0cm9uJ3MgYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YCBvbiBkZXNrdG9wLCBhIENEUCBpbmplY3Rpb25cbiAqIHJvdW5kLXRyaXBwZWQgdGhyb3VnaCB0aGUgaGFybmVzcydzIGhvc3QgY2hhbm5lbCBvbiBtb2JpbGUuXG4gKlxuICogVGhpcyBtb2R1bGUgKippbnRlcm5hbGl6ZXMgdGhhdCBzcGxpdCoqIChzZWUgdGhlIHByb2plY3QgYEFHRU5UUy5tZGAgKipMNioqKTogaXQgc3RheXNcbiAqIGNyb3NzLXBsYXRmb3JtLWxvYWRhYmxlIFx1MjAxNCBubyBwbGF0Zm9ybS1vbmx5IG1vZHVsZSBpcyBvbiBpdHMgaW1wb3J0IGdyYXBoIFx1MjAxNCBhbmQgZWFjaCBoZWxwZXIgZGVmZXJzIHRvIGFcbiAqIGBQbGF0Zm9ybWAtZ2F0ZWQgY2FsbC10aW1lIGR5bmFtaWMgYGltcG9ydCgpYCBvZiB0aGUgYXJtIHRoYXQgZml0cy4gU28gYSBjb25zdW1lciB3cml0ZXNcbiAqIGBhd2FpdCBjbGlja0VsZW1lbnQoeyBlbGVtZW50IH0pYCBvbmNlIGFuZCBuZXZlciBhIHBsYXRmb3JtIGNoZWNrLlxuICpcbiAqIFRoZSBhcm1zIHJlbWFpbiBpbXBvcnRhYmxlIGRpcmVjdGx5LCBmb3IgYSBjYWxsZXIgbWFraW5nIGEgZGVsaWJlcmF0ZSBwbGF0Zm9ybSBjb21taXRtZW50OlxuICoge0BsaW5rIC4vZGVza3RvcC10cnVzdGVkLWlucHV0LnRzIHwgZGVza3RvcC10cnVzdGVkLWlucHV0fSBhbmRcbiAqIHtAbGluayAuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIHwgbW9iaWxlLXRydXN0ZWQtaW5wdXR9LiBQcmVmZXIgdGhpcyBmYWNhZGUgb3RoZXJ3aXNlLlxuICpcbiAqICoqRXZlcnkgaGVscGVyIG11c3QgYmUgYXdhaXRlZC4qKiBUaGUgZGVza3RvcCBhcm0gaGFzIG5vdGhpbmcgdG8gd2FpdCBmb3IsIGJ1dCB0aGUgbW9iaWxlIGFybSdzXG4gKiBpbmplY3Rpb24gaXMgYSByb3VuZC10cmlwIHRvIHRoZSBob3N0LCBzbyBhIG1pc3NpbmcgYGF3YWl0YCBsZXRzIHRoZSBhc3NlcnRpb24gcnVuIGJlZm9yZSB0aGUgaW5wdXQgaGFzXG4gKiBsYW5kZWQuIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgb24gYm90aCBwbGF0Zm9ybXMgcHJlY2lzZWx5IHNvIHRoYXQgYSBzdWl0ZSBncm93aW5nIGEgbW9iaWxlIGxhbmVcbiAqIGRvZXMgbm90IGhhdmUgdG8gYmUgcmV3cml0dGVuLlxuICpcbiAqICoqTm90IGV2ZXJ5IGhlbHBlciBzdXJ2aXZlcyB0aGUgcG9ydC4qKiBgbW92ZU1vdXNlYCwgYGhvdmVyRWxlbWVudGAgYW5kIGB1bmhvdmVyRWxlbWVudGAgKip0aHJvdyoqIG9uXG4gKiBtb2JpbGU6IGEgdG91Y2ggc2NyZWVuIGhhcyBubyBwZXJzaXN0ZW50IHBvaW50ZXIgYW5kIGA6aG92ZXJgIGhhcyBubyB0b3VjaCBlcXVpdmFsZW50LiBUaGV5IHRocm93XG4gKiByYXRoZXIgdGhhbiBuby1vcCwgYmVjYXVzZSBhIHNpbGVudCBuby1vcCBpcyBleGFjdGx5IHRoZSBmYWxzZSBjb25maWRlbmNlIHRydXN0ZWQgaW5wdXQgZXhpc3RzIHRvIGVuZC5cbiAqIEdhdGUgdGhvc2Ugb24gYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAsIG9yIGRyaXZlIHRoZSBlbGVtZW50IHdpdGgge0BsaW5rIGNsaWNrRWxlbWVudH0gaW5zdGVhZC5cbiAqL1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zXG59IGZyb20gJy4vZGVza3RvcC10cnVzdGVkLWlucHV0LnRzJztcblxuZXhwb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTW91c2VCdXR0b24sXG4gIE1vdmVNb3VzZVBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtc1xufSBmcm9tICcuL2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dC50cyc7XG5cbi8vIFRoZSBzZXZlbiBoZWxwZXJzIGJvdGggYXJtcyBleHBvcnQsIHdpdGggaWRlbnRpY2FsIHNpZ25hdHVyZXMuIFR5cGVkIG9mZiB0aGUgbW9iaWxlIGFybSBiZWNhdXNlIGl0XG4vLyBFeHBvcnRzIG5vdGhpbmcgZWxzZTsgdGhlIGRlc2t0b3AgYXJtIGFkZGl0aW9uYWxseSBleHBvcnRzIHRoZSBwYXJhbWV0ZXIgY29udHJhY3RzIGJvdGggc2hhcmUuXG50eXBlIFRydXN0ZWRJbnB1dEFybSA9IHR5cGVvZiBpbXBvcnQoJy4vbW9iaWxlLXRydXN0ZWQtaW5wdXQudHMnKTtcblxuLyoqXG4gKiBDbGlja3MgdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqIGlucHV0IFx1MjAxNCBFbGVjdHJvbidzIGBzZW5kSW5wdXRFdmVudGAgb24gZGVza3RvcCwgYSBDRFBcbiAqIHRvdWNoIHRhcCBpbiB0aGUgV2ViVmlldyBvbiBtb2JpbGUuXG4gKlxuICogVGhlIGVsZW1lbnQtcmVsYXRpdmUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGNsaWNrTW91c2V9LCBtaXJyb3JpbmcgdGhlIHtAbGluayBtb3ZlTW91c2V9IC9cbiAqIHtAbGluayBob3ZlckVsZW1lbnR9IHNwbGl0LiBVc2Uge0BsaW5rIGNsaWNrTW91c2V9IGRpcmVjdGx5IHdoZW4gdGhlIHBvaW50IHRvIGNsaWNrIGlzICoqbm90KiogdGhlXG4gKiBlbGVtZW50J3MgY2VudGVyIFx1MjAxNCB0aGUgbWFya2Rvd24gZWRpdG9yJ3MgbWFyZ2luLCBmb3IgaW5zdGFuY2UsIGxpZXMgaW5zaWRlIGBjbS5zY3JvbGxET01gIGJ1dCBvdXRzaWRlXG4gKiBgLmNtLXNpemVyYCwgc28gbm8gZWxlbWVudCdzIGNlbnRlciBsYW5kcyBvbiBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gY2xpY2ssIHRoZSBidXR0b24gdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgY2xpY2sgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGlja0VsZW1lbnQocGFyYW1zOiBDbGlja0VsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJtID0gYXdhaXQgbG9hZEFybSgpO1xuICBhd2FpdCBhcm0uY2xpY2tFbGVtZW50KHBhcmFtcyk7XG59XG5cbi8qKlxuICogQ2xpY2tzIGF0IHRoZSBnaXZlbiB2aWV3cG9ydCBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiBpbnB1dCwgc28gdGhlIHJlbmRlcmVyIHN5bnRoZXNpemVzIGEgcmVhbFxuICogYGNsaWNrYCAob3IgYGNvbnRleHRtZW51YCwgZm9yIHRoZSByaWdodCBidXR0b24pIHdpdGggYGlzVHJ1c3RlZCA9PT0gdHJ1ZWAuXG4gKlxuICogVGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IG9uZSBjbGljayBhdCBvbmUgcG9pbnQsIHdpdGggbm8gd2FpdGluZyBmb3IgYW55IGVmZmVjdCBcdTIwMTQgY2FsbGVycyBwb2xsIHRoZWlyIG93blxuICogcmVhZGluZXNzIHNpZ25hbC4gUHJlZmVyIHtAbGluayBjbGlja0VsZW1lbnR9IGZvciBlbGVtZW50LXJlbGF0aXZlIGNsaWNrcy5cbiAqXG4gKiBBIHJlYWwgY29udGV4dCBtZW51IGFjdHVhbGx5IG9wZW5zLCBzbyBhIHN1aXRlIGRyaXZpbmcgYSByaWdodCBjbGljayBtdXN0IGNsb3NlIGl0IChvciByZW1vdmUgdGhlXG4gKiBsZWZ0b3ZlciBgLm1lbnVgIGVsZW1lbnQpIGJlZm9yZSB0aGUgbmV4dCB0ZXN0LlxuICpcbiAqICoqT24gbW9iaWxlIHRoZSBidXR0b24gbW9kZWwgZG9lcyBub3Qgc3Vydml2ZSB0aGUgcG9ydCoqOiB0b3VjaCBoYXMgbm8gYnV0dG9ucywgc28gYCdsZWZ0J2AgKHRoZVxuICogZGVmYXVsdCkgaXMgYSAqKnRhcCoqLCBgJ3JpZ2h0J2AgaXMgdGhlICoqbG9uZy1wcmVzcyoqIHRoYXQgb3BlbnMgT2JzaWRpYW4gTW9iaWxlJ3MgY29udGV4dCBtZW51LCBhbmRcbiAqIGAnbWlkZGxlJ2AgdGhyb3dzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8gY2xpY2sgYXQsIHRoZSBidXR0b24gdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgY2xpY2sgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGlja01vdXNlKHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcm0gPSBhd2FpdCBsb2FkQXJtKCk7XG4gIGF3YWl0IGFybS5jbGlja01vdXNlKHBhcmFtcyk7XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqIHBvaW50ZXIgaW5wdXQsIHRoZW4gcG9sbHMgdW50aWwgdGhlXG4gKiBlbGVtZW50IGFjdHVhbGx5IG1hdGNoZXMgYDpob3ZlcmAuXG4gKlxuICogKipEZXNrdG9wIG9ubHkqKiBcdTIwMTQgaXQgdGhyb3dzIG9uIG1vYmlsZSwgd2hlcmUgYDpob3ZlcmAgaGFzIG5vIHRvdWNoIGVxdWl2YWxlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG1hdGNoZXMgYDpob3ZlcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBob3ZlckVsZW1lbnQocGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJtID0gYXdhaXQgbG9hZEFybSgpO1xuICBhd2FpdCBhcm0uaG92ZXJFbGVtZW50KHBhcmFtcyk7XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIGdpdmVuIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHVzaW5nIGEgKip0cnVzdGVkKiogcG9pbnRlciBtb3ZlLCBzbyBgOmhvdmVyYCBydWxlc1xuICogZ2VudWluZWx5IGFwcGx5LlxuICpcbiAqIFRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlOiBhIHNpbmdsZSBtb3ZlIHRoYXQgZG9lcyAqKm5vdCoqIHdhaXQgZm9yIGFueSBzdGF0ZSB0byBzZXR0bGUuIFByZWZlclxuICoge0BsaW5rIGhvdmVyRWxlbWVudH0gLyB7QGxpbmsgdW5ob3ZlckVsZW1lbnR9IGZvciBlbGVtZW50LXJlbGF0aXZlIG1vdmVzLlxuICpcbiAqICoqRGVza3RvcCBvbmx5KiogXHUyMDE0IGl0IHRocm93cyBvbiBtb2JpbGUsIHdoaWNoIGhhcyBubyBwZXJzaXN0ZW50IHBvaW50ZXIgdG8gbW92ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIG1vdmUgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIG1vdmUgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb3ZlTW91c2UocGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJtID0gYXdhaXQgbG9hZEFybSgpO1xuICBhd2FpdCBhcm0ubW92ZU1vdXNlKHBhcmFtcyk7XG59XG5cbi8qKlxuICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlIGZ1bGwgcmVhbFxuICoga2V5IHBpcGVsaW5lIFx1MjAxNCBga2V5ZG93bmAgXHUyMTkyIGBrZXlwcmVzc2AgXHUyMTkyIGBiZWZvcmVpbnB1dGAgXHUyMTkyIGBpbnB1dGAgXHUyMTkyIGBrZXl1cGAuXG4gKlxuICogSXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB3aW5kb3cncyBET00tZm9jdXNlZCBlbGVtZW50LCBzbyB0aGUgY2FsbGVyIGZvY3VzZXMgdGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlblxuICogYXdhaXRzIHRoZSBleHBlY3RlZCBlZmZlY3Q7IHRoZSBwcmVzcyBpdHNlbGYgcG9sbHMgZm9yIG5vdGhpbmcuIE9uIG1vYmlsZSB0aGUgYWNjZXB0ZWQga2V5cyBhcmUgdGhlXG4gKiBuYW1lZCBvbmVzIChgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGAnQmFja3NwYWNlJ2AsIGAnRGVsZXRlJ2AsIHRoZSBhcnJvd3MpIHBsdXMgc2luZ2xlIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBcdTIwMTQgYW55dGhpbmcgZWxzZSB0aHJvd3MgcmF0aGVyIHRoYW4gcHJlc3Npbmcgbm90aGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXkgcHJlc3MgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVzc0tleShwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFybSA9IGF3YWl0IGxvYWRBcm0oKTtcbiAgYXdhaXQgYXJtLnByZXNzS2V5KHBhcmFtcyk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciBlZGl0b3IgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQuXG4gKlxuICogRm9jdXNlcyB0aGUgZWRpdG9yIChjYXJldCB0byB0aGUgZW5kKSBhbmQgcHJlc3NlcyBldmVyeSBjb2RlIHBvaW50IG9mIHRoZSB0ZXh0IFx1MjAxNCB0aGUgc2FtZSB0cnVzdGVkXG4gKiBzZXF1ZW5jZSBhIHJlYWwgdXNlciBwcm9kdWNlcyBcdTIwMTQgc28gdGhlIHRleHQgcmVhY2hlcyB0aGUgZG9jdW1lbnQgKipvbmx5IGlmIHRoZSBlZGl0b3IgZ2VudWluZWx5IGhvbGRzXG4gKiBmb2N1cyoqLiBUaGVuIGl0IHBvbGxzIHVudGlsIHRoZSBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQsIG9yIGEgYm91bmRlZCB0aW1lb3V0IGVsYXBzZXMgKHRoZSBleHBlY3RlZFxuICogb3V0Y29tZSB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZC1vbmx5IG9yIGZvY3VzIHdhcyBzdG9sZW4pLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFybSA9IGF3YWl0IGxvYWRBcm0oKTtcbiAgYXdhaXQgYXJtLnR5cGVJbnRvRWRpdG9yKHBhcmFtcyk7XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIHBvaW50ZXIgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgYW4gZWxlbWVudCdzIGJvdW5kaW5nIGJveCB1c2luZyBhICoqdHJ1c3RlZCoqIHBvaW50ZXIgbW92ZSxcbiAqIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXMgYDpob3ZlcmAuXG4gKlxuICogVGhlIGludmVyc2Ugb2Yge0BsaW5rIGhvdmVyRWxlbWVudH0uIFdoZW4gYW4gZWxlbWVudCBzcGFucyB0aGUgZnVsbCB2aWV3cG9ydCAobm8gcG9pbnQgb3V0c2lkZSBpdHMgYm94XG4gKiBpcyByZWFjaGFibGUpLCB1c2Uge0BsaW5rIG1vdmVNb3VzZX0gZGlyZWN0bHkgdG8gbW92ZSB0aGUgcG9pbnRlciB0byBhIGtub3duIGVtcHR5IGNvb3JkaW5hdGUgaW5zdGVhZC5cbiAqXG4gKiAqKkRlc2t0b3Agb25seSoqIFx1MjAxNCBpdCB0aHJvd3Mgb24gbW9iaWxlLCBmb3IgdGhlIHNhbWUgcmVhc29uIHtAbGluayBob3ZlckVsZW1lbnR9IGRvZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIHBvaW50ZXIgYXdheSBmcm9tLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG5vIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5ob3ZlckVsZW1lbnQocGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcm0gPSBhd2FpdCBsb2FkQXJtKCk7XG4gIGF3YWl0IGFybS51bmhvdmVyRWxlbWVudChwYXJhbXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkQXJtKCk6IFByb21pc2U8VHJ1c3RlZElucHV0QXJtPiB7XG4gIC8vIENvbmRpdGlvbmFsIGltcG9ydCBvZiB0aGUgcGxhdGZvcm0tb25seSBhcm0sIGF0IGNhbGwgdGltZTogbmVpdGhlciBhcm0gaXMgb24gdGhlIG90aGVyIHBsYXRmb3JtJ3NcbiAgLy8gTG9hZCBwYXRoLCBhbmQgdGhlIHNwZWNpZmllcnMgc3RheSBsaXRlcmFsIHNvIGVzYnVpbGQgYnVuZGxlcyBib3RoLlxuICByZXR1cm4gUGxhdGZvcm0uaXNEZXNrdG9wQXBwID8gYXdhaXQgaW1wb3J0KCcuL2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dC50cycpIDogYXdhaXQgaW1wb3J0KCcuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0Esc0JBQXlCO0FBdUN6QixlQUFzQixhQUFhLFFBQTJDO0FBQzVFLFFBQU0sTUFBTSxNQUFNLFFBQVE7QUFDMUIsUUFBTSxJQUFJLGFBQWEsTUFBTTtBQUMvQjtBQW1CQSxlQUFzQixXQUFXLFFBQXlDO0FBQ3hFLFFBQU0sTUFBTSxNQUFNLFFBQVE7QUFDMUIsUUFBTSxJQUFJLFdBQVcsTUFBTTtBQUM3QjtBQVdBLGVBQXNCLGFBQWEsUUFBMkM7QUFDNUUsUUFBTSxNQUFNLE1BQU0sUUFBUTtBQUMxQixRQUFNLElBQUksYUFBYSxNQUFNO0FBQy9CO0FBY0EsZUFBc0IsVUFBVSxRQUF3QztBQUN0RSxRQUFNLE1BQU0sTUFBTSxRQUFRO0FBQzFCLFFBQU0sSUFBSSxVQUFVLE1BQU07QUFDNUI7QUFjQSxlQUFzQixTQUFTLFFBQXVDO0FBQ3BFLFFBQU0sTUFBTSxNQUFNLFFBQVE7QUFDMUIsUUFBTSxJQUFJLFNBQVMsTUFBTTtBQUMzQjtBQWFBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxNQUFNLE1BQU0sUUFBUTtBQUMxQixRQUFNLElBQUksZUFBZSxNQUFNO0FBQ2pDO0FBY0EsZUFBc0IsZUFBZSxRQUE2QztBQUNoRixRQUFNLE1BQU0sTUFBTSxRQUFRO0FBQzFCLFFBQU0sSUFBSSxlQUFlLE1BQU07QUFDakM7QUFFQSxlQUFlLFVBQW9DO0FBR2pELFNBQU8seUJBQVMsZUFBZSxNQUFNLE9BQU8sNEJBQTRCLElBQUksTUFBTSxPQUFPLDJCQUEyQjtBQUN0SDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/// <reference path="../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Trusted input helpers that work on **either platform** — the documented entry point for keystrokes,
|
|
6
|
+
* pointer moves and clicks that Obsidian actually believes.
|
|
7
|
+
*
|
|
8
|
+
* Untrusted input (`element.dispatchEvent(new MouseEvent('click'))`) is silently ignored by CodeMirror,
|
|
9
|
+
* by the CSS `:hover` engine and by every `e.isTrusted` guard in Obsidian, so a test driving it exercises
|
|
10
|
+
* nothing while still passing. A trusted event has to come from outside the renderer, and how it gets
|
|
11
|
+
* there is platform-specific: Electron's `webContents.sendInputEvent` on desktop, a CDP injection
|
|
12
|
+
* round-tripped through the harness's host channel on mobile.
|
|
13
|
+
*
|
|
14
|
+
* This module **internalizes that split** (see the project `AGENTS.md` **L6**): it stays
|
|
15
|
+
* cross-platform-loadable — no platform-only module is on its import graph — and each helper defers to a
|
|
16
|
+
* `Platform`-gated call-time dynamic `import()` of the arm that fits. So a consumer writes
|
|
17
|
+
* `await clickElement({ element })` once and never a platform check.
|
|
18
|
+
*
|
|
19
|
+
* The arms remain importable directly, for a caller making a deliberate platform commitment:
|
|
20
|
+
* {@link ./desktop-trusted-input.ts | desktop-trusted-input} and
|
|
21
|
+
* {@link ./mobile-trusted-input.ts | mobile-trusted-input}. Prefer this facade otherwise.
|
|
22
|
+
*
|
|
23
|
+
* **Every helper must be awaited.** The desktop arm has nothing to wait for, but the mobile arm's
|
|
24
|
+
* injection is a round-trip to the host, so a missing `await` lets the assertion run before the input has
|
|
25
|
+
* landed. The signature is the same on both platforms precisely so that a suite growing a mobile lane
|
|
26
|
+
* does not have to be rewritten.
|
|
27
|
+
*
|
|
28
|
+
* **Not every helper survives the port.** `moveMouse`, `hoverElement` and `unhoverElement` **throw** on
|
|
29
|
+
* mobile: a touch screen has no persistent pointer and `:hover` has no touch equivalent. They throw
|
|
30
|
+
* rather than no-op, because a silent no-op is exactly the false confidence trusted input exists to end.
|
|
31
|
+
* Gate those on `Platform.isDesktopApp`, or drive the element with {@link clickElement} instead.
|
|
32
|
+
*/
|
|
33
|
+
import type { ClickElementParams, ClickMouseParams, HoverElementParams, MoveMouseParams, PressKeyParams, TypeIntoEditorParams, UnhoverElementParams } from './desktop-trusted-input.cjs';
|
|
34
|
+
export type { ClickElementParams, ClickMouseParams, HoverElementParams, MouseButton, MoveMouseParams, PressKeyParams, TypeIntoEditorParams, UnhoverElementParams } from './desktop-trusted-input.cjs';
|
|
35
|
+
/**
|
|
36
|
+
* Clicks the center of an element using **trusted** input — Electron's `sendInputEvent` on desktop, a CDP
|
|
37
|
+
* touch tap in the WebView on mobile.
|
|
38
|
+
*
|
|
39
|
+
* The element-relative counterpart of {@link clickMouse}, mirroring the {@link moveMouse} /
|
|
40
|
+
* {@link hoverElement} split. Use {@link clickMouse} directly when the point to click is **not** the
|
|
41
|
+
* element's center — the markdown editor's margin, for instance, lies inside `cm.scrollDOM` but outside
|
|
42
|
+
* `.cm-sizer`, so no element's center lands on it.
|
|
43
|
+
*
|
|
44
|
+
* @param params - The element to click, the button to press and any modifiers to hold.
|
|
45
|
+
* @returns A {@link Promise} that resolves once the click has been injected.
|
|
46
|
+
*/
|
|
47
|
+
export declare function clickElement(params: ClickElementParams): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Clicks at the given viewport coordinates using **trusted** input, so the renderer synthesizes a real
|
|
50
|
+
* `click` (or `contextmenu`, for the right button) with `isTrusted === true`.
|
|
51
|
+
*
|
|
52
|
+
* The low-level primitive: one click at one point, with no waiting for any effect — callers poll their own
|
|
53
|
+
* readiness signal. Prefer {@link clickElement} for element-relative clicks.
|
|
54
|
+
*
|
|
55
|
+
* A real context menu actually opens, so a suite driving a right click must close it (or remove the
|
|
56
|
+
* leftover `.menu` element) before the next test.
|
|
57
|
+
*
|
|
58
|
+
* **On mobile the button model does not survive the port**: touch has no buttons, so `'left'` (the
|
|
59
|
+
* default) is a **tap**, `'right'` is the **long-press** that opens Obsidian Mobile's context menu, and
|
|
60
|
+
* `'middle'` throws.
|
|
61
|
+
*
|
|
62
|
+
* @param params - The viewport coordinates to click at, the button to press and any modifiers to hold.
|
|
63
|
+
* @returns A {@link Promise} that resolves once the click has been injected.
|
|
64
|
+
*/
|
|
65
|
+
export declare function clickMouse(params: ClickMouseParams): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Moves the pointer to the center of an element using **trusted** pointer input, then polls until the
|
|
68
|
+
* element actually matches `:hover`.
|
|
69
|
+
*
|
|
70
|
+
* **Desktop only** — it throws on mobile, where `:hover` has no touch equivalent.
|
|
71
|
+
*
|
|
72
|
+
* @param params - The element to hover.
|
|
73
|
+
* @returns A {@link Promise} that resolves once the element matches `:hover`.
|
|
74
|
+
*/
|
|
75
|
+
export declare function hoverElement(params: HoverElementParams): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Moves the pointer to the given viewport coordinates using a **trusted** pointer move, so `:hover` rules
|
|
78
|
+
* genuinely apply.
|
|
79
|
+
*
|
|
80
|
+
* The low-level primitive: a single move that does **not** wait for any state to settle. Prefer
|
|
81
|
+
* {@link hoverElement} / {@link unhoverElement} for element-relative moves.
|
|
82
|
+
*
|
|
83
|
+
* **Desktop only** — it throws on mobile, which has no persistent pointer to move.
|
|
84
|
+
*
|
|
85
|
+
* @param params - The viewport coordinates to move to.
|
|
86
|
+
* @returns A {@link Promise} that resolves once the move has been injected.
|
|
87
|
+
*/
|
|
88
|
+
export declare function moveMouse(params: MoveMouseParams): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Presses a single key (optionally with modifiers) using **trusted** keyboard input, firing the full real
|
|
91
|
+
* key pipeline — `keydown` → `keypress` → `beforeinput` → `input` → `keyup`.
|
|
92
|
+
*
|
|
93
|
+
* It is delivered to the window's DOM-focused element, so the caller focuses the target first and then
|
|
94
|
+
* awaits the expected effect; the press itself polls for nothing. On mobile the accepted keys are the
|
|
95
|
+
* named ones (`'Enter'`, `'Escape'`, `'Tab'`, `'Backspace'`, `'Delete'`, the arrows) plus single printable
|
|
96
|
+
* characters — anything else throws rather than pressing nothing.
|
|
97
|
+
*
|
|
98
|
+
* @param params - The key to press and any modifiers to hold.
|
|
99
|
+
* @returns A {@link Promise} that resolves once the key press has been injected.
|
|
100
|
+
*/
|
|
101
|
+
export declare function pressKey(params: PressKeyParams): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Types text into a CodeMirror editor using **trusted** keyboard input.
|
|
104
|
+
*
|
|
105
|
+
* Focuses the editor (caret to the end) and presses every code point of the text — the same trusted
|
|
106
|
+
* sequence a real user produces — so the text reaches the document **only if the editor genuinely holds
|
|
107
|
+
* focus**. Then it polls until the document reflects the input, or a bounded timeout elapses (the expected
|
|
108
|
+
* outcome when the editor is read-only or focus was stolen).
|
|
109
|
+
*
|
|
110
|
+
* @param params - The editor to type into and the text to type.
|
|
111
|
+
* @returns A {@link Promise} that resolves once the keystrokes have settled.
|
|
112
|
+
*/
|
|
113
|
+
export declare function typeIntoEditor(params: TypeIntoEditorParams): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Moves the pointer to a point just outside an element's bounding box using a **trusted** pointer move,
|
|
116
|
+
* then polls until the element no longer matches `:hover`.
|
|
117
|
+
*
|
|
118
|
+
* The inverse of {@link hoverElement}. When an element spans the full viewport (no point outside its box
|
|
119
|
+
* is reachable), use {@link moveMouse} directly to move the pointer to a known empty coordinate instead.
|
|
120
|
+
*
|
|
121
|
+
* **Desktop only** — it throws on mobile, for the same reason {@link hoverElement} does.
|
|
122
|
+
*
|
|
123
|
+
* @param params - The element to move the pointer away from.
|
|
124
|
+
* @returns A {@link Promise} that resolves once the element no longer matches `:hover`.
|
|
125
|
+
*/
|
|
126
|
+
export declare function unhoverElement(params: UnhoverElementParams): Promise<void>;
|
|
@@ -158,7 +158,9 @@ var import_check_project_types = require('./check-project-types.cjs');
|
|
|
158
158
|
var import_fs = require('./fs.cjs');
|
|
159
159
|
var import_json = require('./json.cjs');
|
|
160
160
|
var import_npm_run = require('./npm-run.cjs');
|
|
161
|
+
var import_npm = require('./npm.cjs');
|
|
161
162
|
var import_obsidian_dev_utils_repo_paths = require('./obsidian-dev-utils-repo-paths.cjs');
|
|
163
|
+
var import_package_manager = require('./package-manager.cjs');
|
|
162
164
|
var import_root = require('./root.cjs');
|
|
163
165
|
async function buildClean() {
|
|
164
166
|
await (0, import_promises.rm)(import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.Dist, { force: true, recursive: true });
|
|
@@ -174,16 +176,25 @@ async function buildCompile() {
|
|
|
174
176
|
async function buildCompileSvelte() {
|
|
175
177
|
const tsConfigPath = (0, import_root.resolvePathFromRootSafe)({ path: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.TsConfigJson });
|
|
176
178
|
const tsConfig = await (0, import_json.readJson)(tsConfigPath);
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
179
|
+
const svelteFiles = await (0, import_async.toArray)((0, import_promises.glob)(SVELTE_FILE_PATTERNS, {
|
|
180
|
+
cwd: (0, import_root.resolvePathFromRootSafe)({ path: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.CurrentFolder }),
|
|
181
|
+
exclude: [...SVELTE_FILE_EXCLUDE_PATTERNS, ...tsConfig.exclude ?? []]
|
|
182
|
+
}));
|
|
183
|
+
const [firstSvelteFile] = svelteFiles;
|
|
184
|
+
if (firstSvelteFile === void 0) {
|
|
180
185
|
(0, import_debug.getLibDebugger)("build:buildCompileSvelte")("No Svelte files found in the project, skipping Svelte compilation");
|
|
181
186
|
return;
|
|
182
187
|
}
|
|
183
|
-
await (0,
|
|
188
|
+
const packageJson = await (0, import_npm.readPackageJson)();
|
|
189
|
+
if (!checkSvelteCheckDeclared(packageJson)) {
|
|
190
|
+
throw new Error(
|
|
191
|
+
`Found Svelte file(s) in the project (e.g. ${firstSvelteFile}), but \`${SVELTE_CHECK_PACKAGE_NAME}\` is not declared in package.json. Add \`${SVELTE_CHECK_PACKAGE_NAME}\` as a devDependency to type-check the Svelte code.`
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
await (0, import_root.execFromRoot)([...(0, import_package_manager.resolveToolCommand)({ tool: SVELTE_CHECK_PACKAGE_NAME }), "--tsconfig", import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.TsConfigJson]);
|
|
184
195
|
}
|
|
185
196
|
async function buildCompileTypeScript() {
|
|
186
|
-
await (0, import_root.execFromRoot)([
|
|
197
|
+
await (0, import_root.execFromRoot)([...(0, import_package_manager.resolveToolCommand)({ tool: "tsc" }), "--build", "--force"]);
|
|
187
198
|
if (!areProjectTypesValid()) {
|
|
188
199
|
throw new Error("TypeScript declaration validation failed.");
|
|
189
200
|
}
|
|
@@ -203,6 +214,16 @@ async function buildTemplates() {
|
|
|
203
214
|
}
|
|
204
215
|
const TEMPLATE_FILE_SUFFIX = ".template";
|
|
205
216
|
const NODE_MODULES_SEGMENT = "/node_modules/";
|
|
217
|
+
const SVELTE_CHECK_PACKAGE_NAME = "svelte-check";
|
|
218
|
+
const SVELTE_FILE_PATTERNS = [
|
|
219
|
+
`${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}/*.svelte`,
|
|
220
|
+
`${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}/*.svelte.js`,
|
|
221
|
+
`${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}/*.svelte.ts`
|
|
222
|
+
];
|
|
223
|
+
const SVELTE_FILE_EXCLUDE_PATTERNS = [
|
|
224
|
+
`${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}/${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.NodeModules}/${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}`,
|
|
225
|
+
`${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}/${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.Dist}/${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.AnyPath}`
|
|
226
|
+
];
|
|
206
227
|
function areProjectTypesValid() {
|
|
207
228
|
const root = (0, import_root.getRootFolder)();
|
|
208
229
|
if (!root) {
|
|
@@ -216,6 +237,9 @@ function areProjectTypesValid() {
|
|
|
216
237
|
shouldKeepFile: (fileName) => shouldKeepProjectFile({ fileName, rootCanonical })
|
|
217
238
|
});
|
|
218
239
|
}
|
|
240
|
+
function checkSvelteCheckDeclared(packageJson) {
|
|
241
|
+
return [packageJson.dependencies, packageJson.devDependencies, packageJson.peerDependencies].some((dependencies) => dependencies?.[SVELTE_CHECK_PACKAGE_NAME] !== void 0);
|
|
242
|
+
}
|
|
219
243
|
function shouldKeepProjectFile(params) {
|
|
220
244
|
const { fileName, rootCanonical } = params;
|
|
221
245
|
return fileName.startsWith(`${rootCanonical}/`) && !fileName.includes(NODE_MODULES_SEGMENT);
|
|
@@ -228,4 +252,4 @@ function shouldKeepProjectFile(params) {
|
|
|
228
252
|
buildCompileTypeScript,
|
|
229
253
|
buildTemplates
|
|
230
254
|
});
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idWlsZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgYnVpbGQgcHJvY2VzcyBmb3Igc3RhdGljIGFzc2V0cyBhbmQgY2xlYW5pbmdcbiAqIHRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLiBJdCBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gY29weSBzdGF0aWMgZmlsZXMgdG8gdGhlIGRpc3RyaWJ1dGlvbiBmb2xkZXJcbiAqIGFuZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIGJ1aWxkIG91dHB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRzQ29uZmlnSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iLFxuICBybVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgdHJpbVN0YXJ0IH0gZnJvbSAnLi4vc3RyaW5nLnRzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJvamVjdFR5cGVzLFxuICBwYXJzZVRzQ29uZmlnLFxuICB0b0Nhbm9uaWNhbFxufSBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyByZWFkSnNvbiB9IGZyb20gJy4vanNvbi50cyc7XG5pbXBvcnQge1xuICBucG1SdW5PcHRpb25hbCxcbiAgTnBtUnVuT3B0aW9uYWxSZXN1bHRcbn0gZnJvbSAnLi9ucG0tcnVuLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBkaXN0cmlidXRpb24gZm9sZGVyIGFuZCBpdHMgY29udGVudHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBlbnRpcmUgZGlzdHJpYnV0aW9uIGZvbGRlciB0byBlbnN1cmUgYSBjbGVhbiBidWlsZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBoYXMgYmVlbiByZW1vdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDbGVhbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcm0oT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogQ29tcGlsZXMgdGhlIGNvZGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb2RlIGNvbXBpbGVzIHN1Y2Nlc3NmdWxseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ29tcGlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGF3YWl0IG5wbVJ1bk9wdGlvbmFsKCdidWlsZDpjb21waWxlOnN2ZWx0ZScpID09PSBOcG1SdW5PcHRpb25hbFJlc3VsdC5Ta2lwcGVkKSB7XG4gICAgYXdhaXQgYnVpbGRDb21waWxlU3ZlbHRlKCk7XG4gIH1cbiAgaWYgKGF3YWl0IG5wbVJ1bk9wdGlvbmFsKCdidWlsZDpjb21waWxlOnR5cGVzY3JpcHQnKSA9PT0gTnBtUnVuT3B0aW9uYWxSZXN1bHQuU2tpcHBlZCkge1xuICAgIGF3YWl0IGJ1aWxkQ29tcGlsZVR5cGVTY3JpcHQoKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBpbGVzIHRoZSBTdmVsdGUgY29kZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlU3ZlbHRlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0c0NvbmZpZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuVHNDb25maWdKc29uIH0pO1xuICBjb25zdCB0c0NvbmZpZyA9IGF3YWl0IHJlYWRKc29uPFRzQ29uZmlnSnNvbj4odHNDb25maWdQYXRoKTtcbiAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCB0b0FycmF5KGdsb2IodHNDb25maWcuaW5jbHVkZSA/PyBbXSwgeyBleGNsdWRlOiB0c0NvbmZpZy5leGNsdWRlID8/IFtdIH0pKTtcbiAgY29uc3Qgc3ZlbHRlRmlsZXMgPSBhbGxGaWxlcy5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5zdmVsdGUnKSB8fCBmaWxlLmVuZHNXaXRoKCcuc3ZlbHRlLmpzJykgfHwgZmlsZS5lbmRzV2l0aCgnLnN2ZWx0ZS50cycpKTtcblxuICBpZiAoc3ZlbHRlRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ2J1aWxkOmJ1aWxkQ29tcGlsZVN2ZWx0ZScpKCdObyBTdmVsdGUgZmlsZXMgZm91bmQgaW4gdGhlIHByb2plY3QsIHNraXBwaW5nIFN2ZWx0ZSBjb21waWxhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25weCcsICdzdmVsdGUtY2hlY2snLCAnLS10c2NvbmZpZycsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuVHNDb25maWdKc29uXSk7XG59XG5cbi8qKlxuICogQ29tcGlsZXMgdGhlIFR5cGVTY3JpcHQgY29kZS5cbiAqXG4gKiBUaGUgZ2VuZXJhbCBgdHNjYCBwYXNzIHJ1bnMgd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYCAoY29uZmlndXJlZCBpbiBgdHNjb25maWcuanNvbmApIHNvIGl0IGRvZXNcbiAqIG5vdCBmYWlsIG9uIGJyb2tlbiB1cHN0cmVhbSBgLmQudHNgIGZpbGVzIHdlIGRvIG5vdCBjb250cm9sLiBBZnRlcndhcmRzLCB7QGxpbmsgYXJlUHJvamVjdFR5cGVzVmFsaWR9XG4gKiByZS1ydW5zIHRoZSB0eXBlLWNoZWNrIGluLW1lbW9yeSB3aXRoIGBza2lwTGliQ2hlY2s6IGZhbHNlYCwgcmVwb3J0aW5nIG9ubHkgZGlhZ25vc3RpY3MgZnJvbSB0aGVcbiAqIGZpbGVzIHdlIG93biwgc28gdGhlIGRlY2xhcmF0aW9ucyB3ZSBhdXRob3IgYXJlIHN0aWxsIGZ1bGx5IHZhbGlkYXRlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICogQHRocm93cyBJZiB0aGUgcHJvamVjdCdzIG93biBkZWNsYXJhdGlvbnMgZmFpbCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlVHlwZVNjcmlwdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ3RzYycsICctLWJ1aWxkJywgJy0tZm9yY2UnXSk7XG5cbiAgaWYgKCFhcmVQcm9qZWN0VHlwZXNWYWxpZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkLicpO1xuICB9XG59XG5cbi8qKlxuICogQ29waWVzIGFsbCB0ZW1wbGF0ZSBmaWxlcyBmcm9tIHRoZSB0ZW1wbGF0ZXMgZm9sZGVyIHRvIHRoZSBgdGVtcGxhdGVzYCBmb2xkZXIgd2l0aGluIHRoZVxuICogZGlzdHJpYnV0aW9uIGZvbGRlci5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgdGVtcGxhdGVzIGZvbGRlciBhbmQgY29waWVzIGVhY2ggZmlsZSB0byB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgcGF0aCB1bmRlciB7QGxpbmsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzfSwgc28gY29uc3VtZXJzIGNhbiBjb3B5IHRoZVxuICogdGVtcGxhdGVzIGZyb20gYG5vZGVfbW9kdWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMvZGlzdC90ZW1wbGF0ZXNgLiBBIHRyYWlsaW5nIGAudGVtcGxhdGVgIG9uIGEgc291cmNlXG4gKiBmaWxlIG5hbWUgaXMgc3RyaXBwZWQgaW4gdGhlIGRlc3RpbmF0aW9uIChlLmcuIGBlc2xpbnQuY29uZmlnLm10cy50ZW1wbGF0ZWAgaXMgY29waWVkIGFzXG4gKiBgZXNsaW50LmNvbmZpZy5tdHNgKSwgc28gYW4gYWN0aXZlIGNvbmZpZyB0ZW1wbGF0ZSBjYW4gbGl2ZSBpbiB0aGUgcmVwbyB1bmRlciBhIG5hbWUgdGhhdCB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgdG9vbCBkb2VzIG5vdCBhdXRvLWRpc2NvdmVyLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGVtcGxhdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5UZW1wbGF0ZXMsIHsgcmVjdXJzaXZlOiB0cnVlLCB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgaWYgKCFkaXJlbnQuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSB0cmltU3RhcnQoe1xuICAgICAgJHN0cmluZzogam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpLFxuICAgICAgcHJlZml4OiBgJHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlRlbXBsYXRlc30vYFxuICAgIH0pO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uUGF0aCA9IHBhdGguZW5kc1dpdGgoVEVNUExBVEVfRklMRV9TVUZGSVgpID8gcGF0aC5zbGljZSgwLCAtVEVNUExBVEVfRklMRV9TVUZGSVgubGVuZ3RoKSA6IHBhdGg7XG4gICAgYXdhaXQgY3Aoam9pbihPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlRlbXBsYXRlcywgcGF0aCksIGpvaW4oT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBkZXN0aW5hdGlvblBhdGgpKTtcbiAgfVxufVxuXG5jb25zdCBURU1QTEFURV9GSUxFX1NVRkZJWCA9ICcudGVtcGxhdGUnO1xuXG5jb25zdCBOT0RFX01PRFVMRVNfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzLyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNob3VsZEtlZXBQcm9qZWN0RmlsZX0uXG4gKi9cbmludGVyZmFjZSBTaG91bGRLZWVwUHJvamVjdEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB1bmRlciBjb25zaWRlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQWJzb2x1dGUgKGNhbm9uaWNhbCkgcGF0aCBvZiB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdENhbm9uaWNhbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlLXJ1bnMgdGhlIHByb2plY3QgdHlwZS1jaGVjayBpbi1tZW1vcnkgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIHJlcG9ydGluZyBvbmx5IGRpYWdub3N0aWNzXG4gKiB3aG9zZSBzb3VyY2UgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0ICh1bmRlciB0aGUgcm9vdCBmb2xkZXIsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2ApLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBwcm9qZWN0J3Mgb3duIGZpbGVzIGhhdmUgbm8gdHlwZSBlcnJvcnMsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHRocm93cyBJZiB0aGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBhcmVQcm9qZWN0VHlwZXNWYWxpZCgpOiBib29sZWFuIHtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3RGb2xkZXIoKTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHJvb3QgZm9sZGVyJyk7XG4gIH1cblxuICBjb25zdCByb290Q2Fub25pY2FsID0gdG9DYW5vbmljYWwocm9vdCk7XG4gIGNvbnN0IHsgZmlsZU5hbWVzLCBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Uc0NvbmZpZ0pzb24pKTtcblxuICByZXR1cm4gY2hlY2tQcm9qZWN0VHlwZXMoe1xuICAgIG9wdGlvbnMsXG4gICAgcm9vdE5hbWVzOiBmaWxlTmFtZXMsXG4gICAgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZSkgPT4gc2hvdWxkS2VlcFByb2plY3RGaWxlKHsgZmlsZU5hbWUsIHJvb3RDYW5vbmljYWwgfSlcbiAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0ICh1bmRlciB0aGUgcm9vdCBmb2xkZXIsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2ApLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGZpbGUgYmVsb25ncyB0byB0aGUgcHJvamVjdC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkS2VlcFByb2plY3RGaWxlKHBhcmFtczogU2hvdWxkS2VlcFByb2plY3RGaWxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZmlsZU5hbWUsIHJvb3RDYW5vbmljYWwgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGZpbGVOYW1lLnN0YXJ0c1dpdGgoYCR7cm9vdENhbm9uaWNhbH0vYCkgJiYgIWZpbGVOYW1lLmluY2x1ZGVzKE5PREVfTU9EVUxFU19TRUdNRU5UKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxzQkFJTztBQUVQLG1CQUF3QjtBQUN4QixtQkFBK0I7QUFDL0Isa0JBQXFCO0FBQ3JCLG9CQUEwQjtBQUMxQixpQ0FJTztBQUNQLGdCQUE2QjtBQUM3QixrQkFBeUI7QUFDekIscUJBR087QUFDUCwyQ0FBMEM7QUFDMUMsa0JBSU87QUFTUCxlQUFzQixhQUE0QjtBQUNoRCxZQUFNLG9CQUFHLCtEQUEwQixNQUFNLEVBQUUsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQzNFO0FBT0EsZUFBc0IsZUFBOEI7QUFDbEQsTUFBSSxVQUFNLCtCQUFlLHNCQUFzQixNQUFNLG9DQUFxQixTQUFTO0FBQ2pGLFVBQU0sbUJBQW1CO0FBQUEsRUFDM0I7QUFDQSxNQUFJLFVBQU0sK0JBQWUs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
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9idWlsZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgYnVpbGQgcHJvY2VzcyBmb3Igc3RhdGljIGFzc2V0cyBhbmQgY2xlYW5pbmdcbiAqIHRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLiBJdCBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gY29weSBzdGF0aWMgZmlsZXMgdG8gdGhlIGRpc3RyaWJ1dGlvbiBmb2xkZXJcbiAqIGFuZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIGJ1aWxkIG91dHB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhY2thZ2VKc29uLFxuICBUc0NvbmZpZ0pzb25cbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIHJtXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyB0cmltU3RhcnQgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQcm9qZWN0VHlwZXMsXG4gIHBhcnNlVHNDb25maWcsXG4gIHRvQ2Fub25pY2FsXG59IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tICcuL2ZzLnRzJztcbmltcG9ydCB7IHJlYWRKc29uIH0gZnJvbSAnLi9qc29uLnRzJztcbmltcG9ydCB7XG4gIG5wbVJ1bk9wdGlvbmFsLFxuICBOcG1SdW5PcHRpb25hbFJlc3VsdFxufSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGRpc3RyaWJ1dGlvbiBmb2xkZXIgYW5kIGl0cyBjb250ZW50cy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgdGhlIGVudGlyZSBkaXN0cmlidXRpb24gZm9sZGVyIHRvIGVuc3VyZSBhIGNsZWFuIGJ1aWxkIGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZm9sZGVyIGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsZWFuKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBybShPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgY29kZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6c3ZlbHRlJykgPT09IE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlNraXBwZWQpIHtcbiAgICBhd2FpdCBidWlsZENvbXBpbGVTdmVsdGUoKTtcbiAgfVxuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6dHlwZXNjcmlwdCcpID09PSBOcG1SdW5PcHRpb25hbFJlc3VsdC5Ta2lwcGVkKSB7XG4gICAgYXdhaXQgYnVpbGRDb21waWxlVHlwZVNjcmlwdCgpO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZXMgdGhlIFN2ZWx0ZSBjb2RlLlxuICpcbiAqIFRoZSBwcm9qZWN0J3MgU3ZlbHRlIGZpbGVzIGFyZSBmb3VuZCBieSBnbG9iYmluZyB0aGUgU3ZlbHRlIGV4dGVuc2lvbnMgZGlyZWN0bHkuIEdsb2JiaW5nIHRoZSB0c2NvbmZpZ1xuICogYGluY2x1ZGVgIHBhdHRlcm5zIGFuZCBmaWx0ZXJpbmcgdGhhdCBsaXN0IHdvdWxkIG5ldmVyIG1hdGNoOiBgaW5jbHVkZWAgbGlzdHMgVHlwZVNjcmlwdCBnbG9ic1xuICogKGAuL3NyYy8qKlxcLyoudHNgLCBcdTIwMjYpLCBzbyBubyBgLnN2ZWx0ZWAgcGF0aCBjYW4gZXZlciBhcHBlYXIgaW4gaXQgYW5kIHRoZSBjaGVjayB3b3VsZCBhbHdheXMgYmUgc2tpcHBlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICogQHRocm93cyBJZiB0aGUgcHJvamVjdCBoYXMgU3ZlbHRlIGZpbGVzIGJ1dCBkb2VzIG5vdCBkZWNsYXJlIGBzdmVsdGUtY2hlY2tgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlU3ZlbHRlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0c0NvbmZpZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuVHNDb25maWdKc29uIH0pO1xuICBjb25zdCB0c0NvbmZpZyA9IGF3YWl0IHJlYWRKc29uPFRzQ29uZmlnSnNvbj4odHNDb25maWdQYXRoKTtcbiAgY29uc3Qgc3ZlbHRlRmlsZXMgPSBhd2FpdCB0b0FycmF5KGdsb2IoU1ZFTFRFX0ZJTEVfUEFUVEVSTlMsIHtcbiAgICBjd2Q6IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyIH0pLFxuICAgIGV4Y2x1ZGU6IFsuLi5TVkVMVEVfRklMRV9FWENMVURFX1BBVFRFUk5TLCAuLi50c0NvbmZpZy5leGNsdWRlID8/IFtdXVxuICB9KSk7XG5cbiAgY29uc3QgW2ZpcnN0U3ZlbHRlRmlsZV0gPSBzdmVsdGVGaWxlcztcblxuICBpZiAoZmlyc3RTdmVsdGVGaWxlID09PSB1bmRlZmluZWQpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignYnVpbGQ6YnVpbGRDb21waWxlU3ZlbHRlJykoJ05vIFN2ZWx0ZSBmaWxlcyBmb3VuZCBpbiB0aGUgcHJvamVjdCwgc2tpcHBpbmcgU3ZlbHRlIGNvbXBpbGF0aW9uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24oKTtcblxuICBpZiAoIWNoZWNrU3ZlbHRlQ2hlY2tEZWNsYXJlZChwYWNrYWdlSnNvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRm91bmQgU3ZlbHRlIGZpbGUocykgaW4gdGhlIHByb2plY3QgKGUuZy4gJHtmaXJzdFN2ZWx0ZUZpbGV9KSwgYnV0IFxcYCR7U1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRX1cXGAgaXMgbm90IGRlY2xhcmVkIGluIHBhY2thZ2UuanNvbi5gXG4gICAgICAgICsgYCBBZGQgXFxgJHtTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FfVxcYCBhcyBhIGRldkRlcGVuZGVuY3kgdG8gdHlwZS1jaGVjayB0aGUgU3ZlbHRlIGNvZGUuYFxuICAgICk7XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6IFNWRUxURV9DSEVDS19QQUNLQUdFX05BTUUgfSksICctLXRzY29uZmlnJywgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Uc0NvbmZpZ0pzb25dKTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgVHlwZVNjcmlwdCBjb2RlLlxuICpcbiAqIFRoZSBnZW5lcmFsIGB0c2NgIHBhc3MgcnVucyB3aXRoIGBza2lwTGliQ2hlY2s6IHRydWVgIChjb25maWd1cmVkIGluIGB0c2NvbmZpZy5qc29uYCkgc28gaXQgZG9lc1xuICogbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wuIEFmdGVyd2FyZHMsIHtAbGluayBhcmVQcm9qZWN0VHlwZXNWYWxpZH1cbiAqIHJlLXJ1bnMgdGhlIHR5cGUtY2hlY2sgaW4tbWVtb3J5IHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgLCByZXBvcnRpbmcgb25seSBkaWFnbm9zdGljcyBmcm9tIHRoZVxuICogZmlsZXMgd2Ugb3duLCBzbyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvciBhcmUgc3RpbGwgZnVsbHkgdmFsaWRhdGVkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29kZSBjb21waWxlcyBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIElmIHRoZSBwcm9qZWN0J3Mgb3duIGRlY2xhcmF0aW9ucyBmYWlsIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENvbXBpbGVUeXBlU2NyaXB0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICd0c2MnIH0pLCAnLS1idWlsZCcsICctLWZvcmNlJ10pO1xuXG4gIGlmICghYXJlUHJvamVjdFR5cGVzVmFsaWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvcGllcyBhbGwgdGVtcGxhdGUgZmlsZXMgZnJvbSB0aGUgdGVtcGxhdGVzIGZvbGRlciB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGVcbiAqIGRpc3RyaWJ1dGlvbiBmb2xkZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSByZWFkcyB0aGUgY29udGVudHMgb2YgdGhlIHRlbXBsYXRlcyBmb2xkZXIgYW5kIGNvcGllcyBlYWNoIGZpbGUgdG8gdGhlXG4gKiBjb3JyZXNwb25kaW5nIHBhdGggdW5kZXIge0BsaW5rIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdFRlbXBsYXRlc30sIHNvIGNvbnN1bWVycyBjYW4gY29weSB0aGVcbiAqIHRlbXBsYXRlcyBmcm9tIGBub2RlX21vZHVsZXMvb2JzaWRpYW4tZGV2LXV0aWxzL2Rpc3QvdGVtcGxhdGVzYC4gQSB0cmFpbGluZyBgLnRlbXBsYXRlYCBvbiBhIHNvdXJjZVxuICogZmlsZSBuYW1lIGlzIHN0cmlwcGVkIGluIHRoZSBkZXN0aW5hdGlvbiAoZS5nLiBgZXNsaW50LmNvbmZpZy5tdHMudGVtcGxhdGVgIGlzIGNvcGllZCBhc1xuICogYGVzbGludC5jb25maWcubXRzYCksIHNvIGFuIGFjdGl2ZSBjb25maWcgdGVtcGxhdGUgY2FuIGxpdmUgaW4gdGhlIHJlcG8gdW5kZXIgYSBuYW1lIHRoYXQgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHRvb2wgZG9lcyBub3QgYXV0by1kaXNjb3Zlci5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGZpbGVzIGhhdmUgYmVlbiBjb3BpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFRlbXBsYXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChjb25zdCBkaXJlbnQgb2YgYXdhaXQgcmVhZGRpclBvc2l4KE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuVGVtcGxhdGVzLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGlmICghZGlyZW50LmlzRmlsZSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gdHJpbVN0YXJ0KHtcbiAgICAgICRzdHJpbmc6IGpvaW4oZGlyZW50LnBhcmVudFBhdGgsIGRpcmVudC5uYW1lKSxcbiAgICAgIHByZWZpeDogYCR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5UZW1wbGF0ZXN9L2BcbiAgICB9KTtcbiAgICBjb25zdCBkZXN0aW5hdGlvblBhdGggPSBwYXRoLmVuZHNXaXRoKFRFTVBMQVRFX0ZJTEVfU1VGRklYKSA/IHBhdGguc2xpY2UoMCwgLVRFTVBMQVRFX0ZJTEVfU1VGRklYLmxlbmd0aCkgOiBwYXRoO1xuICAgIGF3YWl0IGNwKGpvaW4oT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5UZW1wbGF0ZXMsIHBhdGgpLCBqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdFRlbXBsYXRlcywgZGVzdGluYXRpb25QYXRoKSk7XG4gIH1cbn1cblxuY29uc3QgVEVNUExBVEVfRklMRV9TVUZGSVggPSAnLnRlbXBsYXRlJztcblxuY29uc3QgTk9ERV9NT0RVTEVTX1NFR01FTlQgPSAnL25vZGVfbW9kdWxlcy8nO1xuXG5jb25zdCBTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FID0gJ3N2ZWx0ZS1jaGVjayc7XG5cbmNvbnN0IFNWRUxURV9GSUxFX1BBVFRFUk5TID0gW1xuICBgJHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkFueVBhdGh9Lyouc3ZlbHRlYCxcbiAgYCR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5BbnlQYXRofS8qLnN2ZWx0ZS5qc2AsXG4gIGAke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQW55UGF0aH0vKi5zdmVsdGUudHNgXG5dO1xuXG4vKipcbiAqIGBub2RlX21vZHVsZXNgIG11c3QgYmUgbGlzdGVkIGV4cGxpY2l0bHk6IGEgdHNjb25maWcgdGhhdCBzZXRzIGBleGNsdWRlYCBhdCBhbGwgKipyZXBsYWNlcyoqIFR5cGVTY3JpcHQnc1xuICogZGVmYXVsdCBgbm9kZV9tb2R1bGVzYCBleGNsdXNpb24sIHNvIGl0IGNhbm5vdCBiZSByZWxpZWQgb24gdG8ga2VlcCBkZXBlbmRlbmNpZXMgb3V0IG9mIHRoZSBnbG9iLlxuICovXG5jb25zdCBTVkVMVEVfRklMRV9FWENMVURFX1BBVFRFUk5TID0gW1xuICBgJHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkFueVBhdGh9LyR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Ob2RlTW9kdWxlc30vJHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkFueVBhdGh9YCxcbiAgYCR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5BbnlQYXRofS8ke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdH0vJHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkFueVBhdGh9YFxuXTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2hvdWxkS2VlcFByb2plY3RGaWxlfS5cbiAqL1xuaW50ZXJmYWNlIFNob3VsZEtlZXBQcm9qZWN0RmlsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHVuZGVyIGNvbnNpZGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSByb290Q2Fub25pY2FsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmUtcnVucyB0aGUgcHJvamVjdCB0eXBlLWNoZWNrIGluLW1lbW9yeSB3aXRoIGBza2lwTGliQ2hlY2s6IGZhbHNlYCwgcmVwb3J0aW5nIG9ubHkgZGlhZ25vc3RpY3NcbiAqIHdob3NlIHNvdXJjZSBmaWxlIGJlbG9uZ3MgdG8gdGhlIHByb2plY3QgKHVuZGVyIHRoZSByb290IGZvbGRlciwgb3V0c2lkZSBgbm9kZV9tb2R1bGVzYCkuXG4gKlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHByb2plY3QncyBvd24gZmlsZXMgaGF2ZSBubyB0eXBlIGVycm9ycywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGZvbGRlciBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGFyZVByb2plY3RUeXBlc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICBjb25zdCByb290ID0gZ2V0Um9vdEZvbGRlcigpO1xuXG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcm9vdCBmb2xkZXInKTtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDYW5vbmljYWwgPSB0b0Nhbm9uaWNhbChyb290KTtcbiAgY29uc3QgeyBmaWxlTmFtZXMsIG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoam9pbihyb290LCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlRzQ29uZmlnSnNvbikpO1xuXG4gIHJldHVybiBjaGVja1Byb2plY3RUeXBlcyh7XG4gICAgb3B0aW9ucyxcbiAgICByb290TmFtZXM6IGZpbGVOYW1lcyxcbiAgICBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lKSA9PiBzaG91bGRLZWVwUHJvamVjdEZpbGUoeyBmaWxlTmFtZSwgcm9vdENhbm9uaWNhbCB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHByb2plY3QgZGVjbGFyZXMgYHN2ZWx0ZS1jaGVja2AuXG4gKlxuICogVGhlIGRlY2xhcmF0aW9uIGlzIHJlYWQgZnJvbSBgcGFja2FnZS5qc29uYCByYXRoZXIgdGhhbiBwcm9iZWQgaW4gYG5vZGVfbW9kdWxlcy8uYmluYCwgYmVjYXVzZVxuICoge0BsaW5rIHJlc29sdmVUb29sQ29tbWFuZH0gZGVsaWJlcmF0ZWx5IGZhbGxzIGJhY2sgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcidzIGV4ZWMgZm9ybSBmb3IgdG9vbHMgdGhhdCBoYXZlXG4gKiBubyBiaW4gc2hpbSBcdTIwMTQgdGhlIG9ubHkgd2F5IGEgbG9jYWxseSBpbnN0YWxsZWQgdG9vbCByZXNvbHZlcyB1bmRlciB5YXJuIFBuUC4gVHJlYXRpbmcgYSBtaXNzaW5nIHNoaW0gYXMgYVxuICogbWlzc2luZyB0b29sIHdvdWxkIHRoZXJlZm9yZSBicmVhayBQblAgcHJvamVjdHMuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIHByb2plY3QncyBwYXJzZWQgYHBhY2thZ2UuanNvbmAuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBgc3ZlbHRlLWNoZWNrYCBpcyBkZWNsYXJlZCBhcyBhIHJlZ3VsYXIsIGRldiwgb3IgcGVlciBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiBjaGVja1N2ZWx0ZUNoZWNrRGVjbGFyZWQocGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogYm9vbGVhbiB7XG4gIHJldHVybiBbcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzLCBwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXMsIHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNdXG4gICAgLnNvbWUoKGRlcGVuZGVuY2llcykgPT4gZGVwZW5kZW5jaWVzPy5bU1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRV0gIT09IHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0ICh1bmRlciB0aGUgcm9vdCBmb2xkZXIsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2ApLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGZpbGUgYmVsb25ncyB0byB0aGUgcHJvamVjdC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkS2VlcFByb2plY3RGaWxlKHBhcmFtczogU2hvdWxkS2VlcFByb2plY3RGaWxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZmlsZU5hbWUsIHJvb3RDYW5vbmljYWwgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGZpbGVOYW1lLnN0YXJ0c1dpdGgoYCR7cm9vdENhbm9uaWNhbH0vYCkgJiYgIWZpbGVOYW1lLmluY2x1ZGVzKE5PREVfTU9EVUxFU19TRUdNRU5UKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQSxzQkFJTztBQUVQLG1CQUF3QjtBQUN4QixtQkFBK0I7QUFDL0Isa0JBQXFCO0FBQ3JCLG9CQUEwQjtBQUMxQixpQ0FJTztBQUNQLGdCQUE2QjtBQUM3QixrQkFBeUI7QUFDekIscUJBR087QUFDUCxpQkFBZ0M7QUFDaEMsMkNBQTBDO0FBQzFDLDZCQUFtQztBQUNuQyxrQkFJTztBQVNQLGVBQXNCLGFBQTRCO0FBQ2hELFlBQU0sb0JBQUcsK0RBQTBCLE1BQU0sRUFBRSxPQUFPLE1BQU0sV0FBVyxLQUFLLENBQUM7QUFDM0U7QUFPQSxlQUFzQixlQUE4QjtBQUNsRCxNQUFJLFVBQU0sK0JBQWUsc0JBQXNCLE1BQU0sb0NBQXFCLFNBQVM7QUFDakYsVUFBTSxtQkFBbUI7QUFBQSxFQUMzQjtBQUNBLE1BQUksVUFBTSwrQkFBZSwwQkFBMEIsTUFBTSxvQ0FBcUIsU0FBUztBQUNyRixV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
|
|
@@ -23,7 +23,12 @@ export declare function buildCompile(): Promise<void>;
|
|
|
23
23
|
/**
|
|
24
24
|
* Compiles the Svelte code.
|
|
25
25
|
*
|
|
26
|
+
* The project's Svelte files are found by globbing the Svelte extensions directly. Globbing the tsconfig
|
|
27
|
+
* `include` patterns and filtering that list would never match: `include` lists TypeScript globs
|
|
28
|
+
* (`./src/**\/*.ts`, …), so no `.svelte` path can ever appear in it and the check would always be skipped.
|
|
29
|
+
*
|
|
26
30
|
* @returns A {@link Promise} that resolves when the code compiles successfully.
|
|
31
|
+
* @throws If the project has Svelte files but does not declare `svelte-check`.
|
|
27
32
|
*/
|
|
28
33
|
export declare function buildCompileSvelte(): Promise<void>;
|
|
29
34
|
/**
|