@sentry/wizard 3.40.0 → 3.42.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/README.md +19 -19
  3. package/bin.ts +5 -0
  4. package/codecov.yml +15 -0
  5. package/dist/bin.js +4 -0
  6. package/dist/bin.js.map +1 -1
  7. package/dist/e2e-tests/jest.config.d.ts +1 -0
  8. package/dist/e2e-tests/jest.config.js +1 -0
  9. package/dist/e2e-tests/jest.config.js.map +1 -1
  10. package/dist/e2e-tests/tests/remix.test.js +1 -1
  11. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  12. package/dist/package.json +3 -2
  13. package/dist/src/apple/apple-wizard.js +1 -2
  14. package/dist/src/apple/apple-wizard.js.map +1 -1
  15. package/dist/src/apple/code-tools.d.ts +10 -0
  16. package/dist/src/apple/code-tools.js +16 -12
  17. package/dist/src/apple/code-tools.js.map +1 -1
  18. package/dist/src/apple/fastlane.d.ts +23 -0
  19. package/dist/src/apple/fastlane.js +11 -7
  20. package/dist/src/apple/fastlane.js.map +1 -1
  21. package/dist/src/apple/templates.d.ts +1 -1
  22. package/dist/src/apple/templates.js +0 -2
  23. package/dist/src/apple/templates.js.map +1 -1
  24. package/dist/src/apple/xcode-manager.d.ts +10 -6
  25. package/dist/src/apple/xcode-manager.js +146 -61
  26. package/dist/src/apple/xcode-manager.js.map +1 -1
  27. package/dist/src/nextjs/nextjs-wizard.js +6 -4
  28. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  29. package/dist/src/nuxt/nuxt-wizard.js +7 -5
  30. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  31. package/dist/src/nuxt/sdk-setup.d.ts +1 -1
  32. package/dist/src/nuxt/sdk-setup.js +2 -1
  33. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  34. package/dist/src/react-native/react-native-wizard.js +5 -3
  35. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  36. package/dist/src/remix/remix-wizard.js +6 -4
  37. package/dist/src/remix/remix-wizard.js.map +1 -1
  38. package/dist/src/remix/sdk-setup.js +0 -4
  39. package/dist/src/remix/sdk-setup.js.map +1 -1
  40. package/dist/src/run.d.ts +1 -0
  41. package/dist/src/run.js +1 -0
  42. package/dist/src/run.js.map +1 -1
  43. package/dist/src/sveltekit/sveltekit-wizard.js +6 -4
  44. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  45. package/dist/src/utils/clack-utils.d.ts +3 -1
  46. package/dist/src/utils/clack-utils.js +18 -12
  47. package/dist/src/utils/clack-utils.js.map +1 -1
  48. package/dist/src/utils/package-manager.d.ts +1 -0
  49. package/dist/src/utils/package-manager.js +5 -0
  50. package/dist/src/utils/package-manager.js.map +1 -1
  51. package/dist/src/utils/types.d.ts +9 -0
  52. package/dist/src/utils/types.js.map +1 -1
  53. package/dist/test/apple/cocoapod.test.d.ts +1 -0
  54. package/dist/test/apple/cocoapod.test.js +409 -0
  55. package/dist/test/apple/cocoapod.test.js.map +1 -0
  56. package/dist/test/apple/code-tools.test.d.ts +1 -0
  57. package/dist/test/apple/code-tools.test.js +673 -0
  58. package/dist/test/apple/code-tools.test.js.map +1 -0
  59. package/dist/test/apple/fastfile.test.d.ts +1 -0
  60. package/dist/test/apple/fastfile.test.js +431 -0
  61. package/dist/test/apple/fastfile.test.js.map +1 -0
  62. package/dist/test/apple/templates.test.d.ts +1 -0
  63. package/dist/test/apple/templates.test.js +73 -0
  64. package/dist/test/apple/templates.test.js.map +1 -0
  65. package/dist/test/apple/xcode-manager.test.d.ts +1 -0
  66. package/dist/test/apple/xcode-manager.test.js +834 -0
  67. package/dist/test/apple/xcode-manager.test.js.map +1 -0
  68. package/dist/test/remix/server-instrumentation.test.js +2 -2
  69. package/dist/test/remix/server-instrumentation.test.js.map +1 -1
  70. package/dist/test/utils/clack-utils.test.js +89 -0
  71. package/dist/test/utils/clack-utils.test.js.map +1 -1
  72. package/e2e-tests/jest.config.ts +1 -0
  73. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj +52 -0
  74. package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  75. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/project.pbxproj +62 -0
  76. package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  77. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj +470 -0
  78. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +78 -0
  79. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/ContentView.swift +7 -0
  80. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/Project1App.swift +10 -0
  81. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/ContentView.swift +7 -0
  82. package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/Project2App.swift +10 -0
  83. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/project.pbxproj +382 -0
  84. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/xcshareddata/xcschemes/Project.xcscheme +78 -0
  85. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/ContentView.swift +7 -0
  86. package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/MainApp.swift +10 -0
  87. package/e2e-tests/tests/remix.test.ts +1 -2
  88. package/package.json +3 -2
  89. package/src/apple/apple-wizard.ts +1 -2
  90. package/src/apple/code-tools.ts +21 -6
  91. package/src/apple/fastlane.ts +18 -2
  92. package/src/apple/templates.ts +2 -2
  93. package/src/apple/xcode-manager.ts +181 -94
  94. package/src/nextjs/nextjs-wizard.ts +6 -3
  95. package/src/nuxt/nuxt-wizard.ts +7 -4
  96. package/src/nuxt/sdk-setup.ts +2 -0
  97. package/src/react-native/react-native-wizard.ts +5 -2
  98. package/src/remix/remix-wizard.ts +6 -3
  99. package/src/remix/sdk-setup.ts +0 -5
  100. package/src/run.ts +2 -0
  101. package/src/sveltekit/sveltekit-wizard.ts +6 -3
  102. package/src/utils/clack-utils.ts +12 -2
  103. package/src/utils/package-manager.ts +6 -0
  104. package/src/utils/types.ts +10 -0
  105. package/test/apple/cocoapod.test.ts +306 -0
  106. package/test/apple/code-tools.test.ts +1042 -0
  107. package/test/apple/fastfile.test.ts +550 -0
  108. package/test/apple/templates.test.ts +191 -0
  109. package/test/apple/xcode-manager.test.ts +1066 -0
  110. package/test/remix/server-instrumentation.test.ts +2 -4
  111. package/test/utils/clack-utils.test.ts +92 -0
  112. package/types/xcode.d.ts +526 -0
