redoc/src/services/SpecStore.ts

52 lines
1.1 KiB
TypeScript
Raw Normal View History

2017-10-12 00:01:37 +03:00
import { observable, computed } from 'mobx';
// import { OpenAPIExternalDocumentation, OpenAPIInfo } from '../types';
import { MenuBuilder } from './MenuBuilder';
import { OpenAPIParser } from './OpenAPIParser';
import { ApiInfoModel } from './models/ApiInfo';
/**
* Store that containts all the specification related information in the form of tree
*/
export class SpecStore {
@observable.ref parser: OpenAPIParser;
constructor() {
this.parser = new OpenAPIParser();
}
load(specOrUrl: string | object) {
return this.parser.load(specOrUrl);
}
@computed
get loaded() {
return this.parser.loaded;
}
@computed
get info() {
if (!this.parser.loaded) return;
return new ApiInfoModel(this.parser);
}
@computed
get externalDocs() {
if (this.parser.loaded) return;
return this.parser.spec!.externalDocs;
}
@computed
get operationGroups() {
if (!this.parser.loaded) return [];
return MenuBuilder.buildStructure(this.parser);
}
@computed
get security() {
// TODO: implement security
throw new Error('Not implemented');
}
}