@sentry/wizard 3.37.0 → 3.38.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.38.0
4
+
5
+ - feat(react-native): Add minimum supported Sentry React Native SDK version detection (>=5.0.0) ([#752](https://github.com/getsentry/sentry-wizard/pull/752))
6
+ - fix(deps): Bump to `glob@9.3.5` to resolve deprecated dependency warning ([#753](https://github.com/getsentry/sentry-wizard/pull/750))
7
+ - fix(react-native): Replaces the deprecated enableSpotlight option with spotlight ([#750](https://github.com/getsentry/sentry-wizard/pull/750))
8
+
3
9
  ## 3.37.0
4
10
 
5
11
  - feat(nuxt): Add `import-in-the-middle` install step when using pnpm ([#727](https://github.com/getsentry/sentry-wizard/pull/727))
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "3.37.0",
3
+ "version": "3.38.0",
4
4
  "homepage": "https://github.com/getsentry/sentry-wizard",
5
5
  "repository": "https://github.com/getsentry/sentry-wizard",
6
6
  "description": "Sentry wizard helping you to configure your project",
@@ -29,7 +29,7 @@
29
29
  "@sentry/node": "^7.119.2",
30
30
  "axios": "1.7.4",
31
31
  "chalk": "^2.4.1",
32
- "glob": "^8.1.0",
32
+ "glob": "9.3.5",
33
33
  "inquirer": "^6.2.0",
34
34
  "lodash": "^4.17.15",
35
35
  "magicast": "^0.2.10",
@@ -160,6 +160,7 @@ function runNuxtWizardWithTelemetry(options) {
160
160
  return [4 /*yield*/, (0, sdk_setup_1.askDeploymentPlatform)()];
161
161
  case 13:
162
162
  deploymentPlatform = _b.sent();
163
+ Sentry.setTag('deployment-platform', deploymentPlatform);
163
164
  return [4 /*yield*/, (0, telemetry_1.traceStep)('configure-sdk', function () { return __awaiter(_this, void 0, void 0, function () {
164
165
  return __generator(this, function (_a) {
165
166
  switch (_a.label) {
@@ -1 +1 @@
1
- {"version":3,"file":"nuxt-wizard.js","sourceRoot":"","sources":["../../../src/nuxt/nuxt-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport { lt, minVersion } from 'semver';\nimport type { WizardOptions } from '../utils/types';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExampleComponent,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n addSDKModule,\n getNuxtConfig,\n createConfigFiles,\n addNuxtOverrides,\n askDeploymentPlatform,\n confirmReadImportDocs,\n} from './sdk-setup';\nimport {\n createExampleComponent,\n createExamplePage,\n supportsExamplePage,\n} from './sdk-example';\nimport { isNuxtV4 } from './utils';\n\nexport function runNuxtWizard(options: WizardOptions) {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'nuxt',\n wizardOptions: options,\n },\n () => runNuxtWizardWithTelemetry(options),\n );\n}\n\nexport async function runNuxtWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Nuxt Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, 'nuxt', 'Nuxt');\n\n const nuxtVersion = getPackageVersion('nuxt', packageJson);\n Sentry.setTag('nuxt-version', nuxtVersion);\n\n const minVer = minVersion(nuxtVersion || '0.0.0');\n\n if (!nuxtVersion || !minVer || lt(minVer, '3.7.0')) {\n clack.log.warn(\n \"It seems you're using a Nuxt version <3.7.0 which is not supported by Sentry.\\nWe recommend upgrading to the latest version before you continue.\",\n );\n const shouldContinue = await abortIfCancelled(\n clack.select({\n message: 'Do you want to continue anyway?',\n options: [\n {\n label: 'Yes, continue',\n hint: 'The SDK might not work correctly',\n value: true,\n },\n { label: \"No, I'll upgrade first\", value: false },\n ],\n }),\n );\n if (!shouldContinue) {\n await abort('Exiting Wizard', 0);\n return;\n }\n }\n\n const { authToken, selectedProject, selfHosted, sentryUrl } =\n await getOrAskForProjectData(options, 'javascript-nuxt');\n\n const packageManager = await getPackageManager();\n\n await addNuxtOverrides(packageJson, packageManager, minVer);\n\n const sdkAlreadyInstalled = hasPackageInstalled('@sentry/nuxt', packageJson);\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n await installPackage({\n packageName: '@sentry/nuxt',\n alreadyInstalled: sdkAlreadyInstalled,\n packageManager,\n });\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const nuxtConfig = await traceStep('load-nuxt-config', getNuxtConfig);\n\n const projectData = {\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n selfHosted,\n };\n\n const deploymentPlatform = await askDeploymentPlatform();\n\n await traceStep('configure-sdk', async () => {\n await addSDKModule(nuxtConfig, projectData, deploymentPlatform);\n await createConfigFiles(selectedProject.keys[0].dsn.public);\n });\n\n let shouldCreateExamplePage = false;\n let shouldCreateExampleButton = false;\n\n const isV4 = await isNuxtV4(nuxtConfig, nuxtVersion);\n const canCreateExamplePage = await supportsExamplePage(isV4);\n Sentry.setTag('supports-example-page-creation', canCreateExamplePage);\n\n if (canCreateExamplePage) {\n shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('create-example-page', async () =>\n createExamplePage(isV4, projectData),\n );\n }\n } else {\n shouldCreateExampleButton = await askShouldCreateExampleComponent();\n\n if (shouldCreateExampleButton) {\n await traceStep('create-example-component', async () =>\n createExampleComponent(isV4),\n );\n }\n }\n\n await runPrettierIfInstalled();\n\n await confirmReadImportDocs(deploymentPlatform);\n\n clack.outro(\n buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton),\n );\n}\n\nfunction buildOutroMessage(\n shouldCreateExamplePage: boolean,\n shouldCreateExampleButton: boolean,\n): string {\n let msg = chalk.green('\\nSuccessfully installed the Sentry Nuxt SDK!');\n\n if (shouldCreateExamplePage) {\n msg += `\\n\\nYou can validate your setup by visiting ${chalk.cyan(\n '\"/sentry-example-page\"',\n )}.`;\n }\n if (shouldCreateExampleButton) {\n msg += `\\n\\nYou can validate your setup by adding the ${chalk.cyan(\n '`SentryExampleButton`',\n )} component to a page and triggering it.`;\n }\n\n msg += `\\n\\nCheck out the SDK documentation for further configuration: ${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/',\n )}`;\n\n return msg;\n}\n"]}
1
+ {"version":3,"file":"nuxt-wizard.js","sourceRoot":"","sources":["../../../src/nuxt/nuxt-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport { lt, minVersion } from 'semver';\nimport type { WizardOptions } from '../utils/types';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExampleComponent,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n addSDKModule,\n getNuxtConfig,\n createConfigFiles,\n addNuxtOverrides,\n askDeploymentPlatform,\n confirmReadImportDocs,\n} from './sdk-setup';\nimport {\n createExampleComponent,\n createExamplePage,\n supportsExamplePage,\n} from './sdk-example';\nimport { isNuxtV4 } from './utils';\n\nexport function runNuxtWizard(options: WizardOptions) {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'nuxt',\n wizardOptions: options,\n },\n () => runNuxtWizardWithTelemetry(options),\n );\n}\n\nexport async function runNuxtWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Nuxt Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, 'nuxt', 'Nuxt');\n\n const nuxtVersion = getPackageVersion('nuxt', packageJson);\n Sentry.setTag('nuxt-version', nuxtVersion);\n\n const minVer = minVersion(nuxtVersion || '0.0.0');\n\n if (!nuxtVersion || !minVer || lt(minVer, '3.7.0')) {\n clack.log.warn(\n \"It seems you're using a Nuxt version <3.7.0 which is not supported by Sentry.\\nWe recommend upgrading to the latest version before you continue.\",\n );\n const shouldContinue = await abortIfCancelled(\n clack.select({\n message: 'Do you want to continue anyway?',\n options: [\n {\n label: 'Yes, continue',\n hint: 'The SDK might not work correctly',\n value: true,\n },\n { label: \"No, I'll upgrade first\", value: false },\n ],\n }),\n );\n if (!shouldContinue) {\n await abort('Exiting Wizard', 0);\n return;\n }\n }\n\n const { authToken, selectedProject, selfHosted, sentryUrl } =\n await getOrAskForProjectData(options, 'javascript-nuxt');\n\n const packageManager = await getPackageManager();\n\n await addNuxtOverrides(packageJson, packageManager, minVer);\n\n const sdkAlreadyInstalled = hasPackageInstalled('@sentry/nuxt', packageJson);\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n await installPackage({\n packageName: '@sentry/nuxt',\n alreadyInstalled: sdkAlreadyInstalled,\n packageManager,\n });\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const nuxtConfig = await traceStep('load-nuxt-config', getNuxtConfig);\n\n const projectData = {\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n selfHosted,\n };\n\n const deploymentPlatform = await askDeploymentPlatform();\n Sentry.setTag('deployment-platform', deploymentPlatform);\n\n await traceStep('configure-sdk', async () => {\n await addSDKModule(nuxtConfig, projectData, deploymentPlatform);\n await createConfigFiles(selectedProject.keys[0].dsn.public);\n });\n\n let shouldCreateExamplePage = false;\n let shouldCreateExampleButton = false;\n\n const isV4 = await isNuxtV4(nuxtConfig, nuxtVersion);\n const canCreateExamplePage = await supportsExamplePage(isV4);\n Sentry.setTag('supports-example-page-creation', canCreateExamplePage);\n\n if (canCreateExamplePage) {\n shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('create-example-page', async () =>\n createExamplePage(isV4, projectData),\n );\n }\n } else {\n shouldCreateExampleButton = await askShouldCreateExampleComponent();\n\n if (shouldCreateExampleButton) {\n await traceStep('create-example-component', async () =>\n createExampleComponent(isV4),\n );\n }\n }\n\n await runPrettierIfInstalled();\n\n await confirmReadImportDocs(deploymentPlatform);\n\n clack.outro(\n buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton),\n );\n}\n\nfunction buildOutroMessage(\n shouldCreateExamplePage: boolean,\n shouldCreateExampleButton: boolean,\n): string {\n let msg = chalk.green('\\nSuccessfully installed the Sentry Nuxt SDK!');\n\n if (shouldCreateExamplePage) {\n msg += `\\n\\nYou can validate your setup by visiting ${chalk.cyan(\n '\"/sentry-example-page\"',\n )}.`;\n }\n if (shouldCreateExampleButton) {\n msg += `\\n\\nYou can validate your setup by adding the ${chalk.cyan(\n '`SentryExampleButton`',\n )} component to a page and triggering it.`;\n }\n\n msg += `\\n\\nCheck out the SDK documentation for further configuration: ${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/',\n )}`;\n\n return msg;\n}\n"]}
@@ -375,6 +375,7 @@ function confirmReadImportDocs(deploymentPlatform) {
375
375
  return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.confirm({ message: 'Do you want to open the docs?' }))];
376
376
  case 1:
377
377
  shouldOpenDocs = _a.sent();
378
+ Sentry.setTag('init-with-import-docs-opened', shouldOpenDocs);
378
379
  if (shouldOpenDocs) {
379
380
  (0, clack_utils_1.opn)(docsUrl, { wait: false }).catch(function () {
380
381
  // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/nuxt/sdk-setup.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 * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport fs from 'fs';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { loadFile, generateCode } from 'magicast';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { addNuxtModule } from 'magicast/helpers';\nimport path from 'path';\nimport {\n getConfigBody,\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from './templates';\nimport {\n abortIfCancelled,\n askShouldAddPackageOverride,\n askShouldInstallPackage,\n featureSelectionPrompt,\n installPackage,\n isUsingTypeScript,\n opn,\n} from '../utils/clack-utils';\nimport { traceStep } from '../telemetry';\nimport { lt, SemVer } from 'semver';\nimport { PackageManager, PNPM } from '../utils/package-manager';\nimport { hasPackageInstalled, PackageDotJson } from '../utils/package-json';\nimport { deploymentPlatforms, DeploymentPlatform } from './types';\n\nconst possibleNuxtConfig = [\n 'nuxt.config.js',\n 'nuxt.config.mjs',\n 'nuxt.config.cjs',\n 'nuxt.config.ts',\n 'nuxt.config.mts',\n 'nuxt.config.cts',\n];\n\nexport async function getNuxtConfig(): Promise<string> {\n let configFile = possibleNuxtConfig.find((fileName) =>\n fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!configFile) {\n clack.log.info('No Nuxt config file found, creating a new one.');\n Sentry.setTag('nuxt-config-strategy', 'create');\n // nuxt recommends its config to be .ts by default\n configFile = 'nuxt.config.ts';\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFile),\n getDefaultNuxtConfig(),\n { encoding: 'utf-8', flag: 'w' },\n );\n\n clack.log.success(`Created ${chalk.cyan('nuxt.config.ts')}.`);\n }\n\n return path.join(process.cwd(), configFile);\n}\n\nexport async function askDeploymentPlatform(): Promise<\n DeploymentPlatform | symbol\n> {\n return await abortIfCancelled(\n clack.select({\n message: 'Please select your deployment platform.',\n options: deploymentPlatforms.map((platform) => ({\n value: platform,\n label: `${platform.charAt(0).toUpperCase()}${platform.slice(1)}`,\n })),\n }),\n );\n}\n\nexport async function addSDKModule(\n config: string,\n options: { org: string; project: string; url: string; selfHosted: boolean },\n deploymentPlatform: DeploymentPlatform | symbol,\n): Promise<void> {\n const shouldTopLevelImport =\n deploymentPlatform === 'vercel' || deploymentPlatform === 'netlify';\n\n if (shouldTopLevelImport) {\n clack.log.warn(\n `Sentry needs to be initialized before the application starts. ${chalk.cyan(\n `${deploymentPlatform\n .charAt(0)\n .toUpperCase()}${deploymentPlatform.slice(1)}`,\n )} does not support this yet.\\n\\nWe will inject the Sentry server-side config at the top of your Nuxt server entry file instead.\\n\\nThis comes with some restrictions, for more info see:\\n\\n${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/install/top-level-import/',\n )} `,\n );\n }\n\n try {\n const mod = await loadFile(config);\n\n addNuxtModule(mod, '@sentry/nuxt/module', 'sentry', {\n sourceMapsUploadOptions: {\n org: options.org,\n project: options.project,\n ...(options.selfHosted && { url: options.url }),\n },\n ...(shouldTopLevelImport && {\n autoInjectServerSentry: 'top-level-import',\n }),\n });\n addNuxtModule(mod, '@sentry/nuxt/module', 'sourcemap', {\n client: 'hidden',\n });\n\n const { code } = generateCode(mod);\n\n await fs.promises.writeFile(config, code, { encoding: 'utf-8', flag: 'w' });\n\n clack.log.success(\n `Added Sentry Nuxt Module to ${chalk.cyan(path.basename(config))}.`,\n );\n } catch (e: unknown) {\n clack.log.error(\n 'Error while adding the Sentry Nuxt Module to the Nuxt config.',\n );\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n Sentry.captureException(\n 'Error while setting up the Nuxt Module in nuxt config',\n );\n\n clack.log.warn(\n `Please add the following settings to ${chalk.cyan(\n path.basename(config),\n )}:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n `\\n\\n${getNuxtModuleFallbackTemplate(options, shouldTopLevelImport)}\\n\\n`,\n );\n }\n}\n\nexport async function createConfigFiles(dsn: string) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(dsn, configVariant, selectedFeatures),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created new ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n } else {\n clack.log.info(\n `Okay, here are the changes your ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )} should contain:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n '\\n\\n ' +\n getConfigBody(dsn, configVariant, selectedFeatures) +\n '\\n\\n',\n );\n }\n });\n }\n}\n\nexport async function addNuxtOverrides(\n packageJson: PackageDotJson,\n packageManager: PackageManager,\n nuxtMinVer: SemVer | null,\n) {\n const isPNPM = PNPM.detect();\n\n const overrides = [\n {\n pkgName: '@vercel/nft',\n pkgVersion: '^0.27.4',\n },\n ...(nuxtMinVer && lt(nuxtMinVer, '3.14.0')\n ? [{ pkgName: 'ofetch', pkgVersion: '^1.4.0' }]\n : []),\n ];\n\n clack.log.warn(\n `To ensure Sentry can properly instrument your code it needs to add version overrides for some Nuxt dependencies${\n isPNPM ? ` and install ${chalk.cyan('import-in-the-middle')}.` : '.'\n }\\n\\nFor more info see: ${chalk.underline(\n 'https://github.com/getsentry/sentry-javascript/issues/14514',\n )}${\n isPNPM\n ? `\\n\\nand ${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/troubleshooting/#pnpm-dev-cannot-find-package-import-in-the-middle',\n )}`\n : ''\n }`,\n );\n\n for (const { pkgName, pkgVersion } of overrides) {\n const shouldAddOverride = await askShouldAddPackageOverride(\n pkgName,\n pkgVersion,\n );\n\n if (shouldAddOverride) {\n await packageManager.addOverride(pkgName, pkgVersion);\n }\n }\n\n if (PNPM.detect()) {\n // For pnpm, we want to install iitm\n // See: https://docs.sentry.io/platforms/javascript/guides/nuxt/troubleshooting/#pnpm-dev-cannot-find-package-import-in-the-middle\n const iitmAlreadyInstalled = hasPackageInstalled(\n 'import-in-the-middle',\n packageJson,\n );\n Sentry.setTag('iitm-already-installed', iitmAlreadyInstalled);\n\n const shouldInstallIitm = await askShouldInstallPackage(\n 'import-in-the-middle',\n );\n\n if (shouldInstallIitm) {\n await installPackage({\n packageName: 'import-in-the-middle',\n alreadyInstalled: iitmAlreadyInstalled,\n packageManager,\n });\n }\n }\n}\n\nexport async function confirmReadImportDocs(\n deploymentPlatform: DeploymentPlatform | symbol,\n) {\n const canImportSentryServerConfigFile =\n deploymentPlatform !== 'vercel' && deploymentPlatform !== 'netlify';\n\n if (!canImportSentryServerConfigFile) {\n // Nothing to do, users have been set up with automatic top-level-import instead\n return;\n }\n\n const docsUrl =\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/install/cli-import/#initializing-sentry-with---import';\n\n clack.log.info(\n `After building your Nuxt app, you need to ${chalk.bold(\n '--import',\n )} the Sentry server config file when running your app.\\n\\nFor more info, see:\\n\\n${chalk.underline(\n docsUrl,\n )}`,\n );\n\n const shouldOpenDocs = await abortIfCancelled(\n clack.confirm({ message: 'Do you want to open the docs?' }),\n );\n\n if (shouldOpenDocs) {\n opn(docsUrl, { wait: false }).catch(() => {\n // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here\n });\n }\n}\n"]}
1
+ {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/nuxt/sdk-setup.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 * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport fs from 'fs';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { loadFile, generateCode } from 'magicast';\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { addNuxtModule } from 'magicast/helpers';\nimport path from 'path';\nimport {\n getConfigBody,\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from './templates';\nimport {\n abortIfCancelled,\n askShouldAddPackageOverride,\n askShouldInstallPackage,\n featureSelectionPrompt,\n installPackage,\n isUsingTypeScript,\n opn,\n} from '../utils/clack-utils';\nimport { traceStep } from '../telemetry';\nimport { lt, SemVer } from 'semver';\nimport { PackageManager, PNPM } from '../utils/package-manager';\nimport { hasPackageInstalled, PackageDotJson } from '../utils/package-json';\nimport { deploymentPlatforms, DeploymentPlatform } from './types';\n\nconst possibleNuxtConfig = [\n 'nuxt.config.js',\n 'nuxt.config.mjs',\n 'nuxt.config.cjs',\n 'nuxt.config.ts',\n 'nuxt.config.mts',\n 'nuxt.config.cts',\n];\n\nexport async function getNuxtConfig(): Promise<string> {\n let configFile = possibleNuxtConfig.find((fileName) =>\n fs.existsSync(path.join(process.cwd(), fileName)),\n );\n\n if (!configFile) {\n clack.log.info('No Nuxt config file found, creating a new one.');\n Sentry.setTag('nuxt-config-strategy', 'create');\n // nuxt recommends its config to be .ts by default\n configFile = 'nuxt.config.ts';\n\n await fs.promises.writeFile(\n path.join(process.cwd(), configFile),\n getDefaultNuxtConfig(),\n { encoding: 'utf-8', flag: 'w' },\n );\n\n clack.log.success(`Created ${chalk.cyan('nuxt.config.ts')}.`);\n }\n\n return path.join(process.cwd(), configFile);\n}\n\nexport async function askDeploymentPlatform(): Promise<\n DeploymentPlatform | symbol\n> {\n return await abortIfCancelled(\n clack.select({\n message: 'Please select your deployment platform.',\n options: deploymentPlatforms.map((platform) => ({\n value: platform,\n label: `${platform.charAt(0).toUpperCase()}${platform.slice(1)}`,\n })),\n }),\n );\n}\n\nexport async function addSDKModule(\n config: string,\n options: { org: string; project: string; url: string; selfHosted: boolean },\n deploymentPlatform: DeploymentPlatform | symbol,\n): Promise<void> {\n const shouldTopLevelImport =\n deploymentPlatform === 'vercel' || deploymentPlatform === 'netlify';\n\n if (shouldTopLevelImport) {\n clack.log.warn(\n `Sentry needs to be initialized before the application starts. ${chalk.cyan(\n `${deploymentPlatform\n .charAt(0)\n .toUpperCase()}${deploymentPlatform.slice(1)}`,\n )} does not support this yet.\\n\\nWe will inject the Sentry server-side config at the top of your Nuxt server entry file instead.\\n\\nThis comes with some restrictions, for more info see:\\n\\n${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/install/top-level-import/',\n )} `,\n );\n }\n\n try {\n const mod = await loadFile(config);\n\n addNuxtModule(mod, '@sentry/nuxt/module', 'sentry', {\n sourceMapsUploadOptions: {\n org: options.org,\n project: options.project,\n ...(options.selfHosted && { url: options.url }),\n },\n ...(shouldTopLevelImport && {\n autoInjectServerSentry: 'top-level-import',\n }),\n });\n addNuxtModule(mod, '@sentry/nuxt/module', 'sourcemap', {\n client: 'hidden',\n });\n\n const { code } = generateCode(mod);\n\n await fs.promises.writeFile(config, code, { encoding: 'utf-8', flag: 'w' });\n\n clack.log.success(\n `Added Sentry Nuxt Module to ${chalk.cyan(path.basename(config))}.`,\n );\n } catch (e: unknown) {\n clack.log.error(\n 'Error while adding the Sentry Nuxt Module to the Nuxt config.',\n );\n clack.log.info(\n chalk.dim(\n typeof e === 'object' && e != null && 'toString' in e\n ? e.toString()\n : typeof e === 'string'\n ? e\n : 'Unknown error',\n ),\n );\n Sentry.captureException(\n 'Error while setting up the Nuxt Module in nuxt config',\n );\n\n clack.log.warn(\n `Please add the following settings to ${chalk.cyan(\n path.basename(config),\n )}:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n `\\n\\n${getNuxtModuleFallbackTemplate(options, shouldTopLevelImport)}\\n\\n`,\n );\n }\n}\n\nexport async function createConfigFiles(dsn: string) {\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Sentry Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n ] as const);\n\n const typeScriptDetected = isUsingTypeScript();\n\n const configVariants = ['server', 'client'] as const;\n\n for (const configVariant of configVariants) {\n await traceStep(`create-sentry-${configVariant}-config`, async () => {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n Sentry.setTag(\n `overwrite-${configVariant}-config`,\n overwriteExistingConfigs,\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.cyan(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), typeScriptDetected ? tsConfig : jsConfig),\n getSentryConfigContents(dsn, configVariant, selectedFeatures),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created new ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )}.`,\n );\n Sentry.setTag(`created-${configVariant}-config`, true);\n } else {\n clack.log.info(\n `Okay, here are the changes your ${chalk.cyan(\n typeScriptDetected ? tsConfig : jsConfig,\n )} should contain:`,\n );\n // eslint-disable-next-line no-console\n console.log(\n '\\n\\n ' +\n getConfigBody(dsn, configVariant, selectedFeatures) +\n '\\n\\n',\n );\n }\n });\n }\n}\n\nexport async function addNuxtOverrides(\n packageJson: PackageDotJson,\n packageManager: PackageManager,\n nuxtMinVer: SemVer | null,\n) {\n const isPNPM = PNPM.detect();\n\n const overrides = [\n {\n pkgName: '@vercel/nft',\n pkgVersion: '^0.27.4',\n },\n ...(nuxtMinVer && lt(nuxtMinVer, '3.14.0')\n ? [{ pkgName: 'ofetch', pkgVersion: '^1.4.0' }]\n : []),\n ];\n\n clack.log.warn(\n `To ensure Sentry can properly instrument your code it needs to add version overrides for some Nuxt dependencies${\n isPNPM ? ` and install ${chalk.cyan('import-in-the-middle')}.` : '.'\n }\\n\\nFor more info see: ${chalk.underline(\n 'https://github.com/getsentry/sentry-javascript/issues/14514',\n )}${\n isPNPM\n ? `\\n\\nand ${chalk.underline(\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/troubleshooting/#pnpm-dev-cannot-find-package-import-in-the-middle',\n )}`\n : ''\n }`,\n );\n\n for (const { pkgName, pkgVersion } of overrides) {\n const shouldAddOverride = await askShouldAddPackageOverride(\n pkgName,\n pkgVersion,\n );\n\n if (shouldAddOverride) {\n await packageManager.addOverride(pkgName, pkgVersion);\n }\n }\n\n if (PNPM.detect()) {\n // For pnpm, we want to install iitm\n // See: https://docs.sentry.io/platforms/javascript/guides/nuxt/troubleshooting/#pnpm-dev-cannot-find-package-import-in-the-middle\n const iitmAlreadyInstalled = hasPackageInstalled(\n 'import-in-the-middle',\n packageJson,\n );\n Sentry.setTag('iitm-already-installed', iitmAlreadyInstalled);\n\n const shouldInstallIitm = await askShouldInstallPackage(\n 'import-in-the-middle',\n );\n\n if (shouldInstallIitm) {\n await installPackage({\n packageName: 'import-in-the-middle',\n alreadyInstalled: iitmAlreadyInstalled,\n packageManager,\n });\n }\n }\n}\n\nexport async function confirmReadImportDocs(\n deploymentPlatform: DeploymentPlatform | symbol,\n) {\n const canImportSentryServerConfigFile =\n deploymentPlatform !== 'vercel' && deploymentPlatform !== 'netlify';\n\n if (!canImportSentryServerConfigFile) {\n // Nothing to do, users have been set up with automatic top-level-import instead\n return;\n }\n\n const docsUrl =\n 'https://docs.sentry.io/platforms/javascript/guides/nuxt/install/cli-import/#initializing-sentry-with---import';\n\n clack.log.info(\n `After building your Nuxt app, you need to ${chalk.bold(\n '--import',\n )} the Sentry server config file when running your app.\\n\\nFor more info, see:\\n\\n${chalk.underline(\n docsUrl,\n )}`,\n );\n\n const shouldOpenDocs = await abortIfCancelled(\n clack.confirm({ message: 'Do you want to open the docs?' }),\n );\n\n Sentry.setTag('init-with-import-docs-opened', shouldOpenDocs);\n\n if (shouldOpenDocs) {\n opn(docsUrl, { wait: false }).catch(() => {\n // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here\n });\n }\n}\n"]}
@@ -137,7 +137,7 @@ function getSentryInitColoredCodeSnippet(dsn) {
137
137
  }
138
138
  exports.getSentryInitColoredCodeSnippet = getSentryInitColoredCodeSnippet;
139
139
  function getSentryInitPlainTextSnippet(dsn) {
140
- return "import * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: '".concat(dsn, "',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // enableSpotlight: __DEV__,\n});");
140
+ return "import * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: '".concat(dsn, "',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: __DEV__,\n});");
141
141
  }
142
142
  exports.getSentryInitPlainTextSnippet = getSentryInitPlainTextSnippet;
143
143
  //# sourceMappingURL=javascript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/react-native/javascript.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as path from 'path';\nimport * as process from 'process';\nimport * as fs from 'fs';\nimport * as Sentry from '@sentry/node';\n\nimport { traceStep } from '../telemetry';\nimport {\n makeCodeSnippet,\n showCopyPasteInstructions,\n} from '../utils/clack-utils';\nimport { getFirstMatchedPath } from './glob';\nimport { RN_SDK_PACKAGE } from './react-native-wizard';\n\nexport async function addSentryInit({ dsn }: { dsn: string }) {\n const prefixGlob = '{.,./src,./app}';\n const suffixGlob = '@(j|t|cj|mj)s?(x)';\n const universalGlob = `@(App|_layout).${suffixGlob}`;\n const jsFileGlob = `${prefixGlob}/+(${universalGlob})`;\n const jsPath = traceStep('find-app-js-file', () =>\n getFirstMatchedPath(jsFileGlob),\n );\n Sentry.setTag('app-js-file-status', jsPath ? 'found' : 'not-found');\n if (!jsPath) {\n clack.log.warn(\n `Could not find main App file. Place the following code snippet close to the Apps Root component.`,\n );\n await showCopyPasteInstructions(\n 'App.js or _layout.tsx',\n getSentryInitColoredCodeSnippet(dsn),\n 'This ensures the Sentry SDK is ready to capture errors.',\n );\n return;\n }\n const jsRelativePath = path.relative(process.cwd(), jsPath);\n\n const js = fs.readFileSync(jsPath, 'utf-8');\n const includesSentry = doesJsCodeIncludeSdkSentryImport(js, {\n sdkPackageName: RN_SDK_PACKAGE,\n });\n if (includesSentry) {\n Sentry.setTag('app-js-file-status', 'already-includes-sentry');\n clack.log.warn(\n `${chalk.cyan(\n jsRelativePath,\n )} already includes Sentry. We wont't add it again.`,\n );\n return;\n }\n\n traceStep('add-sentry-init', () => {\n const newContent = addSentryInitWithSdkImport(js, { dsn });\n\n clack.log.success(\n `Added ${chalk.cyan('Sentry.init')} to ${chalk.cyan(jsRelativePath)}.`,\n );\n\n fs.writeFileSync(jsPath, newContent, 'utf-8');\n });\n\n Sentry.setTag('app-js-file-status', 'added-sentry-init');\n clack.log.success(\n chalk.green(`${chalk.cyan(jsRelativePath)} changes saved.`),\n );\n}\n\nexport function addSentryInitWithSdkImport(\n js: string,\n { dsn }: { dsn: string },\n): string {\n return js.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n (match: string) => `${match}\n${getSentryInitPlainTextSnippet(dsn)}`,\n );\n}\n\nexport function doesJsCodeIncludeSdkSentryImport(\n js: string,\n { sdkPackageName }: { sdkPackageName: string },\n): boolean {\n return !!js.match(sdkPackageName);\n}\n\nexport function getSentryInitColoredCodeSnippet(dsn: string) {\n return makeCodeSnippet(true, (_unchanged, plus, _minus) => {\n return plus(getSentryInitPlainTextSnippet(dsn));\n });\n}\n\nexport function getSentryInitPlainTextSnippet(dsn: string) {\n return `import * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: '${dsn}',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // enableSpotlight: __DEV__,\n});`;\n}\n"]}
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/react-native/javascript.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as path from 'path';\nimport * as process from 'process';\nimport * as fs from 'fs';\nimport * as Sentry from '@sentry/node';\n\nimport { traceStep } from '../telemetry';\nimport {\n makeCodeSnippet,\n showCopyPasteInstructions,\n} from '../utils/clack-utils';\nimport { getFirstMatchedPath } from './glob';\nimport { RN_SDK_PACKAGE } from './react-native-wizard';\n\nexport async function addSentryInit({ dsn }: { dsn: string }) {\n const prefixGlob = '{.,./src,./app}';\n const suffixGlob = '@(j|t|cj|mj)s?(x)';\n const universalGlob = `@(App|_layout).${suffixGlob}`;\n const jsFileGlob = `${prefixGlob}/+(${universalGlob})`;\n const jsPath = traceStep('find-app-js-file', () =>\n getFirstMatchedPath(jsFileGlob),\n );\n Sentry.setTag('app-js-file-status', jsPath ? 'found' : 'not-found');\n if (!jsPath) {\n clack.log.warn(\n `Could not find main App file. Place the following code snippet close to the Apps Root component.`,\n );\n await showCopyPasteInstructions(\n 'App.js or _layout.tsx',\n getSentryInitColoredCodeSnippet(dsn),\n 'This ensures the Sentry SDK is ready to capture errors.',\n );\n return;\n }\n const jsRelativePath = path.relative(process.cwd(), jsPath);\n\n const js = fs.readFileSync(jsPath, 'utf-8');\n const includesSentry = doesJsCodeIncludeSdkSentryImport(js, {\n sdkPackageName: RN_SDK_PACKAGE,\n });\n if (includesSentry) {\n Sentry.setTag('app-js-file-status', 'already-includes-sentry');\n clack.log.warn(\n `${chalk.cyan(\n jsRelativePath,\n )} already includes Sentry. We wont't add it again.`,\n );\n return;\n }\n\n traceStep('add-sentry-init', () => {\n const newContent = addSentryInitWithSdkImport(js, { dsn });\n\n clack.log.success(\n `Added ${chalk.cyan('Sentry.init')} to ${chalk.cyan(jsRelativePath)}.`,\n );\n\n fs.writeFileSync(jsPath, newContent, 'utf-8');\n });\n\n Sentry.setTag('app-js-file-status', 'added-sentry-init');\n clack.log.success(\n chalk.green(`${chalk.cyan(jsRelativePath)} changes saved.`),\n );\n}\n\nexport function addSentryInitWithSdkImport(\n js: string,\n { dsn }: { dsn: string },\n): string {\n return js.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n (match: string) => `${match}\n${getSentryInitPlainTextSnippet(dsn)}`,\n );\n}\n\nexport function doesJsCodeIncludeSdkSentryImport(\n js: string,\n { sdkPackageName }: { sdkPackageName: string },\n): boolean {\n return !!js.match(sdkPackageName);\n}\n\nexport function getSentryInitColoredCodeSnippet(dsn: string) {\n return makeCodeSnippet(true, (_unchanged, plus, _minus) => {\n return plus(getSentryInitPlainTextSnippet(dsn));\n });\n}\n\nexport function getSentryInitPlainTextSnippet(dsn: string) {\n return `import * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: '${dsn}',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: __DEV__,\n});`;\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { CliSetupConfigContent } from '../utils/clack-utils';
2
2
  import { ReactNativeWizardOptions } from './options';
3
3
  export declare const RN_SDK_PACKAGE = "@sentry/react-native";
4
+ export declare const RN_SDK_SUPPORTED_RANGE = ">=5.0.0";
4
5
  export declare const RN_PACKAGE = "react-native";
5
6
  export declare const RN_HUMAN_NAME = "React Native";
6
7
  export declare const SUPPORTED_RN_RANGE = ">=0.69.0";
@@ -9,16 +10,16 @@ export declare const SUPPORTED_EXPO_RANGE = ">=50.0.0";
9
10
  * The following SDK version ship with bundled Xcode scripts
10
11
  * which simplifies the Xcode Build Phases setup.
11
12
  */
12
- export declare const SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = ">=5.11.0";
13
+ export declare const XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = ">=5.11.0";
13
14
  /**
14
15
  * The following SDK version ship with Sentry Metro plugin
15
16
  */
16
- export declare const SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = ">=5.11.0";
17
+ export declare const SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = ">=5.11.0";
17
18
  /**
18
19
  * The following SDK version ship with bundled Expo plugin
19
20
  */
20
- export declare const SDK_EXPO_SUPPORTED_SDK_RANGE = ">=5.16.0";
21
- export declare const SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = ">=5.17.0";
21
+ export declare const EXPO_SUPPORTED_SDK_RANGE = ">=5.16.0";
22
+ export declare const METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = ">=5.17.0";
22
23
  export type RNCliSetupConfigContent = Pick<Required<CliSetupConfigContent>, 'authToken' | 'org' | 'project' | 'url'>;
23
24
  export declare function runReactNativeWizard(params: ReactNativeWizardOptions): Promise<void>;
24
25
  export declare function runReactNativeWizardWithTelemetry(options: ReactNativeWizardOptions): Promise<void>;
@@ -73,7 +73,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
73
73
  return (mod && mod.__esModule) ? mod : { "default": mod };
74
74
  };
75
75
  Object.defineProperty(exports, "__esModule", { value: true });
76
- exports.runReactNativeWizardWithTelemetry = exports.runReactNativeWizard = exports.SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = exports.SDK_EXPO_SUPPORTED_SDK_RANGE = exports.SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = exports.SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = exports.SUPPORTED_EXPO_RANGE = exports.SUPPORTED_RN_RANGE = exports.RN_HUMAN_NAME = exports.RN_PACKAGE = exports.RN_SDK_PACKAGE = void 0;
76
+ exports.runReactNativeWizardWithTelemetry = exports.runReactNativeWizard = exports.METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = exports.EXPO_SUPPORTED_SDK_RANGE = exports.SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = exports.XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = exports.SUPPORTED_EXPO_RANGE = exports.SUPPORTED_RN_RANGE = exports.RN_HUMAN_NAME = exports.RN_PACKAGE = exports.RN_SDK_SUPPORTED_RANGE = exports.RN_SDK_PACKAGE = void 0;
77
77
  /* eslint-disable max-lines */
78
78
  // @ts-ignore - clack is ESM and TS complains about that. It works though
79
79
  var prompts_1 = __importDefault(require("@clack/prompts"));
@@ -99,6 +99,7 @@ var expo_env_file_1 = require("./expo-env-file");
99
99
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
100
100
  var xcode = require('xcode');
101
101
  exports.RN_SDK_PACKAGE = '@sentry/react-native';
102
+ exports.RN_SDK_SUPPORTED_RANGE = '>=5.0.0';
102
103
  exports.RN_PACKAGE = 'react-native';
103
104
  exports.RN_HUMAN_NAME = 'React Native';
104
105
  exports.SUPPORTED_RN_RANGE = '>=0.69.0';
@@ -107,17 +108,17 @@ exports.SUPPORTED_EXPO_RANGE = '>=50.0.0';
107
108
  * The following SDK version ship with bundled Xcode scripts
108
109
  * which simplifies the Xcode Build Phases setup.
109
110
  */
110
- exports.SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';
111
+ exports.XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';
111
112
  /**
112
113
  * The following SDK version ship with Sentry Metro plugin
113
114
  */
114
- exports.SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';
115
+ exports.SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';
115
116
  /**
116
117
  * The following SDK version ship with bundled Expo plugin
117
118
  */
118
- exports.SDK_EXPO_SUPPORTED_SDK_RANGE = ">=5.16.0";
119
+ exports.EXPO_SUPPORTED_SDK_RANGE = ">=5.16.0";
119
120
  // The following SDK version shipped `withSentryConfig`
120
- exports.SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = '>=5.17.0';
121
+ exports.METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = '>=5.17.0';
121
122
  function runReactNativeWizard(params) {
122
123
  return __awaiter(this, void 0, void 0, function () {
123
124
  return __generator(this, function (_a) {
@@ -132,7 +133,7 @@ function runReactNativeWizard(params) {
132
133
  exports.runReactNativeWizard = runReactNativeWizard;
133
134
  function runReactNativeWizardWithTelemetry(options) {
134
135
  return __awaiter(this, void 0, void 0, function () {
135
- var packageJson, hasInstalled, rnVersion, sdkVersion, _a, _b, expoVersion, isExpo, _c, selectedProject, authToken, sentryUrl, orgSlug, projectSlug, projectId, cliConfig, confirmedFirstException;
136
+ var packageJson, hasInstalled, rnVersion, sdkVersion, _a, _b, continueWithoutSdk, expoVersion, isExpo, _c, selectedProject, authToken, sentryUrl, orgSlug, projectSlug, projectId, cliConfig, confirmedFirstException;
136
137
  return __generator(this, function (_d) {
137
138
  switch (_d.label) {
138
139
  case 0:
@@ -183,17 +184,40 @@ function runReactNativeWizardWithTelemetry(options) {
183
184
  return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
184
185
  case 7:
185
186
  sdkVersion = _a.apply(void 0, _b.concat([_d.sent()]));
187
+ if (!sdkVersion) return [3 /*break*/, 9];
188
+ return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfPackageVersionNotSupported)({
189
+ packageName: 'Sentry React Native SDK',
190
+ packageVersion: sdkVersion,
191
+ packageId: exports.RN_SDK_PACKAGE,
192
+ acceptableVersions: exports.RN_SDK_SUPPORTED_RANGE,
193
+ note: "Please upgrade to ".concat(exports.RN_SDK_SUPPORTED_RANGE, " to continue with the wizard in this project."),
194
+ })];
195
+ case 8:
196
+ _d.sent();
197
+ return [3 /*break*/, 12];
198
+ case 9: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.confirm({
199
+ message: 'Could not detect Sentry React Native SDK version. Do you want to continue anyway?',
200
+ }))];
201
+ case 10:
202
+ continueWithoutSdk = _d.sent();
203
+ if (!!continueWithoutSdk) return [3 /*break*/, 12];
204
+ return [4 /*yield*/, (0, clack_utils_1.abort)(undefined, 0)];
205
+ case 11:
206
+ _d.sent();
207
+ _d.label = 12;
208
+ case 12:
209
+ Sentry.setTag("detected-sentry-react-native-sdk-version", sdkVersion);
186
210
  expoVersion = (0, package_json_1.getPackageVersion)('expo', packageJson);
187
211
  isExpo = !!expoVersion;
188
- if (!(expoVersion && sdkVersion)) return [3 /*break*/, 10];
212
+ if (!(expoVersion && sdkVersion)) return [3 /*break*/, 15];
189
213
  return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfPackageVersionNotSupported)({
190
214
  packageName: 'Sentry React Native SDK',
191
215
  packageVersion: sdkVersion,
192
216
  packageId: exports.RN_SDK_PACKAGE,
193
- acceptableVersions: exports.SDK_EXPO_SUPPORTED_SDK_RANGE,
194
- note: "Please upgrade to ".concat(exports.SDK_EXPO_SUPPORTED_SDK_RANGE, " to continue with the wizard in this Expo project."),
217
+ acceptableVersions: exports.EXPO_SUPPORTED_SDK_RANGE,
218
+ note: "Please upgrade to ".concat(exports.EXPO_SUPPORTED_SDK_RANGE, " to continue with the wizard in this Expo project."),
195
219
  })];
196
- case 8:
220
+ case 13:
197
221
  _d.sent();
198
222
  return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfPackageVersionNotSupported)({
199
223
  packageName: 'Expo SDK',
@@ -202,11 +226,11 @@ function runReactNativeWizardWithTelemetry(options) {
202
226
  acceptableVersions: exports.SUPPORTED_EXPO_RANGE,
203
227
  note: "Please upgrade to ".concat(exports.SUPPORTED_EXPO_RANGE, " to continue with the wizard in this Expo project."),
204
228
  })];
205
- case 9:
229
+ case 14:
206
230
  _d.sent();
207
- _d.label = 10;
208
- case 10: return [4 /*yield*/, (0, clack_utils_1.getOrAskForProjectData)(options, 'react-native')];
209
- case 11:
231
+ _d.label = 15;
232
+ case 15: return [4 /*yield*/, (0, clack_utils_1.getOrAskForProjectData)(options, 'react-native')];
233
+ case 16:
210
234
  _c = _d.sent(), selectedProject = _c.selectedProject, authToken = _c.authToken, sentryUrl = _c.sentryUrl;
211
235
  orgSlug = selectedProject.organization.slug;
212
236
  projectSlug = selectedProject.slug;
@@ -220,51 +244,51 @@ function runReactNativeWizardWithTelemetry(options) {
220
244
  return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-app-js', function () {
221
245
  return (0, javascript_1.addSentryInit)({ dsn: selectedProject.keys[0].dsn.public });
222
246
  })];
223
- case 12:
247
+ case 17:
224
248
  _d.sent();
225
- if (!isExpo) return [3 /*break*/, 15];
249
+ if (!isExpo) return [3 /*break*/, 20];
226
250
  return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-expo-app-config', function () {
227
251
  return (0, expo_1.patchExpoAppConfig)(cliConfig);
228
252
  })];
229
- case 13:
253
+ case 18:
230
254
  _d.sent();
231
255
  return [4 /*yield*/, (0, telemetry_1.traceStep)('add-expo-env-local', function () { return (0, expo_env_file_1.addExpoEnvLocal)(cliConfig); })];
232
- case 14:
256
+ case 19:
233
257
  _d.sent();
234
- _d.label = 15;
235
- case 15:
236
- if (!isExpo) return [3 /*break*/, 17];
258
+ _d.label = 20;
259
+ case 20:
260
+ if (!isExpo) return [3 /*break*/, 22];
237
261
  return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-metro-config', expo_metro_1.addSentryToExpoMetroConfig)];
238
- case 16:
262
+ case 21:
239
263
  _d.sent();
240
- return [3 /*break*/, 19];
241
- case 17: return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-metro-config', function () {
264
+ return [3 /*break*/, 24];
265
+ case 22: return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-metro-config', function () {
242
266
  return addSentryToMetroConfig({ sdkVersion: sdkVersion });
243
267
  })];
244
- case 18:
268
+ case 23:
245
269
  _d.sent();
246
- _d.label = 19;
247
- case 19:
248
- if (!fs.existsSync('ios')) return [3 /*break*/, 21];
270
+ _d.label = 24;
271
+ case 24:
272
+ if (!fs.existsSync('ios')) return [3 /*break*/, 26];
249
273
  Sentry.setTag('patch-ios', true);
250
274
  return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-xcode-files', function () {
251
275
  return patchXcodeFiles(cliConfig, { sdkVersion: sdkVersion });
252
276
  })];
253
- case 20:
277
+ case 25:
254
278
  _d.sent();
255
- _d.label = 21;
256
- case 21:
257
- if (!fs.existsSync('android')) return [3 /*break*/, 23];
279
+ _d.label = 26;
280
+ case 26:
281
+ if (!fs.existsSync('android')) return [3 /*break*/, 28];
258
282
  Sentry.setTag('patch-android', true);
259
283
  return [4 /*yield*/, (0, telemetry_1.traceStep)('patch-android-files', function () { return patchAndroidFiles(cliConfig); })];
260
- case 22:
284
+ case 27:
261
285
  _d.sent();
262
- _d.label = 23;
263
- case 23: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
264
- case 24:
286
+ _d.label = 28;
287
+ case 28: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
288
+ case 29:
265
289
  _d.sent();
266
290
  return [4 /*yield*/, confirmFirstSentryException(sentryUrl, orgSlug, projectId)];
267
- case 25:
291
+ case 30:
268
292
  confirmedFirstException = _d.sent();
269
293
  Sentry.setTag('user-confirmed-first-error', confirmedFirstException);
270
294
  if (confirmedFirstException) {
@@ -284,7 +308,7 @@ function addSentryToMetroConfig(_a) {
284
308
  if (sdkVersion &&
285
309
  (0, semver_1.fulfillsVersionRange)({
286
310
  version: sdkVersion,
287
- acceptableVersions: exports.SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE,
311
+ acceptableVersions: exports.METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE,
288
312
  canBeLatest: true,
289
313
  })) {
290
314
  return (0, metro_1.patchMetroWithSentryConfig)();
@@ -292,7 +316,7 @@ function addSentryToMetroConfig(_a) {
292
316
  if (sdkVersion &&
293
317
  (0, semver_1.fulfillsVersionRange)({
294
318
  version: sdkVersion,
295
- acceptableVersions: exports.SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE,
319
+ acceptableVersions: exports.SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE,
296
320
  canBeLatest: true,
297
321
  })) {
298
322
  return (0, metro_1.patchMetroConfigWithSentrySerializer)();
@@ -359,7 +383,7 @@ function patchXcodeFiles(config, context) {
359
383
  if (context.sdkVersion &&
360
384
  (0, semver_1.fulfillsVersionRange)({
361
385
  version: context.sdkVersion,
362
- acceptableVersions: exports.SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
386
+ acceptableVersions: exports.XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
363
387
  canBeLatest: true,
364
388
  })) {
365
389
  (0, xcode_1.patchBundlePhase)(bundlePhase, xcode_1.addSentryWithBundledScriptsToBundleShellScript);
@@ -375,7 +399,7 @@ function patchXcodeFiles(config, context) {
375
399
  if (context.sdkVersion &&
376
400
  (0, semver_1.fulfillsVersionRange)({
377
401
  version: context.sdkVersion,
378
- acceptableVersions: exports.SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
402
+ acceptableVersions: exports.XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
379
403
  canBeLatest: true,
380
404
  })) {
381
405
  (0, xcode_1.addDebugFilesUploadPhaseWithBundledScripts)(xcodeProject, {
@@ -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-ignore - 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 {\n CliSetupConfigContent,\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-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { podInstall } from '../apple/cocoapod';\nimport { platform } from 'os';\nimport {\n getValidExistingBuildPhases,\n findBundlePhase,\n patchBundlePhase,\n findDebugFilesUploadPhase,\n addDebugFilesUploadPhaseWithCli,\n writeXcodeProject,\n addSentryWithCliToBundleShellScript,\n addSentryWithBundledScriptsToBundleShellScript,\n addDebugFilesUploadPhaseWithBundledScripts,\n} from './xcode';\nimport {\n doesAppBuildGradleIncludeRNSentryGradlePlugin,\n addRNSentryGradlePlugin,\n writeAppBuildGradle,\n} from './gradle';\nimport { runReactNativeUninstall } from './uninstall';\nimport { APP_BUILD_GRADLE, XCODE_PROJECT, getFirstMatchedPath } from './glob';\nimport { ReactNativeWizardOptions } from './options';\nimport { addSentryInit } from './javascript';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport * as Sentry from '@sentry/node';\nimport { fulfillsVersionRange } from '../utils/semver';\nimport { getIssueStreamUrl } from '../utils/url';\nimport {\n patchMetroConfigWithSentrySerializer,\n patchMetroWithSentryConfig,\n} from './metro';\nimport { patchExpoAppConfig, printSentryExpoMigrationOutro } from './expo';\nimport { addSentryToExpoMetroConfig } from './expo-metro';\nimport { addExpoEnvLocal } from './expo-env-file';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst xcode = require('xcode');\n\nexport const RN_SDK_PACKAGE = '@sentry/react-native';\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 SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';\n\n/**\n * The following SDK version ship with Sentry Metro plugin\n */\nexport const SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';\n\n/**\n * The following SDK version ship with bundled Expo plugin\n */\nexport const SDK_EXPO_SUPPORTED_SDK_RANGE = `>=5.16.0`;\n\n// The following SDK version shipped `withSentryConfig`\nexport const SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE =\n '>=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 printWelcome({\n wizardName: 'Sentry React Native Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\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 });\n const sdkVersion = getPackageVersion(\n RN_SDK_PACKAGE,\n await getPackageDotJson(),\n );\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: SDK_EXPO_SUPPORTED_SDK_RANGE,\n note: `Please upgrade to ${SDK_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 await traceStep('patch-app-js', () =>\n addSentryInit({ dsn: selectedProject.keys[0].dsn.public }),\n );\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();\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:\n SDK_SENTRY_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: SDK_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 traceStep('patch-bundle-phase', () => {\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: SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,\n canBeLatest: true,\n })\n ) {\n patchBundlePhase(\n bundlePhase,\n addSentryWithBundledScriptsToBundleShellScript,\n );\n } else {\n 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: SDK_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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,yEAAyE;AACzE,2DAAmC;AACnC,gDAA0B;AAC1B,qCAAyB;AAEzB,oDAc8B;AAC9B,sDAA+E;AAC/E,8CAA+C;AAC/C,yBAA8B;AAC9B,iCAUiB;AACjB,mCAIkB;AAClB,yCAAsD;AACtD,+BAA8E;AAE9E,2CAA6C;AAC7C,0CAAwD;AACxD,mDAAuC;AACvC,0CAAuD;AACvD,oCAAiD;AACjD,iCAGiB;AACjB,+BAA2E;AAC3E,2CAA0D;AAC1D,iDAAkD;AAElD,mEAAmE;AACnE,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAElB,QAAA,cAAc,GAAG,sBAAsB,CAAC;AACxC,QAAA,sBAAsB,GAAG,SAAS,CAAC;AAEnC,QAAA,UAAU,GAAG,cAAc,CAAC;AAC5B,QAAA,aAAa,GAAG,cAAc,CAAC;AAE/B,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,QAAA,oBAAoB,GAAG,UAAU,CAAC;AAE/C;;;GAGG;AACU,QAAA,iCAAiC,GAAG,UAAU,CAAC;AAE5D;;GAEG;AACU,QAAA,uCAAuC,GAAG,UAAU,CAAC;AAElE;;GAEG;AACU,QAAA,wBAAwB,GAAG,UAAU,CAAC;AAEnD,uDAAuD;AAC1C,QAAA,4CAA4C,GAAG,UAAU,CAAC;AAOvE,SAAsB,oBAAoB,CACxC,MAAgC;;;YAEhC,sBAAO,IAAA,yBAAa,EAClB;oBACE,OAAO,EAAE,MAAM,CAAC,gBAAgB;oBAChC,WAAW,EAAE,cAAc;oBAC3B,aAAa,EAAE,MAAM;iBACtB,EACD,cAAM,OAAA,iCAAiC,CAAC,MAAM,CAAC,EAAzC,CAAyC,CAChD,EAAC;;;CACH;AAXD,oDAWC;AAED,SAAsB,iCAAiC,CACrD,OAAiC;;;;;;oBAEjC,IAAI,OAAO,CAAC,SAAS,EAAE;wBACrB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;wBACjC,sBAAO,IAAA,mCAAuB,EAAC,OAAO,CAAC,EAAC;qBACzC;oBAED,IAAA,0BAAY,EAAC;wBACX,UAAU,EAAE,4BAA4B;wBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;qBAC3C,CAAC,CAAC;oBAEH,qBAAM,IAAA,+CAAiC,GAAE,EAAA;;oBAAzC,SAAyC,CAAC;oBAEtB,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAAvC,WAAW,GAAG,SAAyB;oBACvC,YAAY,GAAG,UAAC,GAAW,IAAK,OAAA,IAAA,kCAAmB,EAAC,GAAG,EAAE,WAAW,CAAC,EAArC,CAAqC,CAAC;oBAE5E,IAAI,YAAY,CAAC,aAAa,CAAC,EAAE;wBAC/B,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;wBACjD,IAAA,oCAA6B,GAAE,CAAC;wBAChC,sBAAO;qBACR;oBAED,qBAAM,IAAA,sCAAwB,EAAC,WAAW,EAAE,kBAAU,EAAE,qBAAa,CAAC,EAAA;;oBAAtE,SAAsE,CAAC;oBAEjE,SAAS,GAAG,IAAA,gCAAiB,EAAC,kBAAU,EAAE,WAAW,CAAC,CAAC;yBACzD,SAAS,EAAT,wBAAS;oBACX,qBAAM,IAAA,yDAA2C,EAAC;4BAChD,WAAW,EAAE,qBAAa;4BAC1B,cAAc,EAAE,SAAS;4BACzB,SAAS,EAAE,kBAAU;4BACrB,kBAAkB,EAAE,0BAAkB;4BACtC,IAAI,EAAE,4BAAqB,0BAAkB,oEAClC,eAAK,CAAC,IAAI,CACnB,0EAA0E,CAC3E,CAAE;yBACJ,CAAC,EAAA;;oBATF,SASE,CAAC;;wBAGL,qBAAM,IAAA,4BAAc,EAAC;wBACnB,WAAW,EAAE,sBAAc;wBAC3B,gBAAgB,EAAE,IAAA,kCAAmB,EAAC,sBAAc,EAAE,WAAW,CAAC;qBACnE,CAAC,EAAA;;oBAHF,SAGE,CAAC;oBACgB,KAAA,gCAAiB,CAAA;0BAClC,sBAAc;oBACd,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAFrB,UAAU,GAAG,4BAEjB,SAAyB,GAC1B;yBACG,UAAU,EAAV,wBAAU;oBACZ,qBAAM,IAAA,yDAA2C,EAAC;4BAChD,WAAW,EAAE,yBAAyB;4BACtC,cAAc,EAAE,UAAU;4BAC1B,SAAS,EAAE,sBAAc;4BACzB,kBAAkB,EAAE,8BAAsB;4BAC1C,IAAI,EAAE,4BAAqB,8BAAsB,kDAA+C;yBACjG,CAAC,EAAA;;oBANF,SAME,CAAC;;wBAEwB,qBAAM,IAAA,8BAAgB,EAC/C,iBAAK,CAAC,OAAO,CAAC;wBACZ,OAAO,EACL,mFAAmF;qBACtF,CAAC,CACH,EAAA;;oBALK,kBAAkB,GAAG,SAK1B;yBACG,CAAC,kBAAkB,EAAnB,yBAAmB;oBACrB,qBAAM,IAAA,mBAAK,EAAC,SAAS,EAAE,CAAC,CAAC,EAAA;;oBAAzB,SAAyB,CAAC;;;oBAG9B,MAAM,CAAC,MAAM,CAAC,0CAA0C,EAAE,UAAU,CAAC,CAAC;oBAEhE,WAAW,GAAG,IAAA,gCAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBACrD,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC;yBACzB,CAAA,WAAW,IAAI,UAAU,CAAA,EAAzB,yBAAyB;oBAC3B,qBAAM,IAAA,yDAA2C,EAAC;4BAChD,WAAW,EAAE,yBAAyB;4BACtC,cAAc,EAAE,UAAU;4BAC1B,SAAS,EAAE,sBAAc;4BACzB,kBAAkB,EAAE,gCAAwB;4BAC5C,IAAI,EAAE,4BAAqB,gCAAwB,uDAAoD;yBACxG,CAAC,EAAA;;oBANF,SAME,CAAC;oBACH,qBAAM,IAAA,yDAA2C,EAAC;4BAChD,WAAW,EAAE,UAAU;4BACvB,cAAc,EAAE,WAAW;4BAC3B,SAAS,EAAE,MAAM;4BACjB,kBAAkB,EAAE,4BAAoB;4BACxC,IAAI,EAAE,4BAAqB,4BAAoB,uDAAoD;yBACpG,CAAC,EAAA;;oBANF,SAME,CAAC;;yBAIH,qBAAM,IAAA,oCAAsB,EAAC,OAAO,EAAE,cAAc,CAAC,EAAA;;oBADjD,KACJ,SAAqD,EAD/C,eAAe,qBAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAA;oBAEvC,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;oBAC5C,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;oBACnC,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC;oBAC/B,SAAS,GAA4B;wBACzC,SAAS,WAAA;wBACT,GAAG,EAAE,OAAO;wBACZ,OAAO,EAAE,WAAW;wBACpB,GAAG,EAAE,SAAS;qBACf,CAAC;oBAEF,qBAAM,IAAA,qBAAS,EAAC,cAAc,EAAE;4BAC9B,OAAA,IAAA,0BAAa,EAAC,EAAE,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBAA1D,CAA0D,CAC3D,EAAA;;oBAFD,SAEC,CAAC;yBAEE,MAAM,EAAN,yBAAM;oBACR,qBAAM,IAAA,qBAAS,EAAC,uBAAuB,EAAE;4BACvC,OAAA,IAAA,yBAAkB,EAAC,SAAS,CAAC;wBAA7B,CAA6B,CAC9B,EAAA;;oBAFD,SAEC,CAAC;oBACF,qBAAM,IAAA,qBAAS,EAAC,oBAAoB,EAAE,cAAM,OAAA,IAAA,+BAAe,EAAC,SAAS,CAAC,EAA1B,CAA0B,CAAC,EAAA;;oBAAvE,SAAuE,CAAC;;;yBAGtE,MAAM,EAAN,yBAAM;oBACR,qBAAM,IAAA,qBAAS,EAAC,oBAAoB,EAAE,uCAA0B,CAAC,EAAA;;oBAAjE,SAAiE,CAAC;;yBAElE,qBAAM,IAAA,qBAAS,EAAC,oBAAoB,EAAE;wBACpC,OAAA,sBAAsB,CAAC,EAAE,UAAU,YAAA,EAAE,CAAC;oBAAtC,CAAsC,CACvC,EAAA;;oBAFD,SAEC,CAAC;;;yBAGA,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAApB,yBAAoB;oBACtB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACjC,qBAAM,IAAA,qBAAS,EAAC,mBAAmB,EAAE;4BACnC,OAAA,eAAe,CAAC,SAAS,EAAE,EAAE,UAAU,YAAA,EAAE,CAAC;wBAA1C,CAA0C,CAC3C,EAAA;;oBAFD,SAEC,CAAC;;;yBAGA,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAxB,yBAAwB;oBAC1B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;oBACrC,qBAAM,IAAA,qBAAS,EAAC,qBAAqB,EAAE,cAAM,OAAA,iBAAiB,CAAC,SAAS,CAAC,EAA5B,CAA4B,CAAC,EAAA;;oBAA1E,SAA0E,CAAC;;yBAG7E,qBAAM,IAAA,oCAAsB,GAAE,EAAA;;oBAA9B,SAA8B,CAAC;oBAEC,qBAAM,2BAA2B,CAC/D,SAAS,EACT,OAAO,EACP,SAAS,CACV,EAAA;;oBAJK,uBAAuB,GAAG,SAI/B;oBAED,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,uBAAuB,CAAC,CAAC;oBAErE,IAAI,uBAAuB,EAAE;wBAC3B,iBAAK,CAAC,KAAK,CACT,UAAG,eAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,oBAExC,eAAK,CAAC,GAAG,CACT,wGAAwG,CACzG,CAAE,CACD,CAAC;qBACH;yBAAM;wBACL,iBAAK,CAAC,KAAK,CACT,UAAG,eAAK,CAAC,GAAG,CACV,2EAA2E,CAC5E,CAAE,CACJ,CAAC;qBACH;;;;;CACF;AA7JD,8EA6JC;AAED,SAAS,sBAAsB,CAAC,EAI/B;QAHC,UAAU,gBAAA;IAIV,IACE,UAAU;QACV,IAAA,6BAAoB,EAAC;YACnB,OAAO,EAAE,UAAU;YACnB,kBAAkB,EAAE,oDAA4C;YAChE,WAAW,EAAE,IAAI;SAClB,CAAC,EACF;QACA,OAAO,IAAA,kCAA0B,GAAE,CAAC;KACrC;IAED,IACE,UAAU;QACV,IAAA,6BAAoB,EAAC;YACnB,OAAO,EAAE,UAAU;YACnB,kBAAkB,EAAE,+CAAuC;YAC3D,WAAW,EAAE,IAAI;SAClB,CAAC,EACF;QACA,OAAO,IAAA,4CAAoC,GAAE,CAAC;KAC/C;AACH,CAAC;AAED,SAAe,2BAA2B,CACxC,GAAW,EACX,OAAe,EACf,SAAiB;;;;YAEX,eAAe,GAAG,IAAA,uBAAiB,EAAC,EAAE,GAAG,KAAA,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,CAAC,CAAC;YAEvE,iBAAK,CAAC,GAAG;iBACN,IAAI,CAAC,4OAKR,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAE,CAAC,CAAC;YAE/B,oFAAoF;YACpF,sCAAsC;YACtC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,WAAW,CAAC,mGAErB,CAAC,CACC,CAAC;YAEI,mBAAmB,GAAG,iBAAK,CAAC,OAAO,CAAC;gBACxC,OAAO,EAAE,0CAA0C;aACpD,CAAC,CAAC;YAEH,sBAAO,mBAAmB,EAAC;;;CAC5B;AAED,SAAe,eAAe,CAC5B,MAA+B,EAC/B,OAEC;;;;;wBAED,qBAAM,IAAA,gCAAkB,EAAC,MAAM,wBAC1B,sCAAwB,KAC3B,IAAI,EAAE,iCAAiC,EACvC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,KAAK,IAChB,EAAA;;oBALF,SAKE,CAAC;oBAEC,KAAA,IAAA,aAAQ,GAAE,KAAK,QAAQ,CAAA;6BAAvB,wBAAuB;oBAAK,qBAAM,iBAAiB,EAAE,EAAA;;oBAA1B,KAAA,CAAC,SAAyB,CAAC,CAAA;;;6BAAtD,wBAAsD;oBACxD,qBAAM,IAAA,qBAAS,EAAC,aAAa,EAAE,cAAM,OAAA,IAAA,qBAAU,EAAC,KAAK,CAAC,EAAjB,CAAiB,CAAC,EAAA;;oBAAvD,SAAuD,CAAC;;;oBAGpD,gBAAgB,GAAG,IAAA,qBAAS,EAAC,oBAAoB,EAAE;wBACvD,OAAA,IAAA,0BAAmB,EAAC,oBAAa,CAAC;oBAAlC,CAAkC,CACnC,CAAC;oBACF,MAAM,CAAC,MAAM,CACX,sBAAsB,EACtB,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACzC,CAAC;oBACF,IAAI,CAAC,gBAAgB,EAAE;wBACrB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,kDAA2C,eAAK,CAAC,IAAI,CAAC,oBAAa,CAAC,MAAG,CACxE,CAAC;wBACF,sBAAO;qBACR;oBAGK,KAAiC,IAAA,qBAAS,EAC9C,qBAAqB,EACrB;wBACE,kJAAkJ;wBAClJ,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;wBAChD,yGAAyG;wBACzG,OAAO,CAAC,SAAS,EAAE,CAAC;wBAEpB,IAAM,GAAG,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,CAAC;wBACjD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACxB,CAAC,CACF,EAXM,YAAY,QAAA,EAAE,cAAc,QAAA,CAWjC;oBACF,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;oBAEhD,IAAA,qBAAS,EAAC,oBAAoB,EAAE;wBAC9B,IAAM,WAAW,GAAG,IAAA,uBAAe,EAAC,cAAc,CAAC,CAAC;wBACpD,MAAM,CAAC,MAAM,CACX,2BAA2B,EAC3B,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACpC,CAAC;wBACF,IACE,OAAO,CAAC,UAAU;4BAClB,IAAA,6BAAoB,EAAC;gCACnB,OAAO,EAAE,OAAO,CAAC,UAAU;gCAC3B,kBAAkB,EAAE,yCAAiC;gCACrD,WAAW,EAAE,IAAI;6BAClB,CAAC,EACF;4BACA,IAAA,wBAAgB,EACd,WAAW,EACX,sDAA8C,CAC/C,CAAC;yBACH;6BAAM;4BACL,IAAA,wBAAgB,EAAC,WAAW,EAAE,2CAAmC,CAAC,CAAC;yBACpE;wBACD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;oBACxD,CAAC,CAAC,CAAC;oBAEH,IAAA,qBAAS,EAAC,8BAA8B,EAAE;wBACxC,IAAM,2BAA2B,GAC/B,CAAC,CAAC,IAAA,iCAAyB,EAAC,cAAc,CAAC,CAAC;wBAC9C,MAAM,CAAC,MAAM,CACX,uCAAuC,EACvC,2BAA2B,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;wBACF,IACE,OAAO,CAAC,UAAU;4BAClB,IAAA,6BAAoB,EAAC;gCACnB,OAAO,EAAE,OAAO,CAAC,UAAU;gCAC3B,kBAAkB,EAAE,yCAAiC;gCACrD,WAAW,EAAE,IAAI;6BAClB,CAAC,EACF;4BACA,IAAA,kDAA0C,EAAC,YAAY,EAAE;gCACvD,2BAA2B,6BAAA;6BAC5B,CAAC,CAAC;yBACJ;6BAAM;4BACL,IAAA,uCAA+B,EAAC,YAAY,EAAE;gCAC5C,2BAA2B,6BAAA;6BAC5B,CAAC,CAAC;yBACJ;wBACD,MAAM,CAAC,MAAM,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC;oBAEH,IAAA,qBAAS,EAAC,qBAAqB,EAAE;wBAC/B,IAAA,yBAAiB,EAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;oBACpD,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;;;;;CAClD;AAED,SAAe,iBAAiB,CAAC,MAA+B;;;;;wBAC9D,qBAAM,IAAA,gCAAkB,EAAC,MAAM,wBAC1B,sCAAwB,KAC3B,IAAI,EAAE,iCAAiC,EACvC,QAAQ,EAAE,2BAA2B,EACrC,SAAS,EAAE,KAAK,IAChB,EAAA;;oBALF,SAKE,CAAC;oBAEG,kBAAkB,GAAG,IAAA,qBAAS,EAAC,uBAAuB,EAAE;wBAC5D,OAAA,IAAA,0BAAmB,EAAC,uBAAgB,CAAC;oBAArC,CAAqC,CACtC,CAAC;oBACF,MAAM,CAAC,MAAM,CACX,yBAAyB,EACzB,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAC3C,CAAC;oBACF,IAAI,CAAC,kBAAkB,EAAE;wBACvB,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,iCAA0B,eAAK,CAAC,IAAI,CAClC,kBAAkB,CACnB,yBAAe,eAAK,CAAC,IAAI,CAAC,uBAAgB,CAAC,MAAG,CAChD,CAAC;wBACF,sBAAO;qBACR;oBAEK,cAAc,GAAG,IAAA,qBAAS,EAAC,uBAAuB,EAAE;wBACxD,OAAA,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC;oBAA5C,CAA4C,CAC7C,CAAC;oBACI,cAAc,GAClB,IAAA,sDAA6C,EAAC,cAAc,CAAC,CAAC;oBAChE,IAAI,cAAc,EAAE;wBAClB,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;wBACpE,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,kBAAW,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,mCAAgC,CAC1E,CAAC;wBACF,sBAAO;qBACR;oBAEK,qBAAqB,GAAG,IAAA,qBAAS,EAAC,6BAA6B,EAAE;wBACrE,OAAA,IAAA,gCAAuB,EAAC,cAAc,CAAC;oBAAvC,CAAuC,CACxC,CAAC;oBACF,IAAI,CAAC,IAAA,sDAA6C,EAAC,qBAAqB,CAAC,EAAE;wBACzE,MAAM,CAAC,MAAM,CACX,yBAAyB,EACzB,uCAAuC,CACxC,CAAC;wBACF,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,mDAA4C,eAAK,CAAC,IAAI,CACpD,kBAAkB,CACnB,MAAG,CACL,CAAC;wBACF,sBAAO;qBACR;oBAED,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,+BAA+B,CAAC,CAAC;oBAC1E,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,2CAAoC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAG,CACtE,CAAC;oBAEF,IAAA,qBAAS,EAAC,wBAAwB,EAAE;wBAClC,OAAA,IAAA,4BAAmB,EAAC,kBAAkB,EAAE,qBAAqB,CAAC;oBAA9D,CAA8D,CAC/D,CAAC;oBACF,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,eAAK,CAAC,KAAK,CAAC,kBAAW,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAS,CAAC,CAChE,CAAC;;;;;CACH;AAED,SAAe,iBAAiB;;;;YAC9B,sBAAO,IAAA,qBAAS,EAAC,qBAAqB,EAAE;;;;oCACP,qBAAM,IAAA,8BAAgB,EACnD,iBAAK,CAAC,MAAM,CAAC;oCACX,OAAO,EAAE,uCAAuC;oCAChD,OAAO,EAAE;wCACP;4CACE,KAAK,EAAE,IAAI;4CACX,KAAK,EAAE,KAAK;4CACZ,IAAI,EAAE,mEAAmE;yCAC1E;wCACD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE;qCAChD;oCACD,YAAY,EAAE,IAAI;iCACnB,CAAC,CACH,EAAA;;gCAbK,sBAAsB,GAAG,SAa9B;gCACD,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,sBAAsB,CAAC,CAAC;gCACnE,sBAAO,sBAAsB,EAAC;;;qBAC/B,CAAC,EAAC;;;CACJ","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - 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 {\n CliSetupConfigContent,\n abortIfCancelled,\n addSentryCliConfig,\n confirmContinueIfNoOrDirtyGitRepo,\n confirmContinueIfPackageVersionNotSupported,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n propertiesCliSetupConfig,\n runPrettierIfInstalled,\n abort,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { podInstall } from '../apple/cocoapod';\nimport { platform } from 'os';\nimport {\n getValidExistingBuildPhases,\n findBundlePhase,\n patchBundlePhase,\n findDebugFilesUploadPhase,\n addDebugFilesUploadPhaseWithCli,\n writeXcodeProject,\n addSentryWithCliToBundleShellScript,\n addSentryWithBundledScriptsToBundleShellScript,\n addDebugFilesUploadPhaseWithBundledScripts,\n} from './xcode';\nimport {\n doesAppBuildGradleIncludeRNSentryGradlePlugin,\n addRNSentryGradlePlugin,\n writeAppBuildGradle,\n} from './gradle';\nimport { runReactNativeUninstall } from './uninstall';\nimport { APP_BUILD_GRADLE, XCODE_PROJECT, getFirstMatchedPath } from './glob';\nimport { ReactNativeWizardOptions } from './options';\nimport { addSentryInit } from './javascript';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport * as Sentry from '@sentry/node';\nimport { fulfillsVersionRange } from '../utils/semver';\nimport { getIssueStreamUrl } from '../utils/url';\nimport {\n patchMetroConfigWithSentrySerializer,\n patchMetroWithSentryConfig,\n} from './metro';\nimport { patchExpoAppConfig, printSentryExpoMigrationOutro } from './expo';\nimport { addSentryToExpoMetroConfig } from './expo-metro';\nimport { addExpoEnvLocal } from './expo-env-file';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst xcode = require('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 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 printWelcome({\n wizardName: 'Sentry React Native Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\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 });\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 await traceStep('patch-app-js', () =>\n addSentryInit({ dsn: selectedProject.keys[0].dsn.public }),\n );\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();\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 traceStep('patch-bundle-phase', () => {\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 patchBundlePhase(\n bundlePhase,\n addSentryWithBundledScriptsToBundleShellScript,\n );\n } else {\n 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"]}
@@ -5,7 +5,7 @@ describe('react-native javascript', function () {
5
5
  describe('addSentryInitWithSdkImport', function () {
6
6
  it('adds sdk import and sentry init under last import in the file', function () {
7
7
  var input = "import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;";
8
- var expectedOutput = "import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: 'dsn',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // enableSpotlight: __DEV__,\n});\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;";
8
+ var expectedOutput = "import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: 'dsn',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: __DEV__,\n});\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;";
9
9
  expect((0, javascript_1.addSentryInitWithSdkImport)(input, { dsn: 'dsn' })).toBe(expectedOutput);
10
10
  });
11
11
  it('does not add sdk import and sentry init in the file without imports', function () {
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.test.js","sourceRoot":"","sources":["../../../test/react-native/javascript.test.ts"],"names":[],"mappings":";;AAAA,gEAG2C;AAE3C,QAAQ,CAAC,yBAAyB,EAAE;IAClC,QAAQ,CAAC,4BAA4B,EAAE;QACrC,EAAE,CAAC,+DAA+D,EAAE;YAClE,IAAM,KAAK,GAAG,8MAcA,CAAC;YAEf,IAAM,cAAc,GAAG,mZAsBT,CAAC;YAEf,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5D,cAAc,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE;YACxE,IAAM,KAAK,GAAG,6BAA6B,CAAC;YAC5C,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE;YAC9D,IAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE;QAC3C,EAAE,CAAC,qCAAqC,EAAE;YACxC,IAAM,KAAK,GAAG,+PAeA,CAAC;YAEf,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YACzC,IAAM,KAAK,GAAG,+PAeA,CAAC;YAEf,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACnD,IAAM,KAAK,GAAG,6BAA6B,CAAC;YAC5C,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE;YACjC,IAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n addSentryInitWithSdkImport,\n doesJsCodeIncludeSdkSentryImport,\n} from '../../src/react-native/javascript';\n\ndescribe('react-native javascript', () => {\n describe('addSentryInitWithSdkImport', () => {\n it('adds sdk import and sentry init under last import in the file', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n const expectedOutput = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: 'dsn',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // enableSpotlight: __DEV__,\n});\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(\n expectedOutput,\n );\n });\n\n it('does not add sdk import and sentry init in the file without imports', () => {\n const input = `export const test = 'test';`;\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);\n });\n\n it('does not add sdk import and sentry init in the empty file', () => {\n const input = '';\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);\n });\n });\n\n describe('doesJsCodeIncludeSdkSentryImport', () => {\n it('returns true if code has sdk import', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(true);\n });\n\n it('returns true if code has sdk require', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nconst Sentry = require('@sentry/react-native');\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(true);\n });\n\n it('returns false if code does not have sdk import', () => {\n const input = `export const test = 'test';`;\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(false);\n });\n\n it('returns false for empty file', () => {\n const input = '';\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(false);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"javascript.test.js","sourceRoot":"","sources":["../../../test/react-native/javascript.test.ts"],"names":[],"mappings":";;AAAA,gEAG2C;AAE3C,QAAQ,CAAC,yBAAyB,EAAE;IAClC,QAAQ,CAAC,4BAA4B,EAAE;QACrC,EAAE,CAAC,+DAA+D,EAAE;YAClE,IAAM,KAAK,GAAG,8MAcA,CAAC;YAEf,IAAM,cAAc,GAAG,6YAsBT,CAAC;YAEf,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5D,cAAc,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE;YACxE,IAAM,KAAK,GAAG,6BAA6B,CAAC;YAC5C,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE;YAC9D,IAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,IAAA,uCAA0B,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE;QAC3C,EAAE,CAAC,qCAAqC,EAAE;YACxC,IAAM,KAAK,GAAG,+PAeA,CAAC;YAEf,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YACzC,IAAM,KAAK,GAAG,+PAeA,CAAC;YAEf,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACnD,IAAM,KAAK,GAAG,6BAA6B,CAAC;YAC5C,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE;YACjC,IAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,CACJ,IAAA,6CAAgC,EAAC,KAAK,EAAE;gBACtC,cAAc,EAAE,sBAAsB;aACvC,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n addSentryInitWithSdkImport,\n doesJsCodeIncludeSdkSentryImport,\n} from '../../src/react-native/javascript';\n\ndescribe('react-native javascript', () => {\n describe('addSentryInitWithSdkImport', () => {\n it('adds sdk import and sentry init under last import in the file', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n const expectedOutput = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nSentry.init({\n dsn: 'dsn',\n\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: __DEV__,\n});\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(\n expectedOutput,\n );\n });\n\n it('does not add sdk import and sentry init in the file without imports', () => {\n const input = `export const test = 'test';`;\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);\n });\n\n it('does not add sdk import and sentry init in the empty file', () => {\n const input = '';\n expect(addSentryInitWithSdkImport(input, { dsn: 'dsn' })).toBe(input);\n });\n });\n\n describe('doesJsCodeIncludeSdkSentryImport', () => {\n it('returns true if code has sdk import', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nimport * as Sentry from '@sentry/react-native';\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(true);\n });\n\n it('returns true if code has sdk require', () => {\n const input = `import * as React from 'react';\n\nconst test = 'test';\n\nimport { View } from 'react-native';\nconst Sentry = require('@sentry/react-native');\n\nconst App = () => {\n return (\n <View>\n Test App\n </View>\n );\n};\n\nexport default App;`;\n\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(true);\n });\n\n it('returns false if code does not have sdk import', () => {\n const input = `export const test = 'test';`;\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(false);\n });\n\n it('returns false for empty file', () => {\n const input = '';\n expect(\n doesJsCodeIncludeSdkSentryImport(input, {\n sdkPackageName: '@sentry/react-native',\n }),\n ).toBe(false);\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "3.37.0",
3
+ "version": "3.38.0",
4
4
  "homepage": "https://github.com/getsentry/sentry-wizard",
5
5
  "repository": "https://github.com/getsentry/sentry-wizard",
6
6
  "description": "Sentry wizard helping you to configure your project",
@@ -29,7 +29,7 @@
29
29
  "@sentry/node": "^7.119.2",
30
30
  "axios": "1.7.4",
31
31
  "chalk": "^2.4.1",
32
- "glob": "^8.1.0",
32
+ "glob": "9.3.5",
33
33
  "inquirer": "^6.2.0",
34
34
  "lodash": "^4.17.15",
35
35
  "magicast": "^0.2.10",
@@ -119,6 +119,7 @@ export async function runNuxtWizardWithTelemetry(
119
119
  };
120
120
 
121
121
  const deploymentPlatform = await askDeploymentPlatform();
122
+ Sentry.setTag('deployment-platform', deploymentPlatform);
122
123
 
123
124
  await traceStep('configure-sdk', async () => {
124
125
  await addSDKModule(nuxtConfig, projectData, deploymentPlatform);
@@ -337,6 +337,8 @@ export async function confirmReadImportDocs(
337
337
  clack.confirm({ message: 'Do you want to open the docs?' }),
338
338
  );
339
339
 
340
+ Sentry.setTag('init-with-import-docs-opened', shouldOpenDocs);
341
+
340
342
  if (shouldOpenDocs) {
341
343
  opn(docsUrl, { wait: false }).catch(() => {
342
344
  // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here
@@ -98,6 +98,6 @@ Sentry.init({
98
98
  dsn: '${dsn}',
99
99
 
100
100
  // uncomment the line below to enable Spotlight (https://spotlightjs.com)
101
- // enableSpotlight: __DEV__,
101
+ // spotlight: __DEV__,
102
102
  });`;
103
103
  }
@@ -17,6 +17,7 @@ import {
17
17
  printWelcome,
18
18
  propertiesCliSetupConfig,
19
19
  runPrettierIfInstalled,
20
+ abort,
20
21
  } from '../utils/clack-utils';
21
22
  import { getPackageVersion, hasPackageInstalled } from '../utils/package-json';
22
23
  import { podInstall } from '../apple/cocoapod';
@@ -57,6 +58,7 @@ import { addExpoEnvLocal } from './expo-env-file';
57
58
  const xcode = require('xcode');
58
59
 
59
60
  export const RN_SDK_PACKAGE = '@sentry/react-native';
61
+ export const RN_SDK_SUPPORTED_RANGE = '>=5.0.0';
60
62
 
61
63
  export const RN_PACKAGE = 'react-native';
62
64
  export const RN_HUMAN_NAME = 'React Native';
@@ -68,21 +70,20 @@ export const SUPPORTED_EXPO_RANGE = '>=50.0.0';
68
70
  * The following SDK version ship with bundled Xcode scripts
69
71
  * which simplifies the Xcode Build Phases setup.
70
72
  */
71
- export const SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';
73
+ export const XCODE_SCRIPTS_SUPPORTED_SDK_RANGE = '>=5.11.0';
72
74
 
73
75
  /**
74
76
  * The following SDK version ship with Sentry Metro plugin
75
77
  */
76
- export const SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';
78
+ export const SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE = '>=5.11.0';
77
79
 
78
80
  /**
79
81
  * The following SDK version ship with bundled Expo plugin
80
82
  */
81
- export const SDK_EXPO_SUPPORTED_SDK_RANGE = `>=5.16.0`;
83
+ export const EXPO_SUPPORTED_SDK_RANGE = `>=5.16.0`;
82
84
 
83
85
  // The following SDK version shipped `withSentryConfig`
84
- export const SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE =
85
- '>=5.17.0';
86
+ export const METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE = '>=5.17.0';
86
87
 
87
88
  export type RNCliSetupConfigContent = Pick<
88
89
  Required<CliSetupConfigContent>,
@@ -151,6 +152,26 @@ Or setup using ${chalk.cyan(
151
152
  RN_SDK_PACKAGE,
152
153
  await getPackageDotJson(),
153
154
  );
155
+ if (sdkVersion) {
156
+ await confirmContinueIfPackageVersionNotSupported({
157
+ packageName: 'Sentry React Native SDK',
158
+ packageVersion: sdkVersion,
159
+ packageId: RN_SDK_PACKAGE,
160
+ acceptableVersions: RN_SDK_SUPPORTED_RANGE,
161
+ note: `Please upgrade to ${RN_SDK_SUPPORTED_RANGE} to continue with the wizard in this project.`,
162
+ });
163
+ } else {
164
+ const continueWithoutSdk = await abortIfCancelled(
165
+ clack.confirm({
166
+ message:
167
+ 'Could not detect Sentry React Native SDK version. Do you want to continue anyway?',
168
+ }),
169
+ );
170
+ if (!continueWithoutSdk) {
171
+ await abort(undefined, 0);
172
+ }
173
+ }
174
+ Sentry.setTag(`detected-sentry-react-native-sdk-version`, sdkVersion);
154
175
 
155
176
  const expoVersion = getPackageVersion('expo', packageJson);
156
177
  const isExpo = !!expoVersion;
@@ -159,8 +180,8 @@ Or setup using ${chalk.cyan(
159
180
  packageName: 'Sentry React Native SDK',
160
181
  packageVersion: sdkVersion,
161
182
  packageId: RN_SDK_PACKAGE,
162
- acceptableVersions: SDK_EXPO_SUPPORTED_SDK_RANGE,
163
- note: `Please upgrade to ${SDK_EXPO_SUPPORTED_SDK_RANGE} to continue with the wizard in this Expo project.`,
183
+ acceptableVersions: EXPO_SUPPORTED_SDK_RANGE,
184
+ note: `Please upgrade to ${EXPO_SUPPORTED_SDK_RANGE} to continue with the wizard in this Expo project.`,
164
185
  });
165
186
  await confirmContinueIfPackageVersionNotSupported({
166
187
  packageName: 'Expo SDK',
@@ -250,8 +271,7 @@ function addSentryToMetroConfig({
250
271
  sdkVersion &&
251
272
  fulfillsVersionRange({
252
273
  version: sdkVersion,
253
- acceptableVersions:
254
- SDK_SENTRY_METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE,
274
+ acceptableVersions: METRO_WITH_SENTRY_CONFIG_SUPPORTED_SDK_RANGE,
255
275
  canBeLatest: true,
256
276
  })
257
277
  ) {
@@ -262,7 +282,7 @@ function addSentryToMetroConfig({
262
282
  sdkVersion &&
263
283
  fulfillsVersionRange({
264
284
  version: sdkVersion,
265
- acceptableVersions: SDK_SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE,
285
+ acceptableVersions: SENTRY_METRO_PLUGIN_SUPPORTED_SDK_RANGE,
266
286
  canBeLatest: true,
267
287
  })
268
288
  ) {
@@ -356,7 +376,7 @@ async function patchXcodeFiles(
356
376
  context.sdkVersion &&
357
377
  fulfillsVersionRange({
358
378
  version: context.sdkVersion,
359
- acceptableVersions: SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
379
+ acceptableVersions: XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
360
380
  canBeLatest: true,
361
381
  })
362
382
  ) {
@@ -381,7 +401,7 @@ async function patchXcodeFiles(
381
401
  context.sdkVersion &&
382
402
  fulfillsVersionRange({
383
403
  version: context.sdkVersion,
384
- acceptableVersions: SDK_XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
404
+ acceptableVersions: XCODE_SCRIPTS_SUPPORTED_SDK_RANGE,
385
405
  canBeLatest: true,
386
406
  })
387
407
  ) {
@@ -33,7 +33,7 @@ Sentry.init({
33
33
  dsn: 'dsn',
34
34
 
35
35
  // uncomment the line below to enable Spotlight (https://spotlightjs.com)
36
- // enableSpotlight: __DEV__,
36
+ // spotlight: __DEV__,
37
37
  });
38
38
 
39
39
  const App = () => {