@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
79 lines • 4.13 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformDataType = exports.getModel = void 0;
const codemodel_1 = require("@autorest/codemodel");
const data_types_1 = require("./data-types");
const generate_arm_resource_1 = require("./generate/generate-arm-resource");
const options_1 = require("./options");
const transform_arm_resources_1 = require("./transforms/transform-arm-resources");
const transform_choices_1 = require("./transforms/transform-choices");
const transform_object_1 = require("./transforms/transform-object");
const transform_operations_1 = require("./transforms/transform-operations");
const transform_service_information_1 = require("./transforms/transform-service-information");
const resource_discovery_1 = require("./utils/resource-discovery");
const schemas_1 = require("./utils/schemas");
const models = new Map();
function getModel(codeModel) {
let model = models.get(codeModel);
if (!model) {
(0, data_types_1.getDataTypes)(codeModel);
model = transformModel(codeModel);
models.set(codeModel, model);
}
return model;
}
exports.getModel = getModel;
function transformDataType(schema, codeModel) {
if ((0, codemodel_1.isObjectSchema)(schema)) {
return (0, transform_object_1.transformObject)(schema, codeModel);
}
if ((0, schemas_1.isChoiceSchema)(schema)) {
return (0, transform_choices_1.transformEnum)(schema, codeModel);
}
return {
name: (0, transform_object_1.getTypespecType)(schema, codeModel),
kind: "wildcard",
doc: schema.language.default.description,
};
}
exports.transformDataType = transformDataType;
function transformModel(codeModel) {
var _a, _b, _c, _d, _e, _f, _g;
const typespecEnums = [...((_a = codeModel.schemas.choices) !== null && _a !== void 0 ? _a : []), ...((_b = codeModel.schemas.sealedChoices) !== null && _b !== void 0 ? _b : [])]
.filter((c) => c.language.default.name !== "Versions")
.map((c) => (0, transform_choices_1.transformEnum)(c, codeModel));
const { isArm, namespace } = (0, options_1.getOptions)();
// objects need to be converted first because they are used in operation convertion
const typespecObjects = ((_c = codeModel.schemas.objects) !== null && _c !== void 0 ? _c : []).map((o) => (0, transform_object_1.transformObject)(o, codeModel));
const armResources = isArm
? (_e = (_d = codeModel.schemas.objects) === null || _d === void 0 ? void 0 : _d.filter((o) => (0, resource_discovery_1.isResourceSchema)(o)).map((o) => (0, transform_arm_resources_1.transformTspArmResource)(o))) !== null && _e !== void 0 ? _e : []
: [];
const serviceInformation = (0, transform_service_information_1.transformServiceInformation)(codeModel);
const typespecOperationGroups = [];
for (const og of codeModel.operationGroups) {
const typespecOperationGroup = (0, transform_operations_1.transformOperationGroup)(og, codeModel);
if (typespecOperationGroup.operations.length > 0) {
typespecOperationGroups.push(typespecOperationGroup);
}
}
let listOperationInfo = undefined;
const listOperation = codeModel.operationGroups.flatMap((g) => g.operations).find((o) => (0, transform_operations_1.isListOperation)(o));
if (listOperation !== undefined) {
const examples = {};
(0, generate_arm_resource_1.generateExamples)((_g = (_f = listOperation.extensions) === null || _f === void 0 ? void 0 : _f["x-ms-examples"]) !== null && _g !== void 0 ? _g : {}, listOperation.operationId, examples);
listOperationInfo = {
examples,
};
}
return {
serviceInformation,
models: {
enums: isArm ? (0, resource_discovery_1.filterArmEnums)(typespecEnums) : typespecEnums,
objects: isArm ? (0, resource_discovery_1.filterArmModels)(codeModel, typespecObjects) : typespecObjects,
armResources,
},
operationGroups: typespecOperationGroups,
listOperation: listOperationInfo,
};
}
//# sourceMappingURL=model.js.map
;