ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
114 lines (102 loc) • 15.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _util = require('@glimmer/util');
var _wireFormat = require('@glimmer/wire-format');
var WireFormat = _interopRequireWildcard(_wireFormat);
var _clientSide = require('./syntax/client-side');
var ClientSide = _interopRequireWildcard(_clientSide);
var _compilableTemplate = require('./syntax/compilable-template');
var _compilableTemplate2 = _interopRequireDefault(_compilableTemplate);
var _functions = require('./syntax/functions');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
var Ops = WireFormat.Ops;
class Scanner {
constructor(block, env) {
this.block = block;
this.env = env;
}
scanEntryPoint(meta) {
let { block } = this;
let { statements, symbols, hasEval } = block;
return new _compilableTemplate2.default(statements, { meta, symbols, hasEval });
}
scanBlock(meta) {
let { block } = this;
let { statements } = block;
return new _compilableTemplate2.default(statements, { meta, parameters: _util.EMPTY_ARRAY });
}
scanLayout(meta, attrs, componentName) {
let { block } = this;
let { statements, symbols, hasEval } = block;
let symbolTable = { meta, hasEval, symbols };
let newStatements = [];
let toplevel;
let inTopLevel = false;
for (let i = 0; i < statements.length; i++) {
let statement = statements[i];
if (WireFormat.Statements.isComponent(statement)) {
let tagName = statement[1];
if (!this.env.hasComponentDefinition(tagName, meta.templateMeta)) {
if (toplevel !== undefined) {
newStatements.push([Ops.OpenElement, tagName]);
} else {
toplevel = tagName;
decorateTopLevelElement(tagName, symbols, attrs, newStatements);
}
addFallback(statement, newStatements);
} else {
if (toplevel === undefined && tagName === componentName) {
toplevel = tagName;
decorateTopLevelElement(tagName, symbols, attrs, newStatements);
addFallback(statement, newStatements);
} else {
newStatements.push(statement);
}
}
} else {
if (toplevel === undefined && WireFormat.Statements.isOpenElement(statement)) {
toplevel = statement[1];
inTopLevel = true;
decorateTopLevelElement(toplevel, symbols, attrs, newStatements);
} else {
if (inTopLevel) {
if (WireFormat.Statements.isFlushElement(statement)) {
inTopLevel = false;
} else if (WireFormat.Statements.isModifier(statement)) {
throw Error(`Found modifier "${statement[1]}" on the top-level element of "${componentName}"\. Modifiers cannot be on the top-level element`);
}
}
newStatements.push(statement);
}
}
}
newStatements.push([Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]);
return new _compilableTemplate2.default(newStatements, symbolTable);
}
}
exports.default = Scanner;
function addFallback(statement, buffer) {
let [,, attrs,, block] = statement;
for (let i = 0; i < attrs.length; i++) {
buffer.push(attrs[i]);
}
buffer.push([Ops.FlushElement]);
if (block) {
let { statements } = block;
for (let i = 0; i < statements.length; i++) {
buffer.push(statements[i]);
}
}
buffer.push([Ops.CloseElement]);
}
function decorateTopLevelElement(tagName, symbols, attrs, buffer) {
let attrsSymbol = symbols.push(_functions.ATTRS_BLOCK);
buffer.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tagName]);
buffer.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]);
buffer.push([Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]);
buffer.push(...attrs);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2FubmVyLmpzIl0sIm5hbWVzIjpbIldpcmVGb3JtYXQiLCJDbGllbnRTaWRlIiwiT3BzIiwiU2Nhbm5lciIsImNvbnN0cnVjdG9yIiwiYmxvY2siLCJlbnYiLCJzY2FuRW50cnlQb2ludCIsIm1ldGEiLCJzdGF0ZW1lbnRzIiwic3ltYm9scyIsImhhc0V2YWwiLCJzY2FuQmxvY2siLCJwYXJhbWV0ZXJzIiwic2NhbkxheW91dCIsImF0dHJzIiwiY29tcG9uZW50TmFtZSIsInN5bWJvbFRhYmxlIiwibmV3U3RhdGVtZW50cyIsInRvcGxldmVsIiwiaW5Ub3BMZXZlbCIsImkiLCJsZW5ndGgiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnRzIiwiaXNDb21wb25lbnQiLCJ0YWdOYW1lIiwiaGFzQ29tcG9uZW50RGVmaW5pdGlvbiIsInRlbXBsYXRlTWV0YSIsInVuZGVmaW5lZCIsInB1c2giLCJPcGVuRWxlbWVudCIsImRlY29yYXRlVG9wTGV2ZWxFbGVtZW50IiwiYWRkRmFsbGJhY2siLCJpc09wZW5FbGVtZW50IiwiaXNGbHVzaEVsZW1lbnQiLCJpc01vZGlmaWVyIiwiRXJyb3IiLCJDbGllbnRTaWRlU3RhdGVtZW50IiwiRGlkUmVuZGVyTGF5b3V0IiwiYnVmZmVyIiwiRmx1c2hFbGVtZW50IiwiQ2xvc2VFbGVtZW50IiwiYXR0cnNTeW1ib2wiLCJPcGVuQ29tcG9uZW50RWxlbWVudCIsIkRpZENyZWF0ZUVsZW1lbnQiLCJZaWVsZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0lBQVlBLFU7O0FBQ1o7O0lBQVlDLFU7O0FBQ1o7Ozs7QUFDQTs7Ozs7O0FBQ0EsSUFBSUMsTUFBTUYsV0FBV0UsR0FBckI7QUFDZSxNQUFNQyxPQUFOLENBQWM7QUFDekJDLGdCQUFZQyxLQUFaLEVBQW1CQyxHQUFuQixFQUF3QjtBQUNwQixhQUFLRCxLQUFMLEdBQWFBLEtBQWI7QUFDQSxhQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDSDtBQUNEQyxtQkFBZUMsSUFBZixFQUFxQjtBQUNqQixZQUFJLEVBQUVILEtBQUYsS0FBWSxJQUFoQjtBQUNBLFlBQUksRUFBRUksVUFBRixFQUFjQyxPQUFkLEVBQXVCQyxPQUF2QixLQUFtQ04sS0FBdkM7QUFDQSxlQUFPLGlDQUF1QkksVUFBdkIsRUFBbUMsRUFBRUQsSUFBRixFQUFRRSxPQUFSLEVBQWlCQyxPQUFqQixFQUFuQyxDQUFQO0FBQ0g7QUFDREMsY0FBVUosSUFBVixFQUFnQjtBQUNaLFlBQUksRUFBRUgsS0FBRixLQUFZLElBQWhCO0FBQ0EsWUFBSSxFQUFFSSxVQUFGLEtBQWlCSixLQUFyQjtBQUNBLGVBQU8saUNBQXVCSSxVQUF2QixFQUFtQyxFQUFFRCxJQUFGLEVBQVFLLDZCQUFSLEVBQW5DLENBQVA7QUFDSDtBQUNEQyxlQUFXTixJQUFYLEVBQWlCTyxLQUFqQixFQUF3QkMsYUFBeEIsRUFBdUM7QUFDbkMsWUFBSSxFQUFFWCxLQUFGLEtBQVksSUFBaEI7QUFDQSxZQUFJLEVBQUVJLFVBQUYsRUFBY0MsT0FBZCxFQUF1QkMsT0FBdkIsS0FBbUNOLEtBQXZDO0FBQ0EsWUFBSVksY0FBYyxFQUFFVCxJQUFGLEVBQVFHLE9BQVIsRUFBaUJELE9BQWpCLEVBQWxCO0FBQ0EsWUFBSVEsZ0JBQWdCLEVBQXBCO0FBQ0EsWUFBSUMsUUFBSjtBQUNBLFlBQUlDLGFBQWEsS0FBakI7QUFDQSxhQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSVosV0FBV2EsTUFBL0IsRUFBdUNELEdBQXZDLEVBQTRDO0FBQ3hDLGdCQUFJRSxZQUFZZCxXQUFXWSxDQUFYLENBQWhCO0FBQ0EsZ0JBQUlyQixXQUFXd0IsVUFBWCxDQUFzQkMsV0FBdEIsQ0FBa0NGLFNBQWxDLENBQUosRUFBa0Q7QUFDOUMsb0JBQUlHLFVBQVVILFVBQVUsQ0FBVixDQUFkO0FBQ0Esb0JBQUksQ0FBQyxLQUFLakIsR0FBTCxDQUFTcUIsc0JBQVQsQ0FBZ0NELE9BQWhDLEVBQXlDbEIsS0FBS29CLFlBQTlDLENBQUwsRUFBa0U7QUFDOUQsd0JBQUlULGFBQWFVLFNBQWpCLEVBQTRCO0FBQ3hCWCxzQ0FBY1ksSUFBZCxDQUFtQixDQUFDNUIsSUFBSTZCLFdBQUwsRUFBa0JMLE9BQWxCLENBQW5CO0FBQ0gscUJBRkQsTUFFTztBQUNIUCxtQ0FBV08sT0FBWDtBQUNBTSxnREFBd0JOLE9BQXhCLEVBQWlDaEIsT0FBakMsRUFBMENLLEtBQTFDLEVBQWlERyxhQUFqRDtBQUNIO0FBQ0RlLGdDQUFZVixTQUFaLEVBQXVCTCxhQUF2QjtBQUNILGlCQVJELE1BUU87QUFDSCx3QkFBSUMsYUFBYVUsU0FBYixJQUEwQkgsWUFBWVYsYUFBMUMsRUFBeUQ7QUFDckRHLG1DQUFXTyxPQUFYO0FBQ0FNLGdEQUF3Qk4sT0FBeEIsRUFBaUNoQixPQUFqQyxFQUEwQ0ssS0FBMUMsRUFBaURHLGFBQWpEO0FBQ0FlLG9DQUFZVixTQUFaLEVBQXVCTCxhQUF2QjtBQUNILHFCQUpELE1BSU87QUFDSEEsc0NBQWNZLElBQWQsQ0FBbUJQLFNBQW5CO0FBQ0g7QUFDSjtBQUNKLGFBbkJELE1BbUJPO0FBQ0gsb0JBQUlKLGFBQWFVLFNBQWIsSUFBMEI3QixXQUFXd0IsVUFBWCxDQUFzQlUsYUFBdEIsQ0FBb0NYLFNBQXBDLENBQTlCLEVBQThFO0FBQzFFSiwrQkFBV0ksVUFBVSxDQUFWLENBQVg7QUFDQUgsaUNBQWEsSUFBYjtBQUNBWSw0Q0FBd0JiLFFBQXhCLEVBQWtDVCxPQUFsQyxFQUEyQ0ssS0FBM0MsRUFBa0RHLGFBQWxEO0FBQ0gsaUJBSkQsTUFJTztBQUNILHdCQUFJRSxVQUFKLEVBQWdCO0FBQ1osNEJBQUlwQixXQUFXd0IsVUFBWCxDQUFzQlcsY0FBdEIsQ0FBcUNaLFNBQXJDLENBQUosRUFBcUQ7QUFDakRILHlDQUFhLEtBQWI7QUFDSCx5QkFGRCxNQUVPLElBQUlwQixXQUFXd0IsVUFBWCxDQUFzQlksVUFBdEIsQ0FBaUNiLFNBQWpDLENBQUosRUFBaUQ7QUFDcEQsa0NBQU1jLE1BQU8sbUJBQWtCZCxVQUFVLENBQVYsQ0FBYSxrQ0FBaUNQLGFBQWMsa0RBQXJGLENBQU47QUFDSDtBQUNKO0FBQ0RFLGtDQUFjWSxJQUFkLENBQW1CUCxTQUFuQjtBQUNIO0FBQ0o7QUFDSjtBQUNETCxzQkFBY1ksSUFBZCxDQUFtQixDQUFDNUIsSUFBSW9DLG1CQUFMLEVBQTBCckMsV0FBV0MsR0FBWCxDQUFlcUMsZUFBekMsQ0FBbkI7QUFDQSxlQUFPLGlDQUF1QnJCLGFBQXZCLEVBQXNDRCxXQUF0QyxDQUFQO0FBQ0g7QUE5RHdCO2tCQUFSZCxPO0FBZ0VyQixTQUFTOEIsV0FBVCxDQUFxQlYsU0FBckIsRUFBZ0NpQixNQUFoQyxFQUF3QztBQUNwQyxRQUFJLElBQUl6QixLQUFKLEdBQVlWLEtBQVosSUFBcUJrQixTQUF6QjtBQUNBLFNBQUssSUFBSUYsSUFBSSxDQUFiLEVBQWdCQSxJQUFJTixNQUFNTyxNQUExQixFQUFrQ0QsR0FBbEMsRUFBdUM7QUFDbkNtQixlQUFPVixJQUFQLENBQVlmLE1BQU1NLENBQU4sQ0FBWjtBQUNIO0FBQ0RtQixXQUFPVixJQUFQLENBQVksQ0FBQzVCLElBQUl1QyxZQUFMLENBQVo7QUFDQSxRQUFJcEMsS0FBSixFQUFXO0FBQ1AsWUFBSSxFQUFFSSxVQUFGLEtBQWlCSixLQUFyQjtBQUNBLGFBQUssSUFBSWdCLElBQUksQ0FBYixFQUFnQkEsSUFBSVosV0FBV2EsTUFBL0IsRUFBdUNELEdBQXZDLEVBQTRDO0FBQ3hDbUIsbUJBQU9WLElBQVAsQ0FBWXJCLFdBQVdZLENBQVgsQ0FBWjtBQUNIO0FBQ0o7QUFDRG1CLFdBQU9WLElBQVAsQ0FBWSxDQUFDNUIsSUFBSXdDLFlBQUwsQ0FBWjtBQUNIO0FBQ0QsU0FBU1YsdUJBQVQsQ0FBaUNOLE9BQWpDLEVBQTBDaEIsT0FBMUMsRUFBbURLLEtBQW5ELEVBQTBEeUIsTUFBMUQsRUFBa0U7QUFDOUQsUUFBSUcsY0FBY2pDLFFBQVFvQixJQUFSLHdCQUFsQjtBQUNBVSxXQUFPVixJQUFQLENBQVksQ0FBQzVCLElBQUlvQyxtQkFBTCxFQUEwQnJDLFdBQVdDLEdBQVgsQ0FBZTBDLG9CQUF6QyxFQUErRGxCLE9BQS9ELENBQVo7QUFDQWMsV0FBT1YsSUFBUCxDQUFZLENBQUM1QixJQUFJb0MsbUJBQUwsRUFBMEJyQyxXQUFXQyxHQUFYLENBQWUyQyxnQkFBekMsQ0FBWjtBQUNBTCxXQUFPVixJQUFQLENBQVksQ0FBQzVCLElBQUk0QyxLQUFMLEVBQVlILFdBQVosb0JBQVo7QUFDQUgsV0FBT1YsSUFBUCxDQUFZLEdBQUdmLEtBQWY7QUFDSCIsImZpbGUiOiJsaWIvc2Nhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCAqIGFzIENsaWVudFNpZGUgZnJvbSAnLi9zeW50YXgvY2xpZW50LXNpZGUnO1xuaW1wb3J0IENvbXBpbGFibGVUZW1wbGF0ZSBmcm9tICcuL3N5bnRheC9jb21waWxhYmxlLXRlbXBsYXRlJztcbmltcG9ydCB7IEFUVFJTX0JMT0NLIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcbnZhciBPcHMgPSBXaXJlRm9ybWF0Lk9wcztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICAgIGNvbnN0cnVjdG9yKGJsb2NrLCBlbnYpIHtcbiAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrO1xuICAgICAgICB0aGlzLmVudiA9IGVudjtcbiAgICB9XG4gICAgc2NhbkVudHJ5UG9pbnQobWV0YSkge1xuICAgICAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICAgICAgbGV0IHsgc3RhdGVtZW50cywgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgbWV0YSwgc3ltYm9scywgaGFzRXZhbCB9KTtcbiAgICB9XG4gICAgc2NhbkJsb2NrKG1ldGEpIHtcbiAgICAgICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IG1ldGEsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0pO1xuICAgIH1cbiAgICBzY2FuTGF5b3V0KG1ldGEsIGF0dHJzLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgICAgICBsZXQgeyBzdGF0ZW1lbnRzLCBzeW1ib2xzLCBoYXNFdmFsIH0gPSBibG9jaztcbiAgICAgICAgbGV0IHN5bWJvbFRhYmxlID0geyBtZXRhLCBoYXNFdmFsLCBzeW1ib2xzIH07XG4gICAgICAgIGxldCBuZXdTdGF0ZW1lbnRzID0gW107XG4gICAgICAgIGxldCB0b3BsZXZlbDtcbiAgICAgICAgbGV0IGluVG9wTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChXaXJlRm9ybWF0LlN0YXRlbWVudHMuaXNDb21wb25lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCB0YWdOYW1lID0gc3RhdGVtZW50WzFdO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnYuaGFzQ29tcG9uZW50RGVmaW5pdGlvbih0YWdOYW1lLCBtZXRhLnRlbXBsYXRlTWV0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlbWVudHMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWRkRmFsbGJhY2soc3RhdGVtZW50LCBuZXdTdGF0ZW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wbGV2ZWwgPT09IHVuZGVmaW5lZCAmJiB0YWdOYW1lID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgbmV3U3RhdGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbCA9PT0gdW5kZWZpbmVkICYmIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc09wZW5FbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSBzdGF0ZW1lbnRbMV07XG4gICAgICAgICAgICAgICAgICAgIGluVG9wTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0b3BsZXZlbCwgc3ltYm9scywgYXR0cnMsIG5ld1N0YXRlbWVudHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpblRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLmlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblRvcExldmVsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFdpcmVGb3JtYXQuU3RhdGVtZW50cy5pc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgRm91bmQgbW9kaWZpZXIgXCIke3N0YXRlbWVudFsxXX1cIiBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgb2YgXCIke2NvbXBvbmVudE5hbWV9XCJcXC4gTW9kaWZpZXJzIGNhbm5vdCBiZSBvbiB0aGUgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhdGVtZW50cy5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuRGlkUmVuZGVyTGF5b3V0XSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKG5ld1N0YXRlbWVudHMsIHN5bWJvbFRhYmxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRGYWxsYmFjayhzdGF0ZW1lbnQsIGJ1ZmZlcikge1xuICAgIGxldCBbLCwgYXR0cnMsLCBibG9ja10gPSBzdGF0ZW1lbnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBidWZmZXIucHVzaChhdHRyc1tpXSk7XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gICAgaWYgKGJsb2NrKSB7XG4gICAgICAgIGxldCB7IHN0YXRlbWVudHMgfSA9IGJsb2NrO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHN0YXRlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ1ZmZlci5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG59XG5mdW5jdGlvbiBkZWNvcmF0ZVRvcExldmVsRWxlbWVudCh0YWdOYW1lLCBzeW1ib2xzLCBhdHRycywgYnVmZmVyKSB7XG4gICAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcbiAgICBidWZmZXIucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLk9wZW5Db21wb25lbnRFbGVtZW50LCB0YWdOYW1lXSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRDcmVhdGVFbGVtZW50XSk7XG4gICAgYnVmZmVyLnB1c2goW09wcy5ZaWVsZCwgYXR0cnNTeW1ib2wsIEVNUFRZX0FSUkFZXSk7XG4gICAgYnVmZmVyLnB1c2goLi4uYXR0cnMpO1xufSJdfQ==