testcafe 3.7.4 → 3.7.5

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.
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+ /* eslint-disable no-var */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ // Const
5
+ var TRANSFORMED_TYPE_KEY = '@t';
6
+ var CIRCULAR_REF_KEY = '@r';
7
+ var KEY_REQUIRE_ESCAPING_RE = /^#*@(t|r)$/;
8
+ var TYPED_ARRAY_CTORS = {
9
+ 'Int8Array': typeof Int8Array === 'function' ? Int8Array : void 0,
10
+ 'Uint8Array': typeof Uint8Array === 'function' ? Uint8Array : void 0,
11
+ 'Uint8ClampedArray': typeof Uint8ClampedArray === 'function' ? Uint8ClampedArray : void 0,
12
+ 'Int16Array': typeof Int16Array === 'function' ? Int16Array : void 0,
13
+ 'Uint16Array': typeof Uint16Array === 'function' ? Uint16Array : void 0,
14
+ 'Int32Array': typeof Int32Array === 'function' ? Int32Array : void 0,
15
+ 'Uint32Array': typeof Uint32Array === 'function' ? Uint32Array : void 0,
16
+ 'Float32Array': typeof Float32Array === 'function' ? Float32Array : void 0,
17
+ 'Float64Array': typeof Float64Array === 'function' ? Float64Array : void 0,
18
+ };
19
+ var SAFE_ERROR_CTORS = {
20
+ 'Error': Error,
21
+ 'EvalError': EvalError,
22
+ 'RangeError': RangeError,
23
+ 'ReferenceError': ReferenceError,
24
+ 'SyntaxError': SyntaxError,
25
+ 'TypeError': TypeError,
26
+ 'URIError': URIError,
27
+ };
28
+ var ARRAY_BUFFER_SUPPORTED = typeof ArrayBuffer === 'function';
29
+ var MAP_SUPPORTED = typeof Map === 'function';
30
+ var SET_SUPPORTED = typeof Set === 'function';
31
+ var BUFFER_FROM_SUPPORTED = typeof Buffer === 'function';
32
+ var TYPED_ARRAY_SUPPORTED = function (typeName) {
33
+ return !!TYPED_ARRAY_CTORS[typeName];
34
+ };
35
+ // Saved proto functions
36
+ var arrSlice = Array.prototype.slice;
37
+ // Default serializer
38
+ var JSONSerializer = {
39
+ serialize: function (val) {
40
+ return JSON.stringify(val);
41
+ },
42
+ deserialize: function (val) {
43
+ return JSON.parse(val);
44
+ },
45
+ };
46
+ // EncodingTransformer
47
+ var EncodingTransformer = function (val, transforms) {
48
+ this.references = val;
49
+ this.transforms = transforms;
50
+ this.circularCandidates = [];
51
+ this.circularCandidatesDescrs = [];
52
+ this.circularRefCount = 0;
53
+ };
54
+ EncodingTransformer._createRefMark = function (idx) {
55
+ var obj = Object.create(null);
56
+ obj[CIRCULAR_REF_KEY] = idx;
57
+ return obj;
58
+ };
59
+ EncodingTransformer.prototype._createCircularCandidate = function (val, parent, key) {
60
+ this.circularCandidates.push(val);
61
+ this.circularCandidatesDescrs.push({ parent: parent, key: key, refIdx: -1 });
62
+ };
63
+ EncodingTransformer.prototype._applyTransform = function (val, parent, key, transform) {
64
+ var result = Object.create(null);
65
+ var serializableVal = transform.toSerializable(val);
66
+ if (typeof serializableVal === 'object')
67
+ this._createCircularCandidate(val, parent, key);
68
+ result[TRANSFORMED_TYPE_KEY] = transform.type;
69
+ result.data = this._handleValue(serializableVal, parent, key);
70
+ return result;
71
+ };
72
+ EncodingTransformer.prototype._handleArray = function (arr) {
73
+ var result = [];
74
+ for (var i = 0; i < arr.length; i++)
75
+ result[i] = this._handleValue(arr[i], result, i);
76
+ return result;
77
+ };
78
+ EncodingTransformer.prototype._handlePlainObject = function (obj) {
79
+ var replicator = this;
80
+ var result = Object.create(null);
81
+ var ownPropertyNames = Object.getOwnPropertyNames(obj);
82
+ ownPropertyNames.forEach(key => {
83
+ var resultKey = KEY_REQUIRE_ESCAPING_RE.test(key) ? '#' + key : key;
84
+ result[resultKey] = replicator._handleValue(obj[key], result, resultKey);
85
+ });
86
+ return result;
87
+ };
88
+ EncodingTransformer.prototype._handleObject = function (obj, parent, key) {
89
+ this._createCircularCandidate(obj, parent, key);
90
+ return Array.isArray(obj) ? this._handleArray(obj) : this._handlePlainObject(obj);
91
+ };
92
+ EncodingTransformer.prototype._ensureCircularReference = function (obj) {
93
+ var circularCandidateIdx = this.circularCandidates.indexOf(obj);
94
+ if (circularCandidateIdx > -1) {
95
+ var descr = this.circularCandidatesDescrs[circularCandidateIdx];
96
+ if (descr.refIdx === -1)
97
+ descr.refIdx = descr.parent ? ++this.circularRefCount : 0;
98
+ return EncodingTransformer._createRefMark(descr.refIdx);
99
+ }
100
+ return null;
101
+ };
102
+ EncodingTransformer.prototype._handleValue = function (val, parent, key) {
103
+ var type = typeof val;
104
+ var isObject = type === 'object' && val !== null;
105
+ if (isObject) {
106
+ var refMark = this._ensureCircularReference(val);
107
+ if (refMark)
108
+ return refMark;
109
+ }
110
+ for (var i = 0; i < this.transforms.length; i++) {
111
+ var transform = this.transforms[i];
112
+ if (transform.shouldTransform(type, val))
113
+ return this._applyTransform(val, parent, key, transform);
114
+ }
115
+ if (isObject)
116
+ return this._handleObject(val, parent, key);
117
+ return val;
118
+ };
119
+ EncodingTransformer.prototype.transform = function () {
120
+ var references = [this._handleValue(this.references, null, null)];
121
+ for (var i = 0; i < this.circularCandidatesDescrs.length; i++) {
122
+ var descr = this.circularCandidatesDescrs[i];
123
+ if (descr.refIdx > 0) {
124
+ references[descr.refIdx] = descr.parent[descr.key];
125
+ descr.parent[descr.key] = EncodingTransformer._createRefMark(descr.refIdx);
126
+ }
127
+ }
128
+ return references;
129
+ };
130
+ // DecodingTransformer
131
+ var DecodingTransformer = function (references, transformsMap) {
132
+ this.references = references;
133
+ this.transformMap = transformsMap;
134
+ this.activeTransformsStack = [];
135
+ this.visitedRefs = Object.create(null);
136
+ };
137
+ DecodingTransformer.prototype._handlePlainObject = function (obj) {
138
+ var replicator = this;
139
+ var unescaped = Object.create(null);
140
+ var ownPropertyNames = Object.getOwnPropertyNames(obj);
141
+ ownPropertyNames.forEach(key => {
142
+ replicator._handleValue(obj[key], obj, key);
143
+ if (KEY_REQUIRE_ESCAPING_RE.test(key)) {
144
+ // NOTE: use intermediate object to avoid unescaped and escaped keys interference
145
+ // E.g. unescaped "##@t" will be "#@t" which can overwrite escaped "#@t".
146
+ unescaped[key.substring(1)] = obj[key];
147
+ delete obj[key];
148
+ }
149
+ });
150
+ for (var unescapedKey in unescaped)
151
+ obj[unescapedKey] = unescaped[unescapedKey];
152
+ };
153
+ DecodingTransformer.prototype._handleTransformedObject = function (obj, parent, key) {
154
+ var transformType = obj[TRANSFORMED_TYPE_KEY];
155
+ var transform = this.transformMap[transformType];
156
+ if (!transform)
157
+ throw new Error('Can\'t find transform for "' + transformType + '" type.');
158
+ this.activeTransformsStack.push(obj);
159
+ this._handleValue(obj.data, obj, 'data');
160
+ this.activeTransformsStack.pop();
161
+ parent[key] = transform.fromSerializable(obj.data);
162
+ };
163
+ DecodingTransformer.prototype._handleCircularSelfRefDuringTransform = function (refIdx, parent, key) {
164
+ // NOTE: we've hit a hard case: object reference itself during transformation.
165
+ // We can't dereference it since we don't have resulting object yet. And we'll
166
+ // not be able to restore reference lately because we will need to traverse
167
+ // transformed object again and reference might be unreachable or new object contain
168
+ // new circular references. As a workaround we create getter, so once transformation
169
+ // complete, dereferenced property will point to correct transformed object.
170
+ var references = this.references;
171
+ var val = void 0;
172
+ Object.defineProperty(parent, key, {
173
+ configurable: true,
174
+ enumerable: true,
175
+ get: function () {
176
+ if (val === void 0)
177
+ val = references[refIdx];
178
+ return val;
179
+ },
180
+ set: function (value) {
181
+ val = value;
182
+ // eslint-disable-next-line no-setter-return
183
+ return val;
184
+ },
185
+ });
186
+ };
187
+ DecodingTransformer.prototype._handleCircularRef = function (refIdx, parent, key) {
188
+ if (this.activeTransformsStack.indexOf(this.references[refIdx]) > -1)
189
+ this._handleCircularSelfRefDuringTransform(refIdx, parent, key);
190
+ else {
191
+ if (!this.visitedRefs[refIdx]) {
192
+ this.visitedRefs[refIdx] = true;
193
+ this._handleValue(this.references[refIdx], this.references, refIdx);
194
+ }
195
+ parent[key] = this.references[refIdx];
196
+ }
197
+ };
198
+ DecodingTransformer.prototype._handleValue = function (val, parent, key) {
199
+ if (typeof val !== 'object' || val === null)
200
+ return;
201
+ var refIdx = val[CIRCULAR_REF_KEY];
202
+ if (refIdx !== void 0)
203
+ this._handleCircularRef(refIdx, parent, key);
204
+ else if (val[TRANSFORMED_TYPE_KEY])
205
+ this._handleTransformedObject(val, parent, key);
206
+ else if (Array.isArray(val)) {
207
+ for (var i = 0; i < val.length; i++)
208
+ this._handleValue(val[i], val, i);
209
+ }
210
+ else
211
+ this._handlePlainObject(val);
212
+ };
213
+ DecodingTransformer.prototype.transform = function () {
214
+ this.visitedRefs[0] = true;
215
+ this._handleValue(this.references[0], this.references, 0);
216
+ return this.references[0];
217
+ };
218
+ // Transforms
219
+ var builtInTransforms = [
220
+ {
221
+ type: '[[NaN]]',
222
+ shouldTransform: function (type, val) {
223
+ return type === 'number' && isNaN(val);
224
+ },
225
+ toSerializable: function () {
226
+ return '';
227
+ },
228
+ fromSerializable: function () {
229
+ return NaN;
230
+ },
231
+ },
232
+ {
233
+ type: '[[undefined]]',
234
+ shouldTransform: function (type) {
235
+ return type === 'undefined';
236
+ },
237
+ toSerializable: function () {
238
+ return '';
239
+ },
240
+ fromSerializable: function () {
241
+ return void 0;
242
+ },
243
+ },
244
+ {
245
+ type: '[[Date]]',
246
+ shouldTransform: function (type, val) {
247
+ return val instanceof Date;
248
+ },
249
+ toSerializable: function (date) {
250
+ return date.getTime();
251
+ },
252
+ fromSerializable: function (val) {
253
+ var date = new Date();
254
+ date.setTime(val);
255
+ return date;
256
+ },
257
+ },
258
+ {
259
+ type: '[[RegExp]]',
260
+ shouldTransform: function (type, val) {
261
+ return val instanceof RegExp;
262
+ },
263
+ toSerializable: function (re) {
264
+ var result = {
265
+ src: re.source,
266
+ flags: '',
267
+ };
268
+ if (re.global)
269
+ result.flags += 'g';
270
+ if (re.ignoreCase)
271
+ result.flags += 'i';
272
+ if (re.multiline)
273
+ result.flags += 'm';
274
+ return result;
275
+ },
276
+ fromSerializable: function (val) {
277
+ return new RegExp(val.src, val.flags);
278
+ },
279
+ },
280
+ {
281
+ type: '[[Error]]',
282
+ shouldTransform: function (type, val) {
283
+ return val instanceof Error;
284
+ },
285
+ toSerializable: function (err) {
286
+ return {
287
+ name: err.name,
288
+ message: err.message,
289
+ stack: err.stack,
290
+ };
291
+ },
292
+ fromSerializable: function (val) {
293
+ var Ctor = SAFE_ERROR_CTORS[val.name] || Error;
294
+ var err = new Ctor(val.message);
295
+ err.stack = val.stack;
296
+ return err;
297
+ },
298
+ },
299
+ {
300
+ type: '[[ArrayBuffer]]',
301
+ shouldTransform: function (type, val) {
302
+ return ARRAY_BUFFER_SUPPORTED && val instanceof ArrayBuffer;
303
+ },
304
+ toSerializable: function (buffer) {
305
+ var view = new Int8Array(buffer);
306
+ return arrSlice.call(view);
307
+ },
308
+ fromSerializable: function (val) {
309
+ if (ARRAY_BUFFER_SUPPORTED) {
310
+ var buffer = new ArrayBuffer(val.length);
311
+ var view = new Int8Array(buffer);
312
+ view.set(val);
313
+ return buffer;
314
+ }
315
+ return val;
316
+ },
317
+ },
318
+ {
319
+ type: '[[Buffer]]',
320
+ shouldTransform: function (type, val) {
321
+ return BUFFER_FROM_SUPPORTED && val instanceof Buffer;
322
+ },
323
+ toSerializable: function (buffer) {
324
+ return arrSlice.call(buffer);
325
+ },
326
+ fromSerializable: function (val) {
327
+ if (BUFFER_FROM_SUPPORTED)
328
+ return Buffer.from(val);
329
+ return val;
330
+ },
331
+ },
332
+ {
333
+ type: '[[TypedArray]]',
334
+ shouldTransform: function (type, val) {
335
+ return Object.keys(TYPED_ARRAY_CTORS).some(ctorName => {
336
+ return TYPED_ARRAY_SUPPORTED(ctorName) && val instanceof TYPED_ARRAY_CTORS[ctorName];
337
+ });
338
+ },
339
+ toSerializable: function (arr) {
340
+ return {
341
+ ctorName: arr.constructor.name,
342
+ arr: arrSlice.call(arr),
343
+ };
344
+ },
345
+ fromSerializable: function (val) {
346
+ return TYPED_ARRAY_SUPPORTED(val.ctorName) ? new TYPED_ARRAY_CTORS[val.ctorName](val.arr) : val.arr;
347
+ },
348
+ },
349
+ {
350
+ type: '[[Map]]',
351
+ shouldTransform: function (type, val) {
352
+ return MAP_SUPPORTED && val instanceof Map;
353
+ },
354
+ toSerializable: function (map) {
355
+ var flattenedKVArr = [];
356
+ map.forEach((val, key) => {
357
+ flattenedKVArr.push(key);
358
+ flattenedKVArr.push(val);
359
+ });
360
+ return flattenedKVArr;
361
+ },
362
+ fromSerializable: function (val) {
363
+ if (MAP_SUPPORTED) {
364
+ // NOTE: new Map(iterable) is not supported by all browsers
365
+ var map = new Map();
366
+ for (var i = 0; i < val.length; i += 2)
367
+ map.set(val[i], val[i + 1]);
368
+ return map;
369
+ }
370
+ var kvArr = [];
371
+ for (var j = 0; j < val.length; j += 2)
372
+ kvArr.push([val[j], val[j + 1]]);
373
+ return kvArr;
374
+ },
375
+ },
376
+ {
377
+ type: '[[Set]]',
378
+ shouldTransform: function (type, val) {
379
+ return SET_SUPPORTED && val instanceof Set;
380
+ },
381
+ toSerializable: function (set) {
382
+ var arr = [];
383
+ set.forEach(val => {
384
+ arr.push(val);
385
+ });
386
+ return arr;
387
+ },
388
+ fromSerializable: function (val) {
389
+ if (SET_SUPPORTED) {
390
+ // NOTE: new Set(iterable) is not supported by all browsers
391
+ var set = new Set();
392
+ for (var i = 0; i < val.length; i++)
393
+ set.add(val[i]);
394
+ return set;
395
+ }
396
+ return val;
397
+ },
398
+ },
399
+ ];
400
+ // Replicator
401
+ var Replicator = function (serializer) {
402
+ this.transforms = [];
403
+ this.transformsMap = Object.create(null);
404
+ this.serializer = serializer || JSONSerializer;
405
+ this.addTransforms(builtInTransforms);
406
+ };
407
+ // Manage transforms
408
+ Replicator.prototype.addTransforms = function (transforms) {
409
+ transforms = Array.isArray(transforms) ? transforms : [transforms];
410
+ for (var i = 0; i < transforms.length; i++) {
411
+ var transform = transforms[i];
412
+ if (this.transformsMap[transform.type])
413
+ throw new Error('Transform with type "' + transform.type + '" was already added.');
414
+ this.transforms.push(transform);
415
+ this.transformsMap[transform.type] = transform;
416
+ }
417
+ return this;
418
+ };
419
+ Replicator.prototype.removeTransforms = function (transforms) {
420
+ transforms = Array.isArray(transforms) ? transforms : [transforms];
421
+ for (var i = 0; i < transforms.length; i++) {
422
+ var transform = transforms[i];
423
+ var idx = this.transforms.indexOf(transform);
424
+ if (idx > -1)
425
+ this.transforms.splice(idx, 1);
426
+ delete this.transformsMap[transform.type];
427
+ }
428
+ return this;
429
+ };
430
+ Replicator.prototype.encode = function (val) {
431
+ var transformer = new EncodingTransformer(val, this.transforms);
432
+ var references = transformer.transform();
433
+ return this.serializer.serialize(references);
434
+ };
435
+ Replicator.prototype.decode = function (val) {
436
+ var references = this.serializer.deserialize(val);
437
+ var transformer = new DecodingTransformer(references, this.transformsMap);
438
+ return transformer.transform();
439
+ };
440
+ exports.default = Replicator;
441
+ module.exports = exports.default;
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcmVwbGljYXRvci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMkJBQTJCOztBQUUzQixRQUFRO0FBQ1IsSUFBSSxvQkFBb0IsR0FBTSxJQUFJLENBQUM7QUFDbkMsSUFBSSxnQkFBZ0IsR0FBVSxJQUFJLENBQUM7QUFDbkMsSUFBSSx1QkFBdUIsR0FBRyxZQUFZLENBQUM7QUFFM0MsSUFBSSxpQkFBaUIsR0FBRztJQUNwQixXQUFXLEVBQVUsT0FBTyxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RSxZQUFZLEVBQVMsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRSxtQkFBbUIsRUFBRSxPQUFPLGlCQUFpQixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RixZQUFZLEVBQVMsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRSxhQUFhLEVBQVEsT0FBTyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RSxZQUFZLEVBQVMsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRSxhQUFhLEVBQVEsT0FBTyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RSxjQUFjLEVBQU8sT0FBTyxZQUFZLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENB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QVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDO0FBRUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHO0lBQ3ZDLElBQUksVUFBVSxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELElBQUksV0FBVyxHQUFHLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUxRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixrQkFBZSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cblxuLy8gQ29uc3RcbnZhciBUUkFOU0ZPUk1FRF9UWVBFX0tFWSAgICA9ICdAdCc7XG52YXIgQ0lSQ1VMQVJfUkVGX0tFWSAgICAgICAgPSAnQHInO1xudmFyIEtFWV9SRVFVSVJFX0VTQ0FQSU5HX1JFID0gL14jKkAodHxyKSQvO1xuXG52YXIgVFlQRURfQVJSQVlfQ1RPUlMgPSB7XG4gICAgJ0ludDhBcnJheSc6ICAgICAgICAgdHlwZW9mIEludDhBcnJheSA9PT0gJ2Z1bmN0aW9uJyA/IEludDhBcnJheSA6IHZvaWQgMCxcbiAgICAnVWludDhBcnJheSc6ICAgICAgICB0eXBlb2YgVWludDhBcnJheSA9PT0gJ2Z1bmN0aW9uJyA/IFVpbnQ4QXJyYXkgOiB2b2lkIDAsXG4gICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAnZnVuY3Rpb24nID8gVWludDhDbGFtcGVkQXJyYXkgOiB2b2lkIDAsXG4gICAgJ0ludDE2QXJyYXknOiAgICAgICAgdHlwZW9mIEludDE2QXJyYXkgPT09ICdmdW5jdGlvbicgPyBJbnQxNkFycmF5IDogdm9pZCAwLFxuICAgICdVaW50MTZBcnJheSc6ICAgICAgIHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ2Z1bmN0aW9uJyA/IFVpbnQxNkFycmF5IDogdm9pZCAwLFxuICAgICdJbnQzMkFycmF5JzogICAgICAgIHR5cGVvZiBJbnQzMkFycmF5ID09PSAnZnVuY3Rpb24nID8gSW50MzJBcnJheSA6IHZvaWQgMCxcbiAgICAnVWludDMyQXJyYXknOiAgICAgICB0eXBlb2YgVWludDMyQXJyYXkgPT09ICdmdW5jdGlvbicgPyBVaW50MzJBcnJheSA6IHZvaWQgMCxcbiAgICAnRmxvYXQzMkFycmF5JzogICAgICB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAnZnVuY3Rpb24nID8gRmxvYXQzMkFycmF5IDogdm9pZCAwLFxuICAgICdGbG9hdDY0QXJyYXknOiAgICAgIHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICdmdW5jdGlvbicgPyBGbG9hdDY0QXJyYXkgOiB2b2lkIDAsXG59O1xuXG52YXIgU0FGRV9FUlJPUl9DVE9SUyA9IHtcbiAgICAnRXJyb3InOiAgICAgICAgICBFcnJvcixcbiAgICAnRXZhbEVycm9yJzogICAgICBFdmFsRXJyb3IsXG4gICAgJ1JhbmdlRXJyb3InOiAgICAgUmFuZ2VFcnJvcixcbiAgICAnUmVmZXJlbmNlRXJyb3InOiBSZWZlcmVuY2VFcnJvcixcbiAgICAnU3ludGF4RXJyb3InOiAgICBTeW50YXhFcnJvcixcbiAgICAnVHlwZUVycm9yJzogICAgICBUeXBlRXJyb3IsXG4gICAgJ1VSSUVycm9yJzogICAgICAgVVJJRXJyb3IsXG59O1xuXG52YXIgQVJSQVlfQlVGRkVSX1NVUFBPUlRFRCA9IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcbnZhciBNQVBfU1VQUE9SVEVEICAgICAgICAgID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJztcbnZhciBTRVRfU1VQUE9SVEVEICAgICAgICAgID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJztcbnZhciBCVUZGRVJfRlJPTV9TVVBQT1JURUQgID0gdHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcblxudmFyIFRZUEVEX0FSUkFZX1NVUFBPUlRFRCA9IGZ1bmN0aW9uICh0eXBlTmFtZSkge1xuICAgIHJldHVybiAhIVRZUEVEX0FSUkFZX0NUT1JTW3R5cGVOYW1lXTtcbn07XG5cbi8vIFNhdmVkIHByb3RvIGZ1bmN0aW9uc1xudmFyIGFyclNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyBEZWZhdWx0IHNlcmlhbGl6ZXJcbnZhciBKU09OU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbCk7XG4gICAgfSxcbn07XG5cbi8vIEVuY29kaW5nVHJhbnNmb3JtZXJcbnZhciBFbmNvZGluZ1RyYW5zZm9ybWVyID0gZnVuY3Rpb24gKHZhbCwgdHJhbnNmb3Jtcykge1xuICAgIHRoaXMucmVmZXJlbmNlcyAgICAgICAgICAgICAgID0gdmFsO1xuICAgIHRoaXMudHJhbnNmb3JtcyAgICAgICAgICAgICAgID0gdHJhbnNmb3JtcztcbiAgICB0aGlzLmNpcmN1bGFyQ2FuZGlkYXRlcyAgICAgICA9IFtdO1xuICAgIHRoaXMuY2lyY3VsYXJDYW5kaWRhdGVzRGVzY3JzID0gW107XG4gICAgdGhpcy5jaXJjdWxhclJlZkNvdW50ICAgICAgICAgPSAwO1xufTtcblxuRW5jb2RpbmdUcmFuc2Zvcm1lci5fY3JlYXRlUmVmTWFyayA9IGZ1bmN0aW9uIChpZHgpIHtcbiAgICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIG9ialtDSVJDVUxBUl9SRUZfS0VZXSA9IGlkeDtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5FbmNvZGluZ1RyYW5zZm9ybWVyLnByb3RvdHlwZS5fY3JlYXRlQ2lyY3VsYXJDYW5kaWRhdGUgPSBmdW5jdGlvbiAodmFsLCBwYXJlbnQsIGtleSkge1xuICAgIHRoaXMuY2lyY3VsYXJDYW5kaWRhdGVzLnB1c2godmFsKTtcbiAgICB0aGlzLmNpcmN1bGFyQ2FuZGlkYXRlc0Rlc2Nycy5wdXNoKHsgcGFyZW50OiBwYXJlbnQsIGtleToga2V5LCByZWZJZHg6IC0xIH0pO1xufTtcblxuRW5jb2RpbmdUcmFuc2Zvcm1lci5wcm90b3R5cGUuX2FwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24gKHZhbCwgcGFyZW50LCBrZXksIHRyYW5zZm9ybSkge1xuICAgIHZhciByZXN1bHQgICAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBzZXJpYWxpemFibGVWYWwgPSB0cmFuc2Zvcm0udG9TZXJpYWxpemFibGUodmFsKTtcblxuICAgIGlmICh0eXBlb2Ygc2VyaWFsaXphYmxlVmFsID09PSAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2lyY3VsYXJDYW5kaWRhdGUodmFsLCBwYXJlbnQsIGtleSk7XG5cbiAgICByZXN1bHRbVFJBTlNGT1JNRURfVFlQRV9LRVldID0gdHJhbnNmb3JtLnR5cGU7XG4gICAgcmVzdWx0LmRhdGEgICAgICAgICAgICAgICAgICA9IHRoaXMuX2hhbmRsZVZhbHVlKHNlcmlhbGl6YWJsZVZhbCwgcGFyZW50LCBrZXkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkVuY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgcmVzdWx0W2ldID0gdGhpcy5faGFuZGxlVmFsdWUoYXJyW2ldLCByZXN1bHQsIGkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkVuY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcmVwbGljYXRvciAgICAgICA9IHRoaXM7XG4gICAgdmFyIHJlc3VsdCAgICAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKTtcblxuICAgIG93blByb3BlcnR5TmFtZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICB2YXIgcmVzdWx0S2V5ID0gS0VZX1JFUVVJUkVfRVNDQVBJTkdfUkUudGVzdChrZXkpID8gJyMnICsga2V5IDoga2V5O1xuXG4gICAgICAgIHJlc3VsdFtyZXN1bHRLZXldID0gcmVwbGljYXRvci5faGFuZGxlVmFsdWUob2JqW2tleV0sIHJlc3VsdCwgcmVzdWx0S2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5FbmNvZGluZ1RyYW5zZm9ybWVyLnByb3RvdHlwZS5faGFuZGxlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaiwgcGFyZW50LCBrZXkpIHtcbiAgICB0aGlzLl9jcmVhdGVDaXJjdWxhckNhbmRpZGF0ZShvYmosIHBhcmVudCwga2V5KTtcblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgPyB0aGlzLl9oYW5kbGVBcnJheShvYmopIDogdGhpcy5faGFuZGxlUGxhaW5PYmplY3Qob2JqKTtcbn07XG5cbkVuY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9lbnN1cmVDaXJjdWxhclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgY2lyY3VsYXJDYW5kaWRhdGVJZHggPSB0aGlzLmNpcmN1bGFyQ2FuZGlkYXRlcy5pbmRleE9mKG9iaik7XG5cbiAgICBpZiAoY2lyY3VsYXJDYW5kaWRhdGVJZHggPiAtMSkge1xuICAgICAgICB2YXIgZGVzY3IgPSB0aGlzLmNpcmN1bGFyQ2FuZGlkYXRlc0Rlc2Nyc1tjaXJjdWxhckNhbmRpZGF0ZUlkeF07XG5cbiAgICAgICAgaWYgKGRlc2NyLnJlZklkeCA9PT0gLTEpXG4gICAgICAgICAgICBkZXNjci5yZWZJZHggPSBkZXNjci5wYXJlbnQgPyArK3RoaXMuY2lyY3VsYXJSZWZDb3VudCA6IDA7XG5cbiAgICAgICAgcmV0dXJuIEVuY29kaW5nVHJhbnNmb3JtZXIuX2NyZWF0ZVJlZk1hcmsoZGVzY3IucmVmSWR4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbkVuY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVWYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIHBhcmVudCwga2V5KSB7XG4gICAgdmFyIHR5cGUgICAgID0gdHlwZW9mIHZhbDtcbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgICAgdmFyIHJlZk1hcmsgPSB0aGlzLl9lbnN1cmVDaXJjdWxhclJlZmVyZW5jZSh2YWwpO1xuXG4gICAgICAgIGlmIChyZWZNYXJrKVxuICAgICAgICAgICAgcmV0dXJuIHJlZk1hcms7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3Jtc1tpXTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtLnNob3VsZFRyYW5zZm9ybSh0eXBlLCB2YWwpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5VHJhbnNmb3JtKHZhbCwgcGFyZW50LCBrZXksIHRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KVxuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlT2JqZWN0KHZhbCwgcGFyZW50LCBrZXkpO1xuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbkVuY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IFt0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLnJlZmVyZW5jZXMsIG51bGwsIG51bGwpXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaXJjdWxhckNhbmRpZGF0ZXNEZXNjcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlc2NyID0gdGhpcy5jaXJjdWxhckNhbmRpZGF0ZXNEZXNjcnNbaV07XG5cbiAgICAgICAgaWYgKGRlc2NyLnJlZklkeCA+IDApIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXNbZGVzY3IucmVmSWR4XSA9IGRlc2NyLnBhcmVudFtkZXNjci5rZXldO1xuICAgICAgICAgICAgZGVzY3IucGFyZW50W2Rlc2NyLmtleV0gID0gRW5jb2RpbmdUcmFuc2Zvcm1lci5fY3JlYXRlUmVmTWFyayhkZXNjci5yZWZJZHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG59O1xuXG4vLyBEZWNvZGluZ1RyYW5zZm9ybWVyXG52YXIgRGVjb2RpbmdUcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChyZWZlcmVuY2VzLCB0cmFuc2Zvcm1zTWFwKSB7XG4gICAgdGhpcy5yZWZlcmVuY2VzICAgICAgICAgICAgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMudHJhbnNmb3JtTWFwICAgICAgICAgID0gdHJhbnNmb3Jtc01hcDtcbiAgICB0aGlzLmFjdGl2ZVRyYW5zZm9ybXNTdGFjayA9IFtdO1xuICAgIHRoaXMudmlzaXRlZFJlZnMgICAgICAgICAgID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn07XG5cbkRlY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgcmVwbGljYXRvciAgICAgICA9IHRoaXM7XG4gICAgdmFyIHVuZXNjYXBlZCAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKTtcblxuICAgIG93blByb3BlcnR5TmFtZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICByZXBsaWNhdG9yLl9oYW5kbGVWYWx1ZShvYmpba2V5XSwgb2JqLCBrZXkpO1xuXG4gICAgICAgIGlmIChLRVlfUkVRVUlSRV9FU0NBUElOR19SRS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IHVzZSBpbnRlcm1lZGlhdGUgb2JqZWN0IHRvIGF2b2lkIHVuZXNjYXBlZCBhbmQgZXNjYXBlZCBrZXlzIGludGVyZmVyZW5jZVxuICAgICAgICAgICAgLy8gRS5nLiB1bmVzY2FwZWQgXCIjI0B0XCIgd2lsbCBiZSBcIiNAdFwiIHdoaWNoIGNhbiBvdmVyd3JpdGUgZXNjYXBlZCBcIiNAdFwiLlxuICAgICAgICAgICAgdW5lc2NhcGVkW2tleS5zdWJzdHJpbmcoMSldID0gb2JqW2tleV07XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAodmFyIHVuZXNjYXBlZEtleSBpbiB1bmVzY2FwZWQpXG4gICAgICAgIG9ialt1bmVzY2FwZWRLZXldID0gdW5lc2NhcGVkW3VuZXNjYXBlZEtleV07XG59O1xuXG5EZWNvZGluZ1RyYW5zZm9ybWVyLnByb3RvdHlwZS5faGFuZGxlVHJhbnNmb3JtZWRPYmplY3QgPSBmdW5jdGlvbiAob2JqLCBwYXJlbnQsIGtleSkge1xuICAgIHZhciB0cmFuc2Zvcm1UeXBlID0gb2JqW1RSQU5TRk9STUVEX1RZUEVfS0VZXTtcbiAgICB2YXIgdHJhbnNmb3JtICAgICA9IHRoaXMudHJhbnNmb3JtTWFwW3RyYW5zZm9ybVR5cGVdO1xuXG4gICAgaWYgKCF0cmFuc2Zvcm0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHRyYW5zZm9ybSBmb3IgXCInICsgdHJhbnNmb3JtVHlwZSArICdcIiB0eXBlLicpO1xuXG4gICAgdGhpcy5hY3RpdmVUcmFuc2Zvcm1zU3RhY2sucHVzaChvYmopO1xuICAgIHRoaXMuX2hhbmRsZVZhbHVlKG9iai5kYXRhLCBvYmosICdkYXRhJyk7XG4gICAgdGhpcy5hY3RpdmVUcmFuc2Zvcm1zU3RhY2sucG9wKCk7XG5cbiAgICBwYXJlbnRba2V5XSA9IHRyYW5zZm9ybS5mcm9tU2VyaWFsaXphYmxlKG9iai5kYXRhKTtcbn07XG5cbkRlY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVDaXJjdWxhclNlbGZSZWZEdXJpbmdUcmFuc2Zvcm0gPSBmdW5jdGlvbiAocmVmSWR4LCBwYXJlbnQsIGtleSkge1xuICAgIC8vIE5PVEU6IHdlJ3ZlIGhpdCBhIGhhcmQgY2FzZTogb2JqZWN0IHJlZmVyZW5jZSBpdHNlbGYgZHVyaW5nIHRyYW5zZm9ybWF0aW9uLlxuICAgIC8vIFdlIGNhbid0IGRlcmVmZXJlbmNlIGl0IHNpbmNlIHdlIGRvbid0IGhhdmUgcmVzdWx0aW5nIG9iamVjdCB5ZXQuIEFuZCB3ZSdsbFxuICAgIC8vIG5vdCBiZSBhYmxlIHRvIHJlc3RvcmUgcmVmZXJlbmNlIGxhdGVseSBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0byB0cmF2ZXJzZVxuICAgIC8vIHRyYW5zZm9ybWVkIG9iamVjdCBhZ2FpbiBhbmQgcmVmZXJlbmNlIG1pZ2h0IGJlIHVucmVhY2hhYmxlIG9yIG5ldyBvYmplY3QgY29udGFpblxuICAgIC8vIG5ldyBjaXJjdWxhciByZWZlcmVuY2VzLiBBcyBhIHdvcmthcm91bmQgd2UgY3JlYXRlIGdldHRlciwgc28gb25jZSB0cmFuc2Zvcm1hdGlvblxuICAgIC8vIGNvbXBsZXRlLCBkZXJlZmVyZW5jZWQgcHJvcGVydHkgd2lsbCBwb2ludCB0byBjb3JyZWN0IHRyYW5zZm9ybWVkIG9iamVjdC5cbiAgICB2YXIgcmVmZXJlbmNlcyA9IHRoaXMucmVmZXJlbmNlcztcbiAgICB2YXIgdmFsICAgICAgICA9IHZvaWQgMDtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6ICAgdHJ1ZSxcblxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IHZvaWQgMClcbiAgICAgICAgICAgICAgICB2YWwgPSByZWZlcmVuY2VzW3JlZklkeF07XG5cbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2V0dGVyLXJldHVyblxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn07XG5cbkRlY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVDaXJjdWxhclJlZiA9IGZ1bmN0aW9uIChyZWZJZHgsIHBhcmVudCwga2V5KSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlVHJhbnNmb3Jtc1N0YWNrLmluZGV4T2YodGhpcy5yZWZlcmVuY2VzW3JlZklkeF0pID4gLTEpXG4gICAgICAgIHRoaXMuX2hhbmRsZUNpcmN1bGFyU2VsZlJlZkR1cmluZ1RyYW5zZm9ybShyZWZJZHgsIHBhcmVudCwga2V5KTtcblxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMudmlzaXRlZFJlZnNbcmVmSWR4XSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdGVkUmVmc1tyZWZJZHhdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVZhbHVlKHRoaXMucmVmZXJlbmNlc1tyZWZJZHhdLCB0aGlzLnJlZmVyZW5jZXMsIHJlZklkeCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRba2V5XSA9IHRoaXMucmVmZXJlbmNlc1tyZWZJZHhdO1xuICAgIH1cbn07XG5cbkRlY29kaW5nVHJhbnNmb3JtZXIucHJvdG90eXBlLl9oYW5kbGVWYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIHBhcmVudCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8IHZhbCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHJlZklkeCA9IHZhbFtDSVJDVUxBUl9SRUZfS0VZXTtcblxuICAgIGlmIChyZWZJZHggIT09IHZvaWQgMClcbiAgICAgICAgdGhpcy5faGFuZGxlQ2lyY3VsYXJSZWYocmVmSWR4LCBwYXJlbnQsIGtleSk7XG5cbiAgICBlbHNlIGlmICh2YWxbVFJBTlNGT1JNRURfVFlQRV9LRVldKVxuICAgICAgICB0aGlzLl9oYW5kbGVUcmFuc2Zvcm1lZE9iamVjdCh2YWwsIHBhcmVudCwga2V5KTtcblxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVZhbHVlKHZhbFtpXSwgdmFsLCBpKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX2hhbmRsZVBsYWluT2JqZWN0KHZhbCk7XG59O1xuXG5EZWNvZGluZ1RyYW5zZm9ybWVyLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy52aXNpdGVkUmVmc1swXSA9IHRydWU7XG4gICAgdGhpcy5faGFuZGxlVmFsdWUodGhpcy5yZWZlcmVuY2VzWzBdLCB0aGlzLnJlZmVyZW5jZXMsIDApO1xuXG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlc1swXTtcbn07XG5cbi8vIFRyYW5zZm9ybXNcbnZhciBidWlsdEluVHJhbnNmb3JtcyA9IFtcbiAgICB7XG4gICAgICAgIHR5cGU6ICdbW05hTl1dJyxcblxuICAgICAgICBzaG91bGRUcmFuc2Zvcm06IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvU2VyaWFsaXphYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnJvbVNlcmlhbGl6YWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgICB0eXBlOiAnW1t1bmRlZmluZWRdXScsXG5cbiAgICAgICAgc2hvdWxkVHJhbnNmb3JtOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd1bmRlZmluZWQnO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvU2VyaWFsaXphYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnJvbVNlcmlhbGl6YWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgICB0eXBlOiAnW1tEYXRlXV0nLFxuXG4gICAgICAgIHNob3VsZFRyYW5zZm9ybTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIERhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TZXJpYWxpemFibGU6IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnJvbVNlcmlhbGl6YWJsZTogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICBkYXRlLnNldFRpbWUodmFsKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHtcbiAgICAgICAgdHlwZTogJ1tbUmVnRXhwXV0nLFxuXG4gICAgICAgIHNob3VsZFRyYW5zZm9ybTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICAgICAgfSxcblxuICAgICAgICB0b1NlcmlhbGl6YWJsZTogZnVuY3Rpb24gKHJlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHNyYzogICByZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgZmxhZ3M6ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHJlLmdsb2JhbClcbiAgICAgICAgICAgICAgICByZXN1bHQuZmxhZ3MgKz0gJ2cnO1xuXG4gICAgICAgICAgICBpZiAocmUuaWdub3JlQ2FzZSlcbiAgICAgICAgICAgICAgICByZXN1bHQuZmxhZ3MgKz0gJ2knO1xuXG4gICAgICAgICAgICBpZiAocmUubXVsdGlsaW5lKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5mbGFncyArPSAnbSc7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnJvbVNlcmlhbGl6YWJsZTogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodmFsLnNyYywgdmFsLmZsYWdzKTtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgICB0eXBlOiAnW1tFcnJvcl1dJyxcblxuICAgICAgICBzaG91bGRUcmFuc2Zvcm06IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcjtcbiAgICAgICAgfSxcblxuICAgICAgICB0b1NlcmlhbGl6YWJsZTogZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAgICBlcnIubmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBzdGFjazogICBlcnIuc3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIGZyb21TZXJpYWxpemFibGU6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhciBDdG9yID0gU0FGRV9FUlJPUl9DVE9SU1t2YWwubmFtZV0gfHwgRXJyb3I7XG4gICAgICAgICAgICB2YXIgZXJyICA9IG5ldyBDdG9yKHZhbC5tZXNzYWdlKTtcblxuICAgICAgICAgICAgZXJyLnN0YWNrID0gdmFsLnN0YWNrO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB7XG4gICAgICAgIHR5cGU6ICdbW0FycmF5QnVmZmVyXV0nLFxuXG4gICAgICAgIHNob3VsZFRyYW5zZm9ybTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIEFSUkFZX0JVRkZFUl9TVVBQT1JURUQgJiYgdmFsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TZXJpYWxpemFibGU6IGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IEludDhBcnJheShidWZmZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJyU2xpY2UuY2FsbCh2aWV3KTtcbiAgICAgICAgfSxcblxuICAgICAgICBmcm9tU2VyaWFsaXphYmxlOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoQVJSQVlfQlVGRkVSX1NVUFBPUlRFRCkge1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodmFsLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIHZpZXcgICA9IG5ldyBJbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgIHZpZXcuc2V0KHZhbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB7XG4gICAgICAgIHR5cGU6ICdbW0J1ZmZlcl1dJyxcblxuICAgICAgICBzaG91bGRUcmFuc2Zvcm06IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBCVUZGRVJfRlJPTV9TVVBQT1JURUQgJiYgdmFsIGluc3RhbmNlb2YgQnVmZmVyO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvU2VyaWFsaXphYmxlOiBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyU2xpY2UuY2FsbChidWZmZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZyb21TZXJpYWxpemFibGU6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmIChCVUZGRVJfRlJPTV9TVVBQT1JURUQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbCk7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHtcbiAgICAgICAgdHlwZTogJ1tbVHlwZWRBcnJheV1dJyxcblxuICAgICAgICBzaG91bGRUcmFuc2Zvcm06IGZ1bmN0aW9uICh0eXBlLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhUWVBFRF9BUlJBWV9DVE9SUykuc29tZShjdG9yTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRZUEVEX0FSUkFZX1NVUFBPUlRFRChjdG9yTmFtZSkgJiYgdmFsIGluc3RhbmNlb2YgVFlQRURfQVJSQVlfQ1RPUlNbY3Rvck5hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TZXJpYWxpemFibGU6IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY3Rvck5hbWU6IGFyci5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICAgIGFycjogICAgICBhcnJTbGljZS5jYWxsKGFyciksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIGZyb21TZXJpYWxpemFibGU6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBUWVBFRF9BUlJBWV9TVVBQT1JURUQodmFsLmN0b3JOYW1lKSA/IG5ldyBUWVBFRF9BUlJBWV9DVE9SU1t2YWwuY3Rvck5hbWVdKHZhbC5hcnIpIDogdmFsLmFycjtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgICB0eXBlOiAnW1tNYXBdXScsXG5cbiAgICAgICAgc2hvdWxkVHJhbnNmb3JtOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTUFQX1NVUFBPUlRFRCAmJiB2YWwgaW5zdGFuY2VvZiBNYXA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TZXJpYWxpemFibGU6IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgIHZhciBmbGF0dGVuZWRLVkFyciA9IFtdO1xuXG4gICAgICAgICAgICBtYXAuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRLVkFyci5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkS1ZBcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmbGF0dGVuZWRLVkFycjtcbiAgICAgICAgfSxcblxuICAgICAgICBmcm9tU2VyaWFsaXphYmxlOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoTUFQX1NVUFBPUlRFRCkge1xuICAgICAgICAgICAgICAgIC8vIE5PVEU6IG5ldyBNYXAoaXRlcmFibGUpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KHZhbFtpXSwgdmFsW2kgKyAxXSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIga3ZBcnIgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWwubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAga3ZBcnIucHVzaChbdmFsW2pdLCB2YWxbaiArIDFdXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBrdkFycjtcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgICB0eXBlOiAnW1tTZXRdXScsXG5cbiAgICAgICAgc2hvdWxkVHJhbnNmb3JtOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gU0VUX1NVUFBPUlRFRCAmJiB2YWwgaW5zdGFuY2VvZiBTZXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TZXJpYWxpemFibGU6IGZ1bmN0aW9uIChzZXQpIHtcbiAgICAgICAgICAgIHZhciBhcnIgPSBbXTtcblxuICAgICAgICAgICAgc2V0LmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnJvbVNlcmlhbGl6YWJsZTogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKFNFVF9TVVBQT1JURUQpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBuZXcgU2V0KGl0ZXJhYmxlKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2Vyc1xuICAgICAgICAgICAgICAgIHZhciBzZXQgPSBuZXcgU2V0KCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgc2V0LmFkZCh2YWxbaV0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfSxcbiAgICB9LFxuXTtcblxuLy8gUmVwbGljYXRvclxudmFyIFJlcGxpY2F0b3IgPSBmdW5jdGlvbiAoc2VyaWFsaXplcikge1xuICAgIHRoaXMudHJhbnNmb3JtcyAgICA9IFtdO1xuICAgIHRoaXMudHJhbnNmb3Jtc01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zZXJpYWxpemVyICAgID0gc2VyaWFsaXplciB8fCBKU09OU2VyaWFsaXplcjtcblxuICAgIHRoaXMuYWRkVHJhbnNmb3JtcyhidWlsdEluVHJhbnNmb3Jtcyk7XG59O1xuXG4vLyBNYW5hZ2UgdHJhbnNmb3Jtc1xuUmVwbGljYXRvci5wcm90b3R5cGUuYWRkVHJhbnNmb3JtcyA9IGZ1bmN0aW9uICh0cmFuc2Zvcm1zKSB7XG4gICAgdHJhbnNmb3JtcyA9IEFycmF5LmlzQXJyYXkodHJhbnNmb3JtcykgPyB0cmFuc2Zvcm1zIDogW3RyYW5zZm9ybXNdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1zW2ldO1xuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybXNNYXBbdHJhbnNmb3JtLnR5cGVdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2Zvcm0gd2l0aCB0eXBlIFwiJyArIHRyYW5zZm9ybS50eXBlICsgJ1wiIHdhcyBhbHJlYWR5IGFkZGVkLicpO1xuXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtcy5wdXNoKHRyYW5zZm9ybSk7XG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc01hcFt0cmFuc2Zvcm0udHlwZV0gPSB0cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXBsaWNhdG9yLnByb3RvdHlwZS5yZW1vdmVUcmFuc2Zvcm1zID0gZnVuY3Rpb24gKHRyYW5zZm9ybXMpIHtcbiAgICB0cmFuc2Zvcm1zID0gQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSA/IHRyYW5zZm9ybXMgOiBbdHJhbnNmb3Jtc107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRyYW5zZm9ybXNbaV07XG4gICAgICAgIHZhciBpZHggICAgICAgPSB0aGlzLnRyYW5zZm9ybXMuaW5kZXhPZih0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGlmIChpZHggPiAtMSlcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3Jtcy5zcGxpY2UoaWR4LCAxKTtcblxuICAgICAgICBkZWxldGUgdGhpcy50cmFuc2Zvcm1zTWFwW3RyYW5zZm9ybS50eXBlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblJlcGxpY2F0b3IucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgdHJhbnNmb3JtZXIgPSBuZXcgRW5jb2RpbmdUcmFuc2Zvcm1lcih2YWwsIHRoaXMudHJhbnNmb3Jtcyk7XG4gICAgdmFyIHJlZmVyZW5jZXMgID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShyZWZlcmVuY2VzKTtcbn07XG5cblJlcGxpY2F0b3IucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgcmVmZXJlbmNlcyAgPSB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsKTtcbiAgICB2YXIgdHJhbnNmb3JtZXIgPSBuZXcgRGVjb2RpbmdUcmFuc2Zvcm1lcihyZWZlcmVuY2VzLCB0aGlzLnRyYW5zZm9ybXNNYXApO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVwbGljYXRvcjtcbiJdfQ==
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "testcafe",
3
3
  "description": "Automated browser testing for the modern web development stack.",
