java-apibuilder-generators-.../src/generators/java-client-generator.js

48 lines
1.7 KiB
JavaScript

const javaClient = require('../java-client')
const Mustache = require('mustache')
const fs = require('fs')
const path = require('path')
const utils = require('../utils')
const javaType = require('../java-type')
const templateApiConfig = fs.readFileSync(path.resolve(path.join('templates', 'jax-rs-config.java.mustache')), 'utf-8')
const templateApi = fs.readFileSync(path.resolve(path.join('templates', 'jax-rs-api.java.mustache')), 'utf-8')
const templateResource = fs.readFileSync(path.resolve(path.join('templates', 'jax-rs-resource.java.mustache')), 'utf-8')
module.exports = (service) => {
service.pascalcase = utils.pascalcase(service.name)
service.configName = `${utils.pascalcase(service.name)}ApiClientConfig`
service.package = service.namespace
const resources = javaClient.mapResources(service.resources, service.namespace)
service.headers = service.headers.map(header => {
header.type = javaType.mapJavaType(header.type, service.namespace)
header.label = utils.camelcase(header.name)
return header
})
const files = resources.map(resource => {
return {
name: `${resource.name}.java`,
dir: resource.dir,
contents: Mustache.render(templateResource, { service, ...resource })
}
})
return [
...files,
{
name: `${service.configName}.java`,
dir: service.namespace.replace(/\./g, '/'),
contents: Mustache.render(templateApiConfig, service)
},
{
name: `${service.pascalcase}ServiceClient.java`,
dir: service.namespace.replace(/\./g, '/'),
contents: Mustache.render(templateApi, service)
}
]
}