convict-doc
Version:
converts a Convict schema into rendered documentation. At this Moment it will be rendered as a markdown table.
89 lines (87 loc) • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.renderFormat = exports.renderSensitive = exports.renderNullable = exports.renderSchema = exports.renderSchemaObj = exports.renderDoc = exports.renderField = void 0;
const utils_1 = require("./utils");
const defaultOrder = ['name', 'default', 'arg', 'env', 'format', 'nullable', 'sensitive', 'doc'];
function renderField(fieldName, name, obj) {
var _a, _b, _c;
switch (fieldName) {
case 'arg':
return `${(_a = obj.arg) !== null && _a !== void 0 ? _a : '-'}`;
case 'doc':
return `${(_b = obj.doc) !== null && _b !== void 0 ? _b : '-'}`;
case 'default':
return `${JSON.stringify(obj.default)}`;
case 'format':
return renderFormat(obj);
case 'nullable':
return renderNullable(obj);
case 'sensitive':
return renderSensitive(obj);
case 'env':
return `${(_c = obj.env) !== null && _c !== void 0 ? _c : '-'}`;
case 'name':
return name;
default:
return `unknown`;
}
}
exports.renderField = renderField;
function renderDoc(schema, order = defaultOrder) {
const header = renderHeader(order);
return renderSchema(schema, "", order, header);
}
exports.renderDoc = renderDoc;
function renderSchemaObj(name, obj, order = defaultOrder) {
return `|${order.map(fieldName => renderField(fieldName, name, obj)).join('|')}|\n`;
}
exports.renderSchemaObj = renderSchemaObj;
function renderSchema(schema, namePrefix = "", order = defaultOrder, render = "") {
let res = render;
for (let [key, value] of Object.entries(schema)) {
if ((0, utils_1.isSchemaObject)(value)) {
res += renderSchemaObj(`${namePrefix ? namePrefix + "." + key : key}`, value, order);
}
else {
res += renderSchema(value, key, order);
}
}
return res;
}
exports.renderSchema = renderSchema;
function renderHeader(order = defaultOrder) {
return `
# Configuration Parameters
|${order.join("|")}|
|${order.map(s => s.replaceAll(/./g, "-")).join("|")}|\n`;
}
function renderNullable(obj) {
var _a;
return `${(_a = obj.nullable) !== null && _a !== void 0 ? _a : false}`;
}
exports.renderNullable = renderNullable;
function renderSensitive(obj) {
var _a;
return `${(_a = obj.sensitive) !== null && _a !== void 0 ? _a : false}`;
}
exports.renderSensitive = renderSensitive;
function renderFormat(obj) {
var _a;
if (Array.isArray(obj.format)) {
return obj.format.join(" | ");
}
if (utils_1.primitiveConstructors.includes(obj.format)) {
return `${obj.format.name}`;
}
switch (typeof obj.format) {
case "function":
return `${(_a = obj.format.name) !== null && _a !== void 0 ? _a : "unknown format function"}`;
case "string":
return `${obj.format}`;
case undefined:
return "any";
default:
return "unknown";
}
}
exports.renderFormat = renderFormat;