@@ -30,6 +30,8 @@ const TsKeyword = {
3030 Enum : "enum" ,
3131 Interface : "interface" ,
3232 Array : "Array" ,
33+ ReadonlyArray : "ReadonlyArray" ,
34+ Readonly : "Readonly" ,
3335 Record : "Record" ,
3436 Intersection : "&" ,
3537 Union : "|" ,
@@ -55,6 +57,8 @@ export class CodeGenConfig {
5557 generateUnionEnums = false ;
5658 /** CLI flag */
5759 addReadonly = false ;
60+ /** CLI flag */
61+ makeImmutable = false ;
5862 enumNamesAsValues = false ;
5963 /** parsed swagger schema from getSwaggerObject() */
6064
@@ -225,12 +229,20 @@ export class CodeGenConfig {
225229 /**
226230 * $A[] or Array<$A>
227231 */
228- ArrayType : ( content : unknown ) => {
232+ ArrayType : ( { readonly , content } : Record < string , unknown > ) => {
229233 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+ ) ;
231238 }
232-
233- return `${ this . Ts . ExpressionGroup ( content ) } []` ;
239+ return lodash
240+ . compact ( [
241+ readonly && "readonly " ,
242+ this . Ts . ExpressionGroup ( content ) ,
243+ "[]" ,
244+ ] )
245+ . join ( "" ) ;
234246 } ,
235247 /**
236248 * "$A"
@@ -265,8 +277,16 @@ export class CodeGenConfig {
265277 /**
266278 * Record<$A1, $A2>
267279 */
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+ } ,
270290 /**
271291 * readonly $key?:$value
272292 */
@@ -277,8 +297,15 @@ export class CodeGenConfig {
277297 /**
278298 * [key: $A1]: $A2
279299 */
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 ( "" ) ,
282309
283310 /**
284311 * EnumName.EnumKey
@@ -344,8 +371,11 @@ export class CodeGenConfig {
344371 /**
345372 * [$A1, $A2, ...$AN]
346373 */
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 ( ", " ) } ]` ;
349379 } ,
350380 } ;
351381
0 commit comments