ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
288 lines (236 loc) • 26 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 _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");
}
}
function defaultManagers(element, attr, _isTrusting, _namespace) {
var tagName = element.tagName;
var isSVG = element.namespaceURI === _helper.SVG_NAMESPACE;
if (isSVG) {
return defaultAttributeManagers(tagName, attr);
}
var _normalizeProperty = (0, _props.normalizeProperty)(element, attr),
type = _normalizeProperty.type,
normalized = _normalizeProperty.normalized;
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) {
var isSVG = element.namespaceURI === _helper.SVG_NAMESPACE;
var _normalizeProperty2 = (0, _props.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];
}
}
;
var AttributeManager = exports.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;
}();
;
var PropertyManager = exports.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, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
};
SafePropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value) {
_PropertyManager.prototype.updateAttribute.call(this, env, element, (0, _sanitizedValues.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 = (0, _content.normalizeTextValue)(value);
};
InputValuePropertyManager.prototype.updateAttribute = function updateAttribute(_env, element, value) {
var input = element;
var currentValue = input.value;
var normalizedValue = (0, _content.normalizeTextValue)(value);
if (currentValue !== normalizedValue) {
input.value = normalizedValue;
}
};
return InputValuePropertyManager;
}(AttributeManager);
var INPUT_VALUE_PROPERTY_MANAGER = exports.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);
var OPTION_SELECTED_MANAGER = exports.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, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
};
SafeAttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, _namespace) {
_AttributeManager3.prototype.updateAttribute.call(this, env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value));
};
return SafeAttributeManager;
}(AttributeManager);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzLmpzIl0sIm5hbWVzIjpbInNhbml0aXplQXR0cmlidXRlVmFsdWUiLCJyZXF1aXJlc1Nhbml0aXphdGlvbiIsIm5vcm1hbGl6ZVByb3BlcnR5IiwiU1ZHX05BTUVTUEFDRSIsIm5vcm1hbGl6ZVRleHRWYWx1ZSIsImRlZmF1bHRNYW5hZ2VycyIsImVsZW1lbnQiLCJhdHRyIiwiX2lzVHJ1c3RpbmciLCJfbmFtZXNwYWNlIiwidGFnTmFtZSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzIiwidHlwZSIsIm5vcm1hbGl6ZWQiLCJkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyIsIlNhZmVQcm9wZXJ0eU1hbmFnZXIiLCJpc1VzZXJJbnB1dFZhbHVlIiwiSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUiIsImlzT3B0aW9uU2VsZWN0ZWQiLCJPUFRJT05fU0VMRUNURURfTUFOQUdFUiIsIlByb3BlcnR5TWFuYWdlciIsIlNhZmVBdHRyaWJ1dGVNYW5hZ2VyIiwiQXR0cmlidXRlTWFuYWdlciIsInJlYWRET01BdHRyIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZW52IiwidmFsdWUiLCJuYW1lc3BhY2UiLCJkb20iLCJnZXRBcHBlbmRPcGVyYXRpb25zIiwibm9ybWFsaXplZFZhbHVlIiwibm9ybWFsaXplQXR0cmlidXRlVmFsdWUiLCJpc0F0dHJSZW1vdmFsVmFsdWUiLCJ1cGRhdGVBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJnZXRET00iLCJyZW1vdmVBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZSIsIl9lbnYiLCJTdHJpbmciLCJhdHRyaWJ1dGUiLCJJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyIiwiaW5wdXQiLCJjdXJyZW50VmFsdWUiLCJPcHRpb25TZWxlY3RlZE1hbmFnZXIiLCJvcHRpb24iLCJzZWxlY3RlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBSU8sQUFBUztRQWFULEFBQVM7UUFZVCxBQUFTO1FBTVQsQUFBUzs7QUFuQ2hCLEFBQVMsQUFBd0IsQUFBNEI7O0FBQzdELEFBQVMsQUFBeUI7O0FBQ2xDLEFBQVMsQUFBcUI7O0FBQzlCLEFBQVMsQUFBMEIsQUFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyx5QkFBQSxBQUF5QixTQUF6QixBQUFrQyxNQUFsQyxBQUF3QyxhQUF4QyxBQUFxRCxZQUFZLEFBQ3BFO1FBQUksVUFBVSxRQUFkLEFBQXNCLEFBQ3RCO1FBQUksUUFBUSxRQUFaLEFBQVksQUFBUSxBQUFpQixBQUNyQztRQUFBLEFBQUksT0FBTyxBQUNQO2VBQU8seUJBQUEsQUFBeUIsU0FBaEMsQUFBTyxBQUFrQyxBQUM1QztBQUxtRTs7NkJBTXpDLDhCQUFBLEFBQWtCLFNBTnVCLEFBTXpDLEFBQTJCO1FBTmMsQUFNOUQsMEJBTjhELEFBTTlEO1FBTjhELEFBTXhELGdDQU53RCxBQU14RCxBQUNaOztRQUFJLFNBQUosQUFBYSxRQUFRLEFBQ2pCO2VBQU8seUJBQUEsQUFBeUIsU0FBaEMsQUFBTyxBQUFrQyxBQUM1QztBQUZELFdBRU8sQUFDSDtlQUFPLHdCQUFBLEFBQXdCLFNBQS9CLEFBQU8sQUFBaUMsQUFDM0M7QUFDSjtBQUNEO0FBQU8saUNBQUEsQUFBaUMsU0FBakMsQUFBMEMsTUFBTSxBQUNuRDtRQUFJLDJDQUFBLEFBQXFCLFNBQXpCLEFBQUksQUFBOEIsT0FBTyxBQUNyQztlQUFPLElBQUEsQUFBSSxvQkFBWCxBQUFPLEFBQXdCLEFBQ2xDO0FBQ0Q7UUFBSSxpQkFBQSxBQUFpQixTQUFyQixBQUFJLEFBQTBCLE9BQU8sQUFDakM7ZUFBQSxBQUFPLEFBQ1Y7QUFDRDtRQUFJLGlCQUFBLEFBQWlCLFNBQXJCLEFBQUksQUFBMEIsT0FBTyxBQUNqQztlQUFBLEFBQU8sQUFDVjtBQUNEO1dBQU8sSUFBQSxBQUFJLGdCQUFYLEFBQU8sQUFBb0IsQUFDOUI7QUFDRDtBQUFPLGtDQUFBLEFBQWtDLFNBQWxDLEFBQTJDLE1BQU0sQUFDcEQ7UUFBSSwyQ0FBQSxBQUFxQixTQUF6QixBQUFJLEFBQThCLE9BQU8sQUFDckM7ZUFBTyxJQUFBLEFBQUkscUJBQVgsQUFBTyxBQUF5QixBQUNuQztBQUNEO1dBQU8sSUFBQSxBQUFJLGlCQUFYLEFBQU8sQUFBcUIsQUFDL0I7QUFDRDtBQUFPLHFCQUFBLEFBQXFCLFNBQXJCLEFBQThCLE1BQU0sQUFDdkM7UUFBSSxRQUFRLFFBRDJCLEFBQ3ZDLEFBQVksQUFBUSxBQUFpQjs7OEJBQ1YsOEJBQUEsQUFBa0IsU0FGTixBQUVaLEFBQTJCO1FBRmYsQUFFakMsMkJBRmlDLEFBRWpDO1FBRmlDLEFBRTNCLGlDQUYyQixBQUUzQixBQUNaOztRQUFBLEFBQUksT0FBTyxBQUNQO2VBQU8sUUFBQSxBQUFRLGFBQWYsQUFBTyxBQUFxQixBQUMvQjtBQUNEO1FBQUksU0FBSixBQUFhLFFBQVEsQUFDakI7ZUFBTyxRQUFBLEFBQVEsYUFBZixBQUFPLEFBQXFCLEFBQy9CO0FBQ0Q7QUFDSTtlQUFPLFFBQVAsQUFBTyxBQUFRLEFBQ2xCO0FBQ0o7O0FBQ0QsQUFDQTtJQUFBLEFBQWEsMERBQ1Q7OEJBQUEsQUFBWSxNQUFNOzhCQUNkOzthQUFBLEFBQUssT0FBTCxBQUFZLEFBQ2Y7QUFITDs7K0JBQUEsQUFJSSxxQ0FKSixBQUlpQixLQUpqQixBQUlzQixTQUp0QixBQUkrQixPQUovQixBQUlzQyxXQUFXLEFBQ3pDO1lBQUksTUFBTSxJQUFWLEFBQVUsQUFBSSxBQUNkO1lBQUksa0JBQWtCLHdCQUF0QixBQUFzQixBQUF3QixBQUM5QztZQUFJLENBQUMsbUJBQUwsQUFBSyxBQUFtQixrQkFBa0IsQUFDdEM7Z0JBQUEsQUFBSSxhQUFKLEFBQWlCLFNBQVMsS0FBMUIsQUFBK0IsTUFBL0IsQUFBcUMsaUJBQXJDLEFBQXNELEFBQ3pEO0FBQ0o7QUFWTDs7K0JBQUEsQUFXSSwyQ0FYSixBQVdvQixLQVhwQixBQVd5QixTQVh6QixBQVdrQyxPQVhsQyxBQVd5QyxXQUFXLEFBQzVDO1lBQUksVUFBQSxBQUFVLFFBQVEsVUFBbEIsQUFBNEIsYUFBYSxVQUE3QyxBQUF1RCxPQUFPLEFBQzFEO2dCQUFBLEFBQUksV0FBVyxBQUNYO29CQUFBLEFBQUksU0FBSixBQUFhLGtCQUFiLEFBQStCLFNBQS9CLEFBQXdDLFdBQVcsS0FBbkQsQUFBd0QsQUFDM0Q7QUFGRCxtQkFFTyxBQUNIO29CQUFBLEFBQUksU0FBSixBQUFhLGdCQUFiLEFBQTZCLFNBQVMsS0FBdEMsQUFBMkMsQUFDOUM7QUFDSjtBQU5ELGVBTU8sQUFDSDtpQkFBQSxBQUFLLGFBQUwsQUFBa0IsS0FBbEIsQUFBdUIsU0FBdkIsQUFBZ0MsQUFDbkM7QUFDSjtBQXJCTDs7V0FBQTs7QUF1QkEsQUFDQTtJQUFBLEFBQWEseUVBQWI7K0JBQUE7OytCQUFBOzhCQUFBOzs4RUFBQTtBQUFBOzs4QkFBQSxBQUNJLHFDQURKLEFBQ2lCLE1BRGpCLEFBQ3VCLFNBRHZCLEFBQ2dDLE9BRGhDLEFBQ3VDLFlBQVksQUFDM0M7WUFBSSxDQUFDLG1CQUFMLEFBQUssQUFBbUIsUUFBUSxBQUM1QjtvQkFBUSxLQUFSLEFBQWEsUUFBYixBQUFxQixBQUN4QjtBQUNKO0FBTEw7OzhCQUFBLEFBTUksMkNBTkosQUFNb0IsS0FOcEIsQUFNeUIsU0FOekIsQUFNa0MsV0FBVyxBQUNyQztBQUNBO0FBRnFDO1lBQUEsQUFHL0IsT0FIK0IsQUFHdEIsS0FIc0IsQUFHL0IsQUFDTjs7WUFBQSxBQUFJLFdBQVcsQUFDWDtnQkFBQSxBQUFJLFNBQUosQUFBYSxrQkFBYixBQUErQixTQUEvQixBQUF3QyxXQUF4QyxBQUFtRCxBQUN0RDtBQUZELGVBRU8sQUFDSDtnQkFBQSxBQUFJLFNBQUosQUFBYSxnQkFBYixBQUE2QixTQUE3QixBQUFzQyxBQUN6QztBQUNKO0FBZkw7OzhCQUFBLEFBZ0JJLDJDQWhCSixBQWdCb0IsS0FoQnBCLEFBZ0J5QixTQWhCekIsQUFnQmtDLE9BaEJsQyxBQWdCeUMsV0FBVyxBQUM1QztBQUNBO2dCQUFRLEtBQVIsQUFBYSxRQUFiLEFBQXFCLEFBQ3JCO1lBQUksbUJBQUosQUFBSSxBQUFtQixRQUFRLEFBQzNCO2lCQUFBLEFBQUssZ0JBQUwsQUFBcUIsS0FBckIsQUFBMEIsU0FBMUIsQUFBbUMsQUFDdEM7QUFDSjtBQXRCTDs7V0FBQTtFQUFBLEFBQXFDO0FBd0JyQztBQUNBLFNBQUEsQUFBUyx3QkFBVCxBQUFpQyxPQUFPLEFBQ3BDO1FBQUksVUFBQSxBQUFVLFNBQVMsVUFBbkIsQUFBNkIsYUFBYSxVQUE5QyxBQUF3RCxNQUFNLEFBQzFEO2VBQUEsQUFBTyxBQUNWO0FBQ0Q7UUFBSSxVQUFKLEFBQWMsTUFBTSxBQUNoQjtlQUFBLEFBQU8sQUFDVjtBQUNEO0FBQ0E7UUFBSSxPQUFBLEFBQU8sVUFBWCxBQUFxQixZQUFZLEFBQzdCO2VBQUEsQUFBTyxBQUNWO0FBQ0Q7V0FBTyxPQUFQLEFBQU8sQUFBTyxBQUNqQjs7QUFDRCxTQUFBLEFBQVMsbUJBQVQsQUFBNEIsT0FBTyxBQUMvQjtXQUFPLFVBQUEsQUFBVSxRQUFRLFVBQXpCLEFBQW1DLEFBQ3RDOzs7SUFDSyxBOzs7Ozs7Ozs7a0NBQ0YsQSxxQyxBQUFhLEtBQUssQSxTQUFTLEEsT0FBTyxBQUM5QjttQ0FBQSxBQUFNLHdCQUFOLEFBQW1CLEtBQW5CLEFBQXdCLFNBQVMsNkNBQUEsQUFBdUIsS0FBdkIsQUFBNEIsU0FBUyxLQUFyQyxBQUEwQyxNQUEzRSxBQUFpQyxBQUFnRCxBQUNwRjtBOztrQyxBQUNELDJDQUFnQixBLEtBQUssQSxTLEFBQVMsT0FBTyxBQUNqQzttQ0FBQSxBQUFNLDJCQUFOLEFBQXNCLEtBQXRCLEFBQTJCLFNBQVMsNkNBQUEsQUFBdUIsS0FBdkIsQUFBNEIsU0FBUyxLQUFyQyxBQUEwQyxNQUE5RSxBQUFvQyxBQUFnRCxBQUN2RjtBOzs7RUFONkIsQTs7QUFRbEMsU0FBQSxBQUFTLGlCQUFULEFBQTBCLFNBQTFCLEFBQW1DLFdBQVcsQUFDMUM7V0FBTyxDQUFDLFlBQUEsQUFBWSxXQUFXLFlBQXhCLEFBQW9DLGVBQWUsY0FBMUQsQUFBd0UsQUFDM0U7OztJQUNLLEE7Ozs7Ozs7Ozt3Q0FDRixBLHFDQUFhLEEsTUFBTSxBLFMsQUFBUyxPQUFPLEFBQy9CO1lBQUksUUFBSixBQUFZLEFBQ1o7Y0FBQSxBQUFNLFFBQVEsaUNBQWQsQUFBYyxBQUFtQixBQUNwQztBOzt3Q0FDRCxBLDJDLEFBQWdCLE1BQU0sQSxTLEFBQVMsT0FBTyxBQUNsQztZQUFJLFFBQUosQUFBWSxBQUNaO1lBQUksZUFBZSxNQUFuQixBQUF5QixBQUN6QjtZQUFJLGtCQUFrQixpQ0FBdEIsQUFBc0IsQUFBbUIsQUFDekM7WUFBSSxpQkFBSixBQUFxQixpQkFBaUIsQUFDbEM7a0JBQUEsQUFBTSxRQUFOLEFBQWMsQUFDakI7QUFDSjtBOzs7RUFabUMsQUFjeEMsQTs7QUFBTyxJQUFNLHNFQUErQixJQUFBLEFBQUksMEJBQXpDLEFBQXFDLEFBQThCO0FBQzFFLFNBQUEsQUFBUyxpQkFBVCxBQUEwQixTQUExQixBQUFtQyxXQUFXLEFBQzFDO1dBQU8sWUFBQSxBQUFZLFlBQVksY0FBL0IsQUFBNkMsQUFDaEQ7OztJLEFBQ0s7Ozs7Ozs7OztvQyxBQUNGLHFDQUFhLEEsTUFBTSxBLFMsQUFBUyxPQUFPLEFBQy9CO1lBQUksVUFBQSxBQUFVLFFBQVEsVUFBbEIsQUFBNEIsYUFBYSxVQUE3QyxBQUF1RCxPQUFPLEFBQzFEO2dCQUFJLFNBQUosQUFBYSxBQUNiO21CQUFBLEFBQU8sV0FBUCxBQUFrQixBQUNyQjtBQUNKO0E7O29DLEFBQ0QsMkMsQUFBZ0IsTUFBTSxBLFMsQUFBUyxPQUFPLEFBQ2xDO1lBQUksU0FBSixBQUFhLEFBQ2I7WUFBQSxBQUFJLE9BQU8sQUFDUDttQkFBQSxBQUFPLFdBQVAsQUFBa0IsQUFDckI7QUFGRCxlQUVPLEFBQ0g7bUJBQUEsQUFBTyxXQUFQLEFBQWtCLEFBQ3JCO0FBQ0o7QTs7O0UsQUFkK0IsQUFnQnBDOztBQUFPLElBQU0sNERBQTBCLElBQUEsQUFBSSxzQkFBcEMsQUFBZ0MsQUFBMEI7O0lBQzNELEE7Ozs7Ozs7OzttQ0FDRixBLHFDQUFhLEEsS0FBSyxBLFNBQVMsQSxPQUFPLEFBQzlCO3FDQUFBLEFBQU0sd0JBQU4sQUFBbUIsS0FBbkIsQUFBd0IsU0FBUyw2Q0FBQSxBQUF1QixLQUF2QixBQUE0QixTQUFTLEtBQXJDLEFBQTBDLE1BQTNFLEFBQWlDLEFBQWdELEFBQ3BGO0E7O21DQUNELEEsMkMsQUFBZ0IsS0FBSyxBLFMsQUFBUyxPQUFPLEEsWUFBWSxBQUM3QztxQ0FBQSxBQUFNLDJCQUFOLEFBQXNCLEtBQXRCLEFBQTJCLFNBQVMsNkNBQUEsQUFBdUIsS0FBdkIsQUFBNEIsU0FBUyxLQUFyQyxBQUEwQyxNQUE5RSxBQUFvQyxBQUFnRCxBQUN2RjtBOzs7RUFOOEIsQSIsImZpbGUiOiJsaWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNhbml0aXplQXR0cmlidXRlVmFsdWUsIHJlcXVpcmVzU2FuaXRpemF0aW9uIH0gZnJvbSAnLi9zYW5pdGl6ZWQtdmFsdWVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBTVkdfTkFNRVNQQUNFIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVGV4dFZhbHVlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0TWFuYWdlcnMoZWxlbWVudCwgYXR0ciwgX2lzVHJ1c3RpbmcsIF9uYW1lc3BhY2UpIHtcbiAgICBsZXQgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZTtcbiAgICBsZXQgaXNTVkcgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBhdHRyKTtcbiAgICB9XG4gICAgbGV0IHsgdHlwZSwgbm9ybWFsaXplZCB9ID0gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgYXR0cik7XG4gICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzKHRhZ05hbWUsIG5vcm1hbGl6ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UHJvcGVydHlNYW5hZ2Vycyh0YWdOYW1lLCBub3JtYWxpemVkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnR5TWFuYWdlcnModGFnTmFtZSwgYXR0cikge1xuICAgIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVQcm9wZXJ0eU1hbmFnZXIoYXR0cik7XG4gICAgfVxuICAgIGlmIChpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSO1xuICAgIH1cbiAgICBpZiAoaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gT1BUSU9OX1NFTEVDVEVEX01BTkFHRVI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvcGVydHlNYW5hZ2VyKGF0dHIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBhdHRyKSB7XG4gICAgaWYgKHJlcXVpcmVzU2FuaXRpemF0aW9uKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZUF0dHJpYnV0ZU1hbmFnZXIoYXR0cik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXR0cmlidXRlTWFuYWdlcihhdHRyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWFkRE9NQXR0cihlbGVtZW50LCBhdHRyKSB7XG4gICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICAgbGV0IHsgdHlwZSwgbm9ybWFsaXplZCB9ID0gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgYXR0cik7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShub3JtYWxpemVkKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICAgfVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRbbm9ybWFsaXplZF07XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKGF0dHIpIHtcbiAgICAgICAgdGhpcy5hdHRyID0gYXR0cjtcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBsZXQgZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0F0dHJSZW1vdmFsVmFsdWUobm9ybWFsaXplZFZhbHVlKSkge1xuICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbGVtZW50LCB0aGlzLmF0dHIsIG5vcm1hbGl6ZWRWYWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIHRoaXMuYXR0cik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5TWFuYWdlciBleHRlbmRzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShfZW52LCBlbGVtZW50LCB2YWx1ZSwgX25hbWVzcGFjZSkge1xuICAgICAgICBpZiAoIWlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRbdGhpcy5hdHRyXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBUT0RPIHRoaXMgc3Vja3MgYnV0IHRvIHByZXNlcnZlIHByb3BlcnRpZXMgZmlyc3QgYW5kIHRvIG1lZXQgY3VycmVudFxuICAgICAgICAvLyBzZW1hbnRpY3Mgd2UgbXVzdCBkbyB0aGlzLlxuICAgICAgICBsZXQgeyBhdHRyIH0gPSB0aGlzO1xuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBhdHRyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBlbnN1cmUgdGhlIHByb3BlcnR5IGlzIGFsd2F5cyB1cGRhdGVkXG4gICAgICAgIGVsZW1lbnRbdGhpcy5hdHRyXSA9IHZhbHVlO1xuICAgICAgICBpZiAoaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuO1xuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIG9uY2xpY2sgZnVuY3Rpb24gZXRjIGluIFNTUlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZnVuY3Rpb24gaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5jbGFzcyBTYWZlUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgUHJvcGVydHlNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBzdXBlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVudiwgZWxlbWVudCwgdGhpcy5hdHRyLCB2YWx1ZSkpO1xuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBzdXBlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVudiwgZWxlbWVudCwgdGhpcy5hdHRyLCB2YWx1ZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVXNlcklucHV0VmFsdWUodGFnTmFtZSwgYXR0cmlidXRlKSB7XG4gICAgcmV0dXJuICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScpICYmIGF0dHJpYnV0ZSA9PT0gJ3ZhbHVlJztcbn1cbmNsYXNzIElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIgZXh0ZW5kcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVUZXh0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSID0gbmV3IElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIoJ3ZhbHVlJyk7XG5mdW5jdGlvbiBpc09wdGlvblNlbGVjdGVkKHRhZ05hbWUsIGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiB0YWdOYW1lID09PSAnT1BUSU9OJyAmJiBhdHRyaWJ1dGUgPT09ICdzZWxlY3RlZCc7XG59XG5jbGFzcyBPcHRpb25TZWxlY3RlZE1hbmFnZXIgZXh0ZW5kcyBQcm9wZXJ0eU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShfZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBlbGVtZW50O1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IG9wdGlvbiA9IGVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IE9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSID0gbmV3IE9wdGlvblNlbGVjdGVkTWFuYWdlcignc2VsZWN0ZWQnKTtcbmNsYXNzIFNhZmVBdHRyaWJ1dGVNYW5hZ2VyIGV4dGVuZHMgQXR0cmlidXRlTWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIF9uYW1lc3BhY2UpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG59Il19