-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
util.ts
94 lines (81 loc) · 2.29 KB
/
util.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import yaml from 'js-yaml';
import { parse } from './parser';
import { ParserError } from './errors';
import type { AsyncAPIObject } from './spec-types';
/**
* @private
*/
export const toJS = (asyncapiYAMLorJSON: string | object) => {
if (!asyncapiYAMLorJSON) {
throw new ParserError({
type: 'null-or-falsy-document',
title: "Document can't be null or falsey.", // eslint-disable-line
});
}
if (
asyncapiYAMLorJSON.constructor &&
asyncapiYAMLorJSON.constructor.name === 'Object'
) {
return asyncapiYAMLorJSON;
}
if (typeof asyncapiYAMLorJSON !== 'string') {
throw new ParserError({
type: 'invalid-document-type',
title: 'The AsyncAPI document has to be either a string or a JS object.',
});
}
if (JSON.stringify(asyncapiYAMLorJSON).trimStart().startsWith('{')) {
throw new ParserError({
type: 'invalid-yaml',
title: 'The provided yaml is not valid.',
});
}
return yaml.load(asyncapiYAMLorJSON);
};
/**
*
* @param {Object} asyncapiDocuments
* @param {Object} options
* @param {boolean} options.xOrigin
* @returns {Array<Object>}
* @private
*/
export const resolve = async (
asyncapiDocuments: AsyncAPIObject[],
specVersion: number,
options: any
) => {
const docs = [];
try {
for (const asyncapiDocument of asyncapiDocuments) {
await parse(asyncapiDocument, specVersion, options);
docs.push(asyncapiDocument);
}
} catch (e) {} // eslint-disable-line
return docs;
};
/**
*
* @param asyncapiDocument {AsyncAPIObject}
* @returns {boolean}
*/
export function getSpecVersion(asyncapiDocument: AsyncAPIObject): number {
const versionString = asyncapiDocument.asyncapi;
return parseInt(versionString, 10);
}
export function versionCheck(asyncapiDocuments: AsyncAPIObject[]): number {
let currentVersion = getSpecVersion(asyncapiDocuments[0]);
for (const asyncapiDocument of asyncapiDocuments) {
const majorVersion = getSpecVersion(asyncapiDocument);
if (majorVersion !== currentVersion) {
throw new Error(
'Unable to bundle specification file of different major versions'
);
}
currentVersion = majorVersion;
}
return currentVersion;
}
export function isExternalReference(ref: string): boolean {
return typeof ref === 'string' && !ref.startsWith('#');
}