diff --git a/apps/web/src/server/utils/contact-variable-replacement.ts b/apps/web/src/server/utils/contact-variable-replacement.ts index 4f37dc894..5ae2384ab 100644 --- a/apps/web/src/server/utils/contact-variable-replacement.ts +++ b/apps/web/src/server/utils/contact-variable-replacement.ts @@ -114,7 +114,8 @@ export function replaceContactVariables( return contactValue; } - return fallback ?? ""; + // The regex lets whitespace before `}}` fall into the fallback capture + return fallback?.trim() ?? ""; }, ); } diff --git a/apps/web/src/server/utils/contact-variable-replacement.unit.test.ts b/apps/web/src/server/utils/contact-variable-replacement.unit.test.ts index 7a2d1bb70..f4a98d078 100644 --- a/apps/web/src/server/utils/contact-variable-replacement.unit.test.ts +++ b/apps/web/src/server/utils/contact-variable-replacement.unit.test.ts @@ -49,6 +49,21 @@ describe("replaceContactVariables", () => { ).toBe("Welcome, you!"); }); + it("does not keep whitespace padding in the fallback value", () => { + const contact = { + ...baseContact, + firstName: null, + } satisfies Contact; + + expect( + replaceContactVariables( + "Hi {{ firstName, fallback= there }}, welcome!", + contact, + [...BUILT_IN_CONTACT_VARIABLES], + ), + ).toBe("Hi there, welcome!"); + }); + it("uses fallback values for nullable built-in variables", () => { const contact = { ...baseContact,