@sentry/react-native 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNSentry.podspec +1 -1
- package/android/expo-handler/build.gradle +20 -0
- package/android/expo-handler/src/main/java/io/sentry/react/expo/SentryExpoPackage.java +22 -0
- package/android/expo-handler/src/main/java/io/sentry/react/expo/SentryReactNativeHostHandler.java +48 -0
- package/android/expo-stubs/README.md +7 -0
- package/android/expo-stubs/build.gradle +23 -0
- package/android/expo-stubs/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/expo-stubs/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/expo-stubs/gradlew +251 -0
- package/android/expo-stubs/gradlew.bat +94 -0
- package/android/expo-stubs/settings.gradle +1 -0
- package/android/expo-stubs/src/main/java/expo/modules/core/interfaces/Package.java +11 -0
- package/android/expo-stubs/src/main/java/expo/modules/core/interfaces/ReactNativeHostHandler.java +7 -0
- package/android/libs/expo-stubs.jar +0 -0
- package/android/libs/replay-stubs.jar +0 -0
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +15 -11
- package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
- package/dist/js/NativeLogListener.js.map +1 -1
- package/dist/js/RNSentryReplayMaskNativeComponent.d.ts.map +1 -1
- package/dist/js/RNSentryReplayUnmaskNativeComponent.d.ts.map +1 -1
- package/dist/js/breadcrumb.js.map +1 -1
- package/dist/js/client.js.map +1 -1
- package/dist/js/feedback/FeedbackButton.js.map +1 -1
- package/dist/js/feedback/FeedbackWidget.js +6 -6
- package/dist/js/feedback/FeedbackWidget.js.map +1 -1
- package/dist/js/feedback/FeedbackWidget.styles.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackWidgetManager.js.map +1 -1
- package/dist/js/feedback/FeedbackWidgetProvider.js.map +1 -1
- package/dist/js/feedback/ScreenshotButton.d.ts +1 -1
- package/dist/js/feedback/ScreenshotButton.js.map +1 -1
- package/dist/js/feedback/ShakeToReportBug.js.map +1 -1
- package/dist/js/feedback/defaults.js.map +1 -1
- package/dist/js/feedback/integration.d.ts +2 -2
- package/dist/js/feedback/integration.d.ts.map +1 -1
- package/dist/js/feedback/integration.js.map +1 -1
- package/dist/js/feedback/lazy.js.map +1 -1
- package/dist/js/feedback/utils.d.ts.map +1 -1
- package/dist/js/feedback/utils.js.map +1 -1
- package/dist/js/integrations/appRegistry.d.ts.map +1 -1
- package/dist/js/integrations/appRegistry.js.map +1 -1
- package/dist/js/integrations/breadcrumbs.d.ts.map +1 -1
- package/dist/js/integrations/debugsymbolicator.js +3 -3
- package/dist/js/integrations/debugsymbolicator.js.map +1 -1
- package/dist/js/integrations/debugsymbolicatorutils.js.map +1 -1
- package/dist/js/integrations/default.js +1 -1
- package/dist/js/integrations/default.js.map +1 -1
- package/dist/js/integrations/devicecontext.js +1 -1
- package/dist/js/integrations/devicecontext.js.map +1 -1
- package/dist/js/integrations/expoconstants.js.map +1 -1
- package/dist/js/integrations/expocontext.js.map +1 -1
- package/dist/js/integrations/expoupdateslistener.js.map +1 -1
- package/dist/js/integrations/logEnricherIntegration.js +1 -1
- package/dist/js/integrations/logEnricherIntegration.js.map +1 -1
- package/dist/js/integrations/modulesloader.js.map +1 -1
- package/dist/js/integrations/nativelinkederrors.d.ts.map +1 -1
- package/dist/js/integrations/nativelinkederrors.js +1 -0
- package/dist/js/integrations/nativelinkederrors.js.map +1 -1
- package/dist/js/integrations/primitiveTagIntegration.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlersutils.js.map +1 -1
- package/dist/js/integrations/reactnativeinfo.js.map +1 -1
- package/dist/js/integrations/release.js +1 -1
- package/dist/js/integrations/release.js.map +1 -1
- package/dist/js/integrations/rewriteframes.js.map +1 -1
- package/dist/js/integrations/screenshot.js +1 -1
- package/dist/js/integrations/screenshot.js.map +1 -1
- package/dist/js/integrations/sdkinfo.js.map +1 -1
- package/dist/js/integrations/spotlight.js.map +1 -1
- package/dist/js/integrations/viewhierarchy.js +1 -1
- package/dist/js/integrations/viewhierarchy.js.map +1 -1
- package/dist/js/misc.js.map +1 -1
- package/dist/js/options.d.ts +1 -1
- package/dist/js/options.js.map +1 -1
- package/dist/js/playground/examples.js.map +1 -1
- package/dist/js/playground/modal.d.ts +2 -2
- package/dist/js/playground/modal.d.ts.map +1 -1
- package/dist/js/playground/modal.js +6 -6
- package/dist/js/playground/modal.js.map +1 -1
- package/dist/js/profiling/cache.js.map +1 -1
- package/dist/js/profiling/convertHermesProfile.js.map +1 -1
- package/dist/js/profiling/debugid.js.map +1 -1
- package/dist/js/profiling/integration.d.ts.map +1 -1
- package/dist/js/profiling/integration.js.map +1 -1
- package/dist/js/profiling/utils.js.map +1 -1
- package/dist/js/replay/CustomMask.d.ts.map +1 -1
- package/dist/js/replay/CustomMask.js.map +1 -1
- package/dist/js/replay/CustomMask.web.d.ts.map +1 -1
- package/dist/js/replay/browserReplay.d.ts.map +1 -1
- package/dist/js/replay/browserReplay.js.map +1 -1
- package/dist/js/replay/mobilereplay.d.ts.map +1 -1
- package/dist/js/replay/mobilereplay.js +21 -2
- package/dist/js/replay/mobilereplay.js.map +1 -1
- package/dist/js/replay/networkUtils.d.ts +0 -1
- package/dist/js/replay/networkUtils.d.ts.map +1 -1
- package/dist/js/replay/networkUtils.js.map +1 -1
- package/dist/js/replay/xhrUtils.js.map +1 -1
- package/dist/js/scopeSync.js.map +1 -1
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +4 -2
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/ModulesCollector.js.map +1 -1
- package/dist/js/tools/easBuildHooks.js +13 -14
- package/dist/js/tools/easBuildHooks.js.map +1 -1
- package/dist/js/tools/enableLogger.js +1 -2
- package/dist/js/tools/enableLogger.js.map +1 -1
- package/dist/js/tools/metroMiddleware.d.ts.map +1 -1
- package/dist/js/tools/metroMiddleware.js.map +1 -1
- package/dist/js/tools/metroconfig.js +6 -7
- package/dist/js/tools/metroconfig.js.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.js +7 -7
- package/dist/js/tools/sentryBabelTransformerUtils.js.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.d.ts.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.js +2 -2
- package/dist/js/tools/sentryMetroSerializer.js.map +1 -1
- package/dist/js/tools/sentryOptionsSerializer.js +1 -2
- package/dist/js/tools/sentryOptionsSerializer.js.map +1 -1
- package/dist/js/tools/sentryReleaseInjector.d.ts +1 -1
- package/dist/js/tools/sentryReleaseInjector.d.ts.map +1 -1
- package/dist/js/tools/sentryReleaseInjector.js.map +1 -1
- package/dist/js/tools/utils.d.ts.map +1 -1
- package/dist/js/tools/utils.js +7 -7
- package/dist/js/tools/utils.js.map +1 -1
- package/dist/js/tools/vendor/metro/countLines.d.ts.map +1 -1
- package/dist/js/tools/vendor/metro/utils.d.ts.map +1 -1
- package/dist/js/tools/vendor/metro/utils.js.map +1 -1
- package/dist/js/touchevents.d.ts.map +1 -1
- package/dist/js/touchevents.js +2 -0
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/expoAsset.js.map +1 -1
- package/dist/js/tracing/expoImage.js.map +1 -1
- package/dist/js/tracing/expoRouter.js.map +1 -1
- package/dist/js/tracing/gesturetracing.js.map +1 -1
- package/dist/js/tracing/integrations/appStart.d.ts +1 -1
- package/dist/js/tracing/integrations/appStart.d.ts.map +1 -1
- package/dist/js/tracing/integrations/appStart.js +5 -5
- package/dist/js/tracing/integrations/appStart.js.map +1 -1
- package/dist/js/tracing/integrations/nativeFrames.d.ts.map +1 -1
- package/dist/js/tracing/integrations/nativeFrames.js +4 -1
- package/dist/js/tracing/integrations/nativeFrames.js.map +1 -1
- package/dist/js/tracing/integrations/stalltracking.d.ts +1 -1
- package/dist/js/tracing/integrations/stalltracking.d.ts.map +1 -1
- package/dist/js/tracing/integrations/stalltracking.js +4 -1
- package/dist/js/tracing/integrations/stalltracking.js.map +1 -1
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js +14 -14
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js.map +1 -1
- package/dist/js/tracing/integrations/userInteraction.d.ts.map +1 -1
- package/dist/js/tracing/integrations/userInteraction.js.map +1 -1
- package/dist/js/tracing/onSpanEndUtils.d.ts.map +1 -1
- package/dist/js/tracing/onSpanEndUtils.js +20 -13
- package/dist/js/tracing/onSpanEndUtils.js.map +1 -1
- package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnativenavigation.js.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
- package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
- package/dist/js/tracing/reactnativetracing.js.map +1 -1
- package/dist/js/tracing/reactnavigation.d.ts +3 -0
- package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnavigation.js +4 -2
- package/dist/js/tracing/reactnavigation.js.map +1 -1
- package/dist/js/tracing/span.d.ts +2 -17
- package/dist/js/tracing/span.d.ts.map +1 -1
- package/dist/js/tracing/span.js.map +1 -1
- package/dist/js/tracing/timeToDisplayFallback.d.ts.map +1 -1
- package/dist/js/tracing/timetodisplay.js.map +1 -1
- package/dist/js/tracing/timetodisplaynative.d.ts.map +1 -1
- package/dist/js/tracing/timetodisplaynative.js.map +1 -1
- package/dist/js/tracing/utils.js.map +1 -1
- package/dist/js/transports/encodePolyfill.d.ts +1 -1
- package/dist/js/transports/encodePolyfill.d.ts.map +1 -1
- package/dist/js/transports/encodePolyfill.js.map +1 -1
- package/dist/js/transports/native.js.map +1 -1
- package/dist/js/utils/AsyncExpiringMap.js.map +1 -1
- package/dist/js/utils/encode.js.map +1 -1
- package/dist/js/utils/environment.js.map +1 -1
- package/dist/js/utils/ignorerequirecyclelogs.js.map +1 -1
- package/dist/js/utils/normalize.js.map +1 -1
- package/dist/js/utils/outcome.js.map +1 -1
- package/dist/js/utils/primitiveConverter.js.map +1 -1
- package/dist/js/utils/release.js.map +1 -1
- package/dist/js/utils/rnlibraries.js.map +1 -1
- package/dist/js/utils/safe.js.map +1 -1
- package/dist/js/utils/worldwide.d.ts +0 -1
- package/dist/js/utils/worldwide.d.ts.map +1 -1
- package/dist/js/utils/xhr.d.ts +0 -1
- package/dist/js/utils/xhr.d.ts.map +1 -1
- package/dist/js/utils/xhr.js.map +1 -1
- package/dist/js/vendor/base64-js/fromByteArray.js.map +1 -1
- package/dist/js/vendor/buffer/utf8ToBytes.js.map +1 -1
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +5 -6
- package/dist/js/wrapper.js.map +1 -1
- package/expo-module.config.json +7 -0
- package/ios/RNSentryStart.m +4 -1
- package/ios/RNSentryVersion.m +1 -1
- package/package.json +10 -10
- package/ts3.8/dist/js/feedback/ScreenshotButton.d.ts +1 -1
- package/ts3.8/dist/js/feedback/integration.d.ts +2 -2
- package/ts3.8/dist/js/options.d.ts +1 -1
- package/ts3.8/dist/js/playground/modal.d.ts +2 -2
- package/ts3.8/dist/js/replay/networkUtils.d.ts +0 -1
- package/ts3.8/dist/js/tracing/integrations/appStart.d.ts +1 -1
- package/ts3.8/dist/js/tracing/integrations/stalltracking.d.ts +1 -1
- package/ts3.8/dist/js/tracing/reactnavigation.d.ts +3 -0
- package/ts3.8/dist/js/tracing/span.d.ts +2 -17
- package/ts3.8/dist/js/transports/encodePolyfill.d.ts +1 -1
- package/ts3.8/dist/js/utils/worldwide.d.ts +0 -1
- package/ts3.8/dist/js/utils/xhr.d.ts +0 -1
- package/ts3.8/dist/js/version.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metroconfig.js","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug } from '@sentry/core';\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { CustomResolutionContext, CustomResolver, Resolution } from 'metro-resolver';\nimport * as process from 'process';\nimport { env } from 'process';\nimport { enableLogger } from './enableLogger';\nimport { withSentryMiddleware } from './metroMiddleware';\nimport {\n setSentryBabelTransformerOptions,\n setSentryDefaultBabelTransformerPathEnv,\n} from './sentryBabelTransformerUtils';\nimport { createSentryMetroSerializer, unstableBeforeAssetSerializationDebugIdPlugin } from './sentryMetroSerializer';\nimport { withSentryOptionsFromFile } from './sentryOptionsSerializer';\nimport { unstableReleaseConstantsPlugin } from './sentryReleaseInjector';\nimport type { MetroCustomSerializer } from './utils';\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig';\n\nexport * from './sentryMetroSerializer';\n\nenableLogger();\n\nexport interface SentryMetroConfigOptions {\n /**\n * Annotates React components with Sentry data.\n * @default false\n */\n annotateReactComponents?:\n | boolean\n | {\n ignoredComponents?: string[];\n };\n /**\n * Adds the Sentry replay package for web.\n * @default true\n */\n includeWebReplay?: boolean;\n /**\n * Add Sentry Metro Server Middleware which\n * enables the app to fetch stack frames source context.\n * @default true\n */\n enableSourceContextInDevelopment?: boolean;\n /**\n * Load Sentry Options from a file. If `true` it will use the default path.\n * If `false` it will not load any options from a file. Only options provided in the code will be used.\n * If `string` it will use the provided path.\n *\n * @default '{projectRoot}/sentry.options.json'\n */\n optionsFile?: string | boolean;\n}\n\nexport interface SentryExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * For Expo Web, inject `release` and `version` options from `app.json`, the Expo Application Config.\n *\n * @default true\n */\n injectReleaseForWeb?: boolean;\n}\n\n/**\n * Adds Sentry to the Metro config.\n *\n * Adds Debug ID to the output bundle and source maps.\n * Collapses Sentry frames from the stack trace view in LogBox.\n */\nexport function withSentryConfig(\n config: MetroConfig,\n {\n annotateReactComponents = false,\n includeWebReplay = true,\n enableSourceContextInDevelopment = true,\n optionsFile = true,\n }: SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n let newConfig = config;\n\n newConfig = withSentryDebugId(newConfig);\n newConfig = withSentryFramesCollapsed(newConfig);\n if (annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, annotateReactComponents);\n }\n if (includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n if (enableSourceContextInDevelopment) {\n newConfig = withSentryMiddleware(newConfig);\n }\n if (optionsFile) {\n newConfig = withSentryOptionsFromFile(newConfig, optionsFile);\n }\n\n return newConfig;\n}\n\n/**\n * This function returns Default Expo configuration with Sentry plugins.\n */\nexport function getSentryExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & SentryExpoConfigOptions & SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig;\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n ...(options.injectReleaseForWeb ?? true ? [unstableReleaseConstantsPlugin(projectRoot)] : []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n });\n\n let newConfig = withSentryFramesCollapsed(config);\n if (options.annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, options.annotateReactComponents);\n }\n\n if (options.includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, options.includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n\n if (options.enableSourceContextInDevelopment ?? true) {\n newConfig = withSentryMiddleware(newConfig);\n }\n\n if (options.optionsFile ?? true) {\n newConfig = withSentryOptionsFromFile(newConfig, options.optionsFile ?? true);\n }\n\n return newConfig;\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n }) => Module[])[];\n },\n ) => MetroConfig;\n} {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('expo/metro-config');\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.');\n }\n}\n\n/**\n * Adds Sentry Babel transformer to the Metro config.\n */\nexport function withSentryBabelTransformer(\n config: MetroConfig,\n annotateReactComponents: true | { ignoredComponents?: string[] },\n): MetroConfig {\n const defaultBabelTransformerPath = config.transformer?.babelTransformerPath;\n debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);\n\n if (!defaultBabelTransformerPath) {\n // This has to be console.warn because the options is enabled but won't be used\n // eslint-disable-next-line no-console\n console.warn('`transformer.babelTransformerPath` is undefined.');\n // eslint-disable-next-line no-console\n console.warn('Sentry Babel transformer cannot be used. Not adding it...');\n return config;\n }\n\n if (defaultBabelTransformerPath) {\n setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath);\n }\n\n if (typeof annotateReactComponents === 'object') {\n setSentryBabelTransformerOptions({\n annotateReactComponents,\n });\n }\n\n return {\n ...config,\n transformer: {\n ...config.transformer,\n babelTransformerPath: require.resolve('./sentryBabelTransformer'),\n },\n };\n}\n\nfunction withSentryDebugId(config: MetroConfig): MetroConfig {\n const customSerializer = createSentryMetroSerializer(\n config.serializer?.customSerializer || undefined,\n ) as MetroCustomSerializer;\n // MetroConfig types customSerializers as async only, but sync returns are also supported\n // The default serializer is sync\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer,\n },\n };\n}\n\n// Based on: https://github.com/facebook/metro/blob/c21daba415ea26511e157f794689caab9abe8236/packages/metro-resolver/src/resolve.js#L86-L91\ntype CustomResolverBeforeMetro068 = (\n context: CustomResolutionContext,\n realModuleName: string,\n platform: string | null,\n moduleName?: string,\n) => Resolution;\n\n/**\n * Includes `@sentry/replay` packages based on the `includeWebReplay` flag and current bundle `platform`.\n */\nexport function withSentryResolver(config: MetroConfig, includeWebReplay: boolean | undefined): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (includeWebReplay === false ||\n (includeWebReplay === undefined && (platform === 'android' || platform === 'ios'))) &&\n !!(oldMetroModuleName ?? moduleName).match(/@sentry(?:-internal)?\\/replay/)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, resolve context.resolveRequest is sentryResolver itself, where on later version it is the default resolver.\n if (context.resolveRequest === sentryResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease follow one of the following options:\n- Include your resolverRequest on your metroconfig.\n- Update your Metro version to 0.68 or higher.\n- Set includeWebReplay as true on your metro config.\n- If you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryResolverRequest,\n },\n };\n}\n\n/**\n * Matches relative import paths to server-only AI/MCP modules within `@sentry/core`.\n *\n * Metro passes the module name as-written in the source code, so for imports inside\n * `@sentry/core`'s barrel file like `export { ... } from './integrations/mcp-server/index.js'`,\n * the `moduleName` will be `./integrations/mcp-server/index.js`.\n */\nconst SERVER_ONLY_MODULE_RE =\n /\\/(mcp-server|tracing\\/(vercel-ai|openai|anthropic-ai|google-genai|langchain|langgraph)|utils\\/ai)(\\/|$)/;\n\nfunction isFromSentryCore(originModulePath: string): boolean {\n return originModulePath.includes('@sentry/core');\n}\n\n/**\n * Excludes server-only AI/MCP modules from native (Android/iOS) bundles.\n */\nexport function withSentryExcludeServerOnlyResolver(config: MetroConfig): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryServerOnlyResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (platform === 'android' || platform === 'ios') &&\n isFromSentryCore((context as { originModulePath?: string }).originModulePath ?? '') &&\n SERVER_ONLY_MODULE_RE.test(oldMetroModuleName ?? moduleName)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, context.resolveRequest is sentryServerOnlyResolverRequest itself, which would cause infinite recursion.\n if (context.resolveRequest === sentryServerOnlyResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease include your resolverRequest on your metroconfig or update your Metro version to 0.68 or higher.\nIf you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryServerOnlyResolverRequest,\n },\n };\n}\n\ntype MetroFrame = Parameters<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>[0];\ntype MetroCustomizeFrame = { readonly collapse?: boolean };\ntype MetroCustomizeFrameReturnValue =\n | ReturnType<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>\n | undefined;\n\n/**\n * Collapses Sentry internal frames from the stack trace view in LogBox.\n */\nexport function withSentryFramesCollapsed(config: MetroConfig): MetroConfig {\n const originalCustomizeFrame = config.symbolicator?.customizeFrame;\n const collapseSentryInternalFrames = (frame: MetroFrame): boolean =>\n typeof frame.file === 'string' &&\n (frame.file.includes('node_modules/@sentry/core/cjs/instrument.js') ||\n frame.file.includes('node_modules/@sentry/core/cjs/debug.js'));\n\n const customizeFrame = (frame: MetroFrame): MetroCustomizeFrameReturnValue => {\n const originalOrSentryCustomizeFrame = (\n originalCustomization: MetroCustomizeFrame | undefined,\n ): MetroCustomizeFrame => ({\n ...originalCustomization,\n collapse: originalCustomization?.collapse || collapseSentryInternalFrames(frame),\n });\n\n const maybePromiseCustomization = originalCustomizeFrame?.(frame) || undefined;\n\n if (maybePromiseCustomization !== undefined && 'then' in maybePromiseCustomization) {\n return maybePromiseCustomization.then<MetroCustomizeFrame>(originalCustomization =>\n originalOrSentryCustomizeFrame(originalCustomization),\n );\n }\n\n return originalOrSentryCustomizeFrame(maybePromiseCustomization);\n };\n\n return {\n ...config,\n symbolicator: {\n ...config.symbolicator,\n customizeFrame,\n },\n };\n}\n\n/**\n * Sets the `___SENTRY_METRO_DEV_SERVER___` environment flag.\n * This is used to determine if the SDK is running in Node in Metro Dev Server.\n * For example during static routes generation in `expo-router`.\n */\nfunction setSentryMetroDevServerEnvFlag(): void {\n env.___SENTRY_METRO_DEV_SERVER___ = 'true';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"metroconfig.js","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug } from '@sentry/core';\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { CustomResolutionContext, CustomResolver, Resolution } from 'metro-resolver';\nimport * as process from 'process';\nimport { env } from 'process';\nimport { enableLogger } from './enableLogger';\nimport { withSentryMiddleware } from './metroMiddleware';\nimport {\n setSentryBabelTransformerOptions,\n setSentryDefaultBabelTransformerPathEnv,\n} from './sentryBabelTransformerUtils';\nimport { createSentryMetroSerializer, unstableBeforeAssetSerializationDebugIdPlugin } from './sentryMetroSerializer';\nimport { withSentryOptionsFromFile } from './sentryOptionsSerializer';\nimport { unstableReleaseConstantsPlugin } from './sentryReleaseInjector';\nimport type { MetroCustomSerializer } from './utils';\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig';\n\nexport * from './sentryMetroSerializer';\n\nenableLogger();\n\nexport interface SentryMetroConfigOptions {\n /**\n * Annotates React components with Sentry data.\n * @default false\n */\n annotateReactComponents?:\n | boolean\n | {\n ignoredComponents?: string[];\n };\n /**\n * Adds the Sentry replay package for web.\n * @default true\n */\n includeWebReplay?: boolean;\n /**\n * Add Sentry Metro Server Middleware which\n * enables the app to fetch stack frames source context.\n * @default true\n */\n enableSourceContextInDevelopment?: boolean;\n /**\n * Load Sentry Options from a file. If `true` it will use the default path.\n * If `false` it will not load any options from a file. Only options provided in the code will be used.\n * If `string` it will use the provided path.\n *\n * @default '{projectRoot}/sentry.options.json'\n */\n optionsFile?: string | boolean;\n}\n\nexport interface SentryExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * For Expo Web, inject `release` and `version` options from `app.json`, the Expo Application Config.\n *\n * @default true\n */\n injectReleaseForWeb?: boolean;\n}\n\n/**\n * Adds Sentry to the Metro config.\n *\n * Adds Debug ID to the output bundle and source maps.\n * Collapses Sentry frames from the stack trace view in LogBox.\n */\nexport function withSentryConfig(\n config: MetroConfig,\n {\n annotateReactComponents = false,\n includeWebReplay = true,\n enableSourceContextInDevelopment = true,\n optionsFile = true,\n }: SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n let newConfig = config;\n\n newConfig = withSentryDebugId(newConfig);\n newConfig = withSentryFramesCollapsed(newConfig);\n if (annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, annotateReactComponents);\n }\n if (includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n if (enableSourceContextInDevelopment) {\n newConfig = withSentryMiddleware(newConfig);\n }\n if (optionsFile) {\n newConfig = withSentryOptionsFromFile(newConfig, optionsFile);\n }\n\n return newConfig;\n}\n\n/**\n * This function returns Default Expo configuration with Sentry plugins.\n */\nexport function getSentryExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & SentryExpoConfigOptions & SentryMetroConfigOptions = {},\n): MetroConfig {\n setSentryMetroDevServerEnvFlag();\n\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig;\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n ...(options.injectReleaseForWeb ?? true ? [unstableReleaseConstantsPlugin(projectRoot)] : []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n });\n\n let newConfig = withSentryFramesCollapsed(config);\n if (options.annotateReactComponents) {\n newConfig = withSentryBabelTransformer(newConfig, options.annotateReactComponents);\n }\n\n if (options.includeWebReplay === false) {\n newConfig = withSentryResolver(newConfig, options.includeWebReplay);\n }\n newConfig = withSentryExcludeServerOnlyResolver(newConfig);\n\n if (options.enableSourceContextInDevelopment ?? true) {\n newConfig = withSentryMiddleware(newConfig);\n }\n\n if (options.optionsFile ?? true) {\n newConfig = withSentryOptionsFromFile(newConfig, options.optionsFile ?? true);\n }\n\n return newConfig;\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n }) => Module[])[];\n },\n ) => MetroConfig;\n} {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('expo/metro-config');\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.');\n }\n}\n\n/**\n * Adds Sentry Babel transformer to the Metro config.\n */\nexport function withSentryBabelTransformer(\n config: MetroConfig,\n annotateReactComponents: true | { ignoredComponents?: string[] },\n): MetroConfig {\n const defaultBabelTransformerPath = config.transformer?.babelTransformerPath;\n debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);\n\n if (!defaultBabelTransformerPath) {\n // This has to be console.warn because the options is enabled but won't be used\n // eslint-disable-next-line no-console\n console.warn('`transformer.babelTransformerPath` is undefined.');\n // eslint-disable-next-line no-console\n console.warn('Sentry Babel transformer cannot be used. Not adding it...');\n return config;\n }\n\n if (defaultBabelTransformerPath) {\n setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath);\n }\n\n if (typeof annotateReactComponents === 'object') {\n setSentryBabelTransformerOptions({\n annotateReactComponents,\n });\n }\n\n return {\n ...config,\n transformer: {\n ...config.transformer,\n babelTransformerPath: require.resolve('./sentryBabelTransformer'),\n },\n };\n}\n\nfunction withSentryDebugId(config: MetroConfig): MetroConfig {\n const customSerializer = createSentryMetroSerializer(\n config.serializer?.customSerializer || undefined,\n ) as MetroCustomSerializer;\n // MetroConfig types customSerializers as async only, but sync returns are also supported\n // The default serializer is sync\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer,\n },\n };\n}\n\n// Based on: https://github.com/facebook/metro/blob/c21daba415ea26511e157f794689caab9abe8236/packages/metro-resolver/src/resolve.js#L86-L91\ntype CustomResolverBeforeMetro068 = (\n context: CustomResolutionContext,\n realModuleName: string,\n platform: string | null,\n moduleName?: string,\n) => Resolution;\n\n/**\n * Includes `@sentry/replay` packages based on the `includeWebReplay` flag and current bundle `platform`.\n */\nexport function withSentryResolver(config: MetroConfig, includeWebReplay: boolean | undefined): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (includeWebReplay === false ||\n (includeWebReplay === undefined && (platform === 'android' || platform === 'ios'))) &&\n !!(oldMetroModuleName ?? moduleName).match(/@sentry(?:-internal)?\\/replay/)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, resolve context.resolveRequest is sentryResolver itself, where on later version it is the default resolver.\n if (context.resolveRequest === sentryResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease follow one of the following options:\n- Include your resolverRequest on your metroconfig.\n- Update your Metro version to 0.68 or higher.\n- Set includeWebReplay as true on your metro config.\n- If you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryResolverRequest,\n },\n };\n}\n\n/**\n * Matches relative import paths to server-only AI/MCP modules within `@sentry/core`.\n *\n * Metro passes the module name as-written in the source code, so for imports inside\n * `@sentry/core`'s barrel file like `export { ... } from './integrations/mcp-server/index.js'`,\n * the `moduleName` will be `./integrations/mcp-server/index.js`.\n */\nconst SERVER_ONLY_MODULE_RE =\n /\\/(mcp-server|tracing\\/(vercel-ai|openai|anthropic-ai|google-genai|langchain|langgraph)|utils\\/ai)(\\/|$)/;\n\nfunction isFromSentryCore(originModulePath: string): boolean {\n return originModulePath.includes('@sentry/core');\n}\n\n/**\n * Excludes server-only AI/MCP modules from native (Android/iOS) bundles.\n */\nexport function withSentryExcludeServerOnlyResolver(config: MetroConfig): MetroConfig {\n const originalResolver = config.resolver?.resolveRequest as CustomResolver | CustomResolverBeforeMetro068 | undefined;\n\n const sentryServerOnlyResolverRequest: CustomResolver = (\n context: CustomResolutionContext,\n moduleName: string,\n platform: string | null,\n oldMetroModuleName?: string,\n ) => {\n if (\n (platform === 'android' || platform === 'ios') &&\n isFromSentryCore((context as { originModulePath?: string }).originModulePath ?? '') &&\n SERVER_ONLY_MODULE_RE.test(oldMetroModuleName ?? moduleName)\n ) {\n return { type: 'empty' } as Resolution;\n }\n if (originalResolver) {\n return oldMetroModuleName\n ? originalResolver(context, moduleName, platform, oldMetroModuleName)\n : originalResolver(context, moduleName, platform);\n }\n\n // Prior 0.68, context.resolveRequest is sentryServerOnlyResolverRequest itself, which would cause infinite recursion.\n if (context.resolveRequest === sentryServerOnlyResolverRequest) {\n // eslint-disable-next-line no-console\n console.error(\n `Error: [@sentry/react-native/metro] Can not resolve the defaultResolver on Metro older than 0.68.\nPlease include your resolverRequest on your metroconfig or update your Metro version to 0.68 or higher.\nIf you are still facing issues, report the issue at http://www.github.com/getsentry/sentry-react-native/issues`,\n );\n // Return required for test.\n return process.exit(-1);\n }\n\n return context.resolveRequest(context, moduleName, platform);\n };\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: sentryServerOnlyResolverRequest,\n },\n };\n}\n\ntype MetroFrame = Parameters<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>[0];\ntype MetroCustomizeFrame = { readonly collapse?: boolean };\ntype MetroCustomizeFrameReturnValue =\n | ReturnType<Required<Required<MetroConfig>['symbolicator']>['customizeFrame']>\n | undefined;\n\n/**\n * Collapses Sentry internal frames from the stack trace view in LogBox.\n */\nexport function withSentryFramesCollapsed(config: MetroConfig): MetroConfig {\n const originalCustomizeFrame = config.symbolicator?.customizeFrame;\n const collapseSentryInternalFrames = (frame: MetroFrame): boolean =>\n typeof frame.file === 'string' &&\n (frame.file.includes('node_modules/@sentry/core/cjs/instrument.js') ||\n frame.file.includes('node_modules/@sentry/core/cjs/debug.js'));\n\n const customizeFrame = (frame: MetroFrame): MetroCustomizeFrameReturnValue => {\n const originalOrSentryCustomizeFrame = (\n originalCustomization: MetroCustomizeFrame | undefined,\n ): MetroCustomizeFrame => ({\n ...originalCustomization,\n collapse: originalCustomization?.collapse || collapseSentryInternalFrames(frame),\n });\n\n const maybePromiseCustomization = originalCustomizeFrame?.(frame) || undefined;\n\n if (maybePromiseCustomization !== undefined && 'then' in maybePromiseCustomization) {\n return maybePromiseCustomization.then<MetroCustomizeFrame>(originalCustomization =>\n originalOrSentryCustomizeFrame(originalCustomization),\n );\n }\n\n return originalOrSentryCustomizeFrame(maybePromiseCustomization);\n };\n\n return {\n ...config,\n symbolicator: {\n ...config.symbolicator,\n customizeFrame,\n },\n };\n}\n\n/**\n * Sets the `___SENTRY_METRO_DEV_SERVER___` environment flag.\n * This is used to determine if the SDK is running in Node in Metro Dev Server.\n * For example during static routes generation in `expo-router`.\n */\nfunction setSentryMetroDevServerEnvFlag(): void {\n env.___SENTRY_METRO_DEV_SERVER___ = 'true';\n}\n"]}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SENTRY_BABEL_TRANSFORMER_OPTIONS = exports.SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH = void 0;
|
|
4
|
+
exports.setSentryDefaultBabelTransformerPathEnv = setSentryDefaultBabelTransformerPathEnv;
|
|
5
|
+
exports.getSentryDefaultBabelTransformerPathEnv = getSentryDefaultBabelTransformerPathEnv;
|
|
6
|
+
exports.loadDefaultBabelTransformer = loadDefaultBabelTransformer;
|
|
7
|
+
exports.setSentryBabelTransformerOptions = setSentryBabelTransformerOptions;
|
|
8
|
+
exports.getSentryBabelTransformerOptions = getSentryBabelTransformerOptions;
|
|
9
|
+
exports.createSentryBabelTransformer = createSentryBabelTransformer;
|
|
4
10
|
const babel_plugin_component_annotate_1 = require("@sentry/babel-plugin-component-annotate");
|
|
5
11
|
const core_1 = require("@sentry/core");
|
|
6
12
|
const process = require("process");
|
|
@@ -13,14 +19,12 @@ function setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath) {
|
|
|
13
19
|
process.env[exports.SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH] = defaultBabelTransformerPath;
|
|
14
20
|
core_1.debug.log(`Saved default Babel transformer path ${defaultBabelTransformerPath}`);
|
|
15
21
|
}
|
|
16
|
-
exports.setSentryDefaultBabelTransformerPathEnv = setSentryDefaultBabelTransformerPathEnv;
|
|
17
22
|
/**
|
|
18
23
|
* Reads default Babel transformer path from the environment variables.
|
|
19
24
|
*/
|
|
20
25
|
function getSentryDefaultBabelTransformerPathEnv() {
|
|
21
26
|
return process.env[exports.SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH];
|
|
22
27
|
}
|
|
23
|
-
exports.getSentryDefaultBabelTransformerPathEnv = getSentryDefaultBabelTransformerPathEnv;
|
|
24
28
|
/**
|
|
25
29
|
* Loads default Babel transformer from `@react-native/metro-config` -> `@react-native/metro-babel-transformer`.
|
|
26
30
|
*/
|
|
@@ -33,7 +37,6 @@ function loadDefaultBabelTransformer() {
|
|
|
33
37
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
34
38
|
return require(defaultBabelTransformerPath);
|
|
35
39
|
}
|
|
36
|
-
exports.loadDefaultBabelTransformer = loadDefaultBabelTransformer;
|
|
37
40
|
/**
|
|
38
41
|
*
|
|
39
42
|
*/
|
|
@@ -53,7 +56,6 @@ function setSentryBabelTransformerOptions(options) {
|
|
|
53
56
|
core_1.debug.log(`Sentry Babel transformer options set to ${exports.SENTRY_BABEL_TRANSFORMER_OPTIONS}`, optionsString);
|
|
54
57
|
process.env[exports.SENTRY_BABEL_TRANSFORMER_OPTIONS] = optionsString;
|
|
55
58
|
}
|
|
56
|
-
exports.setSentryBabelTransformerOptions = setSentryBabelTransformerOptions;
|
|
57
59
|
/**
|
|
58
60
|
*
|
|
59
61
|
*/
|
|
@@ -73,7 +75,6 @@ function getSentryBabelTransformerOptions() {
|
|
|
73
75
|
return undefined;
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
|
-
exports.getSentryBabelTransformerOptions = getSentryBabelTransformerOptions;
|
|
77
78
|
/**
|
|
78
79
|
* Creates a Babel transformer with Sentry component annotation plugin.
|
|
79
80
|
*/
|
|
@@ -88,7 +89,6 @@ function createSentryBabelTransformer() {
|
|
|
88
89
|
};
|
|
89
90
|
return Object.assign(Object.assign({}, defaultTransformer), { transform });
|
|
90
91
|
}
|
|
91
|
-
exports.createSentryBabelTransformer = createSentryBabelTransformer;
|
|
92
92
|
function addSentryComponentAnnotatePlugin(args, options) {
|
|
93
93
|
if (!args || typeof args.filename !== 'string' || !Array.isArray(args.plugins)) {
|
|
94
94
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryBabelTransformerUtils.js","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sentryBabelTransformerUtils.js","sourceRoot":"","sources":["../../../src/js/tools/sentryBabelTransformerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import componentAnnotatePlugin from '@sentry/babel-plugin-component-annotate';\nimport { debug } from '@sentry/core';\nimport * as process from 'process';\nimport type { BabelTransformer, BabelTransformerArgs } from './vendor/metro/metroBabelTransformer';\n\nexport type SentryBabelTransformerOptions = { annotateReactComponents?: { ignoredComponents?: string[] } };\n\nexport const SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH = 'SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH';\nexport const SENTRY_BABEL_TRANSFORMER_OPTIONS = 'SENTRY_BABEL_TRANSFORMER_OPTIONS';\n\n/**\n * Sets default Babel transformer path to the environment variables.\n */\nexport function setSentryDefaultBabelTransformerPathEnv(defaultBabelTransformerPath: string): void {\n process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH] = defaultBabelTransformerPath;\n debug.log(`Saved default Babel transformer path ${defaultBabelTransformerPath}`);\n}\n\n/**\n * Reads default Babel transformer path from the environment variables.\n */\nexport function getSentryDefaultBabelTransformerPathEnv(): string | undefined {\n return process.env[SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH];\n}\n\n/**\n * Loads default Babel transformer from `@react-native/metro-config` -> `@react-native/metro-babel-transformer`.\n */\nexport function loadDefaultBabelTransformer(): BabelTransformer {\n const defaultBabelTransformerPath = getSentryDefaultBabelTransformerPathEnv();\n if (!defaultBabelTransformerPath) {\n throw new Error(\n `Default Babel transformer path environment variable ${SENTRY_DEFAULT_BABEL_TRANSFORMER_PATH} is not set.`,\n );\n }\n\n debug.log(`Loading default Babel transformer from ${defaultBabelTransformerPath}`);\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(defaultBabelTransformerPath);\n}\n\n/**\n *\n */\nexport function setSentryBabelTransformerOptions(options: SentryBabelTransformerOptions): void {\n let optionsString: string | null = null;\n try {\n debug.log('Stringifying Sentry Babel transformer options', options);\n optionsString = JSON.stringify(options);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to stringify Sentry Babel transformer options', e);\n }\n\n if (!optionsString) {\n return;\n }\n\n debug.log(`Sentry Babel transformer options set to ${SENTRY_BABEL_TRANSFORMER_OPTIONS}`, optionsString);\n process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS] = optionsString;\n}\n\n/**\n *\n */\nexport function getSentryBabelTransformerOptions(): SentryBabelTransformerOptions | undefined {\n const optionsString = process.env[SENTRY_BABEL_TRANSFORMER_OPTIONS];\n if (!optionsString) {\n debug.log(`Sentry Babel transformer options environment variable ${SENTRY_BABEL_TRANSFORMER_OPTIONS} is not set`);\n return undefined;\n }\n\n try {\n debug.log(`Parsing Sentry Babel transformer options from ${optionsString}`);\n return JSON.parse(optionsString);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed to parse Sentry Babel transformer options', e);\n return undefined;\n }\n}\n\n/**\n * Creates a Babel transformer with Sentry component annotation plugin.\n */\nexport function createSentryBabelTransformer(): BabelTransformer {\n const defaultTransformer = loadDefaultBabelTransformer();\n const options = getSentryBabelTransformerOptions();\n\n // Using spread operator to avoid any conflicts with the default transformer\n const transform: BabelTransformer['transform'] = (...args) => {\n const transformerArgs = args[0];\n\n addSentryComponentAnnotatePlugin(transformerArgs, options?.annotateReactComponents);\n\n return defaultTransformer.transform(...args);\n };\n\n return {\n ...defaultTransformer,\n transform,\n };\n}\n\nfunction addSentryComponentAnnotatePlugin(\n args: BabelTransformerArgs | undefined,\n options: SentryBabelTransformerOptions['annotateReactComponents'] | undefined,\n): void {\n if (!args || typeof args.filename !== 'string' || !Array.isArray(args.plugins)) {\n return undefined;\n }\n\n if (!args.filename.includes('node_modules')) {\n if (options) {\n args.plugins.push([componentAnnotatePlugin, options]);\n } else {\n args.plugins.push(componentAnnotatePlugin);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryMetroSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAU,eAAe,EAA4D,MAAM,SAAS,CAAC;AAkBjH;;GAEG;AACH,wBAAgB,6CAA6C,CAAC,EAC5D,UAAU,EACV,OAAO,GACR,EAAE;IACD,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,EAAE,CAcX;AAGD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"sentryMetroSerializer.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAU,eAAe,EAA4D,MAAM,SAAS,CAAC;AAkBjH;;GAEG;AACH,wBAAgB,6CAA6C,CAAC,EAC5D,UAAU,EACV,OAAO,GACR,EAAE;IACD,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,EAAE,CAcX;AAGD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,mBAAmB,eAAe,KAAG,eA4DhF,CAAC"}
|
|
@@ -9,7 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.createSentryMetroSerializer =
|
|
12
|
+
exports.createSentryMetroSerializer = void 0;
|
|
13
|
+
exports.unstableBeforeAssetSerializationDebugIdPlugin = unstableBeforeAssetSerializationDebugIdPlugin;
|
|
13
14
|
const crypto = require("crypto");
|
|
14
15
|
const utils_1 = require("./utils");
|
|
15
16
|
const utils_2 = require("./vendor/metro/utils");
|
|
@@ -33,7 +34,6 @@ function unstableBeforeAssetSerializationDebugIdPlugin({ premodules, debugId, })
|
|
|
33
34
|
const debugIdModule = createDebugIdModule(debugId);
|
|
34
35
|
return (0, utils_1.prependModule)(premodules, debugIdModule);
|
|
35
36
|
}
|
|
36
|
-
exports.unstableBeforeAssetSerializationDebugIdPlugin = unstableBeforeAssetSerializationDebugIdPlugin;
|
|
37
37
|
// TODO: deprecate this and afterwards rename to createSentryDebugIdSerializer
|
|
38
38
|
/**
|
|
39
39
|
* Creates a Metro serializer that adds Debug ID module to the plain bundle.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryMetroSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { Bundle, MetroSerializer, MetroSerializerOutput, SerializedBundle, VirtualJSOutput } from './utils';\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n prependModule,\n stringToUUID,\n} from './utils';\nimport { createDefaultMetroSerializer } from './vendor/metro/utils';\n\ntype SourceMap = Record<string, unknown>;\n\nconst DEBUG_ID_PLACE_HOLDER = '__debug_id_place_holder__';\nconst DEBUG_ID_MODULE_PATH = '__debugid__';\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL=';\nconst DEBUG_ID_COMMENT = '//# debugId=';\n\n/**\n * Adds Sentry Debug ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n}): Module[] {\n if (!debugId) {\n return premodules;\n }\n\n const debugIdModuleExists = premodules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('\\n\\nDebug ID module found. Skipping Sentry Debug ID module...\\n\\n');\n return premodules;\n }\n\n const debugIdModule = createDebugIdModule(debugId);\n return prependModule(premodules, debugIdModule);\n}\n\n// TODO: deprecate this and afterwards rename to createSentryDebugIdSerializer\n/**\n * Creates a Metro serializer that adds Debug ID module to the plain bundle.\n * The Debug ID module is a virtual module that provides a debug ID in runtime.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createSentryMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer();\n return async function (entryPoint, preModules, graph, options) {\n if (graph.transformOptions.hot) {\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModuleExists = preModules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('Debug ID module found. Skipping Sentry Debug ID module...');\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER);\n options.sentryBundleCallback = createSentryBundleCallback(debugIdModule);\n const modifiedPreModules = prependModule(preModules, debugIdModule);\n\n // Run wrapped serializer\n const serializerResult = serializer(entryPoint, modifiedPreModules, graph, options);\n const { code: bundleCode, map: bundleMapString } = await extractSerializerResult(serializerResult);\n\n // Add debug id comment to the bundle\n let debugId = determineDebugIdFromBundleSource(bundleCode);\n if (!debugId) {\n // For lazy-loaded chunks or bundles without the debug ID module,\n // calculate the debug ID from the bundle content.\n // This ensures Metro 0.83.2+ code-split bundles get debug IDs.\n // That needs to be done because when Metro 0.83.2 stopped importing `BabelSourceMapSegment`\n // from `@babel/generator` and defined it locally, it subtly changed the source map output format.\n // https://github.com/facebook/metro/blob/main/packages/metro-source-map/src/source-map.js#L47\n debugId = calculateDebugId(bundleCode);\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID (calculated): ${debugId}`);\n }\n // Only print debug id for command line builds => not hot reload from dev server\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID: ${debugId}`);\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`;\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT);\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the debug id comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the debug id comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment,\n )}`;\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString);\n // For now we write both fields until we know what will become the standard - if ever.\n bundleMap['debug_id'] = debugId;\n bundleMap['debugId'] = debugId;\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n };\n };\n};\n\n/**\n * This function is expected to be called after serializer creates the final bundle object\n * and before the source maps are generated.\n *\n * It injects a debug ID into the bundle and returns the modified bundle.\n *\n * Access it via `options.sentryBundleCallback` in your custom serializer.\n */\nfunction createSentryBundleCallback(debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }) {\n return (bundle: Bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules);\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId));\n bundle.pre = injectDebugId(bundle.pre, debugId);\n return bundle;\n };\n}\n\nasync function extractSerializerResult(serializerResult: MetroSerializerOutput): Promise<SerializedBundle> {\n if (typeof serializerResult === 'string') {\n return { code: serializerResult, map: '{}' };\n }\n\n if ('map' in serializerResult) {\n return { code: serializerResult.code, map: serializerResult.map };\n }\n\n const awaitedResult = await serializerResult;\n if (typeof awaitedResult === 'string') {\n return { code: awaitedResult, map: '{}' };\n }\n\n return { code: awaitedResult.code, map: awaitedResult.map };\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId));\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5');\n hash.update(bundleCode);\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code);\n }\n }\n return stringToUUID(hash.digest('hex'));\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sentryMetroSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryMetroSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { Bundle, MetroSerializer, MetroSerializerOutput, SerializedBundle, VirtualJSOutput } from './utils';\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n prependModule,\n stringToUUID,\n} from './utils';\nimport { createDefaultMetroSerializer } from './vendor/metro/utils';\n\ntype SourceMap = Record<string, unknown>;\n\nconst DEBUG_ID_PLACE_HOLDER = '__debug_id_place_holder__';\nconst DEBUG_ID_MODULE_PATH = '__debugid__';\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL=';\nconst DEBUG_ID_COMMENT = '//# debugId=';\n\n/**\n * Adds Sentry Debug ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n}): Module[] {\n if (!debugId) {\n return premodules;\n }\n\n const debugIdModuleExists = premodules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('\\n\\nDebug ID module found. Skipping Sentry Debug ID module...\\n\\n');\n return premodules;\n }\n\n const debugIdModule = createDebugIdModule(debugId);\n return prependModule(premodules, debugIdModule);\n}\n\n// TODO: deprecate this and afterwards rename to createSentryDebugIdSerializer\n/**\n * Creates a Metro serializer that adds Debug ID module to the plain bundle.\n * The Debug ID module is a virtual module that provides a debug ID in runtime.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createSentryMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer();\n return async function (entryPoint, preModules, graph, options) {\n if (graph.transformOptions.hot) {\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModuleExists = preModules.findIndex(module => module.path === DEBUG_ID_MODULE_PATH) != -1;\n if (debugIdModuleExists) {\n // eslint-disable-next-line no-console\n console.warn('Debug ID module found. Skipping Sentry Debug ID module...');\n return serializer(entryPoint, preModules, graph, options);\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER);\n options.sentryBundleCallback = createSentryBundleCallback(debugIdModule);\n const modifiedPreModules = prependModule(preModules, debugIdModule);\n\n // Run wrapped serializer\n const serializerResult = serializer(entryPoint, modifiedPreModules, graph, options);\n const { code: bundleCode, map: bundleMapString } = await extractSerializerResult(serializerResult);\n\n // Add debug id comment to the bundle\n let debugId = determineDebugIdFromBundleSource(bundleCode);\n if (!debugId) {\n // For lazy-loaded chunks or bundles without the debug ID module,\n // calculate the debug ID from the bundle content.\n // This ensures Metro 0.83.2+ code-split bundles get debug IDs.\n // That needs to be done because when Metro 0.83.2 stopped importing `BabelSourceMapSegment`\n // from `@babel/generator` and defined it locally, it subtly changed the source map output format.\n // https://github.com/facebook/metro/blob/main/packages/metro-source-map/src/source-map.js#L47\n debugId = calculateDebugId(bundleCode);\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID (calculated): ${debugId}`);\n }\n // Only print debug id for command line builds => not hot reload from dev server\n // eslint-disable-next-line no-console\n console.log('info ' + `Bundle Debug ID: ${debugId}`);\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`;\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT);\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the debug id comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the debug id comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment,\n )}`;\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString);\n // For now we write both fields until we know what will become the standard - if ever.\n bundleMap['debug_id'] = debugId;\n bundleMap['debugId'] = debugId;\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n };\n };\n};\n\n/**\n * This function is expected to be called after serializer creates the final bundle object\n * and before the source maps are generated.\n *\n * It injects a debug ID into the bundle and returns the modified bundle.\n *\n * Access it via `options.sentryBundleCallback` in your custom serializer.\n */\nfunction createSentryBundleCallback(debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }) {\n return (bundle: Bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules);\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId));\n bundle.pre = injectDebugId(bundle.pre, debugId);\n return bundle;\n };\n}\n\nasync function extractSerializerResult(serializerResult: MetroSerializerOutput): Promise<SerializedBundle> {\n if (typeof serializerResult === 'string') {\n return { code: serializerResult, map: '{}' };\n }\n\n if ('map' in serializerResult) {\n return { code: serializerResult.code, map: serializerResult.map };\n }\n\n const awaitedResult = await serializerResult;\n if (typeof awaitedResult === 'string') {\n return { code: awaitedResult, map: '{}' };\n }\n\n return { code: awaitedResult.code, map: awaitedResult.map };\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId));\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5');\n hash.update(bundleCode);\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code);\n }\n }\n return stringToUUID(hash.digest('hex'));\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withSentryOptionsFromFile =
|
|
3
|
+
exports.withSentryOptionsFromFile = withSentryOptionsFromFile;
|
|
4
4
|
const core_1 = require("@sentry/core");
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const path = require("path");
|
|
@@ -46,7 +46,6 @@ function withSentryOptionsFromFile(config, optionsFile) {
|
|
|
46
46
|
};
|
|
47
47
|
return Object.assign(Object.assign({}, config), { serializer: Object.assign(Object.assign({}, config.serializer), { customSerializer: sentryOptionsSerializer }) });
|
|
48
48
|
}
|
|
49
|
-
exports.withSentryOptionsFromFile = withSentryOptionsFromFile;
|
|
50
49
|
function createSentryOptionsModule(filePath) {
|
|
51
50
|
let content;
|
|
52
51
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryOptionsSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sentryOptionsSerializer.js","sourceRoot":"","sources":["../../../src/js/tools/sentryOptionsSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@sentry/core';\nimport * as fs from 'fs';\nimport type { MetroConfig, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport * as path from 'path';\nimport type { MetroCustomSerializer, VirtualJSOutput } from './utils';\nimport { createSet } from './utils';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport countLines from './vendor/metro/countLines';\n\nconst DEFAULT_OPTIONS_FILE_NAME = 'sentry.options.json';\n\n/**\n * Loads Sentry options from a file in\n */\nexport function withSentryOptionsFromFile(config: MetroConfig, optionsFile: string | boolean): MetroConfig {\n if (optionsFile === false) {\n return config;\n }\n\n const { projectRoot } = config;\n if (!projectRoot) {\n // eslint-disable-next-line no-console\n console.error('[@sentry/react-native/metro] Project root is required to load Sentry options from a file');\n return config;\n }\n\n let optionsPath = path.join(projectRoot, DEFAULT_OPTIONS_FILE_NAME);\n if (typeof optionsFile === 'string' && path.isAbsolute(optionsFile)) {\n optionsPath = optionsFile;\n } else if (typeof optionsFile === 'string') {\n optionsPath = path.join(projectRoot, optionsFile);\n }\n\n const originalSerializer = config.serializer?.customSerializer;\n if (!originalSerializer) {\n // It's okay to bail here because we don't expose this for direct usage, but as part of `withSentryConfig`\n // If used directly in RN, the user is responsible for providing a custom serializer first, Expo provides serializer in default config\n // eslint-disable-next-line no-console\n console.error(\n '[@sentry/react-native/metro] `config.serializer.customSerializer` is required to load Sentry options from a file',\n );\n return config;\n }\n\n const sentryOptionsSerializer: MetroCustomSerializer = (\n entryPoint: string,\n preModules: readonly Module[],\n graph: ReadOnlyGraph,\n options: SerializerOptions,\n ) => {\n const sentryOptionsModule = createSentryOptionsModule(optionsPath);\n if (sentryOptionsModule) {\n (preModules as Module[]).push(sentryOptionsModule);\n }\n return originalSerializer(entryPoint, preModules, graph, options);\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: sentryOptionsSerializer,\n },\n };\n}\n\nfunction createSentryOptionsModule(filePath: string): Module<VirtualJSOutput> | null {\n let content: string;\n try {\n content = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n logger.debug(`[@sentry/react-native/metro] Sentry options file does not exist at ${filePath}`);\n } else {\n logger.error(`[@sentry/react-native/metro] Failed to read Sentry options file at ${filePath}`);\n }\n return null;\n }\n\n let parsedContent: Record<string, unknown>;\n try {\n parsedContent = JSON.parse(content);\n } catch (error) {\n logger.error(`[@sentry/react-native/metro] Failed to parse Sentry options file at ${filePath}`);\n return null;\n }\n\n const minifiedContent = JSON.stringify(parsedContent);\n const optionsCode = `var __SENTRY_OPTIONS__=${minifiedContent};`;\n\n logger.debug(`[@sentry/react-native/metro] Sentry options added to the bundle from file at ${filePath}`);\n return {\n dependencies: new Map(),\n getSource: () => Buffer.from(optionsCode),\n inverseDependencies: createSet(),\n path: '__sentry-options__',\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: optionsCode,\n lineCount: countLines(optionsCode),\n map: [],\n },\n },\n ],\n };\n}\n"]}
|
|
@@ -5,6 +5,6 @@ import type { MixedOutput, Module, ReadOnlyGraph } from 'metro';
|
|
|
5
5
|
export declare const unstableReleaseConstantsPlugin: (projectRoot: string) => ({ graph, premodules }: {
|
|
6
6
|
graph: ReadOnlyGraph<MixedOutput>;
|
|
7
7
|
premodules: Module[];
|
|
8
|
-
debugId?: string
|
|
8
|
+
debugId?: string;
|
|
9
9
|
}) => Module[];
|
|
10
10
|
//# sourceMappingURL=sentryReleaseInjector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryReleaseInjector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,8BAA8B,
|
|
1
|
+
{"version":3,"file":"sentryReleaseInjector.d.ts","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,8BAA8B,GACxC,aAAa,MAAM,MACnB,uBAAuB;IAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,EAmB7G,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentryReleaseInjector.js","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":";;;AAGA,mCAA8E;AAE9E,MAAM,6BAA6B,GAAG,4BAA4B,CAAC;AAEnE;;GAEG;AACI,MAAM,8BAA8B,GACzC,CAAC,WAAmB,EAAE,EAAE,CACxB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAiF,EAAY,EAAE;IACjH,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,KAAK,KAAK,CAAC;IACzD,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"sentryReleaseInjector.js","sourceRoot":"","sources":["../../../src/js/tools/sentryReleaseInjector.ts"],"names":[],"mappings":";;;AAGA,mCAA8E;AAE9E,MAAM,6BAA6B,GAAG,4BAA4B,CAAC;AAEnE;;GAEG;AACI,MAAM,8BAA8B,GACzC,CAAC,WAAmB,EAAE,EAAE,CACxB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAiF,EAAY,EAAE;IACjH,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,KAAK,KAAK,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,qBAAa,EAAC,WAAW,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAA,qBAAa,EAClB,UAAU,EACV,yBAAyB,CAAC;QACxB,IAAI;QACJ,OAAO;KACR,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AArBS,QAAA,8BAA8B,kCAqBvC;AAEJ,SAAS,yBAAyB,CAAC,EACjC,IAAI,EACJ,OAAO,GAIR;IACC,OAAO,IAAA,6BAAqB,EAAC,6BAA6B,EAAE,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,SAAS,6BAA6B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAqC;IACzF,OAAO,6CAA6C,IAAI,gBAAgB,OAAO,KAAK,CAAC;AACvF,CAAC","sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { VirtualJSOutput } from './utils';\nimport { createVirtualJSModule, getExpoConfig, prependModule } from './utils';\n\nconst RELEASE_CONSTANTS_MODULE_PATH = '__sentryReleaseConstants__';\n\n/**\n * Adds Sentry Release constants to the bundle.\n */\nexport const unstableReleaseConstantsPlugin =\n (projectRoot: string) =>\n ({ graph, premodules }: { graph: ReadOnlyGraph<MixedOutput>; premodules: Module[]; debugId?: string }): Module[] => {\n const notWeb = graph.transformOptions.platform !== 'web';\n if (notWeb) {\n return premodules;\n }\n\n const { name, version } = getExpoConfig(projectRoot);\n\n if (!name || !version) {\n return premodules;\n }\n\n return prependModule(\n premodules,\n createSentryReleaseModule({\n name,\n version,\n }),\n );\n };\n\nfunction createSentryReleaseModule({\n name,\n version,\n}: {\n name: string;\n version: string;\n}): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(RELEASE_CONSTANTS_MODULE_PATH, createReleaseConstantsSnippet({ name, version }));\n}\n\nfunction createReleaseConstantsSnippet({ name, version }: { name: string; version: string }): string {\n return `var SENTRY_RELEASE;SENTRY_RELEASE={name: \"${name}\", version: \"${version}\"};`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAGzD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;AAIlH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,CAAC;KACT,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,GAAG,kCAAkC,KAC5D,qBAAqB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAahD;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjF;AAiDD,eAAO,MAAM,SAAS,QA1Cc,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAGzD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;AAIlH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,CAAC;KACT,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,GAAG,kCAAkC,KAC5D,qBAAqB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAahD;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjF;AAiDD,eAAO,MAAM,SAAS,QA1Cc,WAAW,CAAC,MAAM,CA0CV,CAAC;AAI7C;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,CAAC,WAAW,CAAC,EAAE,EACvC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,GAC9B,MAAM,CAAC,WAAW,CAAC,EAAE,CAUvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,eAAe,CAAC,GAAG;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAkBD"}
|
package/dist/js/tools/utils.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createSet = void 0;
|
|
4
|
+
exports.createDebugIdSnippet = createDebugIdSnippet;
|
|
5
|
+
exports.stringToUUID = stringToUUID;
|
|
6
|
+
exports.determineDebugIdFromBundleSource = determineDebugIdFromBundleSource;
|
|
7
|
+
exports.prependModule = prependModule;
|
|
8
|
+
exports.createVirtualJSModule = createVirtualJSModule;
|
|
9
|
+
exports.getExpoConfig = getExpoConfig;
|
|
4
10
|
const crypto = require("crypto");
|
|
5
11
|
const countLines_1 = require("./vendor/metro/countLines");
|
|
6
12
|
/**
|
|
@@ -9,7 +15,6 @@ const countLines_1 = require("./vendor/metro/countLines");
|
|
|
9
15
|
function createDebugIdSnippet(debugId) {
|
|
10
16
|
return `var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]="${debugId}",_sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}`;
|
|
11
17
|
}
|
|
12
|
-
exports.createDebugIdSnippet = createDebugIdSnippet;
|
|
13
18
|
/**
|
|
14
19
|
* Deterministically hashes a string and turns the hash into a uuid.
|
|
15
20
|
*
|
|
@@ -24,7 +29,6 @@ function stringToUUID(str) {
|
|
|
24
29
|
const v4variant = ['8', '9', 'a', 'b'][md5Hash.substring(16, 17).charCodeAt(0) % 4];
|
|
25
30
|
return `${md5Hash.substring(0, 8)}-${md5Hash.substring(8, 12)}-4${md5Hash.substring(13, 16)}-${v4variant}${md5Hash.substring(17, 20)}-${md5Hash.substring(20)}`.toLowerCase();
|
|
26
31
|
}
|
|
27
|
-
exports.stringToUUID = stringToUUID;
|
|
28
32
|
/**
|
|
29
33
|
* Looks for a particular string pattern (`sdbid-[debug ID]`) in the bundle
|
|
30
34
|
* source and extracts the bundle's debug ID from it.
|
|
@@ -37,7 +41,6 @@ function determineDebugIdFromBundleSource(code) {
|
|
|
37
41
|
const match = code.match(/sentry-dbid-([0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12})/);
|
|
38
42
|
return match ? match[1] : undefined;
|
|
39
43
|
}
|
|
40
|
-
exports.determineDebugIdFromBundleSource = determineDebugIdFromBundleSource;
|
|
41
44
|
/**
|
|
42
45
|
* CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.
|
|
43
46
|
*
|
|
@@ -100,7 +103,6 @@ function prependModule(modules, module) {
|
|
|
100
103
|
}
|
|
101
104
|
return modifiedPreModules;
|
|
102
105
|
}
|
|
103
|
-
exports.prependModule = prependModule;
|
|
104
106
|
/**
|
|
105
107
|
* Creates a virtual JS module with the given path and code.
|
|
106
108
|
*/
|
|
@@ -126,7 +128,6 @@ function createVirtualJSModule(modulePath, moduleCode) {
|
|
|
126
128
|
],
|
|
127
129
|
};
|
|
128
130
|
}
|
|
129
|
-
exports.createVirtualJSModule = createVirtualJSModule;
|
|
130
131
|
/**
|
|
131
132
|
* Tries to load Expo config using `@expo/config` package.
|
|
132
133
|
*/
|
|
@@ -147,5 +148,4 @@ function getExpoConfig(projectRoot) {
|
|
|
147
148
|
}
|
|
148
149
|
return {};
|
|
149
150
|
}
|
|
150
|
-
exports.getExpoConfig = getExpoConfig;
|
|
151
151
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport type CountingSet from 'metro/src/lib/CountingSet'; // types are in src but exports are in private\nimport countLines from './vendor/metro/countLines';\n\nexport type MetroCustomSerializer = Required<Required<MetroConfig>['serializer']>['customSerializer'] | undefined;\n\n// Variant of MixedOutput\n// https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/DeltaBundler/types.flow.js#L21\nexport type VirtualJSOutput = {\n type: 'js/script/virtual';\n data: {\n code: string;\n lineCount: number;\n map: [];\n };\n};\n\nexport type Bundle = {\n modules: Array<[id: number, code: string]>;\n post: string;\n pre: string;\n};\n\nexport type SentryMetroSerializerOptionsExtras = {\n sentryBundleCallback?: (bundle: Bundle) => Bundle;\n};\n\nexport type SerializedBundle = { code: string; map: string };\n\nexport type MetroSerializerOutput = string | SerializedBundle | Promise<string | SerializedBundle>;\n\nexport type MetroSerializer = (\n entryPoint: string,\n preModules: ReadonlyArray<Module>,\n graph: ReadOnlyGraph,\n options: SerializerOptions & SentryMetroSerializerOptionsExtras,\n) => MetroSerializerOutput;\n\n/**\n * Returns minified Debug ID code snippet.\n */\nexport function createDebugIdSnippet(debugId: string): string {\n return `var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]=\"${debugId}\",_sentryDebugIdIdentifier=\"sentry-dbid-${debugId}\")}catch(e){}`;\n}\n\n/**\n * Deterministically hashes a string and turns the hash into a uuid.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/58271f1af2ade6b3e64d393d70376ae53bc5bd2f/packages/bundler-plugin-core/src/utils.ts#L174\n */\nexport function stringToUUID(str: string): string {\n const md5sum = crypto.createHash('md5');\n md5sum.update(str);\n const md5Hash = md5sum.digest('hex');\n\n // Position 16 is fixed to either 8, 9, a, or b in the uuid v4 spec (10xx in binary)\n // RFC 4122 section 4.4\n const v4variant = ['8', '9', 'a', 'b'][md5Hash.substring(16, 17).charCodeAt(0) % 4] as string;\n\n return `${md5Hash.substring(0, 8)}-${md5Hash.substring(8, 12)}-4${md5Hash.substring(\n 13,\n 16,\n )}-${v4variant}${md5Hash.substring(17, 20)}-${md5Hash.substring(20)}`.toLowerCase();\n}\n\n/**\n * Looks for a particular string pattern (`sdbid-[debug ID]`) in the bundle\n * source and extracts the bundle's debug ID from it.\n *\n * The string pattern is injected via the debug ID injection snipped.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/40f918458ed449d8b3eabaf64d13c08218213f65/packages/bundler-plugin-core/src/debug-id-upload.ts#L293-L294\n */\nexport function determineDebugIdFromBundleSource(code: string): string | undefined {\n const match = code.match(\n /sentry-dbid-([0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12})/,\n );\n return match ? match[1] : undefined;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction resolveSetCreator(): () => CountingSet<string> {\n const CountingSetFromPrivate = safeRequireCountingSetFromPrivate();\n if (CountingSetFromPrivate) {\n return () => new CountingSetFromPrivate.default();\n }\n\n const CountingSetFromSrc = safeRequireCountingSetFromSrc();\n if (CountingSetFromSrc) {\n return () => new CountingSetFromSrc.default();\n }\n\n return () => new Set() as unknown as CountingSet<string>;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction safeRequireCountingSetFromSrc(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/src/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * CountingSet was moved to private in Metro 0.83.0. (all src exports were moved to private)\n *\n * https://github.com/facebook/metro/commit/ae6f42372ed361611b5672705f22081c2022cf28\n */\nfunction safeRequireCountingSetFromPrivate(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/private/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\nexport const createSet = resolveSetCreator();\n\nconst PRELUDE_MODULE_PATH = '__prelude__';\n\n/**\n * Prepends the module after default required prelude modules.\n */\nexport function prependModule(\n modules: readonly Module<MixedOutput>[],\n module: Module<VirtualJSOutput>,\n): Module<MixedOutput>[] {\n const modifiedPreModules = [...modules];\n if (modifiedPreModules.length > 0 && modifiedPreModules[0]?.path === PRELUDE_MODULE_PATH) {\n // prelude module must be first as it measures the bundle startup time\n modifiedPreModules.unshift(modules[0] as Module<VirtualJSOutput>);\n modifiedPreModules[1] = module;\n } else {\n modifiedPreModules.unshift(module);\n }\n return modifiedPreModules;\n}\n\n/**\n * Creates a virtual JS module with the given path and code.\n */\nexport function createVirtualJSModule(\n modulePath: string,\n moduleCode: string,\n): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n let sourceCode = moduleCode;\n\n return {\n setSource: (code: string) => {\n sourceCode = code;\n },\n dependencies: new Map(),\n getSource: () => Buffer.from(sourceCode),\n inverseDependencies: createSet(),\n path: modulePath,\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: sourceCode,\n lineCount: countLines(sourceCode),\n map: [],\n },\n },\n ],\n };\n}\n\n/**\n * Tries to load Expo config using `@expo/config` package.\n */\nexport function getExpoConfig(projectRoot: string): Partial<{\n name: string;\n version: string;\n}> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n const expoConfig = require('@expo/config') as {\n getConfig?: (projectRoot: string) => { exp: Record<string, unknown> };\n };\n if (expoConfig.getConfig) {\n const { exp } = expoConfig.getConfig(projectRoot);\n return {\n name: typeof exp.name === 'string' && exp.name ? exp.name : undefined,\n version: typeof exp.version === 'string' && exp.version ? exp.version : undefined,\n };\n }\n } catch {\n // @expo/config not available, do nothing\n }\n\n return {};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport type CountingSet from 'metro/src/lib/CountingSet'; // types are in src but exports are in private\nimport countLines from './vendor/metro/countLines';\n\nexport type MetroCustomSerializer = Required<Required<MetroConfig>['serializer']>['customSerializer'] | undefined;\n\n// Variant of MixedOutput\n// https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/DeltaBundler/types.flow.js#L21\nexport type VirtualJSOutput = {\n type: 'js/script/virtual';\n data: {\n code: string;\n lineCount: number;\n map: [];\n };\n};\n\nexport type Bundle = {\n modules: Array<[id: number, code: string]>;\n post: string;\n pre: string;\n};\n\nexport type SentryMetroSerializerOptionsExtras = {\n sentryBundleCallback?: (bundle: Bundle) => Bundle;\n};\n\nexport type SerializedBundle = { code: string; map: string };\n\nexport type MetroSerializerOutput = string | SerializedBundle | Promise<string | SerializedBundle>;\n\nexport type MetroSerializer = (\n entryPoint: string,\n preModules: ReadonlyArray<Module>,\n graph: ReadOnlyGraph,\n options: SerializerOptions & SentryMetroSerializerOptionsExtras,\n) => MetroSerializerOutput;\n\n/**\n * Returns minified Debug ID code snippet.\n */\nexport function createDebugIdSnippet(debugId: string): string {\n return `var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]=\"${debugId}\",_sentryDebugIdIdentifier=\"sentry-dbid-${debugId}\")}catch(e){}`;\n}\n\n/**\n * Deterministically hashes a string and turns the hash into a uuid.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/58271f1af2ade6b3e64d393d70376ae53bc5bd2f/packages/bundler-plugin-core/src/utils.ts#L174\n */\nexport function stringToUUID(str: string): string {\n const md5sum = crypto.createHash('md5');\n md5sum.update(str);\n const md5Hash = md5sum.digest('hex');\n\n // Position 16 is fixed to either 8, 9, a, or b in the uuid v4 spec (10xx in binary)\n // RFC 4122 section 4.4\n const v4variant = ['8', '9', 'a', 'b'][md5Hash.substring(16, 17).charCodeAt(0) % 4] as string;\n\n return `${md5Hash.substring(0, 8)}-${md5Hash.substring(8, 12)}-4${md5Hash.substring(\n 13,\n 16,\n )}-${v4variant}${md5Hash.substring(17, 20)}-${md5Hash.substring(20)}`.toLowerCase();\n}\n\n/**\n * Looks for a particular string pattern (`sdbid-[debug ID]`) in the bundle\n * source and extracts the bundle's debug ID from it.\n *\n * The string pattern is injected via the debug ID injection snipped.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/40f918458ed449d8b3eabaf64d13c08218213f65/packages/bundler-plugin-core/src/debug-id-upload.ts#L293-L294\n */\nexport function determineDebugIdFromBundleSource(code: string): string | undefined {\n const match = code.match(\n /sentry-dbid-([0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12})/,\n );\n return match ? match[1] : undefined;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction resolveSetCreator(): () => CountingSet<string> {\n const CountingSetFromPrivate = safeRequireCountingSetFromPrivate();\n if (CountingSetFromPrivate) {\n return () => new CountingSetFromPrivate.default();\n }\n\n const CountingSetFromSrc = safeRequireCountingSetFromSrc();\n if (CountingSetFromSrc) {\n return () => new CountingSetFromSrc.default();\n }\n\n return () => new Set() as unknown as CountingSet<string>;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction safeRequireCountingSetFromSrc(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/src/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * CountingSet was moved to private in Metro 0.83.0. (all src exports were moved to private)\n *\n * https://github.com/facebook/metro/commit/ae6f42372ed361611b5672705f22081c2022cf28\n */\nfunction safeRequireCountingSetFromPrivate(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/private/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\nexport const createSet = resolveSetCreator();\n\nconst PRELUDE_MODULE_PATH = '__prelude__';\n\n/**\n * Prepends the module after default required prelude modules.\n */\nexport function prependModule(\n modules: readonly Module<MixedOutput>[],\n module: Module<VirtualJSOutput>,\n): Module<MixedOutput>[] {\n const modifiedPreModules = [...modules];\n if (modifiedPreModules.length > 0 && modifiedPreModules[0]?.path === PRELUDE_MODULE_PATH) {\n // prelude module must be first as it measures the bundle startup time\n modifiedPreModules.unshift(modules[0] as Module<VirtualJSOutput>);\n modifiedPreModules[1] = module;\n } else {\n modifiedPreModules.unshift(module);\n }\n return modifiedPreModules;\n}\n\n/**\n * Creates a virtual JS module with the given path and code.\n */\nexport function createVirtualJSModule(\n modulePath: string,\n moduleCode: string,\n): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n let sourceCode = moduleCode;\n\n return {\n setSource: (code: string) => {\n sourceCode = code;\n },\n dependencies: new Map(),\n getSource: () => Buffer.from(sourceCode),\n inverseDependencies: createSet(),\n path: modulePath,\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: sourceCode,\n lineCount: countLines(sourceCode),\n map: [],\n },\n },\n ],\n };\n}\n\n/**\n * Tries to load Expo config using `@expo/config` package.\n */\nexport function getExpoConfig(projectRoot: string): Partial<{\n name: string;\n version: string;\n}> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n const expoConfig = require('@expo/config') as {\n getConfig?: (projectRoot: string) => { exp: Record<string, unknown> };\n };\n if (expoConfig.getConfig) {\n const { exp } = expoConfig.getConfig(projectRoot);\n return {\n name: typeof exp.name === 'string' && exp.name ? exp.name : undefined,\n version: typeof exp.version === 'string' && exp.version ? exp.version : undefined,\n };\n }\n } catch {\n // @expo/config not available, do nothing\n }\n\n return {};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"countLines.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/countLines.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"countLines.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/countLines.ts"],"names":[],"mappings":"yBAgCgB,QAAQ,MAAM,KAAG,MAAM;AAAvC,wBAAoF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAe,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+CnD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAe,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+CnD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,aAAa,EACpB,qBAEG;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,KACA,SAAS,MAAM,EAMjB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,QAAO,eAqC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":";AAAA,2CAA2C;;;;AAiC3C,IAAI,kBAAuB,CAAC;AAC5B,IAAI;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Vendored / modified from @facebook/metro\n\n// https://github.com/facebook/metro/commit/9b85f83c9cc837d8cd897aa7723be7da5b296067\n\n// MIT License\n\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type * as baseJSBundleType from 'metro/private/DeltaBundler/Serializers/baseJSBundle';\nimport type * as sourceMapStringType from 'metro/private/DeltaBundler/Serializers/sourceMapString';\nimport type * as bundleToStringType from 'metro/private/lib/bundleToString';\nimport type { MetroSerializer } from '../../utils';\n\nlet baseJSBundleModule: any;\ntry {\n baseJSBundleModule = require('metro/private/DeltaBundler/Serializers/baseJSBundle');\n} catch {\n baseJSBundleModule = require('metro/src/DeltaBundler/Serializers/baseJSBundle');\n}\n\nconst baseJSBundle: typeof baseJSBundleType =\n typeof baseJSBundleModule === 'function'\n ? baseJSBundleModule\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n baseJSBundleModule?.baseJSBundle ?? baseJSBundleModule?.default;\n\nlet sourceMapString: typeof sourceMapStringType;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sourceMapStringModule = require('metro/private/DeltaBundler/Serializers/sourceMapString');\n sourceMapString = (sourceMapStringModule as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n} catch (e) {\n sourceMapString = require('metro/src/DeltaBundler/Serializers/sourceMapString');\n if ('sourceMapString' in sourceMapString) {\n // Changed to named export in https://github.com/facebook/metro/commit/34148e61200a508923315fbe387b26d1da27bf4b\n // Metro 0.81.0 and 0.80.10 patch\n sourceMapString = (sourceMapString as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n }\n}\n\nlet bundleToStringModule: any;\ntry {\n bundleToStringModule = require('metro/private/lib/bundleToString');\n} catch {\n bundleToStringModule = require('metro/src/lib/bundleToString');\n}\n\nconst bundleToString: typeof bundleToStringType =\n typeof bundleToStringModule === 'function'\n ? bundleToStringModule\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n bundleToStringModule?.bundleToString ?? bundleToStringModule?.default;\n\ntype NewSourceMapStringExport = {\n // Since Metro v0.80.10 https://github.com/facebook/metro/compare/v0.80.9...v0.80.10#diff-1b836d1729e527a725305eef0cec22e44605af2700fa413f4c2489ea1a03aebcL28\n sourceMapString: typeof sourceMapString;\n};\n\n/**\n * This function ensures that modules in source maps are sorted in the same\n * order as in a plain JS bundle.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L984\n */\nexport const getSortedModules = (\n graph: ReadOnlyGraph,\n {\n createModuleId,\n }: {\n createModuleId: (file: string) => number;\n },\n): readonly Module[] => {\n const modules = [...graph.dependencies.values()];\n // Sort by IDs\n return modules.sort(\n (a: Module<MixedOutput>, b: Module<MixedOutput>) => createModuleId(a.path) - createModuleId(b.path),\n );\n};\n\n/**\n * Creates the default Metro plain bundle serializer.\n * Because Metro exports only the intermediate serializer functions, we need to\n * assemble the final serializer ourselves. We have to work with the modules the same as Metro does\n * to avoid unexpected changes in the final bundle.\n *\n * This is used when the user does not provide a custom serializer.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L244-L277\n */\nexport const createDefaultMetroSerializer = (): MetroSerializer => {\n return (entryPoint, preModules, graph, options) => {\n // baseJSBundle assigns IDs to modules in a consistent order\n let bundle = baseJSBundle(entryPoint, preModules, graph, options);\n if (options.sentryBundleCallback && !graph.transformOptions.hot) {\n bundle = options.sentryBundleCallback(bundle);\n }\n const { code } = bundleToString(bundle);\n if (graph.transformOptions.hot) {\n // Hot means running in dev server, sourcemaps are generated on demand\n return code;\n }\n\n let sourceMapStringFunction: typeof sourceMapString | undefined;\n if (typeof sourceMapString === 'function') {\n sourceMapStringFunction = sourceMapString;\n } else if (\n typeof sourceMapString === 'object' &&\n sourceMapString != null &&\n 'sourceMapString' in sourceMapString &&\n typeof sourceMapString['sourceMapString'] === 'function'\n ) {\n sourceMapStringFunction = (sourceMapString as NewSourceMapStringExport).sourceMapString;\n } else {\n throw new Error(`\n[@sentry/react-native/metro] Cannot find sourceMapString function in 'metro/src/DeltaBundler/Serializers/sourceMapString'.\nPlease check the version of Metro you are using and report the issue at http://www.github.com/getsentry/sentry-react-native/issues\n`);\n }\n\n // Always generate source maps, can't use Sentry without source maps\n const map = sourceMapStringFunction([...preModules, ...getSortedModules(graph, options)], {\n processModuleFilter: options.processModuleFilter,\n shouldAddToIgnoreList: options.shouldAddToIgnoreList || (() => false),\n });\n return { code, map };\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACrD,CAAC;AAsCF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IAYhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IAEH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuB1B;
|
|
1
|
+
{"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACrD,CAAC;AAsCF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IAYhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IAEH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuB1B;AAgFD;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAE1B,gBAAgB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EACxC,gBAAgB,uBAAuB,KACtC,KAAK,CAAC,iBAUR,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/js/touchevents.js
CHANGED
|
@@ -210,7 +210,9 @@ function getLabelValue(props, labelKey) {
|
|
|
210
210
|
? props[SENTRY_LABEL_PROP_KEY]
|
|
211
211
|
// For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in
|
|
212
212
|
// the "check-label" if sentence, so we have to assign it to a variable here first
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
213
214
|
: typeof labelKey === 'string' && typeof props[labelKey] == 'string' && props[labelKey].length > 0
|
|
215
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
214
216
|
? props[labelKey]
|
|
215
217
|
: undefined;
|
|
216
218
|
}
|