UNPKG

2.2 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const json_ref_resolver_1 = require("@stoplight/json-ref-resolver");
4const yaml_1 = require("@stoplight/yaml");
5const node_fetch_1 = require("node-fetch");
6const nodes_1 = require("./graph/nodes");
7exports.createResolver = (uriCache, getNodeByUri) => {
8 const httpReader = {
9 async resolve(uri) {
10 const res = await node_fetch_1.default(String(uri));
11 if (res.status >= 400) {
12 throw new Error(res.statusText);
13 }
14 return res.text();
15 },
16 };
17 const fileReader = {
18 resolve: async (uri) => {
19 const path = decodeURI(uri.valueOf());
20 const referredNode = getNodeByUri(path);
21 if (!referredNode) {
22 throw new Error(`Target $ref not found: ${String(uri)}`);
23 }
24 if (referredNode.category === nodes_1.NodeCategory.Virtual) {
25 throw new Error(`Resolving virtual nodes is not supported. Node Id = ${referredNode.id}`);
26 }
27 return referredNode.category === nodes_1.NodeCategory.Source ? referredNode.data.raw : referredNode.data.parsed;
28 },
29 };
30 return new json_ref_resolver_1.Resolver({
31 uriCache,
32 resolvers: {
33 http: httpReader,
34 https: httpReader,
35 file: fileReader,
36 },
37 parseResolveResult: async (opts) => {
38 const referredNode = getNodeByUri(opts.targetAuthority.toString());
39 if (referredNode && referredNode.category !== nodes_1.NodeCategory.Virtual) {
40 opts.result = referredNode.data.parsed;
41 }
42 else if (typeof opts.result === 'string') {
43 try {
44 opts.result = yaml_1.parse(opts.result);
45 }
46 catch (e) {
47 }
48 }
49 return opts;
50 },
51 });
52};
53class ResolveCache extends json_ref_resolver_1.Cache {
54 set(key, value) {
55 if (key.indexOf('http') === 0) {
56 super.set(key, value);
57 }
58 }
59}
60exports.ResolveCache = ResolveCache;
61//# sourceMappingURL=resolver.js.map
\No newline at end of file