UNPKG

@glimmer/compiler

Version:
256 lines (206 loc) 21.3 kB
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; } import { assertPresent, isPresent, mapPresent } from '@glimmer/util'; export 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 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 (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); } assertPresent(names); 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; }(); export var EXPR = new ExpressionEncoder(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMi1lbmNvZGluZy9leHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxTQUFBLGFBQUEsRUFBQSxTQUFBLEVBQUEsVUFBQSxRQUFBLGVBQUE7QUFNQSxXQUFNLGlCQUFOO0FBQUE7O0FBQUE7O0FBQUEsU0FDRSxJQURGLEdBQ0UsY0FBSSxLQUFKLEVBQTZCO0FBQzNCLFlBQVEsS0FBSSxDQUFaLElBQUE7QUFDRSxXQUFBLFNBQUE7QUFDRSxlQUFBLFNBQUE7O0FBQ0YsV0FBQSxTQUFBO0FBQ0UsZUFBTyxLQUFBLE9BQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsMEJBQUE7QUFDRSxlQUFPLEtBQUEsd0JBQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsS0FBQTtBQUNFLGVBQU8sQ0FBQTtBQUFBO0FBQUEsVUFBd0IsS0FBSSxDQUFuQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxPQUFBO0FBQ0UsZUFBTyxLQUFBLEtBQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxNQUFBO0FBQ0UsZUFBTyxDQUFBO0FBQUE7QUFBQSxVQUFQLENBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxlQUFPLENBQUMsS0FBSSxDQUFKLFVBQUEsQ0FBRCxVQUFDLEVBQUQsRUFBK0IsS0FBSSxDQUExQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxVQUFBO0FBQ0UsZUFBTyxLQUFBLFFBQUEsQ0FBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsS0FBTyxDQUFQOztBQUNGLFdBQUEsT0FBQTtBQUNFLGVB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LFFBQTFDLE1BQTBDLFVBQTFDLE1BQTBDO0FBQUEsUUFBckIsS0FBcUIsVUFBckIsS0FBcUI7QUFDakQsUUFBSSxJQUFJLEdBQUcsQ0FBQTtBQUFBO0FBQUEsTUFBdUIsSUFBSSxDQUFKLElBQUEsQ0FBdkIsU0FBdUIsQ0FBdkIsRUFBNkMsSUFBSSxDQUFKLElBQUEsQ0FBeEQsTUFBd0QsQ0FBN0MsQ0FBWDs7QUFFQSxRQUFBLEtBQUEsRUFBVztBQUNULE1BQUEsSUFBSSxDQUFKLElBQUEsQ0FBVSxJQUFJLENBQUosSUFBQSxDQUFWLEtBQVUsQ0FBVjtBQUNEOztBQUVELFdBQUEsSUFBQTtBQUNELEdBNUpIOztBQUFBLFNBOEpFLGFBOUpGLEdBOEpFLCtCQUF5QztBQUFBLFFBQXpCLElBQXlCLFVBQXpCLElBQXlCO0FBQ3ZDLFdBQU8sQ0FBQTtBQUFBO0FBQUEsTUFBNEIsSUFBSSxDQUFKLElBQUEsQ0FBbkMsSUFBbUMsQ0FBNUIsQ0FBUDtBQUNELEdBaEtIOztBQUFBLFNBa0tFLEdBbEtGLEdBa0tFLHFCQUEyQjtBQUFBLFFBQXJCLFVBQXFCLFVBQXJCLFVBQXFCO0FBQ3pCLFdBQU8sQ0FBQTtBQUFBO0FBQUEsTUFBa0IsS0FBQSxVQUFBLENBQXpCLFVBQXlCLENBQWxCLENBQVA7QUFDRCxHQXBLSDs7QUFBQTtBQUFBO0FBdUtBLE9BQU8sSUFBTSxJQUFJLEdBQUcsSUFBYixpQkFBYSxFQUFiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJlc2VudEFycmF5LCBTZXhwT3Bjb2RlcywgV2lyZUZvcm1hdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQVNUdjIgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgYXNzZXJ0UHJlc2VudCwgaXNQcmVzZW50LCBtYXBQcmVzZW50IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCAqIGFzIG1pciBmcm9tICcuL21pcic7XG5cbmV4cG9ydCB0eXBlIEhhc2hQYWlyID0gW3N0cmluZywgV2lyZUZvcm1hdC5FeHByZXNzaW9uXTtcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25FbmNvZGVyIHtcbiAgZXhwcihleHByOiBtaXIuRXhwcmVzc2lvbk5vZGUpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb24ge1xuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICBjYXNlICdNaXNzaW5nJzpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgICByZXR1cm4gdGhpcy5MaXRlcmFsKGV4cHIpO1xuICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5DYWxsRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ0RlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuUGF0aEV4cHJlc3Npb24oZXhwcik7XG4gICAgICBjYXNlICdBcmcnOlxuICAgICAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgZXhwci5zeW1ib2xdO1xuICAgICAgY2FzZSAnTG9jYWwnOlxuICAgICAgICByZXR1cm4gdGhpcy5Mb2NhbChleHByKTtcbiAgICAgIGNhc2UgJ1RoaXMnOlxuICAgICAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgMF07XG4gICAgICBjYXNlICdGcmVlJzpcbiAgICAgICAgcmV0dXJuIFtleHByLnJlc29sdXRpb24ucmVzb2x1dGlvbigpLCBleHByLnN5bWJvbF07XG4gICAgICBjYXNlICdIYXNCbG9jayc6XG4gICAgICAgIHJldHVybiB0aGlzLkhhc0Jsb2NrKGV4cHIpO1xuICAgICAgY2FzZSAnSGFzQmxvY2tQYXJhbXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5IYXNCbG9ja1BhcmFtcyhleHByKTtcbiAgICAgIGNhc2UgJ0N1cnJ5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3VycnkoZXhwcik7XG4gICAgICBjYXNlICdOb3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5Ob3QoZXhwcik7XG4gICAgICBjYXNlICdJZklubGluZSc6XG4gICAgICAgIHJldHVybiB0aGlzLklmSW5saW5lKGV4cHIpO1xuICAgICAgY2FzZSAnSW50ZXJwb2xhdGVFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSW50ZXJwb2xhdGVFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnR2V0RHluYW1pY1Zhcic6XG4gICAgICAgIHJldHVybiB0aGlzLkdldER5bmFtaWNWYXIoZXhwcik7XG4gICAgICBjYXNlICdMb2cnOlxuICAgICAgICByZXR1cm4gdGhpcy5Mb2coZXhwcik7XG4gICAgfVxuICB9XG5cbiAgTGl0ZXJhbCh7XG4gICAgdmFsdWUsXG4gIH06IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5WYWx1ZSB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuVW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5VbmRlZmluZWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgTWlzc2luZygpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBIYXNCbG9jayh7IHN5bWJvbCB9OiBtaXIuSGFzQmxvY2spOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkhhc0Jsb2NrIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkhhc0Jsb2NrLCBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBzeW1ib2xdXTtcbiAgfVxuXG4gIEhhc0Jsb2NrUGFyYW1zKHsgc3ltYm9sIH06IG1pci5IYXNCbG9ja1BhcmFtcyk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXMge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuSGFzQmxvY2tQYXJhbXMsIFtTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF1dO1xuICB9XG5cbiAgQ3VycnkoeyBkZWZpbml0aW9uLCBjdXJyaWVkVHlwZSwgYXJncyB9OiBtaXIuQ3VycnkpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkN1cnJ5IHtcbiAgICByZXR1cm4gW1xuICAgICAgU2V4cE9wY29kZXMuQ3VycnksXG4gICAgICBFWFBSLmV4cHIoZGVmaW5pdGlvbiksXG4gICAgICBjdXJyaWVkVHlwZSxcbiAgICAgIEVYUFIuUG9zaXRpb25hbChhcmdzLnBvc2l0aW9uYWwpLFxuICAgICAgRVhQUi5OYW1lZEFyZ3VtZW50cyhhcmdzLm5hbWVkKSxcbiAgICBdO1xuICB9XG5cbiAgTG9jYWwoe1xuICAgIGlzVGVtcGxhdGVMb2NhbCxcbiAgICBzeW1ib2wsXG4gIH06IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKTpcbiAgICB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0U3ltYm9sXG4gICAgfCBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldFRlbXBsYXRlU3ltYm9sIHtcbiAgICByZXR1cm4gW2lzVGVtcGxhdGVMb2NhbCA/IFNleHBPcGNvZGVzLkdldFRlbXBsYXRlU3ltYm9sIDogU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBzeW1ib2xdO1xuICB9XG5cbiAgR2V0V2l0aFJlc29sdmVyKHsgc3ltYm9sIH06IG1pci5HZXRXaXRoUmVzb2x2ZXIpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldENvbnRleHR1YWxGcmVlIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrLCBzeW1ib2xdO1xuICB9XG5cbiAgUGF0aEV4cHJlc3Npb24oeyBoZWFkLCB0YWlsIH06IG1pci5QYXRoRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0UGF0aCB7XG4gICAgbGV0IGdldE9wID0gRVhQUi5leHByKGhlYWQpIGFzIFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0VmFyO1xuXG4gICAgcmV0dXJuIFsuLi5nZXRPcCwgRVhQUi5UYWlsKHRhaWwpXTtcbiAgfVxuXG4gIEludGVycG9sYXRlRXhwcmVzc2lvbih7IHBhcnRzIH06IG1pci5JbnRlcnBvbGF0ZUV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkNvbmNhdCB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5Db25jYXQsIHBhcnRzLm1hcCgoZSkgPT4gRVhQUi5leHByKGUpKS50b0FycmF5KCldO1xuICB9XG5cbiAgQ2FsbEV4cHJlc3Npb24oeyBjYWxsZWUsIGFyZ3MgfTogbWlyLkNhbGxFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5IZWxwZXIge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuQ2FsbCwgRVhQUi5leHByKGNhbGxlZSksIC4uLkVYUFIuQXJncyhhcmdzKV07XG4gIH1cblxuICBEZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24oe1xuICAgIGFyZyxcbiAgICBjYWxsZWUsXG4gIH06IG1pci5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldFBhdGhGcmVlQXNEZXByZWNhdGVkSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2ssIGNhbGxlZS5zeW1ib2wsIFthcmcuY2hhcnNdXTtcbiAgfVxuXG4gIFRhaWwoeyBtZW1iZXJzIH06IG1pci5UYWlsKTogUHJlc2VudEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBtYXBQcmVzZW50KG1lbWJlcnMsIChtZW1iZXIpID0+IG1lbWJlci5jaGFycyk7XG4gIH1cblxuICBBcmdzKHsgcG9zaXRpb25hbCwgbmFtZWQgfTogbWlyLkFyZ3MpOiBXaXJlRm9ybWF0LkNvcmUuQXJncyB7XG4gICAgcmV0dXJuIFt0aGlzLlBvc2l0aW9uYWwocG9zaXRpb25hbCksIHRoaXMuTmFtZWRBcmd1bWVudHMobmFtZWQpXTtcbiAgfVxuXG4gIFBvc2l0aW9uYWwoeyBsaXN0IH06IG1pci5Qb3NpdGlvbmFsKTogV2lyZUZvcm1hdC5Db3JlLlBhcmFtcyB7XG4gICAgcmV0dXJuIGxpc3QubWFwKChsKSA9PiBFWFBSLmV4cHIobCkpLnRvUHJlc2VudEFycmF5KCk7XG4gIH1cblxuICBOYW1lZEFyZ3VtZW50KHsga2V5LCB2YWx1ZSB9OiBtaXIuTmFtZWRBcmd1bWVudCk6IEhhc2hQYWlyIHtcbiAgICByZXR1cm4gW2tleS5jaGFycywgRVhQUi5leHByKHZhbHVlKV07XG4gIH1cblxuICBOYW1lZEFyZ3VtZW50cyh7IGVudHJpZXM6IHBhaXJzIH06IG1pci5OYW1lZEFyZ3VtZW50cyk6IFdpcmVGb3JtYXQuQ29yZS5IYXNoIHtcbiAgICBsZXQgbGlzdCA9IHBhaXJzLnRvQXJyYXkoKTtcblxuICAgIGlmIChpc1ByZXNlbnQobGlzdCkpIHtcbiAgICAgIGxldCBuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCB2YWx1ZXM6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdID0gW107XG5cbiAgICAgIGZvciAobGV0IHBhaXIgb2YgbGlzdCkge1xuICAgICAgICBsZXQgW25hbWUsIHZhbHVlXSA9IEVYUFIuTmFtZWRBcmd1bWVudChwYWlyKTtcbiAgICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnRQcmVzZW50KG5hbWVzKTtcbiAgICAgIGFzc2VydFByZXNlbnQodmFsdWVzKTtcblxuICAgICAgcmV0dXJuIFtuYW1lcywgdmFsdWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgTm90KHsgdmFsdWUgfTogbWlyLk5vdCk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuTm90IHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLk5vdCwgRVhQUi5leHByKHZhbHVlKV07XG4gIH1cblxuICBJZklubGluZSh7IGNvbmRpdGlvbiwgdHJ1dGh5LCBmYWxzeSB9OiBtaXIuSWZJbmxpbmUpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLklmSW5saW5lIHtcbiAgICBsZXQgZXhwciA9IFtTZXhwT3Bjb2Rlcy5JZklubGluZSwgRVhQUi5leHByKGNvbmRpdGlvbiksIEVYUFIuZXhwcih0cnV0aHkpXTtcblxuICAgIGlmIChmYWxzeSkge1xuICAgICAgZXhwci5wdXNoKEVYUFIuZXhwcihmYWxzeSkpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByIGFzIFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSWZJbmxpbmU7XG4gIH1cblxuICBHZXREeW5hbWljVmFyKHsgbmFtZSB9OiBtaXIuR2V0RHluYW1pY1Zhcik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0RHluYW1pY1ZhciB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5HZXREeW5hbWljVmFyLCBFWFBSLmV4cHIobmFtZSldO1xuICB9XG5cbiAgTG9nKHsgcG9zaXRpb25hbCB9OiBtaXIuTG9nKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5Mb2cge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuTG9nLCB0aGlzLlBvc2l0aW9uYWwocG9zaXRpb25hbCldO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFWFBSID0gbmV3IEV4cHJlc3Npb25FbmNvZGVyKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9