@sentry/wizard 6.3.0 → 6.5.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 (68) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/e2e-tests/tests/expo.test.js +9 -2
  3. package/dist/e2e-tests/tests/expo.test.js.map +1 -1
  4. package/dist/e2e-tests/tests/react-native.test.js +9 -2
  5. package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
  6. package/dist/e2e-tests/tests/{sveltekit.test.js → sveltekit-hooks.test.js} +10 -6
  7. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -0
  8. package/dist/e2e-tests/tests/sveltekit-tracing.test.d.ts +1 -0
  9. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +203 -0
  10. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -0
  11. package/dist/src/android/android-wizard.js +9 -1
  12. package/dist/src/android/android-wizard.js.map +1 -1
  13. package/dist/src/android/manifest.d.ts +1 -1
  14. package/dist/src/android/manifest.js +2 -2
  15. package/dist/src/android/manifest.js.map +1 -1
  16. package/dist/src/android/templates.d.ts +1 -1
  17. package/dist/src/android/templates.js +4 -1
  18. package/dist/src/android/templates.js.map +1 -1
  19. package/dist/src/react-native/javascript.d.ts +6 -4
  20. package/dist/src/react-native/javascript.js +11 -7
  21. package/dist/src/react-native/javascript.js.map +1 -1
  22. package/dist/src/react-native/react-native-wizard.js +12 -3
  23. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  24. package/dist/src/react-native/xcode.d.ts +2 -2
  25. package/dist/src/react-native/xcode.js +11 -4
  26. package/dist/src/react-native/xcode.js.map +1 -1
  27. package/dist/src/sveltekit/sdk-example.d.ts +2 -2
  28. package/dist/src/sveltekit/sdk-example.js.map +1 -1
  29. package/dist/src/sveltekit/sdk-setup/setup.d.ts +3 -0
  30. package/dist/src/sveltekit/{sdk-setup.js → sdk-setup/setup.js} +113 -157
  31. package/dist/src/sveltekit/sdk-setup/setup.js.map +1 -0
  32. package/dist/src/sveltekit/sdk-setup/svelte-config.d.ts +25 -0
  33. package/dist/src/sveltekit/sdk-setup/svelte-config.js +291 -0
  34. package/dist/src/sveltekit/sdk-setup/svelte-config.js.map +1 -0
  35. package/dist/src/sveltekit/sdk-setup/types.d.ts +7 -0
  36. package/dist/src/sveltekit/sdk-setup/types.js +3 -0
  37. package/dist/src/sveltekit/sdk-setup/types.js.map +1 -0
  38. package/dist/src/sveltekit/sdk-setup/utils.d.ts +6 -0
  39. package/dist/src/sveltekit/sdk-setup/utils.js +45 -0
  40. package/dist/src/sveltekit/sdk-setup/utils.js.map +1 -0
  41. package/dist/src/sveltekit/sdk-setup/vite.d.ts +2 -0
  42. package/dist/src/sveltekit/sdk-setup/vite.js +120 -0
  43. package/dist/src/sveltekit/sdk-setup/vite.js.map +1 -0
  44. package/dist/src/sveltekit/sveltekit-wizard.js +45 -5
  45. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  46. package/dist/src/sveltekit/templates.d.ts +4 -0
  47. package/dist/src/sveltekit/templates.js +33 -10
  48. package/dist/src/sveltekit/templates.js.map +1 -1
  49. package/dist/src/sveltekit/utils.d.ts +2 -1
  50. package/dist/src/sveltekit/utils.js +7 -2
  51. package/dist/src/sveltekit/utils.js.map +1 -1
  52. package/dist/src/version.d.ts +1 -1
  53. package/dist/src/version.js +1 -1
  54. package/dist/src/version.js.map +1 -1
  55. package/dist/test/react-native/javascript.test.js +225 -0
  56. package/dist/test/react-native/javascript.test.js.map +1 -1
  57. package/dist/test/react-native/xcode.test.js +21 -4
  58. package/dist/test/react-native/xcode.test.js.map +1 -1
  59. package/dist/test/sveltekit/sdk-setup/svelte-config.test.d.ts +1 -0
  60. package/dist/test/sveltekit/sdk-setup/svelte-config.test.js +529 -0
  61. package/dist/test/sveltekit/sdk-setup/svelte-config.test.js.map +1 -0
  62. package/dist/test/sveltekit/templates.test.js +103 -10
  63. package/dist/test/sveltekit/templates.test.js.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/e2e-tests/tests/sveltekit.test.js.map +0 -1
  66. package/dist/src/sveltekit/sdk-setup.d.ts +0 -21
  67. package/dist/src/sveltekit/sdk-setup.js.map +0 -1
  68. /package/dist/e2e-tests/tests/{sveltekit.test.d.ts → sveltekit-hooks.test.d.ts} +0 -0
