UNPKG

@glimmer/compiler

Version:
305 lines (246 loc) 23.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EXPR = exports.ExpressionEncoder = void 0; var _util = require("@glimmer/util"); function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var ExpressionEncoder = /*#__PURE__*/function () { function ExpressionEncoder() {} var _proto = ExpressionEncoder.prototype; _proto.expr = function expr(_expr) { switch (_expr.type) { case 'Missing': return undefined; case 'Literal': return this.Literal(_expr); case 'CallExpression': return this.CallExpression(_expr); case 'DeprecatedCallExpression': return this.DeprecatedCallExpression(_expr); case 'PathExpression': return this.PathExpression(_expr); case 'Arg': return [30 /* GetSymbol */ , _expr.symbol]; case 'Local': return this.Local(_expr); case 'This': return [30 /* GetSymbol */ , 0]; case 'Free': return [_expr.resolution.resolution(), _expr.symbol]; case 'HasBlock': return this.HasBlock(_expr); case 'HasBlockParams': return this.HasBlockParams(_expr); case 'Curry': return this.Curry(_expr); case 'Not': return this.Not(_expr); case 'IfInline': return this.IfInline(_expr); case 'InterpolateExpression': return this.InterpolateExpression(_expr); case 'GetDynamicVar': return this.GetDynamicVar(_expr); case 'Log': return this.Log(_expr); } }; _proto.Literal = function Literal(_ref) { var value = _ref.value; if (value === undefined) { return [27 /* Undefined */ ]; } else { return value; } }; _proto.Missing = function Missing() { return undefined; }; _proto.HasBlock = function HasBlock(_ref2) { var symbol = _ref2.symbol; return [48 /* HasBlock */ , [30 /* GetSymbol */ , symbol]]; }; _proto.HasBlockParams = function HasBlockParams(_ref3) { var symbol = _ref3.symbol; return [49 /* HasBlockParams */ , [30 /* GetSymbol */ , symbol]]; }; _proto.Curry = function Curry(_ref4) { var definition = _ref4.definition, curriedType = _ref4.curriedType, args = _ref4.args; return [50 /* Curry */ , EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)]; }; _proto.Local = function Local(_ref5) { var isTemplateLocal = _ref5.isTemplateLocal, symbol = _ref5.symbol; return [isTemplateLocal ? 32 /* GetTemplateSymbol */ : 30 /* GetSymbol */ , symbol]; }; _proto.GetWithResolver = function GetWithResolver(_ref6) { var symbol = _ref6.symbol; return [34 /* GetFreeAsComponentOrHelperHeadOrThisFallback */ , symbol]; }; _proto.PathExpression = function PathExpression(_ref7) { var head = _ref7.head, tail = _ref7.tail; var getOp = EXPR.expr(head); return [].concat(getOp, [EXPR.Tail(tail)]); }; _proto.InterpolateExpression = function InterpolateExpression(_ref8) { var parts = _ref8.parts; return [29 /* Concat */ , parts.map(function (e) { return EXPR.expr(e); }).toArray()]; }; _proto.CallExpression = function CallExpression(_ref9) { var callee = _ref9.callee, args = _ref9.args; return [28 /* Call */ , EXPR.expr(callee)].concat(EXPR.Args(args)); }; _proto.DeprecatedCallExpression = function DeprecatedCallExpression(_ref10) { var arg = _ref10.arg, callee = _ref10.callee; return [99 /* GetFreeAsDeprecatedHelperHeadOrThisFallback */ , callee.symbol, [arg.chars]]; }; _proto.Tail = function Tail(_ref11) { var members = _ref11.members; return (0, _util.mapPresent)(members, function (member) { return member.chars; }); }; _proto.Args = function Args(_ref12) { var positional = _ref12.positional, named = _ref12.named; return [this.Positional(positional), this.NamedArguments(named)]; }; _proto.Positional = function Positional(_ref13) { var list = _ref13.list; return list.map(function (l) { return EXPR.expr(l); }).toPresentArray(); }; _proto.NamedArgument = function NamedArgument(_ref14) { var key = _ref14.key, value = _ref14.value; return [key.chars, EXPR.expr(value)]; }; _proto.NamedArguments = function NamedArguments(_ref15) { var pairs = _ref15.entries; var list = pairs.toArray(); if ((0, _util.isPresent)(list)) { var names = []; var values = []; for (var _iterator = _createForOfIteratorHelperLoose(list), _step; !(_step = _iterator()).done;) { var pair = _step.value; var _EXPR$NamedArgument = EXPR.NamedArgument(pair), name = _EXPR$NamedArgument[0], value = _EXPR$NamedArgument[1]; names.push(name); values.push(value); } (0, _util.assertPresent)(names); (0, _util.assertPresent)(values); return [names, values]; } else { return null; } }; _proto.Not = function Not(_ref16) { var value = _ref16.value; return [51 /* Not */ , EXPR.expr(value)]; }; _proto.IfInline = function IfInline(_ref17) { var condition = _ref17.condition, truthy = _ref17.truthy, falsy = _ref17.falsy; var expr = [52 /* IfInline */ , EXPR.expr(condition), EXPR.expr(truthy)]; if (falsy) { expr.push(EXPR.expr(falsy)); } return expr; }; _proto.GetDynamicVar = function GetDynamicVar(_ref18) { var name = _ref18.name; return [53 /* GetDynamicVar */ , EXPR.expr(name)]; }; _proto.Log = function Log(_ref19) { var positional = _ref19.positional; return [54 /* Log */ , this.Positional(positional)]; }; return ExpressionEncoder; }(); exports.ExpressionEncoder = ExpressionEncoder; var EXPR = new ExpressionEncoder(); exports.EXPR = EXPR; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMi1lbmNvZGluZy9leHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxJQUFNLGlCQUFOLEdBQUEsYUFBQSxZQUFBO0FBQUEsV0FBQSxpQkFBQSxHQUFBLENBQUE7O0FBQUEsTUFBQSxNQUFBLEdBQUEsaUJBQUEsQ0FBQSxTQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLElBQUEsR0FDRSxTQUFBLElBQUEsQ0FBQSxLQUFBLEVBQTZCO0FBQzNCLFlBQVEsS0FBSSxDQUFaLElBQUE7QUFDRSxXQUFBLFNBQUE7QUFDRSxlQUFBLFNBQUE7O0FBQ0YsV0FBQSxTQUFBO0FBQ0UsZUFBTyxLQUFBLE9BQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsMEJBQUE7QUFDRSxlQUFPLEtBQUEsd0JBQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsS0FBQTtBQUNFLGVBQU8sQ0FBQTtBQUFBO0FBQUEsVUFBd0IsS0FBSSxDQUFuQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxPQUFBO0FBQ0UsZUFBTyxLQUFBLEtBQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxNQUFBO0FBQ0UsZUFBTyxDQUFBO0FBQUE7QUFBQSxVQUFQLENBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxlQUFPLENBQUMsS0FBSSxDQUFKLFVBQUEsQ0FBRCxVQUFDLEVBQUQsRUFBK0IsS0FBSSxDQUExQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxVQUFBO0FBQ0UsZUFBTyxLQUFBLFFB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Rm9ybWF0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBU1R2MiB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBhc3NlcnRQcmVzZW50LCBpc1ByZXNlbnQsIG1hcFByZXNlbnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0ICogYXMgbWlyIGZyb20gJy4vbWlyJztcblxuZXhwb3J0IHR5cGUgSGFzaFBhaXIgPSBbc3RyaW5nLCBXaXJlRm9ybWF0LkV4cHJlc3Npb25dO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkVuY29kZXIge1xuICBleHByKGV4cHI6IG1pci5FeHByZXNzaW9uTm9kZSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbiB7XG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgIGNhc2UgJ01pc3NpbmcnOlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgIHJldHVybiB0aGlzLkxpdGVyYWwoZXhwcik7XG4gICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLkNhbGxFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnUGF0aEV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5QYXRoRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ0FyZyc6XG4gICAgICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBleHByLnN5bWJvbF07XG4gICAgICBjYXNlICdMb2NhbCc6XG4gICAgICAgIHJldHVybiB0aGlzLkxvY2FsKGV4cHIpO1xuICAgICAgY2FzZSAnVGhpcyc6XG4gICAgICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCAwXTtcbiAgICAgIGNhc2UgJ0ZyZWUnOlxuICAgICAgICByZXR1cm4gW2V4cHIucmVzb2x1dGlvbi5yZXNvbHV0aW9uKCksIGV4cHIuc3ltYm9sXTtcbiAgICAgIGNhc2UgJ0hhc0Jsb2NrJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSGFzQmxvY2soZXhwcik7XG4gICAgICBjYXNlICdIYXNCbG9ja1BhcmFtcyc6XG4gICAgICAgIHJldHVybiB0aGlzLkhhc0Jsb2NrUGFyYW1zKGV4cHIpO1xuICAgICAgY2FzZSAnQ3VycnknOlxuICAgICAgICByZXR1cm4gdGhpcy5DdXJyeShleHByKTtcbiAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIHJldHVybiB0aGlzLk5vdChleHByKTtcbiAgICAgIGNhc2UgJ0lmSW5saW5lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSWZJbmxpbmUoZXhwcik7XG4gICAgICBjYXNlICdJbnRlcnBvbGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5JbnRlcnBvbGF0ZUV4cHJlc3Npb24oZXhwcik7XG4gICAgICBjYXNlICdHZXREeW5hbWljVmFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuR2V0RHluYW1pY1ZhcihleHByKTtcbiAgICAgIGNhc2UgJ0xvZyc6XG4gICAgICAgIHJldHVybiB0aGlzLkxvZyhleHByKTtcbiAgICB9XG4gIH1cblxuICBMaXRlcmFsKHtcbiAgICB2YWx1ZSxcbiAgfTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLlZhbHVlIHwgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5VbmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW1NleHBPcGNvZGVzLlVuZGVmaW5lZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBNaXNzaW5nKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIEhhc0Jsb2NrKHsgc3ltYm9sIH06IG1pci5IYXNCbG9jayk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSGFzQmxvY2sge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuSGFzQmxvY2ssIFtTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF1dO1xuICB9XG5cbiAgSGFzQmxvY2tQYXJhbXMoeyBzeW1ib2wgfTogbWlyLkhhc0Jsb2NrUGFyYW1zKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcyB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5IYXNCbG9ja1BhcmFtcywgW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgc3ltYm9sXV07XG4gIH1cblxuICBDdXJyeSh7IGRlZmluaXRpb24sIGN1cnJpZWRUeXBlLCBhcmdzIH06IG1pci5DdXJyeSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuQ3Vycnkge1xuICAgIHJldHVybiBbXG4gICAgICBTZXhwT3Bjb2Rlcy5DdXJyeSxcbiAgICAgIEVYUFIuZXhwcihkZWZpbml0aW9uKSxcbiAgICAgIGN1cnJpZWRUeXBlLFxuICAgICAgRVhQUi5Qb3NpdGlvbmFsKGFyZ3MucG9zaXRpb25hbCksXG4gICAgICBFWFBSLk5hbWVkQXJndW1lbnRzKGFyZ3MubmFtZWQpLFxuICAgIF07XG4gIH1cblxuICBMb2NhbCh7XG4gICAgaXNUZW1wbGF0ZUxvY2FsLFxuICAgIHN5bWJvbCxcbiAgfTogQVNUdjIuTG9jYWxWYXJSZWZlcmVuY2UpOlxuICAgIHwgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRTeW1ib2xcbiAgICB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0VGVtcGxhdGVTeW1ib2wge1xuICAgIHJldHVybiBbaXNUZW1wbGF0ZUxvY2FsID8gU2V4cE9wY29kZXMuR2V0VGVtcGxhdGVTeW1ib2wgOiBTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF07XG4gIH1cblxuICBHZXRXaXRoUmVzb2x2ZXIoeyBzeW1ib2wgfTogbWlyLkdldFdpdGhSZXNvbHZlcik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0Q29udGV4dHVhbEZyZWUge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2ssIHN5bWJvbF07XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbih7IGhlYWQsIHRhaWwgfTogbWlyLlBhdGhFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRQYXRoIHtcbiAgICBsZXQgZ2V0T3AgPSBFWFBSLmV4cHIoaGVhZCkgYXMgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRWYXI7XG5cbiAgICByZXR1cm4gWy4uLmdldE9wLCBFWFBSLlRhaWwodGFpbCldO1xuICB9XG5cbiAgSW50ZXJwb2xhdGVFeHByZXNzaW9uKHsgcGFydHMgfTogbWlyLkludGVycG9sYXRlRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuQ29uY2F0IHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkNvbmNhdCwgcGFydHMubWFwKChlKSA9PiBFWFBSLmV4cHIoZSkpLnRvQXJyYXkoKV07XG4gIH1cblxuICBDYWxsRXhwcmVzc2lvbih7IGNhbGxlZSwgYXJncyB9OiBtaXIuQ2FsbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkhlbHBlciB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5DYWxsLCBFWFBSLmV4cHIoY2FsbGVlKSwgLi4uRVhQUi5BcmdzKGFyZ3MpXTtcbiAgfVxuXG4gIERlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbih7XG4gICAgYXJnLFxuICAgIGNhbGxlZSxcbiAgfTogbWlyLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0UGF0aEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2sge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjaywgY2FsbGVlLnN5bWJvbCwgW2FyZy5jaGFyc11dO1xuICB9XG5cbiAgVGFpbCh7IG1lbWJlcnMgfTogbWlyLlRhaWwpOiBQcmVzZW50QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG1hcFByZXNlbnQobWVtYmVycywgKG1lbWJlcikgPT4gbWVtYmVyLmNoYXJzKTtcbiAgfVxuXG4gIEFyZ3MoeyBwb3NpdGlvbmFsLCBuYW1lZCB9OiBtaXIuQXJncyk6IFdpcmVGb3JtYXQuQ29yZS5BcmdzIHtcbiAgICByZXR1cm4gW3RoaXMuUG9zaXRpb25hbChwb3NpdGlvbmFsKSwgdGhpcy5OYW1lZEFyZ3VtZW50cyhuYW1lZCldO1xuICB9XG5cbiAgUG9zaXRpb25hbCh7IGxpc3QgfTogbWlyLlBvc2l0aW9uYWwpOiBXaXJlRm9ybWF0LkNvcmUuUGFyYW1zIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKGwpID0+IEVYUFIuZXhwcihsKSkudG9QcmVzZW50QXJyYXkoKTtcbiAgfVxuXG4gIE5hbWVkQXJndW1lbnQoeyBrZXksIHZhbHVlIH06IG1pci5OYW1lZEFyZ3VtZW50KTogSGFzaFBhaXIge1xuICAgIHJldHVybiBba2V5LmNoYXJzLCBFWFBSLmV4cHIodmFsdWUpXTtcbiAgfVxuXG4gIE5hbWVkQXJndW1lbnRzKHsgZW50cmllczogcGFpcnMgfTogbWlyLk5hbWVkQXJndW1lbnRzKTogV2lyZUZvcm1hdC5Db3JlLkhhc2gge1xuICAgIGxldCBsaXN0ID0gcGFpcnMudG9BcnJheSgpO1xuXG4gICAgaWYgKGlzUHJlc2VudChsaXN0KSkge1xuICAgICAgbGV0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGV0IHZhbHVlczogV2lyZUZvcm1hdC5FeHByZXNzaW9uW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgcGFpciBvZiBsaXN0KSB7XG4gICAgICAgIGxldCBbbmFtZSwgdmFsdWVdID0gRVhQUi5OYW1lZEFyZ3VtZW50KHBhaXIpO1xuICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydFByZXNlbnQobmFtZXMpO1xuICAgICAgYXNzZXJ0UHJlc2VudCh2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gW25hbWVzLCB2YWx1ZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBOb3QoeyB2YWx1ZSB9OiBtaXIuTm90KTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5Ob3Qge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuTm90LCBFWFBSLmV4cHIodmFsdWUpXTtcbiAgfVxuXG4gIElmSW5saW5lKHsgY29uZGl0aW9uLCB0cnV0aHksIGZhbHN5IH06IG1pci5JZklubGluZSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSWZJbmxpbmUge1xuICAgIGxldCBleHByID0gW1NleHBPcGNvZGVzLklmSW5saW5lLCBFWFBSLmV4cHIoY29uZGl0aW9uKSwgRVhQUi5leHByKHRydXRoeSldO1xuXG4gICAgaWYgKGZhbHN5KSB7XG4gICAgICBleHByLnB1c2goRVhQUi5leHByKGZhbHN5KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHIgYXMgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5JZklubGluZTtcbiAgfVxuXG4gIEdldER5bmFtaWNWYXIoeyBuYW1lIH06IG1pci5HZXREeW5hbWljVmFyKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXREeW5hbWljVmFyIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldER5bmFtaWNWYXIsIEVYUFIuZXhwcihuYW1lKV07XG4gIH1cblxuICBMb2coeyBwb3NpdGlvbmFsIH06IG1pci5Mb2cpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkxvZyB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5Mb2csIHRoaXMuUG9zaXRpb25hbChwb3NpdGlvbmFsKV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVYUFIgPSBuZXcgRXhwcmVzc2lvbkVuY29kZXIoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=