redoc/src/services/models/ApiInfo.ts
2018-10-05 16:48:08 +03:00

49 lines
1.4 KiB
TypeScript

import { OpenAPIContact, OpenAPIInfo, OpenAPILicense } from '../../types';
import { IS_BROWSER } from '../../utils/';
import { OpenAPIParser } from '../OpenAPIParser';
export class ApiInfoModel implements OpenAPIInfo {
title: string;
version: string;
description: string;
termsOfService?: string;
contact?: OpenAPIContact;
license?: OpenAPILicense;
downloadLink?: string;
downloadFileName?: string;
constructor(private parser: OpenAPIParser) {
Object.assign(this, parser.spec.info);
this.description = parser.spec.info.description || '';
const firstHeadingLinePos = this.description.search(/^##?\s+/m);
if (firstHeadingLinePos > -1) {
this.description = this.description.substring(0, firstHeadingLinePos);
}
this.downloadLink = this.getDownloadLink();
this.downloadFileName = this.getDownloadFileName();
}
private getDownloadLink(): string | undefined {
if (this.parser.specUrl) {
return this.parser.specUrl;
}
if (IS_BROWSER && window.Blob && window.URL && window.URL.createObjectURL) {
const blob = new Blob([JSON.stringify(this.parser.spec, null, 2)], {
type: 'application/json',
});
return window.URL.createObjectURL(blob);
}
}
private getDownloadFileName(): string | undefined {
if (!this.parser.specUrl) {
return 'swagger.json';
}
return undefined;
}
}