1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const json_ref_resolver_1 = require("@stoplight/json-ref-resolver");
|
4 | const yaml_1 = require("@stoplight/yaml");
|
5 | const node_fetch_1 = require("node-fetch");
|
6 | const nodes_1 = require("./graph/nodes");
|
7 | exports.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 | };
|
53 | class 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 | }
|
60 | exports.ResolveCache = ResolveCache;
|
61 |
|
\ | No newline at end of file |