@protocolnebula/ts-openapi-generator
Version:
Build API and models from Swagger/OpenAPI to use in any project type
71 lines (62 loc) • 2.41 kB
text/typescript
import * as fs from 'fs-extra';
import { config, ConfigI } from './models/config.model';
import { FileReaderService } from './services/parsers/file-reader.service';
import { APIParserService } from './services/parsers/open-api-v3/api-parser.service';
import { ComponentsParserService } from './services/parsers/open-api-v3/components-parser.service';
import { ApiWritterService } from './services/writters/api-writter.service';
import { ModelWritterService } from './services/writters/model-writter.service';
import { Store } from './stores/entities.store';
// Read the file
export async function generateAPIFiles(config: ConfigI) {
try {
// Check if the template does not exist
config.templatePath;
console.log('');
if (config.cleanFolder) {
console.log('Removing previously generated data...');
fs.removeSync(config.exportPath);
} else {
console.log('no-clean flag received, clean folder skipped');
}
console.log('');
console.log('Opening file:', config.fileURI);
const fileParser = new FileReaderService(config.fileURI, config);
console.log('Parsing file...');
console.log('');
const documentParsed = await fileParser.readFile();
fileParser.showDocumentInfo();
const modelParser = new ComponentsParserService(documentParsed, Store);
modelParser.process();
const apiParser = new APIParserService(documentParsed, Store);
apiParser.process();
console.info('Read complete');
console.info('');
if (config.template) {
console.info('Generating files');
const modelWritter = new ModelWritterService(Store, config);
modelWritter.write();
const apiWritter = new ApiWritterService(Store, config);
apiWritter.write();
console.info('Files generation finished');
} else {
console.info('No template specified, no APIs/MODELs will be generated');
}
if (config.mock) {
console.info('Generating mock files');
const generator = config.mock.generateBuilder();
await generator.generate();
console.log();
console.info('Mock files generation finished');
}
console.log();
} catch (exception) {
console.error('FATAL ERROR');
console.error(exception);
// Close up to three levels
console.groupEnd();
console.groupEnd();
console.groupEnd();
console.log('');
console.error('Application stopped');
}
}