Fix markdown export (#389)

This commit is contained in:
1ilit 2025-04-04 20:20:28 +04:00 committed by GitHub
parent 5c1b2928d1
commit 3a8bb3f753
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,18 +3,23 @@ import { jsonToMermaid } from "./mermaid";
import { databases } from "../../data/databases"; import { databases } from "../../data/databases";
export function jsonToDocumentation(obj) { export function jsonToDocumentation(obj) {
const documentationSummary = obj.tables const documentationSummary = obj.tables
.map((table) => { .map((table) => {
return `\t- [${table.name}](#${table.name})`; return `\t- [${table.name}](#${table.name})`;
}).join("\n"); })
.join("\n");
const documentationEntities = obj.tables const documentationEntities = obj.tables
.map((table) => { .map((table) => {
let enums = ""; let enums = "";
let indexes = table.indices.length > 0 ? table.indices.map((index) => { let indexes =
return `| ${index.name} | ${index.unique ? "✅" : ""} | ${index.fields.join(", ")} |`; table.indices.length > 0
}).join("\n") : ""; ? table.indices
.map((index) => {
return `| ${index.name} | ${index.unique ? "✅" : ""} | ${index.fields.join(", ")} |`;
})
.join("\n")
: "";
const fields = table.fields const fields = table.fields
.map((field) => { .map((field) => {
const fieldType = const fieldType =
@ -25,46 +30,65 @@ export function jsonToDocumentation(obj) {
field.size !== "" field.size !== ""
? "(" + field.size + ")" ? "(" + field.size + ")"
: ""); : "");
enums += (field.type === "ENUM" && field.values && field.values.length > 0) ? enums +=
`##### ${field.name}\n\n${field.values.map((index) => `- ${index}`).join("\n")}\n` : ""; field.type === "ENUM" && field.values && field.values.length > 0
return `| **${field.name}** | ${fieldType} | ${field.primary ? "🔑 PK, " : ""}` + ? `##### ${field.name}\n\n${field.values.map((index) => `- ${index}`).join("\n")}\n`
`${field.nullable ? "null " : "not null "}${field.unique ? ", unique" : ""}${field.increment?", autoincrement":""}` + : "";
return (
`| **${field.name}** | ${fieldType} | ${field.primary ? "🔑 PK, " : ""}` +
`${field.notNull ? "not null" : "null"}${field.unique ? ", unique" : ""}${field.increment ? ", autoincrement" : ""}` +
`${field.default ? `, default: ${field.default}` : ""} | ` + `${field.default ? `, default: ${field.default}` : ""} | ` +
`${relationshipByField(table.id, obj.relationships, field.id)}` + `${relationshipByField(table.id, obj.relationships, field.id)}` +
` |${field.comment ? field.comment : ""} |`; ` |${field.comment ? field.comment : ""} |`
}).join("\n"); );
return `### ${table.name}\n${table.comment ? table.comment : ""}\n` + })
.join("\n");
return (
`### ${table.name}\n${table.comment ? table.comment : ""}\n` +
`| Name | Type | Settings | References | Note |\n` + `| Name | Type | Settings | References | Note |\n` +
`|-------------|---------------|-------------------------------|-------------------------------|--------------------------------|\n` + `|-------------|---------------|-------------------------------|-------------------------------|--------------------------------|\n` +
`${fields} \n${enums.length > 0 ? "\n#### Enums\n" + enums : ""}\n` + `${fields} \n${enums.length > 0 ? "\n#### Enums\n" + enums : ""}\n` +
`${indexes.length > 0 ? "\n#### Indexes\n| Name | Unique | Fields |\n|------|--------|--------|\n" + indexes : ""}`; `${indexes.length > 0 ? "\n#### Indexes\n| Name | Unique | Fields |\n|------|--------|--------|\n" + indexes : ""}`
}).join("\n"); );
})
function relationshipByField(table, relationships, fieldId) { .join("\n");
return relationships.filter(r => r.startTableId === table && r.startFieldId === fieldId)
.map((rel) => rel.name);
function relationshipByField(table, relationships, fieldId) {
return relationships
.filter((r) => r.startTableId === table && r.startFieldId === fieldId)
.map((rel) => rel.name);
} }
const documentationRelationships = obj.relationships?.length const documentationRelationships = obj.relationships?.length
? obj.relationships ? obj.relationships
.map((r) => { .map((r) => {
const startTable = obj.tables[r.startTableId].name; const startTable = obj.tables[r.startTableId].name;
const endTable = obj.tables[r.endTableId].name; const endTable = obj.tables[r.endTableId].name;
return `- **${startTable} to ${endTable}**: ${r.cardinality}\n`; return `- **${startTable} to ${endTable}**: ${r.cardinality}\n`;
}).join("") : ""; })
.join("")
const documentationTypes = databases[obj.database].hasTypes && obj.types.length > 0 ? obj.types.map((type) => { : "";
return `| Name | fields | Note |\n` +
`|-------------|---------------|--------------------------------|\n` + const documentationTypes =
`| ${type.name} | ${type.fields.map((field) => field.name).join(", ")} | ${type.comment ? type.comment : ""} |`; databases[obj.database].hasTypes && obj.types.length > 0
}).join("\n") : ""; ? obj.types
.map((type) => {
return `# ${obj.title} documentation\n## Summary\n\n- [Introduction](#introduction)\n- [Database Type](#database-type)\n`+ return (
`- [Table Structure](#table-structure)\n${documentationSummary}\n- [Relationships](#relationships)\n- [Database Diagram](#database-Diagram)\n\n`+ `| Name | fields | Note |\n` +
`## Introduction\n\n## Database type\n\n- **Database system:** `+ `|-------------|---------------|--------------------------------|\n` +
`${databases[obj.database].name}\n## Table structure\n\n${documentationEntities}`+ `| ${type.name} | ${type.fields.map((field) => field.name).join(", ")} | ${type.comment ? type.comment : ""} |`
`\n## Relationships\n\n${documentationRelationships}\n` + );
`${databases[obj.database].hasTypes && obj.types.length > 0 ? `## Types\n\n` + documentationTypes + `\n\n` : "" }` + })
`## Database Diagram\n\n\`\`\`mermaid\n${jsonToMermaid(obj)}\n\`\`\``; .join("\n")
} : "";
return (
`# ${obj.title} documentation\n## Summary\n\n- [Introduction](#introduction)\n- [Database Type](#database-type)\n` +
`- [Table Structure](#table-structure)\n${documentationSummary}\n- [Relationships](#relationships)\n- [Database Diagram](#database-Diagram)\n\n` +
`## Introduction\n\n## Database type\n\n- **Database system:** ` +
`${databases[obj.database].name}\n## Table structure\n\n${documentationEntities}` +
`\n## Relationships\n\n${documentationRelationships}\n` +
`${databases[obj.database].hasTypes && obj.types.length > 0 ? `## Types\n\n` + documentationTypes + `\n\n` : ""}` +
`## Database Diagram\n\n\`\`\`mermaid\n${jsonToMermaid(obj)}\n\`\`\``
);
}