@sentry/wizard 4.9.0 → 5.1.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/CHANGELOG.md +17 -0
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.d.ts +1 -0
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js +91 -0
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js.map +1 -0
- package/dist/e2e-tests/tests/nextjs-14.test.js +27 -0
- package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +1 -0
- package/dist/e2e-tests/utils/index.js +23 -1
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/lib/Steps/Integrations/Cordova.js +13 -30
- package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +24 -10
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +2 -0
- package/dist/src/nextjs/templates.js +47 -1
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nextjs/utils.d.ts +2 -0
- package/dist/src/nextjs/utils.js +42 -1
- package/dist/src/nextjs/utils.js.map +1 -1
- package/dist/src/react-native/gradle.d.ts +0 -1
- package/dist/src/react-native/gradle.js +1 -5
- package/dist/src/react-native/gradle.js.map +1 -1
- package/dist/src/react-native/metro.d.ts +0 -4
- package/dist/src/react-native/metro.js +1 -129
- package/dist/src/react-native/metro.js.map +1 -1
- package/dist/src/react-native/options.d.ts +1 -3
- package/dist/src/react-native/options.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.d.ts +1 -23
- package/dist/src/react-native/react-native-wizard.js +25 -127
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-native/xcode.d.ts +0 -7
- package/dist/src/react-native/xcode.js +1 -109
- package/dist/src/react-native/xcode.js.map +1 -1
- package/dist/src/run.js +1 -4
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js +14 -0
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/wrangler.d.ts +28 -0
- package/dist/src/sourcemaps/tools/wrangler.js +276 -0
- package/dist/src/sourcemaps/tools/wrangler.js.map +1 -0
- package/dist/src/sourcemaps/utils/detect-tool.d.ts +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.js +1 -0
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
- package/dist/src/sourcemaps/utils/sdk-version.js +3 -0
- package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +0 -7
- package/dist/src/utils/ast-utils.js +1 -27
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +9 -1
- package/dist/src/utils/clack/index.js +8 -1
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/nextjs/templates.test.js +98 -0
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nextjs/utils.test.d.ts +1 -0
- package/dist/test/nextjs/utils.test.js +104 -0
- package/dist/test/nextjs/utils.test.js.map +1 -0
- package/dist/test/react-native/gradle.test.js +0 -119
- package/dist/test/react-native/gradle.test.js.map +1 -1
- package/dist/test/react-native/metro.test.js +0 -90
- package/dist/test/react-native/metro.test.js.map +1 -1
- package/dist/test/react-native/xcode.test.js +0 -81
- package/dist/test/react-native/xcode.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/wrangler.test.d.ts +1 -0
- package/dist/test/sourcemaps/tools/wrangler.test.js +132 -0
- package/dist/test/sourcemaps/tools/wrangler.test.js.map +1 -0
- package/package.json +2 -1
- package/dist/src/react-native/uninstall.d.ts +0 -2
- package/dist/src/react-native/uninstall.js +0 -94
- package/dist/src/react-native/uninstall.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native-wizard.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n\nimport * as Sentry from '@sentry/node';\nimport { platform } from 'os';\nimport { podInstall } from '../apple/cocoapod';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n CliSetupConfigContent,\n abort,\n abortIfCancelled,\n addSentryCliConfig,\n confirmContinueIfNoOrDirtyGitRepo,\n confirmContinueIfPackageVersionNotSupported,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n propertiesCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { fulfillsVersionRange } from '../utils/semver';\nimport { getIssueStreamUrl } from '../utils/url';\nimport { patchExpoAppConfig, printSentryExpoMigrationOutro } from './expo';\nimport { addExpoEnvLocal } from './expo-env-file';\nimport { addSentryToExpoMetroConfig } from './expo-metro';\nimport { APP_BUILD_GRADLE, XCODE_PROJECT, getFirstMatchedPath } from './glob';\nimport {\n addRNSentryGradlePlugin,\n doesAppBuildGradleIncludeRNSentryGradlePlugin,\n writeAppBuildGradle,\n} from './gradle';\nimport {\n addSentryInit,\n sessionReplayOnErrorSampleRate,\n sessionReplaySampleRate,\n wrapRootComponent,\n} from './javascript';\nimport {\n patchMetroConfigWithSentrySerializer,\n patchMetroWithSentryConfig,\n} from './metro';\nimport { ReactNativeWizardOptions } from './options';\nimport { runReactNativeUninstall } from './uninstall';\nimport {\n addDebugFilesUploadPhaseWithBundledScripts,\n addDebugFilesUploadPhaseWithCli,\n addSentryWithBundledScriptsToBundleShellScript,\n addSentryWithCliToBundleShellScript,\n findBundlePhase,\n findDebugFilesUploadPhase,\n getValidExistingBuildPhases,\n patchBundlePhase,\n writeXcodeProject,\n} from './xcode';\n\nimport xcode from 'xcode';\n\nexport const RN_SDK_PACKAGE = '@sentry/react-native';\nexport const RN_SDK_SUPPORTED_RANGE = '>=5.0.0';\n\nexport const RN_PACKAGE = 'react-native';\nexport const RN_HUMAN_NAME = 'React Native';\n\nexport const SUPPORTED_RN_RANGE = '>=0.69.0';\nexport const SUPPORTED_EXPO_RANGE = '>=50.0.0';\n\n/**\n * The following SDK version ship with bundled Xcode scripts\n * which simplifies the Xcode Build Phases setup.\n */\nexport const XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';\n\n/**\n * The following SDK version ship with Sentry Metro plugin\n */\nexport const SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';\n\n/**\n * The following SDK version supports mobile Session Replay\n */\nexport const SESSION_REPLAY_SUPPORTED_SDK_RANGE = '>=6.5.0';\n\n/**\n * The following SDK version supports the Feedback Widget\n */\nexport const FEEDBACK_WIDGET_SUPPORTED_SDK_RANGE = '>=6.9.0';\n\n/**\n * The following SDK version ship with bundled Expo plugin\n */\nexport const EXPO_SUPPORTED_SDK_RANGE = `>=5.16.0`;\n\n// The following SDK version shipped `withSentryConfig`\nexport const METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = '>=5.17.0';\n\nexport type RNCliSetupConfigContent = Pick<\n Required<CliSetupConfigContent>,\n 'authToken' | 'org' | 'project' | 'url'\n>;\n\nexport async function runReactNativeWizard(\n params: ReactNativeWizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: params.telemetryEnabled,\n integration: 'react-native',\n wizardOptions: params,\n },\n () => runReactNativeWizardWithTelemetry(params),\n );\n}\n\nexport async function runReactNativeWizardWithTelemetry(\n options: ReactNativeWizardOptions,\n): Promise<void> {\n if (options.uninstall) {\n Sentry.setTag('uninstall', true);\n return runReactNativeUninstall(options);\n }\n\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry React Native Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n\n const packageJson = await getPackageDotJson();\n const hasInstalled = (dep: string) => hasPackageInstalled(dep, packageJson);\n\n if (hasInstalled('sentry-expo')) {\n Sentry.setTag('has-sentry-expo-installed', true);\n printSentryExpoMigrationOutro();\n return;\n }\n\n await ensurePackageIsInstalled(packageJson, RN_PACKAGE, RN_HUMAN_NAME);\n\n const rnVersion = getPackageVersion(RN_PACKAGE, packageJson);\n if (rnVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: RN_HUMAN_NAME,\n packageVersion: rnVersion,\n packageId: RN_PACKAGE,\n acceptableVersions: SUPPORTED_RN_RANGE,\n note: `Please upgrade to ${SUPPORTED_RN_RANGE} if you wish to use the Sentry Wizard.\nOr setup using ${chalk.cyan(\n 'https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/',\n )}`,\n });\n }\n\n await installPackage({\n packageName: RN_SDK_PACKAGE,\n alreadyInstalled: hasPackageInstalled(RN_SDK_PACKAGE, packageJson),\n forceInstall,\n });\n const sdkVersion = getPackageVersion(\n RN_SDK_PACKAGE,\n await getPackageDotJson(),\n );\n if (sdkVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Sentry React Native SDK',\n packageVersion: sdkVersion,\n packageId: RN_SDK_PACKAGE,\n acceptableVersions: RN_SDK_SUPPORTED_RANGE,\n note: `Please upgrade to ${RN_SDK_SUPPORTED_RANGE} to continue with the wizard in this project.`,\n });\n } else {\n const continueWithoutSdk = await abortIfCancelled(\n clack.confirm({\n message:\n 'Could not detect Sentry React Native SDK version. Do you want to continue anyway?',\n }),\n );\n if (!continueWithoutSdk) {\n await abort(undefined, 0);\n }\n }\n Sentry.setTag(`detected-sentry-react-native-sdk-version`, sdkVersion);\n\n const expoVersion = getPackageVersion('expo', packageJson);\n const isExpo = !!expoVersion;\n if (expoVersion && sdkVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Sentry React Native SDK',\n packageVersion: sdkVersion,\n packageId: RN_SDK_PACKAGE,\n acceptableVersions: EXPO_SUPPORTED_SDK_RANGE,\n note: `Please upgrade to ${EXPO_SUPPORTED_SDK_RANGE} to continue with the wizard in this Expo project.`,\n });\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Expo SDK',\n packageVersion: expoVersion,\n packageId: 'expo',\n acceptableVersions: SUPPORTED_EXPO_RANGE,\n note: `Please upgrade to ${SUPPORTED_EXPO_RANGE} to continue with the wizard in this Expo project.`,\n });\n }\n\n const { selectedProject, authToken, sentryUrl } =\n await getOrAskForProjectData(options, 'react-native');\n const orgSlug = selectedProject.organization.slug;\n const projectSlug = selectedProject.slug;\n const projectId = selectedProject.id;\n const cliConfig: RNCliSetupConfigContent = {\n authToken,\n org: orgSlug,\n project: projectSlug,\n url: sentryUrl,\n };\n\n // Check if SDK version supports Session Replay\n let enableSessionReplay = false;\n if (\n sdkVersion &&\n fulfillsVersionRange({\n version: sdkVersion,\n acceptableVersions: SESSION_REPLAY_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n // Ask if user wants to enable Session Replay\n enableSessionReplay = await abortIfCancelled(\n clack.confirm({\n message:\n 'Do you want to enable Session Replay to help debug issues? (See https://docs.sentry.io/platforms/react-native/session-replay/)',\n }),\n );\n\n Sentry.setTag('enable-session-replay', enableSessionReplay);\n\n if (enableSessionReplay) {\n clack.log.info(\n `Session Replay will be enabled with default settings (replaysSessionSampleRate: ${sessionReplaySampleRate}, replaysOnErrorSampleRate: ${sessionReplayOnErrorSampleRate}).`,\n );\n clack.log.message(\n 'By default, all text content, images, and webviews will be masked for privacy. You can customize this in your code later.',\n );\n }\n } else if (sdkVersion) {\n clack.log.info(\n `Session Replay is supported from Sentry React Native SDK version ${SESSION_REPLAY_SUPPORTED_SDK_RANGE}. Your version (${sdkVersion}) doesn't support it yet.`,\n );\n clack.log.message(\n `To use Session Replay, please upgrade your Sentry SDK: npm install ${RN_SDK_PACKAGE}@latest --save`,\n );\n }\n\n // Check if SDK version supports the Feedback Widget\n let enableFeedbackWidget = false;\n if (\n sdkVersion &&\n fulfillsVersionRange({\n version: sdkVersion,\n acceptableVersions: FEEDBACK_WIDGET_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n // Ask if user wants to enable the Feedback Widget\n enableFeedbackWidget = await abortIfCancelled(\n clack.confirm({\n message:\n 'Do you want to enable the Feedback Widget to collect feedback from your users? (See https://docs.sentry.io/platforms/react-native/user-feedback/)',\n }),\n );\n\n Sentry.setTag('enable-feedback-widget', enableFeedbackWidget);\n\n if (enableFeedbackWidget) {\n clack.log.info(\n `The Feedback Widget will be enabled with default settings. You can show the widget by calling Sentry.showFeedbackWidget() in your code.`,\n );\n }\n } else if (sdkVersion) {\n clack.log.info(\n `The Feedback Widget is supported from Sentry React Native SDK version ${FEEDBACK_WIDGET_SUPPORTED_SDK_RANGE}. Your version (${sdkVersion}) doesn't support it yet.`,\n );\n clack.log.message(\n `To use the Feedback Widget, please upgrade your Sentry SDK: npm install ${RN_SDK_PACKAGE}@latest --save`,\n );\n }\n\n await traceStep('patch-app-js', () =>\n addSentryInit({\n dsn: selectedProject.keys[0].dsn.public,\n enableSessionReplay,\n enableFeedbackWidget,\n }),\n );\n\n await traceStep('patch-app-js-wrap', () => wrapRootComponent());\n\n if (isExpo) {\n await traceStep('patch-expo-app-config', () =>\n patchExpoAppConfig(cliConfig),\n );\n await traceStep('add-expo-env-local', () => addExpoEnvLocal(cliConfig));\n }\n\n if (isExpo) {\n await traceStep('patch-metro-config', addSentryToExpoMetroConfig);\n } else {\n await traceStep('patch-metro-config', () =>\n addSentryToMetroConfig({ sdkVersion }),\n );\n }\n\n if (fs.existsSync('ios')) {\n Sentry.setTag('patch-ios', true);\n await traceStep('patch-xcode-files', () =>\n patchXcodeFiles(cliConfig, { sdkVersion }),\n );\n }\n\n if (fs.existsSync('android')) {\n Sentry.setTag('patch-android', true);\n await traceStep('patch-android-files', () => patchAndroidFiles(cliConfig));\n }\n\n await runPrettierIfInstalled({ cwd: undefined });\n\n const confirmedFirstException = await confirmFirstSentryException(\n sentryUrl,\n orgSlug,\n projectId,\n );\n\n Sentry.setTag('user-confirmed-first-error', confirmedFirstException);\n\n if (confirmedFirstException) {\n clack.outro(\n `${chalk.green('Everything is set up!')}\n\n ${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-react-native/issues',\n )}`,\n );\n } else {\n clack.outro(\n `${chalk.dim(\n 'Let us know here: https://github.com/getsentry/sentry-react-native/issues',\n )}`,\n );\n }\n}\n\nfunction addSentryToMetroConfig({\n sdkVersion,\n}: {\n sdkVersion: string | undefined;\n}) {\n if (\n sdkVersion &&\n fulfillsVersionRange({\n version: sdkVersion,\n acceptableVersions: METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n return patchMetroWithSentryConfig();\n }\n\n if (\n sdkVersion &&\n fulfillsVersionRange({\n version: sdkVersion,\n acceptableVersions: SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n return patchMetroConfigWithSentrySerializer();\n }\n}\n\nasync function confirmFirstSentryException(\n url: string,\n orgSlug: string,\n projectId: string,\n) {\n const issuesStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n clack.log\n .step(`To make sure everything is set up correctly, put the following code snippet into your application.\nThe snippet will create a button that, when tapped, sends a test event to Sentry.\n\nAfter that check your project issues:\n\n${chalk.cyan(issuesStreamUrl)}`);\n\n // We want the code snippet to be easily copy-pasteable, without any clack artifacts\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\n<Button title='Try!' onPress={ () => { Sentry.captureException(new Error('First error')) }}/>\n`),\n );\n\n const firstErrorConfirmed = clack.confirm({\n message: `Have you successfully sent a test event?`,\n });\n\n return firstErrorConfirmed;\n}\n\nasync function patchXcodeFiles(\n config: RNCliSetupConfigContent,\n context: {\n sdkVersion: string | undefined;\n },\n) {\n await addSentryCliConfig(config, {\n ...propertiesCliSetupConfig,\n name: 'source maps and iOS debug files',\n filename: 'ios/sentry.properties',\n gitignore: false,\n });\n\n if (platform() === 'darwin' && (await confirmPodInstall())) {\n await traceStep('pod-install', () => podInstall('ios'));\n }\n\n const xcodeProjectPath = traceStep('find-xcode-project', () =>\n getFirstMatchedPath(XCODE_PROJECT),\n );\n Sentry.setTag(\n 'xcode-project-status',\n xcodeProjectPath ? 'found' : 'not-found',\n );\n if (!xcodeProjectPath) {\n clack.log.warn(\n `Could not find Xcode project file using ${chalk.cyan(XCODE_PROJECT)}.`,\n );\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const [xcodeProject, buildPhasesMap] = traceStep(\n 'parse-xcode-project',\n () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const project = xcode.project(xcodeProjectPath);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n project.parseSync();\n\n const map = getValidExistingBuildPhases(project);\n return [project, map];\n },\n );\n Sentry.setTag('xcode-project-status', 'parsed');\n\n await traceStep('patch-bundle-phase', async () => {\n const bundlePhase = findBundlePhase(buildPhasesMap);\n Sentry.setTag(\n 'xcode-bundle-phase-status',\n bundlePhase ? 'found' : 'not-found',\n );\n if (\n context.sdkVersion &&\n fulfillsVersionRange({\n version: context.sdkVersion,\n acceptableVersions: XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n await patchBundlePhase(\n bundlePhase,\n addSentryWithBundledScriptsToBundleShellScript,\n );\n } else {\n await patchBundlePhase(bundlePhase, addSentryWithCliToBundleShellScript);\n }\n Sentry.setTag('xcode-bundle-phase-status', 'patched');\n });\n\n traceStep('add-debug-files-upload-phase', () => {\n const debugFilesUploadPhaseExists =\n !!findDebugFilesUploadPhase(buildPhasesMap);\n Sentry.setTag(\n 'xcode-debug-files-upload-phase-status',\n debugFilesUploadPhaseExists ? 'already-exists' : undefined,\n );\n if (\n context.sdkVersion &&\n fulfillsVersionRange({\n version: context.sdkVersion,\n acceptableVersions: XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n addDebugFilesUploadPhaseWithBundledScripts(xcodeProject, {\n debugFilesUploadPhaseExists,\n });\n } else {\n addDebugFilesUploadPhaseWithCli(xcodeProject, {\n debugFilesUploadPhaseExists,\n });\n }\n Sentry.setTag('xcode-debug-files-upload-phase-status', 'added');\n });\n\n traceStep('write-xcode-project', () => {\n writeXcodeProject(xcodeProjectPath, xcodeProject);\n });\n Sentry.setTag('xcode-project-status', 'patched');\n}\n\nasync function patchAndroidFiles(config: RNCliSetupConfigContent) {\n await addSentryCliConfig(config, {\n ...propertiesCliSetupConfig,\n name: 'source maps and iOS debug files',\n filename: 'android/sentry.properties',\n gitignore: false,\n });\n\n const appBuildGradlePath = traceStep('find-app-build-gradle', () =>\n getFirstMatchedPath(APP_BUILD_GRADLE),\n );\n Sentry.setTag(\n 'app-build-gradle-status',\n appBuildGradlePath ? 'found' : 'not-found',\n );\n if (!appBuildGradlePath) {\n clack.log.warn(\n `Could not find Android ${chalk.cyan(\n 'app/build.gradle',\n )} file using ${chalk.cyan(APP_BUILD_GRADLE)}.`,\n );\n return;\n }\n\n const appBuildGradle = traceStep('read-app-build-gradle', () =>\n fs.readFileSync(appBuildGradlePath, 'utf-8'),\n );\n const includesSentry =\n doesAppBuildGradleIncludeRNSentryGradlePlugin(appBuildGradle);\n if (includesSentry) {\n Sentry.setTag('app-build-gradle-status', 'already-includes-sentry');\n clack.log.warn(\n `Android ${chalk.cyan('app/build.gradle')} file already includes Sentry.`,\n );\n return;\n }\n\n const patchedAppBuildGradle = traceStep('add-rn-sentry-gradle-plugin', () =>\n addRNSentryGradlePlugin(appBuildGradle),\n );\n if (!doesAppBuildGradleIncludeRNSentryGradlePlugin(patchedAppBuildGradle)) {\n Sentry.setTag(\n 'app-build-gradle-status',\n 'failed-to-add-rn-sentry-gradle-plugin',\n );\n clack.log.warn(\n `Could not add Sentry RN Gradle Plugin to ${chalk.cyan(\n 'app/build.gradle',\n )}.`,\n );\n return;\n }\n\n Sentry.setTag('app-build-gradle-status', 'added-rn-sentry-gradle-plugin');\n clack.log.success(\n `Added Sentry RN Gradle Plugin to ${chalk.bold('app/build.gradle')}.`,\n );\n\n traceStep('write-app-build-gradle', () =>\n writeAppBuildGradle(appBuildGradlePath, patchedAppBuildGradle),\n );\n clack.log.success(\n chalk.green(`Android ${chalk.cyan('app/build.gradle')} saved.`),\n );\n}\n\nasync function confirmPodInstall(): Promise<boolean> {\n return traceStep('confirm-pod-install', async () => {\n const continueWithPodInstall = await abortIfCancelled(\n clack.select({\n message: 'Do you want to run `pod install` now?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Recommended for smaller projects, this might take several minutes',\n },\n { value: false, label: `No, I'll do it later` },\n ],\n initialValue: true,\n }),\n );\n Sentry.setTag('continue-with-pod-install', continueWithPodInstall);\n return continueWithPodInstall;\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"react-native-wizard.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n\nimport * as Sentry from '@sentry/node';\nimport { platform } from 'os';\nimport { podInstall } from '../apple/cocoapod';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n CliSetupConfigContent,\n abort,\n abortIfCancelled,\n addSentryCliConfig,\n confirmContinueIfNoOrDirtyGitRepo,\n confirmContinueIfPackageVersionNotSupported,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n propertiesCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { getIssueStreamUrl } from '../utils/url';\nimport { patchExpoAppConfig, printSentryExpoMigrationOutro } from './expo';\nimport { addExpoEnvLocal } from './expo-env-file';\nimport { addSentryToExpoMetroConfig } from './expo-metro';\nimport { APP_BUILD_GRADLE, XCODE_PROJECT, getFirstMatchedPath } from './glob';\nimport {\n addRNSentryGradlePlugin,\n doesAppBuildGradleIncludeRNSentryGradlePlugin,\n writeAppBuildGradle,\n} from './gradle';\nimport {\n addSentryInit,\n sessionReplayOnErrorSampleRate,\n sessionReplaySampleRate,\n wrapRootComponent,\n} from './javascript';\nimport { patchMetroWithSentryConfig } from './metro';\nimport { ReactNativeWizardOptions } from './options';\nimport {\n addDebugFilesUploadPhaseWithBundledScripts,\n addSentryWithBundledScriptsToBundleShellScript,\n findBundlePhase,\n findDebugFilesUploadPhase,\n getValidExistingBuildPhases,\n patchBundlePhase,\n writeXcodeProject,\n} from './xcode';\n\nimport xcode from 'xcode';\n\nexport const RN_SDK_PACKAGE = '@sentry/react-native';\nexport const RN_SDK_SUPPORTED_RANGE = '>=6.12.0';\n\nexport const RN_PACKAGE = 'react-native';\nexport const RN_HUMAN_NAME = 'React Native';\n\nexport const SUPPORTED_RN_RANGE = '>=0.69.0';\nexport const SUPPORTED_EXPO_RANGE = '>=50.0.0';\n\nexport type RNCliSetupConfigContent = Pick<\n Required<CliSetupConfigContent>,\n 'authToken' | 'org' | 'project' | 'url'\n>;\n\nexport async function runReactNativeWizard(\n params: ReactNativeWizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: params.telemetryEnabled,\n integration: 'react-native',\n wizardOptions: params,\n },\n () => runReactNativeWizardWithTelemetry(params),\n );\n}\n\nexport async function runReactNativeWizardWithTelemetry(\n options: ReactNativeWizardOptions,\n): Promise<void> {\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry React Native Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n\n const packageJson = await getPackageDotJson();\n const hasInstalled = (dep: string) => hasPackageInstalled(dep, packageJson);\n\n if (hasInstalled('sentry-expo')) {\n Sentry.setTag('has-sentry-expo-installed', true);\n printSentryExpoMigrationOutro();\n return;\n }\n\n await ensurePackageIsInstalled(packageJson, RN_PACKAGE, RN_HUMAN_NAME);\n\n const rnVersion = getPackageVersion(RN_PACKAGE, packageJson);\n if (rnVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: RN_HUMAN_NAME,\n packageVersion: rnVersion,\n packageId: RN_PACKAGE,\n acceptableVersions: SUPPORTED_RN_RANGE,\n note: `Please upgrade to ${SUPPORTED_RN_RANGE} if you wish to use the Sentry Wizard.\nOr setup using ${chalk.cyan(\n 'https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/',\n )}`,\n });\n }\n\n await installPackage({\n packageName: RN_SDK_PACKAGE,\n alreadyInstalled: hasPackageInstalled(RN_SDK_PACKAGE, packageJson),\n forceInstall,\n });\n const sdkVersion = getPackageVersion(\n RN_SDK_PACKAGE,\n await getPackageDotJson(),\n );\n if (sdkVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Sentry React Native SDK',\n packageVersion: sdkVersion,\n packageId: RN_SDK_PACKAGE,\n acceptableVersions: RN_SDK_SUPPORTED_RANGE,\n note: `Please upgrade to ${RN_SDK_SUPPORTED_RANGE} to continue with the wizard in this project.`,\n });\n } else {\n const continueWithoutSdk = await abortIfCancelled(\n clack.confirm({\n message:\n 'Could not detect Sentry React Native SDK version. Do you want to continue anyway?',\n }),\n );\n if (!continueWithoutSdk) {\n await abort(undefined, 0);\n }\n }\n Sentry.setTag(`detected-sentry-react-native-sdk-version`, sdkVersion);\n\n const expoVersion = getPackageVersion('expo', packageJson);\n const isExpo = !!expoVersion;\n if (expoVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Expo SDK',\n packageVersion: expoVersion,\n packageId: 'expo',\n acceptableVersions: SUPPORTED_EXPO_RANGE,\n note: `Please upgrade to ${SUPPORTED_EXPO_RANGE} to continue with the wizard in this Expo project.`,\n });\n }\n\n const { selectedProject, authToken, sentryUrl } =\n await getOrAskForProjectData(options, 'react-native');\n const orgSlug = selectedProject.organization.slug;\n const projectSlug = selectedProject.slug;\n const projectId = selectedProject.id;\n const cliConfig: RNCliSetupConfigContent = {\n authToken,\n org: orgSlug,\n project: projectSlug,\n url: sentryUrl,\n };\n\n // Ask if user wants to enable Session Replay\n const enableSessionReplay = await abortIfCancelled(\n clack.confirm({\n message:\n 'Do you want to enable Session Replay to help debug issues? (See https://docs.sentry.io/platforms/react-native/session-replay/)',\n }),\n );\n Sentry.setTag('enable-session-replay', enableSessionReplay);\n\n if (enableSessionReplay) {\n clack.log.info(\n `Session Replay will be enabled with default settings (replaysSessionSampleRate: ${sessionReplaySampleRate}, replaysOnErrorSampleRate: ${sessionReplayOnErrorSampleRate}).`,\n );\n clack.log.message(\n 'By default, all text content, images, and webviews will be masked for privacy. You can customize this in your code later.',\n );\n }\n\n // Ask if user wants to enable the Feedback Widget\n const enableFeedbackWidget = await abortIfCancelled(\n clack.confirm({\n message:\n 'Do you want to enable the Feedback Widget to collect feedback from your users? (See https://docs.sentry.io/platforms/react-native/user-feedback/)',\n }),\n );\n Sentry.setTag('enable-feedback-widget', enableFeedbackWidget);\n\n if (enableFeedbackWidget) {\n clack.log.info(\n `The Feedback Widget will be enabled with default settings. You can show the widget by calling Sentry.showFeedbackWidget() in your code.`,\n );\n }\n\n await traceStep('patch-app-js', () =>\n addSentryInit({\n dsn: selectedProject.keys[0].dsn.public,\n enableSessionReplay,\n enableFeedbackWidget,\n }),\n );\n\n await traceStep('patch-app-js-wrap', () => wrapRootComponent());\n\n if (isExpo) {\n await traceStep('patch-expo-app-config', () =>\n patchExpoAppConfig(cliConfig),\n );\n await traceStep('add-expo-env-local', () => addExpoEnvLocal(cliConfig));\n }\n\n if (isExpo) {\n await traceStep('patch-metro-config', addSentryToExpoMetroConfig);\n } else {\n await traceStep('patch-metro-config', patchMetroWithSentryConfig);\n }\n\n if (fs.existsSync('ios')) {\n Sentry.setTag('patch-ios', true);\n await traceStep('patch-xcode-files', () => patchXcodeFiles(cliConfig));\n }\n\n if (fs.existsSync('android')) {\n Sentry.setTag('patch-android', true);\n await traceStep('patch-android-files', () => patchAndroidFiles(cliConfig));\n }\n\n await runPrettierIfInstalled({ cwd: undefined });\n\n const confirmedFirstException = await confirmFirstSentryException(\n sentryUrl,\n orgSlug,\n projectId,\n );\n\n Sentry.setTag('user-confirmed-first-error', confirmedFirstException);\n\n if (confirmedFirstException) {\n clack.outro(\n `${chalk.green('Everything is set up!')}\n\n ${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-react-native/issues',\n )}`,\n );\n } else {\n clack.outro(\n `${chalk.dim(\n 'Let us know here: https://github.com/getsentry/sentry-react-native/issues',\n )}`,\n );\n }\n}\n\nasync function confirmFirstSentryException(\n url: string,\n orgSlug: string,\n projectId: string,\n) {\n const issuesStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n clack.log\n .step(`To make sure everything is set up correctly, put the following code snippet into your application.\nThe snippet will create a button that, when tapped, sends a test event to Sentry.\n\nAfter that check your project issues:\n\n${chalk.cyan(issuesStreamUrl)}`);\n\n // We want the code snippet to be easily copy-pasteable, without any clack artifacts\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\n<Button title='Try!' onPress={ () => { Sentry.captureException(new Error('First error')) }}/>\n`),\n );\n\n const firstErrorConfirmed = clack.confirm({\n message: `Have you successfully sent a test event?`,\n });\n\n return firstErrorConfirmed;\n}\n\nasync function patchXcodeFiles(config: RNCliSetupConfigContent) {\n await addSentryCliConfig(config, {\n ...propertiesCliSetupConfig,\n name: 'source maps and iOS debug files',\n filename: 'ios/sentry.properties',\n gitignore: false,\n });\n\n if (platform() === 'darwin' && (await confirmPodInstall())) {\n await traceStep('pod-install', () => podInstall('ios'));\n }\n\n const xcodeProjectPath = traceStep('find-xcode-project', () =>\n getFirstMatchedPath(XCODE_PROJECT),\n );\n Sentry.setTag(\n 'xcode-project-status',\n xcodeProjectPath ? 'found' : 'not-found',\n );\n if (!xcodeProjectPath) {\n clack.log.warn(\n `Could not find Xcode project file using ${chalk.cyan(XCODE_PROJECT)}.`,\n );\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const [xcodeProject, buildPhasesMap] = traceStep(\n 'parse-xcode-project',\n () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const project = xcode.project(xcodeProjectPath);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n project.parseSync();\n\n const map = getValidExistingBuildPhases(project);\n return [project, map];\n },\n );\n Sentry.setTag('xcode-project-status', 'parsed');\n\n await traceStep('patch-bundle-phase', async () => {\n const bundlePhase = findBundlePhase(buildPhasesMap);\n Sentry.setTag(\n 'xcode-bundle-phase-status',\n bundlePhase ? 'found' : 'not-found',\n );\n\n await patchBundlePhase(\n bundlePhase,\n addSentryWithBundledScriptsToBundleShellScript,\n );\n\n Sentry.setTag('xcode-bundle-phase-status', 'patched');\n });\n\n traceStep('add-debug-files-upload-phase', () => {\n const debugFilesUploadPhaseExists =\n !!findDebugFilesUploadPhase(buildPhasesMap);\n Sentry.setTag(\n 'xcode-debug-files-upload-phase-status',\n debugFilesUploadPhaseExists ? 'already-exists' : undefined,\n );\n\n addDebugFilesUploadPhaseWithBundledScripts(xcodeProject, {\n debugFilesUploadPhaseExists,\n });\n\n Sentry.setTag('xcode-debug-files-upload-phase-status', 'added');\n });\n\n traceStep('write-xcode-project', () => {\n writeXcodeProject(xcodeProjectPath, xcodeProject);\n });\n Sentry.setTag('xcode-project-status', 'patched');\n}\n\nasync function patchAndroidFiles(config: RNCliSetupConfigContent) {\n await addSentryCliConfig(config, {\n ...propertiesCliSetupConfig,\n name: 'source maps and iOS debug files',\n filename: 'android/sentry.properties',\n gitignore: false,\n });\n\n const appBuildGradlePath = traceStep('find-app-build-gradle', () =>\n getFirstMatchedPath(APP_BUILD_GRADLE),\n );\n Sentry.setTag(\n 'app-build-gradle-status',\n appBuildGradlePath ? 'found' : 'not-found',\n );\n if (!appBuildGradlePath) {\n clack.log.warn(\n `Could not find Android ${chalk.cyan(\n 'app/build.gradle',\n )} file using ${chalk.cyan(APP_BUILD_GRADLE)}.`,\n );\n return;\n }\n\n const appBuildGradle = traceStep('read-app-build-gradle', () =>\n fs.readFileSync(appBuildGradlePath, 'utf-8'),\n );\n const includesSentry =\n doesAppBuildGradleIncludeRNSentryGradlePlugin(appBuildGradle);\n if (includesSentry) {\n Sentry.setTag('app-build-gradle-status', 'already-includes-sentry');\n clack.log.warn(\n `Android ${chalk.cyan('app/build.gradle')} file already includes Sentry.`,\n );\n return;\n }\n\n const patchedAppBuildGradle = traceStep('add-rn-sentry-gradle-plugin', () =>\n addRNSentryGradlePlugin(appBuildGradle),\n );\n if (!doesAppBuildGradleIncludeRNSentryGradlePlugin(patchedAppBuildGradle)) {\n Sentry.setTag(\n 'app-build-gradle-status',\n 'failed-to-add-rn-sentry-gradle-plugin',\n );\n clack.log.warn(\n `Could not add Sentry RN Gradle Plugin to ${chalk.cyan(\n 'app/build.gradle',\n )}.`,\n );\n return;\n }\n\n Sentry.setTag('app-build-gradle-status', 'added-rn-sentry-gradle-plugin');\n clack.log.success(\n `Added Sentry RN Gradle Plugin to ${chalk.bold('app/build.gradle')}.`,\n );\n\n traceStep('write-app-build-gradle', () =>\n writeAppBuildGradle(appBuildGradlePath, patchedAppBuildGradle),\n );\n clack.log.success(\n chalk.green(`Android ${chalk.cyan('app/build.gradle')} saved.`),\n );\n}\n\nasync function confirmPodInstall(): Promise<boolean> {\n return traceStep('confirm-pod-install', async () => {\n const continueWithPodInstall = await abortIfCancelled(\n clack.select({\n message: 'Do you want to run `pod install` now?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Recommended for smaller projects, this might take several minutes',\n },\n { value: false, label: `No, I'll do it later` },\n ],\n initialValue: true,\n }),\n );\n Sentry.setTag('continue-with-pod-install', continueWithPodInstall);\n return continueWithPodInstall;\n });\n}\n"]}
|
|
@@ -9,19 +9,12 @@ export declare class ErrorPatchSnippet {
|
|
|
9
9
|
constructor(snippet: string);
|
|
10
10
|
}
|
|
11
11
|
export declare function patchBundlePhase(bundlePhase: BuildPhase | undefined, patch: (script: string) => string | ErrorPatchSnippet): Promise<void>;
|
|
12
|
-
export declare function unPatchBundlePhase(bundlePhase: BuildPhase | undefined): void;
|
|
13
|
-
export declare function removeSentryFromBundleShellScript(script: string): string;
|
|
14
12
|
export declare function findBundlePhase(buildPhases: BuildPhaseMap): BuildPhase | undefined;
|
|
15
13
|
export declare function doesBundlePhaseIncludeSentry(buildPhase: BuildPhase): boolean;
|
|
16
14
|
export declare function addSentryWithBundledScriptsToBundleShellScript(script: string): string | ErrorPatchSnippet;
|
|
17
|
-
export declare function addSentryWithCliToBundleShellScript(script: string): string | ErrorPatchSnippet;
|
|
18
15
|
export declare function addDebugFilesUploadPhaseWithBundledScripts(xcodeProject: any, { debugFilesUploadPhaseExists }: {
|
|
19
16
|
debugFilesUploadPhaseExists: boolean;
|
|
20
17
|
}): void;
|
|
21
|
-
export declare function addDebugFilesUploadPhaseWithCli(xcodeProject: any, { debugFilesUploadPhaseExists }: {
|
|
22
|
-
debugFilesUploadPhaseExists: boolean;
|
|
23
|
-
}): void;
|
|
24
|
-
export declare function unPatchDebugFilesUploadPhase(xcodeProject: any): void;
|
|
25
18
|
export declare function findDebugFilesUploadPhase(buildPhasesMap: Record<string, BuildPhase>): [key: string, buildPhase: BuildPhase] | undefined;
|
|
26
19
|
export declare function writeXcodeProject(xcodeProjectPath: string, xcodeProject: Project): void;
|
|
27
20
|
export {};
|
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.writeXcodeProject = exports.findDebugFilesUploadPhase = exports.
|
|
29
|
+
exports.writeXcodeProject = exports.findDebugFilesUploadPhase = exports.addDebugFilesUploadPhaseWithBundledScripts = exports.addSentryWithBundledScriptsToBundleShellScript = exports.doesBundlePhaseIncludeSentry = exports.findBundlePhase = exports.patchBundlePhase = exports.ErrorPatchSnippet = exports.getValidExistingBuildPhases = void 0;
|
|
30
30
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
31
31
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
32
32
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
@@ -78,42 +78,6 @@ async function patchBundlePhase(bundlePhase, patch) {
|
|
|
78
78
|
clack.log.success(`Patched Build phase ${chalk_1.default.cyan('Bundle React Native code and images')}.`);
|
|
79
79
|
}
|
|
80
80
|
exports.patchBundlePhase = patchBundlePhase;
|
|
81
|
-
function unPatchBundlePhase(bundlePhase) {
|
|
82
|
-
if (!bundlePhase) {
|
|
83
|
-
clack.log.warn(`Could not find ${chalk_1.default.cyan('Bundle React Native code and images')} build phase.`);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
if (!bundlePhase.shellScript.match(/sentry-cli\s+react-native\s+xcode/i) &&
|
|
87
|
-
!bundlePhase.shellScript.includes('sentry-xcode.sh')) {
|
|
88
|
-
clack.log.success(`Build phase ${chalk_1.default.cyan('Bundle React Native code and images')} does not include Sentry.`);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
bundlePhase.shellScript = JSON.stringify(removeSentryFromBundleShellScript(JSON.parse(bundlePhase.shellScript)));
|
|
93
|
-
clack.log.success(`Build phase ${chalk_1.default.cyan('Bundle React Native code and images')} unpatched successfully.`);
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
clack.log.error(`Failed to unpatch ${chalk_1.default.cyan('Bundle React Native code and images')} due to a json error.`);
|
|
97
|
-
Sentry.captureException('Error while unpatching bundle phase');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
exports.unPatchBundlePhase = unPatchBundlePhase;
|
|
101
|
-
function removeSentryFromBundleShellScript(script) {
|
|
102
|
-
return (script
|
|
103
|
-
// remove sentry properties export
|
|
104
|
-
.replace(/^export SENTRY_PROPERTIES=sentry.properties\r?\n/m, '')
|
|
105
|
-
.replace(/^\/bin\/sh .*?..\/node_modules\/@sentry\/react-native\/scripts\/collect-modules.sh"?\r?\n/m, '')
|
|
106
|
-
// unwrap react-native-xcode.sh command. In case someone replaced it
|
|
107
|
-
// entirely with the sentry-cli command we need to put the original
|
|
108
|
-
// version back in.
|
|
109
|
-
.replace(/\.\.\/node_modules\/@sentry\/cli\/bin\/sentry-cli\s+react-native\s+xcode\s+\$REACT_NATIVE_XCODE/i, '$REACT_NATIVE_XCODE')
|
|
110
|
-
.replace(
|
|
111
|
-
// eslint-disable-next-line no-useless-escape
|
|
112
|
-
/\"\/bin\/sh.*?sentry-xcode.sh\s+\$REACT_NATIVE_XCODE/i,
|
|
113
|
-
// eslint-disable-next-line no-useless-escape
|
|
114
|
-
'"$REACT_NATIVE_XCODE'));
|
|
115
|
-
}
|
|
116
|
-
exports.removeSentryFromBundleShellScript = removeSentryFromBundleShellScript;
|
|
117
81
|
function findBundlePhase(buildPhases) {
|
|
118
82
|
return Object.values(buildPhases).find((buildPhase) => buildPhase.shellScript.match(/\/scripts\/react-native-xcode\.sh/i));
|
|
119
83
|
}
|
|
@@ -162,27 +126,6 @@ REACT_NATIVE_XCODE="$REACT_NATIVE_PATH/scripts/react-native-xcode.sh"
|
|
|
162
126
|
return patchedScript;
|
|
163
127
|
}
|
|
164
128
|
exports.addSentryWithBundledScriptsToBundleShellScript = addSentryWithBundledScriptsToBundleShellScript;
|
|
165
|
-
function addSentryWithCliToBundleShellScript(script) {
|
|
166
|
-
if (!script.includes('$REACT_NATIVE_XCODE')) {
|
|
167
|
-
clack.log.error(`Could not find $REACT_NATIVE_XCODE in ${chalk_1.default.cyan('Bundle React Native code and images')} build phase. Skipping patching.`);
|
|
168
|
-
Sentry.captureException(`Could not find $REACT_NATIVE_XCODE in 'Bundle React Native code and images' build phase.`);
|
|
169
|
-
return new ErrorPatchSnippet((0, clack_1.makeCodeSnippet)(true, (unchanged, plus, _minus) => {
|
|
170
|
-
return unchanged(`${plus(`export SENTRY_PROPERTIES=sentry.properties
|
|
171
|
-
export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"
|
|
172
|
-
`)}
|
|
173
|
-
/bin/sh -c "$WITH_ENVIRONMENT ${plus(`\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode`)} $REACT_NATIVE_XCODE${plus(`\\"`)}"
|
|
174
|
-
${plus(`/bin/sh -c "$WITH_ENVIRONMENT ../node_modules/@sentry/react-native/scripts/collect-modules.sh"`)}
|
|
175
|
-
`);
|
|
176
|
-
}));
|
|
177
|
-
}
|
|
178
|
-
return ('export SENTRY_PROPERTIES=sentry.properties\n' +
|
|
179
|
-
'export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"\n' +
|
|
180
|
-
script.replace('$REACT_NATIVE_XCODE', () =>
|
|
181
|
-
// eslint-disable-next-line no-useless-escape
|
|
182
|
-
'\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\"') +
|
|
183
|
-
'\n/bin/sh -c "$WITH_ENVIRONMENT ../node_modules/@sentry/react-native/scripts/collect-modules.sh"\n');
|
|
184
|
-
}
|
|
185
|
-
exports.addSentryWithCliToBundleShellScript = addSentryWithCliToBundleShellScript;
|
|
186
129
|
function addDebugFilesUploadPhaseWithBundledScripts(
|
|
187
130
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
188
131
|
xcodeProject, { debugFilesUploadPhaseExists }) {
|
|
@@ -197,57 +140,6 @@ xcodeProject, { debugFilesUploadPhaseExists }) {
|
|
|
197
140
|
clack.log.success(`Added Build phase ${chalk_1.default.cyan('Upload Debug Symbols to Sentry')}.`);
|
|
198
141
|
}
|
|
199
142
|
exports.addDebugFilesUploadPhaseWithBundledScripts = addDebugFilesUploadPhaseWithBundledScripts;
|
|
200
|
-
function addDebugFilesUploadPhaseWithCli(
|
|
201
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
202
|
-
xcodeProject, { debugFilesUploadPhaseExists }) {
|
|
203
|
-
if (debugFilesUploadPhaseExists) {
|
|
204
|
-
clack.log.warn(`Build phase ${chalk_1.default.cyan('Upload Debug Symbols to Sentry')} already exists.`);
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Upload Debug Symbols to Sentry', null, {
|
|
208
|
-
shellPath: '/bin/sh',
|
|
209
|
-
shellScript: `
|
|
210
|
-
WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh"
|
|
211
|
-
if [ -f "$WITH_ENVIRONMENT" ]; then
|
|
212
|
-
. "$WITH_ENVIRONMENT"
|
|
213
|
-
fi
|
|
214
|
-
export SENTRY_PROPERTIES=sentry.properties
|
|
215
|
-
[ "$SENTRY_INCLUDE_NATIVE_SOURCES" = "true" ] && INCLUDE_SOURCES_FLAG="--include-sources" || INCLUDE_SOURCES_FLAG=""
|
|
216
|
-
../node_modules/@sentry/cli/bin/sentry-cli debug-files upload "$INCLUDE_SOURCES_FLAG" "$DWARF_DSYM_FOLDER_PATH"
|
|
217
|
-
`,
|
|
218
|
-
});
|
|
219
|
-
clack.log.success(`Added Build phase ${chalk_1.default.cyan('Upload Debug Symbols to Sentry')}.`);
|
|
220
|
-
}
|
|
221
|
-
exports.addDebugFilesUploadPhaseWithCli = addDebugFilesUploadPhaseWithCli;
|
|
222
|
-
function unPatchDebugFilesUploadPhase(
|
|
223
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
224
|
-
xcodeProject) {
|
|
225
|
-
const buildPhasesMap = xcodeProject.hash.project.objects.PBXShellScriptBuildPhase || {};
|
|
226
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
227
|
-
const debugFilesUploadPhaseResult = findDebugFilesUploadPhase(buildPhasesMap);
|
|
228
|
-
if (!debugFilesUploadPhaseResult) {
|
|
229
|
-
clack.log.warn(`Build phase ${chalk_1.default.cyan('Upload Debug Symbols to Sentry')} not found.`);
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const [debugFilesUploadPhaseKey] = debugFilesUploadPhaseResult;
|
|
233
|
-
const firstTarget = xcodeProject.getFirstTarget().uuid;
|
|
234
|
-
const nativeTargets = xcodeProject.hash.project.objects.PBXNativeTarget;
|
|
235
|
-
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
236
|
-
delete buildPhasesMap[debugFilesUploadPhaseKey];
|
|
237
|
-
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
238
|
-
delete buildPhasesMap[`${debugFilesUploadPhaseKey}_comment`];
|
|
239
|
-
const phases = nativeTargets[firstTarget].buildPhases;
|
|
240
|
-
if (phases) {
|
|
241
|
-
for (let i = 0; i < phases.length; i++) {
|
|
242
|
-
if (phases[i].value === debugFilesUploadPhaseKey) {
|
|
243
|
-
phases.splice(i, 1);
|
|
244
|
-
break;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
clack.log.success(`Build phase ${chalk_1.default.cyan('Upload Debug Symbols to Sentry')} removed successfully.`);
|
|
249
|
-
}
|
|
250
|
-
exports.unPatchDebugFilesUploadPhase = unPatchDebugFilesUploadPhase;
|
|
251
143
|
function findDebugFilesUploadPhase(buildPhasesMap) {
|
|
252
144
|
return Object.entries(buildPhasesMap).find(([_, buildPhase]) => {
|
|
253
145
|
const containsCliDebugUpload = typeof buildPhase !== 'string' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcode.js","sourceRoot":"","sources":["../../../src/react-native/xcode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport * as fs from 'node:fs';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { makeCodeSnippet, showCopyPasteInstructions } from '../utils/clack';\nimport { Project } from 'xcode';\nimport * as Sentry from '@sentry/node';\n\ntype BuildPhase = { shellScript: string };\ntype BuildPhaseMap = Record<string, BuildPhase>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getValidExistingBuildPhases(xcodeProject: any): BuildPhaseMap {\n const map: BuildPhaseMap = {};\n const raw = xcodeProject.hash.project.objects.PBXShellScriptBuildPhase || {};\n for (const key in raw) {\n const val = raw[key];\n val.isa && (map[key] = val);\n }\n\n return map;\n}\n\nexport class ErrorPatchSnippet {\n constructor(public snippet: string) {}\n}\n\nexport async function patchBundlePhase(\n bundlePhase: BuildPhase | undefined,\n patch: (script: string) => string | ErrorPatchSnippet,\n) {\n if (!bundlePhase) {\n clack.log.warn(\n `Could not find ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase.`,\n );\n return;\n }\n\n const bundlePhaseIncludesSentry = doesBundlePhaseIncludeSentry(bundlePhase);\n if (bundlePhaseIncludesSentry) {\n clack.log.warn(\n `Build phase ${chalk.cyan(\n 'Bundle React Native code and images',\n )} already includes Sentry.`,\n );\n return;\n }\n\n const script: string = JSON.parse(bundlePhase.shellScript);\n const patchedScript = patch(script);\n if (patchedScript instanceof ErrorPatchSnippet) {\n await showCopyPasteInstructions({\n filename: 'Xcode project',\n codeSnippet: patchedScript.snippet,\n hint: `Apply in the 'Bundle React Native code and images' build phase`,\n });\n return;\n }\n bundlePhase.shellScript = JSON.stringify(patchedScript);\n clack.log.success(\n `Patched Build phase ${chalk.cyan('Bundle React Native code and images')}.`,\n );\n}\n\nexport function unPatchBundlePhase(bundlePhase: BuildPhase | undefined) {\n if (!bundlePhase) {\n clack.log.warn(\n `Could not find ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase.`,\n );\n return;\n }\n\n if (\n !bundlePhase.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i) &&\n !bundlePhase.shellScript.includes('sentry-xcode.sh')\n ) {\n clack.log.success(\n `Build phase ${chalk.cyan(\n 'Bundle React Native code and images',\n )} does not include Sentry.`,\n );\n return;\n }\n\n try {\n bundlePhase.shellScript = JSON.stringify(\n removeSentryFromBundleShellScript(\n <string>JSON.parse(bundlePhase.shellScript),\n ),\n );\n clack.log.success(\n `Build phase ${chalk.cyan(\n 'Bundle React Native code and images',\n )} unpatched successfully.`,\n );\n } catch (error) {\n clack.log.error(\n `Failed to unpatch ${chalk.cyan(\n 'Bundle React Native code and images',\n )} due to a json error.`,\n );\n Sentry.captureException('Error while unpatching bundle phase');\n }\n}\n\nexport function removeSentryFromBundleShellScript(script: string): string {\n return (\n script\n // remove sentry properties export\n .replace(/^export SENTRY_PROPERTIES=sentry.properties\\r?\\n/m, '')\n .replace(\n /^\\/bin\\/sh .*?..\\/node_modules\\/@sentry\\/react-native\\/scripts\\/collect-modules.sh\"?\\r?\\n/m,\n '',\n )\n // unwrap react-native-xcode.sh command. In case someone replaced it\n // entirely with the sentry-cli command we need to put the original\n // version back in.\n .replace(\n /\\.\\.\\/node_modules\\/@sentry\\/cli\\/bin\\/sentry-cli\\s+react-native\\s+xcode\\s+\\$REACT_NATIVE_XCODE/i,\n '$REACT_NATIVE_XCODE',\n )\n .replace(\n // eslint-disable-next-line no-useless-escape\n /\\\"\\/bin\\/sh.*?sentry-xcode.sh\\s+\\$REACT_NATIVE_XCODE/i,\n // eslint-disable-next-line no-useless-escape\n '\"$REACT_NATIVE_XCODE',\n )\n );\n}\n\nexport function findBundlePhase(buildPhases: BuildPhaseMap) {\n return Object.values(buildPhases).find((buildPhase) =>\n buildPhase.shellScript.match(/\\/scripts\\/react-native-xcode\\.sh/i),\n );\n}\n\nexport function doesBundlePhaseIncludeSentry(buildPhase: BuildPhase) {\n const containsSentryCliRNCommand = !!buildPhase.shellScript.match(\n /sentry-cli\\s+react-native\\s+xcode/i,\n );\n const containsBundledScript =\n buildPhase.shellScript.includes('sentry-xcode.sh');\n return containsSentryCliRNCommand || containsBundledScript;\n}\n\nexport function addSentryWithBundledScriptsToBundleShellScript(\n script: string,\n): string | ErrorPatchSnippet {\n let patchedScript = script;\n const isLikelyPlainReactNativeScript = script.includes('$REACT_NATIVE_XCODE');\n if (isLikelyPlainReactNativeScript) {\n patchedScript = script.replace(\n '$REACT_NATIVE_XCODE',\n // eslint-disable-next-line no-useless-escape\n '\\\\\"/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode.sh $REACT_NATIVE_XCODE\\\\\"',\n );\n }\n\n const isLikelyExpoScript = script.includes('expo');\n if (isLikelyExpoScript) {\n const SENTRY_REACT_NATIVE_XCODE_PATH =\n \"`\\\"$NODE_BINARY\\\" --print \\\"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\\\"`\";\n patchedScript = script.replace(\n /^.*?(packager|scripts)\\/react-native-xcode\\.sh\\s*(\\\\'\\\\\\\\\")?/m,\n // eslint-disable-next-line no-useless-escape\n (match: string) => `/bin/sh ${SENTRY_REACT_NATIVE_XCODE_PATH} ${match}`,\n );\n }\n\n if (patchedScript === script) {\n // No changes were made\n clack.log.error(\n `Failed to patch ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase.`,\n );\n Sentry.captureException(\n `Failed to patch 'Bundle React Native code and images' build phase.`,\n );\n if (isLikelyExpoScript) {\n return new ErrorPatchSnippet(\n makeCodeSnippet(true, (unchanged, plus, _minus) => {\n return unchanged(\n `${plus(\n `/bin/sh \\`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\"\\``,\n )} \\`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"\\``,\n );\n }),\n );\n } else {\n // plain react-native\n return new ErrorPatchSnippet(\n makeCodeSnippet(true, (unchanged, plus, _minus) => {\n return unchanged(`WITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT ${plus(\n `\\\\\"/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode.sh `,\n )}$REACT_NATIVE_XCODE${plus(`\\\\\"`)}\"\n`);\n }),\n );\n }\n }\n\n return patchedScript;\n}\n\nexport function addSentryWithCliToBundleShellScript(\n script: string,\n): string | ErrorPatchSnippet {\n if (!script.includes('$REACT_NATIVE_XCODE')) {\n clack.log.error(\n `Could not find $REACT_NATIVE_XCODE in ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase. Skipping patching.`,\n );\n Sentry.captureException(\n `Could not find $REACT_NATIVE_XCODE in 'Bundle React Native code and images' build phase.`,\n );\n return new ErrorPatchSnippet(\n makeCodeSnippet(true, (unchanged, plus, _minus) => {\n return unchanged(`${plus(`export SENTRY_PROPERTIES=sentry.properties\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\n`)}\n/bin/sh -c \"$WITH_ENVIRONMENT ${plus(\n `\\\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode`,\n )} $REACT_NATIVE_XCODE${plus(`\\\\\"`)}\"\n${plus(\n `/bin/sh -c \"$WITH_ENVIRONMENT ../node_modules/@sentry/react-native/scripts/collect-modules.sh\"`,\n)}\n`);\n }),\n );\n }\n return (\n 'export SENTRY_PROPERTIES=sentry.properties\\n' +\n 'export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\\n' +\n script.replace(\n '$REACT_NATIVE_XCODE',\n () =>\n // eslint-disable-next-line no-useless-escape\n '\\\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\\\"',\n ) +\n '\\n/bin/sh -c \"$WITH_ENVIRONMENT ../node_modules/@sentry/react-native/scripts/collect-modules.sh\"\\n'\n );\n}\n\nexport function addDebugFilesUploadPhaseWithBundledScripts(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xcodeProject: any,\n { debugFilesUploadPhaseExists }: { debugFilesUploadPhaseExists: boolean },\n) {\n if (debugFilesUploadPhaseExists) {\n clack.log.warn(\n `Build phase ${chalk.cyan(\n 'Upload Debug Symbols to Sentry',\n )} already exists.`,\n );\n return;\n }\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript: `/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode-debug-files.sh`,\n },\n );\n clack.log.success(\n `Added Build phase ${chalk.cyan('Upload Debug Symbols to Sentry')}.`,\n );\n}\n\nexport function addDebugFilesUploadPhaseWithCli(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xcodeProject: any,\n { debugFilesUploadPhaseExists }: { debugFilesUploadPhaseExists: boolean },\n) {\n if (debugFilesUploadPhaseExists) {\n clack.log.warn(\n `Build phase ${chalk.cyan(\n 'Upload Debug Symbols to Sentry',\n )} already exists.`,\n );\n return;\n }\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript: `\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nif [ -f \"$WITH_ENVIRONMENT\" ]; then\n . \"$WITH_ENVIRONMENT\"\nfi\nexport SENTRY_PROPERTIES=sentry.properties\n[ \"$SENTRY_INCLUDE_NATIVE_SOURCES\" = \"true\" ] && INCLUDE_SOURCES_FLAG=\"--include-sources\" || INCLUDE_SOURCES_FLAG=\"\"\n../node_modules/@sentry/cli/bin/sentry-cli debug-files upload \"$INCLUDE_SOURCES_FLAG\" \"$DWARF_DSYM_FOLDER_PATH\"\n`,\n },\n );\n clack.log.success(\n `Added Build phase ${chalk.cyan('Upload Debug Symbols to Sentry')}.`,\n );\n}\n\nexport function unPatchDebugFilesUploadPhase(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xcodeProject: any,\n) {\n const buildPhasesMap =\n xcodeProject.hash.project.objects.PBXShellScriptBuildPhase || {};\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const debugFilesUploadPhaseResult = findDebugFilesUploadPhase(buildPhasesMap);\n if (!debugFilesUploadPhaseResult) {\n clack.log.warn(\n `Build phase ${chalk.cyan('Upload Debug Symbols to Sentry')} not found.`,\n );\n return;\n }\n\n const [debugFilesUploadPhaseKey] = debugFilesUploadPhaseResult;\n const firstTarget: string = xcodeProject.getFirstTarget().uuid;\n const nativeTargets = xcodeProject.hash.project.objects.PBXNativeTarget;\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete buildPhasesMap[debugFilesUploadPhaseKey];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete buildPhasesMap[`${debugFilesUploadPhaseKey}_comment`];\n const phases = nativeTargets[firstTarget].buildPhases;\n if (phases) {\n for (let i = 0; i < phases.length; i++) {\n if (phases[i].value === debugFilesUploadPhaseKey) {\n phases.splice(i, 1);\n break;\n }\n }\n }\n clack.log.success(\n `Build phase ${chalk.cyan(\n 'Upload Debug Symbols to Sentry',\n )} removed successfully.`,\n );\n}\n\nexport function findDebugFilesUploadPhase(\n buildPhasesMap: Record<string, BuildPhase>,\n): [key: string, buildPhase: BuildPhase] | undefined {\n return Object.entries(buildPhasesMap).find(([_, buildPhase]) => {\n const containsCliDebugUpload =\n typeof buildPhase !== 'string' &&\n !!buildPhase.shellScript.match(\n /sentry-cli\\s+(upload-dsym|debug-files upload)\\b/,\n );\n const containsBundledDebugUpload =\n typeof buildPhase !== 'string' &&\n buildPhase.shellScript.includes('sentry-xcode-debug-files.sh');\n return containsCliDebugUpload || containsBundledDebugUpload;\n });\n}\n\nexport function writeXcodeProject(\n xcodeProjectPath: string,\n xcodeProject: Project,\n) {\n try {\n const newContent = xcodeProject.writeSync();\n const currentContent = fs.readFileSync(xcodeProjectPath, 'utf-8');\n if (newContent === currentContent) {\n return;\n }\n\n fs.writeFileSync(xcodeProjectPath, newContent, 'utf-8');\n clack.log.success(\n chalk.green(\n `Xcode project ${chalk.cyan(xcodeProjectPath)} changes saved.`,\n ),\n );\n } catch (error) {\n clack.log.error(\n `Error while writing Xcode project ${chalk.cyan(xcodeProjectPath)}`,\n );\n Sentry.captureException('Error while writing Xcode project');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"xcode.js","sourceRoot":"","sources":["../../../src/react-native/xcode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport * as fs from 'node:fs';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { makeCodeSnippet, showCopyPasteInstructions } from '../utils/clack';\nimport { Project } from 'xcode';\nimport * as Sentry from '@sentry/node';\n\ntype BuildPhase = { shellScript: string };\ntype BuildPhaseMap = Record<string, BuildPhase>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getValidExistingBuildPhases(xcodeProject: any): BuildPhaseMap {\n const map: BuildPhaseMap = {};\n const raw = xcodeProject.hash.project.objects.PBXShellScriptBuildPhase || {};\n for (const key in raw) {\n const val = raw[key];\n val.isa && (map[key] = val);\n }\n\n return map;\n}\n\nexport class ErrorPatchSnippet {\n constructor(public snippet: string) {}\n}\n\nexport async function patchBundlePhase(\n bundlePhase: BuildPhase | undefined,\n patch: (script: string) => string | ErrorPatchSnippet,\n) {\n if (!bundlePhase) {\n clack.log.warn(\n `Could not find ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase.`,\n );\n return;\n }\n\n const bundlePhaseIncludesSentry = doesBundlePhaseIncludeSentry(bundlePhase);\n if (bundlePhaseIncludesSentry) {\n clack.log.warn(\n `Build phase ${chalk.cyan(\n 'Bundle React Native code and images',\n )} already includes Sentry.`,\n );\n return;\n }\n\n const script: string = JSON.parse(bundlePhase.shellScript);\n const patchedScript = patch(script);\n if (patchedScript instanceof ErrorPatchSnippet) {\n await showCopyPasteInstructions({\n filename: 'Xcode project',\n codeSnippet: patchedScript.snippet,\n hint: `Apply in the 'Bundle React Native code and images' build phase`,\n });\n return;\n }\n bundlePhase.shellScript = JSON.stringify(patchedScript);\n clack.log.success(\n `Patched Build phase ${chalk.cyan('Bundle React Native code and images')}.`,\n );\n}\n\nexport function findBundlePhase(buildPhases: BuildPhaseMap) {\n return Object.values(buildPhases).find((buildPhase) =>\n buildPhase.shellScript.match(/\\/scripts\\/react-native-xcode\\.sh/i),\n );\n}\n\nexport function doesBundlePhaseIncludeSentry(buildPhase: BuildPhase) {\n const containsSentryCliRNCommand = !!buildPhase.shellScript.match(\n /sentry-cli\\s+react-native\\s+xcode/i,\n );\n const containsBundledScript =\n buildPhase.shellScript.includes('sentry-xcode.sh');\n return containsSentryCliRNCommand || containsBundledScript;\n}\n\nexport function addSentryWithBundledScriptsToBundleShellScript(\n script: string,\n): string | ErrorPatchSnippet {\n let patchedScript = script;\n const isLikelyPlainReactNativeScript = script.includes('$REACT_NATIVE_XCODE');\n if (isLikelyPlainReactNativeScript) {\n patchedScript = script.replace(\n '$REACT_NATIVE_XCODE',\n // eslint-disable-next-line no-useless-escape\n '\\\\\"/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode.sh $REACT_NATIVE_XCODE\\\\\"',\n );\n }\n\n const isLikelyExpoScript = script.includes('expo');\n if (isLikelyExpoScript) {\n const SENTRY_REACT_NATIVE_XCODE_PATH =\n \"`\\\"$NODE_BINARY\\\" --print \\\"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\\\"`\";\n patchedScript = script.replace(\n /^.*?(packager|scripts)\\/react-native-xcode\\.sh\\s*(\\\\'\\\\\\\\\")?/m,\n // eslint-disable-next-line no-useless-escape\n (match: string) => `/bin/sh ${SENTRY_REACT_NATIVE_XCODE_PATH} ${match}`,\n );\n }\n\n if (patchedScript === script) {\n // No changes were made\n clack.log.error(\n `Failed to patch ${chalk.cyan(\n 'Bundle React Native code and images',\n )} build phase.`,\n );\n Sentry.captureException(\n `Failed to patch 'Bundle React Native code and images' build phase.`,\n );\n if (isLikelyExpoScript) {\n return new ErrorPatchSnippet(\n makeCodeSnippet(true, (unchanged, plus, _minus) => {\n return unchanged(\n `${plus(\n `/bin/sh \\`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\"\\``,\n )} \\`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"\\``,\n );\n }),\n );\n } else {\n // plain react-native\n return new ErrorPatchSnippet(\n makeCodeSnippet(true, (unchanged, plus, _minus) => {\n return unchanged(`WITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT ${plus(\n `\\\\\"/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode.sh `,\n )}$REACT_NATIVE_XCODE${plus(`\\\\\"`)}\"\n`);\n }),\n );\n }\n }\n\n return patchedScript;\n}\n\nexport function addDebugFilesUploadPhaseWithBundledScripts(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xcodeProject: any,\n { debugFilesUploadPhaseExists }: { debugFilesUploadPhaseExists: boolean },\n) {\n if (debugFilesUploadPhaseExists) {\n clack.log.warn(\n `Build phase ${chalk.cyan(\n 'Upload Debug Symbols to Sentry',\n )} already exists.`,\n );\n return;\n }\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript: `/bin/sh ../node_modules/@sentry/react-native/scripts/sentry-xcode-debug-files.sh`,\n },\n );\n clack.log.success(\n `Added Build phase ${chalk.cyan('Upload Debug Symbols to Sentry')}.`,\n );\n}\n\nexport function findDebugFilesUploadPhase(\n buildPhasesMap: Record<string, BuildPhase>,\n): [key: string, buildPhase: BuildPhase] | undefined {\n return Object.entries(buildPhasesMap).find(([_, buildPhase]) => {\n const containsCliDebugUpload =\n typeof buildPhase !== 'string' &&\n !!buildPhase.shellScript.match(\n /sentry-cli\\s+(upload-dsym|debug-files upload)\\b/,\n );\n const containsBundledDebugUpload =\n typeof buildPhase !== 'string' &&\n buildPhase.shellScript.includes('sentry-xcode-debug-files.sh');\n return containsCliDebugUpload || containsBundledDebugUpload;\n });\n}\n\nexport function writeXcodeProject(\n xcodeProjectPath: string,\n xcodeProject: Project,\n) {\n try {\n const newContent = xcodeProject.writeSync();\n const currentContent = fs.readFileSync(xcodeProjectPath, 'utf-8');\n if (newContent === currentContent) {\n return;\n }\n\n fs.writeFileSync(xcodeProjectPath, newContent, 'utf-8');\n clack.log.success(\n chalk.green(\n `Xcode project ${chalk.cyan(xcodeProjectPath)} changes saved.`,\n ),\n );\n } catch (error) {\n clack.log.error(\n `Error while writing Xcode project ${chalk.cyan(xcodeProjectPath)}`,\n );\n Sentry.captureException('Error while writing Xcode project');\n }\n}\n"]}
|
package/dist/src/run.js
CHANGED
|
@@ -116,10 +116,7 @@ async function run(argv) {
|
|
|
116
116
|
};
|
|
117
117
|
switch (integration) {
|
|
118
118
|
case 'reactNative':
|
|
119
|
-
await (0, react_native_wizard_1.runReactNativeWizard)(
|
|
120
|
-
...wizardOptions,
|
|
121
|
-
uninstall: finalArgs.uninstall,
|
|
122
|
-
});
|
|
119
|
+
await (0, react_native_wizard_1.runReactNativeWizard)(wizardOptions);
|
|
123
120
|
break;
|
|
124
121
|
case 'flutter':
|
|
125
122
|
await (0, flutter_wizard_1.runFlutterWizard)(wizardOptions);
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { abortIfCancelled } from './utils/clack';\n\nimport { Integration, type Platform } from '../lib/Constants';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport { run as legacyRun } from '../lib/Setup';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAngularWizard } from './angular/angular-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { enableDebugLogs } from './utils/debug';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\ntype WizardIntegration =\n | 'angular'\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean;\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n forceInstall?: boolean;\n comingFrom?: string;\n ignoreGitChanges?: boolean;\n xcodeProjectDir?: string;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n // Enable debug logs if the user has passed the --debug flag\n if (finalArgs.debug) {\n enableDebugLogs();\n }\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${WIZARD_VERSION}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'angular', label: 'Angular' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n forceInstall: finalArgs.forceInstall,\n comingFrom: finalArgs.comingFrom,\n ignoreGitChanges: finalArgs.ignoreGitChanges,\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard({\n ...wizardOptions,\n uninstall: finalArgs.uninstall,\n });\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard({\n ...wizardOptions,\n projectDir: finalArgs.xcodeProjectDir,\n });\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'angular':\n await runAngularWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.cordova,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.electron,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { abortIfCancelled } from './utils/clack';\n\nimport { Integration, type Platform } from '../lib/Constants';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport { run as legacyRun } from '../lib/Setup';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAngularWizard } from './angular/angular-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { enableDebugLogs } from './utils/debug';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\ntype WizardIntegration =\n | 'angular'\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean; // used in Cordova\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n forceInstall?: boolean;\n comingFrom?: string;\n ignoreGitChanges?: boolean;\n xcodeProjectDir?: string;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n // Enable debug logs if the user has passed the --debug flag\n if (finalArgs.debug) {\n enableDebugLogs();\n }\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${WIZARD_VERSION}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'angular', label: 'Angular' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n forceInstall: finalArgs.forceInstall,\n comingFrom: finalArgs.comingFrom,\n ignoreGitChanges: finalArgs.ignoreGitChanges,\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard(wizardOptions);\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard({\n ...wizardOptions,\n projectDir: finalArgs.xcodeProjectDir,\n });\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'angular':\n await runAngularWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.cordova,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.electron,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n"]}
|
|
@@ -48,6 +48,7 @@ const detect_tool_1 = require("./utils/detect-tool");
|
|
|
48
48
|
const other_wizards_1 = require("./utils/other-wizards");
|
|
49
49
|
const sdk_version_1 = require("./utils/sdk-version");
|
|
50
50
|
const path_1 = require("path");
|
|
51
|
+
const wrangler_1 = require("./tools/wrangler");
|
|
51
52
|
async function runSourcemapsWizard(options, preSelectedTool) {
|
|
52
53
|
return (0, telemetry_1.withTelemetry)({
|
|
53
54
|
enabled: options.telemetryEnabled,
|
|
@@ -106,6 +107,11 @@ You can turn this off by running the wizard with the '--disable-telemetry' flag.
|
|
|
106
107
|
authToken,
|
|
107
108
|
}, wizardOptionsWithPreSelectedProject, preSelectedTool));
|
|
108
109
|
await (0, telemetry_1.traceStep)('ci-setup', () => setupCI(selectedTool, authToken, options.comingFrom));
|
|
110
|
+
if (!preSelectedTool) {
|
|
111
|
+
// running prettier is only necessary if the source maps wizard is the main flow
|
|
112
|
+
// skip it, if it's called from another wizard (e.g. angular)
|
|
113
|
+
await (0, clack_1.runPrettierIfInstalled)({ cwd: process.cwd() });
|
|
114
|
+
}
|
|
109
115
|
if (!preSelectedTool) {
|
|
110
116
|
await (0, telemetry_1.traceStep)('outro', () => printOutro(sentryUrl, selectedProject.organization.slug, selectedProject.id));
|
|
111
117
|
}
|
|
@@ -124,6 +130,11 @@ async function askForUsedBundlerTool() {
|
|
|
124
130
|
value: 'create-react-app',
|
|
125
131
|
hint: 'Select this option if you set up your app with Create React App.',
|
|
126
132
|
},
|
|
133
|
+
{
|
|
134
|
+
label: 'Cloudflare Wrangler',
|
|
135
|
+
value: 'wrangler',
|
|
136
|
+
hint: "You're using `wrangler deploy` to build and deploy your Cloudflare Worker.",
|
|
137
|
+
},
|
|
127
138
|
{
|
|
128
139
|
label: 'Webpack',
|
|
129
140
|
value: 'webpack',
|
|
@@ -184,6 +195,9 @@ async function startToolSetupFlow(selectedTool, options, wizardOptions, preSelec
|
|
|
184
195
|
case 'create-react-app':
|
|
185
196
|
await (0, sentry_cli_1.configureSentryCLI)(options, create_react_app_1.configureCRASourcemapGenerationFlow);
|
|
186
197
|
break;
|
|
198
|
+
case 'wrangler':
|
|
199
|
+
await (0, wrangler_1.configureWrangler)(options);
|
|
200
|
+
break;
|
|
187
201
|
case 'angular':
|
|
188
202
|
await (0, sentry_cli_1.configureSentryCLI)({ ...options, defaultArtifactPath: `.${path_1.sep}dist` }, angular_1.configureAngularSourcemapGenerationFlow, preSelectedTool === 'angular');
|
|
189
203
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\n\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n getOrAskForProjectData,\n getPackageManager,\n printWelcome,\n SENTRY_CLI_RC_FILE,\n SENTRY_DOT_ENV_FILE,\n} from '../utils/clack';\nimport { NPM } from '../utils/package-manager';\nimport type { WizardOptions } from '../utils/types';\nimport { getIssueStreamUrl } from '../utils/url';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureSentryCLI, setupNpmScriptInCI } from './tools/sentry-cli';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport type { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport type { SupportedTools } from './utils/detect-tool';\nimport { detectUsedTool } from './utils/detect-tool';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { sep } from 'path';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n wizardOptions: options,\n },\n () => runSourcemapsWizardWithTelemetry(options, preSelectedTool),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n if (!preSelectedTool) {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n }\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n if (!preSelectedTool) {\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n }\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool =\n preSelectedTool || (await traceStep('select-tool', askForUsedBundlerTool));\n\n Sentry.setTag('selected-tool', selectedTool);\n\n if (selectedTool === 'no-tool') {\n clack.log.info(\n \"No Problem! But in this case, there's nothing to configure :)\",\n );\n await abort('Exiting, have a great day!', 0);\n return;\n }\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n preSelectedTool,\n ),\n );\n\n await traceStep('ci-setup', () =>\n setupCI(selectedTool, authToken, options.comingFrom),\n );\n\n if (!preSelectedTool) {\n await traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n }\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'I use another tool',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n {\n label: \"I don't minify, transpile or bundle my code\",\n value: 'no-tool',\n hint: 'This will exit the wizard',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selectedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n switch (selectedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'angular':\n await configureSentryCLI(\n { ...options, defaultArtifactPath: `.${sep}dist` },\n configureAngularSourcemapGenerationFlow,\n preSelectedTool === 'angular',\n );\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\nexport async function setupCI(\n selectedTool: SupportedTools,\n authToken: string,\n comingFrom: WizardOptions['comingFrom'],\n) {\n if (comingFrom === 'vercel') {\n clack.log.info(\n 'Sentry Vercel integration is already configured. Skipping CI setup.',\n );\n Sentry.setTag('using-ci', true);\n } else {\n await traceStep('configure-ci', () => configureCI(selectedTool, authToken));\n }\n}\n\nexport async function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like GitHub Actions, GitLab, CircleCI, TravisCI, Jenkins, Vercel, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n const authTokenFile = isCliBasedFlowTool\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function printOutro(\n url: string,\n orgSlug: string,\n projectId: string,\n): Promise<void> {\n const packageManager = await getPackageManager(NPM);\n\n const issueStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(\n `${arrow} For example, run ${chalk.bold(packageManager.buildCommand)}.`,\n )}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sourcemaps-wizard.js","sourceRoot":"","sources":["../../../src/sourcemaps/sourcemaps-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\n\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n getOrAskForProjectData,\n getPackageManager,\n printWelcome,\n runPrettierIfInstalled,\n SENTRY_CLI_RC_FILE,\n SENTRY_DOT_ENV_FILE,\n} from '../utils/clack';\nimport { NPM } from '../utils/package-manager';\nimport type { WizardOptions } from '../utils/types';\nimport { getIssueStreamUrl } from '../utils/url';\nimport { isUnicodeSupported } from '../utils/vendor/is-unicorn-supported';\nimport { configureAngularSourcemapGenerationFlow } from './tools/angular';\nimport { configureCRASourcemapGenerationFlow } from './tools/create-react-app';\nimport { configureEsbuildPlugin } from './tools/esbuild';\nimport { configureRollupPlugin } from './tools/rollup';\nimport { configureSentryCLI, setupNpmScriptInCI } from './tools/sentry-cli';\nimport { configureTscSourcemapGenerationFlow } from './tools/tsc';\nimport type { SourceMapUploadToolConfigurationOptions } from './tools/types';\nimport { configureVitePlugin } from './tools/vite';\nimport { configureWebPackPlugin } from './tools/webpack';\nimport type { SupportedTools } from './utils/detect-tool';\nimport { detectUsedTool } from './utils/detect-tool';\nimport { checkIfMoreSuitableWizardExistsAndAskForRedirect } from './utils/other-wizards';\nimport { ensureMinimumSdkVersionIsInstalled } from './utils/sdk-version';\nimport { sep } from 'path';\nimport { configureWrangler } from './tools/wrangler';\n\nexport async function runSourcemapsWizard(\n options: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sourcemaps',\n wizardOptions: options,\n },\n () => runSourcemapsWizardWithTelemetry(options, preSelectedTool),\n );\n}\n\nasync function runSourcemapsWizardWithTelemetry(\n options: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n if (!preSelectedTool) {\n printWelcome({\n wizardName: 'Sentry Source Maps Upload Configuration Wizard',\n message: `This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)${\n options.telemetryEnabled\n ? `\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the '--disable-telemetry' flag.)`\n : ''\n }`,\n promoCode: options.promoCode,\n });\n }\n\n const moreSuitableWizard = await traceStep(\n 'check-framework-wizard',\n checkIfMoreSuitableWizardExistsAndAskForRedirect,\n );\n if (moreSuitableWizard) {\n await traceStep('run-framework-wizard', () => moreSuitableWizard(options));\n return;\n }\n\n if (!preSelectedTool) {\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n }\n\n await traceStep('check-sdk-version', ensureMinimumSdkVersionIsInstalled);\n\n const { selfHosted, selectedProject, sentryUrl, authToken } =\n await getOrAskForProjectData(options);\n\n const wizardOptionsWithPreSelectedProject = {\n ...options,\n preSelectedProject: {\n project: selectedProject,\n authToken,\n selfHosted,\n },\n };\n\n const selectedTool =\n preSelectedTool || (await traceStep('select-tool', askForUsedBundlerTool));\n\n Sentry.setTag('selected-tool', selectedTool);\n\n if (selectedTool === 'no-tool') {\n clack.log.info(\n \"No Problem! But in this case, there's nothing to configure :)\",\n );\n await abort('Exiting, have a great day!', 0);\n return;\n }\n\n await traceStep('tool-setup', () =>\n startToolSetupFlow(\n selectedTool,\n {\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n authToken,\n },\n wizardOptionsWithPreSelectedProject,\n preSelectedTool,\n ),\n );\n\n await traceStep('ci-setup', () =>\n setupCI(selectedTool, authToken, options.comingFrom),\n );\n\n if (!preSelectedTool) {\n // running prettier is only necessary if the source maps wizard is the main flow\n // skip it, if it's called from another wizard (e.g. angular)\n await runPrettierIfInstalled({ cwd: process.cwd() });\n }\n\n if (!preSelectedTool) {\n await traceStep('outro', () =>\n printOutro(\n sentryUrl,\n selectedProject.organization.slug,\n selectedProject.id,\n ),\n );\n }\n}\n\nasync function askForUsedBundlerTool(): Promise<SupportedTools> {\n const selectedTool = await abortIfCancelled(\n clack.select({\n message: 'Which framework, bundler or build tool are you using?',\n options: [\n {\n label: 'Angular',\n value: 'angular',\n hint: 'Select this option if you are using Angular.',\n },\n {\n label: 'Create React App',\n value: 'create-react-app',\n hint: 'Select this option if you set up your app with Create React App.',\n },\n {\n label: 'Cloudflare Wrangler',\n value: 'wrangler',\n hint: \"You're using `wrangler deploy` to build and deploy your Cloudflare Worker.\",\n },\n {\n label: 'Webpack',\n value: 'webpack',\n hint: 'Select this if you are using Webpack and you have access to your Webpack config.',\n },\n {\n label: 'Vite',\n value: 'vite',\n hint: 'Select this if you are using Vite and you have access to your Vite config.',\n },\n {\n label: 'esbuild',\n value: 'esbuild',\n hint: 'Select this if you are using esbuild and you have access to your esbuild config.',\n },\n {\n label: 'Rollup',\n value: 'rollup',\n hint: 'Select this if you are using Rollup and you have access to your Rollup config.',\n },\n {\n label: 'tsc',\n value: 'tsc',\n hint: 'Configure source maps when using tsc as build tool',\n },\n {\n label: 'I use another tool',\n value: 'sentry-cli',\n hint: 'This will configure source maps upload for you using sentry-cli',\n },\n {\n label: \"I don't minify, transpile or bundle my code\",\n value: 'no-tool',\n hint: 'This will exit the wizard',\n },\n ],\n initialValue: await detectUsedTool(),\n }),\n );\n\n return selectedTool;\n}\n\nasync function startToolSetupFlow(\n selectedTool: SupportedTools,\n options: SourceMapUploadToolConfigurationOptions,\n wizardOptions: WizardOptions,\n preSelectedTool?: SupportedTools,\n): Promise<void> {\n switch (selectedTool) {\n case 'webpack':\n await configureWebPackPlugin(options);\n break;\n case 'vite':\n await configureVitePlugin(options);\n break;\n case 'esbuild':\n await configureEsbuildPlugin(options);\n break;\n case 'rollup':\n await configureRollupPlugin(options);\n break;\n case 'tsc':\n await configureSentryCLI(options, configureTscSourcemapGenerationFlow);\n break;\n case 'create-react-app':\n await configureSentryCLI(options, configureCRASourcemapGenerationFlow);\n break;\n case 'wrangler':\n await configureWrangler(options);\n break;\n case 'angular':\n await configureSentryCLI(\n { ...options, defaultArtifactPath: `.${sep}dist` },\n configureAngularSourcemapGenerationFlow,\n preSelectedTool === 'angular',\n );\n break;\n default:\n await configureSentryCLI(options);\n break;\n }\n}\nexport async function setupCI(\n selectedTool: SupportedTools,\n authToken: string,\n comingFrom: WizardOptions['comingFrom'],\n) {\n if (comingFrom === 'vercel') {\n clack.log.info(\n 'Sentry Vercel integration is already configured. Skipping CI setup.',\n );\n Sentry.setTag('using-ci', true);\n } else {\n await traceStep('configure-ci', () => configureCI(selectedTool, authToken));\n }\n}\n\nexport async function configureCI(\n selectedTool: SupportedTools,\n authToken: string,\n): Promise<void> {\n const isUsingCI = await abortIfCancelled(\n clack.select({\n message: `Are you using a CI/CD tool to build and deploy your application?`,\n options: [\n {\n label: 'Yes',\n hint: 'I use a tool like GitHub Actions, GitLab, CircleCI, TravisCI, Jenkins, Vercel, ...',\n value: true,\n },\n {\n label: 'No',\n hint: 'I build and deploy my application manually',\n value: false,\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('using-ci', isUsingCI);\n\n const isCliBasedFlowTool = [\n 'sentry-cli',\n 'tsc',\n 'angular',\n 'create-react-app',\n ].includes(selectedTool);\n\n const authTokenFile = isCliBasedFlowTool\n ? SENTRY_CLI_RC_FILE\n : SENTRY_DOT_ENV_FILE;\n\n if (!isUsingCI) {\n clack.log.info(\n `No Problem! Just make sure that the Sentry auth token from ${chalk.cyan(\n authTokenFile,\n )} is available whenever you build and deploy your app.`,\n );\n return;\n }\n\n if (isCliBasedFlowTool) {\n await traceStep('ci-npm-script-setup', setupNpmScriptInCI);\n }\n\n await traceStep('ci-auth-token-setup', () => setupAuthTokenInCI(authToken));\n}\n\nasync function setupAuthTokenInCI(authToken: string) {\n clack.log.step(\n 'Add the Sentry authentication token as an environment variable to your CI setup:',\n );\n\n // Intentially logging directly to console here so that the code can be copied/pasted directly\n // eslint-disable-next-line no-console\n console.log(\n chalk.greenBright(`\nSENTRY_AUTH_TOKEN=${authToken}\n`),\n );\n\n clack.log.warn(\n chalk.yellow('DO NOT commit this auth token to your repository!'),\n );\n\n const addedEnvVarToCI = await abortIfCancelled(\n clack.select({\n message: 'Did you configure CI as shown above?',\n options: [\n { label: 'Yes, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n 'You need to set the auth token to upload source maps in CI',\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);\n\n if (!addedEnvVarToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function printOutro(\n url: string,\n orgSlug: string,\n projectId: string,\n): Promise<void> {\n const packageManager = await getPackageManager(NPM);\n\n const issueStreamUrl = getIssueStreamUrl({ url, orgSlug, projectId });\n\n const arrow = isUnicodeSupported() ? '→' : '->';\n\n clack.outro(`${chalk.green(\"That's it - everything is set up!\")}\n\n ${chalk.cyan(`Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ${chalk.bold('production mode')}.\n ${chalk.gray(\n `${arrow} For example, run ${chalk.bold(packageManager.buildCommand)}.`,\n )}\n ${chalk.gray(\n `${arrow} You should see source map upload logs in your console.`,\n )}\n 2. Run your application and throw a test error.\n ${chalk.gray(`${arrow} The error should appear in Sentry:`)}\n ${chalk.gray(`${arrow} ${issueStreamUrl}`)}\n 3. Open the error in Sentry and verify that it's source-mapped.\n ${chalk.gray(\n `${arrow} The stack trace should show your original source code.`,\n )}\n `)}\n ${chalk.dim(\n `If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues`,\n )}\n`);\n}\n"]}
|