airship-server
Version:
Airship is a framework for Node.JS & TypeScript that helps you to write big, scalable and maintainable API servers.
106 lines (80 loc) • 2.93 kB
text/typescript
import BaseConsoleApplication from "../../utils/BaseConsoleApplication";
import AirshipSDKGenerator from "../application/AirshipSDKGenerator";
import AirshipApiSDKGenerator from "../infrastructure/AirshipApiSDKGenerator";
import ConsoleLogger from "../../logger/infrustructure/ConsoleLogger";
import ApiSchema from "../../schemeGenerator/domain/ApiSchema";
import {mkdirSync, readdirSync} from "fs";
class AirshipSDKGeneratorApplication extends BaseConsoleApplication {
constructor() {
super()
try {
this.run()
}
catch (e) {
console.log(e)
}
}
private async run() {
let args: any = this.getArgs()
let schemePath = args['s']
let outPath = args['o']
if (!schemePath || !outPath)
this.die('usage: --s=<schemes_path> --o=<output_path>')
let logger = new ConsoleLogger()
let schemeFiles = await this.readDir(schemePath)
schemeFiles = schemeFiles.filter(f => f !== '.DS_Store')
let schemeVersions = schemeFiles
.map(f =>
f
.replace('api-scheme-v', '')
.replace('.json', '')
)
.map(v => parseInt(v, 10))
.sort((a,b) => a-b)
console.log(schemeVersions)
logger.log('Found schemes', schemeVersions.map(v => 'V'+v).join(', '))
let lastSchemeVersion = schemeVersions[schemeVersions.length - 1]
let lastSchemeFileName = schemeFiles.find(file =>
file
.replace('api-scheme-v', '')
.replace('.json','')
=== String(lastSchemeVersion)
)
let schema = await this.readFile(schemePath + '/' + lastSchemeFileName)
let apiSchema = ApiSchema.deserialize(JSON.parse(schema))
logger.log('Last scheme:', 'V' + lastSchemeVersion)
try {
readdirSync(outPath + `/sdk-v${lastSchemeVersion}/`)
logger.warn(`Already have SDK for V${lastSchemeVersion}, force generating`)
//this.die('')
}
catch (e) {
}
let airshipSDKGenerator = new AirshipSDKGenerator(
new AirshipApiSDKGenerator(),
apiSchema,
{
sdkName: 'AirshipApi',
apiPath: '/api/',
schemeVersion: Number(lastSchemeVersion)
},
logger
)
let sdk = airshipSDKGenerator.generate()
let sdkPath = outPath + `/sdk-v${lastSchemeVersion}/`
try {
mkdirSync(sdkPath)
}
catch (e) {
}
for (let file of sdk) {
logger.log('Saving', file.fileName)
await this.saveToFile(
sdkPath + file.fileName,
file.code.render()
)
}
logger.log('Done')
}
}
new AirshipSDKGeneratorApplication()