UNPKG

swagger-client

Version:

SwaggerJS - a collection of interfaces for OAI specs

62 lines (60 loc) 2.46 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var _jsYaml = _interopRequireWildcard(require("js-yaml")); var _apidomCore = require("@swagger-api/apidom-core"); var _empty = require("@swagger-api/apidom-reference/configuration/empty"); var _apidomNsOpenapi = require("@swagger-api/apidom-ns-openapi-3-1"); /* eslint-disable camelcase */ class OpenAPIYAML31Parser extends _empty.Parser { detectionRegExp = /(?<YAML>^(["']?)openapi\2\s*:\s*(["']?)(?<version_yaml>3\.1\.(?:[1-9]\d*|0))\3(?:\s+|$))|(?<JSON>"openapi"\s*:\s*"(?<version_json>3\.1\.(?:[1-9]\d*|0))")/m; constructor(options = {}) { super({ name: 'openapi-yaml-3-1-swagger-client', mediaTypes: new _apidomNsOpenapi.OpenAPIMediaTypes(..._apidomNsOpenapi.mediaTypes.filterByFormat('generic'), ..._apidomNsOpenapi.mediaTypes.filterByFormat('yaml')), ...options }); } async canParse(file) { const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension); const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType); if (!hasSupportedFileExtension) return false; if (hasSupportedMediaType) return true; if (!hasSupportedMediaType) { try { const source = file.toString(); _jsYaml.default.load(source); return this.detectionRegExp.test(source); } catch (error) { return false; } } return false; } async parse(file) { if (this.sourceMap) { throw new _empty.ParserError("openapi-yaml-3-1-swagger-client parser plugin doesn't support sourceMaps option"); } const parseResultElement = new _apidomCore.ParseResultElement(); const source = file.toString(); try { const pojo = _jsYaml.default.load(source, { schema: _jsYaml.JSON_SCHEMA }); if (this.allowEmpty && typeof pojo === 'undefined') { return parseResultElement; } const element = _apidomNsOpenapi.OpenApi3_1Element.refract(pojo, this.refractorOpts); element.classes.push('result'); parseResultElement.push(element); return parseResultElement; } catch (error) { throw new _empty.ParserError(`Error parsing "${file.uri}"`, { cause: error }); } } } var _default = exports.default = OpenAPIYAML31Parser; /* eslint-enable camelcase */