4
4
  "license": "MIT",
5
- "version": "3.7.4",
5
+ "version": "3.7.5",
6
6
  "author": {
7
7
  "name": "Developer Express Inc.",
8
8
  "url": "https://www.devexpress.com/"
@@ -19,7 +19,7 @@
19
19
  "url": "git+https://github.com/DevExpress/testcafe.git"
20
20
  },
21
21
  "engines": {
22
- "node": ">=16.0.0"
22
+ "node": ">=20.0.0"
23
23
  },
24
24
  "main": "lib/index",
25
25
  "types": "ts-defs/index.d.ts",
@@ -55,10 +55,7 @@
55
55
  "test": "gulp travis",
56
56
  "build": "gulp build",
57
57
  "test-functional-local-headless-chrome-run-esm": "cross-env NODE_OPTIONS='--experimental-loader=./lib/compiler/esm-loader.js' gulp test-functional-local-headless-chrome-run --steps-as-tasks",
58
- "test-functional-local-headless-chrome-esm": "npm run build && npm run test-functional-local-headless-chrome-run-esm",
59
- "publish-please-only": "publish-please",
60
- "publish-please": "del-cli package-lock.json node_modules && npm i && publish-please",
61
- "prepublishOnly": "publish-please guard"
58
+ "test-functional-local-headless-chrome-esm": "npm run build && npm run test-functional-local-headless-chrome-run-esm"
62
59
  },
