json-docs-generator
Version:
Util for describe REST APIs via docs.
57 lines (45 loc) • 1.32 kB
JavaScript
const normalizeArray = value => value.map((item) => {
if (typeof item === 'function') {
return typeof item();
}
if (typeof item === 'object') {
return Array.isArray(item) ? normalizeArray(item) : normalizeValue(item);
}
return item;
});
const normalizeValue = (response) => {
if (typeof response !== 'object' || response === null) {
return response;
}
return Object.entries(response).reduce((object, [key, value]) => {
let formattedValue = value;
if (typeof value === 'function') {
formattedValue = typeof value();
}
if (typeof value === 'object' && Array.isArray(value)) {
formattedValue = normalizeArray(value);
}
if (typeof value === 'object' && !Array.isArray(value)) {
formattedValue = normalizeValue(value);
}
return {
...object,
[key]: formattedValue,
};
}, {});
};
module.exports = (response) => {
if (typeof response === 'number' || typeof response === 'string') {
return response;
}
if (typeof response === 'function') {
return typeof response();
}
return JSON.stringify(
Array.isArray(response) ? response.map(normalizeValue) : normalizeValue(response),
null,
2,
)
.replace(/".*":/g, match => `${match.substr(1, match.length - 3)}:`)
.replace(/"/g, '\'');
};