UNPKG

@glimmer/compiler

Version:
194 lines (160 loc) 20.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertPathToCallIfKeyword = convertPathToCallIfKeyword; exports.VISIT_EXPRS = exports.NormalizeExpressions = void 0; var _syntax = require("@glimmer/syntax"); var _util = require("@glimmer/util"); var _result = require("../../../shared/result"); var mir = _interopRequireWildcard(require("../../2-encoding/mir")); var _keywords = require("../keywords"); var _isNode = require("../utils/is-node"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var NormalizeExpressions = /*#__PURE__*/function () { function NormalizeExpressions() {} var _proto = NormalizeExpressions.prototype; _proto.visit = function visit(node, state) { switch (node.type) { case 'Literal': return (0, _result.Ok)(this.Literal(node)); case 'Interpolate': return this.Interpolate(node, state); case 'Path': return this.PathExpression(node); case 'Call': var translated = _keywords.CALL_KEYWORDS.translate(node, state); if (translated !== null) { return translated; } return this.CallExpression(node, state); case 'DeprecatedCall': return this.DeprecaedCallExpression(node, state); } }; _proto.visitList = function visitList(nodes, state) { return new _result.ResultArray(nodes.map(function (e) { return VISIT_EXPRS.visit(e, state); })).toOptionalList(); } /** * Normalize paths into `hir.Path` or a `hir.Expr` that corresponds to the ref. * * TODO since keywords don't support tails anyway, distinguish PathExpression from * VariableReference in ASTv2. */ ; _proto.PathExpression = function PathExpression(path) { var ref = this.VariableReference(path.ref); var tail = path.tail; if ((0, _util.isPresent)(tail)) { var tailLoc = tail[0].loc.extend(tail[tail.length - 1].loc); return (0, _result.Ok)(new mir.PathExpression({ loc: path.loc, head: ref, tail: new mir.Tail({ loc: tailLoc, members: tail }) })); } else { return (0, _result.Ok)(ref); } }; _proto.VariableReference = function VariableReference(ref) { return ref; }; _proto.Literal = function Literal(literal) { return literal; }; _proto.Interpolate = function Interpolate(expr, state) { var parts = expr.parts.map(convertPathToCallIfKeyword); return VISIT_EXPRS.visitList(parts, state).mapOk(function (parts) { return new mir.InterpolateExpression({ loc: expr.loc, parts: parts }); }); }; _proto.CallExpression = function CallExpression(expr, state) { if (!(0, _isNode.hasPath)(expr)) { throw new Error("unimplemented subexpression at the head of a subexpression"); } else { return _result.Result.all(VISIT_EXPRS.visit(expr.callee, state), VISIT_EXPRS.Args(expr.args, state)).mapOk(function (_ref) { var callee = _ref[0], args = _ref[1]; return new mir.CallExpression({ loc: expr.loc, callee: callee, args: args }); }); } }; _proto.DeprecaedCallExpression = function DeprecaedCallExpression(_ref2, _state) { var arg = _ref2.arg, callee = _ref2.callee, loc = _ref2.loc; return (0, _result.Ok)(new mir.DeprecatedCallExpression({ loc: loc, arg: arg, callee: callee })); }; _proto.Args = function Args(_ref3, state) { var positional = _ref3.positional, named = _ref3.named, loc = _ref3.loc; return _result.Result.all(this.Positional(positional, state), this.NamedArguments(named, state)).mapOk(function (_ref4) { var positional = _ref4[0], named = _ref4[1]; return new mir.Args({ loc: loc, positional: positional, named: named }); }); }; _proto.Positional = function Positional(positional, state) { return VISIT_EXPRS.visitList(positional.exprs, state).mapOk(function (list) { return new mir.Positional({ loc: positional.loc, list: list }); }); }; _proto.NamedArguments = function NamedArguments(named, state) { var pairs = named.entries.map(function (arg) { var value = convertPathToCallIfKeyword(arg.value); return VISIT_EXPRS.visit(value, state).mapOk(function (value) { return new mir.NamedArgument({ loc: arg.loc, key: arg.name, value: value }); }); }); return new _result.ResultArray(pairs).toOptionalList().mapOk(function (pairs) { return new mir.NamedArguments({ loc: named.loc, entries: pairs }); }); }; return NormalizeExpressions; }(); exports.NormalizeExpressions = NormalizeExpressions; function convertPathToCallIfKeyword(path) { if (path.type === 'Path' && path.ref.type === 'Free' && path.ref.name in _syntax.KEYWORDS_TYPES) { return new _syntax.ASTv2.CallExpression({ callee: path, args: _syntax.ASTv2.Args.empty(path.loc), loc: path.loc }); } return path; } var VISIT_EXPRS = new NormalizeExpressions(); exports.VISIT_EXPRS = VISIT_EXPRS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL3Zpc2l0b3JzL2V4cHJlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQUVBLElBQU0sb0JBQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLG9CQUFBLEdBQUEsQ0FBQTs7QUFBQSxNQUFBLE1BQUEsR0FBQSxvQkFBQSxDQUFBLFNBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsS0FBQSxHQUNFLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQTJEO0FBQ3pELFlBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxXQUFBLFNBQUE7QUFDRSxlQUFPLGdCQUFHLEtBQUEsT0FBQSxDQUFWLElBQVUsQ0FBSCxDQUFQOztBQUNGLFdBQUEsYUFBQTtBQUNFLGVBQU8sS0FBQSxXQUFBLENBQUEsSUFBQSxFQUFQLEtBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxlQUFPLEtBQUEsY0FBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxZQUFJLFVBQVUsR0FBRyx3QkFBQSxTQUFBLENBQUEsSUFBQSxFQUFqQixLQUFpQixDQUFqQjs7QUFFQSxZQUFJLFVBQVUsS0FBZCxJQUFBLEVBQXlCO0FBQ3ZCLGlCQUFBLFVBQUE7QUFDRDs7QUFFRCxlQUFPLEtBQUEsY0FBQSxDQUFBLElBQUEsRUFBUCxLQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSx1QkFBQSxDQUFBLElBQUEsRUFBUCxLQUFPLENBQVA7QUFoQko7QUFGSixHQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLFNBQUEsR0E4QkUsU0FBQSxTQUFBLENBQUEsS0FBQSxFQUFBLEtBQUEsRUFFMkI7QUFFekIsV0FBTyxJQUFBLG1CQUFB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QUU7QUFBM0IsT0FBdkIsQ0FBWDtBQUZULEtBQU8sQ0FBUDtBQXJKSixHQUFBOztBQUFBLFNBQUEsb0JBQUE7QUFBQSxDQUFBLEVBQUE7Ozs7QUEySk0sU0FBQSwwQkFBQSxDQUFBLElBQUEsRUFBK0Q7QUFDbkUsTUFBSSxJQUFJLENBQUosSUFBQSxLQUFBLE1BQUEsSUFBd0IsSUFBSSxDQUFKLEdBQUEsQ0FBQSxJQUFBLEtBQXhCLE1BQUEsSUFBb0QsSUFBSSxDQUFKLEdBQUEsQ0FBQSxJQUFBLElBQXhELHNCQUFBLEVBQXlGO0FBQ3ZGLFdBQU8sSUFBSSxjQUFKLGNBQUEsQ0FBeUI7QUFDOUIsTUFBQSxNQUFNLEVBRHdCLElBQUE7QUFFOUIsTUFBQSxJQUFJLEVBQUUsY0FBQSxJQUFBLENBQUEsS0FBQSxDQUFpQixJQUFJLENBRkcsR0FFeEIsQ0FGd0I7QUFHOUIsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBSG9CLEtBQXpCLENBQVA7QUFLRDs7QUFFRCxTQUFBLElBQUE7QUFDRDs7QUFFTSxJQUFNLFdBQVcsR0FBRyxJQUFwQixvQkFBb0IsRUFBcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmVzZW50QXJyYXkgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFTVHYyLCBLRVlXT1JEU19UWVBFUyB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBpc1ByZXNlbnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgQW55T3B0aW9uYWxMaXN0LCBQcmVzZW50TGlzdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saXN0JztcbmltcG9ydCB7IE9rLCBSZXN1bHQsIFJlc3VsdEFycmF5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3Jlc3VsdCc7XG5pbXBvcnQgKiBhcyBtaXIgZnJvbSAnLi4vLi4vMi1lbmNvZGluZy9taXInO1xuaW1wb3J0IHsgTm9ybWFsaXphdGlvblN0YXRlIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBDQUxMX0tFWVdPUkRTIH0gZnJvbSAnLi4va2V5d29yZHMnO1xuaW1wb3J0IHsgaGFzUGF0aCB9IGZyb20gJy4uL3V0aWxzL2lzLW5vZGUnO1xuXG5leHBvcnQgY2xhc3MgTm9ybWFsaXplRXhwcmVzc2lvbnMge1xuICB2aXNpdChub2RlOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSwgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZSk6IFJlc3VsdDxtaXIuRXhwcmVzc2lvbk5vZGU+IHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgIHJldHVybiBPayh0aGlzLkxpdGVyYWwobm9kZSkpO1xuICAgICAgY2FzZSAnSW50ZXJwb2xhdGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5JbnRlcnBvbGF0ZShub2RlLCBzdGF0ZSk7XG4gICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuUGF0aEV4cHJlc3Npb24obm9kZSk7XG4gICAgICBjYXNlICdDYWxsJzpcbiAgICAgICAgbGV0IHRyYW5zbGF0ZWQgPSBDQUxMX0tFWVdPUkRTLnRyYW5zbGF0ZShub2RlLCBzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHRyYW5zbGF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLkNhbGxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKTtcbiAgICAgIGNhc2UgJ0RlcHJlY2F0ZWRDYWxsJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuRGVwcmVjYWVkQ2FsbEV4cHJlc3Npb24obm9kZSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0TGlzdChcbiAgICBub2RlczogUHJlc2VudEFycmF5PEFTVHYyLkV4cHJlc3Npb25Ob2RlPixcbiAgICBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlXG4gICk6IFJlc3VsdDxQcmVzZW50TGlzdDxtaXIuRXhwcmVzc2lvbk5vZGU+PjtcbiAgdmlzaXRMaXN0KFxuICAgIG5vZGVzOiByZWFkb25seSBBU1R2Mi5FeHByZXNzaW9uTm9kZVtdLFxuICAgIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGVcbiAgKTogUmVzdWx0PEFueU9wdGlvbmFsTGlzdDxtaXIuRXhwcmVzc2lvbk5vZGU+PjtcbiAgdmlzaXRMaXN0KFxuICAgIG5vZGVzOiByZWFkb25seSBBU1R2Mi5FeHByZXNzaW9uTm9kZVtdLFxuICAgIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGVcbiAgKTogUmVzdWx0PEFueU9wdGlvbmFsTGlzdDxtaXIuRXhwcmVzc2lvbk5vZGU+PiB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHRBcnJheShub2Rlcy5tYXAoKGUpID0+IFZJU0lUX0VYUFJTLnZpc2l0KGUsIHN0YXRlKSkpLnRvT3B0aW9uYWxMaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHBhdGhzIGludG8gYGhpci5QYXRoYCBvciBhIGBoaXIuRXhwcmAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcmVmLlxuICAgKlxuICAgKiBUT0RPIHNpbmNlIGtleXdvcmRzIGRvbid0IHN1cHBvcnQgdGFpbHMgYW55d2F5LCBkaXN0aW5ndWlzaCBQYXRoRXhwcmVzc2lvbiBmcm9tXG4gICAqIFZhcmlhYmxlUmVmZXJlbmNlIGluIEFTVHYyLlxuICAgKi9cbiAgUGF0aEV4cHJlc3Npb24ocGF0aDogQVNUdjIuUGF0aEV4cHJlc3Npb24pOiBSZXN1bHQ8bWlyLkV4cHJlc3Npb25Ob2RlPiB7XG4gICAgbGV0IHJlZiA9IHRoaXMuVmFyaWFibGVSZWZlcmVuY2UocGF0aC5yZWYpO1xuICAgIGxldCB7IHRhaWwgfSA9IHBhdGg7XG5cbiAgICBpZiAoaXNQcmVzZW50KHRhaWwpKSB7XG4gICAgICBsZXQgdGFpbExvYyA9IHRhaWxbMF0ubG9jLmV4dGVuZCh0YWlsW3RhaWwubGVuZ3RoIC0gMV0ubG9jKTtcbiAgICAgIHJldHVybiBPayhcbiAgICAgICAgbmV3IG1pci5QYXRoRXhwcmVzc2lvbih7XG4gICAgICAgICAgbG9jOiBwYXRoLmxvYyxcbiAgICAgICAgICBoZWFkOiByZWYsXG4gICAgICAgICAgdGFpbDogbmV3IG1pci5UYWlsKHsgbG9jOiB0YWlsTG9jLCBtZW1iZXJzOiB0YWlsIH0pLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9rKHJlZik7XG4gICAgfVxuICB9XG5cbiAgVmFyaWFibGVSZWZlcmVuY2UocmVmOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSk6IEFTVHYyLlZhcmlhYmxlUmVmZXJlbmNlIHtcbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgTGl0ZXJhbChsaXRlcmFsOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbik6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbGl0ZXJhbDtcbiAgfVxuXG4gIEludGVycG9sYXRlKFxuICAgIGV4cHI6IEFTVHYyLkludGVycG9sYXRlRXhwcmVzc2lvbixcbiAgICBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlXG4gICk6IFJlc3VsdDxtaXIuSW50ZXJwb2xhdGVFeHByZXNzaW9uPiB7XG4gICAgbGV0IHBhcnRzID0gZXhwci5wYXJ0cy5tYXAoY29udmVydFBhdGhUb0NhbGxJZktleXdvcmQpIGFzIFByZXNlbnRBcnJheTxBU1R2Mi5FeHByZXNzaW9uTm9kZT47XG5cbiAgICByZXR1cm4gVklTSVRfRVhQUlMudmlzaXRMaXN0KHBhcnRzLCBzdGF0ZSkubWFwT2soXG4gICAgICAocGFydHMpID0+IG5ldyBtaXIuSW50ZXJwb2xhdGVFeHByZXNzaW9uKHsgbG9jOiBleHByLmxvYywgcGFydHM6IHBhcnRzIH0pXG4gICAgKTtcbiAgfVxuXG4gIENhbGxFeHByZXNzaW9uKFxuICAgIGV4cHI6IEFTVHYyLkNhbGxFeHByZXNzaW9uLFxuICAgIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGVcbiAgKTogUmVzdWx0PG1pci5FeHByZXNzaW9uTm9kZT4ge1xuICAgIGlmICghaGFzUGF0aChleHByKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmltcGxlbWVudGVkIHN1YmV4cHJlc3Npb24gYXQgdGhlIGhlYWQgb2YgYSBzdWJleHByZXNzaW9uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBSZXN1bHQuYWxsKFxuICAgICAgICBWSVNJVF9FWFBSUy52aXNpdChleHByLmNhbGxlZSwgc3RhdGUpLFxuICAgICAgICBWSVNJVF9FWFBSUy5BcmdzKGV4cHIuYXJncywgc3RhdGUpXG4gICAgICApLm1hcE9rKFxuICAgICAgICAoW2NhbGxlZSwgYXJnc10pID0+XG4gICAgICAgICAgbmV3IG1pci5DYWxsRXhwcmVzc2lvbih7XG4gICAgICAgICAgICBsb2M6IGV4cHIubG9jLFxuICAgICAgICAgICAgY2FsbGVlLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBEZXByZWNhZWRDYWxsRXhwcmVzc2lvbihcbiAgICB7IGFyZywgY2FsbGVlLCBsb2MgfTogQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uLFxuICAgIF9zdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlXG4gICk6IFJlc3VsdDxtaXIuRXhwcmVzc2lvbk5vZGU+IHtcbiAgICByZXR1cm4gT2sobmV3IG1pci5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24oeyBsb2MsIGFyZywgY2FsbGVlIH0pKTtcbiAgfVxuXG4gIEFyZ3MoeyBwb3NpdGlvbmFsLCBuYW1lZCwgbG9jIH06IEFTVHYyLkFyZ3MsIHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUpOiBSZXN1bHQ8bWlyLkFyZ3M+IHtcbiAgICByZXR1cm4gUmVzdWx0LmFsbCh0aGlzLlBvc2l0aW9uYWwocG9zaXRpb25hbCwgc3RhdGUpLCB0aGlzLk5hbWVkQXJndW1lbnRzKG5hbWVkLCBzdGF0ZSkpLm1hcE9rKFxuICAgICAgKFtwb3NpdGlvbmFsLCBuYW1lZF0pID0+XG4gICAgICAgIG5ldyBtaXIuQXJncyh7XG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHBvc2l0aW9uYWwsXG4gICAgICAgICAgbmFtZWQsXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIFBvc2l0aW9uYWwoXG4gICAgcG9zaXRpb25hbDogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgICBzdGF0ZTogTm9ybWFsaXphdGlvblN0YXRlXG4gICk6IFJlc3VsdDxtaXIuUG9zaXRpb25hbD4ge1xuICAgIHJldHVybiBWSVNJVF9FWFBSUy52aXNpdExpc3QocG9zaXRpb25hbC5leHBycywgc3RhdGUpLm1hcE9rKFxuICAgICAgKGxpc3QpID0+XG4gICAgICAgIG5ldyBtaXIuUG9zaXRpb25hbCh7XG4gICAgICAgICAgbG9jOiBwb3NpdGlvbmFsLmxvYyxcbiAgICAgICAgICBsaXN0LFxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBOYW1lZEFyZ3VtZW50cyhcbiAgICBuYW1lZDogQVNUdjIuTmFtZWRBcmd1bWVudHMsXG4gICAgc3RhdGU6IE5vcm1hbGl6YXRpb25TdGF0ZVxuICApOiBSZXN1bHQ8bWlyLk5hbWVkQXJndW1lbnRzPiB7XG4gICAgbGV0IHBhaXJzID0gbmFtZWQuZW50cmllcy5tYXAoKGFyZykgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gY29udmVydFBhdGhUb0NhbGxJZktleXdvcmQoYXJnLnZhbHVlKTtcblxuICAgICAgcmV0dXJuIFZJU0lUX0VYUFJTLnZpc2l0KHZhbHVlLCBzdGF0ZSkubWFwT2soXG4gICAgICAgICh2YWx1ZSkgPT5cbiAgICAgICAgICBuZXcgbWlyLk5hbWVkQXJndW1lbnQoe1xuICAgICAgICAgICAgbG9jOiBhcmcubG9jLFxuICAgICAgICAgICAga2V5OiBhcmcubmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBSZXN1bHRBcnJheShwYWlycylcbiAgICAgIC50b09wdGlvbmFsTGlzdCgpXG4gICAgICAubWFwT2soKHBhaXJzKSA9PiBuZXcgbWlyLk5hbWVkQXJndW1lbnRzKHsgbG9jOiBuYW1lZC5sb2MsIGVudHJpZXM6IHBhaXJzIH0pKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBhdGhUb0NhbGxJZktleXdvcmQocGF0aDogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBBU1R2Mi5FeHByZXNzaW9uTm9kZSB7XG4gIGlmIChwYXRoLnR5cGUgPT09ICdQYXRoJyAmJiBwYXRoLnJlZi50eXBlID09PSAnRnJlZScgJiYgcGF0aC5yZWYubmFtZSBpbiBLRVlXT1JEU19UWVBFUykge1xuICAgIHJldHVybiBuZXcgQVNUdjIuQ2FsbEV4cHJlc3Npb24oe1xuICAgICAgY2FsbGVlOiBwYXRoLFxuICAgICAgYXJnczogQVNUdjIuQXJncy5lbXB0eShwYXRoLmxvYyksXG4gICAgICBsb2M6IHBhdGgubG9jLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBjb25zdCBWSVNJVF9FWFBSUyA9IG5ldyBOb3JtYWxpemVFeHByZXNzaW9ucygpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==