11use serde:: Deserialize ;
22
3+ #[ derive( Deserialize , Debug , PartialEq , Clone ) ]
4+ #[ serde( rename_all = "kebab-case" ) ]
5+ pub enum DescriptorFields {
6+ Auto ,
7+ All ,
8+ IdOnly ,
9+ Message ,
10+ }
11+
12+ impl DescriptorFields {
13+ pub fn should_keep_message ( & self ) -> bool {
14+ matches ! ( self , DescriptorFields :: All | DescriptorFields :: Message )
15+ }
16+
17+ pub fn should_keep_context ( & self ) -> bool {
18+ matches ! ( self , DescriptorFields :: All | DescriptorFields :: Message )
19+ }
20+
21+ pub fn should_keep_comment ( & self ) -> bool {
22+ matches ! ( self , DescriptorFields :: All )
23+ }
24+ }
25+
326#[ derive( Deserialize , Debug , PartialEq ) ]
427#[ serde( rename_all = "camelCase" ) ]
528pub struct LinguiJsOptions {
629 runtime_modules : Option < RuntimeModulesConfigMap > ,
730 #[ serde( default ) ]
8- strip_non_essential_fields : Option < bool > ,
31+ descriptor_fields : Option < DescriptorFields > ,
932 #[ serde( default ) ]
1033 use_lingui_v5_id_generation : Option < bool > ,
1134}
@@ -30,10 +53,19 @@ pub struct RuntimeModulesConfigMapNormalized {
3053
3154impl LinguiJsOptions {
3255 pub fn into_options ( self , env_name : & str ) -> LinguiOptions {
56+ let descriptor_fields = match self . descriptor_fields . unwrap_or ( DescriptorFields :: Auto ) {
57+ DescriptorFields :: Auto => {
58+ if matches ! ( env_name, "production" ) {
59+ DescriptorFields :: IdOnly
60+ } else {
61+ DescriptorFields :: All
62+ }
63+ }
64+ other => other,
65+ } ;
66+
3367 LinguiOptions {
34- strip_non_essential_fields : self
35- . strip_non_essential_fields
36- . unwrap_or ( matches ! ( env_name, "production" ) ) ,
68+ descriptor_fields,
3769 use_lingui_v5_id_generation : self . use_lingui_v5_id_generation . unwrap_or ( false ) ,
3870 runtime_modules : RuntimeModulesConfigMapNormalized {
3971 i18n : (
@@ -79,15 +111,15 @@ impl LinguiJsOptions {
79111
80112#[ derive( Debug , Clone ) ]
81113pub struct LinguiOptions {
82- pub strip_non_essential_fields : bool ,
114+ pub descriptor_fields : DescriptorFields ,
83115 pub runtime_modules : RuntimeModulesConfigMapNormalized ,
84116 pub use_lingui_v5_id_generation : bool ,
85117}
86118
87119impl Default for LinguiOptions {
88120 fn default ( ) -> LinguiOptions {
89121 LinguiOptions {
90- strip_non_essential_fields : false ,
122+ descriptor_fields : DescriptorFields :: All ,
91123 use_lingui_v5_id_generation : false ,
92124 runtime_modules : RuntimeModulesConfigMapNormalized {
93125 i18n : ( "@lingui/core" . into ( ) , "i18n" . into ( ) ) ,
@@ -132,7 +164,7 @@ mod lib_tests {
132164 Some ( "myUseLingui" . into( ) )
133165 ) ) ,
134166 } ) ,
135- strip_non_essential_fields : None ,
167+ descriptor_fields : None ,
136168 use_lingui_v5_id_generation: None ,
137169 }
138170 )
@@ -157,58 +189,106 @@ mod lib_tests {
157189 trans: None ,
158190 use_lingui: None ,
159191 } ) ,
160- strip_non_essential_fields : None ,
192+ descriptor_fields : None ,
161193 use_lingui_v5_id_generation: None ,
162194 }
163195 )
164196 }
165197
166198 #[ test]
167- fn test_strip_non_essential_fields_config ( ) {
199+ fn test_descriptor_fields_config ( ) {
200+ let config = serde_json:: from_str :: < LinguiJsOptions > (
201+ r#"{
202+ "descriptorFields": "id-only",
203+ "runtimeModules": {}
204+ }"# ,
205+ )
206+ . unwrap ( ) ;
207+
208+ let options = config. into_options ( "development" ) ;
209+ assert ! ( matches!(
210+ options. descriptor_fields,
211+ DescriptorFields :: IdOnly
212+ ) ) ;
213+
214+ let config = serde_json:: from_str :: < LinguiJsOptions > (
215+ r#"{
216+ "descriptorFields": "all",
217+ "runtimeModules": {}
218+ }"# ,
219+ )
220+ . unwrap ( ) ;
221+
222+ let options = config. into_options ( "production" ) ;
223+ assert ! ( matches!( options. descriptor_fields, DescriptorFields :: All ) ) ;
224+
225+ let config = serde_json:: from_str :: < LinguiJsOptions > (
226+ r#"{
227+ "descriptorFields": "message",
228+ "runtimeModules": {}
229+ }"# ,
230+ )
231+ . unwrap ( ) ;
232+
233+ let options = config. into_options ( "production" ) ;
234+ assert ! ( matches!(
235+ options. descriptor_fields,
236+ DescriptorFields :: Message
237+ ) ) ;
238+ }
239+
240+ #[ test]
241+ fn test_descriptor_fields_auto_default ( ) {
168242 let config = serde_json:: from_str :: < LinguiJsOptions > (
169243 r#"{
170- "stripNonEssentialFields": true,
171244 "runtimeModules": {}
172245 }"# ,
173246 )
174247 . unwrap ( ) ;
175248
176249 let options = config. into_options ( "development" ) ;
177- assert ! ( options. strip_non_essential_fields ) ;
250+ assert ! ( matches! ( options. descriptor_fields , DescriptorFields :: All ) ) ;
178251
179252 let config = serde_json:: from_str :: < LinguiJsOptions > (
180253 r#"{
181- "stripNonEssentialFields": false,
182254 "runtimeModules": {}
183255 }"# ,
184256 )
185257 . unwrap ( ) ;
186258
187259 let options = config. into_options ( "production" ) ;
188- assert ! ( !options. strip_non_essential_fields) ;
260+ assert ! ( matches!(
261+ options. descriptor_fields,
262+ DescriptorFields :: IdOnly
263+ ) ) ;
189264 }
190265
191266 #[ test]
192- fn test_strip_non_essential_fields_default ( ) {
267+ fn test_descriptor_fields_explicit_auto ( ) {
193268 let config = serde_json:: from_str :: < LinguiJsOptions > (
194269 r#"{
270+ "descriptorFields": "auto",
195271 "runtimeModules": {}
196272 }"# ,
197273 )
198274 . unwrap ( ) ;
199275
200276 let options = config. into_options ( "development" ) ;
201- assert ! ( ! options. strip_non_essential_fields ) ;
277+ assert ! ( matches! ( options. descriptor_fields , DescriptorFields :: All ) ) ;
202278
203279 let config = serde_json:: from_str :: < LinguiJsOptions > (
204280 r#"{
281+ "descriptorFields": "auto",
205282 "runtimeModules": {}
206283 }"# ,
207284 )
208285 . unwrap ( ) ;
209286
210287 let options = config. into_options ( "production" ) ;
211- assert ! ( options. strip_non_essential_fields) ;
288+ assert ! ( matches!(
289+ options. descriptor_fields,
290+ DescriptorFields :: IdOnly
291+ ) ) ;
212292 }
213293
214294 #[ test]
0 commit comments