UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

79 lines 4.13 kB
"use strict"; 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