openapi-to-postmanv2
Version:
Convert a given OpenAPI specification to Postman Collection v2.0
71 lines (63 loc) • 2 kB
JavaScript
const _ = require('lodash');
module.exports = {
/**
* Validate Spec to check if some of the required fields are present.
* OpenAPI 3.1 only openapi and info are always required,
* but the document must also contain at least one of paths or webhooks or components.
* @param {Object} spec OpenAPI spec
* @param {Object} options computed process options
* @return {Object} Validation result
*/
validateSpec: function (spec, options) {
const includeWebhooksOption = options.includeWebhooks;
if (_.isNil(spec)) {
return {
result: false,
reason: 'The Specification is null or undefined'
};
}
if (_.isNil(spec.openapi)) {
return {
result: false,
reason: 'Specification must contain a semantic version number of the OAS specification'
};
}
if (_.isNil(spec.info)) {
return {
result: false,
reason: 'Specification must contain an Info Object for the meta-data of the API'
};
}
if (!_.has(spec.info, '$ref')) {
if (_.isNil(_.get(spec, 'info.title'))) {
return {
result: false,
reason: 'Specification must contain a title in order to generate a collection'
};
}
if (_.isNil(_.get(spec, 'info.version'))) {
return {
result: false,
reason: 'Specification must contain a semantic version number of the API in the Info Object'
};
}
}
if (_.isNil(spec.paths) && !includeWebhooksOption) {
return {
result: false,
reason: 'Specification must contain Paths Object for the available operational paths'
};
}
if (includeWebhooksOption && _.isNil(spec.paths) &&
_.isNil(spec.webhooks) && _.isNil(spec.components)) {
return {
result: false,
reason: 'Specification must contain either Paths, Webhooks or Components sections'
};
}
return {
result: true,
openapi: spec
};
}
};