export function retrieveAAZOperation()

in src/typespec-aaz/src/convertor.ts [122:192]


export function retrieveAAZOperation(
  context: AAZEmitterContext,
  operation: HttpOperation,
  pathItem: TypeSpecPathItem | undefined,
): TypeSpecPathItem {
  context.tracer.trace("RetrieveOperation", `${operation.verb} ${operation.path}`);
  if (!pathItem) {
    pathItem = {};
  }

  const verb = operation.verb;
  const opId = resolveOperationId(context, operation);
  if (!pathItem[verb]) {
    pathItem[verb] = {};
  }
  pathItem[verb]!.operationId = opId;
  pathItem[verb]!.pageable = extractPagedMetadata(context.program, operation);

  const metadateInfo = createMetadataInfo(context.program, {
    canonicalVisibility: Visibility.Read,
  });
  const typeNameOptions = {
    // shorten type names by removing TypeSpec and service namespace
    namespaceFilter(ns: Namespace) {
      return !isService(context.program, ns);
    },
  };
  const opContext: AAZOperationEmitterContext = {
    ...context,
    typeNameOptions,
    metadateInfo,
    operationId: opId,
    visibility: Visibility.Read,
    pendingSchemas: new TwoLevelMap(),
    refs: new TwoLevelMap(),
  };
  const verbVisibility = resolveRequestVisibility(context.program, operation.operation, verb);
  if (verb === "get") {
    opContext.visibility = Visibility.Query;
    pathItem[verb]!.read = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "read");
  } else if (verb === "head") {
    opContext.visibility = Visibility.Query;
    pathItem[verb]!.read = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "read");
  } else if (verb === "delete") {
    opContext.visibility = Visibility.Delete;
    pathItem[verb]!.create = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "create");
  } else if (verb === "post") {
    opContext.visibility = Visibility.Create;
    pathItem[verb]!.create = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "create");
  } else if (verb === "put") {
    opContext.visibility = Visibility.Create;
    pathItem[verb]!.create = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "create");
    opContext.visibility = Visibility.Update;
    opContext.pendingSchemas.clear();
    opContext.refs.clear();
    pathItem[verb]!.update = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "update");
  } else if (verb === "patch") {
    opContext.visibility = Visibility.Update;
    pathItem[verb]!.update = convert2CMDOperation(opContext, operation);
    processPendingSchemas(opContext, verbVisibility, "update");
  } else {
    console.log(" verb not expected: ", verb);
  }
  return pathItem;
}