63
60
  "dependencies": {
64
61
  "@babel/core": "^7.23.2",
@@ -74,7 +71,7 @@
74
71
  "@babel/plugin-transform-object-rest-spread": "^7.24.7",
75
72
  "@babel/plugin-transform-private-methods": "^7.25.4",
76
73
  "@babel/plugin-transform-runtime": "7.23.3",
77
- "@babel/preset-env": "^7.23.2",
74
+ "@babel/preset-env": "^7.29.5",
78
75
  "@babel/preset-flow": "^7.22.15",
79
76
  "@babel/preset-react": "^7.22.15",
80
77
  "@babel/runtime": "^7.23.2",
@@ -135,7 +132,6 @@
135
132
  "prompts": "^2.4.2",
136
133
  "qrcode-terminal": "^0.10.0",
137
134
  "read-file-relative": "^1.2.0",
138
- "replicator": "^1.0.5",
139
135
  "resolve-cwd": "^1.0.0",
140
136
  "resolve-from": "^4.0.0",
141
137
  "sanitize-filename": "^1.6.0",
@@ -144,7 +140,7 @@
144
140
  "source-map-support": "^0.5.16",
145
141
  "strip-bom": "^2.0.0",
146
142
  "testcafe-browser-tools": "2.0.26",
147
- "testcafe-hammerhead": "31.7.7",
143
+ "testcafe-hammerhead": "31.7.8",
148
144
  "testcafe-legacy-api": "5.1.8",
149
145
  "testcafe-reporter-json": "^2.1.0",
150
146
  "testcafe-reporter-list": "^2.2.0",
@@ -153,9 +149,9 @@
153
149
  "testcafe-reporter-xunit": "^2.2.1",
154
150
  "testcafe-selector-generator": "^0.1.0",
155
151
  "time-limit-promise": "^1.0.2",
156
- "tmp": "0.2.5",
152
+ "tmp": "0.2.6",
157
153
  "tree-kill": "^1.2.2",
158
- "typescript": "4.7.4",
154
+ "typescript": "4.9.5",
159
155
  "unquote": "^1.1.1",
160
156
  "url-to-options": "^2.0.0"
161
157
  },
