Skip to content

Commit 65b0051

Browse files
committed
fix: reserved names / keywords in operation arguments
1 parent 0db5149 commit 65b0051

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

src/schema-to-typescript/common/operation-methods.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ function generateUniqueName(source: string, postfixes: string[], usedNames: Reco
8989
interface OpenApiParameterFromArgument {
9090
paramName: string;
9191
argumentName: string;
92+
destructuringName: string;
9293
defaultValue?: Expression;
9394
optional?: boolean;
9495
docs: string | null;
@@ -110,14 +111,23 @@ function renderParameter(parameter: OpenApiParameterFromArgument | OpenApiParame
110111
const {paramName} = parameter;
111112
const propertyName = objectPropertyKey(paramName);
112113
if (isOperationParameterFromArgument(parameter)) {
113-
const {argumentName} = parameter;
114-
return objectProperty(propertyName, identifier(argumentName), false, paramName === argumentName);
114+
const {destructuringName} = parameter;
115+
return objectProperty(propertyName, identifier(destructuringName), false, paramName === destructuringName);
115116
} else {
116117
const {value} = parameter;
117118
return objectProperty(propertyName, value, false, false);
118119
}
119120
}
120121

122+
function generateDestructuringName(paramName: string, postfixes: string[], usedInputNames: Record<string, true>) {
123+
let destructuringName = paramName;
124+
if (!isValidIdentifier(destructuringName, true)) {
125+
destructuringName = generateUniqueName(destructuringName, postfixes, usedInputNames);
126+
usedInputNames[destructuringName] = true;
127+
}
128+
return destructuringName;
129+
}
130+
121131
export function generateOperationMethods({
122132
paths,
123133
serviceName,
@@ -286,6 +296,11 @@ export function generateOperationMethods({
286296
inputParameters[parameter.in].push({
287297
paramName: parameter.name,
288298
argumentName: parameterName,
299+
destructuringName: generateDestructuringName(
300+
parameterName,
301+
[parameter.in, `${parameter.in} param`],
302+
usedInputNames
303+
),
289304
optional: !parameter.required,
290305
type: extendDependenciesAndGetResult(
291306
generateSchemaTypeAndImports({
@@ -469,12 +484,14 @@ export function generateOperationMethods({
469484
inputParameters['header'].push({
470485
paramName: 'Content-Type',
471486
argumentName: mediaTypeName,
487+
destructuringName: generateDestructuringName(mediaTypeName, [], usedInputNames),
472488
docs: null,
473489
defaultValue: defaultMediaType ? stringLiteral(defaultMediaType) : undefined
474490
});
475491
for (const requestBodyName of allRequestBodyNames) {
476492
inputParameters['body'].push({
477493
argumentName: requestBodyName,
494+
destructuringName: generateDestructuringName(requestBodyName, [], usedInputNames),
478495
paramName: requestBodyName,
479496
docs: null
480497
});
@@ -488,6 +505,7 @@ export function generateOperationMethods({
488505
inputParameters['header'].push({
489506
paramName: 'Content-Type',
490507
argumentName: mediaTypeName,
508+
destructuringName: generateDestructuringName(mediaTypeName, [], usedInputNames),
491509
docs: null,
492510
type: tsStringKeyword()
493511
});
@@ -500,6 +518,7 @@ export function generateOperationMethods({
500518
inputParameters['body'].push({
501519
paramName: requestBodyName,
502520
argumentName: requestBodyName,
521+
destructuringName: generateDestructuringName(requestBodyName, [], usedInputNames),
503522
type: extendDependenciesAndGetResult(
504523
generateSchemaTypeAndImports({
505524
schema,
@@ -556,17 +575,19 @@ export function generateOperationMethods({
556575

557576
const argument = objectPattern([]);
558577
const argumentType = tsTypeLiteral([]);
559-
for (const {argumentName, type, optional, docs, defaultValue} of Object.values(inputParameters)
578+
for (const {argumentName, destructuringName, type, optional, docs, defaultValue} of Object.values(
579+
inputParameters
580+
)
560581
.flatMap((params) => params)
561582
.filter(isOperationParameterFromArgument)) {
562583
argument.properties.push(
563584
objectProperty(
564585
identifier(argumentName),
565586
defaultValue
566-
? assignmentPattern(identifier(argumentName), defaultValue)
567-
: identifier(argumentName),
587+
? assignmentPattern(identifier(destructuringName), defaultValue)
588+
: identifier(destructuringName),
568589
false,
569-
true
590+
argumentName === destructuringName
570591
)
571592
);
572593
if (type) {

0 commit comments

Comments
 (0)