export function generateProviderAction()

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");
}