source: node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-json-3-1/index.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 2.0 KB
Line 
1/* eslint-disable camelcase */
2import { ParseResultElement } from '@swagger-api/apidom-core';
3import { ParserError, Parser } from '@swagger-api/apidom-reference/configuration/empty';
4import { mediaTypes, OpenApi3_1Element, OpenAPIMediaTypes } from '@swagger-api/apidom-ns-openapi-3-1';
5const OpenApiJson3_1Parser = Parser.compose({
6 props: {
7 name: 'openapi-json-3-1-swagger-client',
8 fileExtensions: ['.json'],
9 mediaTypes: new OpenAPIMediaTypes(...mediaTypes.filterByFormat('generic'), ...mediaTypes.filterByFormat('json')),
10 detectionRegExp: /"openapi"\s*:\s*"(?<version_json>3\.1\.(?:[1-9]\d*|0))"/
11 },
12 methods: {
13 async canParse(file) {
14 const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
15 const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
16 if (!hasSupportedFileExtension) return false;
17 if (hasSupportedMediaType) return true;
18 if (!hasSupportedMediaType) {
19 try {
20 const source = file.toString();
21 JSON.parse(source);
22 return this.detectionRegExp.test(source);
23 } catch (error) {
24 return false;
25 }
26 }
27 return false;
28 },
29 async parse(file) {
30 if (this.sourceMap) {
31 throw new ParserError("openapi-json-3-1-swagger-client parser plugin doesn't support sourceMaps option");
32 }
33 const parseResultElement = new ParseResultElement();
34 const source = file.toString();
35
36 // allow empty files
37 if (this.allowEmpty && source.trim() === '') {
38 return parseResultElement;
39 }
40 try {
41 const pojo = JSON.parse(source);
42 const element = OpenApi3_1Element.refract(pojo, this.refractorOpts);
43 element.classes.push('result');
44 parseResultElement.push(element);
45 return parseResultElement;
46 } catch (error) {
47 throw new ParserError(`Error parsing "${file.uri}"`, {
48 cause: error
49 });
50 }
51 }
52 }
53});
54export default OpenApiJson3_1Parser;
55/* eslint-enable camelcase */
Note: See TracBrowser for help on using the repository browser.