diff --git a/packages/babel-traverse/src/path/evaluation.ts b/packages/babel-traverse/src/path/evaluation.ts index 6b35af8e6903..21259ac6a08b 100644 --- a/packages/babel-traverse/src/path/evaluation.ts +++ b/packages/babel-traverse/src/path/evaluation.ts @@ -442,7 +442,9 @@ function evaluateQuasis( let str = ""; let i = 0; - const exprs = path.get("expressions"); + const exprs: Array> = path.isTemplateLiteral() + ? path.get("expressions") + : path.get("quasi.expressions"); for (const elem of quasis) { // not confident, evaluated an expression we don't like diff --git a/packages/babel-traverse/test/evaluation.js b/packages/babel-traverse/test/evaluation.js index 07897748e71c..375239a719de 100644 --- a/packages/babel-traverse/test/evaluation.js +++ b/packages/babel-traverse/test/evaluation.js @@ -100,12 +100,27 @@ describe("evaluation", function () { ).toBe(false); }); - it("should evaluate template literals", function () { - expect( - getPath("var x = 8; var y = 1; var z = `value is ${x >>> y}`") - .get("body.2.declarations.0.init") - .evaluate().value, - ).toBe("value is 4"); + describe("template literals", function () { + it("should evaluate template literals", function () { + expect( + getPath("var x = 8; var y = 1; var z = `value is ${x >>> y}`") + .get("body.2.declarations.0.init") + .evaluate().value, + ).toBe("value is 4"); + }); + + it("shold evaluate String.raw tags", function () { + expect( + getPath("String.raw`a\\n${1}\\u`;").get("body.0.expression").evaluate() + .value, + ).toBe("a\\n1\\u"); + }); + + addDeoptTest( + "a`x${b}y`", + "TaggedTemplateExpression", + "TaggedTemplateExpression", + ); }); it("should evaluate member expressions", function () {