From 2c406e8f77f2e677e78523c67a737d12c6129526 Mon Sep 17 00:00:00 2001
From: Tushar Sharma <ts17995@gmail.com>
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 <ts17995@gmail.com>
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);
       }
     });
   });