From 4da8dc5a7ee13856c95c4ce82c9764f3851d649c Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 13 Jul 2026 18:13:39 +0300 Subject: [PATCH] fix and clean up metro config --- metro.config.js | 40 ----------------------------------- metro.config.ts | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 40 deletions(-) delete mode 100644 metro.config.js create mode 100644 metro.config.ts diff --git a/metro.config.js b/metro.config.js deleted file mode 100644 index 363956a77d..0000000000 --- a/metro.config.js +++ /dev/null @@ -1,40 +0,0 @@ -// Learn more https://docs.expo.io/guides/customizing-metro -const {getSentryExpoConfig} = require('@sentry/react-native/metro') -const cfg = getSentryExpoConfig(__dirname) - -// inject `.e2e.ts` and `.e2e.tsx` into the sourceExts when running tests -cfg.resolver.sourceExts = process.env.RN_SRC_EXT - ? process.env.RN_SRC_EXT.split(',').concat(cfg.resolver.sourceExts) - : cfg.resolver.sourceExts - -if (cfg.resolver.resolveRequest) { - throw Error('Update this override because it is conflicting now.') -} - -if (process.env.BSKY_PROFILE) { - cfg.cacheVersion += ':PROFILE' -} - -cfg.resolver.assetExts = [...cfg.resolver.assetExts, 'woff2'] - -cfg.resolver.resolveRequest = (context, moduleName, platform) => { - if (process.env.BSKY_PROFILE) { - if (moduleName.endsWith('ReactNativeRenderer-prod')) { - return context.resolveRequest( - context, - moduleName.replace('-prod', '-profiling'), - platform, - ) - } - } - return context.resolveRequest(context, moduleName, platform) -} - -cfg.transformer.getTransformOptions = async () => ({ - transform: { - experimentalImportSupport: true, - inlineRequires: true, - }, -}) - -module.exports = cfg diff --git a/metro.config.ts b/metro.config.ts new file mode 100644 index 0000000000..64701df27d --- /dev/null +++ b/metro.config.ts @@ -0,0 +1,55 @@ +// Learn more https://docs.expo.io/guides/customizing-metro +import {type CustomResolver} from '@expo/metro/metro-resolver' +import {getDefaultConfig} from '@expo/metro-config' +import {getSentryExpoConfig} from '@sentry/react-native/metro.js' + +const config = getSentryExpoConfig(import.meta.dirname, { + // TODO: confirm this doesn't break anything when we switch to metro web + includeWebReplay: true, + + getDefaultConfig: (projectRoot, options) => { + const config = getDefaultConfig(projectRoot, options) + + if (typeof process.env.RN_SRC_EXT === 'string') { + // inject `.e2e.ts` and `.e2e.tsx` into the sourceExts when running tests) + config.resolver.sourceExts.push(...process.env.RN_SRC_EXT.split(',')) + } + + config.resolver.assetExts = [...config.resolver.assetExts, 'woff2'] + + if (config.resolver.resolveRequest) { + throw Error('Update this override because it is conflicting now.') + } + + if (process.env.BSKY_PROFILE) { + // @ts-expect-error readonly property + config.cacheVersion += ':PROFILE' + + const resolver: CustomResolver = (context, moduleName, platform) => { + if (moduleName.endsWith('ReactNativeRenderer-prod')) { + return context.resolveRequest( + context, + moduleName.replace('-prod', '-profiling'), + platform, + ) + } + return context.resolveRequest(context, moduleName, platform) + } + + // @ts-expect-error readonly property + config.resolver.resolveRequest = resolver + } + + config.transformer.getTransformOptions = () => + Promise.resolve({ + transform: { + experimentalImportSupport: true, + inlineRequires: true as false, // ??? typescript why? + }, + }) + + return config as unknown as Record + }, +}) + +export default config