"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const assertion_1 = require("../../test-run/commands/assertion"); const test_run_1 = require("../../errors/test-run"); const types_1 = require("../../client-functions/types"); const add_rendered_warning_1 = __importDefault(require("../../notifications/add-rendered-warning")); const warning_message_1 = __importDefault(require("../../notifications/warning-message")); class Assertion { constructor(actual, testController, callsite) { this._testController = testController; this._actual = actual; this._callsite = callsite; } then() { throw new test_run_1.AssertionWithoutMethodCallError(this._callsite); } _enqueueAssertion(command, assertionArgs) { let options = assertionArgs.opts || {}; let message = assertionArgs.message; // NOTE: Assertion options should be specified after the 'message' parameter. // await t.expect(42).eql(43, 'wrong value', { timeout: 10000 }); // In case of empty assertion message we allowing to specify assertion option in place of assertion message. // await t.expect(42).eql(43, { timeout: 10000 }); if (typeof message === 'object') { options = assertionArgs.message; message = void 0; } return this._testController.enqueueCommand(command, { assertionType: command.methodName, actual: this._actual, expected: assertionArgs.expected, expected2: assertionArgs.expected2, message: message, options: { timeout: options.timeout, allowUnawaitedPromise: options.allowUnawaitedPromise }, }, this._checkForWarnings.bind(this)); } _checkForWarnings(testController, assertionCommand, callsite) { testController.checkForExcessiveAwaits(callsite, assertionCommand); if ((0, types_1.isClientFunction)(assertionCommand.actual)) { (0, add_rendered_warning_1.default)(testController.warningLog, { message: warning_message_1.default.assertedClientFunctionInstance, actionId: assertionCommand.actionId, }, callsite); } else if ((0, types_1.isSelector)(assertionCommand.actual)) { (0, add_rendered_warning_1.default)(testController.warningLog, { message: warning_message_1.default.assertedSelectorInstance, actionId: assertionCommand.actionId, }, callsite); } } [assertion_1.EqlAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.EqlAssertionCommand, { expected, message, opts }); } [assertion_1.NotEqlAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.NotEqlAssertionCommand, { expected, message, opts }); } [assertion_1.OkAssertionCommand.methodName](message, opts) { return this._enqueueAssertion(assertion_1.OkAssertionCommand, { message, opts }); } [assertion_1.NotOkAssertionCommand.methodName](message, opts) { return this._enqueueAssertion(assertion_1.NotOkAssertionCommand, { message, opts }); } [assertion_1.ContainsAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.ContainsAssertionCommand, { expected, message, opts }); } [assertion_1.NotContainsAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.NotContainsAssertionCommand, { expected, message, opts }); } [assertion_1.TypeOfAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.TypeOfAssertionCommand, { expected, message, opts }); } [assertion_1.NotTypeOfAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.NotTypeOfAssertionCommand, { expected, message, opts }); } [assertion_1.GtAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.GtAssertionCommand, { expected, message, opts }); } [assertion_1.GteAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.GteAssertionCommand, { expected, message, opts }); } [assertion_1.LtAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.LtAssertionCommand, { expected, message, opts }); } [assertion_1.LteAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.LteAssertionCommand, { expected, message, opts }); } [assertion_1.WithinAssertionCommand.methodName](start, finish, message, opts) { // NOTE: `within` is not available in Chai `assert` interface. return this._enqueueAssertion(assertion_1.WithinAssertionCommand, { expected: start, expected2: finish, message, opts }); } [assertion_1.NotWithinAssertionCommand.methodName](start, finish, message, opts) { return this._enqueueAssertion(assertion_1.NotWithinAssertionCommand, { expected: start, expected2: finish, message, opts }); } [assertion_1.MatchAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.MatchAssertionCommand, { expected, message, opts }); } [assertion_1.NotMatchAssertionCommand.methodName](expected, message, opts) { return this._enqueueAssertion(assertion_1.NotMatchAssertionCommand, { expected, message, opts }); } } exports.default = Assertion; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90ZXN0LWNvbnRyb2xsZXIvYXNzZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUVBa0IyQztBQUMzQyxvREFBd0U7QUFJeEUsd0RBQTRFO0FBQzVFLG9HQUFrRTtBQUNsRSwwRkFBa0U7QUFTbEUsTUFBcUIsU0FBUztJQUsxQixZQUFvQixNQUFlLEVBQUUsY0FBOEIsRUFBRSxRQUF3QjtRQUN6RixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFXLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFTLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRU0sSUFBSTtRQUNQLE1BQU0sSUFBSSwwQ0FBK0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQixDQUFFLE9BQWdDLEVBQUUsYUFBNEI7UUFDckYsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUVwQyw2RUFBNkU7UUFDN0UsaUVBQWlFO1FBQ2pFLDRHQUE0RztRQUM1RyxrREFBa0Q7UUFDbEQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUEyQixDQUFDO1lBQ3BELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQ2hELGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQVMsSUFBSSxDQUFDLE9BQU87WUFDM0IsUUFBUSxFQUFPLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLFNBQVMsRUFBTSxh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QUFFLElBQXNCO1FBQzlHLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRU0sQ0FBQyxxQ0FBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNqSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQ0FBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU0sQ0FBQyxpQ0FBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNqRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQ0FBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sQ0FBQyxvQ0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNwRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQ0FBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0NBQ0o7QUF2SEQsNEJBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBc3NlcnRpb25Db21tYW5kLFxuICAgIENvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBFcWxBc3NlcnRpb25Db21tYW5kLFxuICAgIEd0QXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBHdGVBc3NlcnRpb25Db21tYW5kLFxuICAgIEx0QXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBMdGVBc3NlcnRpb25Db21tYW5kLFxuICAgIE1hdGNoQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBOb3RDb250YWluc0Fzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90RXFsQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBOb3RNYXRjaEFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90T2tBc3NlcnRpb25Db21tYW5kLFxuICAgIE5vdFR5cGVPZkFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90V2l0aGluQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBPa0Fzc2VydGlvbkNvbW1hbmQsXG4gICAgVHlwZU9mQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBXaXRoaW5Bc3NlcnRpb25Db21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgQXNzZXJ0aW9uV2l0aG91dE1ldGhvZENhbGxFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdENvbnRyb2xsZXIgZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgeyBBc3NlcnRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBpc0NsaWVudEZ1bmN0aW9uLCBpc1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy90eXBlcyc7XG5pbXBvcnQgYWRkV2FybmluZyBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2FkZC1yZW5kZXJlZC13YXJuaW5nJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0UgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuXG5pbnRlcmZhY2UgQXNzZXJ0aW9uQXJncyB7XG4gICAgb3B0czogQXNzZXJ0aW9uT3B0aW9ucztcbiAgICBtZXNzYWdlPzogc3RyaW5nIHwgQXNzZXJ0aW9uT3B0aW9ucztcbiAgICBleHBlY3RlZD86IHVua25vd247XG4gICAgZXhwZWN0ZWQyPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXNzZXJ0aW9uIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0Q29udHJvbGxlcjogVGVzdENvbnRyb2xsZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWN0dWFsOiB1bmtub3duO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYWN0dWFsOiB1bmtub3duLCB0ZXN0Q29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCkge1xuICAgICAgICB0aGlzLl90ZXN0Q29udHJvbGxlciA9IHRlc3RDb250cm9sbGVyO1xuICAgICAgICB0aGlzLl9hY3R1YWwgICAgICAgICA9IGFjdHVhbDtcbiAgICAgICAgdGhpcy5fY2FsbHNpdGUgICAgICAgPSBjYWxsc2l0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGhlbiAoKTogbmV2ZXIge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uV2l0aG91dE1ldGhvZENhbGxFcnJvcih0aGlzLl9jYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5xdWV1ZUFzc2VydGlvbiAoY29tbWFuZDogdHlwZW9mIEFzc2VydGlvbkNvbW1hbmQsIGFzc2VydGlvbkFyZ3M6IEFzc2VydGlvbkFyZ3MpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhc3NlcnRpb25BcmdzLm9wdHMgfHwge307XG4gICAgICAgIGxldCBtZXNzYWdlID0gYXNzZXJ0aW9uQXJncy5tZXNzYWdlO1xuXG4gICAgICAgIC8vIE5PVEU6IEFzc2VydGlvbiBvcHRpb25zIHNob3VsZCBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlICdtZXNzYWdlJyBwYXJhbWV0ZXIuXG4gICAgICAgIC8vIGF3YWl0IHQuZXhwZWN0KDQyKS5lcWwoNDMsICd3cm9uZyB2YWx1ZScsIHsgdGltZW91dDogMTAwMDAgfSk7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgZW1wdHkgYXNzZXJ0aW9uIG1lc3NhZ2Ugd2UgYWxsb3dpbmcgdG8gc3BlY2lmeSBhc3NlcnRpb24gb3B0aW9uIGluIHBsYWNlIG9mIGFzc2VydGlvbiBtZXNzYWdlLlxuICAgICAgICAvLyBhd2FpdCB0LmV4cGVjdCg0MikuZXFsKDQzLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXNzZXJ0aW9uQXJncy5tZXNzYWdlIGFzIEFzc2VydGlvbk9wdGlvbnM7XG4gICAgICAgICAgICBtZXNzYWdlID0gdm9pZCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3RDb250cm9sbGVyLmVucXVldWVDb21tYW5kKGNvbW1hbmQsIHtcbiAgICAgICAgICAgIGFzc2VydGlvblR5cGU6IGNvbW1hbmQubWV0aG9kTmFtZSxcbiAgICAgICAgICAgIGFjdHVhbDogICAgICAgIHRoaXMuX2FjdHVhbCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAgICAgIGFzc2VydGlvbkFyZ3MuZXhwZWN0ZWQsXG4gICAgICAgICAgICBleHBlY3RlZDI6ICAgICBhc3NlcnRpb25BcmdzLmV4cGVjdGVkMixcbiAgICAgICAgICAgIG1lc3NhZ2U6ICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBvcHRpb25zOiAgICAgICB7IHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCwgYWxsb3dVbmF3YWl0ZWRQcm9taXNlOiBvcHRpb25zLmFsbG93VW5hd2FpdGVkUHJvbWlzZSB9LFxuICAgICAgICB9LCB0aGlzLl9jaGVja0Zvcldhcm5pbmdzLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrRm9yV2FybmluZ3MgKHRlc3RDb250cm9sbGVyOiBUZXN0Q29udHJvbGxlciwgYXNzZXJ0aW9uQ29tbWFuZDogQXNzZXJ0aW9uQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogdm9pZCB7XG4gICAgICAgIHRlc3RDb250cm9sbGVyLmNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzKGNhbGxzaXRlLCBhc3NlcnRpb25Db21tYW5kKTtcblxuICAgICAgICBpZiAoaXNDbGllbnRGdW5jdGlvbihhc3NlcnRpb25Db21tYW5kLmFjdHVhbCkpIHtcbiAgICAgICAgICAgIGFkZFdhcm5pbmcodGVzdENvbnRyb2xsZXIud2FybmluZ0xvZywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICBXQVJOSU5HX01FU1NBR0UuYXNzZXJ0ZWRDbGllbnRGdW5jdGlvbkluc3RhbmNlLFxuICAgICAgICAgICAgICAgIGFjdGlvbklkOiBhc3NlcnRpb25Db21tYW5kLmFjdGlvbklkLFxuICAgICAgICAgICAgfSwgY2FsbHNpdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU2VsZWN0b3IoYXNzZXJ0aW9uQ29tbWFuZC5hY3R1YWwpKSB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAgV0FSTklOR19NRVNTQUdFLmFzc2VydGVkU2VsZWN0b3JJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBhY3Rpb25JZDogYXNzZXJ0aW9uQ29tbWFuZC5hY3Rpb25JZCxcbiAgICAgICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBbRXFsQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihFcWxBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90RXFsQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RFcWxBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbT2tBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oT2tBc3NlcnRpb25Db21tYW5kLCB7IG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RPa0Fzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RPa0Fzc2VydGlvbkNvbW1hbmQsIHsgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW0NvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihDb250YWluc0Fzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RDb250YWluc0Fzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90Q29udGFpbnNBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbVHlwZU9mQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihUeXBlT2ZBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90VHlwZU9mQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RUeXBlT2ZBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbR3RBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKEd0QXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW0d0ZUFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oR3RlQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW0x0QXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihMdEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtMdGVBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKEx0ZUFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtXaXRoaW5Bc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChzdGFydDogbnVtYmVyLCBmaW5pc2g6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIC8vIE5PVEU6IGB3aXRoaW5gIGlzIG5vdCBhdmFpbGFibGUgaW4gQ2hhaSBgYXNzZXJ0YCBpbnRlcmZhY2UuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKFdpdGhpbkFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQ6IHN0YXJ0LCBleHBlY3RlZDI6IGZpbmlzaCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdFdpdGhpbkFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKHN0YXJ0OiBudW1iZXIsIGZpbmlzaDogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90V2l0aGluQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZDogc3RhcnQsIGV4cGVjdGVkMjogZmluaXNoLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTWF0Y2hBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE1hdGNoQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdE1hdGNoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RNYXRjaEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxufVxuIl19