import stampit from 'stampit'; import { createNamespace, visit } from '@swagger-api/apidom-core'; import asyncApi2Namespace, { getNodeType, isAsyncApi2Element, keyMap, mediaTypes } from '@swagger-api/apidom-ns-asyncapi-2'; import ResolveStrategy from "../ResolveStrategy.mjs"; import ReferenceSet from "../../../ReferenceSet.mjs"; import Reference from "../../../Reference.mjs"; import AsyncApi2ResolveVisitor from "./visitor.mjs"; // @ts-ignore const visitAsync = visit[Symbol.for('nodejs.util.promisify.custom')]; const AsyncApi2ResolveStrategy = stampit(ResolveStrategy, { init() { this.name = 'asyncapi-2'; }, methods: { canResolve(file) { var _file$parseResult; // assert by media type if (file.mediaType !== 'text/plain') { return mediaTypes.includes(file.mediaType); } // assert by inspecting ApiDOM return isAsyncApi2Element((_file$parseResult = file.parseResult) === null || _file$parseResult === void 0 ? void 0 : _file$parseResult.api); }, async resolve(file, options) { const namespace = createNamespace(asyncApi2Namespace); const reference = Reference({ uri: file.uri, value: file.parseResult }); const visitor = AsyncApi2ResolveVisitor({ reference, namespace, options }); const refSet = ReferenceSet(); refSet.add(reference); await visitAsync(refSet.rootRef.value, visitor, { keyMap, nodeTypeGetter: getNodeType }); await visitor.crawl(); return refSet; } } }); export default AsyncApi2ResolveStrategy;