Skip to content

Conversation

akapug
Copy link
Member

@akapug akapug commented Aug 23, 2025

Ready for review Powered by Pull Request Badge

Hi @sgammon

This PR focuses on pragmatic Node API surface to unblock Next.js.

Included

  • url helpers
    • domainToASCII/Unicode (java.net.IDN)
    • fileURLToPath/pathToFileURL (URI/Path)
    • urlToHttpOptions (protocol/hostname/port/path)
  • module (minimal)
    • builtinModules, isBuiltin, createRequire(import.meta.url)
    • Resolves built-ins via ModuleRegistry; falls back to ElideUniversalJsModuleLoader for CommonJS
  • http (minimal)
    • createServer(listener) wiring into Elide’s Netty pipeline
    • Server: on('request', fn), listen(port[, host][, cb]), address(), close() TODO
    • ServerResponse wrapper: setHeader/getHeader/removeHeader, writeHead, write(no-op), end (sends underlying HttpResponse), placeholders for headersSent/statusCode/statusMessage
  • handler semantics
    • Non-boolean/undefined handler returns are treated as "handled" to prevent 404 fallthrough
  • tests
    • NodeUrlHelpersTest (helpers presence and basics)
    • NodeCreateRequireTest (createRequire(import.meta.url) → require('node:url'))
    • NodeHttpFlowTest (createServer → listen(0) → address())
    • HandlerFallthroughTest (writes + undefined return; no fallthrough)

Rationale

  • These are the frequent early blockers for Next.js. This gets a basic, correct surface so frameworks boot and serve simple SSR while we iterate on deeper Node parity (streaming/backpressure, HTTPS/HTTP2, sockets).

Notes on timers progress

  • Core JS timers are implemented (JsTimers + tests) powering setTimeout/setInterval/clear*.
  • The Node timers modules (node:timers, node:timers/promises) appear in-progress under tools/runtime/elide/runtime/js/modules/timers(/promises) with Bazel/TS stubs, but are not yet registered as Node built-ins here. Next step would be to wire those into ModuleRegistry (or add NodeTimersModule/NodeTimersPromisesModule) using the existing JsTimers backend.

Follow-ups I can take next

  • Expand ServerResponse/IncomingMessage (mutable statusCode/statusMessage, headersSent toggling, buffered write/streaming)
  • https/http2 wrappers
  • urlToHttpOptions parity details
  • node:module extended APIs (syncBuiltinESMExports/register/findSourceMap/SourceMap) if demanded by consumers
  • Wire node:timers and node:timers/promises

Changed files

  • packages/graalvm/src/main/kotlin/elide/runtime/node/url/NodeURL.kt
  • packages/graalvm/src/main/kotlin/elide/runtime/node/module/NodeModules.kt
  • packages/graalvm/src/main/kotlin/elide/runtime/node/http/NodeHttp.kt
  • packages/graalvm/src/main/kotlin/elide/runtime/intrinsics/server/http/internal/GuestSimpleHandler.kt
  • packages/graalvm/src/test/kotlin/elide/runtime/node/NodeUrlHelpersTest.kt
  • packages/graalvm/src/test/kotlin/elide/runtime/node/NodeCreateRequireTest.kt
  • packages/graalvm/src/test/kotlin/elide/runtime/node/NodeHttpFlowTest.kt
  • packages/graalvm/src/test/kotlin/elide/runtime/node/HandlerFallthroughTest.kt

Thanks for the review!


Pull Request opened by Augment Code with guidance from the PR author

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