@@ -167,7 +163,6 @@
167
163
  "@rollup/plugin-commonjs": "^11.0.2",
168
164
  "@rollup/plugin-inject": "^4.0.2",
169
165
  "@rollup/plugin-node-resolve": "^7.1.1",
170
- "@testcafe/publish-please": "^5.6.0",
171
166
  "@types/callsite": "^1.0.30",
172
167
  "@types/chai": "^3.5.2",
173
168
  "@types/debug": "^4.1.5",
@@ -181,8 +176,8 @@
181
176
  "@types/set-cookie-parser": "^2.4.2",
182
177
  "@types/source-map-support": "^0.5.0",
183
178
  "@types/useragent": "^2.1.1",
184
- "@typescript-eslint/eslint-plugin": "^5.29.0",
185
- "@typescript-eslint/parser": "^5.29.0",
179
+ "@typescript-eslint/eslint-plugin": "^8.59.2",
180
+ "@typescript-eslint/parser": "^8.59.2",
186
181
  "babel-plugin-add-module-exports": "^0.2.0",
187
182
  "basic-auth": "^1.1.0",
188
183
  "body-parser": "^1.17.1",
@@ -196,34 +191,32 @@
196
191
  "cross-env": "^7.0.3",
197
192
  "dom-walk": "^0.1.1",
