ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
241 lines (192 loc) • 23.2 kB
JavaScript
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 { isConst, isModified, map, ReferenceCache } from '@glimmer/reference';
import { clear, Cursor } from '../../bounds';
import { Fragment } from '../../builder';
import { isComponentDefinition } from '../../component/interfaces';
import { APPEND_OPCODES, UpdatingOpcode } from '../../opcodes';
import { ConditionalReference } from '../../references';
import { cautiousInsert, isNode, isSafeString, isString, trustingInsert } from '../../upsert';
APPEND_OPCODES.add(26 /* DynamicContent */, function (vm, _ref) {
var append = _ref.op1;
var opcode = vm.constants.getOther(append);
opcode.evaluate(vm);
});
function isEmpty(value) {
return value === null || value === undefined || typeof value.toString !== 'function';
}
export function normalizeTextValue(value) {
if (isEmpty(value)) {
return '';
}
return String(value);
}
function normalizeTrustedValue(value) {
if (isEmpty(value)) {
return '';
}
if (isString(value)) {
return value;
}
if (isSafeString(value)) {
return value.toHTML();
}
if (isNode(value)) {
return value;
}
return String(value);
}
function normalizeValue(value) {
if (isEmpty(value)) {
return '';
}
if (isString(value)) {
return value;
}
if (isSafeString(value) || isNode(value)) {
return value;
}
return String(value);
}
export var AppendDynamicOpcode = function () {
function AppendDynamicOpcode() {
_classCallCheck(this, AppendDynamicOpcode);
}
AppendDynamicOpcode.prototype.evaluate = function evaluate(vm) {
var reference = vm.stack.pop();
var normalized = this.normalize(reference);
var value = void 0;
var cache = void 0;
if (isConst(reference)) {
value = normalized.value();
} else {
cache = new ReferenceCache(normalized);
value = cache.peek();
}
var stack = vm.elements();
var upsert = this.insert(vm.env.getAppendOperations(), stack, value);
var bounds = new Fragment(upsert.bounds);
stack.newBounds(bounds);
if (cache /* i.e. !isConst(reference) */) {
vm.updateWith(this.updateWith(vm, reference, cache, bounds, upsert));
}
};
return AppendDynamicOpcode;
}();
export var IsComponentDefinitionReference = function (_ConditionalReference) {
_inherits(IsComponentDefinitionReference, _ConditionalReference);
function IsComponentDefinitionReference() {
_classCallCheck(this, IsComponentDefinitionReference);
return _possibleConstructorReturn(this, _ConditionalReference.apply(this, arguments));
}
IsComponentDefinitionReference.create = function create(inner) {
return new IsComponentDefinitionReference(inner);
};
IsComponentDefinitionReference.prototype.toBool = function toBool(value) {
return isComponentDefinition(value);
};
return IsComponentDefinitionReference;
}(ConditionalReference);
var UpdateOpcode = function (_UpdatingOpcode) {
_inherits(UpdateOpcode, _UpdatingOpcode);
function UpdateOpcode(cache, bounds, upsert) {
_classCallCheck(this, UpdateOpcode);
var _this2 = _possibleConstructorReturn(this, _UpdatingOpcode.call(this));
_this2.cache = cache;
_this2.bounds = bounds;
_this2.upsert = upsert;
_this2.tag = cache.tag;
return _this2;
}
UpdateOpcode.prototype.evaluate = function evaluate(vm) {
var value = this.cache.revalidate();
if (isModified(value)) {
var bounds = this.bounds,
upsert = this.upsert;
var dom = vm.dom;
if (!this.upsert.update(dom, value)) {
var cursor = new Cursor(bounds.parentElement(), clear(bounds));
upsert = this.upsert = this.insert(vm.env.getAppendOperations(), cursor, value);
}
bounds.update(upsert.bounds);
}
};
UpdateOpcode.prototype.toJSON = function toJSON() {
var guid = this._guid,
type = this.type,
cache = this.cache;
return {
details: { lastValue: JSON.stringify(cache.peek()) },
guid: guid,
type: type
};
};
return UpdateOpcode;
}(UpdatingOpcode);
export var OptimizedCautiousAppendOpcode = function (_AppendDynamicOpcode) {
_inherits(OptimizedCautiousAppendOpcode, _AppendDynamicOpcode);
function OptimizedCautiousAppendOpcode() {
_classCallCheck(this, OptimizedCautiousAppendOpcode);
var _this3 = _possibleConstructorReturn(this, _AppendDynamicOpcode.apply(this, arguments));
_this3.type = 'optimized-cautious-append';
return _this3;
}
OptimizedCautiousAppendOpcode.prototype.normalize = function normalize(reference) {
return map(reference, normalizeValue);
};
OptimizedCautiousAppendOpcode.prototype.insert = function insert(dom, cursor, value) {
return cautiousInsert(dom, cursor, value);
};
OptimizedCautiousAppendOpcode.prototype.updateWith = function updateWith(_vm, _reference, cache, bounds, upsert) {
return new OptimizedCautiousUpdateOpcode(cache, bounds, upsert);
};
return OptimizedCautiousAppendOpcode;
}(AppendDynamicOpcode);
var OptimizedCautiousUpdateOpcode = function (_UpdateOpcode) {
_inherits(OptimizedCautiousUpdateOpcode, _UpdateOpcode);
function OptimizedCautiousUpdateOpcode() {
_classCallCheck(this, OptimizedCautiousUpdateOpcode);
var _this4 = _possibleConstructorReturn(this, _UpdateOpcode.apply(this, arguments));
_this4.type = 'optimized-cautious-update';
return _this4;
}
OptimizedCautiousUpdateOpcode.prototype.insert = function insert(dom, cursor, value) {
return cautiousInsert(dom, cursor, value);
};
return OptimizedCautiousUpdateOpcode;
}(UpdateOpcode);
export var OptimizedTrustingAppendOpcode = function (_AppendDynamicOpcode2) {
_inherits(OptimizedTrustingAppendOpcode, _AppendDynamicOpcode2);
function OptimizedTrustingAppendOpcode() {
_classCallCheck(this, OptimizedTrustingAppendOpcode);
var _this5 = _possibleConstructorReturn(this, _AppendDynamicOpcode2.apply(this, arguments));
_this5.type = 'optimized-trusting-append';
return _this5;
}
OptimizedTrustingAppendOpcode.prototype.normalize = function normalize(reference) {
return map(reference, normalizeTrustedValue);
};
OptimizedTrustingAppendOpcode.prototype.insert = function insert(dom, cursor, value) {
return trustingInsert(dom, cursor, value);
};
OptimizedTrustingAppendOpcode.prototype.updateWith = function updateWith(_vm, _reference, cache, bounds, upsert) {
return new OptimizedTrustingUpdateOpcode(cache, bounds, upsert);
};
return OptimizedTrustingAppendOpcode;
}(AppendDynamicOpcode);
var OptimizedTrustingUpdateOpcode = function (_UpdateOpcode2) {
_inherits(OptimizedTrustingUpdateOpcode, _UpdateOpcode2);
function OptimizedTrustingUpdateOpcode() {
_classCallCheck(this, OptimizedTrustingUpdateOpcode);
var _this6 = _possibleConstructorReturn(this, _UpdateOpcode2.apply(this, arguments));
_this6.type = 'optimized-trusting-update';
return _this6;
}
OptimizedTrustingUpdateOpcode.prototype.insert = function insert(dom, cursor, value) {
return trustingInsert(dom, cursor, value);
};
return OptimizedTrustingUpdateOpcode;
}(UpdateOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQuanMiXSwibmFtZXMiOlsiaXNDb25zdCIsImlzTW9kaWZpZWQiLCJtYXAiLCJSZWZlcmVuY2VDYWNoZSIsImNsZWFyIiwiQ3Vyc29yIiwiRnJhZ21lbnQiLCJpc0NvbXBvbmVudERlZmluaXRpb24iLCJBUFBFTkRfT1BDT0RFUyIsIlVwZGF0aW5nT3Bjb2RlIiwiQ29uZGl0aW9uYWxSZWZlcmVuY2UiLCJjYXV0aW91c0luc2VydCIsImlzTm9kZSIsImlzU2FmZVN0cmluZyIsImlzU3RyaW5nIiwidHJ1c3RpbmdJbnNlcnQiLCJhZGQiLCJ2bSIsImFwcGVuZCIsIm9wMSIsIm9wY29kZSIsImNvbnN0YW50cyIsImdldE90aGVyIiwiZXZhbHVhdGUiLCJpc0VtcHR5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsIm5vcm1hbGl6ZVRleHRWYWx1ZSIsIlN0cmluZyIsIm5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSIsInRvSFRNTCIsIm5vcm1hbGl6ZVZhbHVlIiwiQXBwZW5kRHluYW1pY09wY29kZSIsInJlZmVyZW5jZSIsInN0YWNrIiwicG9wIiwibm9ybWFsaXplZCIsIm5vcm1hbGl6ZSIsImNhY2hlIiwicGVlayIsImVsZW1lbnRzIiwidXBzZXJ0IiwiaW5zZXJ0IiwiZW52IiwiZ2V0QXBwZW5kT3BlcmF0aW9ucyIsImJvdW5kcyIsIm5ld0JvdW5kcyIsInVwZGF0ZVdpdGgiLCJJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UiLCJjcmVhdGUiLCJpbm5lciIsInRvQm9vbCIsIlVwZGF0ZU9wY29kZSIsInRhZyIsInJldmFsaWRhdGUiLCJkb20iLCJ1cGRhdGUiLCJjdXJzb3IiLCJwYXJlbnRFbGVtZW50IiwidG9KU09OIiwiZ3VpZCIsIl9ndWlkIiwidHlwZSIsImRldGFpbHMiLCJsYXN0VmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwiT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUiLCJhcmd1bWVudHMiLCJfdm0iLCJfcmVmZXJlbmNlIiwiT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUiLCJPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSIsIk9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLFNBQVNBLE9BQVQsRUFBa0JDLFVBQWxCLEVBQThCQyxHQUE5QixFQUFtQ0MsY0FBbkMsUUFBeUQsb0JBQXpEO0FBQ0EsU0FBU0MsS0FBVCxFQUFnQkMsTUFBaEIsUUFBOEIsY0FBOUI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGVBQXpCO0FBQ0EsU0FBU0MscUJBQVQsUUFBc0MsNEJBQXRDO0FBQ0EsU0FBU0MsY0FBVCxFQUF5QkMsY0FBekIsUUFBK0MsZUFBL0M7QUFDQSxTQUFTQyxvQkFBVCxRQUFxQyxrQkFBckM7QUFDQSxTQUFTQyxjQUFULEVBQXlCQyxNQUF6QixFQUFpQ0MsWUFBakMsRUFBK0NDLFFBQS9DLEVBQXlEQyxjQUF6RCxRQUErRSxjQUEvRTtBQUNBUCxlQUFlUSxHQUFmLENBQW1CLEVBQW5CLENBQXNCLG9CQUF0QixFQUE0QyxVQUFDQyxFQUFELFFBQXlCO0FBQUEsUUFBYkMsTUFBYSxRQUFsQkMsR0FBa0I7O0FBQ2pFLFFBQUlDLFNBQVNILEdBQUdJLFNBQUgsQ0FBYUMsUUFBYixDQUFzQkosTUFBdEIsQ0FBYjtBQUNBRSxXQUFPRyxRQUFQLENBQWdCTixFQUFoQjtBQUNILENBSEQ7QUFJQSxTQUFTTyxPQUFULENBQWlCQyxLQUFqQixFQUF3QjtBQUNwQixXQUFPQSxVQUFVLElBQVYsSUFBa0JBLFVBQVVDLFNBQTVCLElBQXlDLE9BQU9ELE1BQU1FLFFBQWIsS0FBMEIsVUFBMUU7QUFDSDtBQUNELE9BQU8sU0FBU0Msa0JBQVQsQ0FBNEJILEtBQTVCLEVBQW1DO0FBQ3RDLFFBQUlELFFBQVFDLEtBQVIsQ0FBSixFQUFvQjtBQUNoQixlQUFPLEVBQVA7QUFDSDtBQUNELFdBQU9JLE9BQU9KLEtBQVAsQ0FBUDtBQUNI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QUFDSCxLQVZMOztBQUFBLDRDQVdJdUIsVUFYSix1QkFXZXNCLEdBWGYsRUFXb0JDLFVBWHBCLEVBV2dDaEMsS0FYaEMsRUFXdUNPLE1BWHZDLEVBVytDSixNQVgvQyxFQVd1RDtBQUMvQyxlQUFPLElBQUlnQyw2QkFBSixDQUFrQ25DLEtBQWxDLEVBQXlDTyxNQUF6QyxFQUFpREosTUFBakQsQ0FBUDtBQUNILEtBYkw7O0FBQUE7QUFBQSxFQUFtRFQsbUJBQW5EOztJQWVNeUMsNkI7OztBQUNGLDZDQUFjO0FBQUE7O0FBQUEsc0RBQ1YsMkJBQVNMLFNBQVQsQ0FEVTs7QUFFVixlQUFLTixJQUFMLEdBQVksMkJBQVo7QUFGVTtBQUdiOzs0Q0FDRHBCLE0sbUJBQU9hLEcsRUFBS0UsTSxFQUFRakMsSyxFQUFPO0FBQ3ZCLGVBQU9WLGVBQWV5QyxHQUFmLEVBQW9CRSxNQUFwQixFQUE0QmpDLEtBQTVCLENBQVA7QUFDSCxLOzs7RUFQdUM0QixZIiwiZmlsZSI6ImxpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0NvbnN0LCBpc01vZGlmaWVkLCBtYXAsIFJlZmVyZW5jZUNhY2hlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IGNsZWFyLCBDdXJzb3IgfSBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IGNhdXRpb3VzSW5zZXJ0LCBpc05vZGUsIGlzU2FmZVN0cmluZywgaXNTdHJpbmcsIHRydXN0aW5nSW5zZXJ0IH0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbkFQUEVORF9PUENPREVTLmFkZCgyNiAvKiBEeW5hbWljQ29udGVudCAqLywgKHZtLCB7IG9wMTogYXBwZW5kIH0pID0+IHtcbiAgICBsZXQgb3Bjb2RlID0gdm0uY29uc3RhbnRzLmdldE90aGVyKGFwcGVuZCk7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHZtKTtcbn0pO1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUZXh0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gICAgfVxuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnQgY2xhc3MgQXBwZW5kRHluYW1pY09wY29kZSB7XG4gICAgZXZhbHVhdGUodm0pIHtcbiAgICAgICAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcCgpO1xuICAgICAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgbGV0IGNhY2hlO1xuICAgICAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWQudmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YWNrID0gdm0uZWxlbWVudHMoKTtcbiAgICAgICAgbGV0IHVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIHN0YWNrLCB2YWx1ZSk7XG4gICAgICAgIGxldCBib3VuZHMgPSBuZXcgRnJhZ21lbnQodXBzZXJ0LmJvdW5kcyk7XG4gICAgICAgIHN0YWNrLm5ld0JvdW5kcyhib3VuZHMpO1xuICAgICAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICAgICAgICAgICAgdm0udXBkYXRlV2l0aCh0aGlzLnVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSk7XG4gICAgICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgICBzdGF0aWMgY3JlYXRlKGlubmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgICB9XG4gICAgdG9Cb29sKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpO1xuICAgIH1cbn1cbmNsYXNzIFVwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICAgICAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgICAgICAgdGhpcy51cHNlcnQgPSB1cHNlcnQ7XG4gICAgICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICAgIH1cbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmNhY2hlLnJldmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgICAgICAgIGxldCB7IGRvbSB9ID0gdm07XG4gICAgICAgICAgICBpZiAoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGxldCBjdXJzb3IgPSBuZXcgQ3Vyc29yKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIGNsZWFyKGJvdW5kcykpO1xuICAgICAgICAgICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGNhY2hlIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGV0YWlsczogeyBsYXN0VmFsdWU6IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSkgfSxcbiAgICAgICAgICAgIGd1aWQsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtYXBwZW5kJztcbiAgICB9XG4gICAgbm9ybWFsaXplKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVXaXRoKF92bSwgX3JlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICB9XG59XG5jbGFzcyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtdXBkYXRlJztcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ29wdGltaXplZC10cnVzdGluZy1hcHBlbmQnO1xuICAgIH1cbiAgICBub3JtYWxpemUocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICAgIH1cbiAgICBpbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVXaXRoKF92bSwgX3JlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSB7XG4gICAgICAgIHJldHVybiBuZXcgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICB9XG59XG5jbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcbiAgICB9XG4gICAgaW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgICB9XG59Il19