/
generate-spec.ts
46 lines (40 loc) · 1.62 KB
/
generate-spec.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
import * as ts from 'typescript';
import * as YAML from 'yamljs';
export { SpecConfig as SwaggerConfig, Config, RoutesConfig } from '../config';
import { ExtendedSpecConfig } from '../cli';
import { MetadataGenerator } from '../metadataGeneration/metadataGenerator';
import { Tsoa } from '../metadataGeneration/tsoa';
import { SpecGenerator2 } from '../swagger/specGenerator2';
import { SpecGenerator3 } from '../swagger/specGenerator3';
import { Swagger } from '../swagger/swagger';
import { fsExists, fsMkDir, fsWriteFile } from '../utils/fs';
export const generateSpec = async (
swaggerConfig: ExtendedSpecConfig,
compilerOptions?: ts.CompilerOptions,
ignorePaths?: string[],
/**
* pass in cached metadata returned in a previous step to speed things up
*/
metadata?: Tsoa.Metadata,
) => {
if (!metadata) {
metadata = new MetadataGenerator(swaggerConfig.entryFile, compilerOptions, ignorePaths, swaggerConfig.controllerPathGlobs).Generate();
}
let spec: Swagger.Spec;
if (swaggerConfig.specVersion && swaggerConfig.specVersion === 3) {
spec = new SpecGenerator3(metadata, swaggerConfig).GetSpec();
} else {
spec = new SpecGenerator2(metadata, swaggerConfig).GetSpec();
}
const exists = await fsExists(swaggerConfig.outputDirectory);
if (!exists) {
await fsMkDir(swaggerConfig.outputDirectory);
}
let data = JSON.stringify(spec, null, '\t');
if (swaggerConfig.yaml) {
data = YAML.stringify(JSON.parse(data), 10);
}
const ext = swaggerConfig.yaml ? 'yaml' : 'json';
await fsWriteFile(`${swaggerConfig.outputDirectory}/swagger.${ext}`, data, { encoding: 'utf8' });
return metadata;
};