oas-resolver
Advanced tools
Comparing version 2.4.4 to 2.5.0
52
index.js
@@ -21,9 +21,17 @@ 'use strict'; | ||
function readFileAsync(filename, encoding) { | ||
function readFileAsync(filename, encoding, options, pointer, def) { | ||
return new Promise(function (resolve, reject) { | ||
fs.readFile(filename, encoding, function (err, data) { | ||
if (err) | ||
reject(err); | ||
else | ||
if (err) { | ||
if (options.ignoreIOErrors && def) { | ||
options.externalRefs[pointer].failed = true; | ||
resolve(def); | ||
} | ||
else { | ||
reject(err); | ||
} | ||
} | ||
else { | ||
resolve(data); | ||
} | ||
}); | ||
@@ -86,2 +94,6 @@ }); | ||
obj['x-miro'] = obj[key]; | ||
if (!options.externalRefs[newRef]) { | ||
options.externalRefs[newRef] = options.externalRefs[obj[key]]; | ||
} | ||
options.externalRefs[newRef].failed = options.externalRefs[obj[key]].failed; | ||
obj[key] = newRef; | ||
@@ -91,5 +103,11 @@ } | ||
let newRef = url.resolve(base,obj[key]).toString(); | ||
if (options.verbose>1) console.warn(common.colour.yellow+'Rewriting external ref',obj[key],'as',newRef,common.colour.normal); | ||
obj['x-miro'] = obj[key]; // we use x-miro as a flag so we don't do this > once | ||
obj[key] = newRef; | ||
let failed = false; | ||
if (options.externalRefs[obj[key]]) { | ||
failed = options.externalRefs[obj[key]].failed; | ||
} | ||
if (!failed) { | ||
if (options.verbose>1) console.warn(common.colour.yellow+'Rewriting external ref',obj[key],'as',newRef,common.colour.normal); | ||
obj['x-miro'] = obj[key]; // we use x-miro as a flag so we don't do this > once | ||
obj[key] = newRef; | ||
} | ||
} | ||
@@ -193,3 +211,11 @@ } | ||
.then(function (res) { | ||
if (res.status !== 200) throw new Error(`Received status code ${res.status}: ${target}`); | ||
if (res.status !== 200) { | ||
if (options.ignoreIOErrors) { | ||
options.externalRefs[pointer].failed = true; | ||
return '{"$ref":"'+pointer+'"}'; | ||
} | ||
else { | ||
throw new Error(`Received status code ${res.status}: ${target}`); | ||
} | ||
} | ||
return res.text(); | ||
@@ -233,3 +259,4 @@ }) | ||
else { | ||
return readFileAsync(target, options.encoding || 'utf8') | ||
const def = '{"$ref":"'+pointer+'"}'; | ||
return readFileAsync(target, options.encoding || 'utf8', options, pointer, def) | ||
.then(function (data) { | ||
@@ -299,4 +326,7 @@ try { | ||
if (refs[$ref].resolved) { | ||
if (options.rewriteRefs) { | ||
// we've already seen it | ||
// we've already seen it | ||
if (refs[$ref].failed) { | ||
// do none | ||
} | ||
else if (options.rewriteRefs) { | ||
let newRef = refs[$ref].resolvedAt; | ||
@@ -303,0 +333,0 @@ if (options.verbose>1) console.warn('Rewriting ref', $ref, newRef); |
{ | ||
"name": "oas-resolver", | ||
"version": "2.4.4", | ||
"version": "2.5.0", | ||
"description": "Resolve external $refs in OpenAPI (swagger) 2.0 / 3.x definitions", | ||
@@ -39,3 +39,3 @@ "main": "index.js", | ||
}, | ||
"gitHead": "d4c6b903ab3ef4a94ac3fd8a2b92eaf76b9b7fb6" | ||
"gitHead": "aeaee7225ad2a2ab5e7cce0699cf43854b4d46fa" | ||
} |
28089
551