@@ -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, loadSvelteConfig } from './sdk-setup';\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 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@^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 ),\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', () =>\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({ 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('\\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-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';\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 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@^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', () =>\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({ 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"]}
@@ -7,6 +7,10 @@ export declare function getServerHooksTemplate(dsn: string, selectedFeatures: {
7
7
  performance: boolean;
8
8
  replay: boolean;
9
9
  logs: boolean;
10
+ }, includeSentryInit: boolean): string;
11
+ export declare function getInstrumentationServerTemplate(dsn: string, selectedFeatures: {
12
+ performance: boolean;
13
+ logs: boolean;
10
14
  }): string;
11
15
  /**
12
16
  * +page.svelte with Sentry example
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSentryExampleApiRoute = exports.getSentryExampleSveltePage = exports.getServerHooksTemplate = exports.getClientHooksTemplate = void 0;
3
+ exports.getSentryExampleApiRoute = exports.getSentryExampleSveltePage = exports.getInstrumentationServerTemplate = exports.getServerHooksTemplate = exports.getClientHooksTemplate = void 0;
4
4
  function getClientHooksTemplate(dsn, selectedFeatures) {
5
5
  return `import { handleErrorWithSentry, replayIntegration } from "@sentry/sveltekit";
6
6
  import * as Sentry from '@sentry/sveltekit';
@@ -36,26 +36,29 @@ export const handleError = handleErrorWithSentry();
36
36
  `;
37
37
  }
38
38
  exports.getClientHooksTemplate = getClientHooksTemplate;
39
- function getServerHooksTemplate(dsn, selectedFeatures) {
40
- return `import { sequence } from "@sveltejs/kit/hooks";
41
- import { handleErrorWithSentry, sentryHandle } from "@sentry/sveltekit";
42
- import * as Sentry from '@sentry/sveltekit';
39
+ function getServerHooksTemplate(dsn, selectedFeatures, includeSentryInit) {
40
+ const sentryInit = includeSentryInit
41
+ ? `import * as Sentry from '@sentry/sveltekit';
43
42
 
44
43
  Sentry.init({
45
44
  dsn: '${dsn}',
46
45
  ${selectedFeatures.performance
47
- ? `
46
+ ? `
48
47
  tracesSampleRate: 1.0,
49
48
  `
50
- : ''}
49
+ : ''}
51
50
  ${selectedFeatures.logs
52
- ? ` // Enable logs to be sent to Sentry
51
+ ? ` // Enable logs to be sent to Sentry
53
52
  enableLogs: true,
54
53
  `
55
- : ''}
54
+ : ''}
56
55
  // uncomment the line below to enable Spotlight (https://spotlightjs.com)
57
56
  // spotlight: import.meta.env.DEV,
58
- });
57
+ });`
58
+ : ``;
59
+ return `import { sequence } from "@sveltejs/kit/hooks";
60
+ import { handleErrorWithSentry, sentryHandle } from "@sentry/sveltekit";
61
+ ${sentryInit}
59
62
 
60
63
  // If you have custom handlers, make sure to place them after \`sentryHandle()\` in the \`sequence\` function.
61
64
  export const handle = sequence(sentryHandle());
@@ -65,6 +68,26 @@ export const handleError = handleErrorWithSentry();
65
68
  `;
66
69
  }
67
70
  exports.getServerHooksTemplate = getServerHooksTemplate;
71
+ function getInstrumentationServerTemplate(dsn, selectedFeatures) {
72
+ return `import * as Sentry from '@sentry/sveltekit';
73
+
74
+ Sentry.init({
75
+ dsn: '${dsn}',
76
+ ${selectedFeatures.performance
77
+ ? `
78
+ tracesSampleRate: 1.0,
79
+ `
80
+ : ''}
81
+ ${selectedFeatures.logs
82
+ ? ` // Enable logs to be sent to Sentry
83
+ enableLogs: true,
84
+ `
85
+ : ''}
86
+ // uncomment the line below to enable Spotlight (https://spotlightjs.com)
87
+ // spotlight: import.meta.env.DEV,
88
+ });`;
89
+ }
90
+ exports.getInstrumentationServerTemplate = getInstrumentationServerTemplate;
68
91
  /**
69
92
  * +page.svelte with Sentry example
70
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/sveltekit/templates.ts"],"names":[],"mappings":";;;AAAA,SAAgB,sBAAsB,CACpC,GAAW,EACX,gBAIC;IAED,OAAO;;;;UAIC,GAAG;EAEX,gBAAgB,CAAC,WAAW;QAC1B,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,IAAI;QACnB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,MAAM;QACrB,CAAC,CAAC;;;;;;;;;uCASiC;QACnC,CAAC,CAAC,EACN;;;;;CAKC,CAAC;AACF,CAAC;AA9CD,wDA8CC;AAED,SAAgB,sBAAsB,CACpC,GAAW,EACX,gBAIC;IAED,OAAO;;;;;UAKC,GAAG;EAEX,gBAAgB,CAAC,WAAW;QAC1B,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,IAAI;QACnB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;;;;;;;;;;CAUC,CAAC;AACF,CAAC;AAtCD,wDAsCC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,OAK1C;IACC,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU;QACvC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,iBAAiB,OAAO,CAAC,OAAO,oBAAoB,OAAO,CAAC,SAAS,EAAE;QACvF,CAAC,CAAC,WAAW,OAAO,CAAC,OAAO,8BAA8B,OAAO,CAAC,SAAS,EAAE,CAAC;IAEhF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAiDwF,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkK9G,CAAC;AACF,CAAC;AA9ND,gEA8NC;AAED,SAAgB,wBAAwB;IACtC,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AARD,4DAQC","sourcesContent":["export function getClientHooksTemplate(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n },\n) {\n return `import { handleErrorWithSentry, replayIntegration } from \"@sentry/sveltekit\";\nimport * as Sentry from '@sentry/sveltekit';\n\nSentry.init({\n dsn: '${dsn}',\n${\n selectedFeatures.performance\n ? `\n tracesSampleRate: 1.0,\n`\n : ''\n}\n${\n selectedFeatures.logs\n ? ` // Enable logs to be sent to Sentry\n enableLogs: true,\n`\n : ''\n}\n${\n selectedFeatures.replay\n ? ` // This sets the sample rate to be 10%. You may want this to be 100% while\n // in development and sample at a lower rate in production\n replaysSessionSampleRate: 0.1,\n\n // If the entire session is not sampled, use the below sample rate to sample\n // sessions when an error occurs.\n replaysOnErrorSampleRate: 1.0,\n\n // If you don't want to use Session Replay, just remove the line below:\n integrations: [replayIntegration()],`\n : ''\n}\n});\n\n// If you have a custom error handler, pass it to \\`handleErrorWithSentry\\`\nexport const handleError = handleErrorWithSentry();\n`;\n}\n\nexport function getServerHooksTemplate(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n },\n) {\n return `import { sequence } from \"@sveltejs/kit/hooks\";\nimport { handleErrorWithSentry, sentryHandle } from \"@sentry/sveltekit\";\nimport * as Sentry from '@sentry/sveltekit';\n\nSentry.init({\n dsn: '${dsn}',\n${\n selectedFeatures.performance\n ? `\n tracesSampleRate: 1.0,\n`\n : ''\n}\n${\n selectedFeatures.logs\n ? ` // Enable logs to be sent to Sentry\n enableLogs: true,\n`\n : ''\n}\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: import.meta.env.DEV,\n});\n\n// If you have custom handlers, make sure to place them after \\`sentryHandle()\\` in the \\`sequence\\` function.\nexport const handle = sequence(sentryHandle());\n\n// If you have a custom error handler, pass it to \\`handleErrorWithSentry\\`\nexport const handleError = handleErrorWithSentry();\n`;\n}\n\n/**\n * +page.svelte with Sentry example\n */\nexport function getSentryExampleSveltePage(options: {\n selfHosted: boolean;\n url: string;\n orgSlug: string;\n projectId: string;\n}) {\n const issuesPageLink = options.selfHosted\n ? `${options.url}organizations/${options.orgSlug}/issues/?project=${options.projectId}`\n : `https://${options.orgSlug}.sentry.io/issues/?project=${options.projectId}`;\n\n return `<!--\nThis is just a very simple page with a button to throw an example error.\nFeel free to delete this file and the entire sentry route.\n-->\n\n<script>\n import * as Sentry from '@sentry/sveltekit';\n import { onMount } from 'svelte';\n \n // Svelte Runes (requires Svelte 5)\n // let hasSentError = $state(false);\n let hasSentError = false;\n let isConnected = true;\n\n onMount(async () => {\n const result = await Sentry.diagnoseSdkConnectivity();\n isConnected = result !== 'sentry-unreachable';\n });\n\n function getSentryData() {\n Sentry.startSpan(\n {\n name: 'Example Frontend Span',\n op: 'test'\n },\n async () => {\n const res = await fetch('/sentry-example-page');\n if (!res.ok) {\n hasSentError = true;\n throw new Error('Sentry Example Frontend Error');\n }\n }\n );\n }\n</script>\n\n<title>sentry-example-page</title>\n\n<div>\n <main>\n <div class=\"flex-spacer\"></div>\n <svg height=\"40\" width=\"40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.85 2.995a3.698 3.698 0 0 1 1.353 1.354l16.303 28.278a3.703 3.703 0 0 1-1.354 5.053 3.694 3.694 0 0 1-1.848.496h-3.828a31.149 31.149 0 0 0 0-3.09h3.815a.61.61 0 0 0 .537-.917L20.523 5.893a.61.61 0 0 0-1.057 0l-3.739 6.494a28.948 28.948 0 0 1 9.63 10.453 28.988 28.988 0 0 1 3.499 13.78v1.542h-9.852v-1.544a19.106 19.106 0 0 0-2.182-8.85 19.08 19.08 0 0 0-6.032-6.829l-1.85 3.208a15.377 15.377 0 0 1 6.382 12.484v1.542H3.696A3.694 3.694 0 0 1 0 34.473c0-.648.17-1.286.494-1.849l2.33-4.074a8.562 8.562 0 0 1 2.689 1.536L3.158 34.17a.611.611 0 0 0 .538.917h8.448a12.481 12.481 0 0 0-6.037-9.09l-1.344-.772 4.908-8.545 1.344.77a22.16 22.16 0 0 1 7.705 7.444 22.193 22.193 0 0 1 3.316 10.193h3.699a25.892 25.892 0 0 0-3.811-12.033 25.856 25.856 0 0 0-9.046-8.796l-1.344-.772 5.269-9.136a3.698 3.698 0 0 1 3.2-1.849c.648 0 1.285.17 1.847.495Z\" fill=\"currentcolor\"/>\n </svg>\n <h1>\n sentry-example-page\n </h1>\n\n <p class=\"description\">\n Click the button below, and view the sample error on the Sentry <a target=\"_blank\" href=\"${issuesPageLink}\">Issues Page</a>. \n For more details about setting up Sentry, <a target=\"_blank\" href=\"https://docs.sentry.io/platforms/javascript/guides/sveltekit/\">read our docs</a>.\n </p>\n\n <button\n type=\"button\"\n onclick={getSentryData}\n disabled={!isConnected}\n >\n <span>\n Throw Sample Error\n </span>\n </button>\n\n {#if hasSentError}\n <p class=\"success\">\n Sample error was sent to Sentry.\n </p>\n {:else if !isConnected}\n <div class=\"connectivity-error\">\n <p>It looks like network requests to Sentry are being blocked, which will prevent errors from being captured. Try disabling your ad-blocker to complete the test.</p>\n </div>\n {:else}\n <div class=\"success_placeholder\"></div>\n {/if}\n <div class=\"flex-spacer\"></div>\n </main>\n</div>\n\n<style>\n :global(body) {\n margin: 0;\n\n @media (prefers-color-scheme: dark) {\n color: #ededed;\n background-color: #0a0a0a;\n }\n }\n\n main {\n display: flex;\n min-height: 100vh;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n gap: 16px;\n margin: 0;\n padding: 16px;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n\n h1 {\n padding: 0px 4px;\n border-radius: 4px;\n background-color: rgba(24, 20, 35, 0.03);\n font-family: monospace;\n font-size: 20px;\n line-height: 1.2;\n }\n\n p {\n margin: 0;\n font-size: 20px;\n }\n\n a {\n color: #6341F0;\n text-decoration: underline;\n cursor: pointer;\n\n @media (prefers-color-scheme: dark) {\n color: #B3A1FF;\n }\n }\n\n button {\n border-radius: 8px;\n color: white;\n cursor: pointer;\n background-color: #553DB8;\n border: none;\n padding: 0;\n margin-top: 4px;\n\n & > span {\n display: inline-block;\n padding: 12px 16px;\n border-radius: inherit;\n font-size: 20px;\n font-weight: bold;\n line-height: 1;\n background-color: #7553FF;\n border: 1px solid #553DB8;\n transform: translateY(-4px);\n }\n\n &:hover > span {\n transform: translateY(-8px);\n }\n\n &:active > span {\n transform: translateY(0);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n\n & > span {\n transform: translateY(0);\n border: none;\n }\n }\n }\n\n .description {\n text-align: center;\n color: #6E6C75;\n max-width: 500px;\n line-height: 1.5;\n font-size: 20px;\n\n @media (prefers-color-scheme: dark) {\n color: #A49FB5;\n }\n }\n\n .flex-spacer {\n flex: 1;\n }\n\n .success {\n padding: 12px 16px;\n border-radius: 8px;\n font-size: 20px;\n line-height: 1;\n background-color: #00F261;\n border: 1px solid #00BF4D;\n color: #181423;\n }\n\n .success_placeholder {\n height: 46px;\n }\n\n .connectivity-error {\n padding: 12px 16px;\n background-color: #E50045;\n border-radius: 8px;\n width: 500px;\n color: #FFFFFF;\n border: 1px solid #A80033;\n text-align: center;\n margin: 0;\n }\n \n .connectivity-error a {\n color: #FFFFFF;\n text-decoration: underline;\n }\n</style>\n`;\n}\n\nexport function getSentryExampleApiRoute() {\n return `// This is just a very simple API route that throws an example error.\n// Feel free to delete this file and the entire sentry route.\n\nexport const GET = async () => {\n throw new Error(\"Sentry Example API Route Error\");\n};\n`;\n}\n"]}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/sveltekit/templates.ts"],"names":[],"mappings":";;;AAAA,SAAgB,sBAAsB,CACpC,GAAW,EACX,gBAIC;IAED,OAAO;;;;UAIC,GAAG;EAEX,gBAAgB,CAAC,WAAW;QAC1B,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,IAAI;QACnB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,MAAM;QACrB,CAAC,CAAC;;;;;;;;;uCASiC;QACnC,CAAC,CAAC,EACN;;;;;CAKC,CAAC;AACF,CAAC;AA9CD,wDA8CC;AAED,SAAgB,sBAAsB,CACpC,GAAW,EACX,gBAIC,EACD,iBAA0B;IAE1B,MAAM,UAAU,GAAG,iBAAiB;QAClC,CAAC,CAAC;;;UAGI,GAAG;EAEX,gBAAgB,CAAC,WAAW;YAC1B,CAAC,CAAC;;CAEL;YACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,IAAI;YACnB,CAAC,CAAC;;CAEL;YACG,CAAC,CAAC,EACN;;;IAGI;QACA,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;EAEP,UAAU;;;;;;;CAOX,CAAC;AACF,CAAC;AA3CD,wDA2CC;AAED,SAAgB,gCAAgC,CAC9C,GAAW,EACX,gBAGC;IAED,OAAO;;;UAGC,GAAG;EAEX,gBAAgB,CAAC,WAAW;QAC1B,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;EAEE,gBAAgB,CAAC,IAAI;QACnB,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EACN;;;IAGI,CAAC;AACL,CAAC;AA5BD,4EA4BC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,OAK1C;IACC,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU;QACvC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,iBAAiB,OAAO,CAAC,OAAO,oBAAoB,OAAO,CAAC,SAAS,EAAE;QACvF,CAAC,CAAC,WAAW,OAAO,CAAC,OAAO,8BAA8B,OAAO,CAAC,SAAS,EAAE,CAAC;IAEhF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAiDwF,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkK9G,CAAC;AACF,CAAC;AA9ND,gEA8NC;AAED,SAAgB,wBAAwB;IACtC,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AARD,4DAQC","sourcesContent":["export function getClientHooksTemplate(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n },\n) {\n return `import { handleErrorWithSentry, replayIntegration } from \"@sentry/sveltekit\";\nimport * as Sentry from '@sentry/sveltekit';\n\nSentry.init({\n dsn: '${dsn}',\n${\n selectedFeatures.performance\n ? `\n tracesSampleRate: 1.0,\n`\n : ''\n}\n${\n selectedFeatures.logs\n ? ` // Enable logs to be sent to Sentry\n enableLogs: true,\n`\n : ''\n}\n${\n selectedFeatures.replay\n ? ` // This sets the sample rate to be 10%. You may want this to be 100% while\n // in development and sample at a lower rate in production\n replaysSessionSampleRate: 0.1,\n\n // If the entire session is not sampled, use the below sample rate to sample\n // sessions when an error occurs.\n replaysOnErrorSampleRate: 1.0,\n\n // If you don't want to use Session Replay, just remove the line below:\n integrations: [replayIntegration()],`\n : ''\n}\n});\n\n// If you have a custom error handler, pass it to \\`handleErrorWithSentry\\`\nexport const handleError = handleErrorWithSentry();\n`;\n}\n\nexport function getServerHooksTemplate(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n },\n includeSentryInit: boolean,\n) {\n const sentryInit = includeSentryInit\n ? `import * as Sentry from '@sentry/sveltekit';\n\nSentry.init({\n dsn: '${dsn}',\n${\n selectedFeatures.performance\n ? `\n tracesSampleRate: 1.0,\n`\n : ''\n}\n${\n selectedFeatures.logs\n ? ` // Enable logs to be sent to Sentry\n enableLogs: true,\n`\n : ''\n}\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: import.meta.env.DEV,\n});`\n : ``;\n\n return `import { sequence } from \"@sveltejs/kit/hooks\";\nimport { handleErrorWithSentry, sentryHandle } from \"@sentry/sveltekit\";\n${sentryInit}\n\n// If you have custom handlers, make sure to place them after \\`sentryHandle()\\` in the \\`sequence\\` function.\nexport const handle = sequence(sentryHandle());\n\n// If you have a custom error handler, pass it to \\`handleErrorWithSentry\\`\nexport const handleError = handleErrorWithSentry();\n`;\n}\n\nexport function getInstrumentationServerTemplate(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n logs: boolean;\n },\n) {\n return `import * as Sentry from '@sentry/sveltekit';\n\nSentry.init({\n dsn: '${dsn}',\n${\n selectedFeatures.performance\n ? `\n tracesSampleRate: 1.0,\n`\n : ''\n}\n${\n selectedFeatures.logs\n ? ` // Enable logs to be sent to Sentry\n enableLogs: true,\n`\n : ''\n}\n // uncomment the line below to enable Spotlight (https://spotlightjs.com)\n // spotlight: import.meta.env.DEV,\n});`;\n}\n\n/**\n * +page.svelte with Sentry example\n */\nexport function getSentryExampleSveltePage(options: {\n selfHosted: boolean;\n url: string;\n orgSlug: string;\n projectId: string;\n}) {\n const issuesPageLink = options.selfHosted\n ? `${options.url}organizations/${options.orgSlug}/issues/?project=${options.projectId}`\n : `https://${options.orgSlug}.sentry.io/issues/?project=${options.projectId}`;\n\n return `<!--\nThis is just a very simple page with a button to throw an example error.\nFeel free to delete this file and the entire sentry route.\n-->\n\n<script>\n import * as Sentry from '@sentry/sveltekit';\n import { onMount } from 'svelte';\n \n // Svelte Runes (requires Svelte 5)\n // let hasSentError = $state(false);\n let hasSentError = false;\n let isConnected = true;\n\n onMount(async () => {\n const result = await Sentry.diagnoseSdkConnectivity();\n isConnected = result !== 'sentry-unreachable';\n });\n\n function getSentryData() {\n Sentry.startSpan(\n {\n name: 'Example Frontend Span',\n op: 'test'\n },\n async () => {\n const res = await fetch('/sentry-example-page');\n if (!res.ok) {\n hasSentError = true;\n throw new Error('Sentry Example Frontend Error');\n }\n }\n );\n }\n</script>\n\n<title>sentry-example-page</title>\n\n<div>\n <main>\n <div class=\"flex-spacer\"></div>\n <svg height=\"40\" width=\"40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.85 2.995a3.698 3.698 0 0 1 1.353 1.354l16.303 28.278a3.703 3.703 0 0 1-1.354 5.053 3.694 3.694 0 0 1-1.848.496h-3.828a31.149 31.149 0 0 0 0-3.09h3.815a.61.61 0 0 0 .537-.917L20.523 5.893a.61.61 0 0 0-1.057 0l-3.739 6.494a28.948 28.948 0 0 1 9.63 10.453 28.988 28.988 0 0 1 3.499 13.78v1.542h-9.852v-1.544a19.106 19.106 0 0 0-2.182-8.85 19.08 19.08 0 0 0-6.032-6.829l-1.85 3.208a15.377 15.377 0 0 1 6.382 12.484v1.542H3.696A3.694 3.694 0 0 1 0 34.473c0-.648.17-1.286.494-1.849l2.33-4.074a8.562 8.562 0 0 1 2.689 1.536L3.158 34.17a.611.611 0 0 0 .538.917h8.448a12.481 12.481 0 0 0-6.037-9.09l-1.344-.772 4.908-8.545 1.344.77a22.16 22.16 0 0 1 7.705 7.444 22.193 22.193 0 0 1 3.316 10.193h3.699a25.892 25.892 0 0 0-3.811-12.033 25.856 25.856 0 0 0-9.046-8.796l-1.344-.772 5.269-9.136a3.698 3.698 0 0 1 3.2-1.849c.648 0 1.285.17 1.847.495Z\" fill=\"currentcolor\"/>\n </svg>\n <h1>\n sentry-example-page\n </h1>\n\n <p class=\"description\">\n Click the button below, and view the sample error on the Sentry <a target=\"_blank\" href=\"${issuesPageLink}\">Issues Page</a>. \n For more details about setting up Sentry, <a target=\"_blank\" href=\"https://docs.sentry.io/platforms/javascript/guides/sveltekit/\">read our docs</a>.\n </p>\n\n <button\n type=\"button\"\n onclick={getSentryData}\n disabled={!isConnected}\n >\n <span>\n Throw Sample Error\n </span>\n </button>\n\n {#if hasSentError}\n <p class=\"success\">\n Sample error was sent to Sentry.\n </p>\n {:else if !isConnected}\n <div class=\"connectivity-error\">\n <p>It looks like network requests to Sentry are being blocked, which will prevent errors from being captured. Try disabling your ad-blocker to complete the test.</p>\n </div>\n {:else}\n <div class=\"success_placeholder\"></div>\n {/if}\n <div class=\"flex-spacer\"></div>\n </main>\n</div>\n\n<style>\n :global(body) {\n margin: 0;\n\n @media (prefers-color-scheme: dark) {\n color: #ededed;\n background-color: #0a0a0a;\n }\n }\n\n main {\n display: flex;\n min-height: 100vh;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n gap: 16px;\n margin: 0;\n padding: 16px;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n\n h1 {\n padding: 0px 4px;\n border-radius: 4px;\n background-color: rgba(24, 20, 35, 0.03);\n font-family: monospace;\n font-size: 20px;\n line-height: 1.2;\n }\n\n p {\n margin: 0;\n font-size: 20px;\n }\n\n a {\n color: #6341F0;\n text-decoration: underline;\n cursor: pointer;\n\n @media (prefers-color-scheme: dark) {\n color: #B3A1FF;\n }\n }\n\n button {\n border-radius: 8px;\n color: white;\n cursor: pointer;\n background-color: #553DB8;\n border: none;\n padding: 0;\n margin-top: 4px;\n\n & > span {\n display: inline-block;\n padding: 12px 16px;\n border-radius: inherit;\n font-size: 20px;\n font-weight: bold;\n line-height: 1;\n background-color: #7553FF;\n border: 1px solid #553DB8;\n transform: translateY(-4px);\n }\n\n &:hover > span {\n transform: translateY(-8px);\n }\n\n &:active > span {\n transform: translateY(0);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n\n & > span {\n transform: translateY(0);\n border: none;\n }\n }\n }\n\n .description {\n text-align: center;\n color: #6E6C75;\n max-width: 500px;\n line-height: 1.5;\n font-size: 20px;\n\n @media (prefers-color-scheme: dark) {\n color: #A49FB5;\n }\n }\n\n .flex-spacer {\n flex: 1;\n }\n\n .success {\n padding: 12px 16px;\n border-radius: 8px;\n font-size: 20px;\n line-height: 1;\n background-color: #00F261;\n border: 1px solid #00BF4D;\n color: #181423;\n }\n\n .success_placeholder {\n height: 46px;\n }\n\n .connectivity-error {\n padding: 12px 16px;\n background-color: #E50045;\n border-radius: 8px;\n width: 500px;\n color: #FFFFFF;\n border: 1px solid #A80033;\n text-align: center;\n margin: 0;\n }\n \n .connectivity-error a {\n color: #FFFFFF;\n text-decoration: underline;\n }\n</style>\n`;\n}\n\nexport function getSentryExampleApiRoute() {\n return `// This is just a very simple API route that throws an example error.\n// Feel free to delete this file and the entire sentry route.\n\nexport const GET = async () => {\n throw new Error(\"Sentry Example API Route Error\");\n};\n`;\n}\n"]}
@@ -1,2 +1,3 @@
1
- export declare function getKitVersionBucket(version: string | undefined): 'none' | 'invalid' | '0.x' | '>=1.0.0 <1.24.0' | '>=1.24.0';
1
+ export type KitVersionBucket = 'none' | 'invalid' | '0.x' | '>=1.0.0 <1.24.0' | '>=1.24.0 <2.31.0' | '>=2.31.0';
2
+ export declare function getKitVersionBucket(version: string | undefined): KitVersionBucket;
2
3
  export declare function getSvelteVersionBucket(version: string | undefined): 'none' | 'invalid' | '<3.0.0' | '3.x' | '4.x' | '>4.x';
