UNPKG

airship-server

Version:

Airship is a framework for Node.JS & TypeScript that helps you to write big, scalable and maintainable API servers.

101 lines 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SourceCode_1 = require("../../codeGen/domain/SourceCode"); const TypescriptCodeGenerator_1 = require("../../codeGen/infrastructure/TypescriptCodeGenerator"); const CustomType_1 = require("../../codeGen/domain/types/CustomType"); const ClassScheme_1 = require("../../codeGen/domain/schema/ClassScheme"); const ClassField_1 = require("../../codeGen/domain/schema/ClassField"); const VectorType_1 = require("../../codeGen/domain/types/VectorType"); class AirshipApiSDKGenerator { constructor() { this._codeGenerator = new TypescriptCodeGenerator_1.default(); } generateModelsFile(scheme) { let code = new SourceCode_1.default(); scheme.models.forEach(m => { code.append(this._codeGenerator.generateClass(m)); code.add(''); }); return code; } generateResponsesFile(scheme) { let code = new SourceCode_1.default(); code.add(`import * as Models from './Models'`); code.add(''); function prepareType(type) { if (type instanceof CustomType_1.default) return new CustomType_1.default(`Models.${type.name}`); if (type instanceof VectorType_1.default) return new VectorType_1.default(prepareType(type.item)); return type; } scheme.responses.forEach(r => { let fields = r.fields.map(f => { return new ClassField_1.default(f.name, prepareType(f.type), f.description); }); code.append(this._codeGenerator.generateClass(new ClassScheme_1.default(r.name, fields))); code.add(''); }); return code; } generateMethodsProps(scheme) { let code = new SourceCode_1.default(); code.add(`import * as Models from './Models'`); code.add(''); scheme.methods.forEach(m => { code.append(this._codeGenerator.generateApiMethodParamsInterface(m)); code.add(''); }); return code; } generateApiClassFile(scheme, config) { let code = new SourceCode_1.default(); code .add('/**') .add(' * This is an automatically generated code (and probably compiled with TSC)') .add(` * Generated at ${(new Date()).toString()}`) .add(` * Scheme version: ${config.schemeVersion}`) .add(' */') .add(`const API_PATH = '${config.apiPath}'`) .add(``) .add(`import * as Responses from './Responses'`) .add(`import * as MethodsProps from './MethodsProps'`) .add('') .add(`export default class ${config.sdkName} {`) .add(`public async call(method: string, params: Object, responseType?: Function): Promise<any> {`, 1) .add('return fetch(', 2) .add(`API_PATH + method,`, 3) .add(`{`, 3) .add(`method: 'POST',`, 4) .add(`body: JSON.stringify(params),`, 4) .add(`headers: {`, 4) .add(`'Content-Type': 'application/json'`, 5) .add(`}`, 4) .add(`}`, 3) .add(`)`, 2) .add(`.then(r => {`, 3) .add(`return r.json()`, 4) .add(`})`, 3) .add(`.then(json => {`, 3) .add(`if (json.ok == false)`, 4) .add(`throw Responses.ErrorResponse.deserialize(json)`, 5) .add(`else`, 4) .add(`return json`, 5) .add(`})`, 3) .add(`.then(data => {`, 3) .add(`if (responseType)`, 4) .add(`return (responseType as any).deserialize(data)`, 5) .add('') .add(`return data`, 4) .add(`})`, 3) .add(`}`, 1) .add(''); scheme.methods.forEach(m => { code.append(this._codeGenerator.generateApiMethod(m), 1); }); code.add('}'); return code; } } exports.default = AirshipApiSDKGenerator; //# sourceMappingURL=AirshipApiSDKGenerator.js.map