-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
61 lines (57 loc) · 1.78 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import Joi from "joi";
import _ from "lodash";
function indent(level) {
let str = "";
for (var i = 0; i < level; i++) {
str = str + " ";
}
return str;
}
export default function joiToMd(
schema,
level = 0,
output = "",
name = "Schema Docs"
) {
if (level == 0) {
schema = schema.describe();
}
if (schema.type == "object") {
Object.keys(schema.keys).forEach((key) => {
output += indent(level) + `* **\`${key}\`** `;
output += ` (type: ${_.get(schema, `keys[${key}].type`)}) `;
output += _.get(schema, `keys[${key}].flags.description`)
? `: ${_.get(schema, `keys[${key}].flags.description`)}\n`
: "\n";
if (typeof _.get(schema, `keys[${key}].flags.default`) == "object") {
if (_.get(schema, `keys[${key}].flags.default`).special != "deep") {
output +=
" (default: `" +
JSON.stringify(_.get(schema, `keys[${key}].flags.default`)) +
"`) ";
}
} else {
if (_.get(schema, `keys[${key}].flags.default`)) {
output +=
" (default: `" + _.get(schema, `keys[${key}].flags.default`) + "`)";
}
}
if (_.get(schema, `keys[${key}].type`) == "object") {
output = joiToMd(schema.keys[key], level + 2, output + "\n");
}
if (_.get(schema, `keys[${key}].type`) == "array") {
_.get(schema, `keys[${key}].items`).forEach((item) => {
output = joiToMd(item, level + 2, output + "\n");
});
}
if (_.get(schema, `keys[${key}].notes`)) {
output += "\n" + indent(level + 2) + "**notes:** \n";
_.get(schema, `keys[${key}].notes`).forEach((note) => {
output += indent(level + 4) + "* " + note + "\n";
});
}
output += "\n";
});
}
return output;
}