Skip to content

fix: Support React-Native 0.80#168

Merged
miquelbeltran merged 25 commits intomasterfrom
rn-0.79.2
Jul 8, 2025
Merged

fix: Support React-Native 0.80#168
miquelbeltran merged 25 commits intomasterfrom
rn-0.79.2

Conversation

@miquelbeltran
Copy link
Contributor

@miquelbeltran miquelbeltran commented Jun 6, 2025

fix: Support React-Native 0.80

Description 📝

  • Purpose: Fixes to support React-Native 0.80, including updates in demo and expo projects.
  • Approach: Update dependencies and code changes

Closes: #169

Type of change

  • Fix

Updates

  • Changed usage of XHRInterceptor to support the 0.79 API changes
  • Upgraded dependencies

Test plan 🧪

  • Unit test and test on device with demo app + expo demo app

Author to check 👓

  • Project and all contained modules builds successfully
  • Self-/dev-tested
  • Unit/UI/Automation/Integration tests provided where applicable
  • Code is written to standards
  • Appropriate documentation written (code comments, internal docs)

Reviewer to check ✔️

  • Project and all contained modules builds successfully
  • Change has been dev-/reviewer-tested, where possible
  • Unit/UI/Automation/Integration tests provided where applicable
  • Code is written to standards
  • Appropriate documentation written (code comments, internal docs)

@miquelbeltran miquelbeltran marked this pull request as draft June 6, 2025 15:08
@miquelbeltran miquelbeltran changed the title chore: update RN to 0.79.2 fix: Support React-Native 0.79 Jun 10, 2025
@miquelbeltran
Copy link
Contributor Author

@miquelbeltran miquelbeltran changed the title fix: Support React-Native 0.79 fix: Support React-Native 0.80 Jul 1, 2025
@miquelbeltran
Copy link
Contributor Author

Just to confirm, facebook/metro#1516 still happens on 0.80

@miquelbeltran miquelbeltran mentioned this pull request Jul 1, 2025
10 tasks
@miquelbeltran
Copy link
Contributor Author

As temporal solution, I created release 1.5.4-alpha.1 which disables use of XHRInterceptor: https://www.npmjs.com/package/raygun4reactnative/v/1.5.4-alpha.1

This build disables RUM, but at least unblocks customers that want to use react-native 0.79+.

@robhogan
Copy link

robhogan commented Jul 7, 2025

@miquelbeltran just a thought if you need to support older Metro versions - the bug occurred when using multiple optional dependencies in the same file or other dependencies after unresolvable optional dependencies.

You could workaround that by splitting out the optional dependencies into their own files:

// MaybeNewXHRInterceptorModule.ts
let XHRInterceptorModule = null;
try {
   XHRInterceptorModule = require('react-native/src/private/inspector/XHRInterceptor');
} catch {}
module.exports = XHRInterceptorModule;
// MaybeOldXHRInterceptorModule.ts
let XHRInterceptorModule = null;
try {
   XHRInterceptorModule = require('react-native/Libraries/Network/XHRInterceptor');
} catch {}
module.exports = XHRInterceptorModule;
// RealUserMonitor.ts
import MaybeOldXHRInterceptorModule from './MaybeOldXHRInterceptorModule';
import MaybeNewXHRInterceptorModule from './MaybeNewXHRInterceptorModule';

const XHRInterceptorModule = MaybeNewXHRInterceptorModule ?? MaybeOldXHRInterceptorModule;

That should work with all RN/Metro versions.

Heads up though that the JS Stable API project will hide this module in future versions, so I'd recommend raising your use case here to create the public APIs you'll need.

@miquelbeltran
Copy link
Contributor Author

Thanks for the tip @robhogan I will check the discussion as well

@miquelbeltran miquelbeltran marked this pull request as ready for review July 8, 2025 07:22
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI script changed to use the build scripts in the package.json

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed unused test file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required for Android SDK updates

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automatically changed by build process

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

demo package updates, the use of the tgz is due to using the build scripts in the package.json. Since this is a demo project, that's no problem

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SDK updates are mostly on dev-dependencies that don't affect customers. async-storage update is required for RN 0.79+

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code added in this module ensures that the SDK doesn't break if XHRInterceptorModule is not available, still a warning error will be displayed to developers

@miquelbeltran miquelbeltran requested a review from Olwiba July 8, 2025 07:28
Copy link

@Olwiba Olwiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, reads all good to me - nice work 🚀

@miquelbeltran miquelbeltran merged commit bf5db4c into master Jul 8, 2025
8 checks passed
@miquelbeltran miquelbeltran deleted the rn-0.79.2 branch July 8, 2025 11:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RUM: Broken XHRInterceptor on RN 0.79

3 participants