Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export default async function ProcessSpec(specUrl, sortTags) {
let jsonParsedSpec; let convertedSpec; let
resolvedRefSpec;
const convertOptions = { patch: true, warnOnly: true };
const resolveOptions = { resolveCirculars: false };
try {
if (typeof specUrl === 'string') {
convertedSpec = await converter.convertUrl(specUrl, convertOptions);
} else {
convertedSpec = await converter.convertObj(specUrl, convertOptions);
}
resolvedRefSpec = await JsonRefs.resolveRefs(convertedSpec.openapi, resolveOptions);
jsonParsedSpec = resolvedRefSpec.resolved;
} catch (err) {
console.info('%c There was an issue while parsing the spec %o ', 'color:orangered', err); // eslint-disable-line no-console
}
const openApiSpec = jsonParsedSpec;
const methods = ['get', 'put', 'post', 'delete', 'patch', 'options', 'head'];
const tags = [];
let totalPathCount = 0;
// For each path find the tag and push it into the corrosponding tag
for (const path in openApiSpec.paths) {
const commonParams = openApiSpec.paths[path].parameters;
const commonPathProp = {
summary: openApiSpec.paths[path].summary,
url;
const convertOptions = { patch: true, warnOnly: true };
try {
// JsonRefs cant load yaml files, so first use converter
if (typeof specUrl === 'string') {
// resolvedRefSpec = await JsonRefs.resolveRefsAt(specUrl, resolveOptions);
convertedSpec = await converter.convertUrl(specUrl, convertOptions);
specLocation = convertedSpec.source.trim();
if (specLocation.startsWith('/')) {
url = new URL(`.${specLocation}`, window.location.href);
specLocation = url.pathname;
}
} else {
// resolvedRefSpec = await JsonRefs.resolveRefs(specUrl, resolveOptions);
convertedSpec = await converter.convertObj(specUrl, convertOptions);
url = new URL(window.location.href);
specLocation = url.pathname;
}
// convertedSpec = await converter.convertObj(resolvedRefSpec.resolved, convertOptions);
resolveOptions = {
resolveCirculars: false,
location: specLocation, // location is important to specify to resolve relative external file references when using JsonRefs.resolveRefs() which takes an JSON object
};
resolvedRefSpec = await JsonRefs.resolveRefs(convertedSpec.openapi, resolveOptions);
// jsonParsedSpec = convertedSpec.openapi;
jsonParsedSpec = resolvedRefSpec.resolved;
} catch (err) {
console.info('%c There was an issue while parsing the spec %o ', 'color:orangered', err); // eslint-disable-line no-console
}
const openApiSpec = jsonParsedSpec;
let url;
const convertOptions = { patch: true, warnOnly: true };
try {
// JsonRefs cant load yaml files, so first use converter
if (typeof specUrl === 'string') {
// resolvedRefSpec = await JsonRefs.resolveRefsAt(specUrl, resolveOptions);
convertedSpec = await converter.convertUrl(specUrl, convertOptions);
specLocation = convertedSpec.source.trim();
if (specLocation.startsWith('/')) {
url = new URL(`.${specLocation}`, window.location.href);
specLocation = url.pathname;
}
} else {
// resolvedRefSpec = await JsonRefs.resolveRefs(specUrl, resolveOptions);
convertedSpec = await converter.convertObj(specUrl, convertOptions);
url = new URL(window.location.href);
specLocation = url.pathname;
}
// convertedSpec = await converter.convertObj(resolvedRefSpec.resolved, convertOptions);
resolveOptions = {
resolveCirculars: false,
location: specLocation, // location is important to specify to resolve relative external file references when using JsonRefs.resolveRefs() which takes an JSON object
};
resolvedRefSpec = await JsonRefs.resolveRefs(convertedSpec.openapi, resolveOptions);
// jsonParsedSpec = convertedSpec.openapi;
jsonParsedSpec = resolvedRefSpec.resolved;
} catch (err) {
console.info('%c There was an issue while parsing the spec %o ', 'color:orangered', err); // eslint-disable-line no-console
}
// const pathGroups = groupByPaths(jsonParsedSpec);
async function loadSpec(specUrlStr, {log, validate} = {}) {
if (typeof log === 'function') {
log(chalk.blue('Loading ' + specUrlStr + '...'));
}
const parser = new SwaggerParser();
let spec = await parser.parse(specUrlStr);
if (spec.swagger === '2.0') {
debugJson('Swagger spec loaded: ', spec);
spec = (await swagger2openapi.convertObj(spec, {patch: true})).openapi;
debugJson('OpenAPI spec converted from Swagger: ', spec);
} else if (spec.openapi) {
debugJson('OpenAPI spec loaded: ', spec);
}
spec = _.cloneDeepWith(spec, o => {
if (o.$ref) {
o['x-$ref'] = o.$ref;
}
});
// Validate and deference the spec
if (validate) {
spec = await parser.validate(spec, {
dereference: {
circular: true, // Allow circular $refs
private async buildOpenApiSpec(lb3App: Lb3Application) {
const swaggerSpec = generateSwaggerSpec(lb3App, {
generateOperationScopedModels: true,
});
// remove any properties that have values that are functions before
// converting, as `convertObj` can't handle function values
const fixedSwaggerSpec = JSON.parse(JSON.stringify(swaggerSpec));
const result = await swagger2openapi.convertObj(fixedSwaggerSpec, {
// swagger2openapi options
});
let spec = result.openapi as OpenApiSpec;
if (typeof this.options.specTransformer === 'function') {
spec = this.options.specTransformer(spec);
}
return spec;
}
function convert20(obj){
if (argv.verbose) console.log('Converting OpenAPI 2.0 definition');
swagger2openapi.convertObj(obj,{patch:true,warnOnly:true,direct:true},function(err,openapi){
if (err) {
console.error(util.inspect(err));
}
else {
config.defaults.swagger = obj;
processor.main(openapi,config,configName,finish);
}
});
}
function convert(api, options, callback) {
if (options.resolve) {
swagger2openapi.convertObj(api, {resolve:true,source:options.source,verbose:options.verbose}, function(err, sOptions) {
if (err) {
console.error(err.message);
}
else {
convertInner(sOptions.openapi, options, callback);
}});
}
else {
convertInner(api, options, callback);
}
}
convert: function (input, options, callback) {
options = _.assign({}, options);
var parseResult = Helpers.parse(input);
if (!parseResult.result) {
return callback(new Error(parseResult.reason || 'Invalid input'));
}
try {
return Swagger2OpenAPI.convertObj(parseResult.swagger, {
fatal: false,
warnOnly: true
}, function(err, oas3Wrapper) {
if (err) {
return callback(err);
}
return OpenAPI2Postman.convert({
type: 'json',
data: oas3Wrapper.openapi
}, options, (error, result) => {
if (error) {
return callback('Error importing Swagger 2.0 spec');
}
else {
return callback(null, result);
private async convertToOpenApiSpec(spec: Swagger.Spec) {
this.debugger('Converting specs to openapi 3.0');
const converter = require('swagger2openapi');
const options = {
patch: true,
warnOnly: true
};
const openapi = await converter.convertObj(spec, options);
this.debugger('Converted to openapi 3.0: %j', openapi);
return openapi.openapi;
}