File tree Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Original file line number Diff line number Diff line change @@ -29,6 +29,7 @@ import {
29
29
jsonToSQLite ,
30
30
jsonToMariaDB ,
31
31
jsonToSQLServer ,
32
+ jsonToMermaid ,
32
33
} from "../../utils/exportSQL/generic" ;
33
34
import {
34
35
ObjectType ,
@@ -1040,6 +1041,25 @@ export default function ControlPanel({
1040
1041
saveAs ( blob , `${ exportData . filename } .ddb` ) ;
1041
1042
} ,
1042
1043
} ,
1044
+ {
1045
+ MERMAID : ( ) => {
1046
+ setModal ( MODAL . CODE ) ;
1047
+ const result = jsonToMermaid ( {
1048
+ tables : tables ,
1049
+ relationships : relationships ,
1050
+ notes : notes ,
1051
+ subjectAreas : areas ,
1052
+ database : database ,
1053
+ title : title ,
1054
+ } ) ;
1055
+ // generate .md file
1056
+ setExportData ( ( prev ) => ( {
1057
+ ...prev ,
1058
+ data : result ,
1059
+ extension : "md" ,
1060
+ } ) ) ;
1061
+ } ,
1062
+ } ,
1043
1063
] ,
1044
1064
function : ( ) => { } ,
1045
1065
} ,
Original file line number Diff line number Diff line change @@ -502,3 +502,41 @@ export function jsonToSQLServer(obj) {
502
502
)
503
503
. join ( "\n" ) } `;
504
504
}
505
+
506
+ export function jsonToMermaid ( obj ) {
507
+ function getMermaidRelationship ( relationship ) {
508
+ switch ( relationship ) {
509
+ case "One to one" :
510
+ return "||--||" ;
511
+ case "One to many" :
512
+ return "||--o{" ;
513
+ case "Many to one" :
514
+ return "}o--||" ;
515
+ default :
516
+ return "--" ;
517
+ }
518
+ }
519
+ const mermaidEntities = obj . tables
520
+ . map ( ( table ) => {
521
+ const fields = table . fields
522
+ . map ( ( field ) => {
523
+ const fieldType = getTypeString ( field , obj . database , "mssql" ) ;
524
+ return ` ${ fieldType } ${ field . name } ` ;
525
+ } )
526
+ . join ( "\n" ) ;
527
+ return ` ${ table . name } {\n${ fields } \n }` ;
528
+ } )
529
+ . join ( "\n\n" ) ;
530
+
531
+ const mermaidRelationships = obj . relationships ?. length
532
+ ? obj . relationships
533
+ . map ( ( r ) => {
534
+ const startTable = obj . tables [ r . startTableId ] . name ;
535
+ const endTable = obj . tables [ r . endTableId ] . name ;
536
+ return ` ${ startTable } ${ getMermaidRelationship ( r . cardinality ) } ${ endTable } : references` ;
537
+ } )
538
+ . join ( "\n" )
539
+ : "" ;
540
+
541
+ return `erDiagram\n${ mermaidRelationships ? `${ mermaidRelationships } \n\n` : "" } ${ mermaidEntities } ` ;
542
+ }
You can’t perform that action at this time.
0 commit comments