From 7f54dd6cb3ed9022d298f01e38fdfb4efc5fccaf Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Fri, 11 Jul 2025 05:18:58 -0700 Subject: [PATCH] Breaking: Use named exports in `metro-babel-register` (#52564) Summary: Currently, `metro-babel-register` has a function as its default export, to which we've tagged on various properties. This tidies that up to a more idiomatic object of named exports, with `register` as a new one of them. This also serves to make it more compatible with automatic TypeScript generation. This is semver breaking, but `metro-babel-register` has very little usage outside Meta projects so isn't expected to be disruptive. Changelog: [Internal] Metro changelog: ``` - **[Breaking]**: Move metro-babel-register's main function to a named export `register` ``` Differential Revision: D78157559 --- scripts/shared/babelRegister.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/shared/babelRegister.js b/scripts/shared/babelRegister.js index 876cb367fe2..ee95d8d6670 100644 --- a/scripts/shared/babelRegister.js +++ b/scripts/shared/babelRegister.js @@ -41,7 +41,15 @@ function registerForMonorepo() { // $FlowExpectedError[cannot-resolve-module] - Won't resolve in OSS require('@fb-tools/babel-register'); } else { - require('metro-babel-register')([ + // Temporarily allow the default export to be a function (Metro <= 0.82), + // or contain a `register` function (Metro >= 0.83). Remove shim once Metro + // is bumped in OSS. + const metroBabelRegister = require('metro-babel-register') /*:: as $FlowFixMe */; + const registerFunction = + typeof metroBabelRegister.register === 'function' + ? metroBabelRegister.register + : metroBabelRegister; + registerFunction([ PACKAGES_DIR, PRIVATE_DIR, SCRIPTS_DIR,