Skip to content

Commit bd79bf9

Browse files
committed
feat: generating clients/servers from remote template providers
1 parent cd8a984 commit bd79bf9

File tree

2 files changed

+63
-21
lines changed

2 files changed

+63
-21
lines changed

cg.js

+23-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ const fetch = require('node-fetch');
1212
const co = require('co');
1313
const swagger2openapi = require('swagger2openapi');
1414
const stools = require('swagger-tools');
15+
const mkdirp = require('mkdirp');
16+
const rimraf = require('rimraf');
1517
const admzip = require('adm-zip');
1618

1719
const processor = require('./local.js');
@@ -66,7 +68,7 @@ let remoteConfig = configName.indexOf(':')>-1;
6668
let configPath = path.dirname(configStr);
6769
if (!configPath || (configPath === '.')) configPath = './configs';
6870
let configFile = path.resolve(configPath,configName)+'.json';
69-
let config = require(configFile);
71+
let config = remoteConfig ? { defaults: {} } : require(configFile);
7072
let defName = argv._[1] || './defs/petstore3.json';
7173

7274
let finish = remoteConfig ? finishRemote : finishLocal;
@@ -102,12 +104,26 @@ function finishLocal(err,result) {
102104
}
103105

104106
function finishRemote(err,result) {
105-
if (argv.zip) {
106-
// just save the zip file
107-
}
108-
else {
109-
// unpack the zip file
110-
}
107+
configName = configName.split(':').pop();
108+
if (argv.verbose) console.log('Making/cleaning output directories');
109+
mkdirp(path.join(config.outputDir,configName),function(){
110+
rimraf(path.join(config.outputDir,configName)+'/*',function(){
111+
if (argv.zip) {
112+
fs.writeFileSync(path.join(config.outputDir,configName,configName+'.zip'),result);
113+
}
114+
else {
115+
const zip = new admzip(result);
116+
if (argv.verbose) {
117+
console.log('Unzipping...');
118+
const zipEntries = zip.getEntries(); // an array of ZipEntry records
119+
zipEntries.forEach(function(zipEntry) {
120+
console.log(zipEntry.entryName);
121+
});
122+
}
123+
zip.extractAllTo(config.outputDir,true);
124+
}
125+
});
126+
});
111127
}
112128

113129
function despatch(obj, config, configName, callback) {

remote.js

+40-14
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,40 @@
44
const fetch = require('node-fetch');
55
const util = require('util');
66

7-
function main(obj, config, configName, callback) {
7+
function getServer(prefix) {
8+
if (prefix === 'og') {
9+
return 'https://api.openapi-generator.tech/api/gen/';
10+
}
11+
else if (prefix === 'sc') {
12+
return 'https://generator.swagger.io/api/gen/';
13+
}
14+
console.warn('Unknown API provider prefix',prefix);
15+
return false;
16+
}
17+
18+
async function main(obj, config, configName, callback) {
19+
const components = configName.split(':');
20+
const prefix = components[0];
21+
const type = components[1];
22+
const template = components[2];
23+
const server = getServer(prefix);
24+
const body = { options: {}, spec: obj };
25+
const response = await fetch(server+type+'s/'+template, {
26+
method: 'post',
27+
body: JSON.stringify(body),
28+
headers: { 'Content-Type': 'application/json' }
29+
})
30+
.then(res => res.json())
31+
.then(json => json);
32+
if (response.link) {
33+
const zipfile = await fetch(response.link)
34+
.then(res => res.buffer())
35+
.then(buffer => buffer);
36+
callback(null, zipfile);
37+
}
38+
else {
39+
console.warn(util.inspect(response));
40+
}
841
}
942

1043
function format(templates, prefix, type, filter) {
@@ -29,20 +62,13 @@ async function slurp(server, prefix, type, plural, filter) {
2962
}
3063

3164
async function list(prefix, filter) {
32-
let server = '';
33-
if (prefix === 'og') {
34-
server = 'https://api.openapi-generator.tech/api/gen/';
35-
}
36-
else if (prefix === 'sc') {
37-
server = 'https://generator.swagger.io/api/gen/';
38-
}
39-
else {
40-
console.warn('Unknown API provider prefix',prefix);
41-
return 1;
65+
const server = getServer(prefix);
66+
if (server) {
67+
await slurp(server, prefix, 'client', 'clients', filter);
68+
await slurp(server, prefix, 'server', 'servers', filter);
69+
return 0;
4270
}
43-
await slurp(server, prefix, 'client', 'clients', filter);
44-
await slurp(server, prefix, 'server', 'servers', filter);
45-
return 0;
71+
return 1;
4672
}
4773

4874
module.exports = {

0 commit comments

Comments
 (0)