vitest 0.2.7 → 0.3.2
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/dist/cli.js +11 -12
- package/dist/client-ab3f363e.js +9442 -0
- package/dist/constants-8fcbf9b6.js +80 -0
- package/dist/create-f33bfb34.js +9221 -0
- package/dist/{diff-275cfd15.js → diff-e2ede84f.js} +3 -4
- package/dist/entry.js +8 -9
- package/dist/{globals-1e6cf014.js → globals-b87ef70d.js} +7 -8
- package/dist/{index-7975be53.js → index-648e7ab2.js} +1 -1
- package/dist/{index-4cd25949.js → index-6e709f57.js} +1 -1
- package/dist/{index-26cb6e63.js → index-ce49e384.js} +3 -3
- package/dist/{index-08faa6e3.js → index-e32575f8.js} +4 -2
- package/dist/index-f55e7b59.js +406 -0
- package/dist/index.d.ts +11 -8
- package/dist/index.js +8 -5
- package/dist/node.d.ts +4 -3
- package/dist/node.js +10 -11
- package/dist/{setup-cb313f20.js → setup-55c4a74b.js} +48 -7
- package/dist/{source-map-799c200a.js → source-map-0ecca7b8.js} +2 -2
- package/dist/{vi-ec8761e0.js → vi-93df942a.js} +9 -3
- package/dist/worker.js +17 -17
- package/package.json +9 -9
- package/dist/client-f15310bf.js +0 -9442
- package/dist/constants-de5287a6.js +0 -34
- package/dist/create-bc179830.js +0 -9208
- package/dist/index-1964368a.js +0 -187
- package/dist/index-2e2d319c.js +0 -222
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import require$$0 from 'tty';
|
|
3
|
+
import { isPackageExists } from 'local-pkg';
|
|
4
|
+
|
|
5
|
+
var picocolors = {exports: {}};
|
|
6
|
+
|
|
7
|
+
let tty = require$$0;
|
|
8
|
+
|
|
9
|
+
let isColorSupported =
|
|
10
|
+
!("NO_COLOR" in process.env || process.argv.includes("--no-color")) &&
|
|
11
|
+
("FORCE_COLOR" in process.env ||
|
|
12
|
+
process.argv.includes("--color") ||
|
|
13
|
+
process.platform === "win32" ||
|
|
14
|
+
(tty.isatty(1) && process.env.TERM !== "dumb") ||
|
|
15
|
+
"CI" in process.env);
|
|
16
|
+
|
|
17
|
+
let formatter =
|
|
18
|
+
(open, close, replace = open) =>
|
|
19
|
+
input => {
|
|
20
|
+
let string = "" + input;
|
|
21
|
+
let index = string.indexOf(close, open.length);
|
|
22
|
+
return ~index
|
|
23
|
+
? open + replaceClose(string, close, replace, index) + close
|
|
24
|
+
: open + string + close
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
let replaceClose = (string, close, replace, index) => {
|
|
28
|
+
let start = string.substring(0, index) + replace;
|
|
29
|
+
let end = string.substring(index + close.length);
|
|
30
|
+
let nextIndex = end.indexOf(close);
|
|
31
|
+
return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
let createColors = (enabled = isColorSupported) => ({
|
|
35
|
+
isColorSupported: enabled,
|
|
36
|
+
reset: enabled ? s => `\x1b[0m${s}\x1b[0m` : String,
|
|
37
|
+
bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String,
|
|
38
|
+
dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String,
|
|
39
|
+
italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String,
|
|
40
|
+
underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String,
|
|
41
|
+
inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String,
|
|
42
|
+
hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String,
|
|
43
|
+
strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String,
|
|
44
|
+
black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String,
|
|
45
|
+
red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String,
|
|
46
|
+
green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String,
|
|
47
|
+
yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String,
|
|
48
|
+
blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String,
|
|
49
|
+
magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String,
|
|
50
|
+
cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String,
|
|
51
|
+
white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String,
|
|
52
|
+
gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String,
|
|
53
|
+
bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String,
|
|
54
|
+
bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String,
|
|
55
|
+
bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String,
|
|
56
|
+
bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String,
|
|
57
|
+
bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String,
|
|
58
|
+
bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String,
|
|
59
|
+
bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String,
|
|
60
|
+
bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
picocolors.exports = createColors();
|
|
64
|
+
picocolors.exports.createColors = createColors;
|
|
65
|
+
|
|
66
|
+
var c = picocolors.exports;
|
|
67
|
+
|
|
68
|
+
function normalizeWindowsPath(input = "") {
|
|
69
|
+
if (!input.includes("\\")) {
|
|
70
|
+
return input;
|
|
71
|
+
}
|
|
72
|
+
return input.replace(/\\/g, "/");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const _UNC_REGEX = /^[/][/]/;
|
|
76
|
+
const _UNC_DRIVE_REGEX = /^[/][/]([.]{1,2}[/])?([a-zA-Z]):[/]/;
|
|
77
|
+
const _IS_ABSOLUTE_RE = /^\/|^\\|^[a-zA-Z]:[/\\]/;
|
|
78
|
+
const sep = "/";
|
|
79
|
+
const delimiter = ":";
|
|
80
|
+
const normalize = function(path2) {
|
|
81
|
+
if (path2.length === 0) {
|
|
82
|
+
return ".";
|
|
83
|
+
}
|
|
84
|
+
path2 = normalizeWindowsPath(path2);
|
|
85
|
+
const isUNCPath = path2.match(_UNC_REGEX);
|
|
86
|
+
const hasUNCDrive = isUNCPath && path2.match(_UNC_DRIVE_REGEX);
|
|
87
|
+
const isPathAbsolute = isAbsolute(path2);
|
|
88
|
+
const trailingSeparator = path2[path2.length - 1] === "/";
|
|
89
|
+
path2 = normalizeString(path2, !isPathAbsolute);
|
|
90
|
+
if (path2.length === 0) {
|
|
91
|
+
if (isPathAbsolute) {
|
|
92
|
+
return "/";
|
|
93
|
+
}
|
|
94
|
+
return trailingSeparator ? "./" : ".";
|
|
95
|
+
}
|
|
96
|
+
if (trailingSeparator) {
|
|
97
|
+
path2 += "/";
|
|
98
|
+
}
|
|
99
|
+
if (isUNCPath) {
|
|
100
|
+
if (hasUNCDrive) {
|
|
101
|
+
return `//./${path2}`;
|
|
102
|
+
}
|
|
103
|
+
return `//${path2}`;
|
|
104
|
+
}
|
|
105
|
+
return isPathAbsolute && !isAbsolute(path2) ? `/${path2}` : path2;
|
|
106
|
+
};
|
|
107
|
+
const join = function(...args) {
|
|
108
|
+
if (args.length === 0) {
|
|
109
|
+
return ".";
|
|
110
|
+
}
|
|
111
|
+
let joined;
|
|
112
|
+
for (let i = 0; i < args.length; ++i) {
|
|
113
|
+
const arg = args[i];
|
|
114
|
+
if (arg.length > 0) {
|
|
115
|
+
if (joined === void 0) {
|
|
116
|
+
joined = arg;
|
|
117
|
+
} else {
|
|
118
|
+
joined += `/${arg}`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (joined === void 0) {
|
|
123
|
+
return ".";
|
|
124
|
+
}
|
|
125
|
+
return normalize(joined);
|
|
126
|
+
};
|
|
127
|
+
const resolve = function(...args) {
|
|
128
|
+
args = args.map((arg) => normalizeWindowsPath(arg));
|
|
129
|
+
let resolvedPath = "";
|
|
130
|
+
let resolvedAbsolute = false;
|
|
131
|
+
for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
132
|
+
const path2 = i >= 0 ? args[i] : process.cwd();
|
|
133
|
+
if (path2.length === 0) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
resolvedPath = `${path2}/${resolvedPath}`;
|
|
137
|
+
resolvedAbsolute = isAbsolute(path2);
|
|
138
|
+
}
|
|
139
|
+
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
|
|
140
|
+
if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
|
|
141
|
+
return `/${resolvedPath}`;
|
|
142
|
+
}
|
|
143
|
+
return resolvedPath.length > 0 ? resolvedPath : ".";
|
|
144
|
+
};
|
|
145
|
+
function normalizeString(path2, allowAboveRoot) {
|
|
146
|
+
let res = "";
|
|
147
|
+
let lastSegmentLength = 0;
|
|
148
|
+
let lastSlash = -1;
|
|
149
|
+
let dots = 0;
|
|
150
|
+
let char = null;
|
|
151
|
+
for (let i = 0; i <= path2.length; ++i) {
|
|
152
|
+
if (i < path2.length) {
|
|
153
|
+
char = path2[i];
|
|
154
|
+
} else if (char === "/") {
|
|
155
|
+
break;
|
|
156
|
+
} else {
|
|
157
|
+
char = "/";
|
|
158
|
+
}
|
|
159
|
+
if (char === "/") {
|
|
160
|
+
if (lastSlash === i - 1 || dots === 1) ; else if (dots === 2) {
|
|
161
|
+
if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
|
|
162
|
+
if (res.length > 2) {
|
|
163
|
+
const lastSlashIndex = res.lastIndexOf("/");
|
|
164
|
+
if (lastSlashIndex === -1) {
|
|
165
|
+
res = "";
|
|
166
|
+
lastSegmentLength = 0;
|
|
167
|
+
} else {
|
|
168
|
+
res = res.slice(0, lastSlashIndex);
|
|
169
|
+
lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
|
|
170
|
+
}
|
|
171
|
+
lastSlash = i;
|
|
172
|
+
dots = 0;
|
|
173
|
+
continue;
|
|
174
|
+
} else if (res.length !== 0) {
|
|
175
|
+
res = "";
|
|
176
|
+
lastSegmentLength = 0;
|
|
177
|
+
lastSlash = i;
|
|
178
|
+
dots = 0;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (allowAboveRoot) {
|
|
183
|
+
res += res.length > 0 ? "/.." : "..";
|
|
184
|
+
lastSegmentLength = 2;
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
if (res.length > 0) {
|
|
188
|
+
res += `/${path2.slice(lastSlash + 1, i)}`;
|
|
189
|
+
} else {
|
|
190
|
+
res = path2.slice(lastSlash + 1, i);
|
|
191
|
+
}
|
|
192
|
+
lastSegmentLength = i - lastSlash - 1;
|
|
193
|
+
}
|
|
194
|
+
lastSlash = i;
|
|
195
|
+
dots = 0;
|
|
196
|
+
} else if (char === "." && dots !== -1) {
|
|
197
|
+
++dots;
|
|
198
|
+
} else {
|
|
199
|
+
dots = -1;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return res;
|
|
203
|
+
}
|
|
204
|
+
const isAbsolute = function(p) {
|
|
205
|
+
return _IS_ABSOLUTE_RE.test(p);
|
|
206
|
+
};
|
|
207
|
+
const toNamespacedPath = function(p) {
|
|
208
|
+
return normalizeWindowsPath(p);
|
|
209
|
+
};
|
|
210
|
+
const extname = function(p) {
|
|
211
|
+
return path.posix.extname(normalizeWindowsPath(p));
|
|
212
|
+
};
|
|
213
|
+
const relative = function(from, to) {
|
|
214
|
+
return path.posix.relative(normalizeWindowsPath(from), normalizeWindowsPath(to));
|
|
215
|
+
};
|
|
216
|
+
const dirname = function(p) {
|
|
217
|
+
return path.posix.dirname(normalizeWindowsPath(p));
|
|
218
|
+
};
|
|
219
|
+
const format = function(p) {
|
|
220
|
+
return normalizeWindowsPath(path.posix.format(p));
|
|
221
|
+
};
|
|
222
|
+
const basename = function(p, ext) {
|
|
223
|
+
return path.posix.basename(normalizeWindowsPath(p), ext);
|
|
224
|
+
};
|
|
225
|
+
const parse = function(p) {
|
|
226
|
+
return path.posix.parse(normalizeWindowsPath(p));
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
const _path = /*#__PURE__*/Object.freeze({
|
|
230
|
+
__proto__: null,
|
|
231
|
+
sep: sep,
|
|
232
|
+
delimiter: delimiter,
|
|
233
|
+
normalize: normalize,
|
|
234
|
+
join: join,
|
|
235
|
+
resolve: resolve,
|
|
236
|
+
normalizeString: normalizeString,
|
|
237
|
+
isAbsolute: isAbsolute,
|
|
238
|
+
toNamespacedPath: toNamespacedPath,
|
|
239
|
+
extname: extname,
|
|
240
|
+
relative: relative,
|
|
241
|
+
dirname: dirname,
|
|
242
|
+
format: format,
|
|
243
|
+
basename: basename,
|
|
244
|
+
parse: parse
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
const index = {
|
|
248
|
+
..._path
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
function notNullish(v) {
|
|
252
|
+
return v != null;
|
|
253
|
+
}
|
|
254
|
+
function slash(str) {
|
|
255
|
+
return str.replace(/\\/g, "/");
|
|
256
|
+
}
|
|
257
|
+
function mergeSlashes(str) {
|
|
258
|
+
return str.replace(/\/\//g, "/");
|
|
259
|
+
}
|
|
260
|
+
const noop = () => {
|
|
261
|
+
};
|
|
262
|
+
function toArray(array) {
|
|
263
|
+
array = array || [];
|
|
264
|
+
if (Array.isArray(array))
|
|
265
|
+
return array;
|
|
266
|
+
return [array];
|
|
267
|
+
}
|
|
268
|
+
const toString = (v) => Object.prototype.toString.call(v);
|
|
269
|
+
const isPlainObject = (val) => toString(val) === "[object Object]";
|
|
270
|
+
function isObject(item) {
|
|
271
|
+
return item != null && typeof item === "object" && !Array.isArray(item);
|
|
272
|
+
}
|
|
273
|
+
function deepMerge(target, ...sources) {
|
|
274
|
+
if (!sources.length)
|
|
275
|
+
return target;
|
|
276
|
+
const source = sources.shift();
|
|
277
|
+
if (source === void 0)
|
|
278
|
+
return target;
|
|
279
|
+
if (isMergableObject(target) && isMergableObject(source)) {
|
|
280
|
+
Object.keys(source).forEach((key) => {
|
|
281
|
+
if (isMergableObject(source[key])) {
|
|
282
|
+
if (!target[key])
|
|
283
|
+
target[key] = {};
|
|
284
|
+
deepMerge(target[key], source[key]);
|
|
285
|
+
} else if (Array.isArray(source[key])) {
|
|
286
|
+
if (!target[key])
|
|
287
|
+
target[key] = [];
|
|
288
|
+
target[key].push(...source[key]);
|
|
289
|
+
} else {
|
|
290
|
+
target[key] = source[key];
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
return deepMerge(target, ...sources);
|
|
295
|
+
}
|
|
296
|
+
function isMergableObject(item) {
|
|
297
|
+
return isPlainObject(item) && !Array.isArray(item);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function getTests(suite) {
|
|
301
|
+
return toArray(suite).flatMap((s) => s.type === "test" ? [s] : s.tasks.flatMap((c) => c.type === "test" ? [c] : getTests(c)));
|
|
302
|
+
}
|
|
303
|
+
function getSuites(suite) {
|
|
304
|
+
return toArray(suite).flatMap((s) => s.type === "suite" ? [s, ...getSuites(s.tasks)] : []);
|
|
305
|
+
}
|
|
306
|
+
function hasTests(suite) {
|
|
307
|
+
return toArray(suite).some((s) => s.tasks.some((c) => c.type === "test" || hasTests(c)));
|
|
308
|
+
}
|
|
309
|
+
function hasFailed(suite) {
|
|
310
|
+
return toArray(suite).some((s) => {
|
|
311
|
+
var _a;
|
|
312
|
+
return ((_a = s.result) == null ? void 0 : _a.state) === "fail" || s.type === "suite" && hasFailed(s.tasks);
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
function hasFailedSnapshot(suite) {
|
|
316
|
+
return getTests(suite).some((s) => {
|
|
317
|
+
var _a, _b;
|
|
318
|
+
const message = (_b = (_a = s.result) == null ? void 0 : _a.error) == null ? void 0 : _b.message;
|
|
319
|
+
return message == null ? void 0 : message.match(/Snapshot .* mismatched/);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
function getNames(task) {
|
|
323
|
+
const names = [task.name];
|
|
324
|
+
let current = task;
|
|
325
|
+
while ((current == null ? void 0 : current.suite) || (current == null ? void 0 : current.file)) {
|
|
326
|
+
current = current.suite || current.file;
|
|
327
|
+
if (current == null ? void 0 : current.name)
|
|
328
|
+
names.unshift(current.name);
|
|
329
|
+
}
|
|
330
|
+
return names;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
const isWindows = process.platform === "win32";
|
|
334
|
+
function partitionSuiteChildren(suite) {
|
|
335
|
+
let tasksGroup = [];
|
|
336
|
+
const tasksGroups = [];
|
|
337
|
+
for (const c2 of suite.tasks) {
|
|
338
|
+
if (tasksGroup.length === 0 || c2.concurrent === tasksGroup[0].concurrent) {
|
|
339
|
+
tasksGroup.push(c2);
|
|
340
|
+
} else {
|
|
341
|
+
tasksGroups.push(tasksGroup);
|
|
342
|
+
tasksGroup = [c2];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (tasksGroup.length > 0)
|
|
346
|
+
tasksGroups.push(tasksGroup);
|
|
347
|
+
return tasksGroups;
|
|
348
|
+
}
|
|
349
|
+
function getFullName(task) {
|
|
350
|
+
return getNames(task).join(c.dim(" > "));
|
|
351
|
+
}
|
|
352
|
+
async function ensurePackageInstalled(dependency, promptInstall = !process.env.CI && process.stdout.isTTY) {
|
|
353
|
+
if (isPackageExists(dependency))
|
|
354
|
+
return true;
|
|
355
|
+
process.stderr.write(c.red(`${c.inverse(c.red(" MISSING DEP "))} Can not find dependency '${dependency}'
|
|
356
|
+
|
|
357
|
+
`));
|
|
358
|
+
if (!promptInstall)
|
|
359
|
+
return false;
|
|
360
|
+
const prompts = await import('./index-fa899e66.js').then(function (n) { return n.i; });
|
|
361
|
+
const { install } = await prompts.prompt({
|
|
362
|
+
type: "confirm",
|
|
363
|
+
name: "install",
|
|
364
|
+
message: c.reset(`Do you want to install ${c.green(dependency)}?`)
|
|
365
|
+
});
|
|
366
|
+
if (install) {
|
|
367
|
+
await (await import('./index-ce49e384.js')).installPackage(dependency, { dev: true });
|
|
368
|
+
process.stderr.write(c.yellow(`
|
|
369
|
+
Package ${dependency} installed, re-run the command to start.
|
|
370
|
+
`));
|
|
371
|
+
process.exit(1);
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
function getCallLastIndex(code) {
|
|
377
|
+
let charIndex = -1;
|
|
378
|
+
let inString = null;
|
|
379
|
+
let startedBracers = 0;
|
|
380
|
+
let endedBracers = 0;
|
|
381
|
+
let beforeChar = null;
|
|
382
|
+
while (charIndex <= code.length) {
|
|
383
|
+
beforeChar = code[charIndex];
|
|
384
|
+
charIndex++;
|
|
385
|
+
const char = code[charIndex];
|
|
386
|
+
const isCharString = char === '"' || char === "'" || char === "`";
|
|
387
|
+
if (isCharString && beforeChar !== "\\") {
|
|
388
|
+
if (inString === char)
|
|
389
|
+
inString = null;
|
|
390
|
+
else if (!inString)
|
|
391
|
+
inString = char;
|
|
392
|
+
}
|
|
393
|
+
if (!inString) {
|
|
394
|
+
if (char === "(")
|
|
395
|
+
startedBracers++;
|
|
396
|
+
if (char === ")")
|
|
397
|
+
endedBracers++;
|
|
398
|
+
}
|
|
399
|
+
if (startedBracers && endedBracers && startedBracers === endedBracers)
|
|
400
|
+
return charIndex;
|
|
401
|
+
}
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
export { notNullish as a, isAbsolute as b, c, relative as d, ensurePackageInstalled as e, dirname as f, basename as g, getFullName as h, isObject as i, hasFailed as j, hasFailedSnapshot as k, getSuites as l, getTests as m, noop as n, deepMerge as o, getCallLastIndex as p, isWindows as q, resolve as r, slash as s, toArray as t, mergeSlashes as u, index as v, getNames as w, partitionSuiteChildren as x, hasTests as y };
|
|
406
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtZjU1ZTdiNTkuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9waWNvY29sb3JzQDEuMC4wL25vZGVfbW9kdWxlcy9waWNvY29sb3JzL3BpY29jb2xvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMC4yLjAvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3QvaW5kZXgubWpzIiwiLi4vc3JjL3V0aWxzL2Jhc2UudHMiLCIuLi9zcmMvdXRpbHMvdGFza3MudHMiLCIuLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHR0eSA9IHJlcXVpcmUoXCJ0dHlcIilcblxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKFwiTk9fQ09MT1JcIiBpbiBwcm9jZXNzLmVudiB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoXCJGT1JDRV9DT0xPUlwiIGluIHByb2Nlc3MuZW52IHx8XG5cdFx0cHJvY2Vzcy5hcmd2LmluY2x1ZGVzKFwiLS1jb2xvclwiKSB8fFxuXHRcdHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fFxuXHRcdCh0dHkuaXNhdHR5KDEpICYmIHByb2Nlc3MuZW52LlRFUk0gIT09IFwiZHVtYlwiKSB8fFxuXHRcdFwiQ0lcIiBpbiBwcm9jZXNzLmVudilcblxubGV0IGZvcm1hdHRlciA9XG5cdChvcGVuLCBjbG9zZSwgcmVwbGFjZSA9IG9wZW4pID0+XG5cdGlucHV0ID0+IHtcblx0XHRsZXQgc3RyaW5nID0gXCJcIiArIGlucHV0XG5cdFx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2YoY2xvc2UsIG9wZW4ubGVuZ3RoKVxuXHRcdHJldHVybiB+aW5kZXhcblx0XHRcdD8gb3BlbiArIHJlcGxhY2VDbG9zZShzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgKyBjbG9zZVxuXHRcdFx0OiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fVxuXG5sZXQgcmVwbGFjZUNsb3NlID0gKHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGluZGV4KSA9PiB7XG5cdGxldCBzdGFydCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVxuXHRsZXQgZW5kID0gc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIGNsb3NlLmxlbmd0aClcblx0bGV0IG5leHRJbmRleCA9IGVuZC5pbmRleE9mKGNsb3NlKVxuXHRyZXR1cm4gfm5leHRJbmRleCA/IHN0YXJ0ICsgcmVwbGFjZUNsb3NlKGVuZCwgY2xvc2UsIHJlcGxhY2UsIG5leHRJbmRleCkgOiBzdGFydCArIGVuZFxufVxuXG5sZXQgY3JlYXRlQ29sb3JzID0gKGVuYWJsZWQgPSBpc0NvbG9yU3VwcG9ydGVkKSA9PiAoe1xuXHRpc0NvbG9yU3VwcG9ydGVkOiBlbmFibGVkLFxuXHRyZXNldDogZW5hYmxlZCA/IHMgPT4gYFxceDFiWzBtJHtzfVxceDFiWzBtYCA6IFN0cmluZyxcblx0Ym9sZDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzFtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMW1cIikgOiBTdHJpbmcsXG5cdGRpbTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzJtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMm1cIikgOiBTdHJpbmcsXG5cdGl0YWxpYzogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzNtXCIsIFwiXFx4MWJbMjNtXCIpIDogU3RyaW5nLFxuXHR1bmRlcmxpbmU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0bVwiLCBcIlxceDFiWzI0bVwiKSA6IFN0cmluZyxcblx0aW52ZXJzZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzdtXCIsIFwiXFx4MWJbMjdtXCIpIDogU3RyaW5nLFxuXHRoaWRkZW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls4bVwiLCBcIlxceDFiWzI4bVwiKSA6IFN0cmluZyxcblx0c3RyaWtldGhyb3VnaDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzltXCIsIFwiXFx4MWJbMjltXCIpIDogU3RyaW5nLFxuXHRibGFjazogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzMwbVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0cmVkOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzFtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRncmVlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzMybVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0eWVsbG93OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzNtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRibHVlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzRtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRtYWdlbnRhOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzVtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRjeWFuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzZtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHR3aGl0ZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzM3bVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0Z3JheTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzkwbVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0YmdCbGFjazogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQwbVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdSZWQ6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0MW1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnR3JlZW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0Mm1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnWWVsbG93OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDNtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ0JsdWU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0NG1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnTWFnZW50YTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQ1bVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdDeWFuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDZtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ1doaXRlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDdtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb2xvcnMoKVxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQ29sb3JzID0gY3JlYXRlQ29sb3JzXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuZnVuY3Rpb24gbm9ybWFsaXplV2luZG93c1BhdGgoaW5wdXQgPSBcIlwiKSB7XG4gIGlmICghaW5wdXQuaW5jbHVkZXMoXCJcXFxcXCIpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbn1cblxuY29uc3QgX1VOQ19SRUdFWCA9IC9eWy9dWy9dLztcbmNvbnN0IF9VTkNfRFJJVkVfUkVHRVggPSAvXlsvXVsvXShbLl17MSwyfVsvXSk/KFthLXpBLVpdKTpbL10vO1xuY29uc3QgX0lTX0FCU09MVVRFX1JFID0gL15cXC98XlxcXFx8XlthLXpBLVpdOlsvXFxcXF0vO1xuY29uc3Qgc2VwID0gXCIvXCI7XG5jb25zdCBkZWxpbWl0ZXIgPSBcIjpcIjtcbmNvbnN0IG5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgyKSB7XG4gIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgcGF0aDIgPSBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoMik7XG4gIGNvbnN0IGlzVU5DUGF0aCA9IHBhdGgyLm1hdGNoKF9VTkNfUkVHRVgpO1xuICBjb25zdCBoYXNVTkNEcml2ZSA9IGlzVU5DUGF0aCAmJiBwYXRoMi5tYXRjaChfVU5DX0RSSVZFX1JFR0VYKTtcbiAgY29uc3QgaXNQYXRoQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgyKTtcbiAgY29uc3QgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoMltwYXRoMi5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gIHBhdGgyID0gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCAhaXNQYXRoQWJzb2x1dGUpO1xuICBpZiAocGF0aDIubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzUGF0aEFic29sdXRlKSB7XG4gICAgICByZXR1cm4gXCIvXCI7XG4gICAgfVxuICAgIHJldHVybiB0cmFpbGluZ1NlcGFyYXRvciA/IFwiLi9cIiA6IFwiLlwiO1xuICB9XG4gIGlmICh0cmFpbGluZ1NlcGFyYXRvcikge1xuICAgIHBhdGgyICs9IFwiL1wiO1xuICB9XG4gIGlmIChpc1VOQ1BhdGgpIHtcbiAgICBpZiAoaGFzVU5DRHJpdmUpIHtcbiAgICAgIHJldHVybiBgLy8uLyR7cGF0aDJ9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAvLyR7cGF0aDJ9YDtcbiAgfVxuICByZXR1cm4gaXNQYXRoQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocGF0aDIpID8gYC8ke3BhdGgyfWAgOiBwYXRoMjtcbn07XG5jb25zdCBqb2luID0gZnVuY3Rpb24oLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgbGV0IGpvaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChqb2luZWQgPT09IHZvaWQgMCkge1xuICAgICAgICBqb2luZWQgPSBhcmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqb2luZWQgKz0gYC8ke2FyZ31gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoam9pbmVkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpO1xufTtcbmNvbnN0IHJlc29sdmUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gIGFyZ3MgPSBhcmdzLm1hcCgoYXJnKSA9PiBub3JtYWxpemVXaW5kb3dzUGF0aChhcmcpKTtcbiAgbGV0IHJlc29sdmVkUGF0aCA9IFwiXCI7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBhcmdzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIGNvbnN0IHBhdGgyID0gaSA+PSAwID8gYXJnc1tpXSA6IHByb2Nlc3MuY3dkKCk7XG4gICAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGgyfS8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgyKTtcbiAgfVxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSk7XG4gIGlmIChyZXNvbHZlZEFic29sdXRlICYmICFpc0Fic29sdXRlKHJlc29sdmVkUGF0aCkpIHtcbiAgICByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGgubGVuZ3RoID4gMCA/IHJlc29sdmVkUGF0aCA6IFwiLlwiO1xufTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhwYXRoMiwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIGxldCBsYXN0U2xhc2ggPSAtMTtcbiAgbGV0IGRvdHMgPSAwO1xuICBsZXQgY2hhciA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPCBwYXRoMi5sZW5ndGgpIHtcbiAgICAgIGNoYXIgPSBwYXRoMltpXTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhciA9IFwiL1wiO1xuICAgIH1cbiAgICBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIDsgZWxzZSBpZiAoZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJlcyA9IFwiXCI7XG4gICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgcmVzICs9IHJlcy5sZW5ndGggPiAwID8gXCIvLi5cIiA6IFwiLi5cIjtcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlcyArPSBgLyR7cGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaSl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgPSBwYXRoMi5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIuXCIgJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufTtcbmNvbnN0IHRvTmFtZXNwYWNlZFBhdGggPSBmdW5jdGlvbihwKSB7XG4gIHJldHVybiBub3JtYWxpemVXaW5kb3dzUGF0aChwKTtcbn07XG5jb25zdCBleHRuYW1lID0gZnVuY3Rpb24ocCkge1xuICByZXR1cm4gcGF0aC5wb3NpeC5leHRuYW1lKG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHApKTtcbn07XG5jb25zdCByZWxhdGl2ZSA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gIHJldHVybiBwYXRoLnBvc2l4LnJlbGF0aXZlKG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGZyb20pLCBub3JtYWxpemVXaW5kb3dzUGF0aCh0bykpO1xufTtcbmNvbnN0IGRpcm5hbWUgPSBmdW5jdGlvbihwKSB7XG4gIHJldHVybiBwYXRoLnBvc2l4LmRpcm5hbWUobm9ybWFsaXplV2luZG93c1BhdGgocCkpO1xufTtcbmNvbnN0IGZvcm1hdCA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgucG9zaXguZm9ybWF0KHApKTtcbn07XG5jb25zdCBiYXNlbmFtZSA9IGZ1bmN0aW9uKHAsIGV4dCkge1xuICByZXR1cm4gcGF0aC5wb3NpeC5iYXNlbmFtZShub3JtYWxpemVXaW5kb3dzUGF0aChwKSwgZXh0KTtcbn07XG5jb25zdCBwYXJzZSA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIHBhdGgucG9zaXgucGFyc2Uobm9ybWFsaXplV2luZG93c1BhdGgocCkpO1xufTtcblxuY29uc3QgX3BhdGggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgc2VwOiBzZXAsXG4gIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgam9pbjogam9pbixcbiAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgbm9ybWFsaXplU3RyaW5nOiBub3JtYWxpemVTdHJpbmcsXG4gIGlzQWJzb2x1dGU6IGlzQWJzb2x1dGUsXG4gIHRvTmFtZXNwYWNlZFBhdGg6IHRvTmFtZXNwYWNlZFBhdGgsXG4gIGV4dG5hbWU6IGV4dG5hbWUsXG4gIHJlbGF0aXZlOiByZWxhdGl2ZSxcbiAgZGlybmFtZTogZGlybmFtZSxcbiAgZm9ybWF0OiBmb3JtYXQsXG4gIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgcGFyc2U6IHBhcnNlXG59KTtcblxuY29uc3QgaW5kZXggPSB7XG4gIC4uLl9wYXRoXG59O1xuXG5leHBvcnQgeyBiYXNlbmFtZSwgaW5kZXggYXMgZGVmYXVsdCwgZGVsaW1pdGVyLCBkaXJuYW1lLCBleHRuYW1lLCBmb3JtYXQsIGlzQWJzb2x1dGUsIGpvaW4sIG5vcm1hbGl6ZSwgbm9ybWFsaXplU3RyaW5nLCBwYXJzZSwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCwgdG9OYW1lc3BhY2VkUGF0aCB9O1xuIiwiaW1wb3J0IHR5cGUgeyBBcnJheWFibGUsIERlZXBNZXJnZSwgTnVsbGFibGUgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGxpc2g8VD4odjogVCB8IG51bGwgfCB1bmRlZmluZWQpOiB2IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgcmV0dXJuIHYgIT0gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xhc2goc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXFxcL2csICcvJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG59XG5cbmV4cG9ydCBjb25zdCBub29wID0gKCkgPT4geyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZTxUPih2YWw6IFQpOiBUIHtcbiAgbGV0IGs6IGFueSwgb3V0OiBhbnksIHRtcDogYW55XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIG91dCA9IEFycmF5KGsgPSB2YWwubGVuZ3RoKVxuICAgIHdoaWxlIChrLS0pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgIG91dFtrXSA9ICh0bXAgPSB2YWxba10pICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnID8gY2xvbmUodG1wKSA6IHRtcFxuICAgIHJldHVybiBvdXQgYXMgYW55XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgb3V0ID0ge30gLy8gbnVsbFxuICAgIGZvciAoayBpbiB2YWwpIHtcbiAgICAgIGlmIChrID09PSAnX19wcm90b19fJykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3V0LCBrLCB7XG4gICAgICAgICAgdmFsdWU6IGNsb25lKCh2YWwgYXMgYW55KVtrXSksXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gICAgICAgIG91dFtrXSA9ICh0bXAgPSAodmFsIGFzIGFueSlba10pICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnID8gY2xvbmUodG1wKSA6IHRtcFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICByZXR1cm4gdmFsXG59XG4vKipcbiAqIENvbnZlcnQgYEFycmF5YWJsZTxUPmAgdG8gYEFycmF5PFQ+YFxuICpcbiAqIEBjYXRlZ29yeSBBcnJheVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5PFQ+KGFycmF5PzogTnVsbGFibGU8QXJyYXlhYmxlPFQ+Pik6IEFycmF5PFQ+IHtcbiAgYXJyYXkgPSBhcnJheSB8fCBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpXG4gICAgcmV0dXJuIGFycmF5XG4gIHJldHVybiBbYXJyYXldXG59XG5cbmV4cG9ydCBjb25zdCB0b1N0cmluZyA9ICh2OiBhbnkpID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KVxuZXhwb3J0IGNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsOiBhbnkpOiB2YWwgaXMgb2JqZWN0ID0+IHRvU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChpdGVtOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGl0ZW0pXG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSA6UFxuICpcbiAqIFdpbGwgbWVyZ2Ugb2JqZWN0cyBvbmx5IGlmIHRoZXkgYXJlIHBsYWluXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2U8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCwgUyBleHRlbmRzIG9iamVjdCA9IFQ+KHRhcmdldDogVCwgLi4uc291cmNlczogU1tdKTogRGVlcE1lcmdlPFQsIFM+IHtcbiAgaWYgKCFzb3VyY2VzLmxlbmd0aClcbiAgICByZXR1cm4gdGFyZ2V0IGFzIGFueVxuXG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKVxuICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHRhcmdldCBhcyBhbnlcblxuICBpZiAoaXNNZXJnYWJsZU9iamVjdCh0YXJnZXQpICYmIGlzTWVyZ2FibGVPYmplY3Qoc291cmNlKSkge1xuICAgIChPYmplY3Qua2V5cyhzb3VyY2UpIGFzIChrZXlvZiBTICYga2V5b2YgVClbXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaXNNZXJnYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgaWYgKCF0YXJnZXRba2V5XSlcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHt9IGFzIGFueVxuXG4gICAgICAgIGRlZXBNZXJnZSh0YXJnZXRba2V5XSBhcyBhbnksIHNvdXJjZVtrZXldIGFzIGFueSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlW2tleV0pKSB7XG4gICAgICAgIGlmICghdGFyZ2V0W2tleV0pXG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBbXSBhcyBhbnlcblxuICAgICAgICAodGFyZ2V0W2tleV0gYXMgYW55KS5wdXNoKC4uLnNvdXJjZVtrZXldIGFzIGFueSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldIGFzIGFueVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZGVlcE1lcmdlKHRhcmdldCwgLi4uc291cmNlcylcbn1cblxuZnVuY3Rpb24gaXNNZXJnYWJsZU9iamVjdChpdGVtOiBhbnkpOiBpdGVtIGlzIE9iamVjdCB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGl0ZW0pICYmICFBcnJheS5pc0FycmF5KGl0ZW0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEFycmF5YWJsZSwgU3VpdGUsIFRhc2ssIFRlc3QgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXN0cyhzdWl0ZTogQXJyYXlhYmxlPFRhc2s+KTogVGVzdFtdIHtcbiAgcmV0dXJuIHRvQXJyYXkoc3VpdGUpLmZsYXRNYXAocyA9PiBzLnR5cGUgPT09ICd0ZXN0JyA/IFtzXSA6IHMudGFza3MuZmxhdE1hcChjID0+IGMudHlwZSA9PT0gJ3Rlc3QnID8gW2NdIDogZ2V0VGVzdHMoYykpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFza3ModGFza3M6IEFycmF5YWJsZTxUYXNrPiA9IFtdKTogVGFza1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkodGFza3MpLmZsYXRNYXAocyA9PiBzLnR5cGUgPT09ICd0ZXN0JyA/IFtzXSA6IFtzLCAuLi5nZXRUYXNrcyhzLnRhc2tzKV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWl0ZXMoc3VpdGU6IEFycmF5YWJsZTxUYXNrPik6IFN1aXRlW10ge1xuICByZXR1cm4gdG9BcnJheShzdWl0ZSkuZmxhdE1hcChzID0+IHMudHlwZSA9PT0gJ3N1aXRlJyA/IFtzLCAuLi5nZXRTdWl0ZXMocy50YXNrcyldIDogW10pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNUZXN0cyhzdWl0ZTogQXJyYXlhYmxlPFN1aXRlPik6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9BcnJheShzdWl0ZSkuc29tZShzID0+IHMudGFza3Muc29tZShjID0+IGMudHlwZSA9PT0gJ3Rlc3QnIHx8IGhhc1Rlc3RzKGMgYXMgU3VpdGUpKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZhaWxlZChzdWl0ZTogQXJyYXlhYmxlPFRhc2s+KTogYm9vbGVhbiB7XG4gIHJldHVybiB0b0FycmF5KHN1aXRlKS5zb21lKHMgPT4gcy5yZXN1bHQ/LnN0YXRlID09PSAnZmFpbCcgfHwgKHMudHlwZSA9PT0gJ3N1aXRlJyAmJiBoYXNGYWlsZWQocy50YXNrcykpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRmFpbGVkU25hcHNob3Qoc3VpdGU6IEFycmF5YWJsZTxUYXNrPik6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0VGVzdHMoc3VpdGUpLnNvbWUoKHMpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gcy5yZXN1bHQ/LmVycm9yPy5tZXNzYWdlXG4gICAgcmV0dXJuIG1lc3NhZ2U/Lm1hdGNoKC9TbmFwc2hvdCAuKiBtaXNtYXRjaGVkLylcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVzKHRhc2s6IFRhc2spIHtcbiAgY29uc3QgbmFtZXMgPSBbdGFzay5uYW1lXVxuICBsZXQgY3VycmVudDogVGFzayB8IHVuZGVmaW5lZCA9IHRhc2tcblxuICB3aGlsZSAoY3VycmVudD8uc3VpdGUgfHwgY3VycmVudD8uZmlsZSkge1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LnN1aXRlIHx8IGN1cnJlbnQuZmlsZVxuICAgIGlmIChjdXJyZW50Py5uYW1lKVxuICAgICAgbmFtZXMudW5zaGlmdChjdXJyZW50Lm5hbWUpXG4gIH1cblxuICByZXR1cm4gbmFtZXNcbn1cbiIsImltcG9ydCBjIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgeyBpc1BhY2thZ2VFeGlzdHMgfSBmcm9tICdsb2NhbC1wa2cnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IFN1aXRlLCBUYXNrIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXROYW1lcyB9IGZyb20gJy4vdGFza3MnXG5cbmV4cG9ydCAqIGZyb20gJy4vdGFza3MnXG5leHBvcnQgKiBmcm9tICcuL3BhdGgnXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG5cbi8qKlxuICogUGFydGl0aW9uIGluIHRhc2tzIGdyb3VwcyBieSBjb25zZWN1dGl2ZSBjb25jdXJyZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb25TdWl0ZUNoaWxkcmVuKHN1aXRlOiBTdWl0ZSkge1xuICBsZXQgdGFza3NHcm91cDogVGFza1tdID0gW11cbiAgY29uc3QgdGFza3NHcm91cHM6IFRhc2tbXVtdID0gW11cbiAgZm9yIChjb25zdCBjIG9mIHN1aXRlLnRhc2tzKSB7XG4gICAgaWYgKHRhc2tzR3JvdXAubGVuZ3RoID09PSAwIHx8IGMuY29uY3VycmVudCA9PT0gdGFza3NHcm91cFswXS5jb25jdXJyZW50KSB7XG4gICAgICB0YXNrc0dyb3VwLnB1c2goYylcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0YXNrc0dyb3Vwcy5wdXNoKHRhc2tzR3JvdXApXG4gICAgICB0YXNrc0dyb3VwID0gW2NdXG4gICAgfVxuICB9XG4gIGlmICh0YXNrc0dyb3VwLmxlbmd0aCA+IDApXG4gICAgdGFza3NHcm91cHMucHVzaCh0YXNrc0dyb3VwKVxuXG4gIHJldHVybiB0YXNrc0dyb3Vwc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE5hbWUodGFzazogVGFzaykge1xuICByZXR1cm4gZ2V0TmFtZXModGFzaykuam9pbihjLmRpbSgnID4gJykpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVQYWNrYWdlSW5zdGFsbGVkKFxuICBkZXBlbmRlbmN5OiBzdHJpbmcsXG4gIHByb21wdEluc3RhbGwgPSAhcHJvY2Vzcy5lbnYuQ0kgJiYgcHJvY2Vzcy5zdGRvdXQuaXNUVFksXG4pIHtcbiAgaWYgKGlzUGFja2FnZUV4aXN0cyhkZXBlbmRlbmN5KSlcbiAgICByZXR1cm4gdHJ1ZVxuXG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGMucmVkKGAke2MuaW52ZXJzZShjLnJlZCgnIE1JU1NJTkcgREVQICcpKX0gQ2FuIG5vdCBmaW5kIGRlcGVuZGVuY3kgJyR7ZGVwZW5kZW5jeX0nXFxuXFxuYCkpXG5cbiAgaWYgKCFwcm9tcHRJbnN0YWxsKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHByb21wdHMgPSBhd2FpdCBpbXBvcnQoJ3Byb21wdHMnKVxuICBjb25zdCB7IGluc3RhbGwgfSA9IGF3YWl0IHByb21wdHMucHJvbXB0KHtcbiAgICB0eXBlOiAnY29uZmlybScsXG4gICAgbmFtZTogJ2luc3RhbGwnLFxuICAgIG1lc3NhZ2U6IGMucmVzZXQoYERvIHlvdSB3YW50IHRvIGluc3RhbGwgJHtjLmdyZWVuKGRlcGVuZGVuY3kpfT9gKSxcbiAgfSlcblxuICBpZiAoaW5zdGFsbCkge1xuICAgIGF3YWl0IChhd2FpdCBpbXBvcnQoJ0BhbnRmdS9pbnN0YWxsLXBrZycpKS5pbnN0YWxsUGFja2FnZShkZXBlbmRlbmN5LCB7IGRldjogdHJ1ZSB9KVxuICAgIC8vIFRPRE86IHNvbWVob3cgaXQgZmFpbHMgdG8gbG9hZCB0aGUgcGFja2FnZSBhZnRlciBpbnN0YWxsYXRpb24sIHJlbW92ZSB0aGlzIHdoZW4gaXQncyBmaXhlZFxuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGMueWVsbG93KGBcXG5QYWNrYWdlICR7ZGVwZW5kZW5jeX0gaW5zdGFsbGVkLCByZS1ydW4gdGhlIGNvbW1hbmQgdG8gc3RhcnQuXFxuYCkpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIElmIGNvZGUgc3RhcnRzIHdpdGggYSBmdW5jdGlvbiBjYWxsLCB3aWxsIHJldHVybiBpdHMgbGFzdCBpbmRleCwgcmVzcGVjdGluZyBhcmd1bWVudHMuXG4gKiBUaGlzIHdpbGwgcmV0dXJuIDI1IC0gbGFzdCBlbmRpbmcgY2hhcmFjdGVyIG9mIHRvTWF0Y2ggXCIpXCJcbiAqIEFsc28gd29ya3Mgd2l0aCBjYWxsYmFja3NcbiAqIGBgYFxuICogdG9NYXRjaCh7IHRlc3Q6ICcxMjMnIH0pO1xuICogdG9CZUFsaWFzZWQoJzEyMycpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGxMYXN0SW5kZXgoY29kZTogc3RyaW5nKSB7XG4gIGxldCBjaGFySW5kZXggPSAtMVxuICBsZXQgaW5TdHJpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCBzdGFydGVkQnJhY2VycyA9IDBcbiAgbGV0IGVuZGVkQnJhY2VycyA9IDBcbiAgbGV0IGJlZm9yZUNoYXI6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChjaGFySW5kZXggPD0gY29kZS5sZW5ndGgpIHtcbiAgICBiZWZvcmVDaGFyID0gY29kZVtjaGFySW5kZXhdXG4gICAgY2hhckluZGV4KytcbiAgICBjb25zdCBjaGFyID0gY29kZVtjaGFySW5kZXhdXG5cbiAgICBjb25zdCBpc0NoYXJTdHJpbmcgPSBjaGFyID09PSAnXCInIHx8IGNoYXIgPT09ICdcXCcnIHx8IGNoYXIgPT09ICdgJ1xuXG4gICAgaWYgKGlzQ2hhclN0cmluZyAmJiBiZWZvcmVDaGFyICE9PSAnXFxcXCcpIHtcbiAgICAgIGlmIChpblN0cmluZyA9PT0gY2hhcilcbiAgICAgICAgaW5TdHJpbmcgPSBudWxsXG4gICAgICBlbHNlIGlmICghaW5TdHJpbmcpXG4gICAgICAgIGluU3RyaW5nID0gY2hhclxuICAgIH1cblxuICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgIGlmIChjaGFyID09PSAnKCcpXG4gICAgICAgIHN0YXJ0ZWRCcmFjZXJzKytcbiAgICAgIGlmIChjaGFyID09PSAnKScpXG4gICAgICAgIGVuZGVkQnJhY2VycysrXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ZWRCcmFjZXJzICYmIGVuZGVkQnJhY2VycyAmJiBzdGFydGVkQnJhY2VycyA9PT0gZW5kZWRCcmFjZXJzKVxuICAgICAgcmV0dXJuIGNoYXJJbmRleFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfVxuIl0sIm5hbWVzIjpbInBpY29jb2xvcnNNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUksR0FBRyxHQUFHLFdBQWM7QUFDeEI7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQixDQUFDLEVBQUUsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEUsRUFBRSxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUc7QUFDOUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7QUFDbEMsRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU87QUFDOUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUNoRCxFQUFFLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFDO0FBQ3RCO0FBQ0EsSUFBSSxTQUFTO0FBQ2IsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLElBQUk7QUFDN0IsQ0FBQyxLQUFLLElBQUk7QUFDVixFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFLO0FBQ3pCLEVBQUUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQztBQUNoRCxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2YsS0FBSyxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUs7QUFDL0QsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHLEtBQUs7QUFDMUIsR0FBRTtBQUNGO0FBQ0EsSUFBSSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDdEQsQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxRQUFPO0FBQ2pELENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBQztBQUNqRCxDQUFDLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDO0FBQ25DLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHO0FBQ3ZGLEVBQUM7QUFDRDtBQUNBLElBQUksWUFBWSxHQUFHLENBQUMsT0FBTyxHQUFHLGdCQUFnQixNQUFNO0FBQ3BELENBQUMsZ0JBQWdCLEVBQUUsT0FBTztBQUMxQixDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNO0FBQ3BELENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLE1BQU07QUFDN0UsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsTUFBTTtBQUM1RSxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDL0QsQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsYUFBYSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDbkUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM1RCxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzFELENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDNUQsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzNELENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDOUQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUMzRCxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDM0QsQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM5RCxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDOUQsQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUMvRCxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzdELENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDaEUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzlELENBQUMsRUFBQztBQUNGO0FBQ0FBLGtC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
|
package/dist/index.d.ts
CHANGED
|
@@ -895,7 +895,7 @@ interface InlineConfig {
|
|
|
895
895
|
/**
|
|
896
896
|
* Watch mode
|
|
897
897
|
*
|
|
898
|
-
* @default
|
|
898
|
+
* @default true
|
|
899
899
|
*/
|
|
900
900
|
watch?: boolean;
|
|
901
901
|
/**
|
|
@@ -939,7 +939,7 @@ interface InlineConfig {
|
|
|
939
939
|
/**
|
|
940
940
|
* Default timeout of a hook in milliseconds
|
|
941
941
|
*
|
|
942
|
-
* @default
|
|
942
|
+
* @default 10000
|
|
943
943
|
*/
|
|
944
944
|
hookTimeout?: number;
|
|
945
945
|
/**
|
|
@@ -1073,7 +1073,7 @@ interface UserConfig extends InlineConfig {
|
|
|
1073
1073
|
*/
|
|
1074
1074
|
related?: string[] | string;
|
|
1075
1075
|
}
|
|
1076
|
-
interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'coverage' | 'testNamePattern' | 'related' | 'api'> {
|
|
1076
|
+
interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'coverage' | 'testNamePattern' | 'related' | 'api' | 'reporters'> {
|
|
1077
1077
|
base?: string;
|
|
1078
1078
|
config?: string;
|
|
1079
1079
|
filters?: string[];
|
|
@@ -1081,6 +1081,7 @@ interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'
|
|
|
1081
1081
|
related?: string[];
|
|
1082
1082
|
coverage: ResolvedC8Options;
|
|
1083
1083
|
snapshotOptions: SnapshotStateOptions;
|
|
1084
|
+
reporters: (Reporter | BuiltinReporters)[];
|
|
1084
1085
|
api?: ApiConfig;
|
|
1085
1086
|
}
|
|
1086
1087
|
|
|
@@ -1322,6 +1323,8 @@ interface WebSocketHandlers {
|
|
|
1322
1323
|
interface WebSocketEvents extends Pick<Reporter, 'onCollected' | 'onFinished' | 'onTaskUpdate' | 'onUserConsoleLog'> {
|
|
1323
1324
|
}
|
|
1324
1325
|
|
|
1326
|
+
declare const configDefaults: UserConfig;
|
|
1327
|
+
|
|
1325
1328
|
declare type VitestInlineConfig = InlineConfig;
|
|
1326
1329
|
|
|
1327
1330
|
declare module 'vite' {
|
|
@@ -1419,14 +1422,14 @@ declare global {
|
|
|
1419
1422
|
toHaveNthReturnedWith<E>(nthCall: number, value: E): void;
|
|
1420
1423
|
nthReturnedWith<E>(nthCall: number, value: E): void;
|
|
1421
1424
|
}
|
|
1422
|
-
type VitestAssertion<A> = {
|
|
1423
|
-
[K in keyof A]: A[K] extends Chai.Assertion ? Assertion<
|
|
1424
|
-
};
|
|
1425
|
-
interface Assertion<T = any> extends VitestAssertion<Chai.Assertion>, JestAssertion<T> {
|
|
1425
|
+
type VitestAssertion<A, T> = {
|
|
1426
|
+
[K in keyof A]: A[K] extends Chai.Assertion ? Assertion<T> : A[K] extends (...args: any[]) => any ? A[K] : VitestAssertion<A[K], T>;
|
|
1427
|
+
} & ((type: string, message?: string) => Assertion);
|
|
1428
|
+
interface Assertion<T = any> extends VitestAssertion<Chai.Assertion, T>, JestAssertion<T> {
|
|
1426
1429
|
resolves: Promisify<Assertion<T>>;
|
|
1427
1430
|
rejects: Promisify<Assertion<T>>;
|
|
1428
1431
|
}
|
|
1429
1432
|
}
|
|
1430
1433
|
}
|
|
1431
1434
|
|
|
1432
|
-
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, C8Options, Constructable, CoverageReporter, DeepMerge, DoneCallback, EachFunction, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompatContext, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MergeInsertions, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, Nullable, ParsedStack, Position, Reporter, ResolveIdFunction, ResolvedC8Options, ResolvedConfig, RunMode, RuntimeContext, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotSummary, SnapshotUpdateState, SpyInstance, SpyInstanceFn, Suite, SuiteAPI, SuiteCollector, SuiteFactory, SuiteHooks, Task, TaskBase, TaskResult, TaskResultPack, TaskState, Test, TestAPI, TestFunction, TransformResultWithSource, UncheckedSnapshot, UserConfig, UserConsoleLog, WebSocketEvents, WebSocketHandlers, WorkerContext, WorkerRPC, afterAll, afterEach, beforeAll, beforeEach, describe, expect, fn, isMockFunction, it, spies, spyOn, suite, test, vi, vitest };
|
|
1435
|
+
export { ApiConfig, ArgumentsType, Arrayable, Awaitable, BuiltinEnvironment, C8Options, Constructable, CoverageReporter, DeepMerge, DoneCallback, EachFunction, EnhancedSpy, Environment, EnvironmentOptions, EnvironmentReturn, ErrorWithDiff, File, HookListener, InlineConfig, JSDOMOptions, JestMockCompatContext, MaybeMocked, MaybeMockedConstructor, MaybeMockedDeep, MergeInsertions, MockWithArgs, MockedFunction, MockedFunctionDeep, MockedObject, MockedObjectDeep, ModuleCache, ModuleGraphData, Nullable, ParsedStack, Position, Reporter, ResolveIdFunction, ResolvedC8Options, ResolvedConfig, RunMode, RuntimeContext, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotSummary, SnapshotUpdateState, SpyInstance, SpyInstanceFn, Suite, SuiteAPI, SuiteCollector, SuiteFactory, SuiteHooks, Task, TaskBase, TaskResult, TaskResultPack, TaskState, Test, TestAPI, TestFunction, TransformResultWithSource, UncheckedSnapshot, UserConfig, UserConsoleLog, WebSocketEvents, WebSocketHandlers, WorkerContext, WorkerRPC, afterAll, afterEach, beforeAll, beforeEach, configDefaults, describe, expect, fn, isMockFunction, it, spies, spyOn, suite, test, vi, vitest };
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-
|
|
2
|
-
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-
|
|
1
|
+
export { d as describe, i as it, c as suite, t as test, e as vi, v as vitest } from './vi-93df942a.js';
|
|
2
|
+
export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, e as expect } from './index-e32575f8.js';
|
|
3
3
|
export { fn, isMockFunction, spies, spyOn } from './jest-mock.js';
|
|
4
|
+
export { c as configDefaults } from './constants-8fcbf9b6.js';
|
|
4
5
|
export { assert, default as chai, should } from 'chai';
|
|
5
6
|
import 'util';
|
|
6
|
-
import './index-
|
|
7
|
+
import './index-f55e7b59.js';
|
|
8
|
+
import 'path';
|
|
7
9
|
import 'tty';
|
|
8
10
|
import 'local-pkg';
|
|
9
|
-
import './source-map-
|
|
11
|
+
import './source-map-0ecca7b8.js';
|
|
10
12
|
import './_commonjsHelpers-c9e3b764.js';
|
|
11
13
|
import 'tinyspy';
|
|
12
|
-
|
|
14
|
+
import 'url';
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OyJ9
|
package/dist/node.d.ts
CHANGED
|
@@ -596,7 +596,7 @@ interface InlineConfig {
|
|
|
596
596
|
/**
|
|
597
597
|
* Watch mode
|
|
598
598
|
*
|
|
599
|
-
* @default
|
|
599
|
+
* @default true
|
|
600
600
|
*/
|
|
601
601
|
watch?: boolean;
|
|
602
602
|
/**
|
|
@@ -640,7 +640,7 @@ interface InlineConfig {
|
|
|
640
640
|
/**
|
|
641
641
|
* Default timeout of a hook in milliseconds
|
|
642
642
|
*
|
|
643
|
-
* @default
|
|
643
|
+
* @default 10000
|
|
644
644
|
*/
|
|
645
645
|
hookTimeout?: number;
|
|
646
646
|
/**
|
|
@@ -774,7 +774,7 @@ interface UserConfig extends InlineConfig {
|
|
|
774
774
|
*/
|
|
775
775
|
related?: string[] | string;
|
|
776
776
|
}
|
|
777
|
-
interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'coverage' | 'testNamePattern' | 'related' | 'api'> {
|
|
777
|
+
interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters' | 'coverage' | 'testNamePattern' | 'related' | 'api' | 'reporters'> {
|
|
778
778
|
base?: string;
|
|
779
779
|
config?: string;
|
|
780
780
|
filters?: string[];
|
|
@@ -782,6 +782,7 @@ interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'
|
|
|
782
782
|
related?: string[];
|
|
783
783
|
coverage: ResolvedC8Options;
|
|
784
784
|
snapshotOptions: SnapshotStateOptions;
|
|
785
|
+
reporters: (Reporter | BuiltinReporters)[];
|
|
785
786
|
api?: ApiConfig;
|
|
786
787
|
}
|
|
787
788
|
|
package/dist/node.js
CHANGED
|
@@ -1,28 +1,27 @@
|
|
|
1
|
-
export { V as VitestPlugin, c as createVitest } from './create-
|
|
2
|
-
import './index-
|
|
1
|
+
export { V as VitestPlugin, c as createVitest } from './create-f33bfb34.js';
|
|
2
|
+
import './index-f55e7b59.js';
|
|
3
3
|
import 'path';
|
|
4
|
+
import 'tty';
|
|
5
|
+
import 'local-pkg';
|
|
4
6
|
import 'vite';
|
|
5
7
|
import 'process';
|
|
6
8
|
import 'fs';
|
|
7
|
-
import './constants-
|
|
9
|
+
import './constants-8fcbf9b6.js';
|
|
8
10
|
import 'url';
|
|
9
11
|
import 'os';
|
|
10
12
|
import 'util';
|
|
11
13
|
import 'stream';
|
|
12
14
|
import 'events';
|
|
13
|
-
import './
|
|
14
|
-
import 'tty';
|
|
15
|
-
import 'local-pkg';
|
|
16
|
-
import './client-f15310bf.js';
|
|
15
|
+
import './client-ab3f363e.js';
|
|
17
16
|
import 'module';
|
|
18
17
|
import 'assert';
|
|
19
18
|
import 'vm';
|
|
20
19
|
import 'perf_hooks';
|
|
21
|
-
import './diff-
|
|
22
|
-
import './source-map-
|
|
23
|
-
import './index-
|
|
20
|
+
import './diff-e2ede84f.js';
|
|
21
|
+
import './source-map-0ecca7b8.js';
|
|
22
|
+
import './index-648e7ab2.js';
|
|
24
23
|
import './_commonjsHelpers-c9e3b764.js';
|
|
25
24
|
import 'worker_threads';
|
|
26
25
|
import 'tinypool';
|
|
27
26
|
import './magic-string.es-94000aea.js';
|
|
28
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
|