diff --git a/packages/parser/src/errors.ts b/packages/parser/src/errors.ts index c5dc0ebd0b..c3068a731d 100644 --- a/packages/parser/src/errors.ts +++ b/packages/parser/src/errors.ts @@ -7,7 +7,7 @@ class ParseError extends Error { const errorMessage = options?.cause ? `${message}. This error was caused by: ${options?.cause.message}.` : message; - super(errorMessage); + 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 8d7778bc25..96450ddddc 100644 --- a/packages/parser/tests/unit/envelope.test.ts +++ b/packages/parser/tests/unit/envelope.test.ts @@ -1,4 +1,10 @@ -import { z } from 'zod'; +/** + * 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,5 +80,12 @@ describe('envelope: ', () => { Envelope.parse({ name: 123 }, z.object({ name: z.string() })) ).toThrow(); }); + 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 Error).cause).toBeInstanceOf(ZodError); + } + }); }); });