testcafe
Version:
Automated browser testing for the modern web development stack.
117 lines • 19.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const base_unit_1 = __importDefault(require("./base-unit"));
const test_page_url_1 = require("../test-page-url");
const handle_tag_args_1 = __importDefault(require("../../utils/handle-tag-args"));
const delegated_api_1 = require("../../utils/delegated-api");
const type_assertions_1 = require("../../errors/runtime/type-assertions");
const flag_list_1 = __importDefault(require("../../utils/flag-list"));
const option_names_1 = __importDefault(require("../../configuration/option-names"));
const path_1 = require("path");
const skip_js_errors_1 = require("../../utils/get-options/skip-js-errors");
const runtime_1 = require("../../errors/runtime");
class TestingUnit extends base_unit_1.default {
constructor(testFile, unitType, pageUrl, baseUrl) {
super(unitType);
this.testFile = testFile;
this.name = null;
this.pageUrl = pageUrl;
this.baseUrl = baseUrl;
this.authCredentials = null;
this.meta = {};
this.only = false;
this.skip = false;
this.disableConcurrency = false;
this.requestHooks = [];
this.clientScripts = [];
this.disablePageReloads = void 0;
this.disablePageCaching = false;
this.apiMethodWasCalled = new flag_list_1.default([option_names_1.default.clientScripts, option_names_1.default.requestHooks]);
const unit = this;
this.apiOrigin = function apiOrigin(...args) {
return unit._add(...args);
};
//@ts-ignore
(0, delegated_api_1.delegateAPI)(this.apiOrigin, this.constructor.API_LIST, { handler: this });
}
_only$getter() {
this.only = true;
return this.apiOrigin;
}
_skip$getter() {
this.skip = true;
return this.apiOrigin;
}
_disablePageReloads$getter() {
this.disablePageReloads = true;
return this.apiOrigin;
}
_enablePageReloads$getter() {
this.disablePageReloads = false;
return this.apiOrigin;
}
_page$(url, ...rest) {
this.pageUrl = (0, handle_tag_args_1.default)(url, rest);
this.baseUrl = this.baseUrl || (0, path_1.dirname)(this.testFile.filename);
const base = (0, test_page_url_1.prepareBaseUrl)(this.baseUrl);
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'page', 'The page URL', this.pageUrl);
(0, test_page_url_1.assertPageUrl)(this.pageUrl, 'page');
this.pageUrl = (0, test_page_url_1.getUrl)(this.pageUrl, base);
return this.apiOrigin;
}
_skipJsErrors$(options = true) {
(0, type_assertions_1.assertType)([type_assertions_1.is.boolean, type_assertions_1.is.nonNullObject, type_assertions_1.is.function], 'skipJsErrors', 'The skipJsErrors options argument', options);
this.skipJsErrorsOptions = options;
(0, skip_js_errors_1.validateSkipJsErrorsOptionValue)(this.skipJsErrorsOptions, runtime_1.SkipJsErrorsArgumentApiError);
return this.apiOrigin;
}
_httpAuth$(credentials) {
(0, type_assertions_1.assertType)(type_assertions_1.is.nonNullObject, 'httpAuth', 'The credentials', credentials);
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.username', credentials.username);
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.password', credentials.password);
if (credentials.domain)
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.domain', credentials.domain);
if (credentials.workstation)
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.workstation', credentials.workstation);
this.authCredentials = credentials;
return this.apiOrigin;
}
_meta$(key, value) {
(0, type_assertions_1.assertType)([type_assertions_1.is.string, type_assertions_1.is.nonNullObject], 'meta', `${this.unitType}.meta`, key);
const data = typeof key === 'string' ? { [key]: value } : key;
Object.keys(data).forEach(propName => {
this.meta[propName] = data[propName];
});
return this.apiOrigin;
}
_disablePageCaching$getter() {
this.disablePageCaching = true;
return this.apiOrigin;
}
static makeAPIListForChildClass(ChildClass) {
//@ts-ignore
ChildClass.API_LIST = TestingUnit.API_LIST.concat((0, delegated_api_1.getDelegatedAPIList)(ChildClass.prototype));
}
static init(ChildClass, ...initProps) {
const fn = (...args) => {
//@ts-ignore
const apiOrigin = new ChildClass(...initProps);
return apiOrigin(...args);
};
const getHandler = () => {
//@ts-ignore
return new ChildClass(...initProps, false);
};
//@ts-ignore
(0, delegated_api_1.delegateAPI)(fn, ChildClass.API_LIST, { getHandler });
return fn;
}
}
exports.default = TestingUnit;
// @ts-ignore
TestingUnit.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestingUnit.prototype);
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy11bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9zdHJ1Y3R1cmUvdGVzdGluZy11bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQixrRkFBd0Q7QUFDeEQsNkRBQTZFO0FBQzdFLDBFQUFzRTtBQUN0RSxzRUFBNkM7QUFDN0Msb0ZBQTREO0FBUzVELCtCQUErQjtBQUMvQiwyRUFBeUY7QUFDekYsa0RBQW9FO0FBRXBFLE1BQThCLFdBQVksU0FBUSxtQkFBUTtJQWtCdEQsWUFBdUIsUUFBa0IsRUFBRSxRQUFrQixFQUFFLE9BQWUsRUFBRSxPQUFnQjtRQUM1RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksR0FBaUIsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQWMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQWMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQU0sSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQWlCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFpQixLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBaUIsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBUSxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksbUJBQVEs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QUUsVUFBbUI7UUFDdkQsWUFBWTtRQUNaLFVBQVUsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBRSxVQUFtQixFQUFFLEdBQUcsU0FBb0I7UUFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBWSxFQUFFO1lBQ3hDLFlBQVk7WUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBd0IsQ0FBQztZQUV0RSxPQUFPLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLEdBQVksRUFBRTtZQUM3QixZQUFZO1lBQ1osT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFFRixZQUFZO1FBQ1osSUFBQSwyQkFBVyxFQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVyRCxPQUFPLEVBQTRCLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBNUpELDhCQTRKQztBQUVELGFBQWE7QUFDYixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VVbml0IGZyb20gJy4vYmFzZS11bml0JztcbmltcG9ydCB7XG4gICAgYXNzZXJ0UGFnZVVybCxcbiAgICBnZXRVcmwsXG4gICAgcHJlcGFyZUJhc2VVcmwsXG59IGZyb20gJy4uL3Rlc3QtcGFnZS11cmwnO1xuaW1wb3J0IGhhbmRsZVRhZ0FyZ3MgZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLXRhZy1hcmdzJztcbmltcG9ydCB7IGRlbGVnYXRlQVBJLCBnZXREZWxlZ2F0ZWRBUElMaXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsZWdhdGVkLWFwaSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgRmxhZ0xpc3QgZnJvbSAnLi4vLi4vdXRpbHMvZmxhZy1saXN0JztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IFVuaXRUeXBlIGZyb20gJy4vdW5pdC10eXBlJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5pbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi90ZXN0LWZpbGUnO1xuaW1wb3J0IHsgQXV0aENyZWRlbnRpYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgRGljdGlvbmFyeSwgU2tpcEpzRXJyb3JzQ2FsbGJhY2ssIFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QsXG59IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVNraXBKc0Vycm9yc09wdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LW9wdGlvbnMvc2tpcC1qcy1lcnJvcnMnO1xuaW1wb3J0IHsgU2tpcEpzRXJyb3JzQXJndW1lbnRBcGlFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGVzdGluZ1VuaXQgZXh0ZW5kcyBCYXNlVW5pdCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRlc3RGaWxlOiBUZXN0RmlsZTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgZGlzYWJsZUNvbmN1cnJlbmN5OiBib29sZWFuO1xuICAgIHB1YmxpYyBwYWdlVXJsOiBzdHJpbmc7XG4gICAgcHVibGljIGJhc2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgYXV0aENyZWRlbnRpYWxzOiBudWxsIHwgQXV0aENyZWRlbnRpYWxzO1xuICAgIHB1YmxpYyBtZXRhOiBNZXRhZGF0YTtcbiAgICBwdWJsaWMgb25seTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2tpcDogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVxdWVzdEhvb2tzOiBSZXF1ZXN0SG9va1tdO1xuICAgIHB1YmxpYyBjbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W107XG4gICAgcHVibGljIGRpc2FibGVQYWdlUmVsb2FkczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgZGlzYWJsZVBhZ2VDYWNoaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBhcGlNZXRob2RXYXNDYWxsZWQ6IEZsYWdMaXN0O1xuICAgIHB1YmxpYyBhcGlPcmlnaW46IEZ1bmN0aW9uO1xuICAgIHB1YmxpYyBza2lwSnNFcnJvcnNPcHRpb25zPzogYm9vbGVhbiB8IFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBTa2lwSnNFcnJvcnNDYWxsYmFja3wgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvciAodGVzdEZpbGU6IFRlc3RGaWxlLCB1bml0VHlwZTogVW5pdFR5cGUsIHBhZ2VVcmw6IHN0cmluZywgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICBzdXBlcih1bml0VHlwZSk7XG5cbiAgICAgICAgdGhpcy50ZXN0RmlsZSA9IHRlc3RGaWxlO1xuXG4gICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYWdlVXJsICAgICAgICAgICAgPSBwYWdlVXJsO1xuICAgICAgICB0aGlzLmJhc2VVcmwgICAgICAgICAgICA9IGJhc2VVcmw7XG4gICAgICAgIHRoaXMuYXV0aENyZWRlbnRpYWxzICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXRhICAgICAgICAgICAgICAgPSB7fTtcbiAgICAgICAgdGhpcy5vbmx5ICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5za2lwICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uY3VycmVuY3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgPSBbXTtcblxuICAgICAgICB0aGlzLmRpc2FibGVQYWdlUmVsb2FkcyA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZCA9IG5ldyBGbGFnTGlzdChbT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMsIE9QVElPTl9OQU1FUy5yZXF1ZXN0SG9va3NdKTtcblxuICAgICAgICBjb25zdCB1bml0ID0gdGhpcztcblxuICAgICAgICB0aGlzLmFwaU9yaWdpbiA9IGZ1bmN0aW9uIGFwaU9yaWdpbiAoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5pdC5fYWRkKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBkZWxlZ2F0ZUFQSSh0aGlzLmFwaU9yaWdpbiwgdGhpcy5jb25zdHJ1Y3Rvci5BUElfTElTVCwgeyBoYW5kbGVyOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfYWRkICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duO1xuXG4gICAgcHJpdmF0ZSBfb25seSRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5vbmx5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2tpcCRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5za2lwID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZVBhZ2VSZWxvYWRzJGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlUmVsb2FkcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VuYWJsZVBhZ2VSZWxvYWRzJGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlUmVsb2FkcyA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYWdlJCAodXJsOiBzdHJpbmcsIC4uLnJlc3Q6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5wYWdlVXJsID0gaGFuZGxlVGFnQXJncyh1cmwsIHJlc3QpO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmJhc2VVcmwgfHwgZGlybmFtZSh0aGlzLnRlc3RGaWxlLmZpbGVuYW1lKTtcblxuICAgICAgICBjb25zdCBiYXNlID0gcHJlcGFyZUJhc2VVcmwodGhpcy5iYXNlVXJsKTtcblxuICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ3BhZ2UnLCAnVGhlIHBhZ2UgVVJMJywgdGhpcy5wYWdlVXJsKTtcbiAgICAgICAgYXNzZXJ0UGFnZVVybCh0aGlzLnBhZ2VVcmwsICdwYWdlJyk7XG5cbiAgICAgICAgdGhpcy5wYWdlVXJsID0gZ2V0VXJsKHRoaXMucGFnZVVybCwgYmFzZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfc2tpcEpzRXJyb3JzJCAob3B0aW9uczogYm9vbGVhbiB8IFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBTa2lwSnNFcnJvcnNDYWxsYmFjayB8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QgPSB0cnVlKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFsgaXMuYm9vbGVhbiwgaXMubm9uTnVsbE9iamVjdCwgaXMuZnVuY3Rpb24gXSwgJ3NraXBKc0Vycm9ycycsICdUaGUgc2tpcEpzRXJyb3JzIG9wdGlvbnMgYXJndW1lbnQnLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNraXBKc0Vycm9yc09wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHZhbGlkYXRlU2tpcEpzRXJyb3JzT3B0aW9uVmFsdWUodGhpcy5za2lwSnNFcnJvcnNPcHRpb25zLCBTa2lwSnNFcnJvcnNBcmd1bWVudEFwaUVycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaHR0cEF1dGgkIChjcmVkZW50aWFsczogQXV0aENyZWRlbnRpYWxzKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLm5vbk51bGxPYmplY3QsICdodHRwQXV0aCcsICdUaGUgY3JlZGVudGlhbHMnLCBjcmVkZW50aWFscyk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMudXNlcm5hbWUnLCBjcmVkZW50aWFscy51c2VybmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMucGFzc3dvcmQnLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLmRvbWFpbilcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMuZG9tYWluJywgY3JlZGVudGlhbHMuZG9tYWluKTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy53b3Jrc3RhdGlvbicsIGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKTtcblxuICAgICAgICB0aGlzLmF1dGhDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tZXRhJCAoa2V5OiBzdHJpbmcgfCBEaWN0aW9uYXJ5PHN0cmluZz4sIHZhbHVlPzogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFtpcy5zdHJpbmcsIGlzLm5vbk51bGxPYmplY3RdLCAnbWV0YScsIGAke3RoaXMudW5pdFR5cGV9Lm1ldGFgLCBrZXkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IHsgW2tleV06IHZhbHVlIGFzIHN0cmluZyB9IDoga2V5IGFzIERpY3Rpb25hcnk8c3RyaW5nPjtcblxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YVtwcm9wTmFtZV0gPSBkYXRhW3Byb3BOYW1lXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVQYWdlQ2FjaGluZyRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1ha2VBUElMaXN0Rm9yQ2hpbGRDbGFzcyAoQ2hpbGRDbGFzczogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgQ2hpbGRDbGFzcy5BUElfTElTVCA9IFRlc3RpbmdVbml0LkFQSV9MSVNULmNvbmNhdChnZXREZWxlZ2F0ZWRBUElMaXN0KENoaWxkQ2xhc3MucHJvdG90eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbml0IChDaGlsZENsYXNzOiB1bmtub3duLCAuLi5pbml0UHJvcHM6IHVua25vd25bXSk6IFRlc3RpbmdVbml0IHtcbiAgICAgICAgY29uc3QgZm4gPSAoLi4uYXJnczogdW5rbm93bltdKSA6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBhcGlPcmlnaW4gPSBuZXcgQ2hpbGRDbGFzcyguLi5pbml0UHJvcHMpIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cbiAgICAgICAgICAgIHJldHVybiBhcGlPcmlnaW4oLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0SGFuZGxlciA9ICgpOiB1bmtub3duID0+IHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGlsZENsYXNzKC4uLmluaXRQcm9wcywgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBkZWxlZ2F0ZUFQSShmbiwgQ2hpbGRDbGFzcy5BUElfTElTVCwgeyBnZXRIYW5kbGVyIH0pO1xuXG4gICAgICAgIHJldHVybiBmbiBhcyB1bmtub3duIGFzIFRlc3RpbmdVbml0O1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuVGVzdGluZ1VuaXQuQVBJX0xJU1QgPSBnZXREZWxlZ2F0ZWRBUElMaXN0KFRlc3RpbmdVbml0LnByb3RvdHlwZSk7XG5cblxuIl19