From 2c406e8f77f2e677e78523c67a737d12c6129526 Mon Sep 17 00:00:00 2001 From: Tushar Sharma Date: Mon, 15 Jul 2024 01:30:20 +0530 Subject: [PATCH 1/2] fix(parser): adds the cause to the ParseError --- packages/parser/src/errors.ts | 1 + packages/parser/tests/unit/envelope.test.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/errors.ts b/packages/parser/src/errors.ts index c5dc0ebd0b..96f2be9723 100644 --- a/packages/parser/src/errors.ts +++ b/packages/parser/src/errors.ts @@ -8,6 +8,7 @@ class ParseError extends Error { ? `${message}. This error was caused by: ${options?.cause.message}.` : message; super(errorMessage); + this.cause = options?.cause; this.name = 'ParseError'; } } diff --git a/packages/parser/tests/unit/envelope.test.ts b/packages/parser/tests/unit/envelope.test.ts index 8d7778bc25..beaf20077d 100644 --- a/packages/parser/tests/unit/envelope.test.ts +++ b/packages/parser/tests/unit/envelope.test.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z, ZodError } from 'zod'; import { Envelope } from '../../src/envelopes/envelope.js'; import { ParseError } from '../../src/errors.js'; @@ -74,5 +74,12 @@ describe('envelope: ', () => { Envelope.parse({ name: 123 }, z.object({ name: z.string() })) ).toThrow(); }); + it('the error has the cause attached to it', () => { + try { + Envelope.parse('{"name": "John"}', z.object({ name: z.number() })); + } catch (error) { + expect((error as { cause: Error }).cause).toBeInstanceOf(ZodError); + } + }); }); }); From a32a1d057c6e8b01c7ecc07e4514abb4baaf0933 Mon Sep 17 00:00:00 2001 From: Tushar Sharma Date: Mon, 15 Jul 2024 10:17:37 +0530 Subject: [PATCH 2/2] refactor based on feedback --- packages/parser/src/errors.ts | 3 +-- packages/parser/tests/unit/envelope.test.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/parser/src/errors.ts b/packages/parser/src/errors.ts index 96f2be9723..c3068a731d 100644 --- a/packages/parser/src/errors.ts +++ b/packages/parser/src/errors.ts @@ -7,8 +7,7 @@ class ParseError extends Error { const errorMessage = options?.cause ? `${message}. This error was caused by: ${options?.cause.message}.` : message; - super(errorMessage); - this.cause = options?.cause; + super(errorMessage, options); this.name = 'ParseError'; } } diff --git a/packages/parser/tests/unit/envelope.test.ts b/packages/parser/tests/unit/envelope.test.ts index beaf20077d..96450ddddc 100644 --- a/packages/parser/tests/unit/envelope.test.ts +++ b/packages/parser/tests/unit/envelope.test.ts @@ -1,3 +1,9 @@ +/** + * Test decorator parser + * + * @group unit/parser + */ + import { z, ZodError } from 'zod'; import { Envelope } from '../../src/envelopes/envelope.js'; import { ParseError } from '../../src/errors.js'; @@ -74,11 +80,11 @@ describe('envelope: ', () => { Envelope.parse({ name: 123 }, z.object({ name: z.string() })) ).toThrow(); }); - it('the error has the cause attached to it', () => { + it('includes the ZodError as the cause of the ParseError', () => { try { Envelope.parse('{"name": "John"}', z.object({ name: z.number() })); } catch (error) { - expect((error as { cause: Error }).cause).toBeInstanceOf(ZodError); + expect((error as Error).cause).toBeInstanceOf(ZodError); } }); });