@typespec/openapi3
Version:
TypeSpec library for emitting OpenAPI 3.0 and OpenAPI 3.1 from the TypeSpec REST protocol binding and converting OpenAPI3 to TypeSpec
51 lines • 1.6 kB
JavaScript
import { isDefaultResponse } from "@typespec/openapi";
import { createDiagnostic } from "./lib.js";
export function getOpenAPI3StatusCodes(program, statusCodes, response) {
if (isDefaultResponse(program, response) || statusCodes === "*") {
return [["default"], []];
}
else if (typeof statusCodes === "number") {
return [[String(statusCodes)], []];
}
else {
return rangeToOpenAPI(statusCodes, response);
}
}
function rangeToOpenAPI(range, diagnosticTarget) {
const diagnostics = [];
const reportInvalid = () => diagnostics.push(createDiagnostic({
code: "unsupported-status-code-range",
format: { start: String(range.start), end: String(range.end) },
target: diagnosticTarget,
}));
const codes = [];
let start = range.start;
let end = range.end;
if (range.start < 100) {
reportInvalid();
start = 100;
codes.push("default");
}
else if (range.end > 599) {
reportInvalid();
codes.push("default");
end = 599;
}
const groups = [1, 2, 3, 4, 5];
for (const group of groups) {
if (start > end) {
break;
}
const groupStart = group * 100;
const groupEnd = groupStart + 99;
if (start >= groupStart && start <= groupEnd) {
codes.push(`${group}XX`);
if (start !== groupStart || end < groupEnd) {
reportInvalid();
}
start = groupStart + 100;
}
}
return [codes, diagnostics];
}
//# sourceMappingURL=status-codes.js.map