in packages/extensions/openapi-to-typespec/src/resource/parse-metadata.ts [147:223]
function buildResource(
resourceSchemaName: string,
set: OperationSet,
operationSets: OperationSet[],
codeModel: CodeModel,
): ArmResource {
const getOperation = buildLifeCycleOperation(set, HttpMethod.Get, "Get");
if (getOperation === undefined) {
logger().error(`Resource ${resourceSchemaName} must have a GET operation.`);
}
const createOperation = buildLifeCycleOperation(set, HttpMethod.Put, "CreateOrUpdate");
const updateOperation =
buildLifeCycleOperation(set, HttpMethod.Patch, "Update") ?? buildLifeCycleOperation(set, HttpMethod.Put, "Update");
const deleteOperation = buildLifeCycleOperation(set, HttpMethod.Delete, "Delete");
const existOperation = buildLifeCycleOperation(set, HttpMethod.Head, "CheckExistence");
const listOperation = buildListOperation(set);
const otherOperation = buildOtherOperation(set);
const resourceSchema = codeModel.schemas.objects?.find((o) => o.language.default.name === resourceSchemaName);
if (!resourceSchema) {
logger().error(`Cannot find resource schema for name ${resourceSchemaName}`);
}
const parents = getParents(set.RequestPath, operationSets);
const isTenantResource = parents.length > 0 && parents[0] === "TenantResource";
const isSubscriptionResource = parents.length > 0 && parents[0] === "SubscriptionResource";
const isManagementGroupResource = parents.length > 0 && parents[0] === "ManagementGroupResource";
const operationsFromResourceGroupExtension = [];
const operationsFromSubscriptionExtension = [];
const operationsFromManagementGroupExtension = [];
const operationsFromTenantExtension = [];
for (const extension of getExtensionOperation(set)) {
const extensionOperation = buildResourceOperationFromOperation(extension[0], "_");
switch (extension[1]) {
case "ResourceGroup":
operationsFromResourceGroupExtension.push(extensionOperation);
break;
case "Subscription":
operationsFromSubscriptionExtension.push(extensionOperation);
break;
case "ManagementGroup":
operationsFromManagementGroupExtension.push(extensionOperation);
break;
case "Tenant":
operationsFromTenantExtension.push(extensionOperation);
break;
}
}
return {
Name: lastWordToSingular(resourceSchemaName),
GetOperation: getOperation,
ExistOperation: existOperation,
CreateOperation: createOperation,
UpdateOperation: updateOperation,
DeleteOperation: deleteOperation,
ListOperations: listOperation ?? [],
OperationsFromResourceGroupExtension: operationsFromResourceGroupExtension,
OperationsFromSubscriptionExtension: operationsFromSubscriptionExtension,
OperationsFromManagementGroupExtension: operationsFromManagementGroupExtension,
OperationsFromTenantExtension: operationsFromTenantExtension,
OtherOperations: otherOperation,
Parents: parents,
SwaggerModelName: resourceSchemaName,
ResourceType: getResourceType(set.RequestPath),
ResourceKey: getResourceKey(set.RequestPath),
ResourceKeySegment: getResourceKeySegment(set.RequestPath),
IsTrackedResource: isTrackedResource(resourceSchema!),
IsTenantResource: isTenantResource,
IsSubscriptionResource: isSubscriptionResource,
IsManagementGroupResource: isManagementGroupResource,
IsExtensionResource: isScopedPath(set.RequestPath),
IsSingletonResource: isSingleton(set),
};
}