angular-estree-parser
Version:
A parser that converts Angular source code into an ESTree-compatible form
33 lines (32 loc) • 1.12 kB
JavaScript
//#region src/ast-transform/transforms/transform-template-literal.ts
const visitTaggedTemplateLiteral = (node, transformer) => ({
type: "TaggedTemplateExpression",
tag: transformer.transformChild(node.tag),
quasi: transformer.transformChild(node.template)
});
const visitTemplateLiteral = (node, transformer) => ({
type: "TemplateLiteral",
quasis: transformer.transformChildren(node.elements),
expressions: transformer.transformChildren(node.expressions)
});
const visitTemplateLiteralElement = (node, transformer) => {
const [parent] = transformer.ancestors;
const { elements } = parent;
const elementIndex = elements.indexOf(node);
const isFirst = elementIndex === 0;
const isLast = elementIndex === elements.length - 1;
const end = node.sourceSpan.end - (isLast ? 1 : 0);
const start = node.sourceSpan.start + (isFirst ? 1 : 0);
const raw = transformer.text.slice(start, end);
return {
type: "TemplateElement",
value: {
cooked: node.text,
raw
},
tail: isLast,
range: [start, end]
};
};
//#endregion
export { visitTaggedTemplateLiteral, visitTemplateLiteral, visitTemplateLiteralElement };