/**
* Pattern 1: FormattedMessage with id and defaultMessage
* @code
*/
export function syncFormattedMessage({
translations,
fileContent,
}: {
translations: Record;
fileContent: string;
}): { updated: false } | { updated: true; fileContent: string } {
let updated = false;
Object.entries(translations).forEach(([messageId, messageValue]) => {
const regex = new RegExp(
`(id=["']${messageId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}["'].*?defaultMessage=)["']([^"']*?)["']`,
"gs"
);
if (regex.test(fileContent)) {
const escapedValue = messageValue
.replace(/"/g, '\\"')
.replace(/\n/g, "\\n");
fileContent = fileContent.replace(regex, `$1"${escapedValue}"`);
updated = true;
}
});
return updated ? { updated, fileContent } : { updated };
}