@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
102 lines • 13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const _1 = require("./");
const types_1 = require("../types");
const hook_1 = __importDefault(require("../../api/request-hooks/hook"));
const START_FROM_VOWEL_RE = /^[aeiou]/i;
function getIndefiniteArticle(text) {
return START_FROM_VOWEL_RE.test(text) ? 'an' : 'a';
}
function isNonNegativeValue(value) {
return lodash_1.isFinite(value) && value >= 0;
}
function getNumberTypeActualValueMsg(value, type) {
if (type !== 'number')
return type;
if (Number.isNaN(value))
return NaN;
if (!lodash_1.isFinite(value))
return Infinity;
return value;
}
exports.is = {
number: {
name: 'number',
predicate: lodash_1.isFinite,
getActualValueMsg: getNumberTypeActualValueMsg
},
nonNegativeNumber: {
name: 'non-negative number',
predicate: isNonNegativeValue,
getActualValueMsg: getNumberTypeActualValueMsg
},
nonNegativeNumberString: {
name: 'non-negative number',
predicate: value => isNonNegativeValue(parseInt(value, 10)),
getActualValueMsg: value => {
const number = parseInt(value, 10);
return isNaN(number) ? JSON.stringify(value) : number;
}
},
boolean: {
name: 'boolean',
predicate: (value, type) => type === 'boolean'
},
string: {
name: 'string',
predicate: (value, type) => type === 'string'
},
function: {
name: 'function',
predicate: (value, type) => type === 'function'
},
regExp: {
name: 'regular expression',
predicate: lodash_1.isRegExp
},
array: {
name: 'array',
predicate: value => Array.isArray(value)
},
nonNullObject: {
name: 'non-null object',
predicate: (value, type) => type === 'object' && !lodash_1.isNil(value),
getActualValueMsg: (value, type) => lodash_1.isNil(value) ? String(value) : type
},
requestHookSubclass: {
name: 'RequestHook subclass',
predicate: value => value instanceof hook_1.default && value.constructor && value.constructor !== hook_1.default
},
clientScriptInitializer: {
name: 'client script initializer',
predicate: value => typeof value === 'object' && ['path', 'content', 'module'].some(prop => value && prop in value)
}
};
function assertType(types, callsiteName, what, value) {
types = Array.isArray(types) ? types : [types];
let pass = false;
const actualType = typeof value;
let actualMsg = actualType;
let expectedTypeMsg = '';
const last = types.length - 1;
types.forEach((type, i) => {
pass = pass || type.predicate(value, actualType);
if (type.getActualValueMsg)
actualMsg = type.getActualValueMsg(value, actualType);
if (i === 0)
expectedTypeMsg += type.name;
else
expectedTypeMsg += (i === last ? ' or ' + getIndefiniteArticle(type.name) + ' ' : ', ') + type.name;
});
if (!pass) {
throw callsiteName ?
new _1.APIError(callsiteName, types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg) :
new _1.GeneralError(types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg);
}
}
exports.assertType = assertType;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1hc3NlcnRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUEwRjtBQUMxRix5QkFBNEM7QUFDNUMsb0NBQTBDO0FBQzFDLHdFQUF1RDtBQUV2RCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztBQUV4QyxTQUFTLG9CQUFvQixDQUFFLElBQUk7SUFDL0IsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFFLEtBQUs7SUFDOUIsT0FBTyxpQkFBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUUsS0FBSyxFQUFFLElBQUk7SUFDN0MsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQztJQUVoQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDO0lBRWYsSUFBSSxDQUFDLGlCQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sUUFBUSxDQUFDO0lBRXBCLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFWSxRQUFBLEVBQUUsR0FBRztJQUNkLE1BQU0sRUFBRTtRQUNKLElBQUksRUFBZSxRQUFRO1FBQzNCLFNBQVMsRUFBVSxpQkFBYztRQUNqQyxpQkFBaUIsRUFBRSwyQkFBMkI7S0FDakQ7SUFFRCxpQkFBaUIsRUFBRTtRQUNmLElBQUksRUFBZSxxQkFBcUI7UUFDeEMsU0FBUyxFQUFVLGtCQUFrQjtRQUNyQyxpQkFBaUIsRUFBRSwyQkFBMkI7S0FDakQ7SUFFRCx1QkFBdUIsRUFBRTtRQUNyQixJQUFJLEVBQU8scUJBQXFCO1FBQ2hDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFM0QsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVuQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzFELENBQUM7S0FDSjtJQUVELE9BQU8sRUFBRTtRQUNMLElBQUksRUFBTyxTQUFTO1FBQ3BCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTO0tBQ2pEO0lBRUQsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFPLFFBQVE7UUFDbkIsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVE7S0FDaEQ7SUFFRCxRQUFRLEVBQUU7UUFDTixJQUFJLEVBQU8sVUFBVTtRQUNyQixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssVUFBVTtLQUNsRDtJQUVELE1BQU0sRUFBRTtRQUNKLElBQUksRUFBTyxvQkFBb0I7UUFDL0IsU0FBUyxFQUFFLGlCQUFRO0tBQ3RCO0lBRUQsS0FBSyxFQUFFO1FBQ0gsSUFBSSxFQUFPLE9BQU87UUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDM0M7SUFFRCxhQUFhLEVBQUU7UUFDWCxJQUFJLEVBQWUsaUJBQWlCO1FBQ3BDLFNBQVMsRUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxjQUFpQixDQUFDLEtBQUssQ0FBQztRQUNsRixpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUN0RjtJQUVELG1CQUFtQixFQUFFO1FBQ2pCLElBQUksRUFBTyxzQkFBc0I7UUFDakMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGNBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssY0FBVztLQUM3RztJQUVELHVCQUF1QixFQUFFO1FBQ3JCLElBQUksRUFBTywyQkFBMkI7UUFDdEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQztLQUN0SDtDQUNKLENBQUM7QUFFRixTQUFnQixVQUFVLENBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4RCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLElBQUksSUFBSSxHQUFjLEtBQUssQ0FBQztJQUM1QixNQUFNLFVBQVUsR0FBUSxPQUFPLEtBQUssQ0FBQztJQUNyQyxJQUFJLFNBQVMsR0FBUyxVQUFVLENBQUM7SUFDakMsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxHQUFjLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEIsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVqRCxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNQLGVBQWUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDOztZQUU3QixlQUFlLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxNQUFNLFlBQVksQ0FBQyxDQUFDO1lBQ2hCLElBQUksV0FBUSxDQUFDLFlBQVksRUFBRSxzQkFBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvRixJQUFJLGVBQVksQ0FBQyxzQkFBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0Y7QUFDTCxDQUFDO0FBMUJELGdDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRmluaXRlIGFzIGlzRmluaXRlTnVtYmVyLCBpc1JlZ0V4cCwgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQVBJRXJyb3IsIEdlbmVyYWxFcnJvciB9IGZyb20gJy4vJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uLy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuXG5jb25zdCBTVEFSVF9GUk9NX1ZPV0VMX1JFID0gL15bYWVpb3VdL2k7XG5cbmZ1bmN0aW9uIGdldEluZGVmaW5pdGVBcnRpY2xlICh0ZXh0KSB7XG4gICAgcmV0dXJuIFNUQVJUX0ZST01fVk9XRUxfUkUudGVzdCh0ZXh0KSA/ICdhbicgOiAnYSc7XG59XG5cbmZ1bmN0aW9uIGlzTm9uTmVnYXRpdmVWYWx1ZSAodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGaW5pdGVOdW1iZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG5cbmZ1bmN0aW9uIGdldE51bWJlclR5cGVBY3R1YWxWYWx1ZU1zZyAodmFsdWUsIHR5cGUpIHtcbiAgICBpZiAodHlwZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpXG4gICAgICAgIHJldHVybiBOYU47XG5cbiAgICBpZiAoIWlzRmluaXRlTnVtYmVyKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgY29uc3QgaXMgPSB7XG4gICAgbnVtYmVyOiB7XG4gICAgICAgIG5hbWU6ICAgICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgcHJlZGljYXRlOiAgICAgICAgIGlzRmluaXRlTnVtYmVyLFxuICAgICAgICBnZXRBY3R1YWxWYWx1ZU1zZzogZ2V0TnVtYmVyVHlwZUFjdHVhbFZhbHVlTXNnXG4gICAgfSxcblxuICAgIG5vbk5lZ2F0aXZlTnVtYmVyOiB7XG4gICAgICAgIG5hbWU6ICAgICAgICAgICAgICAnbm9uLW5lZ2F0aXZlIG51bWJlcicsXG4gICAgICAgIHByZWRpY2F0ZTogICAgICAgICBpc05vbk5lZ2F0aXZlVmFsdWUsXG4gICAgICAgIGdldEFjdHVhbFZhbHVlTXNnOiBnZXROdW1iZXJUeXBlQWN0dWFsVmFsdWVNc2dcbiAgICB9LFxuXG4gICAgbm9uTmVnYXRpdmVOdW1iZXJTdHJpbmc6IHtcbiAgICAgICAgbmFtZTogICAgICAnbm9uLW5lZ2F0aXZlIG51bWJlcicsXG4gICAgICAgIHByZWRpY2F0ZTogdmFsdWUgPT4gaXNOb25OZWdhdGl2ZVZhbHVlKHBhcnNlSW50KHZhbHVlLCAxMCkpLFxuXG4gICAgICAgIGdldEFjdHVhbFZhbHVlTXNnOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG4gICAgICAgICAgICByZXR1cm4gaXNOYU4obnVtYmVyKSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBib29sZWFuOiB7XG4gICAgICAgIG5hbWU6ICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICBwcmVkaWNhdGU6ICh2YWx1ZSwgdHlwZSkgPT4gdHlwZSA9PT0gJ2Jvb2xlYW4nXG4gICAgfSxcblxuICAgIHN0cmluZzoge1xuICAgICAgICBuYW1lOiAgICAgICdzdHJpbmcnLFxuICAgICAgICBwcmVkaWNhdGU6ICh2YWx1ZSwgdHlwZSkgPT4gdHlwZSA9PT0gJ3N0cmluZydcbiAgICB9LFxuXG4gICAgZnVuY3Rpb246IHtcbiAgICAgICAgbmFtZTogICAgICAnZnVuY3Rpb24nLFxuICAgICAgICBwcmVkaWNhdGU6ICh2YWx1ZSwgdHlwZSkgPT4gdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgIH0sXG5cbiAgICByZWdFeHA6IHtcbiAgICAgICAgbmFtZTogICAgICAncmVndWxhciBleHByZXNzaW9uJyxcbiAgICAgICAgcHJlZGljYXRlOiBpc1JlZ0V4cFxuICAgIH0sXG5cbiAgICBhcnJheToge1xuICAgICAgICBuYW1lOiAgICAgICdhcnJheScsXG4gICAgICAgIHByZWRpY2F0ZTogdmFsdWUgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICB9LFxuXG4gICAgbm9uTnVsbE9iamVjdDoge1xuICAgICAgICBuYW1lOiAgICAgICAgICAgICAgJ25vbi1udWxsIG9iamVjdCcsXG4gICAgICAgIHByZWRpY2F0ZTogICAgICAgICAodmFsdWUsIHR5cGUpID0+IHR5cGUgPT09ICdvYmplY3QnICYmICFpc051bGxPclVuZGVmaW5lZCh2YWx1ZSksXG4gICAgICAgIGdldEFjdHVhbFZhbHVlTXNnOiAodmFsdWUsIHR5cGUpID0+IGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiB0eXBlXG4gICAgfSxcblxuICAgIHJlcXVlc3RIb29rU3ViY2xhc3M6IHtcbiAgICAgICAgbmFtZTogICAgICAnUmVxdWVzdEhvb2sgc3ViY2xhc3MnLFxuICAgICAgICBwcmVkaWNhdGU6IHZhbHVlID0+IHZhbHVlIGluc3RhbmNlb2YgUmVxdWVzdEhvb2sgJiYgdmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IgIT09IFJlcXVlc3RIb29rXG4gICAgfSxcblxuICAgIGNsaWVudFNjcmlwdEluaXRpYWxpemVyOiB7XG4gICAgICAgIG5hbWU6ICAgICAgJ2NsaWVudCBzY3JpcHQgaW5pdGlhbGl6ZXInLFxuICAgICAgICBwcmVkaWNhdGU6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgWydwYXRoJywgJ2NvbnRlbnQnLCAnbW9kdWxlJ10uc29tZShwcm9wID0+IHZhbHVlICYmIHByb3AgaW4gdmFsdWUpXG4gICAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFR5cGUgKHR5cGVzLCBjYWxsc2l0ZU5hbWUsIHdoYXQsIHZhbHVlKSB7XG4gICAgdHlwZXMgPSBBcnJheS5pc0FycmF5KHR5cGVzKSA/IHR5cGVzIDogW3R5cGVzXTtcblxuICAgIGxldCBwYXNzICAgICAgICAgICAgPSBmYWxzZTtcbiAgICBjb25zdCBhY3R1YWxUeXBlICAgICAgPSB0eXBlb2YgdmFsdWU7XG4gICAgbGV0IGFjdHVhbE1zZyAgICAgICA9IGFjdHVhbFR5cGU7XG4gICAgbGV0IGV4cGVjdGVkVHlwZU1zZyA9ICcnO1xuICAgIGNvbnN0IGxhc3QgICAgICAgICAgICA9IHR5cGVzLmxlbmd0aCAtIDE7XG5cbiAgICB0eXBlcy5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gICAgICAgIHBhc3MgPSBwYXNzIHx8IHR5cGUucHJlZGljYXRlKHZhbHVlLCBhY3R1YWxUeXBlKTtcblxuICAgICAgICBpZiAodHlwZS5nZXRBY3R1YWxWYWx1ZU1zZylcbiAgICAgICAgICAgIGFjdHVhbE1zZyA9IHR5cGUuZ2V0QWN0dWFsVmFsdWVNc2codmFsdWUsIGFjdHVhbFR5cGUpO1xuXG4gICAgICAgIGlmIChpID09PSAwKVxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlTXNnICs9IHR5cGUubmFtZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlTXNnICs9IChpID09PSBsYXN0ID8gJyBvciAnICsgZ2V0SW5kZWZpbml0ZUFydGljbGUodHlwZS5uYW1lKSArICcgJyA6ICcsICcpICsgdHlwZS5uYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXNzKSB7XG4gICAgICAgIHRocm93IGNhbGxzaXRlTmFtZSA/XG4gICAgICAgICAgICBuZXcgQVBJRXJyb3IoY2FsbHNpdGVOYW1lLCBSVU5USU1FX0VSUk9SUy5pbnZhbGlkVmFsdWVUeXBlLCB3aGF0LCBleHBlY3RlZFR5cGVNc2csIGFjdHVhbE1zZykgOlxuICAgICAgICAgICAgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5pbnZhbGlkVmFsdWVUeXBlLCB3aGF0LCBleHBlY3RlZFR5cGVNc2csIGFjdHVhbE1zZyk7XG4gICAgfVxufVxuIl19