@@ -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 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"]}
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 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 const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry React Native Wizard',\n promoCode,\n 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 forceInstall,\n });\n const sdkVersion = getPackageVersion(\n RN_SDK_PACKAGE,\n await getPackageDotJson(),\n );\n if (sdkVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Sentry React Native SDK',\n packageVersion: sdkVersion,\n packageId: RN_SDK_PACKAGE,\n acceptableVersions: RN_SDK_SUPPORTED_RANGE,\n note: `Please upgrade to ${RN_SDK_SUPPORTED_RANGE} to continue with the wizard in this project.`,\n });\n } else {\n const continueWithoutSdk = await abortIfCancelled(\n clack.confirm({\n message:\n 'Could not detect Sentry React Native SDK version. Do you want to continue anyway?',\n }),\n );\n if (!continueWithoutSdk) {\n await abort(undefined, 0);\n }\n }\n Sentry.setTag(`detected-sentry-react-native-sdk-version`, sdkVersion);\n\n const expoVersion = getPackageVersion('expo', packageJson);\n const isExpo = !!expoVersion;\n if (expoVersion && sdkVersion) {\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Sentry React Native SDK',\n packageVersion: sdkVersion,\n packageId: RN_SDK_PACKAGE,\n acceptableVersions: EXPO_SUPPORTED_SDK_RANGE,\n note: `Please upgrade to ${EXPO_SUPPORTED_SDK_RANGE} to continue with the wizard in this Expo project.`,\n });\n await confirmContinueIfPackageVersionNotSupported({\n packageName: 'Expo SDK',\n packageVersion: expoVersion,\n packageId: 'expo',\n acceptableVersions: SUPPORTED_EXPO_RANGE,\n note: `Please upgrade to ${SUPPORTED_EXPO_RANGE} to continue with the wizard in this Expo project.`,\n });\n }\n\n const { selectedProject, authToken, sentryUrl } =\n await getOrAskForProjectData(options, 'react-native');\n const orgSlug = selectedProject.organization.slug;\n const projectSlug = selectedProject.slug;\n const projectId = selectedProject.id;\n const cliConfig: RNCliSetupConfigContent = {\n authToken,\n org: orgSlug,\n project: projectSlug,\n url: sentryUrl,\n };\n\n 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"]}
@@ -67,15 +67,16 @@ function runRemixWizard(options) {
67
67
  exports.runRemixWizard = runRemixWizard;
68
68
  function runRemixWizardWithTelemetry(options) {
69
69
  return __awaiter(this, void 0, void 0, function () {
70
- var remixConfig, packageJson, _a, selectedProject, authToken, sentryUrl, selfHosted, dsn, isTS, isV2, viteConfig, selectedFeatures, instrumentationFile, serverFileInstrumented, shouldCreateExamplePage;
70
+ var promoCode, telemetryEnabled, forceInstall, remixConfig, packageJson, _a, selectedProject, authToken, sentryUrl, selfHosted, dsn, isTS, isV2, viteConfig, selectedFeatures, instrumentationFile, serverFileInstrumented, shouldCreateExamplePage;
71
71
  var _this = this;
72
72
  return __generator(this, function (_b) {
73
73
  switch (_b.label) {
74
74
  case 0:
75
+ promoCode = options.promoCode, telemetryEnabled = options.telemetryEnabled, forceInstall = options.forceInstall;
75
76
  (0, clack_utils_1.printWelcome)({
76
77
  wizardName: 'Sentry Remix Wizard',
77
- promoCode: options.promoCode,
78
- telemetryEnabled: options.telemetryEnabled,
78
+ promoCode: promoCode,
79
+ telemetryEnabled: telemetryEnabled,
79
80
  });
80
81
  return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)()];
81
82
  case 1:
@@ -95,9 +96,10 @@ function runRemixWizardWithTelemetry(options) {
95
96
  case 5:
96
97
  _a = _b.sent(), selectedProject = _a.selectedProject, authToken = _a.authToken, sentryUrl = _a.sentryUrl, selfHosted = _a.selfHosted;
97
98
  return [4 /*yield*/, (0, clack_utils_1.installPackage)({
98
- packageName: '@sentry/remix@^8',
99
+ packageName: '@sentry/remix@^9',
99
100
  packageNameDisplayLabel: '@sentry/remix',
100
101
  alreadyInstalled: (0, package_json_1.hasPackageInstalled)('@sentry/remix', packageJson),
102
+ forceInstall: forceInstall,
101
103
  })];
102
104
  case 6:
103
105
  _b.sent();
@@ -1 +1 @@
1
- {"version":3,"file":"remix-wizard.js","sourceRoot":"","sources":["../../../src/remix/remix-wizard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,2DAAmC;AACnC,gDAA0B;AAE1B,oDAa8B;AAC9B,sDAA4D;AAE5D,yCAWqB;AACrB,wCAAuC;AACvC,0CAAwD;AACxD,iCAAwC;AACxC,iDAAkD;AAClD,gDAA8C;AAC9C,iDAA+D;AAC/D,6CAAkD;AAElD,SAAsB,cAAc,CAAC,OAAsB;;;YACzD,sBAAO,IAAA,yBAAa,EAClB;oBACE,OAAO,EAAE,OAAO,CAAC,gBAAgB;oBACjC,WAAW,EAAE,OAAO;oBACpB,aAAa,EAAE,OAAO;iBACvB,EACD,cAAM,OAAA,2BAA2B,CAAC,OAAO,CAAC,EAApC,CAAoC,CAC3C,EAAC;;;CACH;AATD,wCASC;AAED,SAAe,2BAA2B,CACxC,OAAsB;;;;;;;oBAEtB,IAAA,0BAAY,EAAC;wBACX,UAAU,EAAE,qBAAqB;wBACjC,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,2BAAe,GAAE,EAAA;;oBAArC,WAAW,GAAG,SAAuB;oBACvB,qBAAM,IAAA,+BAAiB,GAAE,EAAA;;oBAAvC,WAAW,GAAG,SAAyB;oBAE7C,qEAAqE;oBACrE,qBAAM,IAAA,sCAAwB,EAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAA;;oBADtE,qEAAqE;oBACrE,SAAsE,CAAC;oBAGrE,qBAAM,IAAA,oCAAsB,EAAC,OAAO,EAAE,kBAAkB,CAAC,EAAA;;oBADrD,KACJ,SAAyD,EADnD,eAAe,qBAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAA,EAAE,UAAU,gBAAA;oBAGzD,qBAAM,IAAA,4BAAc,EAAC;4BACnB,WAAW,EAAE,kBAAkB;4BAC/B,uBAAuB,EAAE,eAAe;4BACxC,gBAAgB,EAAE,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC;yBACpE,CAAC,EAAA;;oBAJF,SAIE,CAAC;oBAEG,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBAEzC,IAAI,GAAG,IAAA,+BAAiB,GAAE,CAAC;oBAC3B,IAAI,GAAG,IAAA,qBAAS,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBAC3C,UAAU,GAAG,IAAA,oBAAQ,EAAC,aAAa,CAAC,CAAC;oBAClB,qBAAM,IAAA,oCAAsB,EAAC;4BACpD;gCACE,EAAE,EAAE,aAAa;gCACjB,MAAM,EAAE,gCAAyB,eAAK,CAAC,IAAI,CACzC,SAAS,CACV,mDAAgD;gCACjD,WAAW,EAAE,aAAa;6BAC3B;4BACD;gCACE,EAAE,EAAE,QAAQ;gCACZ,MAAM,EAAE,gCAAyB,eAAK,CAAC,IAAI,CACzC,uBAAuB,CACxB,uEAAoE;gCACrE,WAAW,EAAE,wCAAwC;6BACtD;yBACO,CAAC,EAAA;;oBAfL,gBAAgB,GAAG,SAed;yBAEP,UAAU,EAAV,wBAAU;oBACZ,qBAAM,IAAA,qBAAS,EACb,iDAAiD,EACjD;;;;;;wCAEI,qBAAM,IAAA,0BAAmB,EAAC;gDACxB,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;gDAC1C,WAAW,EAAE,eAAe,CAAC,IAAI;gDACjC,GAAG,EAAE,SAAS;gDACd,UAAU,YAAA;gDACV,SAAS,WAAA;6CACV,CAAC,EAAA;;wCANF,SAME,CAAC;;;;wCAEH,iBAAK,CAAC,GAAG;6CACN,IAAI,CAAC,yNAC8H,CAAC,CAAC;wCACxI,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;6BAEZ,CACF,EAAA;;oBAlBD,SAkBC,CAAC;;wBAEF,qBAAM,IAAA,qBAAS,EAAC,2CAA2C,EAAE;;;;;;oCAEzD,qBAAM,IAAA,6BAAiB,EAAC;4CACtB,GAAG,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;4CACtC,OAAO,EAAE,eAAe,CAAC,IAAI;4CAC7B,GAAG,EAAE,SAAS,KAAK,uBAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;4CACtD,UAAU,EAAE,IAAA,qBAAa,EAAC,WAAW,CAAC;yCACvC,CAAC,EAAA;;oCALF,SAKE,CAAC;oCAEH,qBAAM,IAAA,gCAAkB,EAAC,EAAE,SAAS,WAAA,EAAE,EAAE,8BAAgB,CAAC,EAAA;;oCAAzD,SAAyD,CAAC;;;;oCAE1D,iBAAK,CAAC,GAAG;yCACN,IAAI,CAAC,2MACwH,CAAC,CAAC;oCAClI,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;yBAEZ,CAAC,EAAA;;oBAhBF,SAgBE,CAAC;;yBAGL,qBAAM,IAAA,qBAAS,EAAC,uBAAuB,EAAE;;;;;;oCAErC,qBAAM,IAAA,+BAAmB,EAAC,IAAI,EAAE,IAAI,CAAC,EAAA;;oCAArC,SAAqC,CAAC;;;;oCAEtC,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0JACkG,CAAC,CAAC;oCACnH,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;yBAEZ,CAAC,EAAA;;oBARF,SAQE,CAAC;oBAEH,IAAA,qBAAS,EAAC,4BAA4B,EAAE;wBACtC,IAAI;4BACF,IAAA,0BAAc,EAAC,IAAI,CAAC,CAAC;yBACtB;wBAAC,OAAO,CAAC,EAAE;4BACV,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,8EACqB,CAAC,CAAC;4BACtC,IAAA,aAAK,EAAC,CAAC,CAAC,CAAC;yBACV;oBACH,CAAC,CAAC,CAAC;oBAEH,qBAAM,IAAA,qBAAS,EAAC,mCAAmC,EAAE;;;;;;wCAEjD,qBAAM,IAAA,yCAA6B,EAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAA;;wCAAhE,SAAgE,CAAC;;;;wCAEjE,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sKACkG,CAAC,CAAC;wCACnH,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;6BAEZ,CAAC,EAAA;;oBARF,SAQE,CAAC;oBAEC,mBAAmB,GAAG,EAAE,CAAC;oBAE7B,qBAAM,IAAA,qBAAS,EAAC,oCAAoC,EAAE;;;;;;wCAE5B,qBAAM,IAAA,2CAA+B,EACzD,GAAG,EACH,gBAAgB,CACjB,EAAA;;wCAHD,mBAAmB,GAAG,SAGrB,CAAC;;;;wCAEF,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,sKAAsK,CACvK,CAAC;wCACF,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;6BAEZ,CAAC,EAAA;;oBAZF,SAYE,CAAC;oBAEC,sBAAsB,GAAG,KAAK,CAAC;oBAEnC,qBAAM,IAAA,qBAAS,EACb,kDAAkD,EAClD;;;;;;wCAE6B,qBAAM,IAAA,2CAA+B,EAC5D,GAAG,EACH,gBAAgB,CACjB,EAAA;;wCAHD,sBAAsB,GAAG,SAGxB,CAAC;;;;wCAEF,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,sKAAsK,CACvK,CAAC;wCACF,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;6BAEZ,CACF,EAAA;;oBAfD,SAeC,CAAC;yBAEE,CAAA,CAAC,sBAAsB,IAAI,mBAAmB,CAAA,EAA9C,yBAA8C;oBAChD,qBAAM,IAAA,qBAAS,EACb,uDAAuD,EACvD;;;;;;wCAEI,qBAAM,IAAA,6BAAiB,EAAC,mBAAmB,CAAC,EAAA;;wCAA5C,SAA4C,CAAC;;;;wCAE7C,iBAAK,CAAC,GAAG;6CACN,IAAI,CAAC,8LACuG,CAAC,CAAC;wCACjH,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;6BAEZ,CACF,EAAA;;oBAZD,SAYC,CAAC;;yBAGJ,qBAAM,IAAA,qBAAS,EAAC,iCAAiC,EAAE;;;;;;oCAE/C,qBAAM,IAAA,yCAA6B,EAAC,IAAI,EAAE,IAAI,CAAC,EAAA;;oCAA/C,SAA+C,CAAC;;;;oCAEhD,iBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sKACkG,CAAC,CAAC;oCACnH,IAAA,aAAK,EAAC,GAAC,CAAC,CAAC;;;;;yBAEZ,CAAC,EAAA;;oBARF,SAQE,CAAC;oBAE6B,qBAAM,IAAA,wCAA0B,GAAE,EAAA;;oBAA5D,uBAAuB,GAAG,SAAkC;yBAE9D,uBAAuB,EAAvB,yBAAuB;oBACzB,qBAAM,IAAA,qBAAS,EAAC,qBAAqB,EAAE;;;4CACrC,qBAAM,IAAA,+BAAiB,EAAC;4CACtB,IAAI,MAAA;4CACJ,UAAU,YAAA;4CACV,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;4CAC1C,SAAS,EAAE,eAAe,CAAC,EAAE;4CAC7B,GAAG,EAAE,SAAS;yCACf,CAAC,EAAA;;wCANF,SAME,CAAC;;;;6BACJ,CAAC,EAAA;;oBARF,SAQE,CAAC;;yBAGL,qBAAM,IAAA,oCAAsB,GAAE,EAAA;;oBAA9B,SAA8B,CAAC;oBAE/B,iBAAK,CAAC,KAAK,CAAC,YACZ,eAAK,CAAC,KAAK,CACX,iEAAiE,CAClE,iBAEC,eAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,iBAEtE,eAAK,CAAC,IAAI,CACV,uIACwD,CACzD,CAAE,CAAC,CAAC;;;;;CACJ","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport {\n addSentryCliConfig,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n rcCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport {\n initializeSentryOnEntryClient,\n instrumentSentryOnEntryServer,\n updateBuildScript,\n instrumentRootRoute,\n isRemixV2,\n loadRemixConfig,\n runRemixReveal,\n insertServerInstrumentationFile,\n createServerInstrumentationFile,\n updateStartScript,\n} from './sdk-setup';\nimport { debug } from '../utils/debug';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { isHydrogenApp } from './utils';\nimport { DEFAULT_URL } from '../../lib/Constants';\nimport { findFile } from '../utils/ast-utils';\nimport { configureVitePlugin } from '../sourcemaps/tools/vite';\nimport { createExamplePage } from './sdk-example';\n\nexport async function runRemixWizard(options: WizardOptions): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'remix',\n wizardOptions: options,\n },\n () => runRemixWizardWithTelemetry(options),\n );\n}\n\nasync function runRemixWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Remix Wizard',\n promoCode: options.promoCode,\n telemetryEnabled: options.telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const remixConfig = await loadRemixConfig();\n const packageJson = await getPackageDotJson();\n\n // We expect `@remix-run/dev` to be installed for every Remix project\n await ensurePackageIsInstalled(packageJson, '@remix-run/dev', 'Remix');\n\n const { selectedProject, authToken, sentryUrl, selfHosted } =\n await getOrAskForProjectData(options, 'javascript-remix');\n\n await installPackage({\n packageName: '@sentry/remix@^8',\n packageNameDisplayLabel: '@sentry/remix',\n alreadyInstalled: hasPackageInstalled('@sentry/remix', packageJson),\n });\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const isTS = isUsingTypeScript();\n const isV2 = isRemixV2(remixConfig, packageJson);\n const viteConfig = findFile('vite.config');\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 if (viteConfig) {\n await traceStep(\n 'Update vite configuration for sourcemap uploads',\n async () => {\n try {\n await configureVitePlugin({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n url: sentryUrl,\n selfHosted,\n authToken,\n });\n } catch (e) {\n clack.log\n .warn(`Could not update vite configuration to generate and upload sourcemaps.\n Please update your vite configuration manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n },\n );\n } else {\n await traceStep('Update build script for sourcemap uploads', async () => {\n try {\n await updateBuildScript({\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n url: sentryUrl === DEFAULT_URL ? undefined : sentryUrl,\n isHydrogen: isHydrogenApp(packageJson),\n });\n\n await addSentryCliConfig({ authToken }, rcCliSetupConfig);\n } catch (e) {\n clack.log\n .warn(`Could not update build script to generate and upload sourcemaps.\n Please update your build script manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n });\n }\n\n await traceStep('Instrument root route', async () => {\n try {\n await instrumentRootRoute(isV2, isTS);\n } catch (e) {\n clack.log.warn(`Could not instrument root route.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n traceStep('Reveal missing entry files', () => {\n try {\n runRemixReveal(isTS);\n } catch (e) {\n clack.log.warn(`Could not run 'npx remix reveal'.\n Please create your entry files manually`);\n debug(e);\n }\n });\n\n await traceStep('Initialize Sentry on client entry', async () => {\n try {\n await initializeSentryOnEntryClient(dsn, isTS, selectedFeatures);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on client entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n let instrumentationFile = '';\n\n await traceStep('Create server instrumentation file', async () => {\n try {\n instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n });\n\n let serverFileInstrumented = false;\n\n await traceStep(\n 'Create server instrumentation file and import it',\n async () => {\n try {\n serverFileInstrumented = await insertServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n },\n );\n\n if (!serverFileInstrumented && instrumentationFile) {\n await traceStep(\n 'Update `start` script to import instrumentation file.',\n async () => {\n try {\n await updateStartScript(instrumentationFile);\n } catch (e) {\n clack.log\n .warn(`Could not automatically add Sentry initialization to server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n },\n );\n }\n\n await traceStep('Instrument server `handleError`', async () => {\n try {\n await instrumentSentryOnEntryServer(isV2, isTS);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('Create example page', async () => {\n await createExamplePage({\n isTS,\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n });\n }\n\n await runPrettierIfInstalled();\n\n clack.outro(`\n${chalk.green(\n 'Sentry has been successfully configured for your Remix project.',\n)}\n\n${chalk.cyan('You can now deploy your project to see Sentry in action.')}\n\n${chalk.cyan(\n `To learn more about how to use Sentry with Remix, visit our documentation:\nhttps://docs.sentry.io/platforms/javascript/guides/remix/`,\n)}`);\n}\n"]}
1
+ {"version":3,"file":"remix-wizard.js","sourceRoot":"","sources":["../../../src/remix/remix-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport {\n addSentryCliConfig,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n rcCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport {\n initializeSentryOnEntryClient,\n instrumentSentryOnEntryServer,\n updateBuildScript,\n instrumentRootRoute,\n isRemixV2,\n loadRemixConfig,\n runRemixReveal,\n insertServerInstrumentationFile,\n createServerInstrumentationFile,\n updateStartScript,\n} from './sdk-setup';\nimport { debug } from '../utils/debug';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { isHydrogenApp } from './utils';\nimport { DEFAULT_URL } from '../../lib/Constants';\nimport { findFile } from '../utils/ast-utils';\nimport { configureVitePlugin } from '../sourcemaps/tools/vite';\nimport { createExamplePage } from './sdk-example';\n\nexport async function runRemixWizard(options: WizardOptions): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'remix',\n wizardOptions: options,\n },\n () => runRemixWizardWithTelemetry(options),\n );\n}\n\nasync function runRemixWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry Remix Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const remixConfig = await loadRemixConfig();\n const packageJson = await getPackageDotJson();\n\n // We expect `@remix-run/dev` to be installed for every Remix project\n await ensurePackageIsInstalled(packageJson, '@remix-run/dev', 'Remix');\n\n const { selectedProject, authToken, sentryUrl, selfHosted } =\n await getOrAskForProjectData(options, 'javascript-remix');\n\n await installPackage({\n packageName: '@sentry/remix@^9',\n packageNameDisplayLabel: '@sentry/remix',\n alreadyInstalled: hasPackageInstalled('@sentry/remix', packageJson),\n forceInstall,\n });\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const isTS = isUsingTypeScript();\n const isV2 = isRemixV2(remixConfig, packageJson);\n const viteConfig = findFile('vite.config');\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 if (viteConfig) {\n await traceStep(\n 'Update vite configuration for sourcemap uploads',\n async () => {\n try {\n await configureVitePlugin({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n url: sentryUrl,\n selfHosted,\n authToken,\n });\n } catch (e) {\n clack.log\n .warn(`Could not update vite configuration to generate and upload sourcemaps.\n Please update your vite configuration manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n },\n );\n } else {\n await traceStep('Update build script for sourcemap uploads', async () => {\n try {\n await updateBuildScript({\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n url: sentryUrl === DEFAULT_URL ? undefined : sentryUrl,\n isHydrogen: isHydrogenApp(packageJson),\n });\n\n await addSentryCliConfig({ authToken }, rcCliSetupConfig);\n } catch (e) {\n clack.log\n .warn(`Could not update build script to generate and upload sourcemaps.\n Please update your build script manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n });\n }\n\n await traceStep('Instrument root route', async () => {\n try {\n await instrumentRootRoute(isV2, isTS);\n } catch (e) {\n clack.log.warn(`Could not instrument root route.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n traceStep('Reveal missing entry files', () => {\n try {\n runRemixReveal(isTS);\n } catch (e) {\n clack.log.warn(`Could not run 'npx remix reveal'.\n Please create your entry files manually`);\n debug(e);\n }\n });\n\n await traceStep('Initialize Sentry on client entry', async () => {\n try {\n await initializeSentryOnEntryClient(dsn, isTS, selectedFeatures);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on client entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n let instrumentationFile = '';\n\n await traceStep('Create server instrumentation file', async () => {\n try {\n instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n });\n\n let serverFileInstrumented = false;\n\n await traceStep(\n 'Create server instrumentation file and import it',\n async () => {\n try {\n serverFileInstrumented = await insertServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n },\n );\n\n if (!serverFileInstrumented && instrumentationFile) {\n await traceStep(\n 'Update `start` script to import instrumentation file.',\n async () => {\n try {\n await updateStartScript(instrumentationFile);\n } catch (e) {\n clack.log\n .warn(`Could not automatically add Sentry initialization to server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n },\n );\n }\n\n await traceStep('Instrument server `handleError`', async () => {\n try {\n await instrumentSentryOnEntryServer(isV2, isTS);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('Create example page', async () => {\n await createExamplePage({\n isTS,\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n });\n }\n\n await runPrettierIfInstalled();\n\n clack.outro(`\n${chalk.green(\n 'Sentry has been successfully configured for your Remix project.',\n)}\n\n${chalk.cyan('You can now deploy your project to see Sentry in action.')}\n\n${chalk.cyan(\n `To learn more about how to use Sentry with Remix, visit our documentation:\nhttps://docs.sentry.io/platforms/javascript/guides/remix/`,\n)}`);\n}\n"]}
@@ -123,10 +123,6 @@ function getInitCallArgs(dsn, type, selectedFeatures) {
123
123
  initCallArgs.replaysOnErrorSampleRate = 1.0;
124
124
  }
125
125
  }
126
- // Adding autoInstrumentRemix option only for server
127
- if (type === 'server') {
128
- initCallArgs.autoInstrumentRemix = true;
129
- }
130
126
  return initCallArgs;
131
127
  }
132
128
  function insertClientInitCall(dsn, originalHooksMod, selectedFeatures) {
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/remix/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { Program } from '@babel/types';\n\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport type { ProxifiedModule } from 'magicast';\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as url from 'url';\nimport * as childProcess from 'child_process';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { gte, minVersion } from 'semver';\n\nimport {\n builders,\n generateCode,\n loadFile,\n parseModule,\n writeFile,\n // @ts-expect-error - magicast is ESM and TS complains about that. It works though\n} from 'magicast';\nimport type { PackageDotJson } from '../utils/package-json';\nimport { getPackageVersion } from '../utils/package-json';\nimport {\n getAfterImportsInsertionIndex,\n hasSentryContent,\n serverHasInstrumentationImport,\n} from './utils';\nimport { instrumentRootRouteV1 } from './codemods/root-v1';\nimport { instrumentRootRouteV2 } from './codemods/root-v2';\nimport { instrumentHandleError } from './codemods/handle-error';\nimport { getPackageDotJson } from '../utils/clack-utils';\nimport { findCustomExpressServerImplementation } from './codemods/express-server';\n\nexport type PartialRemixConfig = {\n unstable_dev?: boolean;\n future?: {\n v2_dev?: boolean;\n v2_errorBoundary?: boolean;\n v2_headers?: boolean;\n v2_meta?: boolean;\n v2_normalizeFormMethod?: boolean;\n v2_routeConvention?: boolean;\n };\n};\n\nconst REMIX_CONFIG_FILE = 'remix.config.js';\nconst REMIX_REVEAL_COMMAND = 'npx remix reveal';\n\nexport function runRemixReveal(isTS: boolean): void {\n // Check if entry files already exist\n const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;\n const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;\n\n const clientEntryPath = path.join(process.cwd(), 'app', clientEntryFilename);\n const serverEntryPath = path.join(process.cwd(), 'app', serverEntryFilename);\n\n if (fs.existsSync(clientEntryPath) && fs.existsSync(serverEntryPath)) {\n clack.log.info(\n `Found entry files ${chalk.cyan(clientEntryFilename)} and ${chalk.cyan(\n serverEntryFilename,\n )}.`,\n );\n } else {\n clack.log.info(\n `Couldn't find entry files in your project. Trying to run ${chalk.cyan(\n REMIX_REVEAL_COMMAND,\n )}...`,\n );\n\n clack.log.info(childProcess.execSync(REMIX_REVEAL_COMMAND).toString());\n }\n}\n\nfunction getInitCallArgs(\n dsn: string,\n type: 'client' | 'server',\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const initCallArgs = {\n dsn,\n } as Record<string, unknown>;\n\n // Adding tracing sample rate for both client and server\n if (selectedFeatures.performance) {\n initCallArgs.tracesSampleRate = 1.0;\n }\n\n // Adding integrations and replay options only for client\n if (\n type === 'client' &&\n (selectedFeatures.performance || selectedFeatures.replay)\n ) {\n initCallArgs.integrations = [];\n\n if (selectedFeatures.performance) {\n // @ts-expect-error - Adding Proxified AST node to the array\n initCallArgs.integrations.push(\n builders.functionCall(\n 'Sentry.browserTracingIntegration',\n builders.raw('{ useEffect, useLocation, useMatches }'),\n ),\n );\n }\n\n if (selectedFeatures.replay) {\n // @ts-expect-error - Adding Proxified AST node to the array\n initCallArgs.integrations.push(\n builders.functionCall('Sentry.replayIntegration', {\n maskAllText: true,\n blockAllMedia: true,\n }),\n );\n\n initCallArgs.replaysSessionSampleRate = 0.1;\n initCallArgs.replaysOnErrorSampleRate = 1.0;\n }\n }\n\n // Adding autoInstrumentRemix option only for server\n if (type === 'server') {\n initCallArgs.autoInstrumentRemix = true;\n }\n\n return initCallArgs;\n}\n\nfunction insertClientInitCall(\n dsn: string,\n originalHooksMod: ProxifiedModule<any>,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): void {\n const initCallArgs = getInitCallArgs(dsn, 'client', selectedFeatures);\n const initCall = builders.functionCall('Sentry.init', initCallArgs);\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n const initCallInsertionIndex =\n getAfterImportsInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-expect-error - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n}\n\nexport function generateServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n // create an empty file named `instrument.server.mjs`\n const instrumentationFile = 'instrumentation.server.mjs';\n const instrumentationFileMod = parseModule('');\n\n instrumentationFileMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n const initCallArgs = getInitCallArgs(dsn, 'server', selectedFeatures);\n const initCall = builders.functionCall('Sentry.init', initCallArgs);\n\n const instrumentationFileModAST = instrumentationFileMod.$ast as Program;\n\n const initCallInsertionIndex = getAfterImportsInsertionIndex(\n instrumentationFileModAST,\n );\n\n instrumentationFileModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-expect-error - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n\n return { instrumentationFile, instrumentationFileMod };\n}\n\nexport async function createServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const { instrumentationFile, instrumentationFileMod } =\n generateServerInstrumentationFile(dsn, selectedFeatures);\n\n await writeFile(instrumentationFileMod.$ast, instrumentationFile);\n\n return instrumentationFile;\n}\n\nexport async function insertServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n\n const expressServerPath = await findCustomExpressServerImplementation();\n\n if (!expressServerPath) {\n return false;\n }\n\n const originalExpressServerMod = await loadFile(expressServerPath);\n\n if (\n serverHasInstrumentationImport(\n expressServerPath,\n originalExpressServerMod.$code,\n )\n ) {\n clack.log.warn(\n `File ${chalk.cyan(\n path.basename(expressServerPath),\n )} already contains instrumentation import.\nSkipping adding instrumentation functionality to ${chalk.cyan(\n path.basename(expressServerPath),\n )}.`,\n );\n\n return true;\n }\n\n originalExpressServerMod.$code = `import './${instrumentationFile}';\\n${originalExpressServerMod.$code}`;\n\n fs.writeFileSync(expressServerPath, originalExpressServerMod.$code);\n\n return true;\n}\n\nexport function isRemixV2(\n remixConfig: PartialRemixConfig,\n packageJson: PackageDotJson,\n): boolean {\n const remixVersion = getPackageVersion('@remix-run/react', packageJson);\n if (!remixVersion) {\n return false;\n }\n\n const minVer = minVersion(remixVersion);\n\n if (!minVer) {\n return false;\n }\n\n const isV2Remix = gte(minVer, '2.0.0');\n\n return isV2Remix || remixConfig?.future?.v2_errorBoundary || false;\n}\n\nexport async function loadRemixConfig(): Promise<PartialRemixConfig> {\n const configFilePath = path.join(process.cwd(), REMIX_CONFIG_FILE);\n\n try {\n if (!fs.existsSync(configFilePath)) {\n return {};\n }\n\n const configUrl = url.pathToFileURL(configFilePath).href;\n const remixConfigModule = (await import(configUrl)) as {\n default: PartialRemixConfig;\n };\n\n return remixConfigModule?.default || {};\n } catch (e: unknown) {\n clack.log.error(`Couldn't load ${REMIX_CONFIG_FILE}.`);\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\n return {};\n }\n}\n\nexport async function instrumentRootRoute(\n isV2?: boolean,\n isTS?: boolean,\n): Promise<void> {\n const rootFilename = `root.${isTS ? 'tsx' : 'jsx'}`;\n\n if (isV2) {\n await instrumentRootRouteV2(rootFilename);\n } else {\n await instrumentRootRouteV1(rootFilename);\n }\n\n clack.log.success(\n `Successfully instrumented root route ${chalk.cyan(rootFilename)}.`,\n );\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n}\n\nexport async function updateBuildScript(args: {\n org: string;\n project: string;\n url?: string;\n isHydrogen: boolean;\n}): Promise<void> {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n\n const buildCommand = args.isHydrogen\n ? 'shopify hydrogen build'\n : 'remix build';\n\n const instrumentedBuildCommand =\n `${buildCommand} --sourcemap && sentry-upload-sourcemaps --org ${args.org} --project ${args.project}` +\n (args.url ? ` --url ${args.url}` : '') +\n (args.isHydrogen ? ' --buildPath ./dist' : '');\n\n if (!packageJson.scripts.build) {\n packageJson.scripts.build = instrumentedBuildCommand;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n } else if (packageJson.scripts.build.includes(buildCommand)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n packageJson.scripts.build = packageJson.scripts.build.replace(\n buildCommand,\n instrumentedBuildCommand,\n );\n } else {\n throw new Error(\n \"`build` script doesn't contain a known build command. Please update it manually.\",\n );\n }\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageJson, null, 2),\n );\n\n clack.log.success(\n `Successfully updated ${chalk.cyan('build')} script in ${chalk.cyan(\n 'package.json',\n )} to generate and upload sourcemaps.`,\n );\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n}\n\nexport function updateEntryClientMod(\n originalEntryClientMod: ProxifiedModule<any>,\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): ProxifiedModule<any> {\n originalEntryClientMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n if (selectedFeatures.performance) {\n originalEntryClientMod.imports.$add({\n from: '@remix-run/react',\n imported: 'useLocation',\n local: 'useLocation',\n });\n\n originalEntryClientMod.imports.$add({\n from: '@remix-run/react',\n imported: 'useMatches',\n local: 'useMatches',\n });\n\n originalEntryClientMod.imports.$add({\n from: 'react',\n imported: 'useEffect',\n local: 'useEffect',\n });\n }\n\n insertClientInitCall(dsn, originalEntryClientMod, selectedFeatures);\n\n return originalEntryClientMod;\n}\n\nexport async function initializeSentryOnEntryClient(\n dsn: string,\n isTS: boolean,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): Promise<void> {\n const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;\n\n const originalEntryClient = path.join(\n process.cwd(),\n 'app',\n clientEntryFilename,\n );\n\n const originalEntryClientMod = await loadFile(originalEntryClient);\n\n if (hasSentryContent(originalEntryClient, originalEntryClientMod.$code)) {\n return;\n }\n\n const updatedEntryClientMod = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n await writeFile(\n updatedEntryClientMod.$ast,\n path.join(process.cwd(), 'app', clientEntryFilename),\n );\n\n clack.log.success(\n `Successfully initialized Sentry on client entry point ${chalk.cyan(\n clientEntryFilename,\n )}`,\n );\n}\n\nexport async function updateStartScript(instrumentationFile: string) {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson.scripts || !packageJson.scripts.start) {\n throw new Error(\n \"Couldn't find a `start` script in your package.json. Please add one manually.\",\n );\n }\n\n if (packageJson.scripts.start.includes('NODE_OPTIONS')) {\n clack.log.warn(\n `Found existing NODE_OPTIONS in ${chalk.cyan(\n 'start',\n )} script. Skipping adding Sentry initialization.`,\n );\n\n return;\n }\n\n if (\n !packageJson.scripts.start.includes('remix-serve') &&\n // Adding a following empty space not to match a path that includes `node`\n !packageJson.scripts.start.includes('node ')\n ) {\n clack.log.warn(\n `Found a ${chalk.cyan('start')} script that doesn't use ${chalk.cyan(\n 'remix-serve',\n )} or ${chalk.cyan('node')}. Skipping adding Sentry initialization.`,\n );\n\n return;\n }\n\n const startCommand = packageJson.scripts.start;\n\n packageJson.scripts.start = `NODE_OPTIONS='--import ./${instrumentationFile}' ${startCommand}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageJson, null, 2),\n );\n\n clack.log.success(\n `Successfully updated ${chalk.cyan('start')} script in ${chalk.cyan(\n 'package.json',\n )} to include Sentry initialization on start.`,\n );\n}\n\nexport async function instrumentSentryOnEntryServer(\n isV2: boolean,\n isTS: boolean,\n): Promise<void> {\n const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;\n\n const originalEntryServer = path.join(\n process.cwd(),\n 'app',\n serverEntryFilename,\n );\n\n const originalEntryServerMod = await loadFile(originalEntryServer);\n\n if (hasSentryContent(originalEntryServer, originalEntryServerMod.$code)) {\n return;\n }\n\n originalEntryServerMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n if (isV2) {\n const handleErrorInstrumented = instrumentHandleError(\n originalEntryServerMod,\n serverEntryFilename,\n );\n\n if (handleErrorInstrumented) {\n clack.log.success(\n `Instrumented ${chalk.cyan('handleError')} in ${chalk.cyan(\n `${serverEntryFilename}`,\n )}`,\n );\n }\n }\n\n await writeFile(\n originalEntryServerMod.$ast,\n path.join(process.cwd(), 'app', serverEntryFilename),\n );\n\n clack.log.success(\n `Successfully initialized Sentry on server entry point ${chalk.cyan(\n serverEntryFilename,\n )}.`,\n );\n}\n"]}
1
+ {"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/remix/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { Program } from '@babel/types';\n\n// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport type { ProxifiedModule } from 'magicast';\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as url from 'url';\nimport * as childProcess from 'child_process';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { gte, minVersion } from 'semver';\n\nimport {\n builders,\n generateCode,\n loadFile,\n parseModule,\n writeFile,\n // @ts-expect-error - magicast is ESM and TS complains about that. It works though\n} from 'magicast';\nimport type { PackageDotJson } from '../utils/package-json';\nimport { getPackageVersion } from '../utils/package-json';\nimport {\n getAfterImportsInsertionIndex,\n hasSentryContent,\n serverHasInstrumentationImport,\n} from './utils';\nimport { instrumentRootRouteV1 } from './codemods/root-v1';\nimport { instrumentRootRouteV2 } from './codemods/root-v2';\nimport { instrumentHandleError } from './codemods/handle-error';\nimport { getPackageDotJson } from '../utils/clack-utils';\nimport { findCustomExpressServerImplementation } from './codemods/express-server';\n\nexport type PartialRemixConfig = {\n unstable_dev?: boolean;\n future?: {\n v2_dev?: boolean;\n v2_errorBoundary?: boolean;\n v2_headers?: boolean;\n v2_meta?: boolean;\n v2_normalizeFormMethod?: boolean;\n v2_routeConvention?: boolean;\n };\n};\n\nconst REMIX_CONFIG_FILE = 'remix.config.js';\nconst REMIX_REVEAL_COMMAND = 'npx remix reveal';\n\nexport function runRemixReveal(isTS: boolean): void {\n // Check if entry files already exist\n const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;\n const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;\n\n const clientEntryPath = path.join(process.cwd(), 'app', clientEntryFilename);\n const serverEntryPath = path.join(process.cwd(), 'app', serverEntryFilename);\n\n if (fs.existsSync(clientEntryPath) && fs.existsSync(serverEntryPath)) {\n clack.log.info(\n `Found entry files ${chalk.cyan(clientEntryFilename)} and ${chalk.cyan(\n serverEntryFilename,\n )}.`,\n );\n } else {\n clack.log.info(\n `Couldn't find entry files in your project. Trying to run ${chalk.cyan(\n REMIX_REVEAL_COMMAND,\n )}...`,\n );\n\n clack.log.info(childProcess.execSync(REMIX_REVEAL_COMMAND).toString());\n }\n}\n\nfunction getInitCallArgs(\n dsn: string,\n type: 'client' | 'server',\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const initCallArgs = {\n dsn,\n } as Record<string, unknown>;\n\n // Adding tracing sample rate for both client and server\n if (selectedFeatures.performance) {\n initCallArgs.tracesSampleRate = 1.0;\n }\n\n // Adding integrations and replay options only for client\n if (\n type === 'client' &&\n (selectedFeatures.performance || selectedFeatures.replay)\n ) {\n initCallArgs.integrations = [];\n\n if (selectedFeatures.performance) {\n // @ts-expect-error - Adding Proxified AST node to the array\n initCallArgs.integrations.push(\n builders.functionCall(\n 'Sentry.browserTracingIntegration',\n builders.raw('{ useEffect, useLocation, useMatches }'),\n ),\n );\n }\n\n if (selectedFeatures.replay) {\n // @ts-expect-error - Adding Proxified AST node to the array\n initCallArgs.integrations.push(\n builders.functionCall('Sentry.replayIntegration', {\n maskAllText: true,\n blockAllMedia: true,\n }),\n );\n\n initCallArgs.replaysSessionSampleRate = 0.1;\n initCallArgs.replaysOnErrorSampleRate = 1.0;\n }\n }\n\n return initCallArgs;\n}\n\nfunction insertClientInitCall(\n dsn: string,\n originalHooksMod: ProxifiedModule<any>,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): void {\n const initCallArgs = getInitCallArgs(dsn, 'client', selectedFeatures);\n const initCall = builders.functionCall('Sentry.init', initCallArgs);\n\n const originalHooksModAST = originalHooksMod.$ast as Program;\n const initCallInsertionIndex =\n getAfterImportsInsertionIndex(originalHooksModAST);\n\n originalHooksModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-expect-error - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n}\n\nexport function generateServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n // create an empty file named `instrument.server.mjs`\n const instrumentationFile = 'instrumentation.server.mjs';\n const instrumentationFileMod = parseModule('');\n\n instrumentationFileMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n const initCallArgs = getInitCallArgs(dsn, 'server', selectedFeatures);\n const initCall = builders.functionCall('Sentry.init', initCallArgs);\n\n const instrumentationFileModAST = instrumentationFileMod.$ast as Program;\n\n const initCallInsertionIndex = getAfterImportsInsertionIndex(\n instrumentationFileModAST,\n );\n\n instrumentationFileModAST.body.splice(\n initCallInsertionIndex,\n 0,\n // @ts-expect-error - string works here because the AST is proxified by magicast\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n generateCode(initCall).code,\n );\n\n return { instrumentationFile, instrumentationFileMod };\n}\n\nexport async function createServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const { instrumentationFile, instrumentationFileMod } =\n generateServerInstrumentationFile(dsn, selectedFeatures);\n\n await writeFile(instrumentationFileMod.$ast, instrumentationFile);\n\n return instrumentationFile;\n}\n\nexport async function insertServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n) {\n const instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n\n const expressServerPath = await findCustomExpressServerImplementation();\n\n if (!expressServerPath) {\n return false;\n }\n\n const originalExpressServerMod = await loadFile(expressServerPath);\n\n if (\n serverHasInstrumentationImport(\n expressServerPath,\n originalExpressServerMod.$code,\n )\n ) {\n clack.log.warn(\n `File ${chalk.cyan(\n path.basename(expressServerPath),\n )} already contains instrumentation import.\nSkipping adding instrumentation functionality to ${chalk.cyan(\n path.basename(expressServerPath),\n )}.`,\n );\n\n return true;\n }\n\n originalExpressServerMod.$code = `import './${instrumentationFile}';\\n${originalExpressServerMod.$code}`;\n\n fs.writeFileSync(expressServerPath, originalExpressServerMod.$code);\n\n return true;\n}\n\nexport function isRemixV2(\n remixConfig: PartialRemixConfig,\n packageJson: PackageDotJson,\n): boolean {\n const remixVersion = getPackageVersion('@remix-run/react', packageJson);\n if (!remixVersion) {\n return false;\n }\n\n const minVer = minVersion(remixVersion);\n\n if (!minVer) {\n return false;\n }\n\n const isV2Remix = gte(minVer, '2.0.0');\n\n return isV2Remix || remixConfig?.future?.v2_errorBoundary || false;\n}\n\nexport async function loadRemixConfig(): Promise<PartialRemixConfig> {\n const configFilePath = path.join(process.cwd(), REMIX_CONFIG_FILE);\n\n try {\n if (!fs.existsSync(configFilePath)) {\n return {};\n }\n\n const configUrl = url.pathToFileURL(configFilePath).href;\n const remixConfigModule = (await import(configUrl)) as {\n default: PartialRemixConfig;\n };\n\n return remixConfigModule?.default || {};\n } catch (e: unknown) {\n clack.log.error(`Couldn't load ${REMIX_CONFIG_FILE}.`);\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\n return {};\n }\n}\n\nexport async function instrumentRootRoute(\n isV2?: boolean,\n isTS?: boolean,\n): Promise<void> {\n const rootFilename = `root.${isTS ? 'tsx' : 'jsx'}`;\n\n if (isV2) {\n await instrumentRootRouteV2(rootFilename);\n } else {\n await instrumentRootRouteV1(rootFilename);\n }\n\n clack.log.success(\n `Successfully instrumented root route ${chalk.cyan(rootFilename)}.`,\n );\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n}\n\nexport async function updateBuildScript(args: {\n org: string;\n project: string;\n url?: string;\n isHydrogen: boolean;\n}): Promise<void> {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n\n const buildCommand = args.isHydrogen\n ? 'shopify hydrogen build'\n : 'remix build';\n\n const instrumentedBuildCommand =\n `${buildCommand} --sourcemap && sentry-upload-sourcemaps --org ${args.org} --project ${args.project}` +\n (args.url ? ` --url ${args.url}` : '') +\n (args.isHydrogen ? ' --buildPath ./dist' : '');\n\n if (!packageJson.scripts.build) {\n packageJson.scripts.build = instrumentedBuildCommand;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n } else if (packageJson.scripts.build.includes(buildCommand)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n packageJson.scripts.build = packageJson.scripts.build.replace(\n buildCommand,\n instrumentedBuildCommand,\n );\n } else {\n throw new Error(\n \"`build` script doesn't contain a known build command. Please update it manually.\",\n );\n }\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageJson, null, 2),\n );\n\n clack.log.success(\n `Successfully updated ${chalk.cyan('build')} script in ${chalk.cyan(\n 'package.json',\n )} to generate and upload sourcemaps.`,\n );\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n}\n\nexport function updateEntryClientMod(\n originalEntryClientMod: ProxifiedModule<any>,\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): ProxifiedModule<any> {\n originalEntryClientMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n if (selectedFeatures.performance) {\n originalEntryClientMod.imports.$add({\n from: '@remix-run/react',\n imported: 'useLocation',\n local: 'useLocation',\n });\n\n originalEntryClientMod.imports.$add({\n from: '@remix-run/react',\n imported: 'useMatches',\n local: 'useMatches',\n });\n\n originalEntryClientMod.imports.$add({\n from: 'react',\n imported: 'useEffect',\n local: 'useEffect',\n });\n }\n\n insertClientInitCall(dsn, originalEntryClientMod, selectedFeatures);\n\n return originalEntryClientMod;\n}\n\nexport async function initializeSentryOnEntryClient(\n dsn: string,\n isTS: boolean,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n },\n): Promise<void> {\n const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;\n\n const originalEntryClient = path.join(\n process.cwd(),\n 'app',\n clientEntryFilename,\n );\n\n const originalEntryClientMod = await loadFile(originalEntryClient);\n\n if (hasSentryContent(originalEntryClient, originalEntryClientMod.$code)) {\n return;\n }\n\n const updatedEntryClientMod = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n await writeFile(\n updatedEntryClientMod.$ast,\n path.join(process.cwd(), 'app', clientEntryFilename),\n );\n\n clack.log.success(\n `Successfully initialized Sentry on client entry point ${chalk.cyan(\n clientEntryFilename,\n )}`,\n );\n}\n\nexport async function updateStartScript(instrumentationFile: string) {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson.scripts || !packageJson.scripts.start) {\n throw new Error(\n \"Couldn't find a `start` script in your package.json. Please add one manually.\",\n );\n }\n\n if (packageJson.scripts.start.includes('NODE_OPTIONS')) {\n clack.log.warn(\n `Found existing NODE_OPTIONS in ${chalk.cyan(\n 'start',\n )} script. Skipping adding Sentry initialization.`,\n );\n\n return;\n }\n\n if (\n !packageJson.scripts.start.includes('remix-serve') &&\n // Adding a following empty space not to match a path that includes `node`\n !packageJson.scripts.start.includes('node ')\n ) {\n clack.log.warn(\n `Found a ${chalk.cyan('start')} script that doesn't use ${chalk.cyan(\n 'remix-serve',\n )} or ${chalk.cyan('node')}. Skipping adding Sentry initialization.`,\n );\n\n return;\n }\n\n const startCommand = packageJson.scripts.start;\n\n packageJson.scripts.start = `NODE_OPTIONS='--import ./${instrumentationFile}' ${startCommand}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageJson, null, 2),\n );\n\n clack.log.success(\n `Successfully updated ${chalk.cyan('start')} script in ${chalk.cyan(\n 'package.json',\n )} to include Sentry initialization on start.`,\n );\n}\n\nexport async function instrumentSentryOnEntryServer(\n isV2: boolean,\n isTS: boolean,\n): Promise<void> {\n const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;\n\n const originalEntryServer = path.join(\n process.cwd(),\n 'app',\n serverEntryFilename,\n );\n\n const originalEntryServerMod = await loadFile(originalEntryServer);\n\n if (hasSentryContent(originalEntryServer, originalEntryServerMod.$code)) {\n return;\n }\n\n originalEntryServerMod.imports.$add({\n from: '@sentry/remix',\n imported: '*',\n local: 'Sentry',\n });\n\n if (isV2) {\n const handleErrorInstrumented = instrumentHandleError(\n originalEntryServerMod,\n serverEntryFilename,\n );\n\n if (handleErrorInstrumented) {\n clack.log.success(\n `Instrumented ${chalk.cyan('handleError')} in ${chalk.cyan(\n `${serverEntryFilename}`,\n )}`,\n );\n }\n }\n\n await writeFile(\n originalEntryServerMod.$ast,\n path.join(process.cwd(), 'app', serverEntryFilename),\n );\n\n clack.log.success(\n `Successfully initialized Sentry on server entry point ${chalk.cyan(\n serverEntryFilename,\n )}.`,\n );\n}\n"]}
package/dist/src/run.d.ts CHANGED
@@ -25,6 +25,7 @@ type Args = {
25
25
  org?: string;
26
26
  project?: string;
27
27
  saas?: boolean;
28
+ forceInstall?: boolean;
28
29
  };
29
30
  export declare function run(argv: Args): Promise<void>;
30
31
  export {};
package/dist/src/run.js CHANGED
@@ -153,6 +153,7 @@ function run(argv) {
153
153
  projectSlug: finalArgs.project,
154
154
  saas: finalArgs.saas,
155
155
  preSelectedProject: preSelectedProjectArgsToObject(finalArgs),
156
+ forceInstall: finalArgs.forceInstall,
156
157
  };
157
158
  _a = integration;
158
159
  switch (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.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 { abortIfCancelled } from './utils/clack-utils';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\n\nimport { run as legacyRun } from '../lib/Setup';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport type { Platform } from '../lib/Constants';\nimport type { PackageDotJson } from './utils/package-json';\n\ntype WizardIntegration =\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean;\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${tryGetWizardVersion()}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard({\n ...wizardOptions,\n uninstall: finalArgs.uninstall,\n });\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard(wizardOptions);\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(argv);\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(argv);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\n/**\n * TODO: replace with rollup replace whenever we switch to rollup\n */\nfunction tryGetWizardVersion(): string {\n try {\n const wizardPkgJson = require('../package.json') as PackageDotJson;\n return wizardPkgJson.version ?? '';\n } catch {\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.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 { abortIfCancelled } from './utils/clack-utils';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\n\nimport { run as legacyRun } from '../lib/Setup';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport type { Platform } from '../lib/Constants';\nimport type { PackageDotJson } from './utils/package-json';\n\ntype WizardIntegration =\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean;\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n forceInstall?: boolean;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${tryGetWizardVersion()}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n forceInstall: finalArgs.forceInstall,\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard({\n ...wizardOptions,\n uninstall: finalArgs.uninstall,\n });\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard(wizardOptions);\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(argv);\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(argv);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\n/**\n * TODO: replace with rollup replace whenever we switch to rollup\n */\nfunction tryGetWizardVersion(): string {\n try {\n const wizardPkgJson = require('../package.json') as PackageDotJson;\n return wizardPkgJson.version ?? '';\n } catch {\n return '';\n }\n}\n"]}
@@ -88,14 +88,15 @@ function runSvelteKitWizard(options) {
88
88
  exports.runSvelteKitWizard = runSvelteKitWizard;
89
89
  function runSvelteKitWizardWithTelemetry(options) {
90
90
  return __awaiter(this, void 0, void 0, function () {
91
- var packageJson, kitVersion, kitVersionBucket, shouldContinue, _a, selectedProject, selfHosted, sentryUrl, authToken, sdkAlreadyInstalled, svelteConfig, e_1, shouldCreateExamplePage, e_2;
91
+ var promoCode, telemetryEnabled, forceInstall, packageJson, kitVersion, kitVersionBucket, shouldContinue, _a, selectedProject, selfHosted, sentryUrl, authToken, sdkAlreadyInstalled, svelteConfig, e_1, shouldCreateExamplePage, e_2;
92
92
  return __generator(this, function (_b) {
93
93
  switch (_b.label) {
94
94
  case 0:
95
+ promoCode = options.promoCode, telemetryEnabled = options.telemetryEnabled, forceInstall = options.forceInstall;
95
96
  (0, clack_utils_1.printWelcome)({
96
97
  wizardName: 'Sentry SvelteKit Wizard',
97
- promoCode: options.promoCode,
98
- telemetryEnabled: options.telemetryEnabled,
98
+ promoCode: promoCode,
99
+ telemetryEnabled: telemetryEnabled,
99
100
  });
100
101
  return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)()];
101
102
  case 1:
@@ -137,9 +138,10 @@ function runSvelteKitWizardWithTelemetry(options) {
137
138
  sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('@sentry/sveltekit', packageJson);
138
139
  Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);
139
140
  return [4 /*yield*/, (0, clack_utils_1.installPackage)({
140
- packageName: '@sentry/sveltekit@^8',
141
+ packageName: '@sentry/sveltekit@^9',
141
142
  packageNameDisplayLabel: '@sentry/sveltekit',
142
143
  alreadyInstalled: sdkAlreadyInstalled,
144
+ forceInstall: forceInstall,
143
145
  })];
144
146
  case 8:
145
147
  _b.sent();
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit-wizard.js","sourceRoot":"","sources":["../../../src/sveltekit/sveltekit-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 chalk from 'chalk';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles, loadSvelteConfig } from './sdk-setup';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { getKitVersionBucket, getSvelteVersionBucket } from './utils';\nimport { NPM, detectPackageManger } from '../utils/package-manager';\n\nexport async function runSvelteKitWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sveltekit',\n wizardOptions: options,\n },\n () => runSvelteKitWizardWithTelemetry(options),\n );\n}\n\nexport async function runSvelteKitWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry SvelteKit 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, '@sveltejs/kit', 'Sveltekit');\n\n const kitVersion = getPackageVersion('@sveltejs/kit', packageJson);\n const kitVersionBucket = getKitVersionBucket(kitVersion);\n Sentry.setTag('sveltekit-version', kitVersionBucket);\n\n if (kitVersionBucket === '0.x') {\n clack.log.warn(\n \"It seems you're using a SvelteKit version <1.0.0 which is not supported by Sentry.\\nWe recommend upgrading to the latest 1.x 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 Sentry.setTag(\n 'svelte-version',\n getSvelteVersionBucket(getPackageVersion('svelte', packageJson)),\n );\n\n const { selectedProject, selfHosted, sentryUrl, authToken } =\n await getOrAskForProjectData(options, 'javascript-sveltekit');\n\n const sdkAlreadyInstalled = hasPackageInstalled(\n '@sentry/sveltekit',\n packageJson,\n );\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n await installPackage({\n packageName: '@sentry/sveltekit@^8',\n packageNameDisplayLabel: '@sentry/sveltekit',\n alreadyInstalled: sdkAlreadyInstalled,\n });\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const svelteConfig = await traceStep('load-svelte-config', loadSvelteConfig);\n\n try {\n await traceStep('configure-sdk', () =>\n createOrMergeSvelteKitFiles(\n {\n dsn: selectedProject.keys[0].dsn.public,\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n },\n svelteConfig,\n ),\n );\n } catch (e: unknown) {\n clack.log.error('Error while setting up the SvelteKit SDK:');\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('Error while setting up the SvelteKit SDK');\n await abort('Exiting Wizard');\n return;\n }\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage(\n '/sentry-example',\n );\n\n if (shouldCreateExamplePage) {\n try {\n await traceStep('create-example-page', () =>\n createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n }),\n );\n } catch (e: unknown) {\n clack.log.error('Error while creating an example page to test Sentry:');\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 creating an example Svelte page to test Sentry',\n );\n await abort('Exiting Wizard');\n return;\n }\n }\n\n await runPrettierIfInstalled();\n\n clack.outro(buildOutroMessage(shouldCreateExamplePage));\n}\n\nfunction buildOutroMessage(shouldCreateExamplePage: boolean): string {\n const packageManager = detectPackageManger() || NPM;\n\n let msg = chalk.green('\\nSuccessfully installed the Sentry SvelteKit SDK!');\n\n if (shouldCreateExamplePage) {\n msg += `\\n\\nYou can validate your setup by starting your dev environment (${chalk.cyan(\n `\\`${packageManager.runScriptCommand} dev\\``,\n )}) and visiting ${chalk.cyan('\"/sentry-example\"')}.`;\n }\n\n msg += `\\n\\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/sveltekit/`;\n\n return msg;\n}\n"]}
1
+ {"version":3,"file":"sveltekit-wizard.js","sourceRoot":"","sources":["../../../src/sveltekit/sveltekit-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 chalk from 'chalk';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles, loadSvelteConfig } from './sdk-setup';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { getKitVersionBucket, getSvelteVersionBucket } from './utils';\nimport { NPM, detectPackageManger } from '../utils/package-manager';\n\nexport async function runSvelteKitWizard(\n options: WizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'sveltekit',\n wizardOptions: options,\n },\n () => runSvelteKitWizardWithTelemetry(options),\n );\n}\n\nexport async function runSvelteKitWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry SvelteKit Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson();\n\n await ensurePackageIsInstalled(packageJson, '@sveltejs/kit', 'Sveltekit');\n\n const kitVersion = getPackageVersion('@sveltejs/kit', packageJson);\n const kitVersionBucket = getKitVersionBucket(kitVersion);\n Sentry.setTag('sveltekit-version', kitVersionBucket);\n\n if (kitVersionBucket === '0.x') {\n clack.log.warn(\n \"It seems you're using a SvelteKit version <1.0.0 which is not supported by Sentry.\\nWe recommend upgrading to the latest 1.x 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 Sentry.setTag(\n 'svelte-version',\n getSvelteVersionBucket(getPackageVersion('svelte', packageJson)),\n );\n\n const { selectedProject, selfHosted, sentryUrl, authToken } =\n await getOrAskForProjectData(options, 'javascript-sveltekit');\n\n const sdkAlreadyInstalled = hasPackageInstalled(\n '@sentry/sveltekit',\n packageJson,\n );\n Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n await installPackage({\n packageName: '@sentry/sveltekit@^9',\n packageNameDisplayLabel: '@sentry/sveltekit',\n alreadyInstalled: sdkAlreadyInstalled,\n forceInstall,\n });\n\n await addDotEnvSentryBuildPluginFile(authToken);\n\n const svelteConfig = await traceStep('load-svelte-config', loadSvelteConfig);\n\n try {\n await traceStep('configure-sdk', () =>\n createOrMergeSvelteKitFiles(\n {\n dsn: selectedProject.keys[0].dsn.public,\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n selfHosted,\n url: sentryUrl,\n },\n svelteConfig,\n ),\n );\n } catch (e: unknown) {\n clack.log.error('Error while setting up the SvelteKit SDK:');\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('Error while setting up the SvelteKit SDK');\n await abort('Exiting Wizard');\n return;\n }\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage(\n '/sentry-example',\n );\n\n if (shouldCreateExamplePage) {\n try {\n await traceStep('create-example-page', () =>\n createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n }),\n );\n } catch (e: unknown) {\n clack.log.error('Error while creating an example page to test Sentry:');\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 creating an example Svelte page to test Sentry',\n );\n await abort('Exiting Wizard');\n return;\n }\n }\n\n await runPrettierIfInstalled();\n\n clack.outro(buildOutroMessage(shouldCreateExamplePage));\n}\n\nfunction buildOutroMessage(shouldCreateExamplePage: boolean): string {\n const packageManager = detectPackageManger() || NPM;\n\n let msg = chalk.green('\\nSuccessfully installed the Sentry SvelteKit SDK!');\n\n if (shouldCreateExamplePage) {\n msg += `\\n\\nYou can validate your setup by starting your dev environment (${chalk.cyan(\n `\\`${packageManager.runScriptCommand} dev\\``,\n )}) and visiting ${chalk.cyan('\"/sentry-example\"')}.`;\n }\n\n msg += `\\n\\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/sveltekit/`;\n\n return msg;\n}\n"]}
@@ -56,7 +56,7 @@ export declare function confirmContinueIfPackageVersionNotSupported({ packageId,
56
56
  * IMPORTANT: This function modifies the `package.json`! Be sure to re-read
57
57
  * it if you make additional modifications to it after calling this function!
58
58
  */
59
- export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, packageNameDisplayLabel, packageManager, }: {
59
+ export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, packageNameDisplayLabel, packageManager, forceInstall, }: {
60
60
  /** The string that is passed to the package manager CLI as identifier to install (e.g. `@sentry/nextjs`, or `@sentry/nextjs@^8`) */
61
61
  packageName: string;
62
62
  alreadyInstalled: boolean;
@@ -64,6 +64,8 @@ export declare function installPackage({ packageName, alreadyInstalled, askBefor
64
64
  /** Overrides what is shown in the installation logs in place of the `packageName` option. Useful if the `packageName` is ugly (e.g. `@sentry/nextjs@^8`) */
65
65
  packageNameDisplayLabel?: string;
66
66
  packageManager?: PackageManager;
67
+ /** Add force install flag to command to skip install precondition fails */
68
+ forceInstall?: boolean;
67
69
  }): Promise<{
68
70
  packageManager?: PackageManager;
69
71
  }>;