@@ -88,6 +88,7 @@ export async function generateApi(
88
88
filterEndpoints,
89
89
endpointOverrides,
90
90
unionUndefined,
91
+ encodeParams = false ,
91
92
flattenArg = false ,
92
93
useEnumType = false ,
93
94
mergeReadWriteOnly = false ,
@@ -356,7 +357,7 @@ export async function generateApi(
356
357
type : isQuery ? 'query' : 'mutation' ,
357
358
Response : ResponseTypeName ,
358
359
QueryArg,
359
- queryFn : generateQueryFn ( { operationDefinition, queryArg, isQuery, isFlatArg } ) ,
360
+ queryFn : generateQueryFn ( { operationDefinition, queryArg, isQuery, isFlatArg, encodeParams } ) ,
360
361
extraEndpointsProps : isQuery
361
362
? generateQueryEndpointProps ( { operationDefinition } )
362
363
: generateMutationEndpointProps ( { operationDefinition } ) ,
@@ -369,11 +370,13 @@ export async function generateApi(
369
370
queryArg,
370
371
isFlatArg,
371
372
isQuery,
373
+ encodeParams,
372
374
} : {
373
375
operationDefinition : OperationDefinition ;
374
376
queryArg : QueryArgDefinitions ;
375
377
isFlatArg : boolean ;
376
378
isQuery : boolean ;
379
+ encodeParams : boolean ;
377
380
} ) {
378
381
const { path, verb } = operationDefinition ;
379
382
@@ -386,21 +389,22 @@ export async function generateApi(
386
389
}
387
390
388
391
function createObjectLiteralProperty ( parameters : QueryArgDefinition [ ] , propertyName : string ) {
389
- return parameters . length === 0
390
- ? undefined
391
- : factory . createPropertyAssignment (
392
- factory . createIdentifier ( propertyName ) ,
393
- factory . createObjectLiteralExpression (
394
- parameters . map (
395
- ( param ) =>
396
- createPropertyAssignment (
397
- param . originalName ,
398
- isFlatArg ? rootObject : accessProperty ( rootObject , param . name )
399
- ) ,
400
- true
401
- )
402
- )
403
- ) ;
392
+ if ( parameters . length === 0 ) return undefined ;
393
+
394
+ const properties = parameters . map ( ( param ) => {
395
+ const value = isFlatArg ? rootObject : accessProperty ( rootObject , param . name ) ;
396
+ return createPropertyAssignment (
397
+ param . originalName ,
398
+ encodeParams && param . param ?. in === 'query'
399
+ ? factory . createCallExpression ( factory . createIdentifier ( 'encodeURIComponent' ) , undefined , [ value ] )
400
+ : value
401
+ ) ;
402
+ } ) ;
403
+
404
+ return factory . createPropertyAssignment (
405
+ factory . createIdentifier ( propertyName ) ,
406
+ factory . createObjectLiteralExpression ( properties , true )
407
+ ) ;
404
408
}
405
409
406
410
return factory . createArrowFunction (
@@ -416,7 +420,7 @@ export async function generateApi(
416
420
[
417
421
factory . createPropertyAssignment (
418
422
factory . createIdentifier ( 'url' ) ,
419
- generatePathExpression ( path , pickParams ( 'path' ) , rootObject , isFlatArg )
423
+ generatePathExpression ( path , pickParams ( 'path' ) , rootObject , isFlatArg , encodeParams )
420
424
) ,
421
425
isQuery && verb . toUpperCase ( ) === 'GET'
422
426
? undefined
@@ -463,7 +467,8 @@ function generatePathExpression(
463
467
path : string ,
464
468
pathParameters : QueryArgDefinition [ ] ,
465
469
rootObject : ts . Identifier ,
466
- isFlatArg : boolean
470
+ isFlatArg : boolean ,
471
+ encodeParams : boolean
467
472
) {
468
473
const expressions : Array < [ string , string ] > = [ ] ;
469
474
@@ -479,14 +484,18 @@ function generatePathExpression(
479
484
return expressions . length
480
485
? factory . createTemplateExpression (
481
486
factory . createTemplateHead ( head ) ,
482
- expressions . map ( ( [ prop , literal ] , index ) =>
483
- factory . createTemplateSpan (
484
- isFlatArg ? rootObject : accessProperty ( rootObject , prop ) ,
487
+ expressions . map ( ( [ prop , literal ] , index ) => {
488
+ const value = isFlatArg ? rootObject : accessProperty ( rootObject , prop ) ;
489
+ const encodedValue = encodeParams
490
+ ? factory . createCallExpression ( factory . createIdentifier ( 'encodeURIComponent' ) , undefined , [ value ] )
491
+ : value ;
492
+ return factory . createTemplateSpan (
493
+ encodedValue ,
485
494
index === expressions . length - 1
486
495
? factory . createTemplateTail ( literal )
487
496
: factory . createTemplateMiddle ( literal )
488
- )
489
- )
497
+ ) ;
498
+ } )
490
499
)
491
500
: factory . createNoSubstitutionTemplateLiteral ( head ) ;
492
501
}
0 commit comments