unwrapDatabaseError masks real DB errors with TypeError: Cannot convert object to primitive value
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- backend
Línea de trabajo
Empieza por src/db/errors.ts en unwrapDatabaseError y reproduce la causa con prototipo nulo que se muestra en el issue. Asegúrate de que leer DatabaseError.message conserve un mensaje útil en lugar de lanzar un error y, después, comprueba la cobertura en las pruebas de errores existentes. El issue también señala una investigación independiente del prototipo de la causa en la ruta de fallo del fiber.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Version: everything-dev 2.0.0-rc.39
unwrapDatabaseError (src/db/errors.ts:19) does String(error) for any cause that isn't an instanceof Error:
if (!(error instanceof Error)) return String(error);
When the cause is a non-Error object that has no primitive conversion (null-prototype object), String() throws TypeError: Cannot convert object to primitive value — and since this runs inside the DatabaseError.message getter, the TypeError replaces the real error everywhere .message is read (oRPC error serialization, vitest failure rendering, log lines).
Observed in CI: a PGlite failure surfaced as TypeError: Cannot convert object to primitive value with this stack, fully hiding the actual DatabaseError [stage=driver] message:
❯ unwrapDatabaseError everything-dev/src/db/errors.ts:19:40
❯ get message everything-dev/src/db/errors.ts:13:15
❯ get message every-plugin/src/runtime/errors.ts:12:16
Repro (node, using the shipped dist/db/errors.cjs):
const { DatabaseError } = require("everything-dev/db");
const dbErr = new DatabaseError({ stage: "driver", cause: Object.create(null) });
dbErr.message; // TypeError: Cannot convert object to primitive value
Additionally, somewhere between a layer-build failure (Effect.tryPromise passes the thrown Error through intact — verified) and usePlugin's rejection, the DatabaseError's cause is replaced by a null-prototype object, so this path is reachable in practice, not just contrived.
Suggested fix: make unwrapDatabaseError defensive for non-Error causes — try/catch around String(error), or a stringifyUnknown-style fallback (every-plugin's runtime/errors.ts already has one). Sibling fix worth investigating: why the fiber-failure path strips the cause's prototype before it reaches DatabaseError.message.
- Lenguaje dominante
- TypeScript
- Estrellas
- 5
- Forks
- 4
- Merge medio
- 9 h 44 min
- PR fusionados (30 d)
- 217
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de NEARBuilders/everything-dev
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
NEARBuilders/everything-dev#696 ·
Los mantenedores suelen responder en 1 día
-
NEAR Builders project-creation prompt: agent should return the project URL, not just the slugAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
NEARBuilders/everything-dev#686 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
NEARBuilders/everything-dev#678 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
NEARBuilders/everything-dev#628 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
NEARBuilders/everything-dev#400 ·
Los mantenedores suelen responder en 1 día
Todos los issues de NEARBuilders/everything-dev
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
hugomrdias/playwright-test#753 ·
Los mantenedores suelen responder en 1 día
-
Review view: Daily/Weekly Review header buttons use the app-wide toolbar control stylePosiblemente ocupada @colherdesopa la tomó hoy. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 90/100
dongdongbh/Mindwtr#1515 ·
Los mantenedores suelen responder en 1 día
-
pending-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
kirodotdev/Kiro#12301 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100