@@ -16,11 +16,16 @@ function getKitVersionBucket(version) {
16
16
  else if ((0, semver_1.lt)(minVer, '1.24.0')) {
17
17
  return '>=1.0.0 <1.24.0';
18
18
  }
19
- else {
19
+ else if ((0, semver_1.lt)(minVer, '2.31.0')) {
20
20
  // This is the version when the client-side invalidation fix was released
21
21
  // https://github.com/sveltejs/kit/releases/tag/%40sveltejs%2Fkit%401.24.0
22
22
  // https://github.com/sveltejs/kit/pull/10576
23
- return '>=1.24.0';
23
+ return '>=1.24.0 <2.31.0';
24
+ }
25
+ else {
26
+ // This is the version where sveltekit-native tracing and instrumentation was
27
+ // introduced as an experimental feature.
28
+ return '>=2.31.0';
24
29
  }
25
30
  }
26
31
  exports.getKitVersionBucket = getKitVersionBucket;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/sveltekit/utils.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AAExC,SAAgB,mBAAmB,CACjC,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,MAAM,CAAC;KACf;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC/B,OAAO,iBAAiB,CAAC;KAC1B;SAAM;QACL,yEAAyE;QACzE,0EAA0E;QAC1E,6CAA6C;QAC7C,OAAO,UAAU,CAAC;KACnB;AACH,CAAC;AAtBD,kDAsBC;AAED,SAAgB,sBAAsB,CACpC,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,MAAM,CAAC;KACf;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,uDAAuD;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,wDAuBC","sourcesContent":["import { lt, minVersion } from 'semver';\n\nexport function getKitVersionBucket(\n version: string | undefined,\n): 'none' | 'invalid' | '0.x' | '>=1.0.0 <1.24.0' | '>=1.24.0' {\n if (!version) {\n return 'none';\n }\n\n const minVer = minVersion(version);\n if (!minVer) {\n return 'invalid';\n }\n\n if (lt(minVer, '1.0.0')) {\n return '0.x';\n } else if (lt(minVer, '1.24.0')) {\n return '>=1.0.0 <1.24.0';\n } else {\n // This is the version when the client-side invalidation fix was released\n // https://github.com/sveltejs/kit/releases/tag/%40sveltejs%2Fkit%401.24.0\n // https://github.com/sveltejs/kit/pull/10576\n return '>=1.24.0';\n }\n}\n\nexport function getSvelteVersionBucket(\n version: string | undefined,\n): 'none' | 'invalid' | '<3.0.0' | '3.x' | '4.x' | '>4.x' {\n if (!version) {\n return 'none';\n }\n\n const minVer = minVersion(version);\n if (!minVer) {\n return 'invalid';\n }\n\n if (lt(minVer, '3.0.0')) {\n return '<3.0.0';\n }\n if (lt(minVer, '4.0.0')) {\n return '3.x';\n }\n if (lt(minVer, '5.0.0')) {\n return '4.x';\n }\n // Svelte 5 isn't released yet but it's being worked on\n return '>4.x';\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/sveltekit/utils.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AAUxC,SAAgB,mBAAmB,CACjC,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,MAAM,CAAC;KACf;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC/B,OAAO,iBAAiB,CAAC;KAC1B;SAAM,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC/B,yEAAyE;QACzE,0EAA0E;QAC1E,6CAA6C;QAC7C,OAAO,kBAAkB,CAAC;KAC3B;SAAM;QACL,6EAA6E;QAC7E,yCAAyC;QACzC,OAAO,UAAU,CAAC;KACnB;AACH,CAAC;AA1BD,kDA0BC;AAED,SAAgB,sBAAsB,CACpC,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,MAAM,CAAC;KACf;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,IAAI,IAAA,WAAE,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,uDAAuD;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,wDAuBC","sourcesContent":["import { lt, minVersion } from 'semver';\n\nexport type KitVersionBucket =\n | 'none'\n | 'invalid'\n | '0.x'\n | '>=1.0.0 <1.24.0'\n | '>=1.24.0 <2.31.0'\n | '>=2.31.0';\n\nexport function getKitVersionBucket(\n version: string | undefined,\n): KitVersionBucket {\n if (!version) {\n return 'none';\n }\n\n const minVer = minVersion(version);\n if (!minVer) {\n return 'invalid';\n }\n\n if (lt(minVer, '1.0.0')) {\n return '0.x';\n } else if (lt(minVer, '1.24.0')) {\n return '>=1.0.0 <1.24.0';\n } else if (lt(minVer, '2.31.0')) {\n // This is the version when the client-side invalidation fix was released\n // https://github.com/sveltejs/kit/releases/tag/%40sveltejs%2Fkit%401.24.0\n // https://github.com/sveltejs/kit/pull/10576\n return '>=1.24.0 <2.31.0';\n } else {\n // This is the version where sveltekit-native tracing and instrumentation was\n // introduced as an experimental feature.\n return '>=2.31.0';\n }\n}\n\nexport function getSvelteVersionBucket(\n version: string | undefined,\n): 'none' | 'invalid' | '<3.0.0' | '3.x' | '4.x' | '>4.x' {\n if (!version) {\n return 'none';\n }\n\n const minVer = minVersion(version);\n if (!minVer) {\n return 'invalid';\n }\n\n if (lt(minVer, '3.0.0')) {\n return '<3.0.0';\n }\n if (lt(minVer, '4.0.0')) {\n return '3.x';\n }\n if (lt(minVer, '5.0.0')) {\n return '4.x';\n }\n // Svelte 5 isn't released yet but it's being worked on\n return '>4.x';\n}\n"]}
@@ -1 +1 @@
1
- export declare const WIZARD_VERSION = "6.3.0";
1
+ export declare const WIZARD_VERSION = "6.5.0";
@@ -3,5 +3,5 @@
3
3
  // This is file is updated at release time.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.WIZARD_VERSION = void 0;
6
- exports.WIZARD_VERSION = '6.3.0';
6
+ exports.WIZARD_VERSION = '6.5.0';
7
7
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA,oCAAoC;AACpC,2CAA2C;;;AAE9B,QAAA,cAAc,GAAG,OAAO,CAAC","sourcesContent":["// DO NOT modify this file manually!\n// This is file is updated at release time.\n\nexport const WIZARD_VERSION = '6.3.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA,oCAAoC;AACpC,2CAA2C;;;AAE9B,QAAA,cAAc,GAAG,OAAO,CAAC","sourcesContent":["// DO NOT modify this file manually!\n// This is file is updated at release time.\n\nexport const WIZARD_VERSION = '6.5.0';\n"]}
@@ -36,6 +36,9 @@ Sentry.init({
36
36
  // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
37
37
  sendDefaultPii: true,
38
38
 
39
+ // Enable Logs
40
+ enableLogs: false,
41
+
39
42
  // uncomment the line below to enable Spotlight (https://spotlightjs.com)
40
43
  // spotlight: __DEV__,
41
44
  });
@@ -81,6 +84,9 @@ Sentry.init({
81
84
  // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
82
85
  sendDefaultPii: true,
83
86
 
87
+ // Enable Logs
88
+ enableLogs: false,
89
+
84
90
  // Configure Session Replay
85
91
  replaysSessionSampleRate: 0.1,
86
92
  replaysOnErrorSampleRate: 1,
@@ -133,6 +139,9 @@ Sentry.init({
133
139
  // Adds more context data to events (IP address, cookies, user, etc.)
134
140
  // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
135
141
  sendDefaultPii: true,
142
+
143
+ // Enable Logs
144
+ enableLogs: false,
136
145
  integrations: [Sentry.feedbackIntegration()],
137
146
 
138
147
  // uncomment the line below to enable Spotlight (https://spotlightjs.com)
@@ -153,6 +162,108 @@ export default App;`;
153
162
  enableFeedbackWidget: true,
154
163
  })).toBe(expectedOutput);
155
164
  });
165
+ (0, vitest_1.it)('adds sdk import and sentry init under last import in the file and enables logs', () => {
166
+ const input = `import * as React from 'react';
167
+
168
+ const test = 'test';
169
+
170
+ import { View } from 'react-native';
171
+
172
+ const App = () => {
173
+ return (
174
+ <View>
175
+ Test App
176
+ </View>
177
+ );
178
+ };
179
+
180
+ export default App;`;
181
+ const expectedOutput = `import * as React from 'react';
182
+
183
+ const test = 'test';
184
+
185
+ import { View } from 'react-native';
186
+ import * as Sentry from '@sentry/react-native';
187
+
188
+ Sentry.init({
189
+ dsn: 'dsn',
190
+
191
+ // Adds more context data to events (IP address, cookies, user, etc.)
192
+ // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
193
+ sendDefaultPii: true,
194
+
195
+ // Enable Logs
196
+ enableLogs: true,
197
+
198
+ // uncomment the line below to enable Spotlight (https://spotlightjs.com)
199
+ // spotlight: __DEV__,
200
+ });
201
+
202
+ const App = () => {
203
+ return (
204
+ <View>
205
+ Test App
206
+ </View>
207
+ );
208
+ };
209
+
210
+ export default App;`;
211
+ (0, vitest_1.expect)((0, javascript_1.addSentryInitWithSdkImport)(input, {
212
+ dsn: 'dsn',
213
+ enableLogs: true,
214
+ })).toBe(expectedOutput);
215
+ });
216
+ (0, vitest_1.it)('adds sdk import and sentry init with logs disabled', () => {
217
+ const input = `import * as React from 'react';
218
+
219
+ const test = 'test';
220
+
221
+ import { View } from 'react-native';
222
+
223
+ const App = () => {
224
+ return (
225
+ <View>
226
+ Test App
227
+ </View>
228
+ );
229
+ };
230
+
231
+ export default App;`;
232
+ const expectedOutput = `import * as React from 'react';
233
+
234
+ const test = 'test';
235
+
236
+ import { View } from 'react-native';
237
+ import * as Sentry from '@sentry/react-native';
238
+
239
+ Sentry.init({
240
+ dsn: 'dsn',
241
+
242
+ // Adds more context data to events (IP address, cookies, user, etc.)
243
+ // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
244
+ sendDefaultPii: true,
245
+
246
+ // Enable Logs
247
+ enableLogs: false,
248
+
249
+ // uncomment the line below to enable Spotlight (https://spotlightjs.com)
250
+ // spotlight: __DEV__,
251
+ });
252
+
253
+ const App = () => {
254
+ return (
255
+ <View>
256
+ Test App
257
+ </View>
258
+ );
259
+ };
260
+
261
+ export default App;`;
262
+ (0, vitest_1.expect)((0, javascript_1.addSentryInitWithSdkImport)(input, {
263
+ dsn: 'dsn',
264
+ enableLogs: false,
265
+ })).toBe(expectedOutput);
266
+ });
156
267
  (0, vitest_1.it)('adds sdk import and sentry init under last import in the file and enables session replay and feedback widget', () => {
157
268
  const input = `import * as React from 'react';
158
269
 
@@ -183,6 +294,9 @@ Sentry.init({
183
294
  // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
184
295
  sendDefaultPii: true,
185
296
 
297
+ // Enable Logs
298
+ enableLogs: false,
299
+
186
300
  // Configure Session Replay
187
301
  replaysSessionSampleRate: 0.1,
188
302
  replaysOnErrorSampleRate: 1,
@@ -207,6 +321,117 @@ export default App;`;
207
321
  enableFeedbackWidget: true,
208
322
  })).toBe(expectedOutput);
209
323
  });
324
+ (0, vitest_1.it)('adds sdk import and sentry init with all features enabled', () => {
325
+ const input = `import * as React from 'react';
326
+
327
+ const test = 'test';
328
+
329
+ import { View } from 'react-native';
330
+
331
+ const App = () => {
332
+ return (
333
+ <View>
334
+ Test App
335
+ </View>
336
+ );
337
+ };
338
+
339
+ export default App;`;
340
+ const expectedOutput = `import * as React from 'react';
341
+
342
+ const test = 'test';
343
+
344
+ import { View } from 'react-native';
345
+ import * as Sentry from '@sentry/react-native';
346
+
347
+ Sentry.init({
348
+ dsn: 'dsn',
349
+
350
+ // Adds more context data to events (IP address, cookies, user, etc.)
351
+ // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
352
+ sendDefaultPii: true,
353
+
354
+ // Enable Logs
355
+ enableLogs: true,
356
+
357
+ // Configure Session Replay
358
+ replaysSessionSampleRate: 0.1,
359
+ replaysOnErrorSampleRate: 1,
360
+ integrations: [Sentry.mobileReplayIntegration(), Sentry.feedbackIntegration()],
361
+
362
+ // uncomment the line below to enable Spotlight (https://spotlightjs.com)
363
+ // spotlight: __DEV__,
364
+ });
365
+
366
+ const App = () => {
367
+ return (
368
+ <View>
369
+ Test App
370
+ </View>
371
+ );
372
+ };
373
+
374
+ export default App;`;
375
+ (0, vitest_1.expect)((0, javascript_1.addSentryInitWithSdkImport)(input, {
376
+ dsn: 'dsn',
377
+ enableSessionReplay: true,
378
+ enableFeedbackWidget: true,
379
+ enableLogs: true,
380
+ })).toBe(expectedOutput);
381
+ });
382
+ (0, vitest_1.it)('adds sdk import and sentry init with logs enabled and other features disabled', () => {
383
+ const input = `import * as React from 'react';
384
+
385
+ const test = 'test';
386
+
387
+ import { View } from 'react-native';
388
+
389
+ const App = () => {
390
+ return (
391
+ <View>
392
+ Test App
393
+ </View>
394
+ );
395
+ };
396
+
397
+ export default App;`;
398
+ const expectedOutput = `import * as React from 'react';
399
+
400
+ const test = 'test';
401
+
402
+ import { View } from 'react-native';
403
+ import * as Sentry from '@sentry/react-native';
404
+
405
+ Sentry.init({
406
+ dsn: 'dsn',
407
+
408
+ // Adds more context data to events (IP address, cookies, user, etc.)
409
+ // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
410
+ sendDefaultPii: true,
411
+
412
+ // Enable Logs
413
+ enableLogs: true,
414
+
415
+ // uncomment the line below to enable Spotlight (https://spotlightjs.com)
416
+ // spotlight: __DEV__,
417
+ });
418
+
419
+ const App = () => {
420
+ return (
421
+ <View>
422
+ Test App
423
+ </View>
424
+ );
425
+ };
426
+
427
+ export default App;`;
428
+ (0, vitest_1.expect)((0, javascript_1.addSentryInitWithSdkImport)(input, {
429
+ dsn: 'dsn',
430
+ enableSessionReplay: false,
431
+ enableFeedbackWidget: false,
432
+ enableLogs: true,
433
+ })).toBe(expectedOutput);
434
+ });
210
435
  (0, vitest_1.it)('does not add sdk import and sentry init in the file without imports', () => {
211
436
  const input = `export const test = 'test';`;
212
437
  (0, vitest_1.expect)((0, javascript_1.addSentryInitWithSdkImport)(input, { dsn: 'dsn' })).toBe(input);