unwrapDatabaseError masks real DB errors with TypeError: Cannot convert object to primitive value
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 74/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- typescript
- Lĩnh vực
- backend
Hướng nghiên cứu
Bắt đầu với src/db/errors.ts tại unwrapDatabaseError và tái hiện cause có prototype null được nêu trong issue. Đảm bảo việc đọc DatabaseError.message giữ lại một thông báo hữu ích thay vì gây lỗi, sau đó kiểm tra độ bao phủ trong các bài kiểm thử lỗi hiện có. Issue cũng nêu một hướng điều tra riêng về prototype của cause trong đường đi fiber-failure.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- TypeScript
- Star
- 5
- Fork
- 4
- Merge trung bình
- 9 giờ 44 phút
- Pull request đã merge (30 ngày)
- 217
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của NEARBuilders/everything-dev
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
NEARBuilders/everything-dev#696 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
NEAR Builders project-creation prompt: agent should return the project URL, not just the slugĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
NEARBuilders/everything-dev#686 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
NEARBuilders/everything-dev#678 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
NEARBuilders/everything-dev#628 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
NEARBuilders/everything-dev#400 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của NEARBuilders/everything-dev
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
hugomrdias/playwright-test#753 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Review view: Daily/Weekly Review header buttons use the app-wide toolbar control styleCó thể đã có người làm @colherdesopa đã nhận hôm nay. Đang mở
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 90/100
dongdongbh/Mindwtr#1515 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
pending-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
kirodotdev/Kiro#12301 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100