import stampit from 'stampit'; import { createNamespace, visit } from '@swagger-api/apidom-core'; import openapi2Namespace, { getNodeType, isSwaggerElement, keyMap, mediaTypes } from '@swagger-api/apidom-ns-openapi-2'; import ResolveStrategy from "../ResolveStrategy.mjs"; import ReferenceSet from "../../../ReferenceSet.mjs"; import Reference from "../../../Reference.mjs"; import OpenApi2ResolveVisitor from "./visitor.mjs"; // @ts-ignore const visitAsync = visit[Symbol.for('nodejs.util.promisify.custom')]; const OpenApi2ResolveStrategy = stampit(ResolveStrategy, { init() { this.name = 'openapi-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 isSwaggerElement((_file$parseResult = file.parseResult) === null || _file$parseResult === void 0 ? void 0 : _file$parseResult.api); }, async resolve(file, options) { const namespace = createNamespace(openapi2Namespace); const reference = Reference({ uri: file.uri, value: file.parseResult }); const visitor = OpenApi2ResolveVisitor({ reference, namespace, options }); const refSet = ReferenceSet(); refSet.add(reference); await visitAsync(refSet.rootRef.value, visitor, { keyMap, nodeTypeGetter: getNodeType }); return refSet; } } }); export default OpenApi2ResolveStrategy;