@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
354 lines (261 loc) • 31 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dynamicAttribute = dynamicAttribute;
exports.OptionSelectedDynamicAttribute = exports.InputValueDynamicAttribute = exports.SafeDynamicAttribute = exports.SafeDynamicProperty = exports.DefaultDynamicProperty = exports.SimpleDynamicAttribute = exports.DynamicAttribute = void 0;
var _globalContext = require("@glimmer/global-context");
var _normalize = require("../../dom/normalize");
var _props = require("../../dom/props");
var _sanitizedValues = require("../../dom/sanitized-values");
var _env2 = require("@glimmer/env");
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function dynamicAttribute(element, attr, namespace, isTrusting) {
if (isTrusting === void 0) {
isTrusting = false;
}
var tagName = element.tagName,
namespaceURI = element.namespaceURI;
var attribute = {
element: element,
name: attr,
namespace: namespace
};
if (_env2.DEBUG && attr === 'style' && !isTrusting) {
return new DebugStyleAttributeManager(attribute);
}
if (namespaceURI === "http://www.w3.org/2000/svg"
/* SVG */
) {
return buildDynamicAttribute(tagName, attr, attribute);
}
var _normalizeProperty = (0, _props.normalizeProperty)(element, attr),
type = _normalizeProperty.type,
normalized = _normalizeProperty.normalized;
if (type === 'attr') {
return buildDynamicAttribute(tagName, normalized, attribute);
} else {
return buildDynamicProperty(tagName, normalized, attribute);
}
}
function buildDynamicAttribute(tagName, name, attribute) {
if ((0, _sanitizedValues.requiresSanitization)(tagName, name)) {
return new SafeDynamicAttribute(attribute);
} else {
return new SimpleDynamicAttribute(attribute);
}
}
function buildDynamicProperty(tagName, name, attribute) {
if ((0, _sanitizedValues.requiresSanitization)(tagName, name)) {
return new SafeDynamicProperty(name, attribute);
}
if (isUserInputValue(tagName, name)) {
return new InputValueDynamicAttribute(name, attribute);
}
if (isOptionSelected(tagName, name)) {
return new OptionSelectedDynamicAttribute(name, attribute);
}
return new DefaultDynamicProperty(name, attribute);
}
var DynamicAttribute = function DynamicAttribute(attribute) {
this.attribute = attribute;
};
exports.DynamicAttribute = DynamicAttribute;
var SimpleDynamicAttribute = /*#__PURE__*/function (_DynamicAttribute) {
_inheritsLoose(SimpleDynamicAttribute, _DynamicAttribute);
function SimpleDynamicAttribute() {
return _DynamicAttribute.apply(this, arguments) || this;
}
var _proto = SimpleDynamicAttribute.prototype;
_proto.set = function set(dom, value, _env) {
var normalizedValue = normalizeValue(value);
if (normalizedValue !== null) {
var _this$attribute = this.attribute,
name = _this$attribute.name,
namespace = _this$attribute.namespace;
dom.__setAttribute(name, normalizedValue, namespace);
}
};
_proto.update = function update(value, _env) {
var normalizedValue = normalizeValue(value);
var _this$attribute2 = this.attribute,
element = _this$attribute2.element,
name = _this$attribute2.name;
if (normalizedValue === null) {
element.removeAttribute(name);
} else {
element.setAttribute(name, normalizedValue);
}
};
return SimpleDynamicAttribute;
}(DynamicAttribute);
exports.SimpleDynamicAttribute = SimpleDynamicAttribute;
var DefaultDynamicProperty = /*#__PURE__*/function (_DynamicAttribute2) {
_inheritsLoose(DefaultDynamicProperty, _DynamicAttribute2);
function DefaultDynamicProperty(normalizedName, attribute) {
var _this;
_this = _DynamicAttribute2.call(this, attribute) || this;
_this.normalizedName = normalizedName;
return _this;
}
var _proto2 = DefaultDynamicProperty.prototype;
_proto2.set = function set(dom, value, _env) {
if (value !== null && value !== undefined) {
this.value = value;
dom.__setProperty(this.normalizedName, value);
}
};
_proto2.update = function update(value, _env) {
var element = this.attribute.element;
if (this.value !== value) {
element[this.normalizedName] = this.value = value;
if (value === null || value === undefined) {
this.removeAttribute();
}
}
};
_proto2.removeAttribute = function removeAttribute() {
// TODO this sucks but to preserve properties first and to meet current
// semantics we must do this.
var _this$attribute3 = this.attribute,
element = _this$attribute3.element,
namespace = _this$attribute3.namespace;
if (namespace) {
element.removeAttributeNS(namespace, this.normalizedName);
} else {
element.removeAttribute(this.normalizedName);
}
};
return DefaultDynamicProperty;
}(DynamicAttribute);
exports.DefaultDynamicProperty = DefaultDynamicProperty;
var SafeDynamicProperty = /*#__PURE__*/function (_DefaultDynamicProper) {
_inheritsLoose(SafeDynamicProperty, _DefaultDynamicProper);
function SafeDynamicProperty() {
return _DefaultDynamicProper.apply(this, arguments) || this;
}
var _proto3 = SafeDynamicProperty.prototype;
_proto3.set = function set(dom, value, env) {
var _this$attribute4 = this.attribute,
element = _this$attribute4.element,
name = _this$attribute4.name;
var sanitized = (0, _sanitizedValues.sanitizeAttributeValue)(element, name, value);
_DefaultDynamicProper.prototype.set.call(this, dom, sanitized, env);
};
_proto3.update = function update(value, env) {
var _this$attribute5 = this.attribute,
element = _this$attribute5.element,
name = _this$attribute5.name;
var sanitized = (0, _sanitizedValues.sanitizeAttributeValue)(element, name, value);
_DefaultDynamicProper.prototype.update.call(this, sanitized, env);
};
return SafeDynamicProperty;
}(DefaultDynamicProperty);
exports.SafeDynamicProperty = SafeDynamicProperty;
var SafeDynamicAttribute = /*#__PURE__*/function (_SimpleDynamicAttribu) {
_inheritsLoose(SafeDynamicAttribute, _SimpleDynamicAttribu);
function SafeDynamicAttribute() {
return _SimpleDynamicAttribu.apply(this, arguments) || this;
}
var _proto4 = SafeDynamicAttribute.prototype;
_proto4.set = function set(dom, value, env) {
var _this$attribute6 = this.attribute,
element = _this$attribute6.element,
name = _this$attribute6.name;
var sanitized = (0, _sanitizedValues.sanitizeAttributeValue)(element, name, value);
_SimpleDynamicAttribu.prototype.set.call(this, dom, sanitized, env);
};
_proto4.update = function update(value, env) {
var _this$attribute7 = this.attribute,
element = _this$attribute7.element,
name = _this$attribute7.name;
var sanitized = (0, _sanitizedValues.sanitizeAttributeValue)(element, name, value);
_SimpleDynamicAttribu.prototype.update.call(this, sanitized, env);
};
return SafeDynamicAttribute;
}(SimpleDynamicAttribute);
exports.SafeDynamicAttribute = SafeDynamicAttribute;
var InputValueDynamicAttribute = /*#__PURE__*/function (_DefaultDynamicProper2) {
_inheritsLoose(InputValueDynamicAttribute, _DefaultDynamicProper2);
function InputValueDynamicAttribute() {
return _DefaultDynamicProper2.apply(this, arguments) || this;
}
var _proto5 = InputValueDynamicAttribute.prototype;
_proto5.set = function set(dom, value) {
dom.__setProperty('value', (0, _normalize.normalizeStringValue)(value));
};
_proto5.update = function update(value) {
var input = this.attribute.element;
var currentValue = input.value;
var normalizedValue = (0, _normalize.normalizeStringValue)(value);
if (currentValue !== normalizedValue) {
input.value = normalizedValue;
}
};
return InputValueDynamicAttribute;
}(DefaultDynamicProperty);
exports.InputValueDynamicAttribute = InputValueDynamicAttribute;
var OptionSelectedDynamicAttribute = /*#__PURE__*/function (_DefaultDynamicProper3) {
_inheritsLoose(OptionSelectedDynamicAttribute, _DefaultDynamicProper3);
function OptionSelectedDynamicAttribute() {
return _DefaultDynamicProper3.apply(this, arguments) || this;
}
var _proto6 = OptionSelectedDynamicAttribute.prototype;
_proto6.set = function set(dom, value) {
if (value !== null && value !== undefined && value !== false) {
dom.__setProperty('selected', true);
}
};
_proto6.update = function update(value) {
var option = this.attribute.element;
if (value) {
option.selected = true;
} else {
option.selected = false;
}
};
return OptionSelectedDynamicAttribute;
}(DefaultDynamicProperty);
exports.OptionSelectedDynamicAttribute = OptionSelectedDynamicAttribute;
function isOptionSelected(tagName, attribute) {
return tagName === 'OPTION' && attribute === 'selected';
}
function isUserInputValue(tagName, attribute) {
return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value';
}
function normalizeValue(value) {
if (value === false || value === undefined || value === null || typeof value.toString === 'undefined') {
return null;
}
if (value === true) {
return '';
} // onclick function etc in SSR
if (typeof value === 'function') {
return null;
}
return String(value);
}
var DebugStyleAttributeManager;
if (_env2.DEBUG) {
DebugStyleAttributeManager = /*#__PURE__*/function (_SimpleDynamicAttribu2) {
_inheritsLoose(DebugStyleAttributeManager, _SimpleDynamicAttribu2);
function DebugStyleAttributeManager() {
return _SimpleDynamicAttribu2.apply(this, arguments) || this;
}
var _proto7 = DebugStyleAttributeManager.prototype;
_proto7.set = function set(dom, value, env) {
(0, _globalContext.warnIfStyleNotTrusted)(value);
_SimpleDynamicAttribu2.prototype.set.call(this, dom, value, env);
};
_proto7.update = function update(value, env) {
(0, _globalContext.warnIfStyleNotTrusted)(value);
_SimpleDynamicAttribu2.prototype.update.call(this, value, env);
};
return DebugStyleAttributeManager;
}(SimpleDynamicAttribute);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3ZtL2F0dHJpYnV0ZXMvZHluYW1pYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdNLFNBQUEsZ0JBQUEsQ0FBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLEVBSWM7QUFBQSxNQUFsQixVQUFrQixLQUFBLEtBQUEsQ0FBQSxFQUFBO0FBQWxCLElBQUEsVUFBa0IsR0FKZCxLQUlKO0FBQWtCOztBQUFBLE1BRWQsT0FGYyxHQUVsQixPQUZrQixDQUFBLE9BQUE7QUFBQSxNQUVILFlBRkcsR0FFbEIsT0FGa0IsQ0FBQSxZQUFBO0FBR2xCLE1BQUksU0FBUyxHQUFHO0FBQUUsSUFBQSxPQUFGLEVBQUEsT0FBQTtBQUFXLElBQUEsSUFBSSxFQUFmLElBQUE7QUFBdUIsSUFBQSxTQUFBLEVBQUE7QUFBdkIsR0FBaEI7O0FBRUEsTUFBSSxlQUFTLElBQUksS0FBYixPQUFBLElBQTZCLENBQWpDLFVBQUEsRUFBOEM7QUFDNUMsV0FBTyxJQUFBLDBCQUFBLENBQVAsU0FBTyxDQUFQO0FBQ0Q7O0FBRUQsTUFBSSxZQUFZLEtBQUE7QUFBQTtBQUFoQixJQUFvQztBQUNsQyxhQUFPLHFCQUFxQixDQUFBLE9BQUEsRUFBQSxJQUFBLEVBQTVCLFNBQTRCLENBQTVCO0FBQ0Q7O0FBWGlCLE1BQUEsa0JBQUEsR0FhUyw4QkFBaUIsT0FBakIsRUFiVCxJQWFTLENBYlQ7QUFBQSxNQWFkLElBYmMsR0FBQSxrQkFBQSxDQUFBLElBQUE7QUFBQSxNQWFOLFVBYk0sR0FBQSxrQkFBQSxDQUFBLFVBQUE7O0FBZWxCLE1BQUksSUFBSSxLQUFSLE1BQUEsRUFBcUI7QUFDbkIsV0FBTyxxQkFBcUIsQ0FBQSxPQUFBLEVBQUEsVUFBQSxFQUE1QixTQUE0QixDQUE1QjtBQURGLEdBQUEsTUFFTztB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QTtBQVRzQixLQUFBOztBQUFBLFdBQUEsMEJBQUE7QUFBQSxHQUFBLENBQTFCLHNCQUEwQixDQUExQjtBQVlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGljdCxcbiAgRW52aXJvbm1lbnQsXG4gIE9wdGlvbixcbiAgRWxlbWVudEJ1aWxkZXIsXG4gIEF0dHJpYnV0ZU9wZXJhdGlvbixcbiAgQXR0cmlidXRlQ3Vyc29yLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHdhcm5JZlN0eWxlTm90VHJ1c3RlZCB9IGZyb20gJ0BnbGltbWVyL2dsb2JhbC1jb250ZXh0JztcbmltcG9ydCB7IEF0dHJOYW1lc3BhY2UsIE5hbWVzcGFjZSwgU2ltcGxlRWxlbWVudCB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmdWYWx1ZSB9IGZyb20gJy4uLy4uL2RvbS9ub3JtYWxpemUnO1xuaW1wb3J0IHsgbm9ybWFsaXplUHJvcGVydHkgfSBmcm9tICcuLi8uLi9kb20vcHJvcHMnO1xuaW1wb3J0IHsgcmVxdWlyZXNTYW5pdGl6YXRpb24sIHNhbml0aXplQXR0cmlidXRlVmFsdWUgfSBmcm9tICcuLi8uLi9kb20vc2FuaXRpemVkLXZhbHVlcyc7XG5pbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBjYXN0VG9Ccm93c2VyIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljQXR0cmlidXRlKFxuICBlbGVtZW50OiBTaW1wbGVFbGVtZW50LFxuICBhdHRyOiBzdHJpbmcsXG4gIG5hbWVzcGFjZTogT3B0aW9uPEF0dHJOYW1lc3BhY2U+LFxuICBpc1RydXN0aW5nID0gZmFsc2Vcbik6IER5bmFtaWNBdHRyaWJ1dGUge1xuICBsZXQgeyB0YWdOYW1lLCBuYW1lc3BhY2VVUkkgfSA9IGVsZW1lbnQ7XG4gIGxldCBhdHRyaWJ1dGUgPSB7IGVsZW1lbnQsIG5hbWU6IGF0dHIsIG5hbWVzcGFjZSB9O1xuXG4gIGlmIChERUJVRyAmJiBhdHRyID09PSAnc3R5bGUnICYmICFpc1RydXN0aW5nKSB7XG4gICAgcmV0dXJuIG5ldyBEZWJ1Z1N0eWxlQXR0cmlidXRlTWFuYWdlcihhdHRyaWJ1dGUpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlLlNWRykge1xuICAgIHJldHVybiBidWlsZER5bmFtaWNBdHRyaWJ1dGUodGFnTmFtZSwgYXR0ciwgYXR0cmlidXRlKTtcbiAgfVxuXG4gIGxldCB7IHR5cGUsIG5vcm1hbGl6ZWQgfSA9IG5vcm1hbGl6ZVByb3BlcnR5KGVsZW1lbnQsIGF0dHIpO1xuXG4gIGlmICh0eXBlID09PSAnYXR0cicpIHtcbiAgICByZXR1cm4gYnVpbGREeW5hbWljQXR0cmlidXRlKHRhZ05hbWUsIG5vcm1hbGl6ZWQsIGF0dHJpYnV0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1aWxkRHluYW1pY1Byb3BlcnR5KHRhZ05hbWUsIG5vcm1hbGl6ZWQsIGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGREeW5hbWljQXR0cmlidXRlKFxuICB0YWdOYW1lOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgYXR0cmlidXRlOiBBdHRyaWJ1dGVDdXJzb3Jcbik6IER5bmFtaWNBdHRyaWJ1dGUge1xuICBpZiAocmVxdWlyZXNTYW5pdGl6YXRpb24odGFnTmFtZSwgbmFtZSkpIHtcbiAgICByZXR1cm4gbmV3IFNhZmVEeW5hbWljQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEeW5hbWljQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGREeW5hbWljUHJvcGVydHkoXG4gIHRhZ05hbWU6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZUN1cnNvclxuKTogRHluYW1pY0F0dHJpYnV0ZSB7XG4gIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBuYW1lKSkge1xuICAgIHJldHVybiBuZXcgU2FmZUR5bmFtaWNQcm9wZXJ0eShuYW1lLCBhdHRyaWJ1dGUpO1xuICB9XG5cbiAgaWYgKGlzVXNlcklucHV0VmFsdWUodGFnTmFtZSwgbmFtZSkpIHtcbiAgICByZXR1cm4gbmV3IElucHV0VmFsdWVEeW5hbWljQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBpZiAoaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBuYW1lKSkge1xuICAgIHJldHVybiBuZXcgT3B0aW9uU2VsZWN0ZWREeW5hbWljQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IERlZmF1bHREeW5hbWljUHJvcGVydHkobmFtZSwgYXR0cmlidXRlKTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIER5bmFtaWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGVPcGVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgYXR0cmlidXRlOiBBdHRyaWJ1dGVDdXJzb3IpIHt9XG5cbiAgYWJzdHJhY3Qgc2V0KGRvbTogRWxlbWVudEJ1aWxkZXIsIHZhbHVlOiB1bmtub3duLCBlbnY6IEVudmlyb25tZW50KTogdm9pZDtcbiAgYWJzdHJhY3QgdXBkYXRlKHZhbHVlOiB1bmtub3duLCBlbnY6IEVudmlyb25tZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUR5bmFtaWNBdHRyaWJ1dGUgZXh0ZW5kcyBEeW5hbWljQXR0cmlidXRlIHtcbiAgc2V0KGRvbTogRWxlbWVudEJ1aWxkZXIsIHZhbHVlOiB1bmtub3duLCBfZW52OiBFbnZpcm9ubWVudCk6IHZvaWQge1xuICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICBsZXQgeyBuYW1lLCBuYW1lc3BhY2UgfSA9IHRoaXMuYXR0cmlidXRlO1xuICAgICAgZG9tLl9fc2V0QXR0cmlidXRlKG5hbWUsIG5vcm1hbGl6ZWRWYWx1ZSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGUodmFsdWU6IHVua25vd24sIF9lbnY6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICBsZXQgeyBlbGVtZW50LCBuYW1lIH0gPSB0aGlzLmF0dHJpYnV0ZTtcblxuICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdER5bmFtaWNQcm9wZXJ0eSBleHRlbmRzIER5bmFtaWNBdHRyaWJ1dGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlQ3Vyc29yKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlKTtcbiAgfVxuXG4gIHZhbHVlOiB1bmtub3duO1xuICBzZXQoZG9tOiBFbGVtZW50QnVpbGRlciwgdmFsdWU6IHVua25vd24sIF9lbnY6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGRvbS5fX3NldFByb3BlcnR5KHRoaXMubm9ybWFsaXplZE5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGUodmFsdWU6IHVua25vd24sIF9lbnY6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgbGV0IHsgZWxlbWVudCB9ID0gdGhpcy5hdHRyaWJ1dGU7XG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIChlbGVtZW50IGFzIGFueSlbdGhpcy5ub3JtYWxpemVkTmFtZV0gPSB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUF0dHJpYnV0ZSgpIHtcbiAgICAvLyBUT0RPIHRoaXMgc3Vja3MgYnV0IHRvIHByZXNlcnZlIHByb3BlcnRpZXMgZmlyc3QgYW5kIHRvIG1lZXQgY3VycmVudFxuICAgIC8vIHNlbWFudGljcyB3ZSBtdXN0IGRvIHRoaXMuXG4gICAgbGV0IHsgZWxlbWVudCwgbmFtZXNwYWNlIH0gPSB0aGlzLmF0dHJpYnV0ZTtcblxuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlLCB0aGlzLm5vcm1hbGl6ZWROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ub3JtYWxpemVkTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTYWZlRHluYW1pY1Byb3BlcnR5IGV4dGVuZHMgRGVmYXVsdER5bmFtaWNQcm9wZXJ0eSB7XG4gIHNldChkb206IEVsZW1lbnRCdWlsZGVyLCB2YWx1ZTogdW5rbm93biwgZW52OiBFbnZpcm9ubWVudCk6IHZvaWQge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWUgfSA9IHRoaXMuYXR0cmlidXRlO1xuICAgIGxldCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICBzdXBlci5zZXQoZG9tLCBzYW5pdGl6ZWQsIGVudik7XG4gIH1cblxuICB1cGRhdGUodmFsdWU6IHVua25vd24sIGVudjogRW52aXJvbm1lbnQpOiB2b2lkIHtcbiAgICBsZXQgeyBlbGVtZW50LCBuYW1lIH0gPSB0aGlzLmF0dHJpYnV0ZTtcbiAgICBsZXQgc2FuaXRpemVkID0gc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgc3VwZXIudXBkYXRlKHNhbml0aXplZCwgZW52KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2FmZUR5bmFtaWNBdHRyaWJ1dGUgZXh0ZW5kcyBTaW1wbGVEeW5hbWljQXR0cmlidXRlIHtcbiAgc2V0KGRvbTogRWxlbWVudEJ1aWxkZXIsIHZhbHVlOiB1bmtub3duLCBlbnY6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgbGV0IHsgZWxlbWVudCwgbmFtZSB9ID0gdGhpcy5hdHRyaWJ1dGU7XG4gICAgbGV0IHNhbml0aXplZCA9IHNhbml0aXplQXR0cmlidXRlVmFsdWUoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHN1cGVyLnNldChkb20sIHNhbml0aXplZCwgZW52KTtcbiAgfVxuXG4gIHVwZGF0ZSh2YWx1ZTogdW5rbm93biwgZW52OiBFbnZpcm9ubWVudCk6IHZvaWQge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWUgfSA9IHRoaXMuYXR0cmlidXRlO1xuICAgIGxldCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICBzdXBlci51cGRhdGUoc2FuaXRpemVkLCBlbnYpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnB1dFZhbHVlRHluYW1pY0F0dHJpYnV0ZSBleHRlbmRzIERlZmF1bHREeW5hbWljUHJvcGVydHkge1xuICBzZXQoZG9tOiBFbGVtZW50QnVpbGRlciwgdmFsdWU6IHVua25vd24pIHtcbiAgICBkb20uX19zZXRQcm9wZXJ0eSgndmFsdWUnLCBub3JtYWxpemVTdHJpbmdWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgdXBkYXRlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgbGV0IGlucHV0ID0gY2FzdFRvQnJvd3Nlcih0aGlzLmF0dHJpYnV0ZS5lbGVtZW50LCBbJ2lucHV0JywgJ3RleHRhcmVhJ10pO1xuICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplU3RyaW5nVmFsdWUodmFsdWUpO1xuICAgIGlmIChjdXJyZW50VmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpb25TZWxlY3RlZER5bmFtaWNBdHRyaWJ1dGUgZXh0ZW5kcyBEZWZhdWx0RHluYW1pY1Byb3BlcnR5IHtcbiAgc2V0KGRvbTogRWxlbWVudEJ1aWxkZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICBkb20uX19zZXRQcm9wZXJ0eSgnc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBsZXQgb3B0aW9uID0gY2FzdFRvQnJvd3Nlcih0aGlzLmF0dHJpYnV0ZS5lbGVtZW50LCAnb3B0aW9uJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc09wdGlvblNlbGVjdGVkKHRhZ05hbWU6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRhZ05hbWUgPT09ICdPUFRJT04nICYmIGF0dHJpYnV0ZSA9PT0gJ3NlbGVjdGVkJztcbn1cblxuZnVuY3Rpb24gaXNVc2VySW5wdXRWYWx1ZSh0YWdOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gIHJldHVybiAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBhdHRyaWJ1dGUgPT09ICd2YWx1ZSc7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogT3B0aW9uPHN0cmluZz4ge1xuICBpZiAoXG4gICAgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgdHlwZW9mICh2YWx1ZSBhcyBEaWN0KS50b1N0cmluZyA9PT0gJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8vIG9uY2xpY2sgZnVuY3Rpb24gZXRjIGluIFNTUlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxubGV0IERlYnVnU3R5bGVBdHRyaWJ1dGVNYW5hZ2VyOiB7XG4gIG5ldyAoYXR0cmlidXRlOiBBdHRyaWJ1dGVDdXJzb3IpOiBBdHRyaWJ1dGVPcGVyYXRpb247XG59O1xuXG5pZiAoREVCVUcpIHtcbiAgRGVidWdTdHlsZUF0dHJpYnV0ZU1hbmFnZXIgPSBjbGFzcyBleHRlbmRzIFNpbXBsZUR5bmFtaWNBdHRyaWJ1dGUge1xuICAgIHNldChkb206IEVsZW1lbnRCdWlsZGVyLCB2YWx1ZTogdW5rbm93biwgZW52OiBFbnZpcm9ubWVudCk6IHZvaWQge1xuICAgICAgd2FybklmU3R5bGVOb3RUcnVzdGVkKHZhbHVlKTtcblxuICAgICAgc3VwZXIuc2V0KGRvbSwgdmFsdWUsIGVudik7XG4gICAgfVxuICAgIHVwZGF0ZSh2YWx1ZTogdW5rbm93biwgZW52OiBFbnZpcm9ubWVudCk6IHZvaWQge1xuICAgICAgd2FybklmU3R5bGVOb3RUcnVzdGVkKHZhbHVlKTtcblxuICAgICAgc3VwZXIudXBkYXRlKHZhbHVlLCBlbnYpO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=