feat: add SSH config aliases and PostgreSQL extensions

This commit is contained in:
zergmk2 authored and GitHub committed 2026-07-05 20:29:49 +08:00
1 parent 8b035d0989
commit f800d80f90
35 files changed
+1191 -33

No files matched your search

+3
View File
@@ -132,6 +132,8 @@ export const listFunctions = forward("listFunctions");
export const listSequences = forward("listSequences");
export const listRules = forward("listRules");
export const listOwners = forward("listOwners");
export const listExtensions = forward("listExtensions");
export const listAvailableExtensions = forward("listAvailableExtensions");
export const prepareSchemaDiff = forward("prepareSchemaDiff");
export const generateSchemaSyncSql = forward("generateSchemaSyncSql");
@@ -240,6 +242,7 @@ export const deleteAiConversation = forward("deleteAiConversation");
// System
export const listSystemFonts = forward("listSystemFonts");
export const listSshConfigHosts = forward("listSshConfigHosts");
// SQL File Execution
export const previewSqlFile = forward("previewSqlFile");
+14
View File
@@ -14,6 +14,7 @@ import type {
IndexInfo,
ForeignKeyInfo,
TriggerInfo,
ExtensionInfo,
FunctionInfo,
SequenceInfo,
RuleInfo,
@@ -29,6 +30,7 @@ import type {
SavedSqlFile,
SavedSqlFolder,
SavedSqlLibrary,
SshConfigHostEntry,
} from "@/types/database";
import type { CollectionInfo } from "@/types/database";
import type { SchemaDiffPreparation, SchemaDiffPreparationOptions, TableDiff, FunctionDiff, SequenceDiff, RuleDiff, OwnerDiff } from "@/lib/schema/schemaDiff";
@@ -242,6 +244,10 @@ export async function listSystemFonts(): Promise<string[]> {
return get("/api/system/fonts");
}
export async function listSshConfigHosts(): Promise<SshConfigHostEntry[]> {
return get("/api/ssh/config-hosts");
}
export async function listPlugins(): Promise<InstalledPlugin[]> {
return get("/api/plugins");
}
@@ -605,6 +611,14 @@ export async function listOwners(connectionId: string, database: string, schema:
return get(`/api/schema/owners?${qs({ connection_id: connectionId, database, schema })}`);
}
export async function listExtensions(connectionId: string, database: string, schema: string): Promise<ExtensionInfo[]> {
return get(`/api/schema/extensions?${qs({ connection_id: connectionId, database, schema })}`);
}
export async function listAvailableExtensions(connectionId: string, database: string): Promise<ExtensionInfo[]> {
return get(`/api/schema/available-extensions?${qs({ connection_id: connectionId, database })}`);
}
// ---------------------------------------------------------------------------
// Query
// ---------------------------------------------------------------------------
+14
View File
@@ -20,6 +20,7 @@ import type {
SequenceInfo,
RuleInfo,
OwnerInfo,
ExtensionInfo,
QueryResult,
SqlReferenceAnalysis,
DatabaseType,
@@ -30,6 +31,7 @@ import type {
SavedSqlFile,
SavedSqlFolder,
SavedSqlLibrary,
SshConfigHostEntry,
} from "@/types/database";
import type { CollectionInfo } from "@/types/database";
import type { SidebarObjectKind } from "@/lib/database/databaseObjectCapabilities";
@@ -495,6 +497,10 @@ export async function listSystemFonts(): Promise<string[]> {
return invoke("list_system_fonts");
}
export async function listSshConfigHosts(): Promise<SshConfigHostEntry[]> {
return invoke("list_ssh_config_hosts");
}
export async function pendingOpenSqlFiles(): Promise<string[]> {
return invoke("pending_open_sql_files");
}
@@ -990,6 +996,14 @@ export async function listOwners(connectionId: string, database: string, schema:
return invoke("list_owners", { connectionId, database, schema });
}
export async function listExtensions(connectionId: string, database: string, schema: string): Promise<ExtensionInfo[]> {
return invoke("list_extensions", { connectionId, database, schema });
}
export async function listAvailableExtensions(connectionId: string, database: string): Promise<ExtensionInfo[]> {
return invoke("list_available_extensions", { connectionId, database });
}
export async function saveConnections(configs: ConnectionConfig[]): Promise<void> {
return invoke("save_connections", { configs });
}
@@ -122,3 +122,24 @@ function quotePostgresIdentifier(value: string): string {
function quoteSqlLiteral(value: string): string {
return `'${value.replace(/'/g, "''")}'`;
}
export function buildCreateExtensionSql(name: string, schema?: string | null): string {
const extName = quotePostgresIdentifier(name);
if (schema) {
return `CREATE EXTENSION ${extName} WITH SCHEMA ${quotePostgresIdentifier(schema)};`;
}
return `CREATE EXTENSION ${extName};`;
}
export function buildDropExtensionSql(name: string, cascade = false): string {
const extName = quotePostgresIdentifier(name);
return cascade ? `DROP EXTENSION ${extName} CASCADE;` : `DROP EXTENSION ${extName};`;
}
export function buildListAvailableExtensionsSql(schema?: string | null): string {
// pg_available_extensions shows extensions available for installation
if (schema) {
return `SELECT name, default_version, comment FROM pg_catalog.pg_available_extensions WHERE installed_version IS NULL ORDER BY name`;
}
return `SELECT name, default_version, comment FROM pg_catalog.pg_available_extensions WHERE installed_version IS NULL ORDER BY name`;
}