@eclipse-lyra/extension-pglite 0.7.25 → 0.7.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ extensionRegistry.registerExtension({
|
|
|
4
4
|
id: pkg.name,
|
|
5
5
|
name: "PGlite",
|
|
6
6
|
description: "In-browser PostgreSQL via PGlite",
|
|
7
|
-
loader: () => import("./pglite-extension-
|
|
7
|
+
loader: () => import("./pglite-extension-S3jWuf1w.js"),
|
|
8
8
|
icon: "database",
|
|
9
9
|
dependencies: ["@eclipse-lyra/extension-sqleditor"],
|
|
10
10
|
experimental: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promptDialog, toastError, toastInfo, appSettings, contributionRegistry } from "@eclipse-lyra/core";
|
|
2
2
|
async function createPglite(persistentId) {
|
|
3
|
-
const { PGlite: PGliteCtor } = await import("
|
|
3
|
+
const { PGlite: PGliteCtor } = await import("@electric-sql/pglite");
|
|
4
4
|
return persistentId ? new PGliteCtor(`idb://${persistentId}`) : new PGliteCtor();
|
|
5
5
|
}
|
|
6
6
|
const PGLITE_DB_SETTING_KEY = "pglite.databases";
|
|
@@ -113,4 +113,4 @@ function activate() {
|
|
|
113
113
|
export {
|
|
114
114
|
activate as default
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=pglite-extension-
|
|
116
|
+
//# sourceMappingURL=pglite-extension-S3jWuf1w.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite-extension-
|
|
1
|
+
{"version":3,"file":"pglite-extension-S3jWuf1w.js","sources":["../src/pglite-sqldatabase.ts","../src/pglite-extension.ts"],"sourcesContent":["import type { PGlite } from '@electric-sql/pglite';\nimport type {\n SqlAdapterContribution,\n SqlConnectionInfo,\n SqlDatabase,\n} from '@eclipse-lyra/extension-sqleditor';\nimport {\n appSettings,\n toastError,\n toastInfo,\n promptDialog,\n} from '@eclipse-lyra/core';\n\nasync function createPglite(persistentId?: string): Promise<PGlite> {\n const { PGlite: PGliteCtor } = await import('@electric-sql/pglite');\n return persistentId ? new PGliteCtor(`idb://${persistentId}`) : new PGliteCtor();\n}\nconst PGLITE_DB_SETTING_KEY = 'pglite.databases';\nconst DB_NAME_REGEX = /^[a-zA-Z0-9_.-]+$/;\n\nasync function getDatabaseNames(): Promise<string[]> {\n const stored = await appSettings.get(PGLITE_DB_SETTING_KEY);\n if (!Array.isArray(stored)) return [];\n return stored.filter((name): name is string => typeof name === 'string').sort();\n}\n\nasync function saveDatabaseNames(names: string[]): Promise<void> {\n await appSettings.set(PGLITE_DB_SETTING_KEY, [...new Set(names)].sort());\n}\n\nclass PgliteSqlDatabase implements SqlDatabase {\n readonly engineId = 'pglite';\n\n private db: PGlite | null = null;\n private currentId: string | null = null;\n\n get currentConnectionId(): string | null {\n return this.currentId;\n }\n\n async listConnections(): Promise<SqlConnectionInfo[]> {\n const names = await getDatabaseNames();\n return [\n {\n id: null,\n label: 'In-memory',\n isDefault: true,\n },\n ...names.map((name) => ({\n id: name,\n label: name,\n })),\n ];\n }\n\n async selectConnection(id: string | null): Promise<void> {\n if (this.db && this.currentId === id) return;\n if (this.db && this.db.close) {\n await this.db.close();\n }\n this.db = null;\n this.db = await createPglite(id ?? undefined);\n this.currentId = id;\n }\n\n async runQuery(sql: string): Promise<{ columns: string[]; rows: unknown[][] }> {\n if (!this.db) {\n await this.selectConnection(null);\n }\n if (!this.db) {\n return { columns: [], rows: [] };\n }\n const result = await this.db.query(sql);\n const rows = Array.isArray(result.rows) ? (result.rows as Record<string, unknown>[]) : [];\n if (!rows.length) return { columns: [], rows: [] };\n const columns = Object.keys(rows[0]);\n const matrix = rows.map((row) => columns.map((c) => row[c]));\n return { columns, rows: matrix };\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n await this.db.close?.();\n this.db = null;\n this.currentId = null;\n }\n\n async createConnection(): Promise<SqlConnectionInfo | null> {\n const raw = await promptDialog('New PGlite database name', '');\n if (raw == null) return null;\n const name = raw.trim();\n if (!name) {\n toastError('Name cannot be empty');\n return null;\n }\n if (!DB_NAME_REGEX.test(name)) {\n toastError('Name may only contain letters, numbers, and . _ -');\n return null;\n }\n const existing = await getDatabaseNames();\n if (existing.includes(name)) {\n toastError(`Database \"${name}\" already exists`);\n return null;\n }\n await saveDatabaseNames([...existing, name]);\n toastInfo(`Database \"${name}\" created`);\n return {\n id: name,\n label: name,\n isDefault: false,\n };\n }\n\n async deleteConnection(id: string): Promise<void> {\n if (!id) return;\n const names = await getDatabaseNames();\n if (!names.includes(id)) return;\n const next = names.filter((n) => n !== id);\n await saveDatabaseNames(next);\n if (this.currentId === id) {\n await this.close();\n }\n }\n}\n\nexport const pgliteSqlAdapterContribution: SqlAdapterContribution = {\n id: 'pglite',\n label: 'PostgreSQL (PGlite)',\n icon: 'database',\n loader: async () => new PgliteSqlDatabase(),\n};\n\n","import { contributionRegistry } from '@eclipse-lyra/core';\nimport { pgliteSqlAdapterContribution } from './pglite-sqldatabase';\n\nexport default function activate() {\n contributionRegistry.registerContribution('system.sqladapters', pgliteSqlAdapterContribution);\n}\n\n"],"names":[],"mappings":"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"}
|