function addOperation()

in packages/typespec-powershell/src/convertor/convertor.ts [175:230]


function addOperation(psContext: SdkContext, op: HttpOperation, operationGroup: OperationGroup, model: PwshModel, emitterOptions: PSOptions) {
  const operationId = resolveOperationId(psContext, op, operationGroup);
  const newOperation = new Operation( operationId.split('_')[1] ?? pascalCase(op.operation.name), getDoc(psContext.program, op.operation) ?? "");
  newOperation.operationId = operationId;
  // Add Api versions
  newOperation.apiVersions = newOperation.apiVersions || [];
  newOperation.apiVersions.push({ version: getEnrichedDefaultApiVersion(psContext.program, psContext) || "" });
  // Add URl parameters
  if (urlParameters.length > 0) {
    newOperation.parameters = newOperation.parameters || [];
    newOperation.parameters.push(...urlParameters);
  }
  // Add query and path parameters
  const parameters = op.parameters.parameters.filter(p => p.type === "path" || p.type === "query");
  for (const parameter of parameters) {
    const newParameter = createParameter(psContext, parameter, model);
    newOperation.parameters = newOperation.parameters || [];
    newOperation.parameters.push(newParameter);
  }
  // Add request
  newOperation.requests = newOperation.requests || [];
  const newRequest = new Request();
  newOperation.requests.push(newRequest);
  const headerParameters = op.parameters.parameters.filter(p => p.type === "header");
  for (const parameter of headerParameters) {
    const newParameter = createParameter(psContext, parameter, model);
    newRequest.parameters = newRequest.parameters || [];
    newOperation.requests[0].parameters?.push(newParameter);
  }
  // Add host parameter
  if (endpoint === '{$host}') {
    const hostParameter = createHostParameter(psContext, model);
    newOperation.parameters = newOperation.parameters || [];
    newOperation.parameters.push(hostParameter);
  }
  // Add request body if it exists
  if (op.parameters.body && op.parameters.body.bodyKind === "single" && !(op.parameters.body.type.kind === "Intrinsic" && op.parameters.body.type.name === "void")) {
    const newParameter = createBodyParameter(psContext, op.parameters.body, model);
    newRequest.parameters = newRequest.parameters || [];
    newOperation.requests[0].parameters?.push(newParameter);
  }
  const httpProtocol = new Protocol();
  httpProtocol.method = op.verb;
  httpProtocol.path = op.path;
  // hard code the media type to json for the time being by xiaogang.
  httpProtocol.knownMediaType = "json";
  httpProtocol.mediaTypes = ["application/json"];
  httpProtocol.uri = endpoint;
  newOperation.requests[0].protocol.http = httpProtocol;

  // Add responses include exceptions
  addResponses(psContext, op, newOperation, model, emitterOptions);
  // Add extensions
  addExtensions(psContext, op, newOperation, model);
  operationGroup.addOperation(newOperation);
}