@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
206 lines • 7.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.managedServiceIdentityLibraryType = exports.planLibraryType = exports.extendedLocationLibraryType = exports.skuLibraryType = exports.isEquivalent = void 0;
const codemodel_1 = require("@autorest/codemodel");
const autorest_session_1 = require("../autorest-session");
const schemas_1 = require("./schemas");
function isEquivalent(schema, expected) {
var _a, _b, _c;
if (expected.type === "object") {
if (!(0, codemodel_1.isObjectSchema)(schema))
return false;
if (((_a = schema.properties) === null || _a === void 0 ? void 0 : _a.length) !== Object.keys(expected.properties).length)
return false;
for (const property of (_b = schema.properties) !== null && _b !== void 0 ? _b : []) {
if (property.serializedName in expected.properties) {
const expectedProperty = expected.properties[property.serializedName];
if (((_c = property.required) !== null && _c !== void 0 ? _c : false) !== expectedProperty.required)
return false;
if (expectedProperty.type === "primitive") {
if (expectedProperty.typeName !== property.schema.type)
return false;
}
else {
if (!isEquivalent(property.schema, expectedProperty.schema()))
return false;
}
}
else
return false;
}
}
else if (expected.type === "enum") {
if (expected.sealed && !(0, schemas_1.isSealedChoiceSchema)(schema))
return false;
if (!expected.sealed && !(0, schemas_1.isChoiceSchema)(schema))
return false;
const actualSchema = schema;
if (actualSchema.choices.length !== Object.keys(expected.values).length)
return false;
for (const choice of actualSchema.choices) {
if (choice.language.default.name in expected.values) {
if (expected.values[choice.language.default.name] !== choice.value)
return false;
}
else
return false;
}
}
else if (expected.type === "array") {
if (!(0, schemas_1.isArraySchema)(schema))
return false;
if (!isEquivalent(schema.elementType, expected.elementType()))
return false;
}
else if (expected.type === "primitive") {
if (!expected.schema(schema))
return false;
}
else if (expected.type === "dictionary") {
if (!(0, schemas_1.isDictionarySchema)(schema))
return false;
if (!isEquivalent(schema.elementType, expected.valueType()))
return false;
}
return true;
}
exports.isEquivalent = isEquivalent;
const skuTierLibraryType = {
name: "skuTier",
type: "enum",
sealed: true,
values: {
Free: "Free",
Basic: "Basic",
Standard: "Standard",
Premium: "Premium",
},
};
exports.skuLibraryType = {
name: "sku",
type: "object",
properties: {
name: { serializedName: "name", required: true, type: "primitive", typeName: codemodel_1.SchemaType.String },
tier: { serializedName: "tier", required: false, type: "nonPrimitive", schema: () => skuTierLibraryType },
size: { serializedName: "size", required: false, type: "primitive", typeName: codemodel_1.SchemaType.String },
family: {
serializedName: "family",
required: false,
type: "primitive",
typeName: codemodel_1.SchemaType.String,
},
capacity: {
serializedName: "capacity",
required: false,
type: "primitive",
typeName: codemodel_1.SchemaType.Integer,
},
},
};
const extendedLocationTypeLibraryType = {
name: "extendedLocationType",
type: "enum",
sealed: false,
values: {
Edge: "Edge",
CustomLocation: "CustomLocation",
},
};
exports.extendedLocationLibraryType = {
name: "extendedLocation",
type: "object",
properties: {
type: {
serializedName: "type",
required: true,
type: "nonPrimitive",
schema: () => extendedLocationTypeLibraryType,
},
name: { serializedName: "name", required: true, type: "primitive", typeName: codemodel_1.SchemaType.String },
},
};
exports.planLibraryType = {
name: "plan",
type: "object",
properties: {
name: { serializedName: "name", required: true, type: "primitive", typeName: codemodel_1.SchemaType.String },
publisher: {
serializedName: "publisher",
required: true,
type: "primitive",
typeName: "string",
},
product: {
serializedName: "product",
required: true,
type: "primitive",
typeName: "string",
},
promotionCode: {
serializedName: "promotionCode",
required: false,
type: "primitive",
typeName: "string",
},
version: {
serializedName: "version",
required: false,
type: "primitive",
typeName: "string",
},
},
};
const managedServiceIdentityTypeLibraryType = {
name: "managedServiceIdentityType",
type: "enum",
sealed: false,
values: {
None: "None",
SystemAssigned: "SystemAssigned",
UserAssigned: "UserAssigned",
"SystemAssigned,UserAssigned": "SystemAssigned,UserAssigned",
},
};
const managedServiceIdentityTypeLibraryTypeV4 = {
name: "managedServiceIdentityType",
type: "enum",
sealed: false,
values: {
None: "None",
SystemAssigned: "SystemAssigned",
UserAssigned: "UserAssigned",
"SystemAssigned, UserAssigned": "SystemAssigned, UserAssigned",
},
};
const userAssignedIdentityLibraryType = {
name: "userAssignedIdentity",
type: "object",
properties: {
principalId: { serializedName: "principalId", required: false, type: "primitive", typeName: codemodel_1.SchemaType.Uuid },
clientId: { serializedName: "clientId", required: false, type: "primitive", typeName: codemodel_1.SchemaType.Uuid },
},
};
exports.managedServiceIdentityLibraryType = {
name: "managedServiceIdentity",
type: "object",
properties: {
principalId: { serializedName: "principalId", required: false, type: "primitive", typeName: codemodel_1.SchemaType.Uuid },
tenantId: { serializedName: "tenantId", required: false, type: "primitive", typeName: codemodel_1.SchemaType.Uuid },
type: {
serializedName: "type",
required: true,
type: "nonPrimitive",
schema: () => (0, autorest_session_1.getArmCommonTypeVersion)() === "v4"
? managedServiceIdentityTypeLibraryTypeV4
: managedServiceIdentityTypeLibraryType,
},
// https://github.com/Azure/typespec-azure/issues/1163
userAssignedIdentities: {
serializedName: "userAssignedIdentities",
required: false,
type: "nonPrimitive",
schema: () => ({ name: "_", type: "dictionary", valueType: () => userAssignedIdentityLibraryType }),
},
},
};
//# sourceMappingURL=library-type-mapping.js.map