forked from apiaryio/swagger2blueprint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
executable file
·104 lines (89 loc) · 2.46 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env node
/*
* Converts Swagger into API Blueprint.
*/
'use strict';
var fs = require('fs');
var fury = require('fury');
var request = require('request');
var yaml = require('js-yaml');
var parser = require('yargs')
.usage('Usage: $0 [options] infile')
.example('$0 swagger.yml', 'Convert file')
.example('$0 swagger.yml swagger.apib', 'Convert to file')
.example('$0 \'http://example.com/swagger.json\'', 'Convert URL')
.options('h', {alias: 'help', description: 'Show help'})
.options('s', {describe: 'Swagger version [auto]'})
.strict();
// Take a loaded Swagger object and converts it to API Blueprint
function convert(swagger, done) {
fury.parse({source: swagger}, function (parseErr, api) {
if (parseErr) {
return done(parseErr);
}
fury.serialize({api: api}, function (serializeErr, blueprint) {
if (serializeErr) {
return done(serializeErr);
}
done(null, blueprint);
});
});
}
// Run the command with the given arguments.
function run(argv, done) {
if (!argv) {
argv = parser.argv;
}
if (argv.h) {
parser.showHelp();
return done(null);
}
if (!argv._.length) {
return done(new Error('Requires an input argument'));
} else if (argv._.length > 2) {
return done(new Error('Too many arguments given!'));
}
var input = argv._[0];
if (input.indexOf('http://') === 0 || input.indexOf('https://') === 0) {
request(input, function (err, res, body) {
if (err) {
return done(err);
}
convert(yaml.safeLoad(body), done);
});
} else {
if (!fs.existsSync(input)) {
return done(new Error('`' + input + '` does not exist!'));
}
fs.readFile(input, 'utf-8', function (err, content) {
var loaded;
if (err) {
return done(err);
}
try {
loaded = yaml.safeLoad(content);
} catch (yamlError) {
return done(new Error('Unable to load document as JSON or YAML!'));
}
convert(loaded, done);
});
}
}
// Run the command if this is a script, otherwise expose the run method
// as a module (useful for testing).
if (require.main === module) {
run(null, function (err, blueprint) {
if (err) {
console.warn(err.toString());
process.exit(1);
} else if (blueprint) {
if (parser.argv._.length === 2) {
fs.writeFileSync(parser.argv._[1], blueprint, 'utf-8');
} else {
console.log(blueprint);
}
}
});
} else {
exports.run = run;
}