source: node_modules/@swagger-api/apidom-reference/es/resolve/index.mjs

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.9 KB
Line 
1import { isEmpty } from 'ramda';
2import { isParseResultElement, ParseResultElement, cloneShallow } from '@swagger-api/apidom-core';
3import { merge as mergeOptions } from "../options/util.mjs";
4import parse from "../parse/index.mjs";
5import * as plugins from "../util/plugins.mjs";
6import File from "../util/File.mjs";
7import ResolveError from "../errors/ResolverError.mjs";
8import UnmatchedResolveStrategyError from "../errors/UnmatchedResolveStrategyError.mjs";
9import * as url from "../util/url.mjs";
10/**
11 * Resolves ApiDOM with all its external references.
12 */
13export const resolveApiDOM = async (element, options) => {
14 // @ts-ignore
15 let parseResult = element;
16
17 // wrap element into parse result
18 if (!isParseResultElement(element)) {
19 // shallow clone of the element
20 const elementClone = cloneShallow(element);
21 elementClone.classes.push('result');
22 parseResult = new ParseResultElement([elementClone]);
23 }
24 const sanitizedURI = url.sanitize(url.stripHash(options.resolve.baseURI));
25 const file = File({
26 uri: sanitizedURI,
27 parseResult,
28 mediaType: options.parse.mediaType
29 });
30 const resolveStrategies = await plugins.filter('canResolve', file, options.resolve.strategies);
31
32 // we couldn't find any resolver for this File
33 if (isEmpty(resolveStrategies)) {
34 throw new UnmatchedResolveStrategyError(file.uri);
35 }
36 try {
37 const {
38 result
39 } = await plugins.run('resolve', [file, options], resolveStrategies);
40 return result;
41 } catch (error) {
42 throw new ResolveError(`Error while resolving file "${file.uri}"`, {
43 cause: error
44 });
45 }
46};
47
48/**
49 * Resolves a file with all its external references.
50 */
51const resolve = async (uri, options) => {
52 const parseResult = await parse(uri, options);
53 const mergedOptions = mergeOptions(options, {
54 resolve: {
55 baseURI: url.sanitize(uri)
56 }
57 });
58 return resolveApiDOM(parseResult, mergedOptions);
59};
60export default resolve;
Note: See TracBrowser for help on using the repository browser.