chore: add oxfmt + husky + lint-staged for code formatting and CI format checks

This commit is contained in:
t8y2
2026-05-05 15:41:34 +08:00
parent c295bf5780
commit 3acd9280ac
154 changed files with 5787 additions and 3681 deletions
+4 -3
View File
@@ -18,9 +18,10 @@ export function useDataGridActions(activeTab: ComputedRef<QueryTab | undefined>)
options: { orderBy?: string; limit?: number; offset?: number; whereInput?: string } = {},
): string {
const config = connectionStore.getConfig(tab.connectionId);
const fallbackOrderColumns = config?.db_type === "sqlserver" && !tab.tableMeta?.primaryKeys?.length
? tab.tableMeta?.columns.slice(0, 1).map((column) => column.name)
: undefined;
const fallbackOrderColumns =
config?.db_type === "sqlserver" && !tab.tableMeta?.primaryKeys?.length
? tab.tableMeta?.columns.slice(0, 1).map((column) => column.name)
: undefined;
return buildTableSelectSql({
databaseType: config?.db_type,
schema: tab.tableMeta?.schema,
+100 -75
View File
@@ -57,87 +57,111 @@ export function useDialogSources() {
if (!watchersRegistered) {
watchersRegistered = true;
watch(() => connectionStore.transferSource, (v) => {
if (v) {
transferPrefillConnectionId.value = v.connectionId;
transferPrefillDatabase.value = v.database;
showTransferDialog.value = true;
connectionStore.transferSource = null;
}
});
watch(
() => connectionStore.transferSource,
(v) => {
if (v) {
transferPrefillConnectionId.value = v.connectionId;
transferPrefillDatabase.value = v.database;
showTransferDialog.value = true;
connectionStore.transferSource = null;
}
},
);
watch(() => connectionStore.schemaDiffSource, (v) => {
if (v) {
schemaDiffPrefillConnectionId.value = v.connectionId;
schemaDiffPrefillDatabase.value = v.database;
showSchemaDiffDialog.value = true;
connectionStore.schemaDiffSource = null;
}
});
watch(
() => connectionStore.schemaDiffSource,
(v) => {
if (v) {
schemaDiffPrefillConnectionId.value = v.connectionId;
schemaDiffPrefillDatabase.value = v.database;
showSchemaDiffDialog.value = true;
connectionStore.schemaDiffSource = null;
}
},
);
watch(() => connectionStore.sqlFileSource, (v) => {
if (v) {
sqlFilePrefillConnectionId.value = v.connectionId;
sqlFilePrefillDatabase.value = v.database;
showSqlFileDialog.value = true;
connectionStore.sqlFileSource = null;
}
});
watch(
() => connectionStore.sqlFileSource,
(v) => {
if (v) {
sqlFilePrefillConnectionId.value = v.connectionId;
sqlFilePrefillDatabase.value = v.database;
showSqlFileDialog.value = true;
connectionStore.sqlFileSource = null;
}
},
);
watch(() => connectionStore.diagramSource, (v) => {
if (v) {
diagramPrefillConnectionId.value = v.connectionId;
diagramPrefillDatabase.value = v.database;
diagramPrefillSchema.value = v.schema ?? "";
diagramFocusTableName.value = v.tableName ?? "";
showDiagramDialog.value = true;
connectionStore.diagramSource = null;
}
});
watch(
() => connectionStore.diagramSource,
(v) => {
if (v) {
diagramPrefillConnectionId.value = v.connectionId;
diagramPrefillDatabase.value = v.database;
diagramPrefillSchema.value = v.schema ?? "";
diagramFocusTableName.value = v.tableName ?? "";
showDiagramDialog.value = true;
connectionStore.diagramSource = null;
}
},
);
watch(() => connectionStore.tableImportSource, (v) => {
if (v) {
tableImportPrefillConnectionId.value = v.connectionId;
tableImportPrefillDatabase.value = v.database;
tableImportPrefillSchema.value = v.schema ?? "";
tableImportPrefillTable.value = v.tableName;
showTableImportDialog.value = true;
connectionStore.tableImportSource = null;
}
});
watch(
() => connectionStore.tableImportSource,
(v) => {
if (v) {
tableImportPrefillConnectionId.value = v.connectionId;
tableImportPrefillDatabase.value = v.database;
tableImportPrefillSchema.value = v.schema ?? "";
tableImportPrefillTable.value = v.tableName;
showTableImportDialog.value = true;
connectionStore.tableImportSource = null;
}
},
);
watch(() => connectionStore.structureEditorSource, (v) => {
if (v) {
structurePrefillConnectionId.value = v.connectionId;
structurePrefillDatabase.value = v.database;
structurePrefillSchema.value = v.schema ?? "";
structurePrefillTable.value = v.tableName;
showStructureEditorDialog.value = true;
connectionStore.structureEditorSource = null;
}
});
watch(
() => connectionStore.structureEditorSource,
(v) => {
if (v) {
structurePrefillConnectionId.value = v.connectionId;
structurePrefillDatabase.value = v.database;
structurePrefillSchema.value = v.schema ?? "";
structurePrefillTable.value = v.tableName;
showStructureEditorDialog.value = true;
connectionStore.structureEditorSource = null;
}
},
);
watch(() => connectionStore.fieldLineageSource, (v) => {
if (v) {
lineagePrefillConnectionId.value = v.connectionId;
lineagePrefillDatabase.value = v.database;
lineagePrefillSchema.value = v.schema ?? "";
lineagePrefillTable.value = v.tableName;
lineagePrefillColumn.value = v.columnName;
showFieldLineageDialog.value = true;
connectionStore.fieldLineageSource = null;
}
});
watch(
() => connectionStore.fieldLineageSource,
(v) => {
if (v) {
lineagePrefillConnectionId.value = v.connectionId;
lineagePrefillDatabase.value = v.database;
lineagePrefillSchema.value = v.schema ?? "";
lineagePrefillTable.value = v.tableName;
lineagePrefillColumn.value = v.columnName;
showFieldLineageDialog.value = true;
connectionStore.fieldLineageSource = null;
}
},
);
watch(() => connectionStore.databaseSearchSource, (v) => {
if (v) {
databaseSearchPrefillConnectionId.value = v.connectionId;
databaseSearchPrefillDatabase.value = v.database;
databaseSearchPrefillSchema.value = v.schema ?? "";
showDatabaseSearchDialog.value = true;
connectionStore.databaseSearchSource = null;
}
});
watch(
() => connectionStore.databaseSearchSource,
(v) => {
if (v) {
databaseSearchPrefillConnectionId.value = v.connectionId;
databaseSearchPrefillDatabase.value = v.database;
databaseSearchPrefillSchema.value = v.schema ?? "";
showDatabaseSearchDialog.value = true;
connectionStore.databaseSearchSource = null;
}
},
);
} // end watchersRegistered
// Config export/import helpers
@@ -189,7 +213,8 @@ export function useDialogSources() {
showImportLayoutConfirm.value = true;
}
} catch (e: any) {
configPassphraseError.value = e?.message === "wrong_passphrase" ? t("configExport.wrongPassphrase") : (e?.message || String(e));
configPassphraseError.value =
e?.message === "wrong_passphrase" ? t("configExport.wrongPassphrase") : e?.message || String(e);
}
}
+7 -1
View File
@@ -24,7 +24,13 @@ const state = reactive<DragState>({
startY: 0,
});
let pending: { id: string; type: string; x: number; y: number; sourceEl: HTMLElement | null } | null = null;
let pending: {
id: string;
type: string;
x: number;
y: number;
sourceEl: HTMLElement | null;
} | null = null;
let onDropCallback: ((draggedId: string, targetId: string, position: DropPosition) => void) | null = null;
let ghostEl: HTMLElement | null = null;
+14 -4
View File
@@ -36,7 +36,12 @@ async function openTableTarget(target: NavigationTarget) {
whereInput: target.whereInput,
});
queryStore.updateSql(tabId, sql);
queryStore.setTableMeta(tabId, { schema: target.schema, tableName: target.tableName, columns, primaryKeys });
queryStore.setTableMeta(tabId, {
schema: target.schema,
tableName: target.tableName,
columns,
primaryKeys,
});
await queryStore.executeTabSql(tabId, sql);
} catch (e: any) {
queryStore.setErrorResult(tabId, e);
@@ -60,13 +65,18 @@ export function useNavigationTargets(dialogs: {
await openTableTarget(target);
}
async function onStructureEditorSaved(reloadData: () => Promise<void>, toast: (msg: string, duration?: number) => void) {
async function onStructureEditorSaved(
reloadData: () => Promise<void>,
toast: (msg: string, duration?: number) => void,
) {
const activeTab = queryStore.tabs.find((t) => t.id === queryStore.activeTabId);
if (activeTab?.mode === "data" && activeTab.tableMeta?.tableName === dialogs.structurePrefillTable.value) {
try {
const columns = await api.getColumns(
activeTab.connectionId, activeTab.database,
activeTab.tableMeta.schema || activeTab.database, activeTab.tableMeta.tableName,
activeTab.connectionId,
activeTab.database,
activeTab.tableMeta.schema || activeTab.database,
activeTab.tableMeta.tableName,
);
queryStore.setTableMeta(activeTab.id, {
...activeTab.tableMeta,
+5 -5
View File
@@ -5,7 +5,7 @@ export function usePanelResize() {
const aiPanelWidth = ref(Number(localStorage.getItem("dbx-ai-panel-width")) || 360);
const historyWidth = ref(Number(localStorage.getItem("dbx-history-width")) || 288);
function startPanelResize(widthRef: Ref<number>, storageKey: string, direction: 'left' | 'right') {
function startPanelResize(widthRef: Ref<number>, storageKey: string, direction: "left" | "right") {
return (e: MouseEvent) => {
e.preventDefault();
const startX = e.clientX;
@@ -13,7 +13,7 @@ export function usePanelResize() {
const onMouseMove = (ev: MouseEvent) => {
const delta = ev.clientX - startX;
widthRef.value = Math.max(180, Math.min(800, startWidth + (direction === 'right' ? delta : -delta)));
widthRef.value = Math.max(180, Math.min(800, startWidth + (direction === "right" ? delta : -delta)));
};
const onMouseUp = () => {
@@ -27,9 +27,9 @@ export function usePanelResize() {
};
}
const startSidebarResize = startPanelResize(sidebarWidth, "dbx-sidebar-width", 'right');
const startAiPanelResize = startPanelResize(aiPanelWidth, "dbx-ai-panel-width", 'left');
const startHistoryResize = startPanelResize(historyWidth, "dbx-history-width", 'left');
const startSidebarResize = startPanelResize(sidebarWidth, "dbx-sidebar-width", "right");
const startAiPanelResize = startPanelResize(aiPanelWidth, "dbx-ai-panel-width", "left");
const startHistoryResize = startPanelResize(historyWidth, "dbx-history-width", "left");
return {
sidebarWidth,
+38 -32
View File
@@ -2,38 +2,42 @@ import { useConnectionStore } from "@/stores/connectionStore";
import { useQueryStore } from "@/stores/queryStore";
import type { NavigationTarget } from "@/composables/useNavigationTargets";
export function useTauriEvents(deps: {
openTableTarget: (target: NavigationTarget) => Promise<void>;
}) {
export function useTauriEvents(deps: { openTableTarget: (target: NavigationTarget) => Promise<void> }) {
const connectionStore = useConnectionStore();
const queryStore = useQueryStore();
function setupTauriListeners() {
import("@tauri-apps/api/event").then(({ listen }) => {
listen<{ connection_id: string; database: string; schema?: string; table: string }>(
"mcp-open-table",
async (event) => {
const { connection_id, database, schema, table } = event.payload;
if (!connectionStore.connections.length) await connectionStore.initFromDisk();
const config = connectionStore.getConfig(connection_id);
if (!config) return;
connectionStore.activeConnectionId = connection_id;
await connectionStore.ensureConnected(connection_id);
if (config.db_type === "redis") {
queryStore.createTab(connection_id, database || "0", `db${database || "0"}`, "redis");
} else if (config.db_type === "mongodb") {
queryStore.createTab(connection_id, database, table, "mongo");
} else {
deps.openTableTarget({ connectionId: connection_id, database, schema, tableName: table });
}
import("@tauri-apps/api/window").then(({ getCurrentWindow }) =>
getCurrentWindow().setFocus().catch(() => {}),
);
},
);
listen<{ connection_id: string; database: string; sql: string }>(
"mcp-execute-query",
async (event) => {
import("@tauri-apps/api/event")
.then(({ listen }) => {
listen<{ connection_id: string; database: string; schema?: string; table: string }>(
"mcp-open-table",
async (event) => {
const { connection_id, database, schema, table } = event.payload;
if (!connectionStore.connections.length) await connectionStore.initFromDisk();
const config = connectionStore.getConfig(connection_id);
if (!config) return;
connectionStore.activeConnectionId = connection_id;
await connectionStore.ensureConnected(connection_id);
if (config.db_type === "redis") {
queryStore.createTab(connection_id, database || "0", `db${database || "0"}`, "redis");
} else if (config.db_type === "mongodb") {
queryStore.createTab(connection_id, database, table, "mongo");
} else {
deps.openTableTarget({
connectionId: connection_id,
database,
schema,
tableName: table,
});
}
import("@tauri-apps/api/window").then(({ getCurrentWindow }) =>
getCurrentWindow()
.setFocus()
.catch(() => {}),
);
},
);
listen<{ connection_id: string; database: string; sql: string }>("mcp-execute-query", async (event) => {
const { connection_id, database, sql } = event.payload;
if (!connectionStore.connections.length) await connectionStore.initFromDisk();
const config = connectionStore.getConfig(connection_id);
@@ -44,11 +48,13 @@ export function useTauriEvents(deps: {
queryStore.updateSql(tabId, sql);
await queryStore.executeTabSql(tabId, sql);
import("@tauri-apps/api/window").then(({ getCurrentWindow }) =>
getCurrentWindow().setFocus().catch(() => {}),
getCurrentWindow()
.setFocus()
.catch(() => {}),
);
},
);
}).catch(() => {});
});
})
.catch(() => {});
}
return { setupTauriListeners };
+1 -1
View File
@@ -10,7 +10,7 @@ export function useTheme() {
if (!isTauriRuntime()) return;
import("@tauri-apps/api/window").then(({ getCurrentWindow }) => {
getCurrentWindow()
.setTheme(isDark.value ? "dark" as Theme : "light" as Theme)
.setTheme(isDark.value ? ("dark" as Theme) : ("light" as Theme))
.catch(() => {});
});
}
+3 -1
View File
@@ -9,7 +9,9 @@ export function useToast() {
message.value = msg;
visible.value = true;
clearTimeout(timer);
timer = window.setTimeout(() => { visible.value = false; }, duration);
timer = window.setTimeout(() => {
visible.value = false;
}, duration);
}
return { message, visible, toast };