async function visualizeSqlite(
db,
{ showAttributes = true, showFKs = true, returnStr = false } = {}
) {
const tables = (await db.describeTables()).map((d) => d.name);
const fks = (
await Promise.all(
tables.map(async (tableName) => {
const fk = await db.query(
`SELECT * FROM pragma_foreign_key_list('${tableName}')`
);
return fk.map((fkResult) => ({ tableFrom: tableName, ...fkResult }));
})
)
).flat();
const attribNames = await Promise.all(
tables.map(async (tableName) => {
const columns = await db.describeColumns({ table: tableName });
return { tableName, columns };
})
);
const str = `erDiagram ${
showFKs
? "\n " +
fks
.map(
({ tableFrom, table, from }) =>
`${tableFrom} }o--|| ${table} : ${from}`
)
.join("\n ")
: ""
}
${attribNames
.map(
({ tableName, columns }) => `${tableName} {
${
showAttributes
? "\n " +
columns
.map((c) => `${c.databaseType.split("(")[0]} ${c.name}`)
.join("\n ")
: ""
}
}`
)
.join("\n ")}
`;
return returnStr ? str : mermaid`${str}`;
}