Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ You can install ApiDOM packages using [npm CLI](https://docs.npmjs.com/cli):
$ npm install @swagger-api/apidom-parser-adapter-arazzo-yaml-1
$ npm install @swagger-api/apidom-parser-adapter-asyncapi-json-2
$ npm install @swagger-api/apidom-parser-adapter-asyncapi-yaml-2
$ npm install @swagger-api/apidom-parser-adapter-asyncapi-json-3
$ npm install @swagger-api/apidom-parser-adapter-asyncapi-yaml-3
$ npm install @swagger-api/apidom-parser-adapter-json
$ npm install @swagger-api/apidom-parser-adapter-json-schema-json-2020-12
$ npm install @swagger-api/apidom-parser-adapter-json-schema-yaml-2020-12
Expand Down Expand Up @@ -649,6 +651,7 @@ Available parser adapters for ApiDOM namespaces:
- API Design Systems - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-api-design-systems-json) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-api-design-systems-yaml)
- Arazzo 1.0.1 - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-arazzo-json-1) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-arazzo-yaml-1)
- AsyncAPI 2.x.y - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-asyncapi-json-2) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-asyncapi-yaml-2)
- AsyncAPI 3.x.y - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-asyncapi-json-3) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-asyncapi-yaml-3)
- JSON Schema 2020-12 - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-json-schema-json-2020-12) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-json-schema-yaml-2020-12)
- OpenAPI 2.0 - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-openapi-json-2) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-openapi-yaml-2)
- OpenAPI 3.0.x - [JSON](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-openapi-json-3-0) / [YAML](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-openapi-yaml-3-0)
Expand Down
2 changes: 2 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/apidom-ls/src/parser-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import * as openapi3_0AdapterYaml from '@swagger-api/apidom-parser-adapter-opena
import * as openapi3_1AdapterJson from '@swagger-api/apidom-parser-adapter-openapi-json-3-1';
import * as openapi3_1AdapterYaml from '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1';
import * as asyncapi2AdapterJson from '@swagger-api/apidom-parser-adapter-asyncapi-json-2';
import * as asyncapi3AdapterJson from '@swagger-api/apidom-parser-adapter-asyncapi-json-3';
import * as asyncapi2AdapterYaml from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2';
import * as asyncapi3AdapterJson from '@swagger-api/apidom-parser-adapter-asyncapi-json-3';
import * as asyncapi3AdapterYaml from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3';
import * as adsAdapterJson from '@swagger-api/apidom-parser-adapter-api-design-systems-json';
import * as adsAdapterYaml from '@swagger-api/apidom-parser-adapter-api-design-systems-yaml';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ export class DefaultValidationService implements ValidationService {
if (
nameSpace.namespace === 'asyncapi' &&
nameSpace.version &&
['3.0.0', '3.0.1'].includes(nameSpace.version)
['3.0.0'].includes(nameSpace.version)
) {
return [];
}
Expand Down
3 changes: 0 additions & 3 deletions packages/apidom-ns-asyncapi-3/src/media-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ const mediaTypes = new AsyncAPIMediaTypes(
'application/vnd.aai.asyncapi;version=3.0.0',
'application/vnd.aai.asyncapi+json;version=3.0.0',
'application/vnd.aai.asyncapi+yaml;version=3.0.0',
'application/vnd.aai.asyncapi;version=3.0.1',
'application/vnd.aai.asyncapi+json;version=3.0.1',
'application/vnd.aai.asyncapi+yaml;version=3.0.1',
);

export default mediaTypes;
15 changes: 10 additions & 5 deletions packages/apidom-ns-asyncapi-3/src/refractor/visitors/Visitor.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
import { Element, ObjectElement, deepmerge, hasElementSourceMap } from '@swagger-api/apidom-core';
import {
Element,
ObjectElement,
assignSourceMap,
deepmerge,
hasElementSourceMap,
} from '@swagger-api/apidom-core';

/**
* @public
Expand All @@ -19,10 +25,9 @@ class Visitor {
public copyMetaAndAttributes(from: Element, to: Element) {
if (from.meta.length > 0 || to.meta.length > 0) {
to.meta = deepmerge(to.meta, from.meta) as ObjectElement;
if (hasElementSourceMap(from)) {
// avoid deep merging of source maps
to.meta.set('sourceMap', from.meta.get('sourceMap'));
}
}
if (hasElementSourceMap(from)) {
assignSourceMap(to, from);
}
if (from.attributes.length > 0 || from.meta.length > 0) {
to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign
Expand Down
4 changes: 2 additions & 2 deletions packages/apidom-ns-asyncapi-3/test/refractor/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ describe('refractor', function () {
visitor: {
AsyncApiVersionElement(element: AsyncApiVersionElement) {
// @ts-ignore
element.content = '3.0.1'; // eslint-disable-line no-param-reassign
element.content = '3.0.0'; // eslint-disable-line no-param-reassign
},
},
post() {},
Expand Down Expand Up @@ -237,7 +237,7 @@ describe('refractor', function () {
plugins: [plugin1],
});

assert.deepEqual(toValue(asyncApiElement), { asyncapi: '3.0.1' });
assert.deepEqual(toValue(asyncApiElement), { asyncapi: '3.0.0' });
});
});

Expand Down
4 changes: 0 additions & 4 deletions packages/apidom-parser-adapter-asyncapi-json-3/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
`@swagger-api/apidom-parser-adapter-asyncapi-json-3` is a parser adapter for following AsyncAPI specification versions defined in [JSON format](https://www.json.org/json-en.html):

- [AsyncAPI 3.0.0 specification](https://github.com/asyncapi/spec/blob/v3.0.0/spec/asyncapi.md)
- [AsyncAPI 3.0.1 specification](https://github.com/asyncapi/spec/blob/v3.0.1/spec/asyncapi.md)

Under the hood this adapter uses [@swagger-api/apidom-parser-adapter-json](https://github.com/swagger-api/apidom/tree/main/packages/apidom-parser-adapter-json)
to parse a source string into generic ApiDOM in [base ApiDOM namespace](https://github.com/swagger-api/apidom/tree/main/packages/apidom-core#base-namespace)
Expand Down Expand Up @@ -31,8 +30,6 @@ Defines list of media types that this parser adapter recognizes.
[
'application/vnd.aai.asyncapi;version=3.0.0',
'application/vnd.aai.asyncapi+json;version=3.0.0',
'application/vnd.aai.asyncapi;version=3.0.1',
'application/vnd.aai.asyncapi+json;version=3.0.1',
]
```

Expand Down Expand Up @@ -70,7 +67,6 @@ import { parse, detect } from '@swagger-api/apidom-parser-adapter-asyncapi-json-

// detecting
await detect('{"asyncapi": "3.0.0"}'); // => true
await detect('{"asyncapi": "3.0.1"}'); // => true
await detect('test'); // => false

// parsing
Expand Down
4 changes: 1 addition & 3 deletions packages/apidom-parser-adapter-asyncapi-yaml-3/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ Defines list of media types that this parser adapter recognizes.
```js
[
'application/vnd.aai.asyncapi;version=3.0.0',
'application/vnd.aai.asyncapi+yaml;version=3.0.0',
'application/vnd.aai.asyncapi;version=3.0.1',
'application/vnd.aai.asyncapi+yaml;version=3.0.1',
'application/vnd.aai.asyncapi+yaml;version=3.0.0'
]
```

Expand Down
10 changes: 10 additions & 0 deletions packages/apidom-reference/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,8 @@ returns `true` or until entire list of parser plugins is exhausted (throws error
new OpenAPIYAML3_1Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON3Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML3Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoJSON1Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoYAML1Parser({ allowEmpty: true, sourceMap: false }),
new APIDesignSystemsJSONParser({ allowEmpty: true, sourceMap: false }),
Expand All @@ -410,7 +412,9 @@ import OpenAPIYAML3_0Parser from '@swagger-api/apidom-reference/parse/parsers/op
import OpenAPIJSON3_1Parser from '@swagger-api/apidom-reference/parse/parsers/openapi-json-3-1';
import OpenAPIYAML3_1Parser from '@swagger-api/apidom-reference/parse/parsers/openapi-yaml-3-1'
import AsyncAPIJSON2Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-json-2';
import AsyncAPIJSON3Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-json-3';
import AsyncAPIYAML2Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-yaml-2';
import AsyncAPIYAML3Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-yaml-3';
import ArazzoJSON1Parser from '@swagger-api/apidom-reference/parse/parsers/arazzo-json-1';
import ArazzoYAML1Parser from '@swagger-api/apidom-reference/parse/parsers/arazzo-yaml-1';
import APIDOMJSONParser from '@swagger-api/apidom-reference/parse/parsers/apidom-json';
Expand All @@ -430,6 +434,8 @@ options.parse.parsers = [
new OpenAPIYAML3_1Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON3Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML3Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoJSON1Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoYAML1Parser({ allowEmpty: true, sourceMap: false }),
new APIDesignSystemsJSONParser({ allowEmpty: true, sourceMap: false }),
Expand All @@ -452,7 +458,9 @@ import OpenAPIYAML3_0Parser from '@swagger-api/apidom-reference/parse/parsers/op
import OpenAPIJSON3_1Parser from '@swagger-api/apidom-reference/parse/parsers/openapi-json-3-1';
import OpenAPIYAML3_1Parser from '@swagger-api/apidom-reference/parse/parsers/openapi-yaml-3-1'
import AsyncAPIJSON2Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-json-2';
import AsyncAPIJSON3Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-json-3';
import AsyncAPIYAML2Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-yaml-2';
import AsyncAPIYAML3Parser from '@swagger-api/apidom-reference/parse/parsers/asyncapi-yaml-3';
import ArazzoJSON1Parser from '@swagger-api/apidom-reference/parse/parsers/arazzo-json-1';
import ArazzoYAML1Parser from '@swagger-api/apidom-reference/parse/parsers/arazzo-yaml-1';
import APIDOMJSONParser from '@swagger-api/apidom-reference/parse/parsers/apidom-json';
Expand All @@ -474,6 +482,8 @@ await parse('/home/user/oas.json', {
new OpenAPIYAML3_1Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON3Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML3Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoJSON1Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoYAML1Parser({ allowEmpty: true, sourceMap: false }),
new APIDesignSystemsJSONParser({ allowEmpty: true, sourceMap: false }),
Expand Down
14 changes: 14 additions & 0 deletions packages/apidom-reference/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@
"require": "./src/parse/parsers/asyncapi-yaml-2/index.cjs",
"types": "./types/parse/parsers/asyncapi-yaml-2/index.d.ts"
},
"./parse/parsers/asyncapi-json-3": {
"import": "./src/parse/parsers/asyncapi-json-3/index.mjs",
"require": "./src/parse/parsers/asyncapi-json-3/index.cjs",
"types": "./types/parse/parsers/asyncapi-json-3/index.d.ts"
},
"./parse/parsers/asyncapi-yaml-3": {
"import": "./src/parse/parsers/asyncapi-yaml-3/index.mjs",
"require": "./src/parse/parsers/asyncapi-yaml-3/index.cjs",
"types": "./types/parse/parsers/asyncapi-yaml-3/index.d.ts"
},
"./parse/parsers/arazzo-json-1": {
"import": "./src/parse/parsers/arazzo-json-1/index.mjs",
"require": "./src/parse/parsers/arazzo-json-1/index.cjs",
Expand Down Expand Up @@ -280,6 +290,8 @@
"@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.0",
Expand All @@ -302,6 +314,8 @@
"@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "*",
"@swagger-api/apidom-parser-adapter-asyncapi-json-2": "*",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "*",
"@swagger-api/apidom-parser-adapter-asyncapi-json-3": "*",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "*",
"@swagger-api/apidom-parser-adapter-json": "*",
"@swagger-api/apidom-parser-adapter-openapi-json-2": "*",
"@swagger-api/apidom-parser-adapter-openapi-json-3-0": "*",
Expand Down
4 changes: 4 additions & 0 deletions packages/apidom-reference/src/configuration/saturated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ import OpenAPIYAML3_0Parser from '../parse/parsers/openapi-yaml-3-0/index.ts';
import OpenAPIJSON3_1Parser from '../parse/parsers/openapi-json-3-1/index.ts';
import OpenAPIYAML3_1Parser from '../parse/parsers/openapi-yaml-3-1/index.ts';
import AsyncAPIJSON2Parser from '../parse/parsers/asyncapi-json-2/index.ts';
import AsyncAPIJSON3Parser from '../parse/parsers/asyncapi-json-3/index.ts';
import AsyncAPIYAML2Parser from '../parse/parsers/asyncapi-yaml-2/index.ts';
import AsyncAPIYAML3Parser from '../parse/parsers/asyncapi-yaml-3/index.ts';
import ArazzoJSON1Parser from '../parse/parsers/arazzo-json-1/index.ts';
import ArazzoYAML1Parser from '../parse/parsers/arazzo-yaml-1/index.ts';
import APIDOMJSONParser from '../parse/parsers/apidom-json/index.ts';
Expand All @@ -39,6 +41,8 @@ options.parse.parsers = [
new OpenAPIYAML3_1Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML2Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIJSON3Parser({ allowEmpty: true, sourceMap: false }),
new AsyncAPIYAML3Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoJSON1Parser({ allowEmpty: true, sourceMap: false }),
new ArazzoYAML1Parser({ allowEmpty: true, sourceMap: false }),
new APIDesignSystemsJSONParser({ allowEmpty: true, sourceMap: false }),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { pick } from 'ramda';
import { ParseResultElement } from '@swagger-api/apidom-core';
import {
parse,
mediaTypes as AsyncAPI3MediaTypes,
detect,
} from '@swagger-api/apidom-parser-adapter-asyncapi-json-3';

import ParserError from '../../../errors/ParserError.ts';
import Parser, { ParserOptions } from '../Parser.ts';
import File from '../../../File.ts';

export type { default as Parser, ParserOptions } from '../Parser.ts';
export type { default as File, FileOptions } from '../../../File.ts';

/**
* @public
*/
export interface AsyncAPIJSON3ParserOptions extends Omit<ParserOptions, 'name'> {}

/**
* @public
*/
class AsyncAPIJSON3Parser extends Parser {
public syntacticAnalysis?: 'direct' | 'indirect';

public refractorOpts!: object;

constructor(options?: AsyncAPIJSON3ParserOptions) {
const { fileExtensions = [], mediaTypes = AsyncAPI3MediaTypes, ...rest } = options ?? {};

super({ ...rest, name: 'asyncapi-json-3', fileExtensions, mediaTypes });
}

async canParse(file: File): Promise<boolean> {
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) {
return detect(file.toString());
}
return false;
}

async parse(file: File): Promise<ParseResultElement> {
const source = file.toString();

try {
const parserOpts = pick(['sourceMap', 'syntacticAnalysis', 'refractorOpts'], this);
return await parse(source, parserOpts);
} catch (error: unknown) {
throw new ParserError(`Error parsing "${file.uri}"`, { cause: error });
}
}
}

