UNPKG

@redocly/openapi-core

Version:

See https://github.com/Redocly/redocly-cli

103 lines (102 loc) 3.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SpecMajorVersion = exports.SpecVersion = void 0; exports.detectSpec = detectSpec; exports.getMajorSpecVersion = getMajorSpecVersion; exports.getTypes = getTypes; const oas2_1 = require("./types/oas2"); const oas3_1 = require("./types/oas3"); const oas3_1_1 = require("./types/oas3_1"); const asyncapi2_1 = require("./types/asyncapi2"); const asyncapi3_1 = require("./types/asyncapi3"); const arazzo_1 = require("./types/arazzo"); const overlay_1 = require("./types/overlay"); const utils_1 = require("./utils"); const arazzo_2 = require("./typings/arazzo"); var SpecVersion; (function (SpecVersion) { SpecVersion["OAS2"] = "oas2"; SpecVersion["OAS3_0"] = "oas3_0"; SpecVersion["OAS3_1"] = "oas3_1"; SpecVersion["Async2"] = "async2"; SpecVersion["Async3"] = "async3"; SpecVersion["Arazzo1"] = "arazzo1"; SpecVersion["Overlay1"] = "overlay1"; })(SpecVersion || (exports.SpecVersion = SpecVersion = {})); var SpecMajorVersion; (function (SpecMajorVersion) { SpecMajorVersion["OAS2"] = "oas2"; SpecMajorVersion["OAS3"] = "oas3"; SpecMajorVersion["Async2"] = "async2"; SpecMajorVersion["Async3"] = "async3"; SpecMajorVersion["Arazzo1"] = "arazzo1"; SpecMajorVersion["Overlay1"] = "overlay1"; })(SpecMajorVersion || (exports.SpecMajorVersion = SpecMajorVersion = {})); const typesMap = { [SpecVersion.OAS2]: oas2_1.Oas2Types, [SpecVersion.OAS3_0]: oas3_1.Oas3Types, [SpecVersion.OAS3_1]: oas3_1_1.Oas3_1Types, [SpecVersion.Async2]: asyncapi2_1.AsyncApi2Types, [SpecVersion.Async3]: asyncapi3_1.AsyncApi3Types, [SpecVersion.Arazzo1]: arazzo_1.Arazzo1Types, [SpecVersion.Overlay1]: overlay_1.Overlay1Types, }; function detectSpec(root) { if (!(0, utils_1.isPlainObject)(root)) { throw new Error(`Document must be JSON object, got ${typeof root}`); } if (root.openapi && typeof root.openapi !== 'string') { throw new Error(`Invalid OpenAPI version: should be a string but got "${typeof root.openapi}"`); } if (typeof root.openapi === 'string' && root.openapi.startsWith('3.0')) { return SpecVersion.OAS3_0; } if (typeof root.openapi === 'string' && root.openapi.startsWith('3.1')) { return SpecVersion.OAS3_1; } if (root.swagger && root.swagger === '2.0') { return SpecVersion.OAS2; } if (root.openapi || root.swagger) { throw new Error(`Unsupported OpenAPI version: ${root.openapi || root.swagger}`); } if (typeof root.asyncapi === 'string' && root.asyncapi.startsWith('2.')) { return SpecVersion.Async2; } if (typeof root.asyncapi === 'string' && root.asyncapi.startsWith('3.')) { return SpecVersion.Async3; } if (root.asyncapi) { throw new Error(`Unsupported AsyncAPI version: ${root.asyncapi}`); } if (typeof root.arazzo === 'string' && arazzo_2.VERSION_PATTERN.test(root.arazzo)) { return SpecVersion.Arazzo1; } if (typeof root.overlay === 'string' && arazzo_2.VERSION_PATTERN.test(root.overlay)) { return SpecVersion.Overlay1; } throw new Error(`Unsupported specification`); } function getMajorSpecVersion(version) { if (version === SpecVersion.OAS2) { return SpecMajorVersion.OAS2; } else if (version === SpecVersion.Async2) { return SpecMajorVersion.Async2; } else if (version === SpecVersion.Async3) { return SpecMajorVersion.Async3; } else if (version === SpecVersion.Arazzo1) { return SpecMajorVersion.Arazzo1; } else if (version === SpecVersion.Overlay1) { return SpecMajorVersion.Overlay1; } else { return SpecMajorVersion.OAS3; } } function getTypes(spec) { return typesMap[spec]; }