@sentry/wizard 6.9.0 → 6.11.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 (170) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/dist/ci-ensure-runtime-loaded.sh +82 -0
  3. package/dist/e2e-tests/tests/angular-17.test.js +72 -82
  4. package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
  5. package/dist/e2e-tests/tests/angular-19.test.js +71 -80
  6. package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
  7. package/dist/e2e-tests/tests/cloudflare-worker.test.d.ts +1 -0
  8. package/dist/e2e-tests/tests/cloudflare-worker.test.js +64 -0
  9. package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -0
  10. package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js +2 -5
  11. package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js.map +1 -1
  12. package/dist/e2e-tests/tests/expo.test.js +36 -61
  13. package/dist/e2e-tests/tests/expo.test.js.map +1 -1
  14. package/dist/e2e-tests/tests/flutter.test.js +63 -70
  15. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  16. package/dist/e2e-tests/tests/help-message.test.js +2 -2
  17. package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
  18. package/dist/e2e-tests/tests/nextjs-14.test.js +54 -82
  19. package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
  20. package/dist/e2e-tests/tests/nextjs-15.test.js +95 -105
  21. package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
  22. package/dist/e2e-tests/tests/nextjs-16.test.d.ts +1 -0
  23. package/dist/e2e-tests/tests/nextjs-16.test.js +123 -0
  24. package/dist/e2e-tests/tests/nextjs-16.test.js.map +1 -0
  25. package/dist/e2e-tests/tests/nuxt-3.test.js +45 -58
  26. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  27. package/dist/e2e-tests/tests/nuxt-4.test.js +59 -73
  28. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  29. package/dist/e2e-tests/tests/pnpm-workspace.test.js +4 -7
  30. package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
  31. package/dist/e2e-tests/tests/react-native.test.js +44 -80
  32. package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
  33. package/dist/e2e-tests/tests/react-router.test.js +163 -145
  34. package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
  35. package/dist/e2e-tests/tests/remix.test.js +162 -132
  36. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  37. package/dist/e2e-tests/tests/sveltekit-hooks.test.js +48 -36
  38. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
  39. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +3 -6
  40. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
  41. package/dist/e2e-tests/utils/index.d.ts +21 -43
  42. package/dist/e2e-tests/utils/index.js +108 -183
  43. package/dist/e2e-tests/utils/index.js.map +1 -1
  44. package/dist/get-e2e-test-matrix.mjs +11 -0
  45. package/dist/lib/Constants.d.ts +1 -0
  46. package/dist/lib/Constants.js +5 -0
  47. package/dist/lib/Constants.js.map +1 -1
  48. package/dist/src/android/android-wizard.js +2 -4
  49. package/dist/src/android/android-wizard.js.map +1 -1
  50. package/dist/src/angular/angular-wizard.js +4 -6
  51. package/dist/src/angular/angular-wizard.js.map +1 -1
  52. package/dist/src/angular/sdk-setup.js +1 -1
  53. package/dist/src/angular/sdk-setup.js.map +1 -1
  54. package/dist/src/apple/apple-wizard.js +2 -4
  55. package/dist/src/apple/apple-wizard.js.map +1 -1
  56. package/dist/src/cloudflare/cloudflare-wizard.d.ts +3 -0
  57. package/dist/src/cloudflare/cloudflare-wizard.js +99 -0
  58. package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -0
  59. package/dist/src/cloudflare/sdk-setup.d.ts +7 -0
  60. package/dist/src/cloudflare/sdk-setup.js +47 -0
  61. package/dist/src/cloudflare/sdk-setup.js.map +1 -0
  62. package/dist/src/cloudflare/templates.d.ts +4 -0
  63. package/dist/src/cloudflare/templates.js +44 -0
  64. package/dist/src/cloudflare/templates.js.map +1 -0
  65. package/dist/src/cloudflare/wrangler/create-wrangler-config.d.ts +4 -0
  66. package/dist/src/cloudflare/wrangler/create-wrangler-config.js +27 -0
  67. package/dist/src/cloudflare/wrangler/create-wrangler-config.js.map +1 -0
  68. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.d.ts +4 -0
  69. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js +25 -0
  70. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js.map +1 -0
  71. package/dist/src/cloudflare/wrangler/find-wrangler-config.d.ts +4 -0
  72. package/dist/src/cloudflare/wrangler/find-wrangler-config.js +23 -0
  73. package/dist/src/cloudflare/wrangler/find-wrangler-config.js.map +1 -0
  74. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.d.ts +6 -0
  75. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js +52 -0
  76. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js.map +1 -0
  77. package/dist/src/cloudflare/wrangler/update-wrangler-config.d.ts +17 -0
  78. package/dist/src/cloudflare/wrangler/update-wrangler-config.js +173 -0
  79. package/dist/src/cloudflare/wrangler/update-wrangler-config.js.map +1 -0
  80. package/dist/src/cloudflare/wrap-worker.d.ts +32 -0
  81. package/dist/src/cloudflare/wrap-worker.js +109 -0
  82. package/dist/src/cloudflare/wrap-worker.js.map +1 -0
  83. package/dist/src/flutter/flutter-wizard.js +3 -6
  84. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  85. package/dist/src/nextjs/nextjs-wizard.js +46 -10
  86. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  87. package/dist/src/nextjs/templates.d.ts +6 -3
  88. package/dist/src/nextjs/templates.js +144 -93
  89. package/dist/src/nextjs/templates.js.map +1 -1
  90. package/dist/src/nuxt/nuxt-wizard.js +3 -5
  91. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  92. package/dist/src/react-native/react-native-wizard.js +2 -4
  93. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  94. package/dist/src/react-router/codemods/client.entry.js +4 -1
  95. package/dist/src/react-router/codemods/client.entry.js.map +1 -1
  96. package/dist/src/react-router/react-router-wizard.js +3 -5
  97. package/dist/src/react-router/react-router-wizard.js.map +1 -1
  98. package/dist/src/react-router/sdk-example.js +5 -2
  99. package/dist/src/react-router/sdk-example.js.map +1 -1
  100. package/dist/src/react-router/sdk-setup.d.ts +1 -1
  101. package/dist/src/react-router/sdk-setup.js +3 -4
  102. package/dist/src/react-router/sdk-setup.js.map +1 -1
  103. package/dist/src/remix/remix-wizard.js +2 -4
  104. package/dist/src/remix/remix-wizard.js.map +1 -1
  105. package/dist/src/run.d.ts +1 -1
  106. package/dist/src/run.js +5 -0
  107. package/dist/src/run.js.map +1 -1
  108. package/dist/src/sourcemaps/tools/sentry-cli.js +1 -1
  109. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  110. package/dist/src/sourcemaps/tools/wrangler.js +1 -1
  111. package/dist/src/sourcemaps/tools/wrangler.js.map +1 -1
  112. package/dist/src/sveltekit/sveltekit-wizard.js +4 -6
  113. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  114. package/dist/src/telemetry.d.ts +1 -1
  115. package/dist/src/telemetry.js +52 -31
  116. package/dist/src/telemetry.js.map +1 -1
  117. package/dist/src/utils/abort-if-sportlight-not-supported.d.ts +5 -0
  118. package/dist/src/utils/abort-if-sportlight-not-supported.js +40 -0
  119. package/dist/src/utils/abort-if-sportlight-not-supported.js.map +1 -0
  120. package/dist/src/utils/ast-utils.d.ts +1 -1
  121. package/dist/src/utils/ast-utils.js.map +1 -1
  122. package/dist/src/utils/clack/index.d.ts +19 -2
  123. package/dist/src/utils/clack/index.js +174 -12
  124. package/dist/src/utils/clack/index.js.map +1 -1
  125. package/dist/src/utils/clack/mcp-config.js +117 -59
  126. package/dist/src/utils/clack/mcp-config.js.map +1 -1
  127. package/dist/src/version.d.ts +1 -1
  128. package/dist/src/version.js +1 -1
  129. package/dist/src/version.js.map +1 -1
  130. package/dist/test/angular/angular-wizard.test.js +2 -4
  131. package/dist/test/angular/angular-wizard.test.js.map +1 -1
  132. package/dist/test/apple/cocoapod.test.js +7 -3
  133. package/dist/test/apple/cocoapod.test.js.map +1 -1
  134. package/dist/test/apple/code-tools.test.js +8 -2
  135. package/dist/test/apple/code-tools.test.js.map +1 -1
  136. package/dist/test/cloudflare/create-wrangler-config.test.d.ts +1 -0
  137. package/dist/test/cloudflare/create-wrangler-config.test.js +48 -0
  138. package/dist/test/cloudflare/create-wrangler-config.test.js.map +1 -0
  139. package/dist/test/cloudflare/ensure-wrangler-config.test.d.ts +1 -0
  140. package/dist/test/cloudflare/ensure-wrangler-config.test.js +61 -0
  141. package/dist/test/cloudflare/ensure-wrangler-config.test.js.map +1 -0
  142. package/dist/test/cloudflare/find-wrangler-config.test.d.ts +1 -0
  143. package/dist/test/cloudflare/find-wrangler-config.test.js +77 -0
  144. package/dist/test/cloudflare/find-wrangler-config.test.js.map +1 -0
  145. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.d.ts +1 -0
  146. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js +81 -0
  147. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js.map +1 -0
  148. package/dist/test/cloudflare/sdk-setup.test.d.ts +1 -0
  149. package/dist/test/cloudflare/sdk-setup.test.js +152 -0
  150. package/dist/test/cloudflare/sdk-setup.test.js.map +1 -0
  151. package/dist/test/cloudflare/templates.test.d.ts +1 -0
  152. package/dist/test/cloudflare/templates.test.js +68 -0
  153. package/dist/test/cloudflare/templates.test.js.map +1 -0
  154. package/dist/test/cloudflare/update-wrangler-config.test.d.ts +1 -0
  155. package/dist/test/cloudflare/update-wrangler-config.test.js +216 -0
  156. package/dist/test/cloudflare/update-wrangler-config.test.js.map +1 -0
  157. package/dist/test/cloudflare/wrap-worker.test.d.ts +1 -0
  158. package/dist/test/cloudflare/wrap-worker.test.js +143 -0
  159. package/dist/test/cloudflare/wrap-worker.test.js.map +1 -0
  160. package/dist/test/nextjs/templates.test.js +156 -87
  161. package/dist/test/nextjs/templates.test.js.map +1 -1
  162. package/dist/test/nextjs/wizard-double-wrap-prevention.test.js +12 -7
  163. package/dist/test/nextjs/wizard-double-wrap-prevention.test.js.map +1 -1
  164. package/dist/test/react-router/sdk-setup.test.js +2 -2
  165. package/dist/test/react-router/sdk-setup.test.js.map +1 -1
  166. package/dist/test/utils/clack/index.test.js +37 -29
  167. package/dist/test/utils/clack/index.test.js.map +1 -1
  168. package/dist/test/utils/clack/mcp-config.test.js +176 -51
  169. package/dist/test/utils/clack/mcp-config.test.js.map +1 -1
  170. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit-wizard.js","sourceRoot":"","sources":["../../../src/sveltekit/sveltekit-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport * as Sentry from '@sentry/node';\n\nimport { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { NPM } from '../utils/package-manager';\nimport type { WizardOptions } from '../utils/types';\nimport { offerProjectScopedMcpConfig } from '../utils/clack/mcp-config';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles } from './sdk-setup/setup';\nimport { loadSvelteConfig } from './sdk-setup/svelte-config';\nimport { getKitVersionBucket, getSvelteVersionBucket } from './utils';\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 ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\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 let setupForSvelteKitTracing = kitVersionBucket === '>=2.31.0';\n\n if (kitVersionBucket !== '>=2.31.0') {\n clack.log.warn(\n `It seems you're using a SvelteKit version ${chalk.cyan(\n '<2.31.0',\n )} (detected ${chalk.cyan(kitVersion ?? 'unknown')}). \n\nWe recommend upgrading SvelteKit to version ${chalk.cyan(\n '>=2.31.0',\n )} to use SvelteKit's builtin observability:\n${chalk.cyan('https://svelte.dev/docs/kit/observability')}\n\nSentry works best with SvelteKit versions ${chalk.cyan('>=2.31.0')}.\n\nIf you prefer, you can stay on your current version and use the Sentry SDK \nwithout SvelteKit's builtin observability.`,\n );\n\n const decision = await abortIfCancelled(\n clack.select({\n message: 'Do you want to continue anyway?',\n options: [\n {\n label: \"No, I'll upgrade SvelteKit first\",\n hint: 'Recommended',\n value: 'exit-to-upgrade',\n },\n {\n label: \"I'm already on SvelteKit >=2.31.0\",\n hint: 'Sorry, my bad!',\n value: 'install-with-kit-tracing',\n },\n {\n label: 'Yes, continue',\n hint: 'No Problem!',\n value: 'install-without-kit-tracing',\n },\n ],\n }),\n );\n\n if (decision === 'install-with-kit-tracing') {\n setupForSvelteKitTracing = true;\n }\n\n if (decision === 'exit-to-upgrade') {\n await abort('Exiting Wizard', 0);\n return;\n }\n }\n\n const svelteVersionBucket = getSvelteVersionBucket(\n getPackageVersion('svelte', packageJson),\n );\n Sentry.setTag('svelte-version', svelteVersionBucket);\n\n const projectData = await getOrAskForProjectData(\n options,\n 'javascript-sveltekit',\n );\n\n if (projectData.spotlight) {\n clack.log.warn('Spotlight mode is not yet supported for SvelteKit.');\n clack.log.info('Spotlight is currently only available for Next.js.');\n await abort('Exiting wizard', 0);\n return;\n }\n\n const { selectedProject, selfHosted, sentryUrl, authToken } = projectData;\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@^10',\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 setupForSvelteKitTracing,\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-page',\n );\n\n if (shouldCreateExamplePage) {\n try {\n await traceStep('create-example-page', async () =>\n createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n isUsingSvelte5: ['5.x', '>5.x'].includes(svelteVersionBucket),\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({ cwd: undefined });\n\n // Offer optional project-scoped MCP config for Sentry with org and project scope\n await offerProjectScopedMcpConfig(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n\n clack.outro(await buildOutroMessage(shouldCreateExamplePage));\n}\n\nasync function buildOutroMessage(\n shouldCreateExamplePage: boolean,\n): Promise<string> {\n const packageManager = await getPackageManager(NPM);\n\n let msg = chalk.green('Successfully 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-page\"')}.`;\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-expect-error - 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 { traceStep, withTelemetry } from '../telemetry';\nimport {\n abort,\n abortIfCancelled,\n addDotEnvSentryBuildPluginFile,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport { NPM } from '../utils/package-manager';\nimport type { WizardOptions } from '../utils/types';\nimport { offerProjectScopedMcpConfig } from '../utils/clack/mcp-config';\nimport { createExamplePage } from './sdk-example';\nimport { createOrMergeSvelteKitFiles } from './sdk-setup/setup';\nimport { loadSvelteConfig } from './sdk-setup/svelte-config';\nimport { getKitVersionBucket, getSvelteVersionBucket } from './utils';\nimport { abortIfSpotlightNotSupported } from '../utils/abort-if-sportlight-not-supported';\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 ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\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 let setupForSvelteKitTracing = kitVersionBucket === '>=2.31.0';\n\n if (kitVersionBucket !== '>=2.31.0') {\n clack.log.warn(\n `It seems you're using a SvelteKit version ${chalk.cyan(\n '<2.31.0',\n )} (detected ${chalk.cyan(kitVersion ?? 'unknown')}).\n\nWe recommend upgrading SvelteKit to version ${chalk.cyan(\n '>=2.31.0',\n )} to use SvelteKit's builtin observability:\n${chalk.cyan('https://svelte.dev/docs/kit/observability')}\n\nSentry works best with SvelteKit versions ${chalk.cyan('>=2.31.0')}.\n\nIf you prefer, you can stay on your current version and use the Sentry SDK\nwithout SvelteKit's builtin observability.`,\n );\n\n const decision = await abortIfCancelled(\n clack.select({\n message: 'Do you want to continue anyway?',\n options: [\n {\n label: \"No, I'll upgrade SvelteKit first\",\n hint: 'Recommended',\n value: 'exit-to-upgrade',\n },\n {\n label: \"I'm already on SvelteKit >=2.31.0\",\n hint: 'Sorry, my bad!',\n value: 'install-with-kit-tracing',\n },\n {\n label: 'Yes, continue',\n hint: 'No Problem!',\n value: 'install-without-kit-tracing',\n },\n ],\n }),\n );\n\n if (decision === 'install-with-kit-tracing') {\n setupForSvelteKitTracing = true;\n }\n\n if (decision === 'exit-to-upgrade') {\n await abort('Exiting Wizard', 0);\n return;\n }\n }\n\n const svelteVersionBucket = getSvelteVersionBucket(\n getPackageVersion('svelte', packageJson),\n );\n Sentry.setTag('svelte-version', svelteVersionBucket);\n\n const projectData = await getOrAskForProjectData(\n options,\n 'javascript-sveltekit',\n );\n\n if (projectData.spotlight) {\n return abortIfSpotlightNotSupported('SvelteKit');\n }\n\n const { selectedProject, selfHosted, sentryUrl, authToken } = projectData;\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@^10',\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 setupForSvelteKitTracing,\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-page',\n );\n\n if (shouldCreateExamplePage) {\n try {\n await traceStep('create-example-page', async () =>\n createExamplePage(svelteConfig, {\n selfHosted,\n url: sentryUrl,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n isUsingSvelte5: ['5.x', '>5.x'].includes(svelteVersionBucket),\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({ cwd: undefined });\n\n // Offer optional project-scoped MCP config for Sentry with org and project scope\n await offerProjectScopedMcpConfig(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n\n clack.outro(await buildOutroMessage(shouldCreateExamplePage));\n}\n\nasync function buildOutroMessage(\n shouldCreateExamplePage: boolean,\n): Promise<string> {\n const packageManager = await getPackageManager(NPM);\n\n let msg = chalk.green('Successfully 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-page\"')}.`;\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,4 +1,4 @@
1
- import { type Span } from '@sentry/node';
1
+ import type { Span } from '@sentry/node';
2
2
  import type { WizardOptions } from './utils/types';
3
3
  export declare function withTelemetry<F>(options: {
4
4
  enabled: boolean;
@@ -1,56 +1,80 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.updateProgress = exports.traceStep = exports.withTelemetry = void 0;
4
- const node_1 = require("@sentry/node");
27
+ const Sentry = __importStar(require("@sentry/node"));
5
28
  const version_1 = require("./version");
6
29
  async function withTelemetry(options, callback) {
7
- const { sentryHub, sentryClient } = createSentryInstance(options.enabled, options.integration);
8
- (0, node_1.makeMain)(sentryHub);
9
- const sentrySession = sentryHub.startSession();
10
- sentryHub.captureSession();
30
+ const client = initSentry(options.enabled, options.integration);
31
+ Sentry.startSession();
32
+ Sentry.captureSession();
11
33
  // Set tag for passed CLI args
12
- sentryHub.setTag('args.project', !!options.wizardOptions.projectSlug);
13
- sentryHub.setTag('args.org', !!options.wizardOptions.orgSlug);
14
- sentryHub.setTag('args.saas', !!options.wizardOptions.saas);
34
+ Sentry.setTag('args.project', !!options.wizardOptions.projectSlug);
35
+ Sentry.setTag('args.org', !!options.wizardOptions.orgSlug);
36
+ Sentry.setTag('args.saas', !!options.wizardOptions.saas);
15
37
  try {
16
- return await (0, node_1.startSpan)({
38
+ return await Sentry.startSpan({
17
39
  name: 'sentry-wizard-execution',
18
- status: 'ok',
19
40
  op: 'wizard.flow',
20
41
  }, async () => {
21
42
  updateProgress('start');
22
- const res = await (0, node_1.runWithAsyncContext)(callback);
43
+ const res = await Sentry.withIsolationScope(callback);
23
44
  updateProgress('finished');
24
45
  return res;
25
46
  });
26
47
  }
27
48
  catch (e) {
28
- sentryHub.captureException('Error during wizard execution.');
29
- sentrySession.status = 'crashed';
49
+ Sentry.captureException('Error during wizard execution.');
50
+ const currentSession = Sentry.getCurrentScope().getSession();
51
+ if (currentSession) {
52
+ currentSession.status = 'crashed';
53
+ }
30
54
  throw e;
31
55
  }
32
56
  finally {
33
- sentryHub.endSession();
34
- await sentryClient.flush(3000).then(null, () => {
57
+ Sentry.endSession();
58
+ await client?.flush(3000).then(null, () => {
35
59
  // If telemetry flushing fails we generally don't care
36
60
  });
37
- await (0, node_1.flush)(3000).then(null, () => {
61
+ await Sentry.flush(3000).then(null, () => {
38
62
  // If telemetry flushing fails we generally don't care
39
63
  });
40
64
  }
41
65
  }
42
66
  exports.withTelemetry = withTelemetry;
43
- function createSentryInstance(enabled, integration) {
44
- const client = new node_1.NodeClient({
67
+ function initSentry(enabled, integration) {
68
+ const client = Sentry.init({
45
69
  dsn: 'https://8871d3ff64814ed8960c96d1fcc98a27@o1.ingest.sentry.io/4505425820712960',
46
70
  enabled: enabled,
71
+ defaultIntegrations: false,
72
+ integrations: [Sentry.httpIntegration()],
47
73
  environment: `production-${integration}`,
48
74
  tracesSampleRate: 1,
49
75
  sampleRate: 1,
50
76
  release: version_1.WIZARD_VERSION,
51
- integrations: [new node_1.Integrations.Http()],
52
77
  tracePropagationTargets: [/^https:\/\/sentry.io\//],
53
- stackParser: node_1.defaultStackParser,
54
78
  beforeSendTransaction: (event) => {
55
79
  delete event.server_name; // Server name might contain PII
56
80
  return event;
@@ -62,33 +86,30 @@ function createSentryInstance(enabled, integration) {
62
86
  delete event.server_name; // Server name might contain PII
63
87
  return event;
64
88
  },
65
- transport: node_1.makeNodeTransport,
66
- debug: true,
67
89
  });
68
- const hub = new node_1.Hub(client);
69
- hub.setTag('integration', integration);
70
- hub.setTag('node', process.version);
71
- hub.setTag('platform', process.platform);
90
+ Sentry.setTag('integration', integration);
91
+ Sentry.setTag('node', process.version);
92
+ Sentry.setTag('platform', process.platform);
72
93
  try {
73
94
  // The `require` call here is fine because the binary node versions
74
95
  // support `require` and we try/catch the call anyway for any other
75
96
  // version of node.
76
97
  // eslint-disable-next-line @typescript-eslint/no-var-requires
77
98
  const sea = require('node:sea');
78
- hub.setTag('is_binary', sea.isSea());
99
+ Sentry.setTag('is_binary', sea.isSea());
79
100
  }
80
101
  catch {
81
- hub.setTag('is_binary', false);
102
+ Sentry.setTag('is_binary', false);
82
103
  }
83
- return { sentryHub: hub, sentryClient: client };
104
+ return client;
84
105
  }
85
106
  function traceStep(step, callback) {
86
107
  updateProgress(step);
87
- return (0, node_1.startSpan)({ name: step, op: 'wizard.step' }, (span) => callback(span));
108
+ return Sentry.startSpan({ name: step, op: 'wizard.step' }, (span) => callback(span));
88
109
  }
89
110
  exports.traceStep = traceStep;
90
111
  function updateProgress(step) {
91
- (0, node_1.setTag)('progress', step);
112
+ Sentry.setTag('progress', step);
92
113
  }
93
114
  exports.updateProgress = updateProgress;
94
115
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Hub,\n Integrations,\n NodeClient,\n type Span,\n defaultStackParser,\n flush,\n makeMain,\n makeNodeTransport,\n runWithAsyncContext,\n setTag,\n startSpan,\n} from '@sentry/node';\nimport type { WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\nexport async function withTelemetry<F>(\n options: {\n enabled: boolean;\n integration: string;\n wizardOptions: WizardOptions;\n },\n callback: () => F | Promise<F>,\n): Promise<F> {\n const { sentryHub, sentryClient } = createSentryInstance(\n options.enabled,\n options.integration,\n );\n\n makeMain(sentryHub);\n\n const sentrySession = sentryHub.startSession();\n sentryHub.captureSession();\n\n // Set tag for passed CLI args\n sentryHub.setTag('args.project', !!options.wizardOptions.projectSlug);\n sentryHub.setTag('args.org', !!options.wizardOptions.orgSlug);\n sentryHub.setTag('args.saas', !!options.wizardOptions.saas);\n\n try {\n return await startSpan(\n {\n name: 'sentry-wizard-execution',\n status: 'ok',\n op: 'wizard.flow',\n },\n async () => {\n updateProgress('start');\n const res = await runWithAsyncContext(callback);\n updateProgress('finished');\n\n return res;\n },\n );\n } catch (e) {\n sentryHub.captureException('Error during wizard execution.');\n sentrySession.status = 'crashed';\n throw e;\n } finally {\n sentryHub.endSession();\n await sentryClient.flush(3000).then(null, () => {\n // If telemetry flushing fails we generally don't care\n });\n await flush(3000).then(null, () => {\n // If telemetry flushing fails we generally don't care\n });\n }\n}\n\nfunction createSentryInstance(enabled: boolean, integration: string) {\n const client = new NodeClient({\n dsn: 'https://8871d3ff64814ed8960c96d1fcc98a27@o1.ingest.sentry.io/4505425820712960',\n enabled: enabled,\n\n environment: `production-${integration}`,\n\n tracesSampleRate: 1,\n sampleRate: 1,\n\n release: WIZARD_VERSION,\n integrations: [new Integrations.Http()],\n tracePropagationTargets: [/^https:\\/\\/sentry.io\\//],\n\n stackParser: defaultStackParser,\n\n beforeSendTransaction: (event) => {\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n transport: makeNodeTransport,\n\n debug: true,\n });\n\n const hub = new Hub(client);\n\n hub.setTag('integration', integration);\n hub.setTag('node', process.version);\n hub.setTag('platform', process.platform);\n\n try {\n // The `require` call here is fine because the binary node versions\n // support `require` and we try/catch the call anyway for any other\n // version of node.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sea = require('node:sea') as { isSea: () => boolean };\n hub.setTag('is_binary', sea.isSea());\n } catch {\n hub.setTag('is_binary', false);\n }\n\n return { sentryHub: hub, sentryClient: client };\n}\n\nexport function traceStep<T>(\n step: string,\n callback: (span: Span | undefined) => T,\n): T {\n updateProgress(step);\n return startSpan({ name: step, op: 'wizard.step' }, (span) => callback(span));\n}\n\nexport function updateProgress(step: string) {\n setTag('progress', step);\n}\n"]}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from '@sentry/node';\nimport type { Span } from '@sentry/node';\nimport type { WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\nexport async function withTelemetry<F>(\n options: {\n enabled: boolean;\n integration: string;\n wizardOptions: WizardOptions;\n },\n callback: () => F | Promise<F>,\n): Promise<F> {\n const client = initSentry(options.enabled, options.integration);\n\n Sentry.startSession();\n Sentry.captureSession();\n\n // Set tag for passed CLI args\n Sentry.setTag('args.project', !!options.wizardOptions.projectSlug);\n Sentry.setTag('args.org', !!options.wizardOptions.orgSlug);\n Sentry.setTag('args.saas', !!options.wizardOptions.saas);\n\n try {\n return await Sentry.startSpan(\n {\n name: 'sentry-wizard-execution',\n op: 'wizard.flow',\n },\n async () => {\n updateProgress('start');\n const res = await Sentry.withIsolationScope(callback);\n updateProgress('finished');\n\n return res;\n },\n );\n } catch (e) {\n Sentry.captureException('Error during wizard execution.');\n const currentSession = Sentry.getCurrentScope().getSession();\n if (currentSession) {\n currentSession.status = 'crashed';\n }\n throw e;\n } finally {\n Sentry.endSession();\n await client?.flush(3000).then(null, () => {\n // If telemetry flushing fails we generally don't care\n });\n await Sentry.flush(3000).then(null, () => {\n // If telemetry flushing fails we generally don't care\n });\n }\n}\n\nfunction initSentry(\n enabled: boolean,\n integration: string,\n): Sentry.NodeClient | undefined {\n const client = Sentry.init({\n dsn: 'https://8871d3ff64814ed8960c96d1fcc98a27@o1.ingest.sentry.io/4505425820712960',\n enabled: enabled,\n defaultIntegrations: false,\n integrations: [Sentry.httpIntegration()],\n environment: `production-${integration}`,\n\n tracesSampleRate: 1,\n sampleRate: 1,\n\n release: WIZARD_VERSION,\n tracePropagationTargets: [/^https:\\/\\/sentry.io\\//],\n\n beforeSendTransaction: (event) => {\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n\n delete event.server_name; // Server name might contain PII\n return event;\n },\n });\n\n Sentry.setTag('integration', integration);\n Sentry.setTag('node', process.version);\n Sentry.setTag('platform', process.platform);\n\n try {\n // The `require` call here is fine because the binary node versions\n // support `require` and we try/catch the call anyway for any other\n // version of node.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sea = require('node:sea') as { isSea: () => boolean };\n Sentry.setTag('is_binary', sea.isSea());\n } catch {\n Sentry.setTag('is_binary', false);\n }\n\n return client;\n}\n\nexport function traceStep<T>(\n step: string,\n callback: (span: Span | undefined) => T,\n): T {\n updateProgress(step);\n return Sentry.startSpan({ name: step, op: 'wizard.step' }, (span) =>\n callback(span),\n );\n}\n\nexport function updateProgress(step: string) {\n Sentry.setTag('progress', step);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Aborts the wizard with a message that Spotlight mode is not yet supported
3
+ * for the given platform.
4
+ */
5
+ export declare function abortIfSpotlightNotSupported(platform: string): Promise<never>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.abortIfSpotlightNotSupported = void 0;
27
+ // @ts-expect-error - clack is ESM and TS complains about that. It works though
28
+ const clack = __importStar(require("@clack/prompts"));
29
+ const clack_1 = require("./clack");
30
+ /**
31
+ * Aborts the wizard with a message that Spotlight mode is not yet supported
32
+ * for the given platform.
33
+ */
34
+ async function abortIfSpotlightNotSupported(platform) {
35
+ clack.log.warn(`Spotlight mode is not yet supported for ${platform}.`);
36
+ clack.log.info('Spotlight is currently only available for Next.js.');
37
+ return (0, clack_1.abort)('Exiting wizard', 0);
38
+ }
39
+ exports.abortIfSpotlightNotSupported = abortIfSpotlightNotSupported;
40
+ //# sourceMappingURL=abort-if-sportlight-not-supported.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort-if-sportlight-not-supported.js","sourceRoot":"","sources":["../../../src/utils/abort-if-sportlight-not-supported.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,sDAAwC;AACxC,mCAAgC;AAEhC;;;GAGG;AACI,KAAK,UAAU,4BAA4B,CAChD,QAAgB;IAEhB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2CAA2C,QAAQ,GAAG,CAAC,CAAC;IACvE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAErE,OAAO,IAAA,aAAK,EAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAPD,oEAOC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { abort } from './clack';\n\n/**\n * Aborts the wizard with a message that Spotlight mode is not yet supported\n * for the given platform.\n */\nexport async function abortIfSpotlightNotSupported(\n platform: string,\n): Promise<never> {\n clack.log.warn(`Spotlight mode is not yet supported for ${platform}.`);\n clack.log.info('Spotlight is currently only available for Next.js.');\n\n return abort('Exiting wizard', 0);\n}\n"]}
@@ -40,7 +40,7 @@ export declare function getOrSetObjectProperty(object: t.ObjectExpression, name:
40
40
  * @param value the value of the property to set
41
41
  * @param comment (optional) a comment to add to the property
42
42
  */
43
- export declare function setOrUpdateObjectProperty(object: t.ObjectExpression, name: string, value: t.Literal | t.BooleanLiteral | t.StringLiteral | t.ObjectExpression, comment?: string): void;
43
+ export declare function setOrUpdateObjectProperty(object: t.ObjectExpression, name: string, value: t.Literal | t.BooleanLiteral | t.StringLiteral | t.ObjectExpression | t.ArrayExpression, comment?: string): void;
44
44
  type JsonCParseResult = {
45
45
  jsonObject: t.ObjectExpression;
46
46
  ast: t.Program;
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../src/utils/ast-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,+CAAiC;AAIjC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEhC;;;GAGG;AACH,SAAgB,QAAQ,CACtB,QAAgB,EAChB,YAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAEpD,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAPD,4BAOC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,IAAI,WAAW,GAAwB,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;QACpB,kBAAkB,CAAC,IAAI;YACrB,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,YAAY,CAAC,IAAI;YACf,WAAW;gBACT,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC,WAAW,CAAC;AACvB,CAAC;AAfD,4CAeC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAC/B,MAA0B,EAC1B,IAAY;IAEZ,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAmB,EAAE;QACnD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAE1E,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QAED,MAAM,qBAAqB,GACzB,YAAY;YACZ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;YAC5D,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;QAEvB,IAAI,qBAAqB,EAAE;YACzB,OAAO,IAAI,CAAC;SACb;QAED,8BAA8B;QAC9B,OAAO,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,8CAuBC;AAED;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CACpC,MAA0B,EAC1B,IAAY,EACZ,YAIsB;IAEtB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzD,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAC;KACzB;IAED,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;IAEH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpC,OAAO,WAAW,CAAC;AACrB,CAAC;AAxBD,wDAwBC;AAED;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CACvC,MAA0B,EAC1B,IAAY,EACZ,KAA0E,EAC1E,OAAgB;IAEhB,MAAM,WAAW,GACf,OAAO;QACP,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAEtE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzD,IAAI,gBAAgB,EAAE;QACpB,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;QAC/B,IAAI,WAAW,EAAE;YACf,gBAAgB,CAAC,QAAQ,GAAG;gBAC1B,GAAG,CAAC,gBAAgB,EAAE,QAAQ,IAAI,EAAE,CAAC;gBACrC,GAAG,WAAW;aACf,CAAC;SACH;KACF;SAAM;QACL,MAAM,CAAC,UAAU,CAAC,IAAI,CACpB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YAC1B,KAAK;YACL,GAAG,CAAC,WAAW,IAAI;gBACjB,QAAQ,EAAE,WAAW;aACtB,CAAC;SACH,CAAC,CACH,CAAC;KACH;AACH,CAAC;AA/BD,8DA+BC;AAYD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,UAAU,CAAC,UAAkB;IAC3C,IAAI;QACF,MAAM,UAAU,GAAG,IAAI,UAAU,GAAG,CAAC;QACrC,uDAAuD;QACvD,sEAAsE;QACtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAoB,CAAC;QAErE,MAAM,UAAU,GACd,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB;YACzC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,kBAAkB;YAClD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YACzB,SAAS,CAAC;QAEZ,IAAI,UAAU,EAAE;YACd,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;SAC5B;KACF;IAAC,MAAM;QACN,WAAW;KACZ;IACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AApBD,gCAoBC;AAED;;;;;;;;;GASG;AACH,SAAgB,UAAU,CAAC,GAAc;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAHD,gCAGC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,OAAkB;IACpD,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,IACE,CAAC,CAAC,IAAI,KAAK,qBAAqB;YAChC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB;YAC/C,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI;YAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;YAC7C,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;YAChD,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;YACnD,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAChD;YACA,eAAe,GAAG,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC;AAhBD,kDAgBC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,SAAgB,yBAAyB,CAAC,MAAW,EAAE,IAAY;IACjE,OAAO,OAAO,CACZ,MAAM;QACJ,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,IAAI,MAAM;QACf,MAA2B,CAAC,IAAI,KAAK,YAAY;QAClD,MAAM,IAAI,MAAM;QACf,MAA2B,CAAC,IAAI,KAAK,IAAI,CAC7C,CAAC;AACJ,CAAC;AATD,8DASC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,SAAgB,qBAAqB,CAAC,IAAS;IAC7C,sEAAsE;IACtE,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAHD,sDAGC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,SAAgB,mBAAmB,CAAC,IAAS;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;QAC1D,OAAO,IAAI,CAAC;KACb;IAED,MAAM,QAAQ,GAAI,IAA0B,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE;QACtE,OAAO,IAAI,CAAC;KACb;IAED,MAAM,SAAS,GAAI,QAA8B,CAAC,IAAI,CAAC;IACvD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAA2B,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAZD,kDAYC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CACpC,IAAmB,EACnB,SAAsB;IAEtB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IAED,kEAAkE;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAZD,wDAYC;AAED;;;;;;;GAOG;AACH,SAAgB,YAAY,CAC1B,SAA6B,EAC7B,IAAY;IAEZ,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,gBAAgB;QAC3B,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;QAC3B,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CACU,CAAC,CAAC,kCAAkC;AACvE,CAAC;AAVD,oCAUC","sourcesContent":["import * as fs from 'fs';\n\nimport * as recast from 'recast';\nimport x = recast.types;\nimport t = x.namedTypes;\n\nconst b = recast.types.builders;\n\n/**\n * Checks if a file where we don't know its concrete file type yet exists\n * and returns the full path to the file with the correct file type.\n */\nexport function findFile(\n filePath: string,\n fileTypes: string[] = ['.js', '.ts', '.mjs', '.cjs'],\n): string | undefined {\n return fileTypes\n .map((type) => `${filePath}${type}`)\n .find((file) => fs.existsSync(file));\n}\n\n/**\n * checks for require('@sentry/*') syntax\n */\nexport function hasSentryContent(program: t.Program): boolean {\n let foundSentry: boolean | undefined = false;\n recast.visit(program, {\n visitStringLiteral(path) {\n foundSentry = foundSentry || path.node.value.startsWith('@sentry/');\n this.traverse(path);\n },\n visitLiteral(path) {\n foundSentry =\n foundSentry || path.node.value?.toString().startsWith('@sentry/');\n this.traverse(path);\n },\n });\n\n return !!foundSentry;\n}\n\n/**\n * Searches for a property of an ObjectExpression by name\n *\n * @param object the ObjectExpression to search in\n * @param name the name of the property to search for\n *\n * @returns the property if it exists\n */\nexport function getObjectProperty(\n object: t.ObjectExpression,\n name: string,\n): t.Property | undefined {\n return object.properties.find((p): p is t.Property => {\n const isObjectProp = p.type === 'Property' || p.type === 'ObjectProperty';\n\n if (!isObjectProp) {\n return false;\n }\n\n const hasMatchingLiteralKey =\n isObjectProp &&\n (p.key.type === 'Literal' || p.key.type === 'StringLiteral') &&\n p.key.value === name;\n\n if (hasMatchingLiteralKey) {\n return true;\n }\n\n // has matching identifier key\n return isObjectProp && p.key.type === 'Identifier' && p.key.name === name;\n });\n}\n\n/**\n * Attempts to find a property of an ObjectExpression by name. If it doesn't exist,\n * the property will be added to the ObjectExpression with the provided default value.\n *\n * @param object the parent object expression to search in\n * @param name the name of the property to search for\n * @param defaultValue the default value to set if the property doesn't exist\n *\n * @returns the\n */\nexport function getOrSetObjectProperty(\n object: t.ObjectExpression,\n name: string,\n defaultValue:\n | t.Literal\n | t.BooleanLiteral\n | t.StringLiteral\n | t.ObjectExpression,\n): t.Property {\n const existingProperty = getObjectProperty(object, name);\n\n if (existingProperty) {\n return existingProperty;\n }\n\n const newProperty = b.property.from({\n kind: 'init',\n key: b.stringLiteral(name),\n value: defaultValue,\n });\n\n object.properties.push(newProperty);\n\n return newProperty;\n}\n\n/**\n * Sets a property of an ObjectExpression if it exists, otherwise adds it\n * to the ObjectExpression. Optionally, a comment can be added to the\n * property.\n *\n * @param object the ObjectExpression to set the property on\n * @param name the name of the property to set\n * @param value the value of the property to set\n * @param comment (optional) a comment to add to the property\n */\nexport function setOrUpdateObjectProperty(\n object: t.ObjectExpression,\n name: string,\n value: t.Literal | t.BooleanLiteral | t.StringLiteral | t.ObjectExpression,\n comment?: string,\n) {\n const newComments =\n comment &&\n comment.split('\\n').map((c) => b.commentLine(` ${c}`, true, false));\n\n const existingProperty = getObjectProperty(object, name);\n\n if (existingProperty) {\n existingProperty.value = value;\n if (newComments) {\n existingProperty.comments = [\n ...(existingProperty?.comments || []),\n ...newComments,\n ];\n }\n } else {\n object.properties.push(\n b.objectProperty.from({\n key: b.stringLiteral(name),\n value,\n ...(newComments && {\n comments: newComments,\n }),\n }),\n );\n }\n}\n\ntype JsonCParseResult =\n | {\n jsonObject: t.ObjectExpression;\n ast: t.Program;\n }\n | {\n jsonObject: undefined;\n ast: undefined;\n };\n\n/**\n * Parses a JSON string with (potential) comments (JSON-C) and returns the JS AST\n * that can be walked and modified with recast like a normal JS AST.\n *\n * This is done by wrapping the JSON-C string in parentheses, thereby making it\n * a JS `Program` with an `ExpressionStatement` as its body. The expression is then\n * extracted from the AST and returned alongside the AST.\n *\n * To preserve as much original formatting as possible, the returned `ast`\n * property should be passed to {@link `printJsonC`} to get the JSON-C string back.\n *\n * If the input is not valid JSON-C, the result will be undefined.\n *\n * @see {@link JsonCParseResult}\n *\n * @param jsonString a JSON-C string\n *\n * @returns a {@link JsonCParseResult}, containing either the JSON-C object and the AST or undefined in both cases\n */\nexport function parseJsonC(jsonString: string): JsonCParseResult {\n try {\n const jsTsConfig = `(${jsonString})`;\n // no idea why recast returns any here, this is dumb :/\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const ast = recast.parse(jsTsConfig.toString()).program as t.Program;\n\n const jsonObject =\n (ast.body[0].type === 'ExpressionStatement' &&\n ast.body[0].expression.type === 'ObjectExpression' &&\n ast.body[0].expression) ||\n undefined;\n\n if (jsonObject) {\n return { jsonObject, ast };\n }\n } catch {\n /* empty */\n }\n return { jsonObject: undefined, ast: undefined };\n}\n\n/**\n * Takes the AST of a parsed JSON-C \"program\" and returns the JSON-C string without\n * any of the temporary JS wrapper code that was previously applied.\n *\n * Only use this in conjunction with {@link `parseJsonC`}\n *\n * @param ast the `ast` returned from {@link `parseJsonC`}\n *\n * @returns the JSON-C string\n */\nexport function printJsonC(ast: t.Program): string {\n const js = recast.print(ast).code;\n return js.substring(1, js.length - 1);\n}\n\n/**\n * Walks the program body and returns index of the last variable assignment initialized by require statement.\n * Only counts top level require statements.\n *\n * @returns index of the last `const foo = require('bar');` statement or -1 if none was found.\n */\nexport function getLastRequireIndex(program: t.Program): number {\n let lastRequireIdex = -1;\n program.body.forEach((s, i) => {\n if (\n s.type === 'VariableDeclaration' &&\n s.declarations[0].type === 'VariableDeclarator' &&\n s.declarations[0].init !== null &&\n typeof s.declarations[0].init !== 'undefined' &&\n s.declarations[0].init.type === 'CallExpression' &&\n s.declarations[0].init.callee.type === 'Identifier' &&\n s.declarations[0].init.callee.name === 'require'\n ) {\n lastRequireIdex = i;\n }\n });\n return lastRequireIdex;\n}\n\n/**\n * Safely checks if a callee is an identifier with the given name\n * Prevents crashes when accessing callee.name on non-identifier nodes\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeCalleeIdentifierMatch(callee: any, name: string): boolean {\n return Boolean(\n callee &&\n typeof callee === 'object' &&\n 'type' in callee &&\n (callee as { type: string }).type === 'Identifier' &&\n 'name' in callee &&\n (callee as { name: string }).name === name,\n );\n}\n\n/**\n * Safely gets the name of an identifier node\n * Returns null if the node is not an identifier or is undefined\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeGetIdentifierName(node: any): string | null {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return node && node.type === 'Identifier' ? String(node.name) : null;\n}\n\n/**\n * Safely access function body array with proper validation\n * Prevents crashes when accessing body.body on nodes that don't have a body\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeGetFunctionBody(node: any): t.Statement[] | null {\n if (!node || typeof node !== 'object' || !('body' in node)) {\n return null;\n }\n\n const nodeBody = (node as { body: unknown }).body;\n if (!nodeBody || typeof nodeBody !== 'object' || !('body' in nodeBody)) {\n return null;\n }\n\n const bodyArray = (nodeBody as { body: unknown }).body;\n return Array.isArray(bodyArray) ? (bodyArray as t.Statement[]) : null;\n}\n\n/**\n * Safely insert statement before last statement in function body\n * Typically used to insert code before a return statement\n * Returns true if insertion was successful, false otherwise\n */\nexport function safeInsertBeforeReturn(\n body: t.Statement[],\n statement: t.Statement,\n): boolean {\n if (!body || !Array.isArray(body) || body.length === 0) {\n return false;\n }\n\n // Insert before the last statement (typically a return statement)\n const insertIndex = Math.max(0, body.length - 1);\n body.splice(insertIndex, 0, statement);\n return true;\n}\n\n/**\n * Finds a property in an ObjectExpression by name.\n * Commonly used for traversing Vite/React Router config objects.\n *\n * @param configObj - The ObjectExpression to search\n * @param name - The property name to find\n * @returns The matching ObjectProperty, or undefined if not found\n */\nexport function findProperty(\n configObj: t.ObjectExpression,\n name: string,\n): t.ObjectProperty | undefined {\n return configObj.properties.find(\n (p) =>\n p.type === 'ObjectProperty' &&\n p.key.type === 'Identifier' &&\n p.key.name === name,\n ) as t.ObjectProperty | undefined; // Safe: predicate guarantees type\n}\n"]}
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../src/utils/ast-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\n\nimport * as recast from 'recast';\nimport x = recast.types;\nimport t = x.namedTypes;\n\nconst b = recast.types.builders;\n\n/**\n * Checks if a file where we don't know its concrete file type yet exists\n * and returns the full path to the file with the correct file type.\n */\nexport function findFile(\n filePath: string,\n fileTypes: string[] = ['.js', '.ts', '.mjs', '.cjs'],\n): string | undefined {\n return fileTypes\n .map((type) => `${filePath}${type}`)\n .find((file) => fs.existsSync(file));\n}\n\n/**\n * checks for require('@sentry/*') syntax\n */\nexport function hasSentryContent(program: t.Program): boolean {\n let foundSentry: boolean | undefined = false;\n recast.visit(program, {\n visitStringLiteral(path) {\n foundSentry = foundSentry || path.node.value.startsWith('@sentry/');\n this.traverse(path);\n },\n visitLiteral(path) {\n foundSentry =\n foundSentry || path.node.value?.toString().startsWith('@sentry/');\n this.traverse(path);\n },\n });\n\n return !!foundSentry;\n}\n\n/**\n * Searches for a property of an ObjectExpression by name\n *\n * @param object the ObjectExpression to search in\n * @param name the name of the property to search for\n *\n * @returns the property if it exists\n */\nexport function getObjectProperty(\n object: t.ObjectExpression,\n name: string,\n): t.Property | undefined {\n return object.properties.find((p): p is t.Property => {\n const isObjectProp = p.type === 'Property' || p.type === 'ObjectProperty';\n\n if (!isObjectProp) {\n return false;\n }\n\n const hasMatchingLiteralKey =\n isObjectProp &&\n (p.key.type === 'Literal' || p.key.type === 'StringLiteral') &&\n p.key.value === name;\n\n if (hasMatchingLiteralKey) {\n return true;\n }\n\n // has matching identifier key\n return isObjectProp && p.key.type === 'Identifier' && p.key.name === name;\n });\n}\n\n/**\n * Attempts to find a property of an ObjectExpression by name. If it doesn't exist,\n * the property will be added to the ObjectExpression with the provided default value.\n *\n * @param object the parent object expression to search in\n * @param name the name of the property to search for\n * @param defaultValue the default value to set if the property doesn't exist\n *\n * @returns the\n */\nexport function getOrSetObjectProperty(\n object: t.ObjectExpression,\n name: string,\n defaultValue:\n | t.Literal\n | t.BooleanLiteral\n | t.StringLiteral\n | t.ObjectExpression,\n): t.Property {\n const existingProperty = getObjectProperty(object, name);\n\n if (existingProperty) {\n return existingProperty;\n }\n\n const newProperty = b.property.from({\n kind: 'init',\n key: b.stringLiteral(name),\n value: defaultValue,\n });\n\n object.properties.push(newProperty);\n\n return newProperty;\n}\n\n/**\n * Sets a property of an ObjectExpression if it exists, otherwise adds it\n * to the ObjectExpression. Optionally, a comment can be added to the\n * property.\n *\n * @param object the ObjectExpression to set the property on\n * @param name the name of the property to set\n * @param value the value of the property to set\n * @param comment (optional) a comment to add to the property\n */\nexport function setOrUpdateObjectProperty(\n object: t.ObjectExpression,\n name: string,\n value:\n | t.Literal\n | t.BooleanLiteral\n | t.StringLiteral\n | t.ObjectExpression\n | t.ArrayExpression,\n comment?: string,\n): void {\n const newComments =\n comment &&\n comment.split('\\n').map((c) => b.commentLine(` ${c}`, true, false));\n\n const existingProperty = getObjectProperty(object, name);\n\n if (existingProperty) {\n existingProperty.value = value;\n if (newComments) {\n existingProperty.comments = [\n ...(existingProperty?.comments || []),\n ...newComments,\n ];\n }\n } else {\n object.properties.push(\n b.objectProperty.from({\n key: b.stringLiteral(name),\n value,\n ...(newComments && {\n comments: newComments,\n }),\n }),\n );\n }\n}\n\ntype JsonCParseResult =\n | {\n jsonObject: t.ObjectExpression;\n ast: t.Program;\n }\n | {\n jsonObject: undefined;\n ast: undefined;\n };\n\n/**\n * Parses a JSON string with (potential) comments (JSON-C) and returns the JS AST\n * that can be walked and modified with recast like a normal JS AST.\n *\n * This is done by wrapping the JSON-C string in parentheses, thereby making it\n * a JS `Program` with an `ExpressionStatement` as its body. The expression is then\n * extracted from the AST and returned alongside the AST.\n *\n * To preserve as much original formatting as possible, the returned `ast`\n * property should be passed to {@link `printJsonC`} to get the JSON-C string back.\n *\n * If the input is not valid JSON-C, the result will be undefined.\n *\n * @see {@link JsonCParseResult}\n *\n * @param jsonString a JSON-C string\n *\n * @returns a {@link JsonCParseResult}, containing either the JSON-C object and the AST or undefined in both cases\n */\nexport function parseJsonC(jsonString: string): JsonCParseResult {\n try {\n const jsTsConfig = `(${jsonString})`;\n // no idea why recast returns any here, this is dumb :/\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const ast = recast.parse(jsTsConfig.toString()).program as t.Program;\n\n const jsonObject =\n (ast.body[0].type === 'ExpressionStatement' &&\n ast.body[0].expression.type === 'ObjectExpression' &&\n ast.body[0].expression) ||\n undefined;\n\n if (jsonObject) {\n return { jsonObject, ast };\n }\n } catch {\n /* empty */\n }\n return { jsonObject: undefined, ast: undefined };\n}\n\n/**\n * Takes the AST of a parsed JSON-C \"program\" and returns the JSON-C string without\n * any of the temporary JS wrapper code that was previously applied.\n *\n * Only use this in conjunction with {@link `parseJsonC`}\n *\n * @param ast the `ast` returned from {@link `parseJsonC`}\n *\n * @returns the JSON-C string\n */\nexport function printJsonC(ast: t.Program): string {\n const js = recast.print(ast).code;\n return js.substring(1, js.length - 1);\n}\n\n/**\n * Walks the program body and returns index of the last variable assignment initialized by require statement.\n * Only counts top level require statements.\n *\n * @returns index of the last `const foo = require('bar');` statement or -1 if none was found.\n */\nexport function getLastRequireIndex(program: t.Program): number {\n let lastRequireIdex = -1;\n program.body.forEach((s, i) => {\n if (\n s.type === 'VariableDeclaration' &&\n s.declarations[0].type === 'VariableDeclarator' &&\n s.declarations[0].init !== null &&\n typeof s.declarations[0].init !== 'undefined' &&\n s.declarations[0].init.type === 'CallExpression' &&\n s.declarations[0].init.callee.type === 'Identifier' &&\n s.declarations[0].init.callee.name === 'require'\n ) {\n lastRequireIdex = i;\n }\n });\n return lastRequireIdex;\n}\n\n/**\n * Safely checks if a callee is an identifier with the given name\n * Prevents crashes when accessing callee.name on non-identifier nodes\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeCalleeIdentifierMatch(callee: any, name: string): boolean {\n return Boolean(\n callee &&\n typeof callee === 'object' &&\n 'type' in callee &&\n (callee as { type: string }).type === 'Identifier' &&\n 'name' in callee &&\n (callee as { name: string }).name === name,\n );\n}\n\n/**\n * Safely gets the name of an identifier node\n * Returns null if the node is not an identifier or is undefined\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeGetIdentifierName(node: any): string | null {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return node && node.type === 'Identifier' ? String(node.name) : null;\n}\n\n/**\n * Safely access function body array with proper validation\n * Prevents crashes when accessing body.body on nodes that don't have a body\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeGetFunctionBody(node: any): t.Statement[] | null {\n if (!node || typeof node !== 'object' || !('body' in node)) {\n return null;\n }\n\n const nodeBody = (node as { body: unknown }).body;\n if (!nodeBody || typeof nodeBody !== 'object' || !('body' in nodeBody)) {\n return null;\n }\n\n const bodyArray = (nodeBody as { body: unknown }).body;\n return Array.isArray(bodyArray) ? (bodyArray as t.Statement[]) : null;\n}\n\n/**\n * Safely insert statement before last statement in function body\n * Typically used to insert code before a return statement\n * Returns true if insertion was successful, false otherwise\n */\nexport function safeInsertBeforeReturn(\n body: t.Statement[],\n statement: t.Statement,\n): boolean {\n if (!body || !Array.isArray(body) || body.length === 0) {\n return false;\n }\n\n // Insert before the last statement (typically a return statement)\n const insertIndex = Math.max(0, body.length - 1);\n body.splice(insertIndex, 0, statement);\n return true;\n}\n\n/**\n * Finds a property in an ObjectExpression by name.\n * Commonly used for traversing Vite/React Router config objects.\n *\n * @param configObj - The ObjectExpression to search\n * @param name - The property name to find\n * @returns The matching ObjectProperty, or undefined if not found\n */\nexport function findProperty(\n configObj: t.ObjectExpression,\n name: string,\n): t.ObjectProperty | undefined {\n return configObj.properties.find(\n (p) =>\n p.type === 'ObjectProperty' &&\n p.key.type === 'Identifier' &&\n p.key.name === name,\n ) as t.ObjectProperty | undefined; // Safe: predicate guarantees type\n}\n"]}
@@ -89,6 +89,15 @@ export declare function installPackage({ packageName, alreadyInstalled, askBefor
89
89
  }>;
90
90
  export declare function addSentryCliConfig({ authToken, org, project, url }: CliSetupConfigContent, setupConfig?: CliSetupConfig): Promise<void>;
91
91
  export declare function addDotEnvSentryBuildPluginFile(authToken: string): Promise<void>;
92
+ /**
93
+ * Runs available formatters (Prettier and/or Biome) on the changed or untracked files in the project.
94
+ * This function provides a unified interface for running multiple formatters with a single user prompt.
95
+ *
96
+ * @param _opts The directory of the project. If undefined, the current process working directory will be used.
97
+ */
98
+ export declare function runFormatters(_opts: {
99
+ cwd: string | undefined;
100
+ }): Promise<void>;
92
101
  /**
93
102
  * Runs prettier on the changed or untracked files in the project.
94
103
  *
@@ -97,6 +106,14 @@ export declare function addDotEnvSentryBuildPluginFile(authToken: string): Promi
97
106
  export declare function runPrettierIfInstalled(opts: {
98
107
  cwd: string | undefined;
99
108
  }): Promise<void>;
109
+ /**
110
+ * Runs Biome on the changed or untracked files in the project.
111
+ *
112
+ * @param options.cwd The directory of the project. If undefined, the current process working directory will be used.
113
+ */
114
+ export declare function runBiomeIfInstalled(opts: {
115
+ cwd: string | undefined;
116
+ }): Promise<void>;
100
117
  /**
101
118
  * Checks if @param packageId is listed as a dependency in @param packageJson.
102
119
  * If not, it will ask users if they want to continue without the package.
@@ -137,7 +154,7 @@ export declare function isUsingTypeScript(): boolean;
137
154
  * @param platform the platform of the wizard
138
155
  * @returns project data (org, project, token, url)
139
156
  */
140
- export declare function getOrAskForProjectData(options: WizardOptions, platform?: 'javascript-angular' | 'javascript-nextjs' | 'javascript-nuxt' | 'javascript-react-router' | 'javascript-remix' | 'javascript-sveltekit' | 'apple-ios' | 'android' | 'react-native' | 'flutter'): Promise<{
157
+ export declare function getOrAskForProjectData(options: WizardOptions, platform?: 'javascript-angular' | 'javascript-nextjs' | 'javascript-nuxt' | 'javascript-react-router' | 'javascript-remix' | 'javascript-sveltekit' | 'node-cloudflare-workers' | 'apple-ios' | 'android' | 'react-native' | 'flutter'): Promise<{
141
158
  sentryUrl: string;
142
159
  selfHosted: boolean;
143
160
  selectedProject: SentryProjectData;
@@ -152,7 +169,7 @@ export declare function getOrAskForProjectData(options: WizardOptions, platform?
152
169
  export declare function askForWizardLogin(options: {
153
170
  url: string;
154
171
  promoCode?: string;
155
- platform?: 'javascript-angular' | 'javascript-nextjs' | 'javascript-nuxt' | 'javascript-react-router' | 'javascript-remix' | 'javascript-sveltekit' | 'apple-ios' | 'android' | 'react-native' | 'flutter';
172
+ platform?: 'javascript-angular' | 'javascript-nextjs' | 'javascript-nuxt' | 'javascript-react-router' | 'javascript-remix' | 'javascript-sveltekit' | 'node-cloudflare-workers' | 'apple-ios' | 'android' | 'react-native' | 'flutter';
156
173
  orgSlug?: string;
157
174
  projectSlug?: string;
158
175
  comingFrom?: string;