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