From 75ec79bf2b43d74ef1d5209b68348a33bc1a9365 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Mon, 13 Oct 2025 17:41:55 +0200 Subject: [PATCH 1/2] fix(metro): Handle missing shouldAddToIgnoreList callback in Metro serializer --- .../core/src/js/tools/vendor/metro/utils.ts | 2 +- .../test/tools/sentryMetroSerializer.test.ts | 55 ++++++++++++++----- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/packages/core/src/js/tools/vendor/metro/utils.ts b/packages/core/src/js/tools/vendor/metro/utils.ts index 290983b6c3..f1a65f327e 100644 --- a/packages/core/src/js/tools/vendor/metro/utils.ts +++ b/packages/core/src/js/tools/vendor/metro/utils.ts @@ -140,7 +140,7 @@ Please check the version of Metro you are using and report the issue at http://w // Always generate source maps, can't use Sentry without source maps const map = sourceMapStringFunction([...preModules, ...getSortedModules(graph, options)], { processModuleFilter: options.processModuleFilter, - shouldAddToIgnoreList: options.shouldAddToIgnoreList, + shouldAddToIgnoreList: options.shouldAddToIgnoreList || (() => false), }); return { code, map }; }; diff --git a/packages/core/test/tools/sentryMetroSerializer.test.ts b/packages/core/test/tools/sentryMetroSerializer.test.ts index 244a2b440f..e654d59490 100644 --- a/packages/core/test/tools/sentryMetroSerializer.test.ts +++ b/packages/core/test/tools/sentryMetroSerializer.test.ts @@ -50,10 +50,48 @@ describe('Sentry Metro Serializer', () => { expect(bundle.code).toEqual(fs.readFileSync(`${__dirname}/fixtures/bundleWithPrelude.js.fixture`, 'utf8')); expect(bundle.map).toEqual(fs.readFileSync(`${__dirname}/fixtures/bundleWithPrelude.js.fixture.map`, 'utf8')); }); + + test('works when shouldAddToIgnoreList is undefined', async () => { + const serializer = createSentryMetroSerializer(); + const args = mockMinSerializerArgs({ shouldAddToIgnoreList: undefined }); + + const bundle = await serializer(...args); + + expect(bundle).toBeDefined(); + if (typeof bundle !== 'string') { + expect(bundle.code).toBeDefined(); + expect(bundle.map).toBeDefined(); + const debugId = determineDebugIdFromBundleSource(bundle.code); + expect(debugId).toMatch(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/); + } + }); }); -function mockMinSerializerArgs(): Parameters { +function mockMinSerializerArgs(options?: { + shouldAddToIgnoreList?: ((module: Module) => boolean) | undefined; +}): Parameters { let modulesCounter = 0; + + const baseOptions: Record = { + asyncRequireModulePath: 'asyncRequire', + createModuleId: (_filePath: string): number => modulesCounter++, + dev: false, + getRunModuleStatement: (_moduleId: string | number): string => '', + includeAsyncPaths: false, + modulesOnly: false, + processModuleFilter: (_module: Module) => true, + projectRoot: '/project/root', + runBeforeMainModule: [], + runModule: false, + serverRoot: '/server/root', + }; + + if (options && 'shouldAddToIgnoreList' in options) { + baseOptions.shouldAddToIgnoreList = options.shouldAddToIgnoreList; + } else { + baseOptions.shouldAddToIgnoreList = (_module: Module) => false; + } + return [ 'index.js', [], @@ -68,20 +106,7 @@ function mockMinSerializerArgs(): Parameters { unstable_transformProfile: 'hermes-stable', }, }, - { - asyncRequireModulePath: 'asyncRequire', - createModuleId: (_filePath: string): number => modulesCounter++, - dev: false, - getRunModuleStatement: (_moduleId: string | number): string => '', - includeAsyncPaths: false, - modulesOnly: false, - processModuleFilter: (_module: Module) => true, - projectRoot: '/project/root', - runBeforeMainModule: [], - runModule: false, - serverRoot: '/server/root', - shouldAddToIgnoreList: (_module: Module) => false, - }, + baseOptions as any, ]; } From c3e96dd6ff06637165cfed7088501a03c3a03695 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Mon, 13 Oct 2025 17:44:09 +0200 Subject: [PATCH 2/2] Adds changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c7dcd45e2..7cad0a83c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - Fix compatibility with `react-native-legal` ([#5253](https://github.com/getsentry/sentry-react-native/pull/5253)) - The licenses json file is correctly generated and placed into the `res/` folder now +- Handle missing shouldAddToIgnoreList callback in Metro ([#5260](https://github.com/getsentry/sentry-react-native/pull/5260)) ### Dependencies