diff --git a/packages/macro/src/macroJs.test.ts b/packages/macro/src/macroJs.test.ts index 009575324..4e70dfc90 100644 --- a/packages/macro/src/macroJs.test.ts +++ b/packages/macro/src/macroJs.test.ts @@ -79,6 +79,55 @@ describe("js macro", () => { }, ]) }) + + it("message with unicode chars is respected", () => { + const macro = createMacro() + const exp = parseExpression('t`Message \\u0020`') + const tokens = macro.tokenizeTemplateLiteral(exp) + expect(tokens).toEqual([ + { + type: "text", + value: 'Message \\u0020', + }, + ]) + }) + + it("message with double scaped literals it's stripped", () => { + const macro = createMacro() + const exp = parseExpression('t\`Passing \\`${argSet}\\` is not supported.\`') + const tokens = macro.tokenizeTemplateLiteral(exp) + expect(tokens).toEqual([ + { + type: "text", + value: 'Passing `', + }, + { + name: "argSet", + type: "arg", + value: { + end: 20, + loc: { + end: { + column: 20, + line: 1, + }, + identifierName: "argSet", + start: { + column: 14, + line: 1, + }, + }, + name: "argSet", + start: 14, + type: "Identifier", + }, + }, + { + type: "text", + value: "` is not supported.", + }, + ]) + }) }) describe("tokenizeChoiceMethod", () => { diff --git a/packages/macro/src/macroJs.ts b/packages/macro/src/macroJs.ts index 512b86a3c..6b1e61e9b 100644 --- a/packages/macro/src/macroJs.ts +++ b/packages/macro/src/macroJs.ts @@ -360,6 +360,9 @@ export default class MacroJs { * We clean '//\` ' to just '`' */ clearBackslashes(value: string) { + // it's an unicode char so we should keep them + if (value.includes('\\u')) return value + // if not we replace the extra scaped literals return value.replace(removeExtraScapedLiterals, "`") } diff --git a/packages/macro/src/macroJsx.ts b/packages/macro/src/macroJsx.ts index 506d2e487..d7c93730d 100644 --- a/packages/macro/src/macroJsx.ts +++ b/packages/macro/src/macroJsx.ts @@ -364,6 +364,9 @@ export default class MacroJSX { * We clean '//\` ' to just '`' * */ clearBackslashes(value: string) { + // it's an unicode char so we should keep them + if (value.includes('\\u')) return value + // if not we replace the extra scaped literals return value.replace(removeExtraScapedLiterals, "`") }