UNPKG

@glimmer/syntax

Version:
381 lines (315 loc) 32.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContentSerializer = exports.ExprSerializer = exports.RefSerializer = void 0; var _slice = require("../../source/slice"); var RefSerializer = /*#__PURE__*/function () { function RefSerializer() {} var _proto = RefSerializer.prototype; _proto.arg = function arg(ref) { return { type: 'Arg', loc: ref.loc.serialize(), name: ref.name.serialize() }; }; _proto.free = function free(ref) { return { type: 'Free', loc: ref.loc.serialize(), resolution: ref.resolution.serialize(), name: ref.name }; }; _proto.local = function local(ref) { return { type: 'Local', loc: ref.loc.serialize(), name: ref.name }; }; _proto.self = function self(ref) { return { type: 'This', loc: ref.loc.serialize() }; }; return RefSerializer; }(); exports.RefSerializer = RefSerializer; var REF = new RefSerializer(); var ExprSerializer = /*#__PURE__*/function () { function ExprSerializer() {} var _proto2 = ExprSerializer.prototype; _proto2.literal = function literal(_literal) { return { type: 'Literal', loc: _literal.loc.serialize(), value: _literal.value }; }; _proto2.path = function path(_path) { return { type: 'Path', loc: _path.loc.serialize(), ref: visit.ref(_path.ref), tail: _path.tail.map(function (t) { return t.serialize(); }) }; }; _proto2.call = function call(_call) { return { type: 'Call', loc: _call.loc.serialize(), callee: visit.expr(_call.callee), args: ARGS.args(_call.args) }; }; _proto2.deprecatedCall = function deprecatedCall(call) { return { type: 'DeprecatedCall', loc: call.loc.serialize(), callee: REF.free(call.callee) }; }; _proto2.interpolate = function interpolate(_interpolate) { return { type: 'Interpolate', loc: _interpolate.loc.serialize(), parts: _interpolate.parts.map(function (p) { return visit.expr(p); }) }; }; return ExprSerializer; }(); exports.ExprSerializer = ExprSerializer; var EXPR = new ExprSerializer(); var ArgsSerializer = /*#__PURE__*/function () { function ArgsSerializer() {} var _proto3 = ArgsSerializer.prototype; _proto3.args = function args(_args) { return { loc: _args.loc.serialize(), positional: this.positional(_args.positional), named: this.named(_args.named) }; }; _proto3.positional = function positional(_positional) { return { loc: _positional.loc.serialize(), exprs: _positional.exprs.map(function (p) { return visit.expr(p); }) }; }; _proto3.named = function named(_named) { var _this = this; return { loc: _named.loc.serialize(), entries: _named.entries.map(function (e) { return _this.entry(e); }) }; }; _proto3.entry = function entry(_entry) { return [_entry.name.serialize(), visit.expr(_entry.value)]; }; return ArgsSerializer; }(); var ARGS = new ArgsSerializer(); var ContentSerializer = /*#__PURE__*/function () { function ContentSerializer() {} var _proto4 = ContentSerializer.prototype; _proto4.append = function append(node) { return { type: 'Append', loc: node.loc.serialize(), value: visit.expr(node.value), trusting: node.trusting }; }; _proto4.glimmerComment = function glimmerComment(node) { return { type: 'GlimmerComment', loc: node.loc.serialize(), text: node.text.serialize() }; }; _proto4.htmlComment = function htmlComment(node) { return { type: 'HtmlComment', loc: node.loc.serialize(), text: node.text.serialize() }; }; _proto4.htmlText = function htmlText(node) { return { type: 'HtmlText', loc: node.loc.serialize(), chars: node.chars }; }; _proto4.invokeBlock = function invokeBlock(node) { var args = ARGS.args(node.args); var callee = visit.expr(node.callee); return { type: 'InvokeBlock', loc: node.loc.serialize(), args: args, callee: callee, blocks: INTERNAL.namedBlocks(node.blocks) }; }; _proto4.invokeComponent = function invokeComponent(node) { return { type: 'InvokeComponent', loc: node.loc.serialize(), callee: visit.expr(node.callee), blocks: INTERNAL.namedBlocks(node.blocks), attrs: node.attrs.map(function (a) { return visit.attr(a); }), componentArgs: node.componentArgs.map(function (a) { return ATTRS.arg(a); }), modifiers: node.modifiers.map(function (m) { return ATTRS.modifier(m); }) }; }; _proto4.simpleElement = function simpleElement(node) { return { type: 'SimpleElement', loc: node.loc.serialize(), tag: node.tag.serialize(), body: node.body.map(function (b) { return visit.content(b); }), attrs: node.attrs.map(function (a) { return visit.attr(a); }), componentArgs: node.componentArgs.map(function (a) { return ATTRS.arg(a); }), modifiers: node.modifiers.map(function (m) { return ATTRS.modifier(m); }) }; }; return ContentSerializer; }(); exports.ContentSerializer = ContentSerializer; var CONTENT = new ContentSerializer(); var AttrBlockSerializer = /*#__PURE__*/function () { function AttrBlockSerializer() {} var _proto5 = AttrBlockSerializer.prototype; _proto5.modifier = function modifier(node) { return { loc: node.loc.serialize(), callee: visit.expr(node.callee), args: ARGS.args(node.args) }; }; _proto5.arg = function arg(node) { return this.anyAttr(node); }; _proto5.anyAttr = function anyAttr(node) { return { loc: node.loc.serialize(), name: node.name.serialize(), value: visit.expr(node.value), trusting: node.trusting }; }; return AttrBlockSerializer; }(); var ATTRS = new AttrBlockSerializer(); var InternalSerializer = /*#__PURE__*/function () { function InternalSerializer() {} var _proto6 = InternalSerializer.prototype; _proto6.block = function block(node) { return { loc: node.loc.serialize(), body: node.body.map(function (b) { return visit.content(b); }), table: node.scope.locals }; }; _proto6.namedBlock = function namedBlock(node) { return { name: node.name.serialize(), block: INTERNAL.block(node.block) }; }; _proto6.namedBlocks = function namedBlocks(node) { return { blocks: node.blocks.map(function (b) { return INTERNAL.namedBlock(b); }), loc: node.loc.serialize() }; }; return InternalSerializer; }(); var INTERNAL = new InternalSerializer(); var visit = { expr: function expr(_expr) { switch (_expr.type) { case 'Literal': return EXPR.literal(_expr); case 'Path': return EXPR.path(_expr); case 'Call': return EXPR.call(_expr); case 'DeprecatedCall': return EXPR.deprecatedCall(_expr); case 'Interpolate': return EXPR.interpolate(_expr); } }, attr: function attr(node) { if (node.type === 'SplatAttr') { return new _slice.SourceSlice({ loc: node.loc, chars: '...attributes' }).serialize(); } else { return ATTRS.anyAttr(node); } }, ref: function ref(_ref) { switch (_ref.type) { case 'Arg': return REF.arg(_ref); case 'Free': return REF.free(_ref); case 'Local': return REF.local(_ref); case 'This': return REF.self(_ref); } }, content: function content(node) { switch (node.type) { case 'AppendContent': return CONTENT.append(node); case 'GlimmerComment': return CONTENT.glimmerComment(node); case 'HtmlComment': return CONTENT.htmlComment(node); case 'HtmlText': return CONTENT.htmlText(node); case 'InvokeBlock': return CONTENT.invokeBlock(node); case 'InvokeComponent': return CONTENT.invokeComponent(node); case 'SimpleElement': return CONTENT.simpleElement(node); } } }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9zZXJpYWxpemUvc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFrQ0EsSUFBTSxhQUFOLEdBQUEsYUFBQSxZQUFBO0FBQUEsV0FBQSxhQUFBLEdBQUEsQ0FBQTs7QUFBQSxNQUFBLE1BQUEsR0FBQSxhQUFBLENBQUEsU0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxHQUFBLEdBQ0UsU0FBQSxHQUFBLENBQUEsR0FBQSxFQUEyQjtBQUN6QixXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBREMsS0FBQTtBQUVMLE1BQUEsR0FBRyxFQUFFLEdBQUcsQ0FBSCxHQUFBLENBRkEsU0FFQSxFQUZBO0FBR0wsTUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFILElBQUEsQ0FBQSxTQUFBO0FBSEQsS0FBUDtBQUZKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsSUFBQSxHQVNFLFNBQUEsSUFBQSxDQUFBLEdBQUEsRUFBZ0M7QUFDOUIsV0FBTztBQUNMLE1BQUEsSUFBSSxFQURDLE1BQUE7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUgsR0FBQSxDQUZBLFNBRUEsRUFGQTtBQUdMLE1BQUEsVUFBVSxFQUFFLEdBQUcsQ0FBSCxVQUFBLENBSFAsU0FHTyxFQUhQO0FBSUwsTUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBSkwsS0FBUDtBQVZKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsS0FBQSxHQWtCRSxTQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQWtDO0FBQ2hDLFdBQU87QUFDTCxNQUFBLElBQUksRUFEQyxPQUFBO0FBRUwsTUFBQSxHQUFHLEVBQUUsR0FBRyxDQUFILEdBQUEsQ0FGQSxTQUVBLEVBRkE7QUFHTCxNQUFBLElBQUksRUFBRSxHQUFHLENBQUM7QUFITCxLQUFQO0FBbkJKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsSUFB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QUFPLE9BQU8sQ0FBUCxhQUFBLENBQVAsSUFBTyxDQUFQO0FBZEo7QUFnQkQ7QUF0RFcsQ0FBZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXNlbnRBcnJheSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBTb3VyY2VTbGljZSB9IGZyb20gJy4uLy4uL3NvdXJjZS9zbGljZSc7XG5pbXBvcnQgKiBhcyBBU1R2MiBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHR5cGUge1xuICBTZXJpYWxpemVkQXBwZW5kQ29udGVudCxcbiAgU2VyaWFsaXplZEFyZ1JlZmVyZW5jZSxcbiAgU2VyaWFsaXplZEFyZ3MsXG4gIFNlcmlhbGl6ZWRBdHRyT3JBcmcsXG4gIFNlcmlhbGl6ZWRCbG9jayxcbiAgU2VyaWFsaXplZENhbGxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkQ29udGVudE5vZGUsXG4gIFNlcmlhbGl6ZWREZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRFbGVtZW50TW9kaWZpZXIsXG4gIFNlcmlhbGl6ZWRFeHByZXNzaW9uTm9kZSxcbiAgU2VyaWFsaXplZEZyZWVWYXJSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRHbGltbWVyQ29tbWVudCxcbiAgU2VyaWFsaXplZEh0bWxDb21tZW50LFxuICBTZXJpYWxpemVkSHRtbE9yU3BsYXRBdHRyLFxuICBTZXJpYWxpemVkSHRtbFRleHQsXG4gIFNlcmlhbGl6ZWRJbnRlcnBvbGF0ZUV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRJbnZva2VCbG9jayxcbiAgU2VyaWFsaXplZEludm9rZUNvbXBvbmVudCxcbiAgU2VyaWFsaXplZExpdGVyYWxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkTG9jYWxWYXJSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWROYW1lZCxcbiAgU2VyaWFsaXplZE5hbWVkQXJndW1lbnQsXG4gIFNlcmlhbGl6ZWROYW1lZEJsb2NrLFxuICBTZXJpYWxpemVkTmFtZWRCbG9ja3MsXG4gIFNlcmlhbGl6ZWRQYXRoRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZFBvc2l0aW9uYWwsXG4gIFNlcmlhbGl6ZWRTaW1wbGVFbGVtZW50LFxuICBTZXJpYWxpemVkVGhpc1JlZmVyZW5jZSxcbiAgU2VyaWFsaXplZFZhcmlhYmxlUmVmZXJlbmNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFJlZlNlcmlhbGl6ZXIge1xuICBhcmcocmVmOiBBU1R2Mi5BcmdSZWZlcmVuY2UpOiBTZXJpYWxpemVkQXJnUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0FyZycsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgICBuYW1lOiByZWYubmFtZS5zZXJpYWxpemUoKSxcbiAgICB9O1xuICB9XG5cbiAgZnJlZShyZWY6IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2UpOiBTZXJpYWxpemVkRnJlZVZhclJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdGcmVlJyxcbiAgICAgIGxvYzogcmVmLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHJlc29sdXRpb246IHJlZi5yZXNvbHV0aW9uLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGxvY2FsKHJlZjogQVNUdjIuTG9jYWxWYXJSZWZlcmVuY2UpOiBTZXJpYWxpemVkTG9jYWxWYXJSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnTG9jYWwnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHNlbGYocmVmOiBBU1R2Mi5UaGlzUmVmZXJlbmNlKTogU2VyaWFsaXplZFRoaXNSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGhpcycsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBSRUYgPSBuZXcgUmVmU2VyaWFsaXplcigpO1xuXG5leHBvcnQgY2xhc3MgRXhwclNlcmlhbGl6ZXIge1xuICBsaXRlcmFsKGxpdGVyYWw6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKTogU2VyaWFsaXplZExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0xpdGVyYWwnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiBsaXRlcmFsLnZhbHVlLFxuICAgIH07XG4gIH1cblxuICBwYXRoKHBhdGg6IEFTVHYyLlBhdGhFeHByZXNzaW9uKTogU2VyaWFsaXplZFBhdGhFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgbG9jOiBwYXRoLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHJlZjogdmlzaXQucmVmKHBhdGgucmVmKSxcbiAgICAgIHRhaWw6IHBhdGgudGFpbC5tYXAoKHQpID0+IHQuc2VyaWFsaXplKCkpLFxuICAgIH07XG4gIH1cblxuICBjYWxsKGNhbGw6IEFTVHYyLkNhbGxFeHByZXNzaW9uKTogU2VyaWFsaXplZENhbGxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0NhbGwnLFxuICAgICAgbG9jOiBjYWxsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogdmlzaXQuZXhwcihjYWxsLmNhbGxlZSksXG4gICAgICBhcmdzOiBBUkdTLmFyZ3MoY2FsbC5hcmdzKSxcbiAgICB9O1xuICB9XG5cbiAgZGVwcmVjYXRlZENhbGwoY2FsbDogQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKTogU2VyaWFsaXplZERlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdEZXByZWNhdGVkQ2FsbCcsXG4gICAgICBsb2M6IGNhbGwubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2FsbGVlOiBSRUYuZnJlZShjYWxsLmNhbGxlZSksXG4gICAgfTtcbiAgfVxuXG4gIGludGVycG9sYXRlKGludGVycG9sYXRlOiBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24pOiBTZXJpYWxpemVkSW50ZXJwb2xhdGVFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0ludGVycG9sYXRlJyxcbiAgICAgIGxvYzogaW50ZXJwb2xhdGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgcGFydHM6IGludGVycG9sYXRlLnBhcnRzLm1hcCgocCkgPT4gdmlzaXQuZXhwcihwKSkgYXMgUHJlc2VudEFycmF5PFNlcmlhbGl6ZWRFeHByZXNzaW9uTm9kZT4sXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBFWFBSID0gbmV3IEV4cHJTZXJpYWxpemVyKCk7XG5cbmNsYXNzIEFyZ3NTZXJpYWxpemVyIHtcbiAgYXJncyhhcmdzOiBBU1R2Mi5BcmdzKTogU2VyaWFsaXplZEFyZ3Mge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IGFyZ3MubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgcG9zaXRpb25hbDogdGhpcy5wb3NpdGlvbmFsKGFyZ3MucG9zaXRpb25hbCksXG4gICAgICBuYW1lZDogdGhpcy5uYW1lZChhcmdzLm5hbWVkKSxcbiAgICB9O1xuICB9XG5cbiAgcG9zaXRpb25hbChwb3NpdGlvbmFsOiBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzKTogU2VyaWFsaXplZFBvc2l0aW9uYWwge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IHBvc2l0aW9uYWwubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgZXhwcnM6IHBvc2l0aW9uYWwuZXhwcnMubWFwKChwKSA9PiB2aXNpdC5leHByKHApKSxcbiAgICB9O1xuICB9XG5cbiAgbmFtZWQobmFtZWQ6IEFTVHYyLk5hbWVkQXJndW1lbnRzKTogU2VyaWFsaXplZE5hbWVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBuYW1lZC5sb2Muc2VyaWFsaXplKCksXG4gICAgICBlbnRyaWVzOiBuYW1lZC5lbnRyaWVzLm1hcCgoZSkgPT4gdGhpcy5lbnRyeShlKSksXG4gICAgfTtcbiAgfVxuXG4gIGVudHJ5KGVudHJ5OiBBU1R2Mi5OYW1lZEFyZ3VtZW50KTogU2VyaWFsaXplZE5hbWVkQXJndW1lbnQge1xuICAgIHJldHVybiBbZW50cnkubmFtZS5zZXJpYWxpemUoKSwgdmlzaXQuZXhwcihlbnRyeS52YWx1ZSldO1xuICB9XG59XG5cbmNvbnN0IEFSR1MgPSBuZXcgQXJnc1NlcmlhbGl6ZXIoKTtcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZXJpYWxpemVyIHtcbiAgYXBwZW5kKG5vZGU6IEFTVHYyLkFwcGVuZENvbnRlbnQpOiBTZXJpYWxpemVkQXBwZW5kQ29udGVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdBcHBlbmQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiB2aXNpdC5leHByKG5vZGUudmFsdWUpLFxuICAgICAgdHJ1c3Rpbmc6IG5vZGUudHJ1c3RpbmcsXG4gICAgfTtcbiAgfVxuXG4gIGdsaW1tZXJDb21tZW50KG5vZGU6IEFTVHYyLkdsaW1tZXJDb21tZW50KTogU2VyaWFsaXplZEdsaW1tZXJDb21tZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0dsaW1tZXJDb21tZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB0ZXh0OiBub2RlLnRleHQuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGh0bWxDb21tZW50KG5vZGU6IEFTVHYyLkh0bWxDb21tZW50KTogU2VyaWFsaXplZEh0bWxDb21tZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0h0bWxDb21tZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB0ZXh0OiBub2RlLnRleHQuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGh0bWxUZXh0KG5vZGU6IEFTVHYyLkh0bWxUZXh0KTogU2VyaWFsaXplZEh0bWxUZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0h0bWxUZXh0JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjaGFyczogbm9kZS5jaGFycyxcbiAgICB9O1xuICB9XG5cbiAgaW52b2tlQmxvY2sobm9kZTogQVNUdjIuSW52b2tlQmxvY2spOiBTZXJpYWxpemVkSW52b2tlQmxvY2sge1xuICAgIGxldCBhcmdzID0gQVJHUy5hcmdzKG5vZGUuYXJncyk7XG4gICAgbGV0IGNhbGxlZSA9IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnZva2VCbG9jaycsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgYXJncyxcbiAgICAgIGNhbGxlZSxcbiAgICAgIGJsb2NrczogSU5URVJOQUwubmFtZWRCbG9ja3Mobm9kZS5ibG9ja3MpLFxuICAgIH07XG4gIH1cblxuICBpbnZva2VDb21wb25lbnQobm9kZTogQVNUdjIuSW52b2tlQ29tcG9uZW50KTogU2VyaWFsaXplZEludm9rZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnZva2VDb21wb25lbnQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogdmlzaXQuZXhwcihub2RlLmNhbGxlZSksXG4gICAgICBibG9ja3M6IElOVEVSTkFMLm5hbWVkQmxvY2tzKG5vZGUuYmxvY2tzKSxcbiAgICAgIGF0dHJzOiBub2RlLmF0dHJzLm1hcCgoYSkgPT4gdmlzaXQuYXR0cihhKSksXG4gICAgICBjb21wb25lbnRBcmdzOiBub2RlLmNvbXBvbmVudEFyZ3MubWFwKChhKSA9PiBBVFRSUy5hcmcoYSkpLFxuICAgICAgbW9kaWZpZXJzOiBub2RlLm1vZGlmaWVycy5tYXAoKG0pID0+IEFUVFJTLm1vZGlmaWVyKG0pKSxcbiAgICB9O1xuICB9XG5cbiAgc2ltcGxlRWxlbWVudChub2RlOiBBU1R2Mi5TaW1wbGVFbGVtZW50KTogU2VyaWFsaXplZFNpbXBsZUVsZW1lbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnU2ltcGxlRWxlbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGFnOiBub2RlLnRhZy5zZXJpYWxpemUoKSxcbiAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAoKGIpID0+IHZpc2l0LmNvbnRlbnQoYikpLFxuICAgICAgYXR0cnM6IG5vZGUuYXR0cnMubWFwKChhKSA9PiB2aXNpdC5hdHRyKGEpKSxcbiAgICAgIGNvbXBvbmVudEFyZ3M6IG5vZGUuY29tcG9uZW50QXJncy5tYXAoKGEpID0+IEFUVFJTLmFyZyhhKSksXG4gICAgICBtb2RpZmllcnM6IG5vZGUubW9kaWZpZXJzLm1hcCgobSkgPT4gQVRUUlMubW9kaWZpZXIobSkpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgQ09OVEVOVCA9IG5ldyBDb250ZW50U2VyaWFsaXplcigpO1xuXG5jbGFzcyBBdHRyQmxvY2tTZXJpYWxpemVyIHtcbiAgbW9kaWZpZXIobm9kZTogQVNUdjIuRWxlbWVudE1vZGlmaWVyKTogU2VyaWFsaXplZEVsZW1lbnRNb2RpZmllciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpLFxuICAgICAgYXJnczogQVJHUy5hcmdzKG5vZGUuYXJncyksXG4gICAgfTtcbiAgfVxuXG4gIGFyZyhub2RlOiBBU1R2Mi5Db21wb25lbnRBcmcpOiBTZXJpYWxpemVkQXR0ck9yQXJnIHtcbiAgICByZXR1cm4gdGhpcy5hbnlBdHRyKG5vZGUpO1xuICB9XG5cbiAgYW55QXR0cihub2RlOiBBU1R2Mi5Db21wb25lbnRBcmcgfCBBU1R2Mi5IdG1sQXR0cik6IFNlcmlhbGl6ZWRBdHRyT3JBcmcge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLnNlcmlhbGl6ZSgpLFxuICAgICAgdmFsdWU6IHZpc2l0LmV4cHIobm9kZS52YWx1ZSksXG4gICAgICB0cnVzdGluZzogbm9kZS50cnVzdGluZyxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IEFUVFJTID0gbmV3IEF0dHJCbG9ja1NlcmlhbGl6ZXIoKTtcblxuY2xhc3MgSW50ZXJuYWxTZXJpYWxpemVyIHtcbiAgYmxvY2sobm9kZTogQVNUdjIuQmxvY2spOiBTZXJpYWxpemVkQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCgoYikgPT4gdmlzaXQuY29udGVudChiKSksXG4gICAgICB0YWJsZTogbm9kZS5zY29wZS5sb2NhbHMsXG4gICAgfTtcbiAgfVxuXG4gIG5hbWVkQmxvY2sobm9kZTogQVNUdjIuTmFtZWRCbG9jayk6IFNlcmlhbGl6ZWROYW1lZEJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbm9kZS5uYW1lLnNlcmlhbGl6ZSgpLFxuICAgICAgYmxvY2s6IElOVEVSTkFMLmJsb2NrKG5vZGUuYmxvY2spLFxuICAgIH07XG4gIH1cblxuICBuYW1lZEJsb2Nrcyhub2RlOiBBU1R2Mi5OYW1lZEJsb2Nrcyk6IFNlcmlhbGl6ZWROYW1lZEJsb2NrcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2Nrczogbm9kZS5ibG9ja3MubWFwKChiKSA9PiBJTlRFUk5BTC5uYW1lZEJsb2NrKGIpKSxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBJTlRFUk5BTCA9IG5ldyBJbnRlcm5hbFNlcmlhbGl6ZXIoKTtcblxuY29uc3QgdmlzaXQgPSB7XG4gIGV4cHIoZXhwcjogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGUge1xuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICBjYXNlICdMaXRlcmFsJzpcbiAgICAgICAgcmV0dXJuIEVYUFIubGl0ZXJhbChleHByKTtcbiAgICAgIGNhc2UgJ1BhdGgnOlxuICAgICAgICByZXR1cm4gRVhQUi5wYXRoKGV4cHIpO1xuICAgICAgY2FzZSAnQ2FsbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmNhbGwoZXhwcik7XG4gICAgICBjYXNlICdEZXByZWNhdGVkQ2FsbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmRlcHJlY2F0ZWRDYWxsKGV4cHIpO1xuICAgICAgY2FzZSAnSW50ZXJwb2xhdGUnOlxuICAgICAgICByZXR1cm4gRVhQUi5pbnRlcnBvbGF0ZShleHByKTtcbiAgICB9XG4gIH0sXG5cbiAgYXR0cihub2RlOiBBU1R2Mi5IdG1sT3JTcGxhdEF0dHIpOiBTZXJpYWxpemVkSHRtbE9yU3BsYXRBdHRyIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAnU3BsYXRBdHRyJykge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VTbGljZSh7IGxvYzogbm9kZS5sb2MsIGNoYXJzOiAnLi4uYXR0cmlidXRlcycgfSkuc2VyaWFsaXplKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBBVFRSUy5hbnlBdHRyKG5vZGUpO1xuICAgIH1cbiAgfSxcblxuICByZWYocmVmOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSk6IFNlcmlhbGl6ZWRWYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgc3dpdGNoIChyZWYudHlwZSkge1xuICAgICAgY2FzZSAnQXJnJzpcbiAgICAgICAgcmV0dXJuIFJFRi5hcmcocmVmKTtcbiAgICAgIGNhc2UgJ0ZyZWUnOlxuICAgICAgICByZXR1cm4gUkVGLmZyZWUocmVmKTtcbiAgICAgIGNhc2UgJ0xvY2FsJzpcbiAgICAgICAgcmV0dXJuIFJFRi5sb2NhbChyZWYpO1xuICAgICAgY2FzZSAnVGhpcyc6XG4gICAgICAgIHJldHVybiBSRUYuc2VsZihyZWYpO1xuICAgIH1cbiAgfSxcblxuICBjb250ZW50KG5vZGU6IEFTVHYyLkNvbnRlbnROb2RlKTogU2VyaWFsaXplZENvbnRlbnROb2RlIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnQXBwZW5kQ29udGVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmFwcGVuZChub2RlKTtcbiAgICAgIGNhc2UgJ0dsaW1tZXJDb21tZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuZ2xpbW1lckNvbW1lbnQobm9kZSk7XG4gICAgICBjYXNlICdIdG1sQ29tbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmh0bWxDb21tZW50KG5vZGUpO1xuICAgICAgY2FzZSAnSHRtbFRleHQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5odG1sVGV4dChub2RlKTtcbiAgICAgIGNhc2UgJ0ludm9rZUJsb2NrJzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaW52b2tlQmxvY2sobm9kZSk7XG4gICAgICBjYXNlICdJbnZva2VDb21wb25lbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5pbnZva2VDb21wb25lbnQobm9kZSk7XG4gICAgICBjYXNlICdTaW1wbGVFbGVtZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuc2ltcGxlRWxlbWVudChub2RlKTtcbiAgICB9XG4gIH0sXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==