198
193
  "escape-string-regexp": "^4.0.0",
199
- "eslint": "^7.13.0",
194
+ "eslint": "^9.39.4",
200
195
  "eslint-plugin-hammerhead": "0.4.0",
201
196
  "eslint-plugin-no-only-tests": "^2.0.1",
202
197
  "express": "^4.13.3",
203
198
  "express-ntlm": "2.4.0",
204
- "gulp": "^4.0.2",
199
+ "gulp": "^5.0.1",
205
200
  "gulp-babel": "^8.0.0",
206
201
  "gulp-clone": "^2.0.1",
207
202
  "gulp-data": "^1.3.1",
208
- "gulp-eslint": "^6.0.0",
203
+ "gulp-eslint-new": "^2.6.2",
209
204
  "gulp-less": "^5.0.0",
210
205
  "gulp-ll-next": "^2.1.0",
211
- "gulp-mocha-simple": "^2.0.0",
212
206
  "gulp-mustache": "^3.0.1",
213
207
  "gulp-rename": "^1.3.0",
214
208
  "gulp-step": "^1.0.1",
215
209
  "gulp-uglify": "^3.0.0",
216
210
  "license-checker": "^20.0.0",
217
- "markdownlint": "^0.34.0",
218
211
  "merge-stream": "^1.0.1",
219
212
  "minimist": "^1.2.0",
220
- "mocha-reporter-spec-with-retries": "1.0.0",
221
- "multer": "2.0.2",
213
+ "mocha": "^11.7.5",
214
+ "multer": "^2.1.1",
222
215
  "openssl-self-signed-certificate": "^1.1.6",
223
216
  "proxyquire": "^2.1.0",
224
217
  "react": "^16.13.1",
225
218
  "recursive-copy": "^2.0.5",
226
- "rollup": "2.79.2",
219
+ "rollup": "^2.80.0",
227
220
  "rollup-plugin-typescript2": "^0.32.1",
228
221
  "serve-static": "^1.10.0",
229
222
  "sinon": "^7.3.0",
@@ -234,6 +227,10 @@
234
227
  "uglify-js": "~3.10.4"
235
228
  },
236
229
  "overrides": {
237
- "glob": "8.1.0"
230
+ "glob": "8.1.0",
231
+ "mocha": {
232
+ "serialize-javascript": "^7.0.5",
233
+ "diff": "^8.0.0"
234
+ }
238
235
  }
239
236
  }