ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
186 lines (180 loc) • 22.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.OPTION_SELECTED_MANAGER = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = undefined;
exports.defaultManagers = defaultManagers;
exports.defaultPropertyManagers = defaultPropertyManagers;
exports.defaultAttributeManagers = defaultAttributeManagers;
exports.readDOMAttr = readDOMAttr;
var _sanitizedValues = require('./sanitized-values');
var _props = require('./props');
var _helper = require('./helper');
var _content = require('../compiled/opcodes/content');
function defaultManagers(element, attr, _isTrusting, _namespace) {
let tagName = element.tagName;
let isSVG = element.namespaceURI === _helper.SVG_NAMESPACE;
if (isSVG) {
return defaultAttributeManagers(tagName, attr);
}
let { type, normalized } = (0, _props.normalizeProperty)(element, attr);
if (type === 'attr') {
return defaultAttributeManagers(tagName, normalized);
} else {
return defaultPropertyManagers(tagName, normalized);
}
}
function defaultPropertyManagers(tagName, attr) {
if ((0, _sanitizedValues.requiresSanitization)(tagName, attr)) {
return new SafePropertyManager(attr);
}
if (isUserInputValue(tagName, attr)) {
return INPUT_VALUE_PROPERTY_MANAGER;
}
if (isOptionSelected(tagName, attr)) {
return OPTION_SELECTED_MANAGER;
}
return new PropertyManager(attr);
}
function defaultAttributeManagers(tagName, attr) {
if ((0, _sanitizedValues.requiresSanitization)(tagName, attr)) {
return new SafeAttributeManager(attr);
}
return new AttributeManager(attr);
}
function readDOMAttr(element, attr) {
let isSVG = element.namespaceURI === _helper.SVG_NAMESPACE;
let { type, normalized } = (0, _props.normalizeProperty)(element, attr);
if (isSVG) {
return element.getAttribute(normalized);
}
if (type === 'attr') {
return element.getAttribute(normalized);
}
{
return element[normalized];
}
}
;
class AttributeManager {
constructor(attr) {
this.attr = attr;
}
setAttribute(env, element, value, namespace) {
let dom = env.getAppendOperations();
let normalizedValue = normalizeAttributeValue(value);
if (!isAttrRemovalValue(normalizedValue)) {
dom.setAttribute(element, this.attr, normalizedValue, namespace);
}
}
updateAttribute(env, element, value, namespace) {
if (value === null || value === undefined || value === false) {
if (namespace) {
env.getDOM().removeAttributeNS(element, namespace, this.attr);
} else {
env.getDOM().removeAttribute(element, this.attr);
}
} else {
this.setAttribute(env, element, value);
}
}
}
exports.AttributeManager = AttributeManager;
;
class PropertyManager extends AttributeManager {
setAttribute(_env, element, value, _namespace) {
if (!isAttrRemovalValue(value)) {
element[this.attr] = value;
}
}
removeAttribute(env, element, namespace) {
// TODO this sucks but to preserve properties first and to meet current
// semantics we must do this.
let { attr } = this;
if (namespace) {
env.getDOM().removeAttributeNS(element, namespace, attr);
} else {
env.getDOM().removeAttribute(element, attr);
}
}
updateAttribute(env, element, value, namespace) {
// ensure the property is always updated
element[this.attr] = value;
if (isAttrRemovalValue(value)) {
this.removeAttribute(env, element, namespace);
}
}
}
exports.PropertyManager = PropertyManager;
;
function normalizeAttributeValue(value) {
if (value === false || value === undefined || value === null) {
return null;
}
if (value === true) {
return '';
}
// onclick function etc in SSR
if (typeof value === 'function') {
return null;
}
return String(value);
}
function isAttrRemovalValue(value) {
return value === null || value === undefined;
}
class SafePropertyManager extends PropertyManager {
setAttribute(env, element, value) {
super.setAttribute(env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
}
updateAttribute(env, element, value) {
super.updateAttribute(env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
}
}
function isUserInputValue(tagName, attribute) {
return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value';
}
class InputValuePropertyManager extends AttributeManager {
setAttribute(_env, element, value) {
let input = element;
input.value = (0, _content.normalizeTextValue)(value);
}
updateAttribute(_env, element, value) {
let input = element;
let currentValue = input.value;
let normalizedValue = (0, _content.normalizeTextValue)(value);
if (currentValue !== normalizedValue) {
input.value = normalizedValue;
}
}
}
const INPUT_VALUE_PROPERTY_MANAGER = exports.INPUT_VALUE_PROPERTY_MANAGER = new InputValuePropertyManager('value');
function isOptionSelected(tagName, attribute) {
return tagName === 'OPTION' && attribute === 'selected';
}
class OptionSelectedManager extends PropertyManager {
setAttribute(_env, element, value) {
if (value !== null && value !== undefined && value !== false) {
let option = element;
option.selected = true;
}
}
updateAttribute(_env, element, value) {
let option = element;
if (value) {
option.selected = true;
} else {
option.selected = false;
}
}
}
const OPTION_SELECTED_MANAGER = exports.OPTION_SELECTED_MANAGER = new OptionSelectedManager('selected');
class SafeAttributeManager extends AttributeManager {
setAttribute(env, element, value) {
super.setAttribute(env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
}
updateAttribute(env, element, value, _namespace) {
super.updateAttribute(env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzLmpzIl0sIm5hbWVzIjpbImRlZmF1bHRNYW5hZ2VycyIsImRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzIiwiZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzIiwicmVhZERPTUF0dHIiLCJlbGVtZW50IiwiYXR0ciIsIl9pc1RydXN0aW5nIiwiX25hbWVzcGFjZSIsInRhZ05hbWUiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsInR5cGUiLCJub3JtYWxpemVkIiwiU2FmZVByb3BlcnR5TWFuYWdlciIsImlzVXNlcklucHV0VmFsdWUiLCJJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSIiwiaXNPcHRpb25TZWxlY3RlZCIsIk9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSIiwiUHJvcGVydHlNYW5hZ2VyIiwiU2FmZUF0dHJpYnV0ZU1hbmFnZXIiLCJBdHRyaWJ1dGVNYW5hZ2VyIiwiZ2V0QXR0cmlidXRlIiwiY29uc3RydWN0b3IiLCJzZXRBdHRyaWJ1dGUiLCJlbnYiLCJ2YWx1ZSIsIm5hbWVzcGFjZSIsImRvbSIsImdldEFwcGVuZE9wZXJhdGlvbnMiLCJub3JtYWxpemVkVmFsdWUiLCJub3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSIsImlzQXR0clJlbW92YWxWYWx1ZSIsInVwZGF0ZUF0dHJpYnV0ZSIsInVuZGVmaW5lZCIsImdldERPTSIsInJlbW92ZUF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlIiwiX2VudiIsIlN0cmluZyIsImF0dHJpYnV0ZSIsIklucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIiLCJpbnB1dCIsImN1cnJlbnRWYWx1ZSIsIk9wdGlvblNlbGVjdGVkTWFuYWdlciIsIm9wdGlvbiIsInNlbGVjdGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7UUFJZ0JBLGUsR0FBQUEsZTtRQWFBQyx1QixHQUFBQSx1QjtRQVlBQyx3QixHQUFBQSx3QjtRQU1BQyxXLEdBQUFBLFc7O0FBbkNoQjs7QUFDQTs7QUFDQTs7QUFD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QUFXO0FBQ1BtQixtQkFBT0MsUUFBUCxHQUFrQixJQUFsQjtBQUNILFNBRkQsTUFFTztBQUNIRCxtQkFBT0MsUUFBUCxHQUFrQixLQUFsQjtBQUNIO0FBQ0o7QUFkK0M7QUFnQjdDLE1BQU01Qiw0REFBMEIsSUFBSTBCLHFCQUFKLENBQTBCLFVBQTFCLENBQWhDO0FBQ1AsTUFBTXhCLG9CQUFOLFNBQW1DQyxnQkFBbkMsQ0FBb0Q7QUFDaERHLGlCQUFhQyxHQUFiLEVBQWtCcEIsT0FBbEIsRUFBMkJxQixLQUEzQixFQUFrQztBQUM5QixjQUFNRixZQUFOLENBQW1CQyxHQUFuQixFQUF3QnBCLE9BQXhCLEVBQWlDLDZDQUF1Qm9CLEdBQXZCLEVBQTRCcEIsT0FBNUIsRUFBcUMsS0FBS0MsSUFBMUMsRUFBZ0RvQixLQUFoRCxDQUFqQztBQUNIO0FBQ0RPLG9CQUFnQlIsR0FBaEIsRUFBcUJwQixPQUFyQixFQUE4QnFCLEtBQTlCLEVBQXFDbEIsVUFBckMsRUFBaUQ7QUFDN0MsY0FBTXlCLGVBQU4sQ0FBc0JSLEdBQXRCLEVBQTJCcEIsT0FBM0IsRUFBb0MsNkNBQXVCb0IsR0FBdkIsRUFBNEJwQixPQUE1QixFQUFxQyxLQUFLQyxJQUExQyxFQUFnRG9CLEtBQWhELENBQXBDO0FBQ0g7QUFOK0MiLCJmaWxlIjoibGliL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlLCByZXF1aXJlc1Nhbml0aXphdGlvbiB9IGZyb20gJy4vc2FuaXRpemVkLXZhbHVlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQcm9wZXJ0eSB9IGZyb20gJy4vcHJvcHMnO1xuaW1wb3J0IHsgU1ZHX05BTUVTUEFDRSB9IGZyb20gJy4vaGVscGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRleHRWYWx1ZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1hbmFnZXJzKGVsZW1lbnQsIGF0dHIsIF9pc1RydXN0aW5nLCBfbmFtZXNwYWNlKSB7XG4gICAgbGV0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWU7XG4gICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnModGFnTmFtZSwgYXR0cik7XG4gICAgfVxuICAgIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuICAgIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBub3JtYWxpemVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BlcnR5TWFuYWdlcnModGFnTmFtZSwgbm9ybWFsaXplZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzKHRhZ05hbWUsIGF0dHIpIHtcbiAgICBpZiAocmVxdWlyZXNTYW5pdGl6YXRpb24odGFnTmFtZSwgYXR0cikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlUHJvcGVydHlNYW5hZ2VyKGF0dHIpO1xuICAgIH1cbiAgICBpZiAoaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUjtcbiAgICB9XG4gICAgaWYgKGlzT3B0aW9uU2VsZWN0ZWQodGFnTmFtZSwgYXR0cikpIHtcbiAgICAgICAgcmV0dXJuIE9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb3BlcnR5TWFuYWdlcihhdHRyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnModGFnTmFtZSwgYXR0cikge1xuICAgIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVBdHRyaWJ1dGVNYW5hZ2VyKGF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1hbmFnZXIoYXR0cik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVhZERPTUF0dHIoZWxlbWVudCwgYXR0cikge1xuICAgIGxldCBpc1NWRyA9IGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFO1xuICAgIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5vcm1hbGl6ZWQpO1xuICAgIH1cbiAgICB7XG4gICAgICAgIHJldHVybiBlbGVtZW50W25vcm1hbGl6ZWRdO1xuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcihhdHRyKSB7XG4gICAgICAgIHRoaXMuYXR0ciA9IGF0dHI7XG4gICAgfVxuICAgIHNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IGRvbSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNBdHRyUmVtb3ZhbFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyLCBub3JtYWxpemVkVmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCB0aGlzLmF0dHIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIHRoaXMuYXR0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eU1hbmFnZXIgZXh0ZW5kcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUsIF9uYW1lc3BhY2UpIHtcbiAgICAgICAgaWYgKCFpc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBlbGVtZW50W3RoaXMuYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBuYW1lc3BhY2UpIHtcbiAgICAgICAgLy8gVE9ETyB0aGlzIHN1Y2tzIGJ1dCB0byBwcmVzZXJ2ZSBwcm9wZXJ0aWVzIGZpcnN0IGFuZCB0byBtZWV0IGN1cnJlbnRcbiAgICAgICAgLy8gc2VtYW50aWNzIHdlIG11c3QgZG8gdGhpcy5cbiAgICAgICAgbGV0IHsgYXR0ciB9ID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgZW52LmdldERPTSgpLnJlbW92ZUF0dHJpYnV0ZU5TKGVsZW1lbnQsIG5hbWVzcGFjZSwgYXR0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBwcm9wZXJ0eSBpcyBhbHdheXMgdXBkYXRlZFxuICAgICAgICBlbGVtZW50W3RoaXMuYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKGlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBvbmNsaWNrIGZ1bmN0aW9uIGV0YyBpbiBTU1JcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuY2xhc3MgU2FmZVByb3BlcnR5TWFuYWdlciBleHRlbmRzIFByb3BlcnR5TWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5jbGFzcyBJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgQXR0cmlidXRlTWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIGlucHV0LnZhbHVlID0gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY29uc3QgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUiA9IG5ldyBJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyKCd2YWx1ZScpO1xuZnVuY3Rpb24gaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyaWJ1dGUpIHtcbiAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ09QVElPTicgJiYgYXR0cmlidXRlID09PSAnc2VsZWN0ZWQnO1xufVxuY2xhc3MgT3B0aW9uU2VsZWN0ZWRNYW5hZ2VyIGV4dGVuZHMgUHJvcGVydHlNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gZWxlbWVudDtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSBlbGVtZW50O1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBPUFRJT05fU0VMRUNURURfTUFOQUdFUiA9IG5ldyBPcHRpb25TZWxlY3RlZE1hbmFnZXIoJ3NlbGVjdGVkJyk7XG5jbGFzcyBTYWZlQXR0cmlidXRlTWFuYWdlciBleHRlbmRzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCB0aGlzLmF0dHIsIHZhbHVlKSk7XG4gICAgfVxuICAgIHVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBfbmFtZXNwYWNlKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCB0aGlzLmF0dHIsIHZhbHVlKSk7XG4gICAgfVxufSJdfQ==