Skip to content

Commit 006e96c

Browse files
feat(formatjs): Serialize description objects (#439)
To bring parity with `ts-transformer`[implementation](https://github.com/formatjs/formatjs/blob/946a73c2f3bc51464298e40a85e8335e17304b3e/packages/ts-transformer/src/transform.ts#L415) and when the description is an object, stringify it
1 parent a0424a4 commit 006e96c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

packages/formatjs/__tests__/wasm.test.ts

+20
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,24 @@ describe("formatjs swc plugin", () => {
204204
expect(sha512output).toMatch(/id: "[a-zA-Z0-9]{6}"/);
205205
expect(sha1output).not.toMatch(sha512output);
206206
});
207+
208+
it("should be able to use object description", async () => {
209+
const input = `
210+
import { FormattedMessage } from 'react-intl';
211+
212+
export function Greeting() {
213+
return (
214+
<FormattedMessage
215+
defaultMessage="Hello!"
216+
description={{ text: "Greeting message" }}
217+
/>
218+
);
219+
}
220+
`;
221+
222+
console.log(input);
223+
const output = await transformCode(input);
224+
225+
expect(output).toMatch(/id: "zL\/jyT\"/);
226+
});
207227
});

packages/formatjs/transform/src/lib.rs

+8
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,10 @@ fn evaluate_jsx_message_descriptor(
570570

571571
let content = if let Some(MessageDescriptionValue::Str(description)) = &description {
572572
format!("{}#{}", default_message, description)
573+
} else if let Some(MessageDescriptionValue::Obj(_)) = &description {
574+
// When description is an object, stringify it for the hash calculation
575+
let desc_json = serde_json::to_string(&description).unwrap_or_default();
576+
format!("{}#{}", default_message, desc_json)
573577
} else {
574578
default_message.clone()
575579
};
@@ -610,6 +614,10 @@ fn evaluate_call_expr_message_descriptor(
610614

611615
let content = if let Some(MessageDescriptionValue::Str(description)) = &description {
612616
format!("{}#{}", default_message, description)
617+
} else if let Some(MessageDescriptionValue::Obj(_)) = &description {
618+
// When description is an object, stringify it for the hash calculation
619+
let desc_json = serde_json::to_string(&description).unwrap_or_default();
620+
format!("{}#{}", default_message, desc_json)
613621
} else {
614622
default_message.clone()
615623
};

0 commit comments

Comments
 (0)