Skip to content

Commit 6fd34b6

Browse files
feat(parser-adapter-asyncapi-yaml-3): add package for parser adapter … (#5047)
* feat(parser-adapter-asyncapi-yaml-3): parser
1 parent 831a533 commit 6fd34b6

File tree

35 files changed

+2468
-25
lines changed

35 files changed

+2468
-25
lines changed

package-lock.json

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/apidom-ls/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
"@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-rc.3",
107107
"@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.3",
108108
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.3",
109+
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.0-rc.3",
109110
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.3",
110111
"@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.3",
111112
"@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.3",

packages/apidom-ls/src/services/validation/validation-service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,14 @@ export class DefaultValidationService implements ValidationService {
450450

451451
let processedText;
452452
const nameSpace = await findNamespace(text, this.settings?.defaultContentLanguage);
453+
// TODO: Turned off validation, because we will implement it in the future.
454+
if (
455+
nameSpace.namespace === 'asyncapi' &&
456+
nameSpace.version &&
457+
['3.0.0', '3.0.1'].includes(nameSpace.version)
458+
) {
459+
return [];
460+
}
453461
let docNs: string = nameSpace.namespace;
454462
// no API document has been parsed
455463
if (result.annotations) {

packages/apidom-ls/src/utils/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as openapi31xAdapterJson from '@swagger-api/apidom-parser-adapter-opena
66
import * as openapi31xAdapterYaml from '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1';
77
import * as asyncapi2AdapterJson from '@swagger-api/apidom-parser-adapter-asyncapi-json-2';
88
import * as asyncapi2AdapterYaml from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2';
9+
import * as asyncapi3AdapterYaml from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3';
910
import * as adsAdapterJson from '@swagger-api/apidom-parser-adapter-api-design-systems-json';
1011
import * as adsAdapterYaml from '@swagger-api/apidom-parser-adapter-api-design-systems-yaml';
1112
import * as adapterJson from '@swagger-api/apidom-parser-adapter-json';
@@ -836,6 +837,19 @@ export async function findNamespace(
836837
};
837838
}
838839

840+
if (await asyncapi3AdapterYaml.detect(text)) {
841+
const asyncapi3YamlMatch = text.match(asyncapi3AdapterYaml.detectionRegExp)!;
842+
const groups = asyncapi3YamlMatch.groups!;
843+
const version = groups.version_json ?? groups.version_yaml;
844+
845+
return {
846+
namespace: 'asyncapi',
847+
version,
848+
format: 'YAML',
849+
mediaType: asyncapi3AdapterYaml.mediaTypes.findBy(version, 'yaml'),
850+
};
851+
}
852+
839853
if (await openapi2AdapterJson.detect(text)) {
840854
const openapi2JsonMatch = text.match(openapi2AdapterJson.detectionRegExp)!;
841855
const groups = openapi2JsonMatch.groups!;

packages/apidom-ls/test/hover-provider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,9 @@ describe('apidom-ls-hover-provider', function () {
438438
logLevel,
439439
};
440440

441-
it('test hover ref provider', async function () {
441+
// TODO: Flaky test.
442+
// eslint-disable-next-line mocha/no-skipped-tests
443+
xit('test hover ref provider', async function () {
442444
let languageService: LanguageService = getLanguageService(contextAsyncRef);
443445

444446
try {

packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/messages/index.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import { Mixin } from 'ts-mixer';
2-
import { test } from 'ramda';
32
import { ObjectElement } from '@swagger-api/apidom-core';
43
import { isReferenceLikeElement } from '@swagger-api/apidom-ns-asyncapi-2';
54

6-
import PatternedFieldsVisitor, {
7-
PatternedFieldsVisitorOptions,
8-
SpecPath,
9-
} from '../../generics/PatternedFieldsVisitor.ts';
5+
import MapVisitor, { SpecPath, MapVisitorOptions } from '../../generics/MapVisitor.ts';
106
import FallbackVisitor, { FallbackVisitorOptions } from '../../FallbackVisitor.ts';
117
import MessagesElement from '../../../../elements/Messages.ts';
128
import ReferenceElement from '../../../../elements/Reference.ts';
@@ -15,14 +11,12 @@ import { isReferenceElement } from '../../../../predicates.ts';
1511
/**
1612
* @public
1713
*/
18-
export interface MessagesVisitorOptions
19-
extends PatternedFieldsVisitorOptions,
20-
FallbackVisitorOptions {}
14+
export interface MessagesVisitorOptions extends MapVisitorOptions, FallbackVisitorOptions {}
2115

2216
/**
2317
* @public
2418
*/
25-
class MessagesVisitor extends Mixin(PatternedFieldsVisitor, FallbackVisitor) {
19+
class MessagesVisitor extends Mixin(MapVisitor, FallbackVisitor) {
2620
declare public readonly element: MessagesElement;
2721

2822
declare protected readonly specPath: SpecPath<
@@ -41,12 +35,10 @@ class MessagesVisitor extends Mixin(PatternedFieldsVisitor, FallbackVisitor) {
4135
: ['document', 'objects', 'Message'];
4236
};
4337
this.canSupportSpecificationExtensions = false;
44-
// @ts-ignore
45-
this.fieldPatternPredicate = test(/^[A-Za-z0-9_-]+$/);
4638
}
4739

4840
ObjectElement(objectElement: ObjectElement) {
49-
const result = PatternedFieldsVisitor.prototype.ObjectElement.call(this, objectElement);
41+
const result = MapVisitor.prototype.ObjectElement.call(this, objectElement);
5042

5143
// @ts-ignore
5244
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {

packages/apidom-ns-asyncapi-3/src/refractor/visitors/async-api-3/operations/index.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import { Mixin } from 'ts-mixer';
2-
import { test } from 'ramda';
32
import { ObjectElement } from '@swagger-api/apidom-core';
43
import { isReferenceLikeElement } from '@swagger-api/apidom-ns-asyncapi-2';
54

6-
import PatternedFieldsVisitor, {
7-
PatternedFieldsVisitorOptions,
8-
SpecPath,
9-
} from '../../generics/PatternedFieldsVisitor.ts';
5+
import MapVisitor, { MapVisitorOptions, SpecPath } from '../../generics/MapVisitor.ts';
106
import FallbackVisitor, { FallbackVisitorOptions } from '../../FallbackVisitor.ts';
117
import OperationsElement from '../../../../elements/Operations.ts';
128
import ReferenceElement from '../../../../elements/Reference.ts';
@@ -15,14 +11,12 @@ import { isReferenceElement } from '../../../../predicates.ts';
1511
/**
1612
* @public
1713
*/
18-
export interface OperationsVisitorOptions
19-
extends PatternedFieldsVisitorOptions,
20-
FallbackVisitorOptions {}
14+
export interface OperationsVisitorOptions extends MapVisitorOptions, FallbackVisitorOptions {}
2115

2216
/**
2317
* @public
2418
*/
25-
class OperationsVisitor extends Mixin(PatternedFieldsVisitor, FallbackVisitor) {
19+
class OperationsVisitor extends Mixin(MapVisitor, FallbackVisitor) {
2620
declare public readonly element: OperationsElement;
2721

2822
declare protected readonly specPath: SpecPath<
@@ -41,12 +35,10 @@ class OperationsVisitor extends Mixin(PatternedFieldsVisitor, FallbackVisitor) {
4135
: ['document', 'objects', 'Operation'];
4236
};
4337
this.canSupportSpecificationExtensions = false;
44-
// @ts-ignore
45-
this.fieldPatternPredicate = test(/^[A-Za-z0-9_-]+$/);
4638
}
4739

4840
ObjectElement(objectElement: ObjectElement) {
49-
const result = PatternedFieldsVisitor.prototype.ObjectElement.call(this, objectElement);
41+
const result = MapVisitor.prototype.ObjectElement.call(this, objectElement);
5042

5143
// @ts-ignore
5244
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**/*.js
2+
/**/*.mjs
3+
/**/*.cjs
4+
/dist
5+
/types
6+
/config
7+
/.nyc_output
8+
/node_modules
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/src/**/*.mjs
2+
/src/**/*.cjs
3+
/test/**/*.mjs
4+
/dist
5+
/types
6+
/NOTICE
7+
/swagger-api-apidom-parser-adapter-asyncapi-yaml-3-*.tgz
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"extensions": ["ts"],
3+
"loader": "ts-node/esm",
4+
"recursive": true,
5+
"spec": "test/**/*.ts",
6+
"file": ["test/mocha-bootstrap.ts"],
7+
"ignore": ["test/perf/**/*.ts"]
8+
}

0 commit comments

Comments
 (0)