UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

354 lines (261 loc) 31 kB
"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=