2017-11-19 13:51:59 +03:00
|
|
|
import * as JsonSchemaRefParser from 'json-schema-ref-parser';
|
2017-11-15 00:40:38 +03:00
|
|
|
import { convertObj } from 'swagger2openapi';
|
|
|
|
import { OpenAPISpec } from '../types';
|
|
|
|
|
2017-11-19 13:51:59 +03:00
|
|
|
export async function loadAndBundleSpec(specUrlOrObject: object | string): Promise<OpenAPISpec> {
|
2018-01-22 21:30:53 +03:00
|
|
|
const parser = new JsonSchemaRefParser();
|
|
|
|
const spec = await parser.bundle(specUrlOrObject, {
|
2017-11-19 13:51:59 +03:00
|
|
|
resolve: { http: { withCredentials: false } },
|
|
|
|
} as object);
|
|
|
|
|
|
|
|
if (spec.swagger !== undefined) {
|
|
|
|
return convertSwagger2OpenAPI(spec);
|
|
|
|
} else {
|
|
|
|
return spec;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-15 00:40:38 +03:00
|
|
|
export function convertSwagger2OpenAPI(spec: any): Promise<OpenAPISpec> {
|
2017-11-15 17:16:28 +03:00
|
|
|
console.warn('[ReDoc Compatibility mode]: Converting OpenAPI 2.0 to OpenAPI 3.0');
|
2017-11-15 00:40:38 +03:00
|
|
|
return new Promise<OpenAPISpec>((resolve, reject) =>
|
2017-11-23 14:40:21 +03:00
|
|
|
convertObj(spec, { patch: true, warnOnly: true }, (err, res) => {
|
2017-11-15 00:40:38 +03:00
|
|
|
// TODO: log any warnings
|
|
|
|
if (err) {
|
|
|
|
return reject(err);
|
|
|
|
}
|
|
|
|
resolve(res && (res.openapi as any));
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
}
|