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