|
@@ -39,15 +39,6 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
|
|
return !!node && NodeGuards.isLiteralNode(node) && typeof node.value === 'string';
|
|
return !!node && NodeGuards.isLiteralNode(node) && typeof node.value === 'string';
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * @param {Node} node
|
|
|
|
- * @param {Node | null} parentNode
|
|
|
|
- * @returns {boolean}
|
|
|
|
- */
|
|
|
|
- private static isValidTemplateLiteralNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.TemplateLiteral {
|
|
|
|
- return NodeGuards.isTemplateLiteralNode(node) && !NodeGuards.isTaggedTemplateExpressionNode(parentNode);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* @param {NodeTransformationStage} nodeTransformationStage
|
|
* @param {NodeTransformationStage} nodeTransformationStage
|
|
* @returns {IVisitor | null}
|
|
* @returns {IVisitor | null}
|
|
@@ -57,7 +48,7 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
|
|
case NodeTransformationStage.Converting:
|
|
case NodeTransformationStage.Converting:
|
|
return {
|
|
return {
|
|
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
|
|
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
|
|
- if (parentNode && TemplateLiteralTransformer.isValidTemplateLiteralNode(node, parentNode)) {
|
|
|
|
|
|
+ if (parentNode && NodeGuards.isTemplateLiteralNode(node)) {
|
|
return this.transformNode(node, parentNode);
|
|
return this.transformNode(node, parentNode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -69,11 +60,51 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * @param {TemplateLiteral} templateLiteralNode
|
|
|
|
- * @param {NodeGuards} parentNode
|
|
|
|
- * @returns {NodeGuards}
|
|
|
|
|
|
+ * @param {ESTree.TemplateLiteral} templateLiteralNode
|
|
|
|
+ * @param {ESTree.Node} parentNode
|
|
|
|
+ * @returns {ESTree.Node}
|
|
*/
|
|
*/
|
|
public transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node {
|
|
public transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node {
|
|
|
|
+ if (NodeGuards.isTaggedTemplateExpressionNode(parentNode)) {
|
|
|
|
+ return this.transformTaggedTemplateLiteralNodeNode(templateLiteralNode, parentNode);
|
|
|
|
+ } else {
|
|
|
|
+ return this.transformTemplateLiteralNodeNode(templateLiteralNode, parentNode);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param {ESTree.TemplateLiteral} templateLiteralNode
|
|
|
|
+ * @param {ESTree.Node} parentNode
|
|
|
|
+ * @returns {ESTree.Node}
|
|
|
|
+ */
|
|
|
|
+ private transformTaggedTemplateLiteralNodeNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node {
|
|
|
|
+ return NodeFactory.templateLiteral(
|
|
|
|
+ [this.transformTemplateLiteralNodeNode(templateLiteralNode, parentNode)],
|
|
|
|
+ [
|
|
|
|
+ NodeFactory.templateElement(
|
|
|
|
+ {
|
|
|
|
+ raw: '',
|
|
|
|
+ cooked: ''
|
|
|
|
+ },
|
|
|
|
+ false
|
|
|
|
+ ),
|
|
|
|
+ NodeFactory.templateElement(
|
|
|
|
+ {
|
|
|
|
+ raw: '',
|
|
|
|
+ cooked: ''
|
|
|
|
+ },
|
|
|
|
+ true
|
|
|
|
+ )
|
|
|
|
+ ]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param {ESTree.TemplateLiteral} templateLiteralNode
|
|
|
|
+ * @param {ESTree.Node} parentNode
|
|
|
|
+ * @returns {ESTree.Expression}
|
|
|
|
+ */
|
|
|
|
+ private transformTemplateLiteralNodeNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Expression {
|
|
const templateLiteralExpressions: ESTree.Expression[] = templateLiteralNode.expressions;
|
|
const templateLiteralExpressions: ESTree.Expression[] = templateLiteralNode.expressions;
|
|
|
|
|
|
let nodes: ESTree.Expression[] = [];
|
|
let nodes: ESTree.Expression[] = [];
|