Parse indexes and enums from dbml

This commit is contained in:
1ilit 2025-01-30 16:26:05 +04:00
parent d76a9e9ff8
commit 7fa23fc13b

View File

@ -35,19 +35,21 @@ export function fromDBML(src) {
const ast = parser.parse(src, "dbml"); const ast = parser.parse(src, "dbml");
const tables = []; const tables = [];
const enums = [];
for (const schema of ast.schemas) { for (const schema of ast.schemas) {
for (const table of schema.tables) { for (const table of schema.tables) {
let parsedTable = {}; let parsedTable = {};
parsedTable.id = tables.length; parsedTable.id = tables.length;
parsedTable.name = table.name; parsedTable.name = table.name;
parsedTable.comment = ""; parsedTable.comment = table.note ?? "";
parsedTable.color = "#175e7a"; parsedTable.color = "#175e7a";
parsedTable.fields = []; parsedTable.fields = [];
parsedTable.indices = []; parsedTable.indices = [];
for (const column of table.fields) { for (const column of table.fields) {
const field = {}; const field = {};
field.id = parsedTable.fields.length; field.id = parsedTable.fields.length;
field.name = column.name; field.name = column.name;
field.type = column.type.type_name.toUpperCase(); field.type = column.type.type_name.toUpperCase();
@ -62,15 +64,36 @@ export function fromDBML(src) {
parsedTable.fields.push(field); parsedTable.fields.push(field);
} }
for (const idx of table.indexes) {
const parsedIndex = {};
parsedIndex.id = idx.id - 1;
parsedIndex.fields = idx.columns.map((x) => x.value);
parsedIndex.name =
idx.name ?? `${parsedTable.name}_index_${parsedIndex.id}`;
parsedIndex.unique = !!idx.unique;
parsedTable.indices.push(parsedIndex);
}
console.log(table); console.log(table);
tables.push(parsedTable); tables.push(parsedTable);
} }
for (const schemaEnum of schema.enums) {
const parsedEnum = {};
parsedEnum.name = schemaEnum.name;
parsedEnum.values = schemaEnum.values.map((x) => x.name);
enums.push(parsedEnum);
}
} }
console.log(ast); console.log(ast);
const diagram = { tables }; const diagram = { tables, enums };
arrangeTables(diagram); arrangeTables(diagram);