UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

106 lines 5.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTemplateResponses = exports.getSkipList = exports.isResourceListResult = exports.getFullyQualifiedName = void 0; const codemodel_1 = require("@autorest/codemodel"); const resource_equivalent_1 = require("../resource/resource-equivalent"); const model_generation_1 = require("./model-generation"); const response_1 = require("./response"); const schemas_1 = require("./schemas"); function getFullyQualifiedName(type, namespace = undefined) { switch (type) { case "TenantBaseParameters": case "BaseParameters": case "SubscriptionBaseParameters": case "ExtensionBaseParameters": case "LocationBaseParameters": case "DefaultBaseParameters": return `${namespace !== null && namespace !== void 0 ? namespace : "Azure.ResourceManager.Foundations"}.${type}`; default: return type; } } exports.getFullyQualifiedName = getFullyQualifiedName; function isResourceListResult(schema) { var _a, _b; if (!(0, schemas_1.isResponseSchema)(schema)) return false; if (!schema.schema.language.default.name.endsWith("ListResult")) return false; if (!(0, codemodel_1.isObjectSchema)(schema.schema)) return false; const valueSchema = (_a = schema.schema.properties) === null || _a === void 0 ? void 0 : _a.find((p) => p.language.default.name === "value"); if (valueSchema === undefined) return false; if (!(0, schemas_1.isArraySchema)(valueSchema.schema)) return false; const elementSchema = valueSchema.schema.elementType; if (!(0, codemodel_1.isObjectSchema)(elementSchema)) return false; if (!(0, resource_equivalent_1.isResource)(elementSchema)) return false; const nextLinkSchema = (_b = schema.schema.properties) === null || _b === void 0 ? void 0 : _b.find((p) => p.language.default.name === "nextLink"); if (nextLinkSchema === undefined) return false; if (!(0, schemas_1.isStringSchema)(nextLinkSchema.schema) && !(0, schemas_1.isUriSchema)(nextLinkSchema.schema)) return false; addToSkipList(schema.schema.language.default.name); return true; } exports.isResourceListResult = isResourceListResult; const skipSet = new Set(); function addToSkipList(name) { skipSet.add(name); } function getSkipList() { return skipSet; } exports.getSkipList = getSkipList; function getTemplateResponses(operation, namesOfResponseTemplate) { var _a, _b, _c, _d; const responses = []; const _200Response = (_a = operation.responses) === null || _a === void 0 ? void 0 : _a.find((r) => { var _a; return ((_a = r.protocol.http) === null || _a === void 0 ? void 0 : _a.statusCodes[0]) === "200"; }); if (_200Response) { responses.push(generateResponseWithBody(_200Response, namesOfResponseTemplate._200Name, namesOfResponseTemplate._200NameNoBody)); } const _201Response = (_b = operation.responses) === null || _b === void 0 ? void 0 : _b.find((r) => { var _a; return ((_a = r.protocol.http) === null || _a === void 0 ? void 0 : _a.statusCodes[0]) === "201"; }); if (_201Response) { responses.push(generateResponseWithBody(_201Response, namesOfResponseTemplate._201Name, namesOfResponseTemplate._201NameNoBody)); } const _202Response = (_c = operation.responses) === null || _c === void 0 ? void 0 : _c.find((r) => { var _a; return ((_a = r.protocol.http) === null || _a === void 0 ? void 0 : _a.statusCodes[0]) === "202"; }); if (_202Response) { if ((0, schemas_1.isResponseSchema)(_202Response)) { const equivalentResponse = (0, response_1.transformSchemaResponse)(_202Response); responses.push({ kind: "template", name: namesOfResponseTemplate._202Name, additionalProperties: [ { kind: "property", name: "_", isOptional: false, type: equivalentResponse.kind === "template" ? (0, model_generation_1.generateTemplateModel)(equivalentResponse) : _202Response.schema.language.default.name, decorators: [{ name: "bodyRoot" }], }, ], }); } else if (!(0, schemas_1.isResponseSchema)(_202Response)) { responses.push({ kind: "template", name: namesOfResponseTemplate._202NameNoBody }); } } const _204Response = (_d = operation.responses) === null || _d === void 0 ? void 0 : _d.find((r) => { var _a; return ((_a = r.protocol.http) === null || _a === void 0 ? void 0 : _a.statusCodes[0]) === "204"; }); if (_204Response) { responses.push({ kind: "template", name: namesOfResponseTemplate._204Name }); } return responses; } exports.getTemplateResponses = getTemplateResponses; function generateResponseWithBody(response, templateName, templateNameNoBody) { if (!(0, schemas_1.isResponseSchema)(response)) return { kind: "template", name: templateNameNoBody }; const equivalentResponse = (0, response_1.transformSchemaResponse)(response); return { kind: "template", name: templateName, arguments: [equivalentResponse] }; } //# sourceMappingURL=type-mapping.js.map