BrowserWorkerRunner: port finalizer throws when the worker global has no close() (Bun)

Đã đóng Phù hợp với người mới
#8,635 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@santiago-ramos-02 đang làm issue này rồi.

Từ ngày 30/9/2026.

  • #8636 của @santiago-ramos-02 — đang mở

Đá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
78/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ệ
bun, typescript
Lĩnh vực
web-dev

Hướng nghiên cứu

Bắt đầu từ BrowserWorkerRunner.make và kiểm tra port finalizer, đặc biệt là cách nó xử lý worker global được dùng làm port. Chạy các bài kiểm thử Bun worker liên quan hoặc một bun test suite thực thi browser worker code, và xác nhận rằng quá trình shutdown không còn throw khi worker global không có close().

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

BrowserWorkerRunner.make registers a finalizer for each port that calls port.close() unconditionally:

Effect.sync(() => {
  port.removeEventListener("message", onMsg)
  port.removeEventListener("messageerror", onMessageError)
  port.close()
})

In a dedicated worker, layer passes the worker global as the port. Bun's worker global implements postMessage and addEventListener/removeEventListener, but has no close() (Bun 1.4.2):

// worker.ts, run with `new Worker(new URL("./worker.ts", import.meta.url))` under Bun
postMessage({ hasClose: "close" in self, type: typeof (self as any).close })
// => { hasClose: false, type: "undefined" }

So when the runner shuts down in a Bun worker (for example in a bun test suite that exercises browser worker code), the finalizer throws TypeError: port.close is not a function.

The owning parent terminates the worker anyway, so skipping close() when it is missing is safe. #6680 already fixed the messageerror listener removal in the same finalizer; this is the remaining part.

Environment: @effect/[email protected], Bun 1.4.2, Windows x64. Still present on main.

Ngôn ngữ chính
TypeScript
Star
16.7k
Fork
808
Merge trung bình
11 giờ 3 phút
Pull request đã merge (30 ngày)
840

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Effect-TS/effect

Tất cả issue của Effect-TS/effect

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.