From 1b0390f0b7652fe415540b7942cf53ec87143f08 Mon Sep 17 00:00:00 2001 From: Guy Ben-Aharon Date: Mon, 4 Aug 2025 11:35:34 +0300 Subject: [PATCH] feat(dbml): Edit Diagram Directly from DBML (#819) * initial dbml apply * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix --- src/components/code-snippet/code-snippet.tsx | 6 +- src/components/code-snippet/dbml/utils.ts | 51 + .../chartdb-context/chartdb-context.tsx | 5 + .../chartdb-context/chartdb-provider.tsx | 14 +- src/context/diff-context/diff-context.tsx | 15 + src/context/diff-context/diff-provider.tsx | 131 +- .../import-dbml-dialog/import-dbml-dialog.tsx | 88 +- src/globals.css | 26 + .../__tests__/export-sql-dbml.test.ts | 2 +- .../data/export-metadata/export-sql-script.ts | 18 +- .../apply-dbml/__tests__/apply-dbml.test.ts | 1251 +++++++++++++++++ src/lib/dbml/apply-dbml/apply-dbml.ts | 611 ++++++++ .../__tests__/dbml-export-issue-fix.test.ts | 101 +- src/lib/dbml/dbml-export/dbml-export.ts | 98 +- .../dbml-import-fantasy-examples.test.ts | 227 ++- src/lib/dbml/dbml-import/dbml-import-error.ts | 40 + src/lib/dbml/dbml-import/dbml-import.ts | 235 +++- src/lib/domain/diff/diff-check/diff-check.ts | 21 + src/lib/domain/diff/field-diff.ts | 9 +- .../canvas/table-node/table-node-field.tsx | 83 +- .../canvas/table-node/table-node.tsx | 14 +- .../tables-section/table-dbml/table-dbml.tsx | 470 ++++++- 22 files changed, 3232 insertions(+), 284 deletions(-) create mode 100644 src/components/code-snippet/dbml/utils.ts create mode 100644 src/lib/dbml/apply-dbml/__tests__/apply-dbml.test.ts create mode 100644 src/lib/dbml/apply-dbml/apply-dbml.ts create mode 100644 src/lib/dbml/dbml-import/dbml-import-error.ts diff --git a/src/components/code-snippet/code-snippet.tsx b/src/components/code-snippet/code-snippet.tsx index a6998bad..e3389ca7 100644 --- a/src/components/code-snippet/code-snippet.tsx +++ b/src/components/code-snippet/code-snippet.tsx @@ -31,6 +31,7 @@ export interface CodeSnippetAction { label: string; icon: LucideIcon; onClick: () => void; + className?: string; } export interface CodeSnippetProps { @@ -172,7 +173,10 @@ export const CodeSnippet: React.FC = React.memo( + + + ) : null} + {errorMessage ? ( +
+
+ +
+

+ Syntax Error +

+

+ {errorMessage || + t('import_dbml_dialog.error.description')} +

+
+
+
+ ) : null} + ); };