function convertResourceListOperations()

in packages/extensions/openapi-to-typespec/src/transforms/transform-arm-resources.ts [609:685]


function convertResourceListOperations(
  resourceMetadata: ArmResource,
  operations: Record<string, Operation>,
): TspArmResourceOperation[] {
  const converted: TspArmResourceOperation[] = [];

  // list by parent operation
  if (resourceMetadata.ListOperations.length) {
    // TODO: TParentName, TParentFriendlyName
    const operation = resourceMetadata.ListOperations[0];
    const swaggerOperation = operations[operation.OperationID];
    const armOperation = buildNewArmOperation(resourceMetadata, operation, swaggerOperation, "ArmResourceListByParent");

    const syncNames: NamesOfResponseTemplate = {
      _200Name: "ArmResponse",
      _200NameNoBody: "OkResponse",
      _201Name: "ArmResourceCreatedSyncResponse",
      _201NameNoBody: "CreatedResponse",
      _202Name: "AcceptedResponse",
      _202NameNoBody: "AcceptedResponse",
      _204Name: "NoContentResponse",
    };
    let responses = getTemplateResponses(swaggerOperation, syncNames);
    if (
      responses.length === 1 &&
      responses[0].name === syncNames._200Name &&
      responses[0].arguments?.[0].name === "ResourceListResult"
    )
      responses = [];
    if (responses.length > 0) armOperation.response = responses;

    converted.push(armOperation as TspArmResourceListOperation);
  }

  // list operation under subscription
  if (resourceMetadata.OperationsFromSubscriptionExtension.length) {
    for (const operation of resourceMetadata.OperationsFromSubscriptionExtension) {
      if (operation.PagingMetadata) {
        const swaggerOperation = operations[operation.OperationID];
        const armOperation = buildNewArmOperation(
          resourceMetadata,
          operation,
          swaggerOperation,
          "ArmResourceListAtScope",
        );

        const syncNames: NamesOfResponseTemplate = {
          _200Name: "ArmResponse",
          _200NameNoBody: "OkResponse",
          _201Name: "ArmResourceCreatedSyncResponse",
          _201NameNoBody: "CreatedResponse",
          _202Name: "AcceptedResponse",
          _202NameNoBody: "AcceptedResponse",
          _204Name: "NoContentResponse",
        };
        let responses = getTemplateResponses(swaggerOperation, syncNames);
        if (
          responses.length === 1 &&
          responses[0].name === syncNames._200Name &&
          responses[0].arguments?.[0].name === "ResourceListResult"
        )
          responses = [];
        if (responses.length > 0) armOperation.response = responses;

        // either list in location or list in subscription
        if (operation.Path.includes("/locations/")) {
          armOperation.baseParameters = [getFullyQualifiedName("LocationBaseParameters")];
        } else {
          armOperation.kind = "ArmListBySubscription";
        }
        converted.push(armOperation as TspArmResourceListOperation);
      }
    }
  }

  return converted;
}