From cf1dc5ee90cff74291556e62ace47ba1c81f9bc0 Mon Sep 17 00:00:00 2001 From: Oleksii Bulenok Date: Fri, 7 Aug 2026 12:12:49 +0200 Subject: [PATCH] react native web webview mapping --- metro.config.ts | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/metro.config.ts b/metro.config.ts index 070188c7c7..25d1ac8104 100644 --- a/metro.config.ts +++ b/metro.config.ts @@ -26,22 +26,37 @@ const config = getSentryExpoConfig(import.meta.dirname, { 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 } + const resolver: CustomResolver = (context, moduleName, platform) => { + /* + * react-native-webview has no web implementation (its fallback renders + * "does not support this platform"), so swap in react-native-web-webview + * to keep external media embeds working. Mirrors the old webpack alias. + */ + if (platform === 'web' && moduleName === 'react-native-webview') { + return context.resolveRequest( + context, + 'react-native-web-webview', + platform, + ) + } + if ( + process.env.BSKY_PROFILE && + 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: {