express-jsdoc-swagger
Version:
Swagger OpenAPI 3.x generator
42 lines (34 loc) • 1.15 kB
JavaScript
const { getTagsInfo, formatDescriptionTag } = require('../utils/tags');
const { flatArray, getIndexBy } = require('../utils/arrays');
const FILTER_TAG_KEY = 'name';
const formatTags = ({ tags = [] }) => {
const infoTags = getTagsInfo(tags, 'tags');
return infoTags.map(({ description: tagDescription }) => {
const { name, description = '' } = formatDescriptionTag(tagDescription);
return {
name,
description,
};
});
};
const sortByDescription = tags => [...tags].sort((a, b) => {
if (!a.description && b.description) {
return 1;
}
return -1;
});
const sortTagsByName = tags => [...tags].sort((a, b) => ((a.name > b.name) ? 1 : -1));
const filterDuplicateTags = tags => (
tags.filter(({ name }, i) => getIndexBy(tags, FILTER_TAG_KEY, name) === i)
);
const parseTags = (swaggerObject, data) => {
if (!data || !Array.isArray(data)) return { tags: [] };
const tags = flatArray(data.map(formatTags));
const ordererTags = sortByDescription(tags);
const uniqTags = filterDuplicateTags(ordererTags);
return {
...swaggerObject,
tags: sortTagsByName(uniqTags),
};
};
module.exports = parseTags;