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 {
2929 jsonToSQLite ,
3030 jsonToMariaDB ,
3131 jsonToSQLServer ,
32+ jsonToMermaid ,
3233} from "../../utils/exportSQL/generic" ;
3334import {
3435 ObjectType ,
@@ -1012,6 +1013,25 @@ export default function ControlPanel({
10121013 saveAs ( blob , `${ exportData . filename } .ddb` ) ;
10131014 } ,
10141015 } ,
1016+ {
1017+ MERMAID : ( ) => {
1018+ setModal ( MODAL . CODE ) ;
1019+ const result = jsonToMermaid ( {
1020+ tables : tables ,
1021+ relationships : relationships ,
1022+ notes : notes ,
1023+ subjectAreas : areas ,
1024+ database : database ,
1025+ title : title ,
1026+ } ) ;
1027+ // generate .md file
1028+ setExportData ( ( prev ) => ( {
1029+ ...prev ,
1030+ data : result ,
1031+ extension : "md" ,
1032+ } ) ) ;
1033+ } ,
1034+ } ,
10151035 ] ,
10161036 function : ( ) => { } ,
10171037 } ,
Original file line number Diff line number Diff line change @@ -502,3 +502,41 @@ export function jsonToSQLServer(obj) {
502502 )
503503 . join ( "\n" ) } `;
504504}
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