UNPKG

@glimmer/syntax

Version:
327 lines (270 loc) 28.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContentSerializer = exports.ExprSerializer = exports.RefSerializer = void 0; var _slice = require("../../source/slice"); class RefSerializer { arg(ref) { return { type: 'Arg', loc: ref.loc.serialize(), name: ref.name.serialize() }; } free(ref) { return { type: 'Free', loc: ref.loc.serialize(), resolution: ref.resolution.serialize(), name: ref.name }; } local(ref) { return { type: 'Local', loc: ref.loc.serialize(), name: ref.name }; } self(ref) { return { type: 'This', loc: ref.loc.serialize() }; } } exports.RefSerializer = RefSerializer; const REF = new RefSerializer(); class ExprSerializer { literal(literal) { return { type: 'Literal', loc: literal.loc.serialize(), value: literal.value }; } path(path) { return { type: 'Path', loc: path.loc.serialize(), ref: visit.ref(path.ref), tail: path.tail.map(t => t.serialize()) }; } call(call) { return { type: 'Call', loc: call.loc.serialize(), callee: visit.expr(call.callee), args: ARGS.args(call.args) }; } deprecatedCall(call) { return { type: 'DeprecatedCall', loc: call.loc.serialize(), callee: REF.free(call.callee) }; } interpolate(interpolate) { return { type: 'Interpolate', loc: interpolate.loc.serialize(), parts: interpolate.parts.map(p => visit.expr(p)) }; } } exports.ExprSerializer = ExprSerializer; const EXPR = new ExprSerializer(); class ArgsSerializer { args(args) { return { loc: args.loc.serialize(), positional: this.positional(args.positional), named: this.named(args.named) }; } positional(positional) { return { loc: positional.loc.serialize(), exprs: positional.exprs.map(p => visit.expr(p)) }; } named(named) { return { loc: named.loc.serialize(), entries: named.entries.map(e => this.entry(e)) }; } entry(entry) { return [entry.name.serialize(), visit.expr(entry.value)]; } } const ARGS = new ArgsSerializer(); class ContentSerializer { append(node) { return { type: 'Append', loc: node.loc.serialize(), value: visit.expr(node.value), trusting: node.trusting }; } glimmerComment(node) { return { type: 'GlimmerComment', loc: node.loc.serialize(), text: node.text.serialize() }; } htmlComment(node) { return { type: 'HtmlComment', loc: node.loc.serialize(), text: node.text.serialize() }; } htmlText(node) { return { type: 'HtmlText', loc: node.loc.serialize(), chars: node.chars }; } invokeBlock(node) { let args = ARGS.args(node.args); let callee = visit.expr(node.callee); return { type: 'InvokeBlock', loc: node.loc.serialize(), args, callee, blocks: INTERNAL.namedBlocks(node.blocks) }; } invokeComponent(node) { return { type: 'InvokeComponent', loc: node.loc.serialize(), callee: visit.expr(node.callee), blocks: INTERNAL.namedBlocks(node.blocks), attrs: node.attrs.map(a => visit.attr(a)), componentArgs: node.componentArgs.map(a => ATTRS.arg(a)), modifiers: node.modifiers.map(m => ATTRS.modifier(m)) }; } simpleElement(node) { return { type: 'SimpleElement', loc: node.loc.serialize(), tag: node.tag.serialize(), body: node.body.map(b => visit.content(b)), attrs: node.attrs.map(a => visit.attr(a)), componentArgs: node.componentArgs.map(a => ATTRS.arg(a)), modifiers: node.modifiers.map(m => ATTRS.modifier(m)) }; } } exports.ContentSerializer = ContentSerializer; const CONTENT = new ContentSerializer(); class AttrBlockSerializer { modifier(node) { return { loc: node.loc.serialize(), callee: visit.expr(node.callee), args: ARGS.args(node.args) }; } arg(node) { return this.anyAttr(node); } anyAttr(node) { return { loc: node.loc.serialize(), name: node.name.serialize(), value: visit.expr(node.value), trusting: node.trusting }; } } const ATTRS = new AttrBlockSerializer(); class InternalSerializer { block(node) { return { loc: node.loc.serialize(), body: node.body.map(b => visit.content(b)), table: node.scope.locals }; } namedBlock(node) { return { name: node.name.serialize(), block: INTERNAL.block(node.block) }; } namedBlocks(node) { return { blocks: node.blocks.map(b => INTERNAL.namedBlock(b)), loc: node.loc.serialize() }; } } const INTERNAL = new InternalSerializer(); const visit = { 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(node) { if (node.type === 'SplatAttr') { return new _slice.SourceSlice({ loc: node.loc, chars: '...attributes' }).serialize(); } else { return ATTRS.anyAttr(node); } }, 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(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9zZXJpYWxpemUvc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFrQ00sTUFBQSxhQUFBLENBQW9CO0FBQ3hCLEVBQUEsR0FBRyxDQUFBLEdBQUEsRUFBd0I7QUFDekIsV0FBTztBQUNMLE1BQUEsSUFBSSxFQURDLEtBQUE7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUgsR0FBQSxDQUZBLFNBRUEsRUFGQTtBQUdMLE1BQUEsSUFBSSxFQUFFLEdBQUcsQ0FBSCxJQUFBLENBQUEsU0FBQTtBQUhELEtBQVA7QUFLRDs7QUFFRCxFQUFBLElBQUksQ0FBQSxHQUFBLEVBQTRCO0FBQzlCLFdBQU87QUFDTCxNQUFBLElBQUksRUFEQyxNQUFBO0FBRUwsTUFBQSxHQUFHLEVBQUUsR0FBRyxDQUFILEdBQUEsQ0FGQSxTQUVBLEVBRkE7QUFHTCxNQUFBLFVBQVUsRUFBRSxHQUFHLENBQUgsVUFBQSxDQUhQLFNBR08sRUFIUDtBQUlMLE1BQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUpMLEtBQVA7QUFNRDs7QUFFRCxFQUFBLEtBQUssQ0FBQSxHQUFBLEVBQTZCO0FBQ2hDLFdBQU87QUFDTCxNQUFBLElBQUksRUFEQyxPQUFBO0FBRUwsTUFBQSxHQUFHLEVBQUUsR0FBRyxDQUFILEdBQUEsQ0FGQSxTQUVBLEVBRkE7QUFHTCxNQUFBLElBQUksRUFBRSxHQUFHLENBQUM7QUFITCxLQUFQO0FBS0Q7O0FBRUQsRUFBQSxJQUFJLENBQUEsR0FBQSxFQUF5QjtBQUMzQixXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBREMsTUFBQTtBQUVMLE1BQUEsR0FBRyxFQUFFLEdBQUcsQ0FBSCxHQUFBLENBQUEsU0FBQTtBQUZBLEtBQVA7QUFJRDs7QUEvQnVCOzs7QUFrQzFCLE1BQU0sR0FBRyxHQUFHLElBQVosYUFBWSxFQUFaOztBQUVNLE1BQUEs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TyxDQUFQOztBQUNGLFdBQUEsTUFBQTtBQUNFLGVBQU8sR0FBRyxDQUFILElBQUEsQ0FBUCxHQUFPLENBQVA7O0FBQ0YsV0FBQSxPQUFBO0FBQ0UsZUFBTyxHQUFHLENBQUgsS0FBQSxDQUFQLEdBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxlQUFPLEdBQUcsQ0FBSCxJQUFBLENBQVAsR0FBTyxDQUFQO0FBUko7QUF6QlUsR0FBQTs7QUFxQ1osRUFBQSxPQUFPLENBQUEsSUFBQSxFQUF3QjtBQUM3QixZQUFRLElBQUksQ0FBWixJQUFBO0FBQ0UsV0FBQSxlQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsTUFBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGdCQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsY0FBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGFBQUE7QUFDRSxlQUFPLE9BQU8sQ0FBUCxXQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsVUFBQTtBQUNFLGVBQU8sT0FBTyxDQUFQLFFBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxhQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsV0FBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGlCQUFBO0FBQ0UsZUFBTyxPQUFPLENBQVAsZUFBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixXQUFBLGVBQUE7QUFDRSxlQUFPLE9BQU8sQ0FBUCxhQUFBLENBQVAsSUFBTyxDQUFQO0FBZEo7QUFnQkQ7O0FBdERXLENBQWQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmVzZW50QXJyYXkgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgU291cmNlU2xpY2UgfSBmcm9tICcuLi8uLi9zb3VyY2Uvc2xpY2UnO1xuaW1wb3J0ICogYXMgQVNUdjIgZnJvbSAnLi4vYXBpJztcbmltcG9ydCB0eXBlIHtcbiAgU2VyaWFsaXplZEFwcGVuZENvbnRlbnQsXG4gIFNlcmlhbGl6ZWRBcmdSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRBcmdzLFxuICBTZXJpYWxpemVkQXR0ck9yQXJnLFxuICBTZXJpYWxpemVkQmxvY2ssXG4gIFNlcmlhbGl6ZWRDYWxsRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZENvbnRlbnROb2RlLFxuICBTZXJpYWxpemVkRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkRWxlbWVudE1vZGlmaWVyLFxuICBTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGUsXG4gIFNlcmlhbGl6ZWRGcmVlVmFyUmVmZXJlbmNlLFxuICBTZXJpYWxpemVkR2xpbW1lckNvbW1lbnQsXG4gIFNlcmlhbGl6ZWRIdG1sQ29tbWVudCxcbiAgU2VyaWFsaXplZEh0bWxPclNwbGF0QXR0cixcbiAgU2VyaWFsaXplZEh0bWxUZXh0LFxuICBTZXJpYWxpemVkSW50ZXJwb2xhdGVFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkSW52b2tlQmxvY2ssXG4gIFNlcmlhbGl6ZWRJbnZva2VDb21wb25lbnQsXG4gIFNlcmlhbGl6ZWRMaXRlcmFsRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZExvY2FsVmFyUmVmZXJlbmNlLFxuICBTZXJpYWxpemVkTmFtZWQsXG4gIFNlcmlhbGl6ZWROYW1lZEFyZ3VtZW50LFxuICBTZXJpYWxpemVkTmFtZWRCbG9jayxcbiAgU2VyaWFsaXplZE5hbWVkQmxvY2tzLFxuICBTZXJpYWxpemVkUGF0aEV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRQb3NpdGlvbmFsLFxuICBTZXJpYWxpemVkU2ltcGxlRWxlbWVudCxcbiAgU2VyaWFsaXplZFRoaXNSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRWYXJpYWJsZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZWZTZXJpYWxpemVyIHtcbiAgYXJnKHJlZjogQVNUdjIuQXJnUmVmZXJlbmNlKTogU2VyaWFsaXplZEFyZ1JlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdBcmcnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGZyZWUocmVmOiBBU1R2Mi5GcmVlVmFyUmVmZXJlbmNlKTogU2VyaWFsaXplZEZyZWVWYXJSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnRnJlZScsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgICByZXNvbHV0aW9uOiByZWYucmVzb2x1dGlvbi5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgIH07XG4gIH1cblxuICBsb2NhbChyZWY6IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKTogU2VyaWFsaXplZExvY2FsVmFyUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0xvY2FsJyxcbiAgICAgIGxvYzogcmVmLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgIH07XG4gIH1cblxuICBzZWxmKHJlZjogQVNUdjIuVGhpc1JlZmVyZW5jZSk6IFNlcmlhbGl6ZWRUaGlzUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RoaXMnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgUkVGID0gbmV3IFJlZlNlcmlhbGl6ZXIoKTtcblxuZXhwb3J0IGNsYXNzIEV4cHJTZXJpYWxpemVyIHtcbiAgbGl0ZXJhbChsaXRlcmFsOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdMaXRlcmFsJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2Muc2VyaWFsaXplKCksXG4gICAgICB2YWx1ZTogbGl0ZXJhbC52YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgcGF0aChwYXRoOiBBU1R2Mi5QYXRoRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRQYXRoRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdQYXRoJyxcbiAgICAgIGxvYzogcGF0aC5sb2Muc2VyaWFsaXplKCksXG4gICAgICByZWY6IHZpc2l0LnJlZihwYXRoLnJlZiksXG4gICAgICB0YWlsOiBwYXRoLnRhaWwubWFwKCh0KSA9PiB0LnNlcmlhbGl6ZSgpKSxcbiAgICB9O1xuICB9XG5cbiAgY2FsbChjYWxsOiBBU1R2Mi5DYWxsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRDYWxsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdDYWxsJyxcbiAgICAgIGxvYzogY2FsbC5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIoY2FsbC5jYWxsZWUpLFxuICAgICAgYXJnczogQVJHUy5hcmdzKGNhbGwuYXJncyksXG4gICAgfTtcbiAgfVxuXG4gIGRlcHJlY2F0ZWRDYWxsKGNhbGw6IEFTVHYyLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWREZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnRGVwcmVjYXRlZENhbGwnLFxuICAgICAgbG9jOiBjYWxsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogUkVGLmZyZWUoY2FsbC5jYWxsZWUpLFxuICAgIH07XG4gIH1cblxuICBpbnRlcnBvbGF0ZShpbnRlcnBvbGF0ZTogQVNUdjIuSW50ZXJwb2xhdGVFeHByZXNzaW9uKTogU2VyaWFsaXplZEludGVycG9sYXRlRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnRlcnBvbGF0ZScsXG4gICAgICBsb2M6IGludGVycG9sYXRlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHBhcnRzOiBpbnRlcnBvbGF0ZS5wYXJ0cy5tYXAoKHApID0+IHZpc2l0LmV4cHIocCkpIGFzIFByZXNlbnRBcnJheTxTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGU+LFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgRVhQUiA9IG5ldyBFeHByU2VyaWFsaXplcigpO1xuXG5jbGFzcyBBcmdzU2VyaWFsaXplciB7XG4gIGFyZ3MoYXJnczogQVNUdjIuQXJncyk6IFNlcmlhbGl6ZWRBcmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBhcmdzLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHBvc2l0aW9uYWw6IHRoaXMucG9zaXRpb25hbChhcmdzLnBvc2l0aW9uYWwpLFxuICAgICAgbmFtZWQ6IHRoaXMubmFtZWQoYXJncy5uYW1lZCksXG4gICAgfTtcbiAgfVxuXG4gIHBvc2l0aW9uYWwocG9zaXRpb25hbDogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyk6IFNlcmlhbGl6ZWRQb3NpdGlvbmFsIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBwb3NpdGlvbmFsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGV4cHJzOiBwb3NpdGlvbmFsLmV4cHJzLm1hcCgocCkgPT4gdmlzaXQuZXhwcihwKSksXG4gICAgfTtcbiAgfVxuXG4gIG5hbWVkKG5hbWVkOiBBU1R2Mi5OYW1lZEFyZ3VtZW50cyk6IFNlcmlhbGl6ZWROYW1lZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYzogbmFtZWQubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgZW50cmllczogbmFtZWQuZW50cmllcy5tYXAoKGUpID0+IHRoaXMuZW50cnkoZSkpLFxuICAgIH07XG4gIH1cblxuICBlbnRyeShlbnRyeTogQVNUdjIuTmFtZWRBcmd1bWVudCk6IFNlcmlhbGl6ZWROYW1lZEFyZ3VtZW50IHtcbiAgICByZXR1cm4gW2VudHJ5Lm5hbWUuc2VyaWFsaXplKCksIHZpc2l0LmV4cHIoZW50cnkudmFsdWUpXTtcbiAgfVxufVxuXG5jb25zdCBBUkdTID0gbmV3IEFyZ3NTZXJpYWxpemVyKCk7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50U2VyaWFsaXplciB7XG4gIGFwcGVuZChub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50KTogU2VyaWFsaXplZEFwcGVuZENvbnRlbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnQXBwZW5kJyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB2YWx1ZTogdmlzaXQuZXhwcihub2RlLnZhbHVlKSxcbiAgICAgIHRydXN0aW5nOiBub2RlLnRydXN0aW5nLFxuICAgIH07XG4gIH1cblxuICBnbGltbWVyQ29tbWVudChub2RlOiBBU1R2Mi5HbGltbWVyQ29tbWVudCk6IFNlcmlhbGl6ZWRHbGltbWVyQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdHbGltbWVyQ29tbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGV4dDogbm9kZS50ZXh0LnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cblxuICBodG1sQ29tbWVudChub2RlOiBBU1R2Mi5IdG1sQ29tbWVudCk6IFNlcmlhbGl6ZWRIdG1sQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdIdG1sQ29tbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGV4dDogbm9kZS50ZXh0LnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cblxuICBodG1sVGV4dChub2RlOiBBU1R2Mi5IdG1sVGV4dCk6IFNlcmlhbGl6ZWRIdG1sVGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdIdG1sVGV4dCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2hhcnM6IG5vZGUuY2hhcnMsXG4gICAgfTtcbiAgfVxuXG4gIGludm9rZUJsb2NrKG5vZGU6IEFTVHYyLkludm9rZUJsb2NrKTogU2VyaWFsaXplZEludm9rZUJsb2NrIHtcbiAgICBsZXQgYXJncyA9IEFSR1MuYXJncyhub2RlLmFyZ3MpO1xuICAgIGxldCBjYWxsZWUgPSB2aXNpdC5leHByKG5vZGUuY2FsbGVlKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnSW52b2tlQmxvY2snLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGFyZ3MsXG4gICAgICBjYWxsZWUsXG4gICAgICBibG9ja3M6IElOVEVSTkFMLm5hbWVkQmxvY2tzKG5vZGUuYmxvY2tzKSxcbiAgICB9O1xuICB9XG5cbiAgaW52b2tlQ29tcG9uZW50KG5vZGU6IEFTVHYyLkludm9rZUNvbXBvbmVudCk6IFNlcmlhbGl6ZWRJbnZva2VDb21wb25lbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnSW52b2tlQ29tcG9uZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpLFxuICAgICAgYmxvY2tzOiBJTlRFUk5BTC5uYW1lZEJsb2Nrcyhub2RlLmJsb2NrcyksXG4gICAgICBhdHRyczogbm9kZS5hdHRycy5tYXAoKGEpID0+IHZpc2l0LmF0dHIoYSkpLFxuICAgICAgY29tcG9uZW50QXJnczogbm9kZS5jb21wb25lbnRBcmdzLm1hcCgoYSkgPT4gQVRUUlMuYXJnKGEpKSxcbiAgICAgIG1vZGlmaWVyczogbm9kZS5tb2RpZmllcnMubWFwKChtKSA9PiBBVFRSUy5tb2RpZmllcihtKSksXG4gICAgfTtcbiAgfVxuXG4gIHNpbXBsZUVsZW1lbnQobm9kZTogQVNUdjIuU2ltcGxlRWxlbWVudCk6IFNlcmlhbGl6ZWRTaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1NpbXBsZUVsZW1lbnQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHRhZzogbm9kZS50YWcuc2VyaWFsaXplKCksXG4gICAgICBib2R5OiBub2RlLmJvZHkubWFwKChiKSA9PiB2aXNpdC5jb250ZW50KGIpKSxcbiAgICAgIGF0dHJzOiBub2RlLmF0dHJzLm1hcCgoYSkgPT4gdmlzaXQuYXR0cihhKSksXG4gICAgICBjb21wb25lbnRBcmdzOiBub2RlLmNvbXBvbmVudEFyZ3MubWFwKChhKSA9PiBBVFRSUy5hcmcoYSkpLFxuICAgICAgbW9kaWZpZXJzOiBub2RlLm1vZGlmaWVycy5tYXAoKG0pID0+IEFUVFJTLm1vZGlmaWVyKG0pKSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IENPTlRFTlQgPSBuZXcgQ29udGVudFNlcmlhbGl6ZXIoKTtcblxuY2xhc3MgQXR0ckJsb2NrU2VyaWFsaXplciB7XG4gIG1vZGlmaWVyKG5vZGU6IEFTVHYyLkVsZW1lbnRNb2RpZmllcik6IFNlcmlhbGl6ZWRFbGVtZW50TW9kaWZpZXIge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2FsbGVlOiB2aXNpdC5leHByKG5vZGUuY2FsbGVlKSxcbiAgICAgIGFyZ3M6IEFSR1MuYXJncyhub2RlLmFyZ3MpLFxuICAgIH07XG4gIH1cblxuICBhcmcobm9kZTogQVNUdjIuQ29tcG9uZW50QXJnKTogU2VyaWFsaXplZEF0dHJPckFyZyB7XG4gICAgcmV0dXJuIHRoaXMuYW55QXR0cihub2RlKTtcbiAgfVxuXG4gIGFueUF0dHIobm9kZTogQVNUdjIuQ29tcG9uZW50QXJnIHwgQVNUdjIuSHRtbEF0dHIpOiBTZXJpYWxpemVkQXR0ck9yQXJnIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IG5vZGUubmFtZS5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiB2aXNpdC5leHByKG5vZGUudmFsdWUpLFxuICAgICAgdHJ1c3Rpbmc6IG5vZGUudHJ1c3RpbmcsXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBBVFRSUyA9IG5ldyBBdHRyQmxvY2tTZXJpYWxpemVyKCk7XG5cbmNsYXNzIEludGVybmFsU2VyaWFsaXplciB7XG4gIGJsb2NrKG5vZGU6IEFTVHYyLkJsb2NrKTogU2VyaWFsaXplZEJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAoKGIpID0+IHZpc2l0LmNvbnRlbnQoYikpLFxuICAgICAgdGFibGU6IG5vZGUuc2NvcGUubG9jYWxzLFxuICAgIH07XG4gIH1cblxuICBuYW1lZEJsb2NrKG5vZGU6IEFTVHYyLk5hbWVkQmxvY2spOiBTZXJpYWxpemVkTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5vZGUubmFtZS5zZXJpYWxpemUoKSxcbiAgICAgIGJsb2NrOiBJTlRFUk5BTC5ibG9jayhub2RlLmJsb2NrKSxcbiAgICB9O1xuICB9XG5cbiAgbmFtZWRCbG9ja3Mobm9kZTogQVNUdjIuTmFtZWRCbG9ja3MpOiBTZXJpYWxpemVkTmFtZWRCbG9ja3Mge1xuICAgIHJldHVybiB7XG4gICAgICBibG9ja3M6IG5vZGUuYmxvY2tzLm1hcCgoYikgPT4gSU5URVJOQUwubmFtZWRCbG9jayhiKSksXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgSU5URVJOQUwgPSBuZXcgSW50ZXJuYWxTZXJpYWxpemVyKCk7XG5cbmNvbnN0IHZpc2l0ID0ge1xuICBleHByKGV4cHI6IEFTVHYyLkV4cHJlc3Npb25Ob2RlKTogU2VyaWFsaXplZEV4cHJlc3Npb25Ob2RlIHtcbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmxpdGVyYWwoZXhwcik7XG4gICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgcmV0dXJuIEVYUFIucGF0aChleHByKTtcbiAgICAgIGNhc2UgJ0NhbGwnOlxuICAgICAgICByZXR1cm4gRVhQUi5jYWxsKGV4cHIpO1xuICAgICAgY2FzZSAnRGVwcmVjYXRlZENhbGwnOlxuICAgICAgICByZXR1cm4gRVhQUi5kZXByZWNhdGVkQ2FsbChleHByKTtcbiAgICAgIGNhc2UgJ0ludGVycG9sYXRlJzpcbiAgICAgICAgcmV0dXJuIEVYUFIuaW50ZXJwb2xhdGUoZXhwcik7XG4gICAgfVxuICB9LFxuXG4gIGF0dHIobm9kZTogQVNUdjIuSHRtbE9yU3BsYXRBdHRyKTogU2VyaWFsaXplZEh0bWxPclNwbGF0QXR0ciB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ1NwbGF0QXR0cicpIHtcbiAgICAgIHJldHVybiBuZXcgU291cmNlU2xpY2UoeyBsb2M6IG5vZGUubG9jLCBjaGFyczogJy4uLmF0dHJpYnV0ZXMnIH0pLnNlcmlhbGl6ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQVRUUlMuYW55QXR0cihub2RlKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVmKHJlZjogQVNUdjIuVmFyaWFibGVSZWZlcmVuY2UpOiBTZXJpYWxpemVkVmFyaWFibGVSZWZlcmVuY2Uge1xuICAgIHN3aXRjaCAocmVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0FyZyc6XG4gICAgICAgIHJldHVybiBSRUYuYXJnKHJlZik7XG4gICAgICBjYXNlICdGcmVlJzpcbiAgICAgICAgcmV0dXJuIFJFRi5mcmVlKHJlZik7XG4gICAgICBjYXNlICdMb2NhbCc6XG4gICAgICAgIHJldHVybiBSRUYubG9jYWwocmVmKTtcbiAgICAgIGNhc2UgJ1RoaXMnOlxuICAgICAgICByZXR1cm4gUkVGLnNlbGYocmVmKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udGVudChub2RlOiBBU1R2Mi5Db250ZW50Tm9kZSk6IFNlcmlhbGl6ZWRDb250ZW50Tm9kZSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0FwcGVuZENvbnRlbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5hcHBlbmQobm9kZSk7XG4gICAgICBjYXNlICdHbGltbWVyQ29tbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmdsaW1tZXJDb21tZW50KG5vZGUpO1xuICAgICAgY2FzZSAnSHRtbENvbW1lbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5odG1sQ29tbWVudChub2RlKTtcbiAgICAgIGNhc2UgJ0h0bWxUZXh0JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaHRtbFRleHQobm9kZSk7XG4gICAgICBjYXNlICdJbnZva2VCbG9jayc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmludm9rZUJsb2NrKG5vZGUpO1xuICAgICAgY2FzZSAnSW52b2tlQ29tcG9uZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaW52b2tlQ29tcG9uZW50KG5vZGUpO1xuICAgICAgY2FzZSAnU2ltcGxlRWxlbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULnNpbXBsZUVsZW1lbnQobm9kZSk7XG4gICAgfVxuICB9LFxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=