@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
124 lines • 7.11 kB
JavaScript
;
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