diff --git a/apps/web/package.json b/apps/web/package.json index b6840d0883..4e7fef6406 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -156,6 +156,7 @@ "remark-gfm": "4.0.1", "sanity-plugin-markdown": "6.0.0", "schema-dts": "1.1.5", + "serialize-error": "12.0.0", "server-only": "0.0.1", "shiki": "3.19.0", "sonner": "2.0.7", diff --git a/apps/web/utils/actions/safe-action.ts b/apps/web/utils/actions/safe-action.ts index edaf64f675..c25bcb223d 100644 --- a/apps/web/utils/actions/safe-action.ts +++ b/apps/web/utils/actions/safe-action.ts @@ -27,9 +27,9 @@ const baseClient = createSafeActionClient({ userEmail: context?.userEmail, emailAccountId: context?.emailAccountId, bindArgsClientInputs, - error: error.message, + error, }); - // Need a better way to handle this within logger itself + if (env.NODE_ENV !== "production") { // biome-ignore lint/suspicious/noConsole: helpful for debugging console.error("Error in server action", error); diff --git a/apps/web/utils/logger.ts b/apps/web/utils/logger.ts index 4440c79869..6385e3170b 100644 --- a/apps/web/utils/logger.ts +++ b/apps/web/utils/logger.ts @@ -1,5 +1,6 @@ /** biome-ignore-all lint/suspicious/noConsole: we use console.log for development logs */ import { log } from "next-axiom"; +import { serializeError } from "serialize-error"; import { env } from "@/env"; export type Logger = ReturnType; @@ -136,19 +137,6 @@ function formatError(args?: Record) { }; } -function serializeError(error: unknown): unknown { - if (error instanceof Error) { - return { - ...error, - name: error.name, - message: error.message, - stack: error.stack, - }; - } - - return error; -} - function processErrorsInObject(obj: unknown): unknown { if (obj instanceof Error) { return obj.message; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0077150d9..69475da27c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -517,6 +517,9 @@ importers: schema-dts: specifier: 1.1.5 version: 1.1.5 + serialize-error: + specifier: 12.0.0 + version: 12.0.0 server-only: specifier: 0.0.1 version: 0.0.1 @@ -11452,6 +11455,10 @@ packages: sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + serialize-error@12.0.0: + resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} + engines: {node: '>=18'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -26106,6 +26113,10 @@ snapshots: no-case: 2.3.2 upper-case-first: 1.1.2 + serialize-error@12.0.0: + dependencies: + type-fest: 4.41.0 + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0