From 6d6754c90b8b2c0c2fabca5702d5fe90bc5ba653 Mon Sep 17 00:00:00 2001 From: tudor Date: Mon, 10 Mar 2025 16:09:41 +0100 Subject: [PATCH 1/4] test for twice pg_dump; gather and set text error message when throwing --- packages/pglite-tools/src/pg_dump.ts | 16 ++++++++++------ packages/pglite-tools/tests/pg_dump.test.ts | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/pglite-tools/src/pg_dump.ts b/packages/pglite-tools/src/pg_dump.ts index 8f1389f2..ce0945f2 100644 --- a/packages/pglite-tools/src/pg_dump.ts +++ b/packages/pglite-tools/src/pg_dump.ts @@ -75,7 +75,7 @@ async function execPgDump({ }: { pg: PGlite args: string[] -}): Promise<[number, Uint8Array[]]> { +}): Promise<[number, Uint8Array[], string]> { const bin = new URL('./pg_dump.wasm', import.meta.url) const acc: Uint8Array[] = [] const FS = emscriptenFsToWasiFS(pg.Module.FS, acc) @@ -89,10 +89,14 @@ async function execPgDump({ }) wasi.stdout = (_buffer) => { - // console.log('stdout', buffer) + // console.log('stdout', _buffer) } + const textDecoder = new TextDecoder() + let errorMessage = '' + wasi.stderr = (_buffer) => { - // console.error('stderr', buffer) + const text = textDecoder.decode(_buffer) + if (text) errorMessage += text } wasi.sched_yield = () => { const pgIn = '/tmp/pglite/base/.s.PGSQL.5432.in' @@ -144,7 +148,7 @@ async function execPgDump({ await pg.runExclusive(async () => { exitCode = wasi.start(app.instance.exports) }) - return [exitCode!, acc] + return [exitCode!, acc, errorMessage] } interface PgDumpOptions { @@ -173,13 +177,13 @@ export async function pgDump({ 'postgres', ] - const [exitCode, acc] = await execPgDump({ + const [exitCode, acc, errorMessage] = await execPgDump({ pg, args: [...(args ?? []), ...baseArgs], }) if (exitCode !== 0) { - throw new Error(`pg_dump failed with exit code ${exitCode}`) + throw new Error(`pg_dump failed with exit code ${exitCode}. \nError message: ${errorMessage}`) } const file = new File(acc, fileName, { diff --git a/packages/pglite-tools/tests/pg_dump.test.ts b/packages/pglite-tools/tests/pg_dump.test.ts index 55076059..90d4242f 100644 --- a/packages/pglite-tools/tests/pg_dump.test.ts +++ b/packages/pglite-tools/tests/pg_dump.test.ts @@ -14,6 +14,21 @@ describe('pgDump', () => { expect(content).toContain('PostgreSQL database dump') }) + it('should dump an empty database twice', async () => { + const pg = await PGlite.create() + + for (let i = 0; i < 2; i++) { + const fileName = `dump_${i}.sql` + const dump = await pgDump({ pg, fileName }) + + expect(dump).toBeInstanceOf(File) + expect(dump.name).toBe(fileName) + + const content = await dump.text() + expect(content).toContain('PostgreSQL database dump') + } + }) + it('should dump a database with tables and data', async () => { const pg = await PGlite.create() From 941145db65873bb67974da58d9ed56f8ff230088 Mon Sep 17 00:00:00 2001 From: tudor Date: Mon, 10 Mar 2025 16:21:10 +0100 Subject: [PATCH 2/4] remove test - to be added in a different PR --- packages/pglite-tools/tests/pg_dump.test.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/packages/pglite-tools/tests/pg_dump.test.ts b/packages/pglite-tools/tests/pg_dump.test.ts index 90d4242f..55076059 100644 --- a/packages/pglite-tools/tests/pg_dump.test.ts +++ b/packages/pglite-tools/tests/pg_dump.test.ts @@ -14,21 +14,6 @@ describe('pgDump', () => { expect(content).toContain('PostgreSQL database dump') }) - it('should dump an empty database twice', async () => { - const pg = await PGlite.create() - - for (let i = 0; i < 2; i++) { - const fileName = `dump_${i}.sql` - const dump = await pgDump({ pg, fileName }) - - expect(dump).toBeInstanceOf(File) - expect(dump.name).toBe(fileName) - - const content = await dump.text() - expect(content).toContain('PostgreSQL database dump') - } - }) - it('should dump a database with tables and data', async () => { const pg = await PGlite.create() From 8d0c5b42ff357a57b91418dbf1884b6cf4838903 Mon Sep 17 00:00:00 2001 From: tudor Date: Mon, 10 Mar 2025 16:31:37 +0100 Subject: [PATCH 3/4] style --- packages/pglite-tools/src/pg_dump.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/pglite-tools/src/pg_dump.ts b/packages/pglite-tools/src/pg_dump.ts index ce0945f2..c4ba86b8 100644 --- a/packages/pglite-tools/src/pg_dump.ts +++ b/packages/pglite-tools/src/pg_dump.ts @@ -183,7 +183,9 @@ export async function pgDump({ }) if (exitCode !== 0) { - throw new Error(`pg_dump failed with exit code ${exitCode}. \nError message: ${errorMessage}`) + throw new Error( + `pg_dump failed with exit code ${exitCode}. \nError message: ${errorMessage}`, + ) } const file = new File(acc, fileName, { From af4ea5381d933e454ff623d887e9a008765391e2 Mon Sep 17 00:00:00 2001 From: tudor Date: Tue, 11 Mar 2025 16:54:52 +0100 Subject: [PATCH 4/4] changeset --- .changeset/long-swans-refuse.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/long-swans-refuse.md diff --git a/.changeset/long-swans-refuse.md b/.changeset/long-swans-refuse.md new file mode 100644 index 00000000..78e811b3 --- /dev/null +++ b/.changeset/long-swans-refuse.md @@ -0,0 +1,5 @@ +--- +'@electric-sql/pglite-tools': patch +--- + +pg_dump error messages set on the thrown Error