@eclipse-lyra/extension-pglite 0.7.23 → 0.7.25

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-CIxtTI_y.js"),
7
+ loader: () => import("./pglite-extension-BjEHErf_.js"),
8
8
  icon: "database",
9
9
  dependencies: ["@eclipse-lyra/extension-sqleditor"],
10
10
  experimental: true
@@ -1,5 +1,8 @@
1
1
  import { promptDialog, toastError, toastInfo, appSettings, contributionRegistry } from "@eclipse-lyra/core";
2
- import { PGlite } from "/home/runner/work/core/core/node_modules/@electric-sql/pglite/dist/index.js";
2
+ async function createPglite(persistentId) {
3
+ const { PGlite: PGliteCtor } = await import("/home/runner/work/core/core/node_modules/@electric-sql/pglite/dist/index.js");
4
+ return persistentId ? new PGliteCtor(`idb://${persistentId}`) : new PGliteCtor();
5
+ }
3
6
  const PGLITE_DB_SETTING_KEY = "pglite.databases";
4
7
  const DB_NAME_REGEX = /^[a-zA-Z0-9_.-]+$/;
5
8
  async function getDatabaseNames() {
@@ -39,13 +42,8 @@ class PgliteSqlDatabase {
39
42
  await this.db.close();
40
43
  }
41
44
  this.db = null;
42
- if (id === null) {
43
- this.db = new PGlite();
44
- this.currentId = null;
45
- } else {
46
- this.db = new PGlite(`idb://${id}`);
47
- this.currentId = id;
48
- }
45
+ this.db = await createPglite(id ?? void 0);
46
+ this.currentId = id;
49
47
  }
50
48
  async runQuery(sql) {
51
49
  if (!this.db) {
@@ -115,4 +113,4 @@ function activate() {
115
113
  export {
116
114
  activate as default
117
115
  };
118
- //# sourceMappingURL=pglite-extension-CIxtTI_y.js.map
116
+ //# sourceMappingURL=pglite-extension-BjEHErf_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pglite-extension-BjEHErf_.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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-lyra/extension-pglite",
3
- "version": "0.7.23",
3
+ "version": "0.7.25",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"pglite-extension-CIxtTI_y.js","sources":["../src/pglite-sqldatabase.ts","../src/pglite-extension.ts"],"sourcesContent":["import { 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';\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 if (id === null) {\n this.db = new PGlite();\n this.currentId = null;\n } else {\n this.db = new PGlite(`idb://${id}`);\n this.currentId = id;\n }\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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"}