obsidian-dev-utils 101.7.0 → 102.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 +8 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +1 -1
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +4 -3
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-app-json.cjs +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-app-json.d.cts +1 -1
- package/dist/lib/cjs/script-utils/demo-vault-buttons.cjs +3 -3
- package/dist/lib/cjs/script-utils/demo-vault-buttons.d.cts +8 -2
- package/dist/lib/cjs/script-utils/demo-vault.cjs +50 -29
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +9 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +408 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +3 -1
- package/dist/lib/esm/desktop-zip-extractor.d.mts +4 -3
- package/dist/lib/esm/desktop-zip-extractor.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.d.mts +1 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-buttons.d.mts +8 -2
- package/dist/lib/esm/script-utils/demo-vault-buttons.mjs +3 -3
- package/dist/lib/esm/script-utils/demo-vault.mjs +52 -20
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +9 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +302 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
- package/package.json +3 -4
- package/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
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 __defProp = Object.defineProperty;
|
|
127
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
128
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
129
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
130
|
+
var __export = (target, all) => {
|
|
131
|
+
for (var name in all)
|
|
132
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
133
|
+
};
|
|
134
|
+
var __copyProps = (to, from, except, desc) => {
|
|
135
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
136
|
+
for (let key of __getOwnPropNames(from))
|
|
137
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
138
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
139
|
+
}
|
|
140
|
+
return to;
|
|
141
|
+
};
|
|
142
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
143
|
+
var no_over_cap_wait_in_eval_in_obsidian_exports = {};
|
|
144
|
+
__export(no_over_cap_wait_in_eval_in_obsidian_exports, {
|
|
145
|
+
MESSAGE_ID: () => MESSAGE_ID,
|
|
146
|
+
noOverCapWaitInEvalInObsidian: () => noOverCapWaitInEvalInObsidian
|
|
147
|
+
});
|
|
148
|
+
module.exports = __toCommonJS(no_over_cap_wait_in_eval_in_obsidian_exports);
|
|
149
|
+
const MESSAGE_ID = "noOverCapWaitInEvalInObsidian";
|
|
150
|
+
const DEFAULT_CAP_IN_MILLISECONDS = 3e4;
|
|
151
|
+
const WAIT_UNTIL_DEFAULT_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
152
|
+
const INPUT_PROPERTY_NAME = "input";
|
|
153
|
+
const SLEEP_CALLEE_NAME = "sleep";
|
|
154
|
+
const TIMEOUT_PROPERTY_NAME = "timeoutInMilliseconds";
|
|
155
|
+
const WAIT_UNTIL_CALLEE_NAME = "waitUntil";
|
|
156
|
+
const CLOSURE_NAMES_BY_CALLEE_NAME = /* @__PURE__ */ new Map([
|
|
157
|
+
["evalInObsidian", ["callback"]],
|
|
158
|
+
["pollInObsidian", ["poll", "start"]]
|
|
159
|
+
]);
|
|
160
|
+
const noOverCapWaitInEvalInObsidian = {
|
|
161
|
+
create(context) {
|
|
162
|
+
const options = context.options[0];
|
|
163
|
+
const capInMilliseconds = options?.capInMilliseconds ?? DEFAULT_CAP_IN_MILLISECONDS;
|
|
164
|
+
const budgetByClosureNode = /* @__PURE__ */ new Map();
|
|
165
|
+
return {
|
|
166
|
+
"CallExpression"(node) {
|
|
167
|
+
const callNode = node;
|
|
168
|
+
const budgetExpression = readWaitBudgetExpression(callNode);
|
|
169
|
+
if (budgetExpression === void 0) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const closure = findEnclosingEvalClosure(callNode);
|
|
173
|
+
if (!closure) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const waitInMilliseconds = budgetExpression === null ? WAIT_UNTIL_DEFAULT_TIMEOUT_IN_MILLISECONDS : resolveMilliseconds(budgetExpression, closure, context);
|
|
177
|
+
if (waitInMilliseconds === null) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const runningTotalInMilliseconds = budgetByClosureNode.get(closure.closureNode)?.totalInMilliseconds ?? 0;
|
|
181
|
+
budgetByClosureNode.set(closure.closureNode, {
|
|
182
|
+
reportNode: closure.reportNode,
|
|
183
|
+
totalInMilliseconds: runningTotalInMilliseconds + waitInMilliseconds
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
"Program:exit"() {
|
|
187
|
+
for (const budget of budgetByClosureNode.values()) {
|
|
188
|
+
if (budget.totalInMilliseconds < capInMilliseconds) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
context.report({
|
|
192
|
+
data: {
|
|
193
|
+
capInMilliseconds: String(capInMilliseconds),
|
|
194
|
+
totalInMilliseconds: String(budget.totalInMilliseconds)
|
|
195
|
+
},
|
|
196
|
+
messageId: MESSAGE_ID,
|
|
197
|
+
node: budget.reportNode
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
},
|
|
203
|
+
meta: {
|
|
204
|
+
docs: {
|
|
205
|
+
description: "Disallow an in-Obsidian closure declaring more waiting than the transport's script-timeout cap allows"
|
|
206
|
+
},
|
|
207
|
+
messages: {
|
|
208
|
+
[MESSAGE_ID]: "This closure declares {{ totalInMilliseconds }} ms of waiting, at or over the transport's {{ capInMilliseconds }} ms cap, so it can only ever die as a bare `script timeout`: wait in Node instead, with a short DOM-reading `pollInObsidian` `poll`, an `until` evaluated in Node, and the long budget in `timeoutInMilliseconds`."
|
|
209
|
+
},
|
|
210
|
+
schema: [{
|
|
211
|
+
additionalProperties: false,
|
|
212
|
+
properties: {
|
|
213
|
+
capInMilliseconds: {
|
|
214
|
+
minimum: 1,
|
|
215
|
+
type: "integer"
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
type: "object"
|
|
219
|
+
}],
|
|
220
|
+
type: "problem"
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
function findEnclosingEvalClosure(node) {
|
|
224
|
+
let currentNode = node.parent;
|
|
225
|
+
while (currentNode) {
|
|
226
|
+
const closure = readEvalClosure(currentNode);
|
|
227
|
+
if (closure) {
|
|
228
|
+
return closure;
|
|
229
|
+
}
|
|
230
|
+
currentNode = currentNode.parent;
|
|
231
|
+
}
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
function findVariable(scope, name) {
|
|
235
|
+
let currentScope = scope;
|
|
236
|
+
while (currentScope) {
|
|
237
|
+
const variable = currentScope.variables.find((candidate) => candidate.name === name);
|
|
238
|
+
if (variable) {
|
|
239
|
+
return variable;
|
|
240
|
+
}
|
|
241
|
+
currentScope = currentScope.upper;
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
function isBinaryExpression(node) {
|
|
246
|
+
return node.type === "BinaryExpression";
|
|
247
|
+
}
|
|
248
|
+
function isCallExpression(node) {
|
|
249
|
+
return node.type === "CallExpression";
|
|
250
|
+
}
|
|
251
|
+
function isClosureFunction(node) {
|
|
252
|
+
return node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression";
|
|
253
|
+
}
|
|
254
|
+
function isIdentifier(node) {
|
|
255
|
+
return node.type === "Identifier";
|
|
256
|
+
}
|
|
257
|
+
function isNumericLiteral(node) {
|
|
258
|
+
return node.type === "Literal" && typeof node.value === "number";
|
|
259
|
+
}
|
|
260
|
+
function isObjectExpression(node) {
|
|
261
|
+
return node.type === "ObjectExpression";
|
|
262
|
+
}
|
|
263
|
+
function isObjectPattern(node) {
|
|
264
|
+
return node.type === "ObjectPattern";
|
|
265
|
+
}
|
|
266
|
+
function isProperty(node) {
|
|
267
|
+
return node.type === "Property";
|
|
268
|
+
}
|
|
269
|
+
function isVariableDeclarator(node) {
|
|
270
|
+
return node.type === "VariableDeclarator";
|
|
271
|
+
}
|
|
272
|
+
function readBoundExpression(node, closure, context) {
|
|
273
|
+
const variable = findVariable(context.sourceCode.getScope(node), node.name);
|
|
274
|
+
if (!variable) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
for (const definition of variable.defs) {
|
|
278
|
+
const definitionNode = definition.node;
|
|
279
|
+
if (isVariableDeclarator(definitionNode) && definitionNode.init) {
|
|
280
|
+
return definitionNode.init;
|
|
281
|
+
}
|
|
282
|
+
if (definitionNode === closure.closureNode) {
|
|
283
|
+
const inputKey = readParameterInputKey(closure.closureNode, node.name);
|
|
284
|
+
if (inputKey === null) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
return readInputPropertyValue(closure.paramsNode, inputKey);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
function readClosureNames(callNode) {
|
|
293
|
+
if (!isIdentifier(callNode.callee)) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
return CLOSURE_NAMES_BY_CALLEE_NAME.get(callNode.callee.name) ?? null;
|
|
297
|
+
}
|
|
298
|
+
function readEvalClosure(node) {
|
|
299
|
+
if (!isClosureFunction(node)) {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
const propertyNode = node.parent;
|
|
303
|
+
if (!isProperty(propertyNode)) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const paramsNode = propertyNode.parent;
|
|
307
|
+
if (!isObjectExpression(paramsNode)) {
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
if (!isIdentifier(propertyNode.key)) {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
const callNode = paramsNode.parent;
|
|
314
|
+
if (!isCallExpression(callNode) || callNode.arguments[0] !== paramsNode) {
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
const closureNames = readClosureNames(callNode);
|
|
318
|
+
if (!closureNames?.includes(propertyNode.key.name)) {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
closureNode: node,
|
|
323
|
+
paramsNode,
|
|
324
|
+
reportNode: propertyNode
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function readInputPropertyValue(paramsNode, keyName) {
|
|
328
|
+
const inputProperty = paramsNode.properties.find(
|
|
329
|
+
(property) => isProperty(property) && isIdentifier(property.key) && property.key.name === INPUT_PROPERTY_NAME
|
|
330
|
+
);
|
|
331
|
+
const inputNode = inputProperty?.value;
|
|
332
|
+
if (!inputNode || !isObjectExpression(inputNode)) {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
const valueProperty = inputNode.properties.find(
|
|
336
|
+
(property) => isProperty(property) && isIdentifier(property.key) && property.key.name === keyName
|
|
337
|
+
);
|
|
338
|
+
return valueProperty?.value ?? null;
|
|
339
|
+
}
|
|
340
|
+
function readParameterInputKey(closureNode, localName) {
|
|
341
|
+
for (const parameterNode of closureNode.params) {
|
|
342
|
+
if (!isObjectPattern(parameterNode)) {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
for (const property of parameterNode.properties) {
|
|
346
|
+
if (!isProperty(property) || property.computed || !isIdentifier(property.key) || !isIdentifier(property.value)) {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (property.value.name === localName) {
|
|
350
|
+
return property.key.name;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
function readWaitBudgetExpression(callNode) {
|
|
357
|
+
if (!isIdentifier(callNode.callee)) {
|
|
358
|
+
return void 0;
|
|
359
|
+
}
|
|
360
|
+
const calleeName = callNode.callee.name;
|
|
361
|
+
if (calleeName === SLEEP_CALLEE_NAME) {
|
|
362
|
+
return callNode.arguments[0] ?? void 0;
|
|
363
|
+
}
|
|
364
|
+
if (calleeName !== WAIT_UNTIL_CALLEE_NAME) {
|
|
365
|
+
return void 0;
|
|
366
|
+
}
|
|
367
|
+
const paramsNode = callNode.arguments[0];
|
|
368
|
+
if (!paramsNode || !isObjectExpression(paramsNode)) {
|
|
369
|
+
return void 0;
|
|
370
|
+
}
|
|
371
|
+
const timeoutProperty = paramsNode.properties.find(
|
|
372
|
+
(property) => isProperty(property) && isIdentifier(property.key) && property.key.name === TIMEOUT_PROPERTY_NAME
|
|
373
|
+
);
|
|
374
|
+
return timeoutProperty?.value ?? null;
|
|
375
|
+
}
|
|
376
|
+
function resolveMilliseconds(node, closure, context) {
|
|
377
|
+
const visitedNodes = /* @__PURE__ */ new Set();
|
|
378
|
+
let currentNode = node;
|
|
379
|
+
while (!visitedNodes.has(currentNode)) {
|
|
380
|
+
visitedNodes.add(currentNode);
|
|
381
|
+
if (isNumericLiteral(currentNode)) {
|
|
382
|
+
return currentNode.value;
|
|
383
|
+
}
|
|
384
|
+
if (isBinaryExpression(currentNode) && currentNode.operator === "*") {
|
|
385
|
+
const leftInMilliseconds = resolveMilliseconds(currentNode.left, closure, context);
|
|
386
|
+
const rightInMilliseconds = resolveMilliseconds(currentNode.right, closure, context);
|
|
387
|
+
if (leftInMilliseconds === null || rightInMilliseconds === null) {
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
return leftInMilliseconds * rightInMilliseconds;
|
|
391
|
+
}
|
|
392
|
+
if (!isIdentifier(currentNode)) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
const boundNode = readBoundExpression(currentNode, closure, context);
|
|
396
|
+
if (!boundNode) {
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
currentNode = boundNode;
|
|
400
|
+
}
|
|
401
|
+
return null;
|
|
402
|
+
}
|
|
403
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
404
|
+
0 && (module.exports = {
|
|
405
|
+
MESSAGE_ID,
|
|
406
|
+
noOverCapWaitInEvalInObsidian
|
|
407
|
+
});
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tb3Zlci1jYXAtd2FpdC1pbi1ldmFsLWluLW9ic2lkaWFuXG4gKlxuICogUmVwb3J0cyBhbiBgZXZhbEluT2JzaWRpYW5gIC8gYHBvbGxJbk9ic2lkaWFuYCBjbG9zdXJlIHRoYXQgZGVjbGFyZXMgbW9yZSB3YWl0aW5nXG4gKiB0aGFuIHRoZSB0cmFuc3BvcnQgY2FuIGV2ZXIgaG9ub3VyLlxuICpcbiAqIEEgc2luZ2xlIGNsb3N1cmUgaXMgZXZhbHVhdGVkIHRocm91Z2ggb25lIHRyYW5zcG9ydCBjYWxsLCBhbmQgdGhhdCBjYWxsIGlzIGNhcHBlZCBhdFxuICogcm91Z2hseSAzMCBzZWNvbmRzIFx1MjAxNCBBcHBpdW0gc3VyZmFjZXMgdGhlIGNhcCBhcyBhIGJhcmUgYFdlYkRyaXZlckVycm9yOiBzY3JpcHQgdGltZW91dGBcbiAqIG5hbWluZyBvbmx5IGBBcHBpdW1UcmFuc3BvcnQuZXZhbHVhdGVgLCBDRFAgYXMgYSBjb21tYW5kIHRpbWVvdXQuIE5laXRoZXIgbmFtZXMgdGhlIHdhaXRcbiAqIHRoYXQgYWN0dWFsbHkgYmxldyB0aGUgYnVkZ2V0LCBzbyB0aGUgZmFpbHVyZSByZWFkcyBhcyBhIGJyb2tlbiBkZXZpY2UgcmF0aGVyIHRoYW4gYXMgYVxuICogY2xvc3VyZSBhc2tpbmcgZm9yIG1vcmUgdGltZSB0aGFuIGV4aXN0cy4gVGhhdCBtaXNkaWFnbm9zaXMgY29zdCBgVDc5NmAgdHdvIGRheXMuXG4gKlxuICogQSBjbG9zdXJlIGRlY2xhcmluZyBhIDMwIDAwMCBtcyBgd2FpdFVudGlsYCwgb3IgdHdvIDIwIDAwMCBtcyBvbmVzLCB0aGVyZWZvcmUgY2Fubm90XG4gKiBzdWNjZWVkIG9uIGFueSBtYWNoaW5lIHNsb3cgZW5vdWdoIHRvIG5lZWQgdGhlIHRpbWUgaXQgYXNrcyBmb3IuIFRoZSBmaXggaXMgdG8gbW92ZSB0aGVcbiAqIHdhaXRpbmcgdG8gTm9kZTogYHBvbGxJbk9ic2lkaWFuYCBydW5zIGEgU0hPUlQgRE9NLXJlYWRpbmcgYHBvbGxgIGNsb3N1cmUgcmVwZWF0ZWRseSxcbiAqIGV2YWx1YXRlcyBgdW50aWxgIGluIE5vZGUsIGFuZCBjYXJyaWVzIHRoZSBsb25nIGJ1ZGdldCBpbiBgdGltZW91dEluTWlsbGlzZWNvbmRzYCwgc28gbm9cbiAqIHNpbmdsZSB0cmFuc3BvcnQgY2FsbCBpcyBldmVyIGxvbmcuXG4gKlxuICogV0hBVCBDT1VOVFMgdG93YXJkIGEgY2xvc3VyZSdzIGJ1ZGdldCwgc3VtbWVkIGxleGljYWxseTogZXZlcnkgYHdhaXRVbnRpbGAgaW5zaWRlIGl0IFx1MjAxNFxuICogdGFraW5nIHRoZSBoZWxwZXIncyBkb2N1bWVudGVkIDUgMDAwIG1zIGRlZmF1bHQgd2hlbiBgdGltZW91dEluTWlsbGlzZWNvbmRzYCBpcyBvbWl0dGVkLFxuICogd2hpY2ggaXMgd2hhdCBtYWtlcyBzZXZlcmFsIHNtYWxsIHNpYmxpbmcgd2FpdHMgYWRkIHVwIGhvbmVzdGx5IFx1MjAxNCBwbHVzIGV2ZXJ5IGBzbGVlcChuKWBcbiAqIHNldHRsZS4gV2FpdHMgaW5zaWRlIGEgaGVscGVyIGRlY2xhcmVkIHdpdGhpbiB0aGUgY2xvc3VyZSBjb3VudCB0b287IHRoZSBlbmNsb3NpbmdcbiAqIGNsb3N1cmUgaXMgZm91bmQgYnkgd2Fsa2luZyBvdXR3YXJkcywgc28gYSBuZXN0ZWQgZnVuY3Rpb24gYXR0cmlidXRlcyB0byB0aGUgY2xvc3VyZSBpdFxuICogcnVucyBpbnNpZGUuXG4gKlxuICogV0hBVCBET0VTIE5PVC4gQSBidWRnZXQgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSBudW1iZXIgY29udHJpYnV0ZXMgbm90aGluZyBhbmQgaXNcbiAqIG5ldmVyIHJlcG9ydGVkIChvd25lciwgMjAyNi0wOS0wOSkuIFNjb3BlIGFuYWx5c2lzIHJlc29sdmVzIHRoZSBzaGFwZXMgdGhhdCBhY3R1YWxseVxuICogb2NjdXIgXHUyMDE0IGEgbGl0ZXJhbCwgYSBgY29uc3RgIGluIGFueSBlbmNsb3Npbmcgc2NvcGUsIGFuZCBhIGRlc3RydWN0dXJlZCBjYWxsYmFja1xuICogcGFyYW1ldGVyIGZvbGxvd2VkIGJhY2sgdGhyb3VnaCB0aGUgY2FsbCdzIG93biBgaW5wdXRgIG9iamVjdCBcdTIwMTQgYW5kIHJlc29sdmluZyB0aHJvdWdoXG4gKiBzY29wZSByYXRoZXIgdGhhbiBieSByZWdleCBpcyB0aGUgd2hvbGUgcmVhc29uIHRoaXMgaXMgYSBydWxlIGFuZCBub3QgYSBzY3JpcHQuIEJ1dCBhXG4gKiB2YWx1ZSBhcnJpdmluZyBmcm9tIGEgY2FsbGVyIChgb3B0aW9ucy50aW1lb3V0ID8/IERFRkFVTFRgLCB0aHJlYWRlZCB0aHJvdWdoIGFcbiAqIHBhcmFtZXRlcikgd291bGQgbmVlZCBhbmFseXNpcyBhY3Jvc3MgY2FsbCBib3VuZGFyaWVzLCBhbmQgcmVwb3J0aW5nIGV2ZXJ5IHN1Y2ggc2l0ZSB3b3VsZFxuICogbWFrZSBlYWNoIGxlZ2l0aW1hdGVseSBwYXJhbWV0ZXJpemVkIGhlbHBlciByZWQgYWNyb3NzIHRoaXJ0eSByZXBvcy4gQSBMT09QIGlzIG91dCBvZiBzY29wZVxuICogZm9yIHRoZSBzYW1lIHJlYXNvbjogYSBgc2xlZXBgIGluIGEgYHdoaWxlYCBoYXMgbm8gc3RhdGljYWxseSBkZWNsYXJlZCBjZWlsaW5nLCBzbyB0aGVcbiAqIHN1bSBiZWxvdyBpcyBwZXItaXRlcmF0aW9uIGFuZCBzYXlzIG5vdGhpbmcgYWJvdXQgdGhlIHdob2xlLlxuICpcbiAqIE5vdCBldmVyeSBvdmVyLWNhcCBjbG9zdXJlIGNhbiBiZWNvbWUgYSBgcG9sbGAgLyBgdW50aWxgIHBhaXIsIHNvIHRoZSBydWxlIGlzIG1lYW50IHRvIGJlXG4gKiBkaXNhYmxlZCBcdTIwMTQgd2l0aCBhIHJlYXNvbiBcdTIwMTQgYXQgdGhlIHNpdGVzIHRoYXQgaGF2ZSBvbmUuIGByZXF1aXJlLWRlc2NyaXB0aW9uYCBtYWtlcyB0aGF0XG4gKiByZWFzb24gbWFuZGF0b3J5LCB3aGljaCBpcyB0aGUgcG9pbnQ6IGl0IHR1cm5zIGFuIGludmlzaWJsZSBhc3N1bXB0aW9uIGludG8gYSB3cml0dGVuIG9uZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGluLU9ic2lkaWFuIGNsb3N1cmUgZGVjbGFyZXMgbW9yZSB3YWl0aW5nIHRoYW4gdGhlIHRyYW5zcG9ydCdzIGNhcCBhbGxvd3MuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuJztcblxuLyoqXG4gKiBUaGUgY2FwIGFzc3VtZWQgd2hlbiB0aGUgcnVsZSBpcyBjb25maWd1cmVkIHdpdGhvdXQgb25lLCBtYXRjaGluZyB0aGUgdHJhbnNwb3J0J3Mgb3duIHNjcmlwdCB0aW1lb3V0LlxuICovXG5jb25zdCBERUZBVUxUX0NBUF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5cbi8qKlxuICogVGhlIGJ1ZGdldCBhIGB3YWl0VW50aWxgIHRha2VzIHdoZW4gaXQgb21pdHMgYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2AsIHBlciBgV2FpdFVudGlsUGFyYW1zYC5cbiAqL1xuY29uc3QgV0FJVF9VTlRJTF9ERUZBVUxUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcblxuY29uc3QgSU5QVVRfUFJPUEVSVFlfTkFNRSA9ICdpbnB1dCc7XG5jb25zdCBTTEVFUF9DQUxMRUVfTkFNRSA9ICdzbGVlcCc7XG5jb25zdCBUSU1FT1VUX1BST1BFUlRZX05BTUUgPSAndGltZW91dEluTWlsbGlzZWNvbmRzJztcbmNvbnN0IFdBSVRfVU5USUxfQ0FMTEVFX05BTUUgPSAnd2FpdFVudGlsJztcblxuLyoqXG4gKiBXaGljaCBwcm9wZXJ0aWVzIG9mIGVhY2ggaGVscGVyJ3MgcGFyYW1ldGVyIG9iamVjdCBob2xkIGEgY2xvc3VyZSB0aGF0IHJ1bnMgSU5TSURFIE9ic2lkaWFuLCBhbmQgaXNcbiAqIHRoZXJlZm9yZSBzdWJqZWN0IHRvIHRoZSBjYXAuIGBwb2xsSW5PYnNpZGlhbmAncyBgdW50aWxgIGlzIGRlbGliZXJhdGVseSBhYnNlbnQ6IGl0IGlzIGV2YWx1YXRlZCBpblxuICogTm9kZSwgd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBjb252ZXJ0aW5nIHRvIGl0LlxuICovXG5jb25zdCBDTE9TVVJFX05BTUVTX0JZX0NBTExFRV9OQU1FID0gbmV3IE1hcDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPihbXG4gIFsnZXZhbEluT2JzaWRpYW4nLCBbJ2NhbGxiYWNrJ11dLFxuICBbJ3BvbGxJbk9ic2lkaWFuJywgWydwb2xsJywgJ3N0YXJ0J11dXG5dKTtcblxuLyoqXG4gKiBUaGUgcnVsZSdzIHNpbmdsZSBvcHRpb24gb2JqZWN0LlxuICovXG5pbnRlcmZhY2UgQ2FwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVkZ2V0IGF0IG9yIG92ZXIgd2hpY2ggYSBjbG9zdXJlIGlzIHJlcG9ydGVkLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBjYXBJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgd2FpdGluZyBzdW1tZWQgc28gZmFyIGZvciBvbmUgY2xvc3VyZS5cbiAqL1xuaW50ZXJmYWNlIENsb3N1cmVCdWRnZXQge1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gcmVwb3J0IG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0Tm9kZTogVFNFU1RyZWUuTm9kZTtcblxuICAvKipcbiAgICogVGhlIHN1bSBvZiBldmVyeSByZXNvbHZhYmxlIHdhaXQgZGVjbGFyZWQgaW5zaWRlIHRoZSBjbG9zdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gd3JpdHRlbiBhcyBhbiBvYmplY3QgcHJvcGVydHksIHdoaWNoIGlzIHRoZSBvbmx5IGZvcm0gZWl0aGVyIGhlbHBlcidzIGNsb3N1cmVzIHRha2UuXG4gKi9cbnR5cGUgQ2xvc3VyZUZ1bmN0aW9uID0gVFNFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfCBUU0VTVHJlZS5GdW5jdGlvbkV4cHJlc3Npb247XG5cbi8qKlxuICogQW4gaW4tT2JzaWRpYW4gY2xvc3VyZSwgdG9nZXRoZXIgd2l0aCB0aGUgY2FsbCBpdCBiZWxvbmdzIHRvIChuZWVkZWQgdG8gcmVzb2x2ZSBhIGJ1ZGdldCB0aHJlYWRlZFxuICogdGhyb3VnaCB0aGF0IGNhbGwncyBgaW5wdXRgKSBhbmQgdGhlIG5vZGUgdG8gcmVwb3J0IG9uLlxuICovXG5pbnRlcmZhY2UgRXZhbENsb3N1cmUge1xuICAvKipcbiAgICogVGhlIGNsb3N1cmUncyBmdW5jdGlvbiBub2RlLCB3aGljaCBpZGVudGlmaWVzIHRoZSBjbG9zdXJlIGFjcm9zcyBzaWJsaW5nIHdhaXRzIGFuZCBjYXJyaWVzIHRoZVxuICAgKiBwYXJhbWV0ZXIgcGF0dGVybiBhIGJ1ZGdldCB0aHJlYWRlZCB0aHJvdWdoIGBpbnB1dGAgaXMgZGVzdHJ1Y3R1cmVkIGJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvc3VyZU5vZGU6IENsb3N1cmVGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIGhlbHBlcidzIHBhcmFtZXRlciBvYmplY3QsIGNhcnJpZWQgc28gYSBidWRnZXQgdGhyZWFkZWQgdGhyb3VnaCBgaW5wdXRgIGlzIHJlYWQgZnJvbSB0aGUgb2JqZWN0XG4gICAqIHRoZSBjbG9zdXJlIHdhcyBhbHJlYWR5IGZvdW5kIGluIHJhdGhlciB0aGFuIHJlLWRlcml2ZWQgZnJvbSB0aGUgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtc05vZGU6IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSB0aGUgY2xvc3VyZSBpcyB3cml0dGVuIGFzLCByZXBvcnRlZCBvbiBzbyB0aGUgbWVzc2FnZSBwb2ludHMgYXQgYGNhbGxiYWNrYCAvIGBwb2xsYFxuICAgKiByYXRoZXIgdGhhbiBhdCB3aGljaGV2ZXIgd2FpdCBoYXBwZW5lZCB0byBjb21lIGZpcnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0Tm9kZTogVFNFU1RyZWUuTm9kZTtcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBhbiBpbi1PYnNpZGlhbiBjbG9zdXJlIHdob3NlIGRlY2xhcmVkIHdhaXRpbmcgZXhjZWVkcyB0aGUgdHJhbnNwb3J0J3Mgc2NyaXB0LXRpbWVvdXQgY2FwLlxuICovXG5leHBvcnQgY29uc3Qgbm9PdmVyQ2FwV2FpdEluRXZhbEluT2JzaWRpYW46IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIGFzIENhcE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2FwSW5NaWxsaXNlY29uZHMgPSBvcHRpb25zPy5jYXBJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0NBUF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgY29uc3QgYnVkZ2V0QnlDbG9zdXJlTm9kZSA9IG5ldyBNYXA8VFNFU1RyZWUuTm9kZSwgQ2xvc3VyZUJ1ZGdldD4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ2FsbEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsTm9kZSA9IG5vZGUgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgY29uc3QgYnVkZ2V0RXhwcmVzc2lvbiA9IHJlYWRXYWl0QnVkZ2V0RXhwcmVzc2lvbihjYWxsTm9kZSk7XG4gICAgICAgIGlmIChidWRnZXRFeHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG9zdXJlID0gZmluZEVuY2xvc2luZ0V2YWxDbG9zdXJlKGNhbGxOb2RlKTtcbiAgICAgICAgaWYgKCFjbG9zdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2FpdEluTWlsbGlzZWNvbmRzID0gYnVkZ2V0RXhwcmVzc2lvbiA9PT0gbnVsbFxuICAgICAgICAgID8gV0FJVF9VTlRJTF9ERUZBVUxUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gICAgICAgICAgOiByZXNvbHZlTWlsbGlzZWNvbmRzKGJ1ZGdldEV4cHJlc3Npb24sIGNsb3N1cmUsIGNvbnRleHQpO1xuICAgICAgICBpZiAod2FpdEluTWlsbGlzZWNvbmRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnVubmluZ1RvdGFsSW5NaWxsaXNlY29uZHMgPSBidWRnZXRCeUNsb3N1cmVOb2RlLmdldChjbG9zdXJlLmNsb3N1cmVOb2RlKT8udG90YWxJbk1pbGxpc2Vjb25kcyA/PyAwO1xuICAgICAgICBidWRnZXRCeUNsb3N1cmVOb2RlLnNldChjbG9zdXJlLmNsb3N1cmVOb2RlLCB7XG4gICAgICAgICAgcmVwb3J0Tm9kZTogY2xvc3VyZS5yZXBvcnROb2RlLFxuICAgICAgICAgIHRvdGFsSW5NaWxsaXNlY29uZHM6IHJ1bm5pbmdUb3RhbEluTWlsbGlzZWNvbmRzICsgd2FpdEluTWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZGdldCBvZiBidWRnZXRCeUNsb3N1cmVOb2RlLnZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKGJ1ZGdldC50b3RhbEluTWlsbGlzZWNvbmRzIDwgY2FwSW5NaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgY2FwSW5NaWxsaXNlY29uZHM6IFN0cmluZyhjYXBJbk1pbGxpc2Vjb25kcyksXG4gICAgICAgICAgICAgIHRvdGFsSW5NaWxsaXNlY29uZHM6IFN0cmluZyhidWRnZXQudG90YWxJbk1pbGxpc2Vjb25kcylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSUQsXG4gICAgICAgICAgICBub2RlOiBidWRnZXQucmVwb3J0Tm9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgYW4gaW4tT2JzaWRpYW4gY2xvc3VyZSBkZWNsYXJpbmcgbW9yZSB3YWl0aW5nIHRoYW4gdGhlIHRyYW5zcG9ydFxcJ3Mgc2NyaXB0LXRpbWVvdXQgY2FwIGFsbG93cydcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdUaGlzIGNsb3N1cmUgZGVjbGFyZXMge3sgdG90YWxJbk1pbGxpc2Vjb25kcyB9fSBtcyBvZiB3YWl0aW5nLCBhdCBvciBvdmVyIHRoZSB0cmFuc3BvcnRcXCdzIHt7IGNhcEluTWlsbGlzZWNvbmRzIH19IG1zIGNhcCwgc28gaXQgY2FuIG9ubHkgZXZlciBkaWUgYXMgYSBiYXJlIGBzY3JpcHQgdGltZW91dGA6IHdhaXQgaW4gTm9kZSBpbnN0ZWFkLCB3aXRoIGEgc2hvcnQgRE9NLXJlYWRpbmcgYHBvbGxJbk9ic2lkaWFuYCBgcG9sbGAsIGFuIGB1bnRpbGAgZXZhbHVhdGVkIGluIE5vZGUsIGFuZCB0aGUgbG9uZyBidWRnZXQgaW4gYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2AuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbe1xuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjYXBJbk1pbGxpc2Vjb25kczoge1xuICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgdHlwZTogJ2ludGVnZXInXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0eXBlOiAnb2JqZWN0J1xuICAgIH1dLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbi1PYnNpZGlhbiBjbG9zdXJlIGEgbm9kZSBydW5zIGluc2lkZSwgd2Fsa2luZyBvdXR3YXJkcy5cbiAqXG4gKiBUaGUgd2FsayBkb2VzIG5vdCBzdG9wIGF0IHRoZSBmaXJzdCBlbmNsb3NpbmcgZnVuY3Rpb246IGEgd2FpdCBpbnNpZGUgYSBoZWxwZXIgZGVjbGFyZWQgd2l0aGluIHRoZVxuICogY2FsbGJhY2sgc3RpbGwgcnVucyBpbnNpZGUgdGhlIGNhbGxiYWNrLCBzbyBpdCBrZWVwcyBnb2luZyB1bnRpbCBpdCByZWFjaGVzIGEgZnVuY3Rpb24gdGhhdCBJUyBvbmUgb2ZcbiAqIHRoZSBoZWxwZXIncyBpbi1PYnNpZGlhbiBjbG9zdXJlcy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZW5jbG9zaW5nIGNsb3N1cmUsIG9yIGBudWxsYCB3aGVuIHRoZSBub2RlIGRvZXMgbm90IHJ1biBpbnNpZGUgb25lLlxuICovXG5mdW5jdGlvbiBmaW5kRW5jbG9zaW5nRXZhbENsb3N1cmUobm9kZTogVFNFU1RyZWUuTm9kZSk6IEV2YWxDbG9zdXJlIHwgbnVsbCB7XG4gIGxldCBjdXJyZW50Tm9kZTogVFNFU1RyZWUuTm9kZSB8IHVuZGVmaW5lZCA9IG5vZGUucGFyZW50O1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGNvbnN0IGNsb3N1cmUgPSByZWFkRXZhbENsb3N1cmUoY3VycmVudE5vZGUpO1xuICAgIGlmIChjbG9zdXJlKSB7XG4gICAgICByZXR1cm4gY2xvc3VyZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIHZhcmlhYmxlIGJ5IG5hbWUsIHdhbGtpbmcgb3V0d2FyZHMgZnJvbSB0aGUgZ2l2ZW4gc2NvcGUuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIHRvIHN0YXJ0IGZyb20uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB2YXJpYWJsZSdzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgdmFyaWFibGUsIG9yIGBudWxsYCB3aGVuIG5vdGhpbmcgaW4gc2NvcGUgZGVjbGFyZXMgdGhhdCBuYW1lLlxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFibGUoc2NvcGU6IFNjb3BlLlNjb3BlLCBuYW1lOiBzdHJpbmcpOiBudWxsIHwgU2NvcGUuVmFyaWFibGUge1xuICBsZXQgY3VycmVudFNjb3BlOiBudWxsIHwgU2NvcGUuU2NvcGUgPSBzY29wZTtcblxuICB3aGlsZSAoY3VycmVudFNjb3BlKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBjdXJyZW50U2NvcGUudmFyaWFibGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgIH1cbiAgICBjdXJyZW50U2NvcGUgPSBjdXJyZW50U2NvcGUudXBwZXI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYSBiaW5hcnkgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGEgYEJpbmFyeUV4cHJlc3Npb25gLlxuICovXG5mdW5jdGlvbiBpc0JpbmFyeUV4cHJlc3Npb24obm9kZTogVFNFU1RyZWUuTm9kZSk6IG5vZGUgaXMgVFNFU1RyZWUuQmluYXJ5RXhwcmVzc2lvbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdCaW5hcnlFeHByZXNzaW9uJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYSBjYWxsIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBDYWxsRXhwcmVzc2lvbmAuXG4gKi9cbmZ1bmN0aW9uIGlzQ2FsbEV4cHJlc3Npb24obm9kZTogVFNFU1RyZWUuTm9kZSk6IG5vZGUgaXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIGZ1bmN0aW9uIHdyaXR0ZW4gYXMgYW4gb2JqZWN0IHByb3BlcnR5J3MgdmFsdWUuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBGdW5jdGlvbkV4cHJlc3Npb25gIG9yIGFuIGBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbmAuXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc3VyZUZ1bmN0aW9uKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBub2RlIGlzIENsb3N1cmVGdW5jdGlvbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYW4gaWRlbnRpZmllci5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGFuIGBJZGVudGlmaWVyYC5cbiAqL1xuZnVuY3Rpb24gaXNJZGVudGlmaWVyKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBub2RlIGlzIFRTRVNUcmVlLklkZW50aWZpZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSAnSWRlbnRpZmllcic7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGEgbnVtZXJpYyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYSBgTGl0ZXJhbGAgaG9sZGluZyBhIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljTGl0ZXJhbChub2RlOiBUU0VTVHJlZS5Ob2RlKTogbm9kZSBpcyBUU0VTVHJlZS5OdW1iZXJMaXRlcmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhbiBgT2JqZWN0RXhwcmVzc2lvbmAuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0RXhwcmVzc2lvbihub2RlOiBUU0VTVHJlZS5Ob2RlKTogbm9kZSBpcyBUU0VTVHJlZS5PYmplY3RFeHByZXNzaW9uIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhbiBvYmplY3QgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYW4gYE9iamVjdFBhdHRlcm5gLlxuICovXG5mdW5jdGlvbiBpc09iamVjdFBhdHRlcm4obm9kZTogVFNFU1RyZWUuTm9kZSk6IG5vZGUgaXMgVFNFU1RyZWUuT2JqZWN0UGF0dGVybiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYW4gb2JqZWN0LWxpdGVyYWwgb3Igb2JqZWN0LXBhdHRlcm4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBQcm9wZXJ0eWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvcGVydHkobm9kZTogVFNFU1RyZWUuTm9kZSk6IG5vZGUgaXMgVFNFU1RyZWUuUHJvcGVydHkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSAnUHJvcGVydHknO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIHZhcmlhYmxlIGRlY2xhcmF0b3IuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBWYXJpYWJsZURlY2xhcmF0b3JgLlxuICovXG5mdW5jdGlvbiBpc1ZhcmlhYmxlRGVjbGFyYXRvcihub2RlOiBUU0VTVHJlZS5Ob2RlKTogbm9kZSBpcyBUU0VTVHJlZS5WYXJpYWJsZURlY2xhcmF0b3Ige1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdG9yJztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgZXhwcmVzc2lvbiBhbiBpZGVudGlmaWVyIGlzIGJvdW5kIHRvLlxuICpcbiAqIEEgYGNvbnN0YCBhbnN3ZXJzIHdpdGggaXRzIGluaXRpYWxpemVyOyBhIGRlc3RydWN0dXJlZCBwYXJhbWV0ZXIgb2YgVEhJUyBjbG9zdXJlIGFuc3dlcnMgd2l0aCB3aGF0IHRoZVxuICogY2FsbCdzIG93biBgaW5wdXRgIHN1cHBsaWVzIGZvciB0aGUga2V5IGl0IHdhcyBkZXN0cnVjdHVyZWQgYnksIHdoaWNoIGlzIGhvdyBhIGJ1ZGdldCB3cml0dGVuIG9uY2UgYXRcbiAqIHRoZSBjYWxsIHNpdGUgcmVhY2hlcyBhIGNsb3N1cmUgdGhhdCBjYW4gY2xvc2Ugb3ZlciBub3RoaW5nLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGlkZW50aWZpZXIgdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBjbG9zdXJlIC0gVGhlIGNsb3N1cmUgdGhlIGlkZW50aWZpZXIgd2FzIHdyaXR0ZW4gaW5zaWRlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LCB1c2VkIHRvIHJlc29sdmUgdGhlIGlkZW50aWZpZXIgdGhyb3VnaCBzY29wZS5cbiAqIEByZXR1cm5zIFRoZSBleHByZXNzaW9uIGl0IGlzIGJvdW5kIHRvLCBvciBgbnVsbGAgd2hlbiBub3RoaW5nIHN0YXRpY2FsbHkgYmluZHMgaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRCb3VuZEV4cHJlc3Npb24obm9kZTogVFNFU1RyZWUuSWRlbnRpZmllciwgY2xvc3VyZTogRXZhbENsb3N1cmUsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgVFNFU1RyZWUuTm9kZSB7XG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgbm9kZS5uYW1lKTtcbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHZhcmlhYmxlLmRlZnMpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uTm9kZSA9IGRlZmluaXRpb24ubm9kZSBhcyBUU0VTVHJlZS5Ob2RlO1xuXG4gICAgaWYgKGlzVmFyaWFibGVEZWNsYXJhdG9yKGRlZmluaXRpb25Ob2RlKSAmJiBkZWZpbml0aW9uTm9kZS5pbml0KSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbk5vZGUuaW5pdDtcbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvbk5vZGUgPT09IGNsb3N1cmUuY2xvc3VyZU5vZGUpIHtcbiAgICAgIGNvbnN0IGlucHV0S2V5ID0gcmVhZFBhcmFtZXRlcklucHV0S2V5KGNsb3N1cmUuY2xvc3VyZU5vZGUsIG5vZGUubmFtZSk7XG4gICAgICBpZiAoaW5wdXRLZXkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkSW5wdXRQcm9wZXJ0eVZhbHVlKGNsb3N1cmUucGFyYW1zTm9kZSwgaW5wdXRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjbG9zdXJlIHByb3BlcnR5IG5hbWVzIGEgY2FsbCdzIHBhcmFtZXRlciBvYmplY3QgbWF5IGNhcnJ5LCBieSB0aGUgaGVscGVyIGl0IGNhbGxzLlxuICpcbiAqIEBwYXJhbSBjYWxsTm9kZSAtIFRoZSBjYWxsIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgaW4tT2JzaWRpYW4gY2xvc3VyZSBwcm9wZXJ0eSBuYW1lcywgb3IgYG51bGxgIHdoZW4gdGhlIGNhbGxlZSBpcyBub3Qgb25lIG9mIHRoZSBoZWxwZXJzLlxuICovXG5mdW5jdGlvbiByZWFkQ2xvc3VyZU5hbWVzKGNhbGxOb2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IG51bGwgfCByZWFkb25seSBzdHJpbmdbXSB7XG4gIGlmICghaXNJZGVudGlmaWVyKGNhbGxOb2RlLmNhbGxlZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBDTE9TVVJFX05BTUVTX0JZX0NBTExFRV9OQU1FLmdldChjYWxsTm9kZS5jYWxsZWUubmFtZSkgPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW4tT2JzaWRpYW4gY2xvc3VyZSBhIGZ1bmN0aW9uIG5vZGUgaXMsIGlmIGl0IGlzIG9uZS5cbiAqXG4gKiBBIGNsb3N1cmUgcXVhbGlmaWVzIHdoZW4gaXQgaXMgdGhlIHZhbHVlIG9mIGEgYGNhbGxiYWNrYCAvIGBwb2xsYCAvIGBzdGFydGAgcHJvcGVydHkgb2YgdGhlIG9iamVjdFxuICogbGl0ZXJhbCBwYXNzZWQgYXMgdGhlIGhlbHBlcidzIGZpcnN0IGFyZ3VtZW50IFx1MjAxNCB3aGljaCBjb3ZlcnMgYm90aCB0aGUgbWV0aG9kIHNob3J0aGFuZFxuICogKGBhc3luYyBjYWxsYmFjayh7IFx1MjAyNiB9KSB7IFx1MjAyNiB9YCkgYW5kIGFuIGFycm93IChgY2FsbGJhY2s6IGFzeW5jICh7IFx1MjAyNiB9KSA9PiB7IFx1MjAyNiB9YCkuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRoZSBjbG9zdXJlLCBvciBgbnVsbGAgd2hlbiB0aGUgbm9kZSBpcyBub3QgYW4gaW4tT2JzaWRpYW4gY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gcmVhZEV2YWxDbG9zdXJlKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBFdmFsQ2xvc3VyZSB8IG51bGwge1xuICBpZiAoIWlzQ2xvc3VyZUZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBub2RlLnBhcmVudDtcbiAgaWYgKCFpc1Byb3BlcnR5KHByb3BlcnR5Tm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIFRoZSBvYmplY3QgY2hlY2sgY29tZXMgQkVGT1JFIHRoZSBrZXkgY2hlY2sgYmVjYXVzZSBhIGZ1bmN0aW9uIGNhbiByZWFjaCBhIHByb3BlcnR5IHRocm91Z2ggaXRzXG4gICAqIENPTVBVVEVEIEtFWSBhcyB3ZWxsIGFzIHRocm91Z2ggaXRzIHZhbHVlIC0tIGB7IFsoKSA9PiAnYSddOiAxIH1gIGlzIGxlZ2FsIC0tIGFuZCBhIGRlc3RydWN0dXJpbmdcbiAgICogcGF0dGVybiBjYW4gY2Fycnkgb25lIHRvby4gTmVpdGhlciBpcyBhIGhlbHBlciBjYWxsJ3MgcGFyYW1ldGVyIG9iamVjdC5cbiAgICovXG4gIGNvbnN0IHBhcmFtc05vZGUgPSBwcm9wZXJ0eU5vZGUucGFyZW50O1xuICBpZiAoIWlzT2JqZWN0RXhwcmVzc2lvbihwYXJhbXNOb2RlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFpc0lkZW50aWZpZXIocHJvcGVydHlOb2RlLmtleSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbGxOb2RlID0gcGFyYW1zTm9kZS5wYXJlbnQ7XG4gIGlmICghaXNDYWxsRXhwcmVzc2lvbihjYWxsTm9kZSkgfHwgY2FsbE5vZGUuYXJndW1lbnRzWzBdICE9PSBwYXJhbXNOb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjbG9zdXJlTmFtZXMgPSByZWFkQ2xvc3VyZU5hbWVzKGNhbGxOb2RlKTtcbiAgaWYgKCFjbG9zdXJlTmFtZXM/LmluY2x1ZGVzKHByb3BlcnR5Tm9kZS5rZXkubmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2xvc3VyZU5vZGU6IG5vZGUsXG4gICAgcGFyYW1zTm9kZSxcbiAgICByZXBvcnROb2RlOiBwcm9wZXJ0eU5vZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgdmFsdWUgYSBjYWxsJ3Mgb3duIGBpbnB1dGAgb2JqZWN0IHN1cHBsaWVzIGZvciBvbmUga2V5LlxuICpcbiAqIFRoaXMgaXMgaG93IGEgYnVkZ2V0IGRlY2xhcmVkIG9uY2UgYXQgdGhlIGNhbGwgc2l0ZSByZWFjaGVzIHRoZSBjbG9zdXJlLCB3aGljaCBjYW5ub3QgY2xvc2Ugb3ZlclxuICogYW55dGhpbmc6IGBpbnB1dDogeyBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM6IFNFVFRMRSB9YCBhcnJpdmVzIGRlc3RydWN0dXJlZCBpbiB0aGUgY2FsbGJhY2snc1xuICogcGFyYW1ldGVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zTm9kZSAtIFRoZSBoZWxwZXIncyBwYXJhbWV0ZXIgb2JqZWN0LlxuICogQHBhcmFtIGtleU5hbWUgLSBUaGUgYGlucHV0YCBwcm9wZXJ0eSB0byByZWFkLlxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gc3VwcGx5aW5nIHRoYXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgY2FsbCdzIGBpbnB1dGAgZG9lcyBub3QgZGVjbGFyZSBpdC5cbiAqL1xuZnVuY3Rpb24gcmVhZElucHV0UHJvcGVydHlWYWx1ZShwYXJhbXNOb2RlOiBUU0VTVHJlZS5PYmplY3RFeHByZXNzaW9uLCBrZXlOYW1lOiBzdHJpbmcpOiBudWxsIHwgVFNFU1RyZWUuTm9kZSB7XG4gIGNvbnN0IGlucHV0UHJvcGVydHkgPSBwYXJhbXNOb2RlLnByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+XG4gICAgaXNQcm9wZXJ0eShwcm9wZXJ0eSBhcyBUU0VTVHJlZS5Ob2RlKVxuICAgICYmIGlzSWRlbnRpZmllcigocHJvcGVydHkgYXMgVFNFU1RyZWUuUHJvcGVydHkpLmtleSBhcyBUU0VTVHJlZS5Ob2RlKVxuICAgICYmICgocHJvcGVydHkgYXMgVFNFU1RyZWUuUHJvcGVydHkpLmtleSBhcyBUU0VTVHJlZS5JZGVudGlmaWVyKS5uYW1lID09PSBJTlBVVF9QUk9QRVJUWV9OQU1FXG4gICkgYXMgVFNFU1RyZWUuUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaW5wdXROb2RlID0gaW5wdXRQcm9wZXJ0eT8udmFsdWUgYXMgVFNFU1RyZWUuTm9kZSB8IHVuZGVmaW5lZDtcbiAgaWYgKCFpbnB1dE5vZGUgfHwgIWlzT2JqZWN0RXhwcmVzc2lvbihpbnB1dE5vZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB2YWx1ZVByb3BlcnR5ID0gaW5wdXROb2RlLnByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+XG4gICAgaXNQcm9wZXJ0eShwcm9wZXJ0eSBhcyBUU0VTVHJlZS5Ob2RlKVxuICAgICYmIGlzSWRlbnRpZmllcigocHJvcGVydHkgYXMgVFNFU1RyZWUuUHJvcGVydHkpLmtleSBhcyBUU0VTVHJlZS5Ob2RlKVxuICAgICYmICgocHJvcGVydHkgYXMgVFNFU1RyZWUuUHJvcGVydHkpLmtleSBhcyBUU0VTVHJlZS5JZGVudGlmaWVyKS5uYW1lID09PSBrZXlOYW1lXG4gICkgYXMgVFNFU1RyZWUuUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh2YWx1ZVByb3BlcnR5Py52YWx1ZSBhcyBUU0VTVHJlZS5Ob2RlIHwgdW5kZWZpbmVkKSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBgaW5wdXRgIGtleSBhIGRlc3RydWN0dXJlZCBjbG9zdXJlIHBhcmFtZXRlciBpcyBib3VuZCBmcm9tLlxuICpcbiAqIFRoZSBiaW5kaW5nIG1heSBiZSByZW5hbWVkIChgdGltZW91dEluTWlsbGlzZWNvbmRzOiB0aW1lb3V0YCksIHNvIHRoZSBLRVkgaXMgd2hhdCB0aGUgY2FsbCdzIGBpbnB1dGBcbiAqIGlzIGxvb2tlZCB1cCBieSwgbmV2ZXIgdGhlIGxvY2FsIG5hbWUuXG4gKlxuICogQHBhcmFtIGNsb3N1cmVOb2RlIC0gVGhlIGNsb3N1cmUgd2hvc2UgcGFyYW1ldGVycyB0byByZWFkLlxuICogQHBhcmFtIGxvY2FsTmFtZSAtIFRoZSBuYW1lIHRoZSBidWRnZXQgaXMgYm91bmQgdG8gaW5zaWRlIHRoZSBjbG9zdXJlLlxuICogQHJldHVybnMgVGhlIGBpbnB1dGAga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgbmFtZSBpcyBub3QgYm91bmQgYnkgYSBwbGFpbiBkZXN0cnVjdHVyZWQgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQYXJhbWV0ZXJJbnB1dEtleShjbG9zdXJlTm9kZTogQ2xvc3VyZUZ1bmN0aW9uLCBsb2NhbE5hbWU6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBmb3IgKGNvbnN0IHBhcmFtZXRlck5vZGUgb2YgY2xvc3VyZU5vZGUucGFyYW1zKSB7XG4gICAgaWYgKCFpc09iamVjdFBhdHRlcm4ocGFyYW1ldGVyTm9kZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcGFyYW1ldGVyTm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIWlzUHJvcGVydHkocHJvcGVydHkpIHx8IHByb3BlcnR5LmNvbXB1dGVkIHx8ICFpc0lkZW50aWZpZXIocHJvcGVydHkua2V5KSB8fCAhaXNJZGVudGlmaWVyKHByb3BlcnR5LnZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5LnZhbHVlLm5hbWUgPT09IGxvY2FsTmFtZSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHkua2V5Lm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGV4cHJlc3Npb24gY2FycnlpbmcgYSB3YWl0IGNhbGwncyBkZWNsYXJlZCBidWRnZXQuXG4gKlxuICogQHBhcmFtIGNhbGxOb2RlIC0gVGhlIGNhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gdG8gcmVzb2x2ZTsgYG51bGxgIGZvciBhIGB3YWl0VW50aWxgIHRoYXQgb21pdHMgaXRzIHRpbWVvdXQsIHdoaWNoIHRha2VzIHRoZVxuICogaGVscGVyJ3MgZGVmYXVsdDsgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgY2FsbCBpcyBub3QgYSB3YWl0IGF0IGFsbC5cbiAqL1xuZnVuY3Rpb24gcmVhZFdhaXRCdWRnZXRFeHByZXNzaW9uKGNhbGxOb2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IG51bGwgfCBUU0VTVHJlZS5Ob2RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpc0lkZW50aWZpZXIoY2FsbE5vZGUuY2FsbGVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYWxsZWVOYW1lID0gY2FsbE5vZGUuY2FsbGVlLm5hbWU7XG5cbiAgaWYgKGNhbGxlZU5hbWUgPT09IFNMRUVQX0NBTExFRV9OQU1FKSB7XG4gICAgcmV0dXJuIChjYWxsTm9kZS5hcmd1bWVudHNbMF0pID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChjYWxsZWVOYW1lICE9PSBXQUlUX1VOVElMX0NBTExFRV9OQU1FKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhcmFtc05vZGUgPSBjYWxsTm9kZS5hcmd1bWVudHNbMF0gYXMgVFNFU1RyZWUuTm9kZSB8IHVuZGVmaW5lZDtcbiAgaWYgKCFwYXJhbXNOb2RlIHx8ICFpc09iamVjdEV4cHJlc3Npb24ocGFyYW1zTm9kZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGltZW91dFByb3BlcnR5ID0gcGFyYW1zTm9kZS5wcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PlxuICAgIGlzUHJvcGVydHkocHJvcGVydHkgYXMgVFNFU1RyZWUuTm9kZSlcbiAgICAmJiBpc0lkZW50aWZpZXIoKHByb3BlcnR5IGFzIFRTRVNUcmVlLlByb3BlcnR5KS5rZXkgYXMgVFNFU1RyZWUuTm9kZSlcbiAgICAmJiAoKHByb3BlcnR5IGFzIFRTRVNUcmVlLlByb3BlcnR5KS5rZXkgYXMgVFNFU1RyZWUuSWRlbnRpZmllcikubmFtZSA9PT0gVElNRU9VVF9QUk9QRVJUWV9OQU1FXG4gICkgYXMgVFNFU1RyZWUuUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0aW1lb3V0UHJvcGVydHk/LnZhbHVlKSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIGV4cHJlc3Npb24gdG8gYSBtaWxsaXNlY29uZCBjb3VudCwgdGhyb3VnaCBzY29wZS5cbiAqXG4gKiBIYW5kbGVzIGEgbnVtZXJpYyBsaXRlcmFsLCBhIGxpdGVyYWwtb25seSBwcm9kdWN0IChgNjAgKiAxMDAwYCksIGFuIGlkZW50aWZpZXIgYm91bmQgdG8gZWl0aGVyIGluIGFueVxuICogZW5jbG9zaW5nIHNjb3BlLCBhbmQgYSBkZXN0cnVjdHVyZWQgY2xvc3VyZSBwYXJhbWV0ZXIgZm9sbG93ZWQgYmFjayB0aHJvdWdoIHRoZSBjYWxsJ3Mgb3duIGBpbnB1dGAuXG4gKiBBbnl0aGluZyBlbHNlIGlzIHVucmVzb2x2YWJsZSBhbmQgYW5zd2VycyBgbnVsbGAsIHdoaWNoIHRoZSBjYWxsZXIgdHJlYXRzIGFzIGNvbnRyaWJ1dGluZyBub3RoaW5nLlxuICpcbiAqIEVhY2ggaWRlbnRpZmllciBpcyByZXNvbHZlZCBmcm9tIElUUyBPV04gc2NvcGUgcmF0aGVyIHRoYW4gZnJvbSB0aGUgd2FpdCdzLCBzbyBhIHZhbHVlIHN1cHBsaWVkIGJ5IHRoZVxuICogY2FsbCdzIGBpbnB1dGAgcmVzb2x2ZXMgYXQgdGhlIGNhbGwgc2l0ZSBcdTIwMTQgd2hlcmUgaXQgd2FzIHdyaXR0ZW4gXHUyMDE0IGFuZCBpcyBub3QgY2FwdHVyZWQgYnkgYSBzYW1lLW5hbWVkXG4gKiBiaW5kaW5nIHRoYXQgaGFwcGVucyB0byBleGlzdCBpbnNpZGUgdGhlIGNsb3N1cmUuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgZXhwcmVzc2lvbiB0byByZXNvbHZlLlxuICogQHBhcmFtIGNsb3N1cmUgLSBUaGUgY2xvc3VyZSB0aGUgZXhwcmVzc2lvbiB3YXMgd3JpdHRlbiBpbnNpZGUuXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBydWxlIGNvbnRleHQsIHVzZWQgdG8gcmVzb2x2ZSBpZGVudGlmaWVycyB0aHJvdWdoIHNjb3BlLlxuICogQHJldHVybnMgVGhlIG1pbGxpc2Vjb25kIGNvdW50LCBvciBgbnVsbGAgd2hlbiBpdCBjYW5ub3QgYmUgcmVzb2x2ZWQgc3RhdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1pbGxpc2Vjb25kcyhub2RlOiBUU0VTVHJlZS5Ob2RlLCBjbG9zdXJlOiBFdmFsQ2xvc3VyZSwgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IG51bGwgfCBudW1iZXIge1xuICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgU2V0PFRTRVNUcmVlLk5vZGU+KCk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG5cbiAgd2hpbGUgKCF2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgIHZpc2l0ZWROb2Rlcy5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgaWYgKGlzTnVtZXJpY0xpdGVyYWwoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzQmluYXJ5RXhwcmVzc2lvbihjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUub3BlcmF0b3IgPT09ICcqJykge1xuICAgICAgY29uc3QgbGVmdEluTWlsbGlzZWNvbmRzID0gcmVzb2x2ZU1pbGxpc2Vjb25kcyhjdXJyZW50Tm9kZS5sZWZ0LCBjbG9zdXJlLCBjb250ZXh0KTtcbiAgICAgIGNvbnN0IHJpZ2h0SW5NaWxsaXNlY29uZHMgPSByZXNvbHZlTWlsbGlzZWNvbmRzKGN1cnJlbnROb2RlLnJpZ2h0LCBjbG9zdXJlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxlZnRJbk1pbGxpc2Vjb25kcyA9PT0gbnVsbCB8fCByaWdodEluTWlsbGlzZWNvbmRzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGVmdEluTWlsbGlzZWNvbmRzICogcmlnaHRJbk1pbGxpc2Vjb25kcztcbiAgICB9XG5cbiAgICBpZiAoIWlzSWRlbnRpZmllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kTm9kZSA9IHJlYWRCb3VuZEV4cHJlc3Npb24oY3VycmVudE5vZGUsIGNsb3N1cmUsIGNvbnRleHQpO1xuICAgIGlmICghYm91bmROb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjdXJyZW50Tm9kZSA9IGJvdW5kTm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1ETyxNQUFNLGFBQWE7QUFLMUIsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSw2Q0FBNkM7QUFFbkQsTUFBTSxzQkFBc0I7QUFDNUIs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
|
package/dist/lib/cjs/script-utils/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference path="../../../library.d.cts" />
|
|
2
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
3
|
+
/**
|
|
4
|
+
* Message ID reported when an in-Obsidian closure declares more waiting than the transport's cap allows.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MESSAGE_ID = "noOverCapWaitInEvalInObsidian";
|
|
7
|
+
/**
|
|
8
|
+
* ESLint rule disallowing an in-Obsidian closure whose declared waiting exceeds the transport's script-timeout cap.
|
|
9
|
+
*/
|
|
10
|
+
export declare const noOverCapWaitInEvalInObsidian: Rule.RuleModule;
|
|
@@ -150,6 +150,7 @@ var import_manifest_id = require('./manifest-id.cjs');
|
|
|
150
150
|
var import_manifest_name = require('./manifest-name.cjs');
|
|
151
151
|
var import_manifest_schema = require('./manifest-schema.cjs');
|
|
152
152
|
var import_no_async_callback_to_unsafe_return = require('./no-async-callback-to-unsafe-return.cjs');
|
|
153
|
+
var import_no_over_cap_wait_in_eval_in_obsidian = require('./no-over-cap-wait-in-eval-in-obsidian.cjs');
|
|
153
154
|
var import_no_untrusted_input_events = require('./no-untrusted-input-events.cjs');
|
|
154
155
|
var import_no_unused_params_members = require('./no-unused-params-members.cjs');
|
|
155
156
|
var import_no_used_underscore_variables = require('./no-used-underscore-variables.cjs');
|
|
@@ -166,6 +167,7 @@ const obsidianDevUtilsPlugin = {
|
|
|
166
167
|
"manifest-name": import_manifest_name.manifestName,
|
|
167
168
|
"manifest-schema": import_manifest_schema.manifestSchema,
|
|
168
169
|
"no-async-callback-to-unsafe-return": import_no_async_callback_to_unsafe_return.noAsyncCallbackToUnsafeReturn,
|
|
170
|
+
"no-over-cap-wait-in-eval-in-obsidian": import_no_over_cap_wait_in_eval_in_obsidian.noOverCapWaitInEvalInObsidian,
|
|
169
171
|
"no-untrusted-input-events": import_no_untrusted_input_events.noUntrustedInputEvents,
|
|
170
172
|
"no-unused-params-members": import_no_unused_params_members.noUnusedParamsMembers,
|
|
171
173
|
"no-used-underscore-variables": import_no_used_underscore_variables.noUsedUnderscoreVariables,
|
|
@@ -181,4 +183,4 @@ const obsidianDevUtilsPlugin = {
|
|
|
181
183
|
0 && (module.exports = {
|
|
182
184
|
obsidianDevUtilsPlugin
|
|
183
185
|
});
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHBsdWdpbiBmb3IgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuIH0gZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmltcG9ydCB7IG5vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHsgbm9VbnRydXN0ZWRJbnB1dEV2ZW50cyB9IGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5pbXBvcnQgeyBub1VudXNlZFBhcmFtc01lbWJlcnMgfSBmcm9tICcuL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyc7XG5pbXBvcnQgeyBub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzIH0gZnJvbSAnLi9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzJztcbmltcG9ydCB7IHBhcmFtc09wdGlvbnNOYW1lTWF0Y2ggfSBmcm9tICcuL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gudHMnO1xuaW1wb3J0IHsgcHJlZmVyTm9vcEFzeW5jIH0gZnJvbSAnLi9wcmVmZXItbm9vcC1hc3luYy50cyc7XG5pbXBvcnQgeyByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzIH0gZnJvbSAnLi9yZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycy50cyc7XG5pbXBvcnQgeyByZXF1aXJlQ29tcG9uZW50U3VmZml4IH0gZnJvbSAnLi9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgudHMnO1xuaW1wb3J0IHsgcmVxdWlyZU1ldGhvZFRlbXBsYXRlIH0gZnJvbSAnLi9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyc7XG5pbXBvcnQgeyByZXF1aXJlU3VwZXJDYWxsIH0gZnJvbSAnLi9yZXF1aXJlLXN1cGVyLWNhbGwudHMnO1xuXG4vKipcbiAqIEVTTGludCBwbHVnaW4gYnVuZGxpbmcgZXZlcnkgYG9ic2lkaWFuLWRldi11dGlsc2AgY3VzdG9tIHJ1bGUsIHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW46IEVTTGludC5QbHVnaW4gPSB7XG4gIHJ1bGVzOiB7XG4gICAgJ21hbmlmZXN0LWRlc2NyaXB0aW9uJzogbWFuaWZlc3REZXNjcmlwdGlvbixcbiAgICAnbWFuaWZlc3QtaWQnOiBtYW5pZmVzdElkLFxuICAgICdtYW5pZmVzdC1uYW1lJzogbWFuaWZlc3ROYW1lLFxuICAgICdtYW5pZmVzdC1zY2hlbWEnOiBtYW5pZmVzdFNjaGVtYSxcbiAgICAnbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuLFxuICAgICduby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4nOiBub092ZXJDYXBXYWl0SW5FdmFsSW5PYnNpZGlhbixcbiAgICAnbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6IG5vVW50cnVzdGVkSW5wdXRFdmVudHMsXG4gICAgJ25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6IG5vVW51c2VkUGFyYW1zTWVtYmVycyxcbiAgICAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMsXG4gICAgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiBwYXJhbXNPcHRpb25zTmFtZU1hdGNoLFxuICAgICdwcmVmZXItbm9vcC1hc3luYyc6IHByZWZlck5vb3BBc3luYyxcbiAgICAncmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMnOiByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzLFxuICAgICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiByZXF1aXJlQ29tcG9uZW50U3VmZml4LFxuICAgICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSxcbiAgICAncmVxdWlyZS1zdXBlci1jYWxsJzogcmVxdWlyZVN1cGVyQ2FsbFxuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxrQ0FBb0M7QUFDcEMseUJBQTJCO0FBQzNCLDJCQUE2QjtBQUM3Qiw2QkFBK0I7QUFDL0IsZ0RBQThDO0FBQzlDLGtEQUE4QztBQUM5Qyx1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQyx1Q0FBdUM7QUFDdkMsK0JBQWdDO0FBQ2hDLG9EQUFtRDtBQUNuRCxzQ0FBdUM7QUFDdkMscUNBQXNDO0FBQ3RDLGdDQUFpQztBQUsxQixNQUFNLHlCQUF3QztBQUFBLEVBQ25ELE9BQU87QUFBQSxJQUNMLHdCQUF3QjtBQUFBLElBQ3hCLGVBQWU7QUFBQSxJQUNmLGlCQUFpQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLHNDQUFzQztBQUFBLElBQ3RDLHdDQUF3QztBQUFBLElBQ3hDLDZCQUE2QjtBQUFBLElBQzdCLDRCQUE0QjtBQUFBLElBQzVCLGdDQUFnQztBQUFBLElBQ2hDLDZCQUE2QjtBQUFBLElBQzdCLHFCQUFxQjtBQUFBLElBQ3JCLDBDQUEwQztBQUFBLElBQzFDLDRCQUE0QjtBQUFBLElBQzVCLDJCQUEyQjtBQUFBLElBQzNCLHNCQUFzQjtBQUFBLEVBQ3hCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
* roughly 34 KB of minified JavaScript into EVERY Obsidian plugin built with this library: a plugin
|
|
9
9
|
* ships a single CJS `main.js`, esbuild has no code splitting to put a dependency behind, and a
|
|
10
10
|
* `await import()` only defers evaluation — the module body is inlined either way. `node:zlib` is
|
|
11
|
-
* already an esbuild external, so the same work now costs a plugin bundle nothing at all. Archives
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* already an esbuild external, so the same work now costs a plugin bundle nothing at all. Archives are
|
|
12
|
+
* WRITTEN with `fflate` at release time (`script-utils/demo-vault.ts`), which is Node-side tooling and
|
|
13
|
+
* never reaches a plugin bundle — a third-party writer there is also what keeps this reader checked
|
|
14
|
+
* against an implementation that is not its own.
|
|
14
15
|
*
|
|
15
16
|
* Deliberately narrow: it reads exactly what that writer produces — stored and deflated entries in an
|
|
16
17
|
* unencrypted archive below the 4 GB / 65535-entry ZIP64 threshold — and raises a named error for
|