@glimmer/syntax
Version:
327 lines (270 loc) • 28.5 kB
JavaScript
;
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=