UNPKG

ember-legacy-class-transform

Version:
255 lines (209 loc) 26 kB
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } import { sanitizeAttributeValue, requiresSanitization } from './sanitized-values'; import { normalizeProperty } from './props'; import { SVG_NAMESPACE } from './helper'; import { normalizeTextValue } from '../compiled/opcodes/content'; export function defaultManagers(element, attr, _isTrusting, _namespace) { var tagName = element.tagName; var isSVG = element.namespaceURI === SVG_NAMESPACE; if (isSVG) { return defaultAttributeManagers(tagName, attr); } var _normalizeProperty = normalizeProperty(element, attr), type = _normalizeProperty.type, normalized = _normalizeProperty.normalized; if (type === 'attr') { return defaultAttributeManagers(tagName, normalized); } else { return defaultPropertyManagers(tagName, normalized); } } export function defaultPropertyManagers(tagName, attr) { if (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); } export function defaultAttributeManagers(tagName, attr) { if (requiresSanitization(tagName, attr)) { return new SafeAttributeManager(attr); } return new AttributeManager(attr); } export function readDOMAttr(element, attr) { var isSVG = element.namespaceURI === SVG_NAMESPACE; var _normalizeProperty2 = normalizeProperty(element, attr), type = _normalizeProperty2.type, normalized = _normalizeProperty2.normalized; if (isSVG) { return element.getAttribute(normalized); } if (type === 'attr') { return element.getAttribute(normalized); } { return element[normalized]; } } ; export var AttributeManager = function () { function AttributeManager(attr) { _classCallCheck(this, AttributeManager); this.attr = attr; } AttributeManager.prototype.setAttribute = function setAttribute(env, element, value, namespace) { var dom = env.getAppendOperations(); var normalizedValue = normalizeAttributeValue(value); if (!isAttrRemovalValue(normalizedValue)) { dom.setAttribute(element, this.attr, normalizedValue, namespace); } }; AttributeManager.prototype.updateAttribute = function 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); } }; return AttributeManager; }(); ; export var PropertyManager = function (_AttributeManager) { _inherits(PropertyManager, _AttributeManager); function PropertyManager() { _classCallCheck(this, PropertyManager); return _possibleConstructorReturn(this, _AttributeManager.apply(this, arguments)); } PropertyManager.prototype.setAttribute = function setAttribute(_env, element, value, _namespace) { if (!isAttrRemovalValue(value)) { element[this.attr] = value; } }; PropertyManager.prototype.removeAttribute = function removeAttribute(env, element, namespace) { // TODO this sucks but to preserve properties first and to meet current // semantics we must do this. var attr = this.attr; if (namespace) { env.getDOM().removeAttributeNS(element, namespace, attr); } else { env.getDOM().removeAttribute(element, attr); } }; PropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { // ensure the property is always updated element[this.attr] = value; if (isAttrRemovalValue(value)) { this.removeAttribute(env, element, namespace); } }; return PropertyManager; }(AttributeManager); ; 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; } var SafePropertyManager = function (_PropertyManager) { _inherits(SafePropertyManager, _PropertyManager); function SafePropertyManager() { _classCallCheck(this, SafePropertyManager); return _possibleConstructorReturn(this, _PropertyManager.apply(this, arguments)); } SafePropertyManager.prototype.setAttribute = function setAttribute(env, element, value) { _PropertyManager.prototype.setAttribute.call(this, env, element, sanitizeAttributeValue(env, element, this.attr, value)); }; SafePropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value) { _PropertyManager.prototype.updateAttribute.call(this, env, element, sanitizeAttributeValue(env, element, this.attr, value)); }; return SafePropertyManager; }(PropertyManager); function isUserInputValue(tagName, attribute) { return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value'; } var InputValuePropertyManager = function (_AttributeManager2) { _inherits(InputValuePropertyManager, _AttributeManager2); function InputValuePropertyManager() { _classCallCheck(this, InputValuePropertyManager); return _possibleConstructorReturn(this, _AttributeManager2.apply(this, arguments)); } InputValuePropertyManager.prototype.setAttribute = function setAttribute(_env, element, value) { var input = element; input.value = normalizeTextValue(value); }; InputValuePropertyManager.prototype.updateAttribute = function updateAttribute(_env, element, value) { var input = element; var currentValue = input.value; var normalizedValue = normalizeTextValue(value); if (currentValue !== normalizedValue) { input.value = normalizedValue; } }; return InputValuePropertyManager; }(AttributeManager); export var INPUT_VALUE_PROPERTY_MANAGER = new InputValuePropertyManager('value'); function isOptionSelected(tagName, attribute) { return tagName === 'OPTION' && attribute === 'selected'; } var OptionSelectedManager = function (_PropertyManager2) { _inherits(OptionSelectedManager, _PropertyManager2); function OptionSelectedManager() { _classCallCheck(this, OptionSelectedManager); return _possibleConstructorReturn(this, _PropertyManager2.apply(this, arguments)); } OptionSelectedManager.prototype.setAttribute = function setAttribute(_env, element, value) { if (value !== null && value !== undefined && value !== false) { var option = element; option.selected = true; } }; OptionSelectedManager.prototype.updateAttribute = function updateAttribute(_env, element, value) { var option = element; if (value) { option.selected = true; } else { option.selected = false; } }; return OptionSelectedManager; }(PropertyManager); export var OPTION_SELECTED_MANAGER = new OptionSelectedManager('selected'); var SafeAttributeManager = function (_AttributeManager3) { _inherits(SafeAttributeManager, _AttributeManager3); function SafeAttributeManager() { _classCallCheck(this, SafeAttributeManager); return _possibleConstructorReturn(this, _AttributeManager3.apply(this, arguments)); } SafeAttributeManager.prototype.setAttribute = function setAttribute(env, element, value) { _AttributeManager3.prototype.setAttribute.call(this, env, element, sanitizeAttributeValue(env, element, this.attr, value)); }; SafeAttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, _namespace) { _AttributeManager3.prototype.updateAttribute.call(this, env, element, sanitizeAttributeValue(env, element, this.attr, value)); }; return SafeAttributeManager; }(AttributeManager); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzLmpzIl0sIm5hbWVzIjpbInNhbml0aXplQXR0cmlidXRlVmFsdWUiLCJyZXF1aXJlc1Nhbml0aXphdGlvbiIsIm5vcm1hbGl6ZVByb3BlcnR5IiwiU1ZHX05BTUVTUEFDRSIsIm5vcm1hbGl6ZVRleHRWYWx1ZSIsImRlZmF1bHRNYW5hZ2VycyIsImVsZW1lbnQiLCJhdHRyIiwiX2lzVHJ1c3RpbmciLCJfbmFtZXNwYWNlIiwidGFnTmFtZSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzIiwidHlwZSIsIm5vcm1hbGl6ZWQiLCJkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyIsIlNhZmVQcm9wZXJ0eU1hbmFnZXIiLCJpc1VzZXJJbnB1dFZhbHVlIiwiSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUiIsImlzT3B0aW9uU2VsZWN0ZWQiLCJPUFRJT05fU0VMRUNURURfTUFOQUdFUiIsIlByb3BlcnR5TWFuYWdlciIsIlNhZmVBdHRyaWJ1dGVNYW5hZ2VyIiwiQXR0cmlidXRlTWFuYWdlciIsInJlYWRET01BdHRyIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZW52IiwidmFsdWUiLCJuYW1lc3BhY2UiLCJkb20iLCJnZXRBcHBlbmRPcGVyYXRpb25zIiwibm9ybWFsaXplZFZhbHVlIiwibm9ybWFsaXplQXR0cmlidXRlVmFsdWUiLCJpc0F0dHJSZW1vdmFsVmFsdWUiLCJ1cGRhdGVBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJnZXRET00iLCJyZW1vdmVBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZSIsIl9lbnYiLCJTdHJpbmciLCJhdHRyaWJ1dGUiLCJJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyIiwiaW5wdXQiLCJjdXJyZW50VmFsdWUiLCJPcHRpb25TZWxlY3RlZE1hbmFnZXIiLCJvcHRpb24iLCJzZWxlY3RlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7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SSxxQjs7Ozs7Ozs7O29DQUNGcEIsWSx5QkFBYWMsSSxFQUFNbkMsTyxFQUFTdUIsSyxFQUFPO0FBQy9CLFlBQUlBLFVBQVUsSUFBVixJQUFrQkEsVUFBVVEsU0FBNUIsSUFBeUNSLFVBQVUsS0FBdkQsRUFBOEQ7QUFDMUQsZ0JBQUltQixTQUFTMUMsT0FBYjtBQUNBMEMsbUJBQU9DLFFBQVAsR0FBa0IsSUFBbEI7QUFDSDtBQUNKLEs7O29DQUNEYixlLDRCQUFnQkssSSxFQUFNbkMsTyxFQUFTdUIsSyxFQUFPO0FBQ2xDLFlBQUltQixTQUFTMUMsT0FBYjtBQUNBLFlBQUl1QixLQUFKLEVBQVc7QUFDUG1CLG1CQUFPQyxRQUFQLEdBQWtCLElBQWxCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hELG1CQUFPQyxRQUFQLEdBQWtCLEtBQWxCO0FBQ0g7QUFDSixLOzs7RUFkK0IzQixlOztBQWdCcEMsT0FBTyxJQUFNRCwwQkFBMEIsSUFBSTBCLHFCQUFKLENBQTBCLFVBQTFCLENBQWhDOztJQUNEeEIsb0I7Ozs7Ozs7OzttQ0FDRkksWSx5QkFBYUMsRyxFQUFLdEIsTyxFQUFTdUIsSyxFQUFPO0FBQzlCLHFDQUFNRixZQUFOLFlBQW1CQyxHQUFuQixFQUF3QnRCLE9BQXhCLEVBQWlDTix1QkFBdUI0QixHQUF2QixFQUE0QnRCLE9BQTVCLEVBQXFDLEtBQUtDLElBQTFDLEVBQWdEc0IsS0FBaEQsQ0FBakM7QUFDSCxLOzttQ0FDRE8sZSw0QkFBZ0JSLEcsRUFBS3RCLE8sRUFBU3VCLEssRUFBT3BCLFUsRUFBWTtBQUM3QyxxQ0FBTTJCLGVBQU4sWUFBc0JSLEdBQXRCLEVBQTJCdEIsT0FBM0IsRUFBb0NOLHVCQUF1QjRCLEdBQXZCLEVBQTRCdEIsT0FBNUIsRUFBcUMsS0FBS0MsSUFBMUMsRUFBZ0RzQixLQUFoRCxDQUFwQztBQUNILEs7OztFQU44QkwsZ0IiLCJmaWxlIjoibGliL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlLCByZXF1aXJlc1Nhbml0aXphdGlvbiB9IGZyb20gJy4vc2FuaXRpemVkLXZhbHVlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQcm9wZXJ0eSB9IGZyb20gJy4vcHJvcHMnO1xuaW1wb3J0IHsgU1ZHX05BTUVTUEFDRSB9IGZyb20gJy4vaGVscGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRleHRWYWx1ZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1hbmFnZXJzKGVsZW1lbnQsIGF0dHIsIF9pc1RydXN0aW5nLCBfbmFtZXNwYWNlKSB7XG4gICAgbGV0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWU7XG4gICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnModGFnTmFtZSwgYXR0cik7XG4gICAgfVxuICAgIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuICAgIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBub3JtYWxpemVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BlcnR5TWFuYWdlcnModGFnTmFtZSwgbm9ybWFsaXplZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzKHRhZ05hbWUsIGF0dHIpIHtcbiAgICBpZiAocmVxdWlyZXNTYW5pdGl6YXRpb24odGFnTmFtZSwgYXR0cikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlUHJvcGVydHlNYW5hZ2VyKGF0dHIpO1xuICAgIH1cbiAgICBpZiAoaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUjtcbiAgICB9XG4gICAgaWYgKGlzT3B0aW9uU2VsZWN0ZWQodGFnTmFtZSwgYXR0cikpIHtcbiAgICAgICAgcmV0dXJuIE9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb3BlcnR5TWFuYWdlcihhdHRyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnModGFnTmFtZSwgYXR0cikge1xuICAgIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVBdHRyaWJ1dGVNYW5hZ2VyKGF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1hbmFnZXIoYXR0cik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVhZERPTUF0dHIoZWxlbWVudCwgYXR0cikge1xuICAgIGxldCBpc1NWRyA9IGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFO1xuICAgIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5vcm1hbGl6ZWQpO1xuICAgIH1cbiAgICB7XG4gICAgICAgIHJldHVybiBlbGVtZW50W25vcm1hbGl6ZWRdO1xuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcihhdHRyKSB7XG4gICAgICAgIHRoaXMuYXR0ciA9IGF0dHI7XG4gICAgfVxuICAgIHNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgbGV0IGRvbSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNBdHRyUmVtb3ZhbFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyLCBub3JtYWxpemVkVmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCB0aGlzLmF0dHIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIHRoaXMuYXR0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eU1hbmFnZXIgZXh0ZW5kcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUsIF9uYW1lc3BhY2UpIHtcbiAgICAgICAgaWYgKCFpc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBlbGVtZW50W3RoaXMuYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBuYW1lc3BhY2UpIHtcbiAgICAgICAgLy8gVE9ETyB0aGlzIHN1Y2tzIGJ1dCB0byBwcmVzZXJ2ZSBwcm9wZXJ0aWVzIGZpcnN0IGFuZCB0byBtZWV0IGN1cnJlbnRcbiAgICAgICAgLy8gc2VtYW50aWNzIHdlIG11c3QgZG8gdGhpcy5cbiAgICAgICAgbGV0IHsgYXR0ciB9ID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgZW52LmdldERPTSgpLnJlbW92ZUF0dHJpYnV0ZU5TKGVsZW1lbnQsIG5hbWVzcGFjZSwgYXR0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBwcm9wZXJ0eSBpcyBhbHdheXMgdXBkYXRlZFxuICAgICAgICBlbGVtZW50W3RoaXMuYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKGlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBvbmNsaWNrIGZ1bmN0aW9uIGV0YyBpbiBTU1JcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuY2xhc3MgU2FmZVByb3BlcnR5TWFuYWdlciBleHRlbmRzIFByb3BlcnR5TWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5jbGFzcyBJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgQXR0cmlidXRlTWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIGlucHV0LnZhbHVlID0gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY29uc3QgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUiA9IG5ldyBJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyKCd2YWx1ZScpO1xuZnVuY3Rpb24gaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyaWJ1dGUpIHtcbiAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ09QVElPTicgJiYgYXR0cmlidXRlID09PSAnc2VsZWN0ZWQnO1xufVxuY2xhc3MgT3B0aW9uU2VsZWN0ZWRNYW5hZ2VyIGV4dGVuZHMgUHJvcGVydHlNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gZWxlbWVudDtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKF9lbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSBlbGVtZW50O1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBPUFRJT05fU0VMRUNURURfTUFOQUdFUiA9IG5ldyBPcHRpb25TZWxlY3RlZE1hbmFnZXIoJ3NlbGVjdGVkJyk7XG5jbGFzcyBTYWZlQXR0cmlidXRlTWFuYWdlciBleHRlbmRzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCB0aGlzLmF0dHIsIHZhbHVlKSk7XG4gICAgfVxuICAgIHVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCBfbmFtZXNwYWNlKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHNhbml0aXplQXR0cmlidXRlVmFsdWUoZW52LCBlbGVtZW50LCB0aGlzLmF0dHIsIHZhbHVlKSk7XG4gICAgfVxufSJdfQ==