From 0ee4b6600b6a7db4558a84101453e8433efd5d5c Mon Sep 17 00:00:00 2001 From: CJ Date: Sat, 9 May 2026 12:50:29 +1000 Subject: [PATCH] fix: migrate from deprecated module.register() to module.registerHooks() module.register() has been runtime-deprecated as DEP0205 since Node.js v25.9.0. Use module.registerHooks() when available (Node.js >= 24.4), falling back to module.register() for older versions. The resolve hook wrapper strips fields (e.g. importAttributes) not recognized by the native createResolve binding to maintain compatibility. --- packages/core/register.mjs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/core/register.mjs b/packages/core/register.mjs index 96585315..26ee172d 100644 --- a/packages/core/register.mjs +++ b/packages/core/register.mjs @@ -3,9 +3,9 @@ import * as NodeModule from "node:module"; import { addHook } from "pirates"; import { OxcTransformer } from "./index.js"; +import { createResolve, initTracing, load } from "./index.js"; -// Destructure from NodeModule namespace to support older Node.js versions -const { register, setSourceMapsSupport } = NodeModule; +const { registerHooks, register, setSourceMapsSupport } = NodeModule; const DEFAULT_EXTENSIONS = new Set([ ".js", @@ -20,7 +20,25 @@ const DEFAULT_EXTENSIONS = new Set([ ".es", ]); -register("@oxc-node/core/esm", import.meta.url); +// Use registerHooks (Node.js >= 24.4) when available, fall back to deprecated register() +if (typeof registerHooks === "function") { + initTracing(); + + // Wrap resolve to strip fields not recognized by the native binding + function resolve(specifier, context, nextResolve) { + const { parentURL, conditions } = context; + return createResolve( + { getCurrentDirectory: () => process.cwd() }, + specifier, + { parentURL, conditions }, + nextResolve, + ); + } + + registerHooks({ resolve, load }); +} else { + register("@oxc-node/core/esm", import.meta.url); +} if (typeof setSourceMapsSupport === "function") { setSourceMapsSupport(true, { nodeModules: true, generatedCode: true });