export default AsyncAPIJSON3Parser;
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { pick } from 'ramda';
import { ParseResultElement } from '@swagger-api/apidom-core';
import {
parse,
mediaTypes as AsyncAPI3MediaTypes,
detect,
} from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3';

import ParserError from '../../../errors/ParserError.ts';
import Parser, { ParserOptions } from '../Parser.ts';
import File from '../../../File.ts';

export type { default as Parser, ParserOptions } from '../Parser.ts';
export type { default as File, FileOptions } from '../../../File.ts';

/**
* @public
*/
export interface AsyncAPIYAML3ParserOptions extends Omit<ParserOptions, 'name'> {}

/**
* @public
*/
class AsyncAPIYAML3Parser extends Parser {
public refractorOpts!: object;

constructor(options?: AsyncAPIYAML3ParserOptions) {
const { fileExtensions = [], mediaTypes = AsyncAPI3MediaTypes, ...rest } = options ?? {};

super({ ...rest, name: 'asyncapi-yaml-3', fileExtensions, mediaTypes });
}

async canParse(file: File): Promise<boolean> {
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) {
return detect(file.toString());
}
return false;
}

async parse(file: File): Promise<ParseResultElement> {
const source = file.toString();
try {
const parserOpts = pick(['sourceMap', 'refractorOpts'], this);
return await parse(source, parserOpts);
} catch (error: unknown) {
throw new ParserError(`Error parsing "${file.uri}"`, { cause: error });
}
}
}

export default AsyncAPIYAML3Parser;
Loading