@@ -3,6 +3,30 @@ const path = require('path');
33
44const { interpolateName } = require ( '@formatjs/ts-transformer' ) ;
55const intlPlugin = require ( 'babel-plugin-formatjs' ) . default ;
6+ const stringify = require ( 'fast-json-stable-stringify' ) ;
7+
8+ function mergeDuplicates ( messages ) {
9+ const seen = new Map ( ) ;
10+
11+ return messages . filter ( ( message ) => {
12+ const other = seen . get ( message . id ) ;
13+
14+ seen . set ( message . id , message ) ;
15+
16+ if ( ! other ) return true ;
17+
18+ if (
19+ stringify ( message . description ) !== stringify ( other . description ) ||
20+ message . defaultMessage !== other . defaultMessage
21+ ) {
22+ throw new Error (
23+ `Duplicate message id: "${ message . id } ", but the \`description\` and/or \`defaultMessage\` are different.` ,
24+ ) ;
25+ }
26+ // if they are the same, filter this one out
27+ return false ;
28+ } ) ;
29+ }
630
731module . exports = function intlPreset ( _ , options = { } ) {
832 const {
@@ -56,6 +80,8 @@ module.exports = function intlPreset(_, options = {}) {
5680
5781 mkdirSync ( path . join ( messagesDir , dir ) , { recursive : true } ) ;
5882
83+ messages = mergeDuplicates ( messages ) ;
84+
5985 writeFileSync (
6086 path . join ( messagesDir , dir , `${ name } .json` ) ,
6187 JSON . stringify ( messages , null , 2 ) ,
0 commit comments