UNPKG

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