source: node_modules/@swagger-api/apidom-reference/cjs/dereference/index.cjs

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: 3.0 KB
Line 
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5exports.__esModule = true;
6exports.dereferenceApiDOM = exports.default = void 0;
7var _ramda = require("ramda");
8var _apidomCore = require("@swagger-api/apidom-core");
9var _File = _interopRequireDefault(require("../util/File.cjs"));
10var plugins = _interopRequireWildcard(require("../util/plugins.cjs"));
11var _UnmatchedDereferenceStrategyError = _interopRequireDefault(require("../errors/UnmatchedDereferenceStrategyError.cjs"));
12var _DereferenceError = _interopRequireDefault(require("../errors/DereferenceError.cjs"));
13var _index = _interopRequireDefault(require("../parse/index.cjs"));
14var _util = require("../options/util.cjs");
15var url = _interopRequireWildcard(require("../util/url.cjs"));
16/**
17 * Dereferences ApiDOM with all its external references.
18 */
19const dereferenceApiDOM = async (element, options) => {
20 // @ts-ignore
21 let parseResult = element;
22 let surrogateWrapping = false;
23
24 // wrap element into parse result
25 if (!(0, _apidomCore.isParseResultElement)(element)) {
26 const elementClone = (0, _apidomCore.cloneShallow)(element);
27 elementClone.classes.push('result');
28 parseResult = new _apidomCore.ParseResultElement([elementClone]);
29 surrogateWrapping = true;
30 }
31 const file = (0, _File.default)({
32 uri: options.resolve.baseURI,
33 parseResult,
34 mediaType: options.parse.mediaType
35 });
36 const dereferenceStrategies = await plugins.filter('canDereference', file, options.dereference.strategies);
37
38 // we couldn't find any dereference strategy for this File
39 if ((0, _ramda.isEmpty)(dereferenceStrategies)) {
40 throw new _UnmatchedDereferenceStrategyError.default(file.uri);
41 }
42 try {
43 const {
44 result
45 } = await plugins.run('dereference', [file, options], dereferenceStrategies);
46 // unwrap the element from ParseResult assuming first element is the actual result
47 return surrogateWrapping ? result.get(0) : result;
48 } catch (error) {
49 throw new _DereferenceError.default(`Error while dereferencing file "${file.uri}"`, {
50 cause: error
51 });
52 }
53};
54
55/**
56 * Dereferences a file with all its external references.
57 */
58exports.dereferenceApiDOM = dereferenceApiDOM;
59const dereference = async (uri, options) => {
60 const {
61 refSet
62 } = options.dereference;
63 const sanitizedURI = url.sanitize(uri);
64 let parseResult;
65
66 // if refSet was provided, use it to avoid unnecessary parsing
67 if (refSet !== null && refSet.has(sanitizedURI)) {
68 // @ts-ignore
69 ({
70 value: parseResult
71 } = refSet.find((0, _ramda.propEq)(sanitizedURI, 'uri')));
72 } else {
73 parseResult = await (0, _index.default)(uri, options);
74 }
75 const mergedOptions = (0, _util.merge)(options, {
76 resolve: {
77 baseURI: sanitizedURI
78 }
79 });
80 return dereferenceApiDOM(parseResult, mergedOptions);
81};
82var _default = exports.default = dereference;
Note: See TracBrowser for help on using the repository browser.