in packages/extensions/openapi-to-typespec/src/transforms/transform-arm-resources.ts [519:607]
function convertResourceDeleteOperation(
resourceMetadata: ArmResource,
operations: Record<string, Operation>,
): TspArmResourceOperation[] {
const { isFullCompatible } = getOptions();
if (resourceMetadata.DeleteOperation) {
const operation = resourceMetadata.DeleteOperation;
const swaggerOperation = operations[operation.OperationID];
const isLongRunning = swaggerOperation.extensions?.["x-ms-long-running-operation"] ?? false;
const armOperation = buildNewArmOperation(
resourceMetadata,
operation,
swaggerOperation,
isLongRunning ? "ArmResourceDeleteWithoutOkAsync" : "ArmResourceDeleteSync",
);
const finalStateVia =
swaggerOperation.extensions?.["x-ms-long-running-operation-options"]?.["final-state-via"] ?? "location";
armOperation.lroHeaders =
isLongRunning && finalStateVia === "azure-async-operation" ? "Azure-AsyncOperation" : undefined;
if (armOperation.lroHeaders && isFullCompatible) {
armOperation.suppressions = armOperation.suppressions ?? [];
armOperation.suppressions.push(getSuppressionWithCode(SuppressionCode.LroLocationHeader));
}
const asyncNames: NamesOfResponseTemplate = {
_200Name: "ArmResponse",
_200NameNoBody: "ArmDeletedResponse",
_201Name: "ArmResourceCreatedResponse",
_201NameNoBody: "CreatedResponse",
_202Name: "ArmDeleteAcceptedLroResponse",
_202NameNoBody: "ArmDeleteAcceptedLroResponse",
_204Name: "ArmDeletedNoContentResponse",
};
const syncNames: NamesOfResponseTemplate = {
_200Name: "ArmResponse",
_200NameNoBody: "ArmDeletedResponse",
_201Name: "ArmResourceCreatedSyncResponse",
_201NameNoBody: "CreatedResponse",
_202Name: "AcceptedResponse",
_202NameNoBody: "AcceptedResponse",
_204Name: "ArmDeletedNoContentResponse",
};
let responses = isLongRunning
? getTemplateResponses(swaggerOperation, asyncNames)
: getTemplateResponses(swaggerOperation, syncNames);
const templateAsyncResponses: TypespecTemplateModel[] = [
{
kind: "template",
name: asyncNames._202NameNoBody,
},
{
kind: "template",
name: asyncNames._204Name,
},
];
const templateSyncResponses: TypespecTemplateModel[] = [
{
kind: "template",
name: syncNames._200NameNoBody,
},
{
kind: "template",
name: syncNames._204Name,
},
];
if (isLongRunning && isSameResponses(responses, templateAsyncResponses)) responses = [];
if (!isLongRunning && isSameResponses(responses, templateSyncResponses)) responses = [];
if (armOperation.lroHeaders && responses) {
const _202response = responses.find(
(r) => r.name === asyncNames._202NameNoBody || r.name === asyncNames._202Name,
);
if (_202response) {
_202response.arguments = [
{ kind: "object", name: "ArmAsyncOperationHeader & Azure.Core.Foundations.RetryAfterHeader" },
]; //TO-DO: do it in a better way
armOperation.lroHeaders = undefined;
}
}
if (responses.length > 0) armOperation.response = responses;
buildSuppressionsForArmOperation(armOperation, asyncNames, syncNames);
return [armOperation as TspArmResourceLifeCycleOperation];
}
return [];
}