File
Blob: src/workerd/api/node/AGENTS.md
src/workerd/api/node/
C++ implementations of Node.js built-in modules. Each module = JSG-bound class registered via NODEJS_MODULES(V) macro in node.h. TypeScript counterpart lives in src/node/.
BUILD TARGETS
node-core: buffer, dns, i18n, sqlite, url. No//src/workerd/iodep — do not add one. Depends on Rust crates (cxx-integration,dns,net),ada-url,nbytes,simdutf.node: async-hooks, crypto, diagnostics-channel, module, process, timers, util, zlib-util. Depends onio,ncrypto,zstd,kj-brotli. Depends onnode-core.exceptions: Standalone Node.js exception types; dep ofnode-core.
MODULE REGISTRATION
- Add
JSG_RESOURCE_TYPEclass in<module>.h+<module>.c++ - Define
EW_NODE_<MODULE>_ISOLATE_TYPESmacro in header - Add
V(ClassName, "node-internal:<name>")toNODEJS_MODULES(V)innode.h(orNODEJS_MODULES_EXPERIMENTAL(V)for staging) - Append to
EW_NODE_ISOLATE_TYPESat bottom ofnode.h - Per-module compat flags gated in
registerNodeJsCompatModules()— addisNode*Module()+featureFlags.getEnable*()check - DnsUtil special-cased: C++ fallback when
RUST_BACKED_NODE_DNSautogate disabled
TESTING
Tests in tests/. Naming: <module>-test.js + <module>-test.wd-test; -nodejs- infix when needing compat flags. All tests set compatibilityFlags = ["nodejs_compat", "nodejs_compat_v2", "experimental"]. Network tests (net, tls, http) use sidecar js_binary targets. fixtures/ has 46 PEM files for crypto. process-stdio tests use sh_test with .expected_stdout/.expected_stderr. C++ unit test: buffer-test.c++ via kj_test.