@glimmer/syntax
Version:
365 lines (307 loc) • 31 kB
JavaScript
import { SourceSlice } from '../../source/slice';
export 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;
}();
var REF = new RefSerializer();
export 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;
}();
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();
export 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;
}();
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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9zZXJpYWxpemUvc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQUEsV0FBQSxRQUFBLG9CQUFBO0FBa0NBLFdBQU0sYUFBTjtBQUFBOztBQUFBOztBQUFBLFNBQ0UsR0FERixHQUNFLGFBQUcsR0FBSCxFQUEyQjtBQUN6QixXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBREMsS0FBQTtBQUVMLE1BQUEsR0FBRyxFQUFFLEdBQUcsQ0FBSCxHQUFBLENBRkEsU0FFQSxFQUZBO0FBR0wsTUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFILElBQUEsQ0FBQSxTQUFBO0FBSEQsS0FBUDtBQUtELEdBUEg7O0FBQUEsU0FTRSxJQVRGLEdBU0UsY0FBSSxHQUFKLEVBQWdDO0FBQzlCLFdBQU87QUFDTCxNQUFBLElBQUksRUFEQyxNQUFBO0FBRUwsTUFBQSxHQUFHLEVBQUUsR0FBRyxDQUFILEdBQUEsQ0FGQSxTQUVBLEVBRkE7QUFHTCxNQUFBLFVBQVUsRUFBRSxHQUFHLENBQUgsVUFBQSxDQUhQLFNBR08sRUFIUDtBQUlMLE1BQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUpMLEtBQVA7QUFNRCxHQWhCSDs7QUFBQSxTQWtCRSxLQWxCRixHQWtCRSxlQUFLLEdBQUwsRUFBa0M7QUFDaEMsV0FBTztBQUNMLE1BQUEsSUFBSSxFQURDLE9BQUE7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUgsR0FBQSxDQUZBLFNBRUEsRUFGQTtBQUdMLE1BQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUhMLEtBQVA7QUFLRCxHQXhCSDs7QUFBQSxTQTBCRSxJQTFCRixHQTBCRSxjQUFJLEdBQUosRUFBNkI7QUFDM0IsV0FBTztBQUNMLE1BQUEsSUFBSSxFQURDLE1BQUE7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUgsR0FBQSxDQUFBLFNBQUE7QUFGQSxLQUFQO0FB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LFdBQUEsVUFBQTtBQUNFLGVBQU8sT0FBTyxDQUFQLFFBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxhQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsV0FBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGlCQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsZUFBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGVBQUE7QUFDRSxlQUFPLE9BQU8sQ0FBUCxhQUFBLENBQVAsSUFBTyxDQUFQO0FBZEo7QUFnQkQ7QUF0RFcsQ0FBZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXNlbnRBcnJheSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBTb3VyY2VTbGljZSB9IGZyb20gJy4uLy4uL3NvdXJjZS9zbGljZSc7XG5pbXBvcnQgKiBhcyBBU1R2MiBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHR5cGUge1xuICBTZXJpYWxpemVkQXBwZW5kQ29udGVudCxcbiAgU2VyaWFsaXplZEFyZ1JlZmVyZW5jZSxcbiAgU2VyaWFsaXplZEFyZ3MsXG4gIFNlcmlhbGl6ZWRBdHRyT3JBcmcsXG4gIFNlcmlhbGl6ZWRCbG9jayxcbiAgU2VyaWFsaXplZENhbGxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkQ29udGVudE5vZGUsXG4gIFNlcmlhbGl6ZWREZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRFbGVtZW50TW9kaWZpZXIsXG4gIFNlcmlhbGl6ZWRFeHByZXNzaW9uTm9kZSxcbiAgU2VyaWFsaXplZEZyZWVWYXJSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRHbGltbWVyQ29tbWVudCxcbiAgU2VyaWFsaXplZEh0bWxDb21tZW50LFxuICBTZXJpYWxpemVkSHRtbE9yU3BsYXRBdHRyLFxuICBTZXJpYWxpemVkSHRtbFRleHQsXG4gIFNlcmlhbGl6ZWRJbnRlcnBvbGF0ZUV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRJbnZva2VCbG9jayxcbiAgU2VyaWFsaXplZEludm9rZUNvbXBvbmVudCxcbiAgU2VyaWFsaXplZExpdGVyYWxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkTG9jYWxWYXJSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWROYW1lZCxcbiAgU2VyaWFsaXplZE5hbWVkQXJndW1lbnQsXG4gIFNlcmlhbGl6ZWROYW1lZEJsb2NrLFxuICBTZXJpYWxpemVkTmFtZWRCbG9ja3MsXG4gIFNlcmlhbGl6ZWRQYXRoRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZFBvc2l0aW9uYWwsXG4gIFNlcmlhbGl6ZWRTaW1wbGVFbGVtZW50LFxuICBTZXJpYWxpemVkVGhpc1JlZmVyZW5jZSxcbiAgU2VyaWFsaXplZFZhcmlhYmxlUmVmZXJlbmNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFJlZlNlcmlhbGl6ZXIge1xuICBhcmcocmVmOiBBU1R2Mi5BcmdSZWZlcmVuY2UpOiBTZXJpYWxpemVkQXJnUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0FyZycsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgICBuYW1lOiByZWYubmFtZS5zZXJpYWxpemUoKSxcbiAgICB9O1xuICB9XG5cbiAgZnJlZShyZWY6IEFTVHYyLkZyZWVWYXJSZWZlcmVuY2UpOiBTZXJpYWxpemVkRnJlZVZhclJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdGcmVlJyxcbiAgICAgIGxvYzogcmVmLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHJlc29sdXRpb246IHJlZi5yZXNvbHV0aW9uLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGxvY2FsKHJlZjogQVNUdjIuTG9jYWxWYXJSZWZlcmVuY2UpOiBTZXJpYWxpemVkTG9jYWxWYXJSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnTG9jYWwnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHNlbGYocmVmOiBBU1R2Mi5UaGlzUmVmZXJlbmNlKTogU2VyaWFsaXplZFRoaXNSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGhpcycsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBSRUYgPSBuZXcgUmVmU2VyaWFsaXplcigpO1xuXG5leHBvcnQgY2xhc3MgRXhwclNlcmlhbGl6ZXIge1xuICBsaXRlcmFsKGxpdGVyYWw6IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKTogU2VyaWFsaXplZExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0xpdGVyYWwnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiBsaXRlcmFsLnZhbHVlLFxuICAgIH07XG4gIH1cblxuICBwYXRoKHBhdGg6IEFTVHYyLlBhdGhFeHByZXNzaW9uKTogU2VyaWFsaXplZFBhdGhFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgbG9jOiBwYXRoLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHJlZjogdmlzaXQucmVmKHBhdGgucmVmKSxcbiAgICAgIHRhaWw6IHBhdGgudGFpbC5tYXAoKHQpID0+IHQuc2VyaWFsaXplKCkpLFxuICAgIH07XG4gIH1cblxuICBjYWxsKGNhbGw6IEFTVHYyLkNhbGxFeHByZXNzaW9uKTogU2VyaWFsaXplZENhbGxFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0NhbGwnLFxuICAgICAgbG9jOiBjYWxsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogdmlzaXQuZXhwcihjYWxsLmNhbGxlZSksXG4gICAgICBhcmdzOiBBUkdTLmFyZ3MoY2FsbC5hcmdzKSxcbiAgICB9O1xuICB9XG5cbiAgZGVwcmVjYXRlZENhbGwoY2FsbDogQVNUdjIuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKTogU2VyaWFsaXplZERlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdEZXByZWNhdGVkQ2FsbCcsXG4gICAgICBsb2M6IGNhbGwubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2FsbGVlOiBSRUYuZnJlZShjYWxsLmNhbGxlZSksXG4gICAgfTtcbiAgfVxuXG4gIGludGVycG9sYXRlKGludGVycG9sYXRlOiBBU1R2Mi5JbnRlcnBvbGF0ZUV4cHJlc3Npb24pOiBTZXJpYWxpemVkSW50ZXJwb2xhdGVFeHByZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0ludGVycG9sYXRlJyxcbiAgICAgIGxvYzogaW50ZXJwb2xhdGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgcGFydHM6IGludGVycG9sYXRlLnBhcnRzLm1hcCgocCkgPT4gdmlzaXQuZXhwcihwKSkgYXMgUHJlc2VudEFycmF5PFNlcmlhbGl6ZWRFeHByZXNzaW9uTm9kZT4sXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBFWFBSID0gbmV3IEV4cHJTZXJpYWxpemVyKCk7XG5cbmNsYXNzIEFyZ3NTZXJpYWxpemVyIHtcbiAgYXJncyhhcmdzOiBBU1R2Mi5BcmdzKTogU2VyaWFsaXplZEFyZ3Mge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IGFyZ3MubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgcG9zaXRpb25hbDogdGhpcy5wb3NpdGlvbmFsKGFyZ3MucG9zaXRpb25hbCksXG4gICAgICBuYW1lZDogdGhpcy5uYW1lZChhcmdzLm5hbWVkKSxcbiAgICB9O1xuICB9XG5cbiAgcG9zaXRpb25hbChwb3NpdGlvbmFsOiBBU1R2Mi5Qb3NpdGlvbmFsQXJndW1lbnRzKTogU2VyaWFsaXplZFBvc2l0aW9uYWwge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IHBvc2l0aW9uYWwubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgZXhwcnM6IHBvc2l0aW9uYWwuZXhwcnMubWFwKChwKSA9PiB2aXNpdC5leHByKHApKSxcbiAgICB9O1xuICB9XG5cbiAgbmFtZWQobmFtZWQ6IEFTVHYyLk5hbWVkQXJndW1lbnRzKTogU2VyaWFsaXplZE5hbWVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBuYW1lZC5sb2Muc2VyaWFsaXplKCksXG4gICAgICBlbnRyaWVzOiBuYW1lZC5lbnRyaWVzLm1hcCgoZSkgPT4gdGhpcy5lbnRyeShlKSksXG4gICAgfTtcbiAgfVxuXG4gIGVudHJ5KGVudHJ5OiBBU1R2Mi5OYW1lZEFyZ3VtZW50KTogU2VyaWFsaXplZE5hbWVkQXJndW1lbnQge1xuICAgIHJldHVybiBbZW50cnkubmFtZS5zZXJpYWxpemUoKSwgdmlzaXQuZXhwcihlbnRyeS52YWx1ZSldO1xuICB9XG59XG5cbmNvbnN0IEFSR1MgPSBuZXcgQXJnc1NlcmlhbGl6ZXIoKTtcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZXJpYWxpemVyIHtcbiAgYXBwZW5kKG5vZGU6IEFTVHYyLkFwcGVuZENvbnRlbnQpOiBTZXJpYWxpemVkQXBwZW5kQ29udGVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdBcHBlbmQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiB2aXNpdC5leHByKG5vZGUudmFsdWUpLFxuICAgICAgdHJ1c3Rpbmc6IG5vZGUudHJ1c3RpbmcsXG4gICAgfTtcbiAgfVxuXG4gIGdsaW1tZXJDb21tZW50KG5vZGU6IEFTVHYyLkdsaW1tZXJDb21tZW50KTogU2VyaWFsaXplZEdsaW1tZXJDb21tZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0dsaW1tZXJDb21tZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB0ZXh0OiBub2RlLnRleHQuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGh0bWxDb21tZW50KG5vZGU6IEFTVHYyLkh0bWxDb21tZW50KTogU2VyaWFsaXplZEh0bWxDb21tZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0h0bWxDb21tZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB0ZXh0OiBub2RlLnRleHQuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGh0bWxUZXh0KG5vZGU6IEFTVHYyLkh0bWxUZXh0KTogU2VyaWFsaXplZEh0bWxUZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0h0bWxUZXh0JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjaGFyczogbm9kZS5jaGFycyxcbiAgICB9O1xuICB9XG5cbiAgaW52b2tlQmxvY2sobm9kZTogQVNUdjIuSW52b2tlQmxvY2spOiBTZXJpYWxpemVkSW52b2tlQmxvY2sge1xuICAgIGxldCBhcmdzID0gQVJHUy5hcmdzKG5vZGUuYXJncyk7XG4gICAgbGV0IGNhbGxlZSA9IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnZva2VCbG9jaycsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgYXJncyxcbiAgICAgIGNhbGxlZSxcbiAgICAgIGJsb2NrczogSU5URVJOQUwubmFtZWRCbG9ja3Mobm9kZS5ibG9ja3MpLFxuICAgIH07XG4gIH1cblxuICBpbnZva2VDb21wb25lbnQobm9kZTogQVNUdjIuSW52b2tlQ29tcG9uZW50KTogU2VyaWFsaXplZEludm9rZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnZva2VDb21wb25lbnQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogdmlzaXQuZXhwcihub2RlLmNhbGxlZSksXG4gICAgICBibG9ja3M6IElOVEVSTkFMLm5hbWVkQmxvY2tzKG5vZGUuYmxvY2tzKSxcbiAgICAgIGF0dHJzOiBub2RlLmF0dHJzLm1hcCgoYSkgPT4gdmlzaXQuYXR0cihhKSksXG4gICAgICBjb21wb25lbnRBcmdzOiBub2RlLmNvbXBvbmVudEFyZ3MubWFwKChhKSA9PiBBVFRSUy5hcmcoYSkpLFxuICAgICAgbW9kaWZpZXJzOiBub2RlLm1vZGlmaWVycy5tYXAoKG0pID0+IEFUVFJTLm1vZGlmaWVyKG0pKSxcbiAgICB9O1xuICB9XG5cbiAgc2ltcGxlRWxlbWVudChub2RlOiBBU1R2Mi5TaW1wbGVFbGVtZW50KTogU2VyaWFsaXplZFNpbXBsZUVsZW1lbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnU2ltcGxlRWxlbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGFnOiBub2RlLnRhZy5zZXJpYWxpemUoKSxcbiAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAoKGIpID0+IHZpc2l0LmNvbnRlbnQoYikpLFxuICAgICAgYXR0cnM6IG5vZGUuYXR0cnMubWFwKChhKSA9PiB2aXNpdC5hdHRyKGEpKSxcbiAgICAgIGNvbXBvbmVudEFyZ3M6IG5vZGUuY29tcG9uZW50QXJncy5tYXAoKGEpID0+IEFUVFJTLmFyZyhhKSksXG4gICAgICBtb2RpZmllcnM6IG5vZGUubW9kaWZpZXJzLm1hcCgobSkgPT4gQVRUUlMubW9kaWZpZXIobSkpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgQ09OVEVOVCA9IG5ldyBDb250ZW50U2VyaWFsaXplcigpO1xuXG5jbGFzcyBBdHRyQmxvY2tTZXJpYWxpemVyIHtcbiAgbW9kaWZpZXIobm9kZTogQVNUdjIuRWxlbWVudE1vZGlmaWVyKTogU2VyaWFsaXplZEVsZW1lbnRNb2RpZmllciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpLFxuICAgICAgYXJnczogQVJHUy5hcmdzKG5vZGUuYXJncyksXG4gICAgfTtcbiAgfVxuXG4gIGFyZyhub2RlOiBBU1R2Mi5Db21wb25lbnRBcmcpOiBTZXJpYWxpemVkQXR0ck9yQXJnIHtcbiAgICByZXR1cm4gdGhpcy5hbnlBdHRyKG5vZGUpO1xuICB9XG5cbiAgYW55QXR0cihub2RlOiBBU1R2Mi5Db21wb25lbnRBcmcgfCBBU1R2Mi5IdG1sQXR0cik6IFNlcmlhbGl6ZWRBdHRyT3JBcmcge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLnNlcmlhbGl6ZSgpLFxuICAgICAgdmFsdWU6IHZpc2l0LmV4cHIobm9kZS52YWx1ZSksXG4gICAgICB0cnVzdGluZzogbm9kZS50cnVzdGluZyxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IEFUVFJTID0gbmV3IEF0dHJCbG9ja1NlcmlhbGl6ZXIoKTtcblxuY2xhc3MgSW50ZXJuYWxTZXJpYWxpemVyIHtcbiAgYmxvY2sobm9kZTogQVNUdjIuQmxvY2spOiBTZXJpYWxpemVkQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCgoYikgPT4gdmlzaXQuY29udGVudChiKSksXG4gICAgICB0YWJsZTogbm9kZS5zY29wZS5sb2NhbHMsXG4gICAgfTtcbiAgfVxuXG4gIG5hbWVkQmxvY2sobm9kZTogQVNUdjIuTmFtZWRCbG9jayk6IFNlcmlhbGl6ZWROYW1lZEJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbm9kZS5uYW1lLnNlcmlhbGl6ZSgpLFxuICAgICAgYmxvY2s6IElOVEVSTkFMLmJsb2NrKG5vZGUuYmxvY2spLFxuICAgIH07XG4gIH1cblxuICBuYW1lZEJsb2Nrcyhub2RlOiBBU1R2Mi5OYW1lZEJsb2Nrcyk6IFNlcmlhbGl6ZWROYW1lZEJsb2NrcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2Nrczogbm9kZS5ibG9ja3MubWFwKChiKSA9PiBJTlRFUk5BTC5uYW1lZEJsb2NrKGIpKSxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBJTlRFUk5BTCA9IG5ldyBJbnRlcm5hbFNlcmlhbGl6ZXIoKTtcblxuY29uc3QgdmlzaXQgPSB7XG4gIGV4cHIoZXhwcjogQVNUdjIuRXhwcmVzc2lvbk5vZGUpOiBTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGUge1xuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICBjYXNlICdMaXRlcmFsJzpcbiAgICAgICAgcmV0dXJuIEVYUFIubGl0ZXJhbChleHByKTtcbiAgICAgIGNhc2UgJ1BhdGgnOlxuICAgICAgICByZXR1cm4gRVhQUi5wYXRoKGV4cHIpO1xuICAgICAgY2FzZSAnQ2FsbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmNhbGwoZXhwcik7XG4gICAgICBjYXNlICdEZXByZWNhdGVkQ2FsbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmRlcHJlY2F0ZWRDYWxsKGV4cHIpO1xuICAgICAgY2FzZSAnSW50ZXJwb2xhdGUnOlxuICAgICAgICByZXR1cm4gRVhQUi5pbnRlcnBvbGF0ZShleHByKTtcbiAgICB9XG4gIH0sXG5cbiAgYXR0cihub2RlOiBBU1R2Mi5IdG1sT3JTcGxhdEF0dHIpOiBTZXJpYWxpemVkSHRtbE9yU3BsYXRBdHRyIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAnU3BsYXRBdHRyJykge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VTbGljZSh7IGxvYzogbm9kZS5sb2MsIGNoYXJzOiAnLi4uYXR0cmlidXRlcycgfSkuc2VyaWFsaXplKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBBVFRSUy5hbnlBdHRyKG5vZGUpO1xuICAgIH1cbiAgfSxcblxuICByZWYocmVmOiBBU1R2Mi5WYXJpYWJsZVJlZmVyZW5jZSk6IFNlcmlhbGl6ZWRWYXJpYWJsZVJlZmVyZW5jZSB7XG4gICAgc3dpdGNoIChyZWYudHlwZSkge1xuICAgICAgY2FzZSAnQXJnJzpcbiAgICAgICAgcmV0dXJuIFJFRi5hcmcocmVmKTtcbiAgICAgIGNhc2UgJ0ZyZWUnOlxuICAgICAgICByZXR1cm4gUkVGLmZyZWUocmVmKTtcbiAgICAgIGNhc2UgJ0xvY2FsJzpcbiAgICAgICAgcmV0dXJuIFJFRi5sb2NhbChyZWYpO1xuICAgICAgY2FzZSAnVGhpcyc6XG4gICAgICAgIHJldHVybiBSRUYuc2VsZihyZWYpO1xuICAgIH1cbiAgfSxcblxuICBjb250ZW50KG5vZGU6IEFTVHYyLkNvbnRlbnROb2RlKTogU2VyaWFsaXplZENvbnRlbnROb2RlIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnQXBwZW5kQ29udGVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmFwcGVuZChub2RlKTtcbiAgICAgIGNhc2UgJ0dsaW1tZXJDb21tZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuZ2xpbW1lckNvbW1lbnQobm9kZSk7XG4gICAgICBjYXNlICdIdG1sQ29tbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmh0bWxDb21tZW50KG5vZGUpO1xuICAgICAgY2FzZSAnSHRtbFRleHQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5odG1sVGV4dChub2RlKTtcbiAgICAgIGNhc2UgJ0ludm9rZUJsb2NrJzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaW52b2tlQmxvY2sobm9kZSk7XG4gICAgICBjYXNlICdJbnZva2VDb21wb25lbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5pbnZva2VDb21wb25lbnQobm9kZSk7XG4gICAgICBjYXNlICdTaW1wbGVFbGVtZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuc2ltcGxlRWxlbWVudChub2RlKTtcbiAgICB9XG4gIH0sXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==