UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

124 lines 7.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getModelPropertiesDeclarations = getModelPropertiesDeclarations; exports.getModelPropertyDeclarations = getModelPropertyDeclarations; exports.getSpreadExpressionDecalaration = getSpreadExpressionDecalaration; exports.generateTemplateModel = generateTemplateModel; exports.generateAdditionalProperties = generateAdditionalProperties; exports.getArmCommonTypeModelName = getArmCommonTypeModelName; const autorest_session_1 = require("../autorest-session"); const decorators_1 = require("./decorators"); const docs_1 = require("./docs"); const suppressions_1 = require("./suppressions"); const type_mapping_1 = require("./type-mapping"); function getModelPropertiesDeclarations(properties) { const definitions = []; for (const property of properties) { definitions.push(...getModelPropertyDeclarations(property)); } return definitions; } function getModelPropertyDeclarations(property) { const definitions = []; const propertyDoc = (0, docs_1.generateDocs)(property); propertyDoc && definitions.push(propertyDoc); const decorators = (0, decorators_1.generateDecorators)(property.decorators); decorators && definitions.push(decorators); property.fixMe && property.fixMe.length && definitions.push(property.fixMe.join("\n")); let defaultValue = ""; if (property.defaultValue) { defaultValue = ` = ${property.defaultValue}`; } if (property.suppressions) { definitions.push(...(0, suppressions_1.generateSuppressions)(property.suppressions)); } definitions.push(`"${property.name}"${getOptionalOperator(property)}: ${getArmCommonTypeModelName((0, type_mapping_1.getFullyQualifiedName)(property.type))}${defaultValue};`); return definitions; } function getSpreadExpressionDecalaration(property) { return `...${generateTemplateModel(property.model)}`; } function getOptionalOperator(property) { return property.isOptional ? "?" : ""; } function generateTemplateModel(templateModel) { return `${templateModel.name}${templateModel.namedArguments ? `<${Object.keys(templateModel.namedArguments) .map((k) => `${k} = ${templateModel.name === "ResourceNameParameter" ? templateModel.namedArguments[k] : getArmCommonTypeModelName(templateModel.namedArguments[k])}`) .join(",")}>` : ""}${!templateModel.namedArguments && templateModel.arguments ? `<${templateModel.arguments .map((a) => a.kind === "template" ? generateTemplateModel(a) : `${getArmCommonTypeModelName(a.name)}${a.additionalProperties ? ` & { ${generateAdditionalProperties(a.additionalProperties)} }` : ""}`) .join(",")}>` : ""}${templateModel.additionalProperties ? ` & { ${generateAdditionalProperties(templateModel.additionalProperties)} }` : ""}${templateModel.additionalTemplateModel ? templateModel.additionalTemplateModel : ""}`; } function generateAdditionalProperties(properties) { return properties.map((p) => getModelPropertyDeclarations(p).join("\n")).join(";"); } const commonTypeMapping = { Resource: "Azure.ResourceManager.CommonTypes.Resource", TrackedResource: "Azure.ResourceManager.CommonTypes.TrackedResource", ProxyResource: "Azure.ResourceManager.CommonTypes.ProxyResource", Sku: "Azure.ResourceManager.CommonTypes.Sku", OperationListResult: "Azure.ResourceManager.CommonTypes.OperationListResult", Operation: "Azure.ResourceManager.CommonTypes.Operation", OperationDisplay: "Azure.ResourceManager.CommonTypes.OperationDisplay", OperationStatusResult: "Azure.ResourceManager.CommonTypes.OperationStatusResult", locationData: "Azure.ResourceManager.CommonTypes.LocationData", ErrorDetail: "Azure.ResourceManager.CommonTypes.ErrorDetail", ErrorAdditionalInfo: "Azure.ResourceManager.CommonTypes.ErrorAdditionalInfo", Identity: "Azure.ResourceManager.CommonTypes.Identity", systemData: "Azure.ResourceManager.CommonTypes.SystemData", Plan: "Azure.ResourceManager.CommonTypes.Plan", encryptionProperties: "Azure.ResourceManager.CommonTypes.EncryptionProperties", KeyVaultProperties: "Azure.ResourceManager.CommonTypes.KeyVaultProperties", ResourceModelWithAllowedPropertySet: "Azure.ResourceManager.CommonTypes.ResourceModelWithAllowedPropertySet", CheckNameAvailabilityRequest: "Azure.ResourceManager.CommonTypes.CheckNameAvailabilityRequest", CheckNameAvailabilityResponse: "Azure.ResourceManager.CommonTypes.CheckNameAvailabilityResponse", ErrorResponse: "Azure.ResourceManager.CommonTypes.ErrorResponse", SkuTier: "Azure.ResourceManager.CommonTypes.SkuTier", PrivateEndpoint: "Azure.ResourceManager.CommonTypes.PrivateEndpoint", PrivateLinkResource: "Azure.ResourceManager.CommonTypes.PrivateLinkResource", PrivateEndpointConnection: "Azure.ResourceManager.CommonTypes.PrivateEndpointConnection", PrivateEndpointConnectionProperties: "Azure.ResourceManager.CommonTypes.PrivateEndpointConnectionProperties", PrivateLinkServiceConnectionState: "Azure.ResourceManager.CommonTypes.PrivateLinkServiceConnectionState", PrivateLinkResourceProperties: "Azure.ResourceManager.CommonTypes.PrivateLinkResourceProperties", PrivateEndpointServiceConnectionStatus: "Azure.ResourceManager.CommonTypes.PrivateEndpointServiceConnectionStatus", PrivateEndpointConnectionProvisioningState: "Azure.ResourceManager.CommonTypes.PrivateEndpointConnectionProvisioningState", ManagedServiceIdentity: "Azure.ResourceManager.CommonTypes.ManagedServiceIdentity", UserAssignedIdentities: "Azure.ResourceManager.CommonTypes.UserAssignedIdentities", SystemAssignedServiceIdentity: "Azure.ResourceManager.CommonTypes.SystemAssignedServiceIdentity", UserAssignedIdentity: "Azure.ResourceManager.CommonTypes.UserAssignedIdentity", ManagedServiceIdentityType: "Azure.ResourceManager.CommonTypes.ManagedServiceIdentityType", SystemAssignedServiceIdentityType: "Azure.ResourceManager.CommonTypes.SystemAssignedServiceIdentityType", }; function getArmCommonTypeModelName(model) { if (!(0, autorest_session_1.isCommonTypeModel)(model)) { return model; } const version = (0, autorest_session_1.getArmCommonTypeVersion)(); if (model === "PrivateEndpointConnectionListResult") { if (["v3", "v4", "v5"].includes(version)) { return "Azure.ResourceManager.CommonTypes.PrivateEndpointConnectionListResultV5"; } else { return "Azure.ResourceManager.CommonTypes.PrivateEndpointConnectionListResult"; } } else if (model === "PrivateLinkResourceListResult") { if (["v3", "v4", "v5"].includes(version)) { return "Azure.ResourceManager.CommonTypes.PrivateLinkResourceListResultV5"; } else { return "Azure.ResourceManager.CommonTypes.PrivateLinkResourceListResult"; } } return commonTypeMapping[model] || model; } //# sourceMappingURL=model-generation.js.map