Skip to content

fix(utilities): use instanceof instead of constructor.name in formatErrors (#16050)#16164

Open
deepshekhardas wants to merge 1 commit intopayloadcms:mainfrom
deepshekhardas:fix/16050-format-errors-minification
Open

fix(utilities): use instanceof instead of constructor.name in formatErrors (#16050)#16164
deepshekhardas wants to merge 1 commit intopayloadcms:mainfrom
deepshekhardas:fix/16050-format-errors-minification

Conversation

@deepshekhardas
Copy link
Copy Markdown
Contributor

Description

Fixes #16050 - formatErrors drops data field from APIError in production builds due to class name minification

Problem

In production builds (Next.js 16 with webpack minification), formatErrors.ts silently drops the data field from APIError responses. This causes any feature that relies on error.data in the client (e.g., 2FA flows) to break in production while working in development.

Root Cause

formatErrors.ts uses proto.constructor.name string comparison to identify APIError and ValidationError instances. In production builds, webpack/terser mangles class names (APIError becomes 't' or 'e'), causing the check to fail.

Solution

Changed from constructor.name string comparison to instanceof check. APIError already calls Object.setPrototypeOf in its constructor (via ExtendableError), which fixes the instanceof issue referenced in TypeScript issue #13965.

Changes

  • packages/payload/src/utilities/formatErrors.ts: Use instanceof instead of constructor.name

Testing

  • Verified instanceof works correctly in both dev and production builds

…rrors (payloadcms#16050)

Changed from constructor.name string comparison (broken by webpack/terser minification)

to instanceof check which survives production builds.

Fixes payloadcms#16050
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant