in packages/extensions/openapi-to-typespec/src/generate/generate-operations.ts [77:137]
export function generateProviderAction(operation: TspArmProviderActionOperation) {
const doc = generateDocs(operation);
const summary = generateSummary(operation);
const statements: string[] = [];
summary && statements.push(summary);
statements.push(doc);
const templateParameters = [];
if (operation.request) {
templateParameters.push(`Request = ${operation.request.type}`);
}
if (operation.response) {
if (operation.response.endsWith("[]")) {
templateParameters.push(`Response = {@bodyRoot _: ${operation.response}}`);
} else {
templateParameters.push(`Response = ${operation.response}`);
}
}
if (operation.scope) {
templateParameters.push(`Scope = ${operation.scope}`);
}
if (operation.parameters.length > 0) {
const params: string[] = [];
for (const parameter of operation.parameters) {
if (parameter.name === "subscriptionId") continue;
if (parameter.name === "location") {
params.push("...LocationParameter");
} else {
params.push(generateParameter(parameter));
}
}
if (params.length === 1 && params[0] === "...LocationParameter") {
templateParameters.push(`Parameters = LocationParameter`);
} else {
templateParameters.push(`Parameters = {${params}}`);
}
}
if (operation.lroHeaders) {
templateParameters.push(`LroHeaders = ${generateLroHeaders(operation.lroHeaders)}`);
}
if (operation.suppressions) {
statements.push(generateSuppressions(operation.suppressions).join("\n"));
}
if (operation.decorators) {
statements.push(generateDecorators(operation.decorators));
}
if (operation.verb) {
statements.push(`@${operation.verb}`);
}
if (operation.action) {
statements.push(`@action("${operation.action}")`);
}
statements.push(`${operation.name} is ${operation.kind}<${(templateParameters ?? []).join(",")}>`);
return statements.join("\n");
}