oas-resolver-browser
Version:
Resolve external $refs in OpenAPI (swagger) 2.0 / 3.x definitions
75 lines (63 loc) • 1.96 kB
JavaScript
const fs = require('fs');
const http = require('http');
const https = require('https');
const yaml = require('yaml');
const fetch = require('node-fetch-h2');
const resolver = require('./index.js');
let argv = require('yargs')
.string('output')
.alias('o','output')
.describe('output','file to output to')
.default('output','resolved.yaml')
.count('quiet')
.alias('q','quiet')
.describe('quiet','reduce verbosity')
.count('verbose')
.default('verbose',2)
.alias('v','verbose')
.describe('verbose','increase verbosity')
.demand(1)
.argv;
let filespec = argv._[0];
let options = {resolve: true};
options.verbose = argv.verbose;
if (argv.quiet) options.verbose = options.verbose - argv.quiet;
options.fatal = true;
if (filespec.startsWith('https')) options.agent = new https.Agent({ keepAlive: true })
else if (filespec.startsWith('http')) options.agent = new http.Agent({ keepAlive: true });
function main(str,source,options){
let input = yaml.parse(str,{schema:'core'});
resolver.resolve(input,source,options)
.then(function(options){
if (options.agent) {
options.agent.destroy();
}
fs.writeFileSync(argv.output,yaml.stringify(options.openapi),'utf8');
})
.catch(function(err){
console.warn(err);
});
}
if (filespec && filespec.startsWith('http')) {
console.warn('GET ' + filespec);
fetch(filespec, {agent:options.agent}).then(function (res) {
if (res.status !== 200) throw new Error(`Received status code ${res.status}`);
return res.text();
}).then(function (body) {
main(body,filespec,options);
}).catch(function (err) {
console.warn(err);
});
}
else {
fs.readFile(filespec,'utf8',function(err,data){
if (err) {
console.warn(err);
}
else {
main(data,filespec,options);
}
});
}
;