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