source: node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/json/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: 1.6 KB
Line 
1import { from, ParseResultElement } from '@swagger-api/apidom-core';
2import { ParserError, Parser } from '@swagger-api/apidom-reference/configuration/empty';
3const JsonParser = Parser.compose({
4 props: {
5 name: 'json-swagger-client',
6 fileExtensions: ['.json'],
7 mediaTypes: ['application/json']
8 },
9 methods: {
10 async canParse(file) {
11 const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
12 const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
13 if (!hasSupportedFileExtension) return false;
14 if (hasSupportedMediaType) return true;
15 if (!hasSupportedMediaType) {
16 try {
17 JSON.parse(file.toString());
18 return true;
19 } catch (error) {
20 return false;
21 }
22 }
23 return false;
24 },
25 async parse(file) {
26 if (this.sourceMap) {
27 throw new ParserError("json-swagger-client parser plugin doesn't support sourceMaps option");
28 }
29 const parseResultElement = new ParseResultElement();
30 const source = file.toString();
31
32 // allow empty files
33 if (this.allowEmpty && source.trim() === '') {
34 return parseResultElement;
35 }
36 try {
37 const element = from(JSON.parse(source));
38 element.classes.push('result');
39 parseResultElement.push(element);
40 return parseResultElement;
41 } catch (error) {
42 throw new ParserError(`Error parsing "${file.uri}"`, {
43 cause: error
44 });
45 }
46 }
47 }
48});
49export default JsonParser;
Note: See TracBrowser for help on using the repository browser.