From 398bac995ed4a020fad946b1a69d72f60c0a1794 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Fri, 29 Nov 2024 14:29:18 +0100 Subject: [PATCH 1/2] fix(node): never use relative import for node packages --- src/runtime/node/http/internal/request.ts | 2 +- src/runtime/node/http/internal/response.ts | 2 +- src/runtime/node/net/internal/socket.ts | 2 +- src/runtime/node/stream/internal/readable.ts | 2 +- src/runtime/node/stream/internal/writable.ts | 2 +- src/runtime/node/tls/internal/server.ts | 2 +- src/runtime/node/tls/internal/tls-socket.ts | 2 +- src/runtime/node/tty/internal/read-stream.ts | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/runtime/node/http/internal/request.ts b/src/runtime/node/http/internal/request.ts index 9632ac08..4512ca4f 100644 --- a/src/runtime/node/http/internal/request.ts +++ b/src/runtime/node/http/internal/request.ts @@ -1,6 +1,6 @@ import type http from "node:http"; import { Socket } from "node:net"; -import { Readable } from "../../stream/internal/readable"; +import { Readable } from "node:stream"; import { rawHeaders } from "../../../_internal/utils"; // Docs: https://nodejs.org/api/http.html#http_class_http_incomingmessage diff --git a/src/runtime/node/http/internal/response.ts b/src/runtime/node/http/internal/response.ts index 3e0def13..9d56cfc5 100644 --- a/src/runtime/node/http/internal/response.ts +++ b/src/runtime/node/http/internal/response.ts @@ -1,7 +1,7 @@ import type http from "node:http"; import type { Socket } from "node:net"; import { Callback } from "../../../_internal/types"; -import { Writable } from "../../stream"; +import { Writable } from "node:stream"; // Docs: https://nodejs.org/api/http.html#http_class_http_serverresponse // Implementation: https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js diff --git a/src/runtime/node/net/internal/socket.ts b/src/runtime/node/net/internal/socket.ts index 777a287d..2aea52e7 100644 --- a/src/runtime/node/net/internal/socket.ts +++ b/src/runtime/node/net/internal/socket.ts @@ -1,6 +1,6 @@ import type * as net from "node:net"; import { Callback, BufferEncoding } from "../../../_internal/types"; -import { Duplex } from "../../stream/internal/duplex"; +import { Duplex } from "node:stream"; // Docs: https://nodejs.org/api/net.html#net_class_net_socket export class Socket extends Duplex implements net.Socket { diff --git a/src/runtime/node/stream/internal/readable.ts b/src/runtime/node/stream/internal/readable.ts index d7d56c5e..b06216f1 100644 --- a/src/runtime/node/stream/internal/readable.ts +++ b/src/runtime/node/stream/internal/readable.ts @@ -1,7 +1,7 @@ import type * as stream from "node:stream"; import type { BufferEncoding, Callback } from "../../../_internal/types"; import { createNotImplementedError } from "../../../_internal/utils"; -import { EventEmitter } from "../../events"; +import { EventEmitter } from "node:events"; // Docs: https://nodejs.org/api/stream.html#stream_readable_streams // Implementation: https://github.com/nodejs/node/blob/master/lib/internal/streams/readable.js diff --git a/src/runtime/node/stream/internal/writable.ts b/src/runtime/node/stream/internal/writable.ts index 6ee7be37..bb48e6a8 100644 --- a/src/runtime/node/stream/internal/writable.ts +++ b/src/runtime/node/stream/internal/writable.ts @@ -1,7 +1,7 @@ import type * as stream from "node:stream"; import type { BufferEncoding, Callback } from "../../../_internal/types"; -import { EventEmitter } from "../../events"; +import { EventEmitter } from "node:events"; // Docs: https://nodejs.org/api/stream.html#stream_writable_streams // Implementation: https://github.com/nodejs/node/blob/master/lib/internal/streams/writable.js diff --git a/src/runtime/node/tls/internal/server.ts b/src/runtime/node/tls/internal/server.ts index d42f2f73..273fe279 100644 --- a/src/runtime/node/tls/internal/server.ts +++ b/src/runtime/node/tls/internal/server.ts @@ -1,6 +1,6 @@ import type tls from "node:tls"; import { createNotImplementedError } from "../../../_internal/utils"; -import { Server as _Server } from "../../net"; +import { Server as _Server } from "node:net"; export class Server extends _Server implements tls.Server { constructor( diff --git a/src/runtime/node/tls/internal/tls-socket.ts b/src/runtime/node/tls/internal/tls-socket.ts index 6e754320..751e65b0 100644 --- a/src/runtime/node/tls/internal/tls-socket.ts +++ b/src/runtime/node/tls/internal/tls-socket.ts @@ -1,5 +1,5 @@ import type tls from "node:tls"; -import { Socket } from "../../net"; +import { Socket } from "node:net"; import { createNotImplementedError } from "../../../_internal/utils"; export class TLSSocket extends Socket implements tls.TLSSocket { diff --git a/src/runtime/node/tty/internal/read-stream.ts b/src/runtime/node/tty/internal/read-stream.ts index e8aec2dc..338d3ac8 100644 --- a/src/runtime/node/tty/internal/read-stream.ts +++ b/src/runtime/node/tty/internal/read-stream.ts @@ -1,5 +1,5 @@ import type tty from "node:tty"; -import { Socket } from "../../net"; +import { Socket } from "node:net"; export class ReadStream extends Socket implements tty.ReadStream { isRaw = false; From 2430ae11e3ac2ad84f6008d696d1b6e45e07603a Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Fri, 29 Nov 2024 14:36:37 +0100 Subject: [PATCH 2/2] feat(http): implement a dummy IncomingMessage#_read --- src/runtime/node/http/internal/request.ts | 2 ++ test/workerd/tests.mjs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/runtime/node/http/internal/request.ts b/src/runtime/node/http/internal/request.ts index 4512ca4f..c5081fe5 100644 --- a/src/runtime/node/http/internal/request.ts +++ b/src/runtime/node/http/internal/request.ts @@ -51,6 +51,8 @@ export class IncomingMessage extends Readable implements http.IncomingMessage { get trailersDistinct() { return _distinct(this.trailers); } + + _read() {} } function _distinct(obj: Record) { diff --git a/test/workerd/tests.mjs b/test/workerd/tests.mjs index 016f6095..6a5008f1 100644 --- a/test/workerd/tests.mjs +++ b/test/workerd/tests.mjs @@ -128,3 +128,19 @@ export const workerd_path = { assert.strictEqual(pathPosix.delimiter, ":"); }, }; + +// --- node:http + +export const workerd_http = { + async test() { + const http = await import("unenv/runtime/node/http"); + const net = await import("unenv/runtime/node/net"); + const message = new http.IncomingMessage(new net.Socket()); + await assert.doesNotThrow(async () => { + // Would throw if the async iterator is not implemented + for await (const chunk of message) { + // empty + } + }); + }, +};