@@ -30,6 +30,8 @@ const TsKeyword = {
30
30
Enum : "enum" ,
31
31
Interface : "interface" ,
32
32
Array : "Array" ,
33
+ ReadonlyArray : "ReadonlyArray" ,
34
+ Readonly : "Readonly" ,
33
35
Record : "Record" ,
34
36
Intersection : "&" ,
35
37
Union : "|" ,
@@ -55,6 +57,8 @@ export class CodeGenConfig {
55
57
generateUnionEnums = false ;
56
58
/** CLI flag */
57
59
addReadonly = false ;
60
+ /** CLI flag */
61
+ makeImmutable = false ;
58
62
enumNamesAsValues = false ;
59
63
/** parsed swagger schema from getSwaggerObject() */
60
64
@@ -225,12 +229,20 @@ export class CodeGenConfig {
225
229
/**
226
230
* $A[] or Array<$A>
227
231
*/
228
- ArrayType : ( content : unknown ) => {
232
+ ArrayType : ( { readonly , content } : Record < string , unknown > ) => {
229
233
if ( this . anotherArrayType ) {
230
- return this . Ts . TypeWithGeneric ( this . Ts . Keyword . Array , [ content ] ) ;
234
+ return this . Ts . TypeWithGeneric (
235
+ readonly ? this . Ts . Keyword . ReadonlyArray : this . Ts . Keyword . Array ,
236
+ [ content ] ,
237
+ ) ;
231
238
}
232
-
233
- return `${ this . Ts . ExpressionGroup ( content ) } []` ;
239
+ return lodash
240
+ . compact ( [
241
+ readonly && "readonly " ,
242
+ this . Ts . ExpressionGroup ( content ) ,
243
+ "[]" ,
244
+ ] )
245
+ . join ( "" ) ;
234
246
} ,
235
247
/**
236
248
* "$A"
@@ -265,8 +277,16 @@ export class CodeGenConfig {
265
277
/**
266
278
* Record<$A1, $A2>
267
279
*/
268
- RecordType : ( key : unknown , value : unknown ) =>
269
- this . Ts . TypeWithGeneric ( this . Ts . Keyword . Record , [ key , value ] ) ,
280
+ RecordType : ( { readonly, key, value } : Record < string , unknown > ) => {
281
+ const record = this . Ts . TypeWithGeneric ( this . Ts . Keyword . Record , [
282
+ key ,
283
+ value ,
284
+ ] ) ;
285
+ if ( readonly ) {
286
+ return this . Ts . TypeWithGeneric ( this . Ts . Keyword . Readonly , [ record ] ) ;
287
+ }
288
+ return record ;
289
+ } ,
270
290
/**
271
291
* readonly $key?:$value
272
292
*/
@@ -277,8 +297,15 @@ export class CodeGenConfig {
277
297
/**
278
298
* [key: $A1]: $A2
279
299
*/
280
- InterfaceDynamicField : ( key : unknown , value : unknown ) =>
281
- `[key: ${ key } ]: ${ value } ` ,
300
+ InterfaceDynamicField : ( {
301
+ readonly,
302
+
303
+ key,
304
+ value,
305
+ } : Record < string , unknown > ) =>
306
+ lodash
307
+ . compact ( [ readonly && "readonly " , `[key: ${ key } ]` , `: ${ value } ` ] )
308
+ . join ( "" ) ,
282
309
283
310
/**
284
311
* EnumName.EnumKey
@@ -344,8 +371,11 @@ export class CodeGenConfig {
344
371
/**
345
372
* [$A1, $A2, ...$AN]
346
373
*/
347
- Tuple : ( values : unknown [ ] ) => {
348
- return `[${ values . join ( ", " ) } ]` ;
374
+ Tuple : ( {
375
+ readonly,
376
+ values,
377
+ } : Record < string , unknown > & { values : unknown [ ] } ) => {
378
+ return `${ readonly ? "readonly " : "" } [${ values . join ( ", " ) } ]` ;
349
379
} ,
350
380
} ;
351
381
0 commit comments