UNPKG

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
"use strict"; 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;