@sentry/wizard 6.11.0 → 6.13.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 (245) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/bin.js +16 -1
  3. package/dist/bin.js.map +1 -1
  4. package/dist/e2e-tests/tests/angular-17.test.js +3 -4
  5. package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
  6. package/dist/e2e-tests/tests/angular-19.test.js +3 -4
  7. package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
  8. package/dist/e2e-tests/tests/cloudflare-worker.test.js +5 -0
  9. package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -1
  10. package/dist/e2e-tests/tests/flutter.test.js +60 -0
  11. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  12. package/dist/e2e-tests/tests/help-message.test.js +8 -3
  13. package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
  14. package/dist/e2e-tests/tests/nuxt-3.test.js +12 -6
  15. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  16. package/dist/e2e-tests/tests/nuxt-4.test.js +12 -6
  17. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  18. package/dist/e2e-tests/tests/pnpm-workspace.test.js +8 -4
  19. package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
  20. package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js +96 -0
  21. package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js.map +1 -0
  22. package/dist/e2e-tests/tests/react-router.test.js +6 -7
  23. package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
  24. package/dist/e2e-tests/tests/remix.test.js +2 -4
  25. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  26. package/dist/e2e-tests/tests/sveltekit-hooks.test.js +24 -8
  27. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
  28. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +8 -4
  29. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
  30. package/dist/lib/Constants.d.ts +1 -0
  31. package/dist/lib/Constants.js +5 -0
  32. package/dist/lib/Constants.js.map +1 -1
  33. package/dist/lib/Steps/Integrations/Electron.js +2 -2
  34. package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
  35. package/dist/src/android/android-wizard.js +3 -0
  36. package/dist/src/android/android-wizard.js.map +1 -1
  37. package/dist/src/angular/codemods/main.d.ts +1 -1
  38. package/dist/src/angular/codemods/main.js +0 -1
  39. package/dist/src/angular/codemods/main.js.map +1 -1
  40. package/dist/src/apple/apple-wizard.js +2 -3
  41. package/dist/src/apple/apple-wizard.js.map +1 -1
  42. package/dist/src/apple/check-installed-cli.d.ts +1 -1
  43. package/dist/src/apple/check-installed-cli.js +13 -7
  44. package/dist/src/apple/check-installed-cli.js.map +1 -1
  45. package/dist/src/apple/code-tools.js +17 -3
  46. package/dist/src/apple/code-tools.js.map +1 -1
  47. package/dist/src/apple/configure-package-manager.js +18 -5
  48. package/dist/src/apple/configure-package-manager.js.map +1 -1
  49. package/dist/src/apple/configure-xcode-project.js +8 -1
  50. package/dist/src/apple/configure-xcode-project.js.map +1 -1
  51. package/dist/src/apple/lookup-xcode-project.d.ts +8 -5
  52. package/dist/src/apple/lookup-xcode-project.js +22 -17
  53. package/dist/src/apple/lookup-xcode-project.js.map +1 -1
  54. package/dist/src/apple/options.d.ts +5 -0
  55. package/dist/src/apple/options.js.map +1 -1
  56. package/dist/src/apple/sentry-swift-package.d.ts +4 -0
  57. package/dist/src/apple/sentry-swift-package.js +17 -0
  58. package/dist/src/apple/sentry-swift-package.js.map +1 -0
  59. package/dist/src/apple/snapshots/apple-snapshots-wizard.d.ts +2 -0
  60. package/dist/src/apple/snapshots/apple-snapshots-wizard.js +251 -0
  61. package/dist/src/apple/snapshots/apple-snapshots-wizard.js.map +1 -0
  62. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.d.ts +13 -0
  63. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js +48 -0
  64. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js.map +1 -0
  65. package/dist/src/apple/snapshots/snapshot-test-file.d.ts +18 -0
  66. package/dist/src/apple/snapshots/snapshot-test-file.js +122 -0
  67. package/dist/src/apple/snapshots/snapshot-test-file.js.map +1 -0
  68. package/dist/src/apple/snapshots/snapshot-verification-scheme.d.ts +6 -0
  69. package/dist/src/apple/snapshots/snapshot-verification-scheme.js +147 -0
  70. package/dist/src/apple/snapshots/snapshot-verification-scheme.js.map +1 -0
  71. package/dist/src/apple/snapshots/snapshotpreviews-package.d.ts +4 -0
  72. package/dist/src/apple/snapshots/snapshotpreviews-package.js +8 -0
  73. package/dist/src/apple/snapshots/snapshotpreviews-package.js.map +1 -0
  74. package/dist/src/apple/snapshots/snapshots-cli-preflight.d.ts +23 -0
  75. package/dist/src/apple/snapshots/snapshots-cli-preflight.js +136 -0
  76. package/dist/src/apple/snapshots/snapshots-cli-preflight.js.map +1 -0
  77. package/dist/src/apple/xcode-manager.d.ts +59 -1
  78. package/dist/src/apple/xcode-manager.js +507 -106
  79. package/dist/src/apple/xcode-manager.js.map +1 -1
  80. package/dist/src/cloudflare/cloudflare-wizard.js +5 -0
  81. package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -1
  82. package/dist/src/cloudflare/sdk-setup.d.ts +1 -0
  83. package/dist/src/cloudflare/sdk-setup.js.map +1 -1
  84. package/dist/src/cloudflare/templates.d.ts +1 -0
  85. package/dist/src/cloudflare/templates.js +7 -1
  86. package/dist/src/cloudflare/templates.js.map +1 -1
  87. package/dist/src/cloudflare/wrap-worker.d.ts +1 -0
  88. package/dist/src/cloudflare/wrap-worker.js +7 -0
  89. package/dist/src/cloudflare/wrap-worker.js.map +1 -1
  90. package/dist/src/flutter/flutter-wizard.js +3 -0
  91. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  92. package/dist/src/nextjs/templates.js +12 -6
  93. package/dist/src/nextjs/templates.js.map +1 -1
  94. package/dist/src/nuxt/templates.js +12 -6
  95. package/dist/src/nuxt/templates.js.map +1 -1
  96. package/dist/src/react-native/expo.d.ts +6 -0
  97. package/dist/src/react-native/expo.js +27 -1
  98. package/dist/src/react-native/expo.js.map +1 -1
  99. package/dist/src/react-native/git.d.ts +5 -0
  100. package/dist/src/react-native/git.js +32 -1
  101. package/dist/src/react-native/git.js.map +1 -1
  102. package/dist/src/react-native/javascript.js +3 -1
  103. package/dist/src/react-native/javascript.js.map +1 -1
  104. package/dist/src/react-native/react-native-wizard.js +12 -6
  105. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  106. package/dist/src/react-router/codemods/client.entry.d.ts +1 -1
  107. package/dist/src/react-router/codemods/client.entry.js +124 -26
  108. package/dist/src/react-router/codemods/client.entry.js.map +1 -1
  109. package/dist/src/react-router/codemods/react-router-config.js +1 -1
  110. package/dist/src/react-router/codemods/react-router-config.js.map +1 -1
  111. package/dist/src/react-router/codemods/server-entry.d.ts +1 -1
  112. package/dist/src/react-router/codemods/server-entry.js +40 -4
  113. package/dist/src/react-router/codemods/server-entry.js.map +1 -1
  114. package/dist/src/react-router/codemods/vite.js +46 -1
  115. package/dist/src/react-router/codemods/vite.js.map +1 -1
  116. package/dist/src/react-router/react-router-wizard.js +62 -21
  117. package/dist/src/react-router/react-router-wizard.js.map +1 -1
  118. package/dist/src/react-router/sdk-setup.d.ts +5 -3
  119. package/dist/src/react-router/sdk-setup.js +44 -16
  120. package/dist/src/react-router/sdk-setup.js.map +1 -1
  121. package/dist/src/react-router/templates.d.ts +2 -4
  122. package/dist/src/react-router/templates.js +89 -87
  123. package/dist/src/react-router/templates.js.map +1 -1
  124. package/dist/src/remix/sdk-setup.js +1 -2
  125. package/dist/src/remix/sdk-setup.js.map +1 -1
  126. package/dist/src/run.d.ts +4 -1
  127. package/dist/src/run.js +13 -0
  128. package/dist/src/run.js.map +1 -1
  129. package/dist/src/sourcemaps/tools/remix.js +4 -4
  130. package/dist/src/sourcemaps/tools/remix.js.map +1 -1
  131. package/dist/src/sourcemaps/tools/vite.js +1 -1
  132. package/dist/src/sourcemaps/tools/vite.js.map +1 -1
  133. package/dist/src/sveltekit/sdk-setup/setup.js +17 -4
  134. package/dist/src/sveltekit/sdk-setup/setup.js.map +1 -1
  135. package/dist/src/sveltekit/sdk-setup/vite.js +1 -1
  136. package/dist/src/sveltekit/sdk-setup/vite.js.map +1 -1
  137. package/dist/src/sveltekit/templates.js +12 -6
  138. package/dist/src/sveltekit/templates.js.map +1 -1
  139. package/dist/src/utils/ast-utils.d.ts +10 -0
  140. package/dist/src/utils/ast-utils.js +19 -1
  141. package/dist/src/utils/ast-utils.js.map +1 -1
  142. package/dist/src/utils/clack/index.d.ts +2 -1
  143. package/dist/src/utils/clack/index.js +17 -6
  144. package/dist/src/utils/clack/index.js.map +1 -1
  145. package/dist/src/utils/files.d.ts +2 -0
  146. package/dist/src/utils/files.js +58 -0
  147. package/dist/src/utils/files.js.map +1 -0
  148. package/dist/src/utils/git.d.ts +3 -1
  149. package/dist/src/utils/git.js +2 -1
  150. package/dist/src/utils/git.js.map +1 -1
  151. package/dist/src/utils/line-endings.d.ts +1 -0
  152. package/dist/src/utils/line-endings.js +76 -0
  153. package/dist/src/utils/line-endings.js.map +1 -0
  154. package/dist/src/version.d.ts +1 -1
  155. package/dist/src/version.js +1 -1
  156. package/dist/src/version.js.map +1 -1
  157. package/dist/test/angular/angular-wizard.test.js +0 -5
  158. package/dist/test/angular/angular-wizard.test.js.map +1 -1
  159. package/dist/test/apple/code-tools.test.js +78 -0
  160. package/dist/test/apple/code-tools.test.js.map +1 -1
  161. package/dist/test/apple/configure-package-manager.test.d.ts +1 -0
  162. package/dist/test/apple/configure-package-manager.test.js +161 -0
  163. package/dist/test/apple/configure-package-manager.test.js.map +1 -0
  164. package/dist/test/apple/lookup-xcode-project.test.d.ts +1 -0
  165. package/dist/test/apple/lookup-xcode-project.test.js +167 -0
  166. package/dist/test/apple/lookup-xcode-project.test.js.map +1 -0
  167. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.d.ts +1 -0
  168. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js +487 -0
  169. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js.map +1 -0
  170. package/dist/test/apple/snapshots/hosted-test-target-fixture.d.ts +24 -0
  171. package/dist/test/apple/snapshots/hosted-test-target-fixture.js +191 -0
  172. package/dist/test/apple/snapshots/hosted-test-target-fixture.js.map +1 -0
  173. package/dist/test/apple/snapshots/snapshot-test-file.test.d.ts +1 -0
  174. package/dist/test/apple/snapshots/snapshot-test-file.test.js +110 -0
  175. package/dist/test/apple/snapshots/snapshot-test-file.test.js.map +1 -0
  176. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.d.ts +1 -0
  177. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js +146 -0
  178. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js.map +1 -0
  179. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.d.ts +1 -0
  180. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js +186 -0
  181. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js.map +1 -0
  182. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.d.ts +1 -0
  183. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js +192 -0
  184. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js.map +1 -0
  185. package/dist/test/apple/snapshots/source-file-insertion.test.d.ts +1 -0
  186. package/dist/test/apple/snapshots/source-file-insertion.test.js +77 -0
  187. package/dist/test/apple/snapshots/source-file-insertion.test.js.map +1 -0
  188. package/dist/test/apple/xcode-manager.test.js +452 -43
  189. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  190. package/dist/test/cloudflare/sdk-setup.test.js +20 -2
  191. package/dist/test/cloudflare/sdk-setup.test.js.map +1 -1
  192. package/dist/test/cloudflare/templates.test.js +54 -0
  193. package/dist/test/cloudflare/templates.test.js.map +1 -1
  194. package/dist/test/cloudflare/wrap-worker.test.js +74 -11
  195. package/dist/test/cloudflare/wrap-worker.test.js.map +1 -1
  196. package/dist/test/constants.test.d.ts +1 -0
  197. package/dist/test/constants.test.js +12 -0
  198. package/dist/test/constants.test.js.map +1 -0
  199. package/dist/test/nextjs/templates.test.js +66 -33
  200. package/dist/test/nextjs/templates.test.js.map +1 -1
  201. package/dist/test/nuxt/templates.test.js +66 -36
  202. package/dist/test/nuxt/templates.test.js.map +1 -1
  203. package/dist/test/react-native/expo.test.js +140 -0
  204. package/dist/test/react-native/expo.test.js.map +1 -1
  205. package/dist/test/react-native/git.test.d.ts +1 -0
  206. package/dist/test/react-native/git.test.js +160 -0
  207. package/dist/test/react-native/git.test.js.map +1 -0
  208. package/dist/test/react-router/codemods/client-entry.test.js +38 -5
  209. package/dist/test/react-router/codemods/client-entry.test.js.map +1 -1
  210. package/dist/test/react-router/codemods/server-entry.test.js +83 -0
  211. package/dist/test/react-router/codemods/server-entry.test.js.map +1 -1
  212. package/dist/test/react-router/codemods/vite.test.js +89 -0
  213. package/dist/test/react-router/codemods/vite.test.js.map +1 -1
  214. package/dist/test/react-router/sdk-setup.test.js +98 -6
  215. package/dist/test/react-router/sdk-setup.test.js.map +1 -1
  216. package/dist/test/react-router/templates.test.js +50 -38
  217. package/dist/test/react-router/templates.test.js.map +1 -1
  218. package/dist/test/remix/build-script.test.d.ts +1 -0
  219. package/dist/test/remix/build-script.test.js +124 -0
  220. package/dist/test/remix/build-script.test.js.map +1 -0
  221. package/dist/test/remix/client-entry.test.js +4 -10
  222. package/dist/test/remix/client-entry.test.js.map +1 -1
  223. package/dist/test/run.test.d.ts +1 -0
  224. package/dist/test/run.test.js +137 -0
  225. package/dist/test/run.test.js.map +1 -0
  226. package/dist/test/sourcemaps/tools/vite.test.js +12 -8
  227. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
  228. package/dist/test/sveltekit/templates.test.js +78 -27
  229. package/dist/test/sveltekit/templates.test.js.map +1 -1
  230. package/dist/test/utils/ast-utils.test.js +22 -0
  231. package/dist/test/utils/ast-utils.test.js.map +1 -1
  232. package/dist/test/utils/clack/index.test.js +101 -0
  233. package/dist/test/utils/clack/index.test.js.map +1 -1
  234. package/dist/test/utils/git.test.js +10 -0
  235. package/dist/test/utils/git.test.js.map +1 -1
  236. package/dist/test/utils/line-endings.test.d.ts +1 -0
  237. package/dist/test/utils/line-endings.test.js +103 -0
  238. package/dist/test/utils/line-endings.test.js.map +1 -0
  239. package/package.json +2 -2
  240. package/dist/src/react-router/codemods/root.d.ts +0 -1
  241. package/dist/src/react-router/codemods/root.js +0 -171
  242. package/dist/src/react-router/codemods/root.js.map +0 -1
  243. package/dist/test/react-router/codemods/root.test.js +0 -178
  244. package/dist/test/react-router/codemods/root.test.js.map +0 -1
  245. /package/dist/{test/react-router/codemods/root.test.d.ts → e2e-tests/tests/react-router-instrumentation-api.test.d.ts} +0 -0
@@ -71,6 +71,7 @@ vitest_1.vi.mock('../../src/cloudflare/wrangler/get-entry-point-from-wrangler-co
71
71
  const testDsn = 'https://example@sentry.io/123';
72
72
  const testFeatures = {
73
73
  performance: true,
74
+ logs: false,
74
75
  };
75
76
  (0, vitest_1.beforeEach)(() => {
76
77
  vitest_1.vi.clearAllMocks();
@@ -130,8 +131,25 @@ vitest_1.vi.mock('../../src/cloudflare/wrangler/get-entry-point-from-wrangler-co
130
131
  const wrapWorkerWithSentrySpy = vitest_1.vi
131
132
  .spyOn(wrapWorker, 'wrapWorkerWithSentry')
132
133
  .mockResolvedValue(undefined);
133
- await (0, sdk_setup_1.createSentryInitFile)(testDsn, { performance: false });
134
- (0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, { performance: false });
134
+ await (0, sdk_setup_1.createSentryInitFile)(testDsn, {
135
+ performance: false,
136
+ logs: false,
137
+ });
138
+ (0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, { performance: false, logs: false });
139
+ });
140
+ (0, vitest_1.it)('passes logs feature flag correctly', async () => {
141
+ const wrapWorkerWithSentrySpy = vitest_1.vi
142
+ .spyOn(wrapWorker, 'wrapWorkerWithSentry')
143
+ .mockResolvedValue(undefined);
144
+ await (0, sdk_setup_1.createSentryInitFile)(testDsn, { performance: false, logs: true });
145
+ (0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, { performance: false, logs: true });
146
+ });
147
+ (0, vitest_1.it)('passes both feature flags correctly', async () => {
148
+ const wrapWorkerWithSentrySpy = vitest_1.vi
149
+ .spyOn(wrapWorker, 'wrapWorkerWithSentry')
150
+ .mockResolvedValue(undefined);
151
+ await (0, sdk_setup_1.createSentryInitFile)(testDsn, { performance: true, logs: true });
152
+ (0, vitest_1.expect)(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(path.join(tmpDir, get_entry_point_from_wrangler_config_1.defaultEntryPoint), testDsn, { performance: true, logs: true });
135
153
  });
136
154
  });
137
155
  (0, vitest_1.describe)('and the entry point file does not exist', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-setup.test.js","sourceRoot":"","sources":["../../../test/cloudflare/sdk-setup.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { createSentryInitFile } from '../../src/cloudflare/sdk-setup';\nimport { defaultEntryPoint } from '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config';\nimport * as templates from '../../src/cloudflare/templates';\nimport * as wrapWorker from '../../src/cloudflare/wrap-worker';\n\nconst { clackMocks } = vi.hoisted(() => {\n const info = vi.fn();\n const warn = vi.fn();\n const success = vi.fn();\n const step = vi.fn();\n const note = vi.fn();\n\n return {\n clackMocks: {\n info,\n warn,\n success,\n step,\n note,\n },\n };\n});\n\nvi.mock('@clack/prompts', () => ({\n __esModule: true,\n default: {\n log: {\n info: clackMocks.info,\n warn: clackMocks.warn,\n success: clackMocks.success,\n step: clackMocks.step,\n },\n note: clackMocks.note,\n },\n}));\n\nconst { getEntryPointFromWranglerConfigMock } = vi.hoisted(() => ({\n getEntryPointFromWranglerConfigMock: vi.fn(),\n}));\n\nvi.mock(\n '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config',\n () => ({\n getEntryPointFromWranglerConfig: getEntryPointFromWranglerConfigMock,\n defaultEntryPoint: 'src/index.ts',\n }),\n);\n\ndescribe('createSentryInitFile', () => {\n let tmpDir: string;\n const testDsn = 'https://example@sentry.io/123';\n const testFeatures = {\n performance: true,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sdk-setup-test-'));\n\n vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n it('creates a new default entry point file', async () => {\n const template =\n 'export default { async fetch() { return new Response(\"ᕕ(⌐■_■)ᕗ ♪♬\"); } }';\n const getCloudflareWorkerTemplateWithHandlerSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplateWithHandler')\n .mockReturnValue(template);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n const expectedPath = path.join(tmpDir, 'src/index.ts');\n const content = fs.readFileSync(expectedPath, 'utf-8');\n\n expect(clackMocks.info).toHaveBeenCalledWith(\n 'No entry point found in wrangler config, creating a new one.',\n );\n expect(fs.existsSync(expectedPath)).toBe(true);\n expect(content).toBe(template);\n expect(clackMocks.success).toHaveBeenCalledWith('Created src/index.ts.');\n expect(getCloudflareWorkerTemplateWithHandlerSpy).toHaveBeenCalled();\n });\n\n describe('when entry point is found in wrangler config', () => {\n describe('and the entry point file exists', () => {\n beforeEach(async () => {\n await createSentryInitFile(testDsn, testFeatures);\n getEntryPointFromWranglerConfigMock.mockReturnValue(defaultEntryPoint);\n });\n\n it('wraps the worker with Sentry when wrapping succeeds', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n testFeatures,\n );\n });\n\n it('handles wrapping failure gracefully', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Wrapping failed'),\n );\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(clackMocks.warn).toHaveBeenCalledWith(\n 'Failed to wrap worker automatically.',\n );\n expect(clackMocks.step).toHaveBeenCalledWith(\n 'Please wrap your handler with Sentry initialization:',\n );\n expect(clackMocks.note).toHaveBeenCalledWith(\n expect.stringContaining('import * as Sentry'),\n );\n });\n\n it('shows template with correct DSN when wrapping fails', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Failed'),\n );\n const getCloudflareWorkerTemplateSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplate')\n .mockReturnValue('template with dsn');\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(getCloudflareWorkerTemplateSpy).toHaveBeenCalledWith(\n testDsn,\n testFeatures,\n );\n expect(clackMocks.note).toHaveBeenCalledWith('template with dsn');\n });\n\n it('passes performance feature flag correctly', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, { performance: false });\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n { performance: false },\n );\n });\n });\n\n describe('and the entry point file does not exist', () => {\n it('does not throw an error', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockResolvedValue(\n undefined,\n );\n\n await expect(\n createSentryInitFile(testDsn, testFeatures),\n ).resolves.not.toThrow();\n });\n\n it('does not call wrapWorkerWithSentry', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).not.toHaveBeenCalled();\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"sdk-setup.test.js","sourceRoot":"","sources":["../../../test/cloudflare/sdk-setup.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { createSentryInitFile } from '../../src/cloudflare/sdk-setup';\nimport { defaultEntryPoint } from '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config';\nimport * as templates from '../../src/cloudflare/templates';\nimport * as wrapWorker from '../../src/cloudflare/wrap-worker';\n\nconst { clackMocks } = vi.hoisted(() => {\n const info = vi.fn();\n const warn = vi.fn();\n const success = vi.fn();\n const step = vi.fn();\n const note = vi.fn();\n\n return {\n clackMocks: {\n info,\n warn,\n success,\n step,\n note,\n },\n };\n});\n\nvi.mock('@clack/prompts', () => ({\n __esModule: true,\n default: {\n log: {\n info: clackMocks.info,\n warn: clackMocks.warn,\n success: clackMocks.success,\n step: clackMocks.step,\n },\n note: clackMocks.note,\n },\n}));\n\nconst { getEntryPointFromWranglerConfigMock } = vi.hoisted(() => ({\n getEntryPointFromWranglerConfigMock: vi.fn(),\n}));\n\nvi.mock(\n '../../src/cloudflare/wrangler/get-entry-point-from-wrangler-config',\n () => ({\n getEntryPointFromWranglerConfig: getEntryPointFromWranglerConfigMock,\n defaultEntryPoint: 'src/index.ts',\n }),\n);\n\ndescribe('createSentryInitFile', () => {\n let tmpDir: string;\n const testDsn = 'https://example@sentry.io/123';\n const testFeatures = {\n performance: true,\n logs: false,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sdk-setup-test-'));\n\n vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n it('creates a new default entry point file', async () => {\n const template =\n 'export default { async fetch() { return new Response(\"ᕕ(⌐■_■)ᕗ ♪♬\"); } }';\n const getCloudflareWorkerTemplateWithHandlerSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplateWithHandler')\n .mockReturnValue(template);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n const expectedPath = path.join(tmpDir, 'src/index.ts');\n const content = fs.readFileSync(expectedPath, 'utf-8');\n\n expect(clackMocks.info).toHaveBeenCalledWith(\n 'No entry point found in wrangler config, creating a new one.',\n );\n expect(fs.existsSync(expectedPath)).toBe(true);\n expect(content).toBe(template);\n expect(clackMocks.success).toHaveBeenCalledWith('Created src/index.ts.');\n expect(getCloudflareWorkerTemplateWithHandlerSpy).toHaveBeenCalled();\n });\n\n describe('when entry point is found in wrangler config', () => {\n describe('and the entry point file exists', () => {\n beforeEach(async () => {\n await createSentryInitFile(testDsn, testFeatures);\n getEntryPointFromWranglerConfigMock.mockReturnValue(defaultEntryPoint);\n });\n\n it('wraps the worker with Sentry when wrapping succeeds', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n testFeatures,\n );\n });\n\n it('handles wrapping failure gracefully', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Wrapping failed'),\n );\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(clackMocks.warn).toHaveBeenCalledWith(\n 'Failed to wrap worker automatically.',\n );\n expect(clackMocks.step).toHaveBeenCalledWith(\n 'Please wrap your handler with Sentry initialization:',\n );\n expect(clackMocks.note).toHaveBeenCalledWith(\n expect.stringContaining('import * as Sentry'),\n );\n });\n\n it('shows template with correct DSN when wrapping fails', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockRejectedValue(\n new Error('Failed'),\n );\n const getCloudflareWorkerTemplateSpy = vi\n .spyOn(templates, 'getCloudflareWorkerTemplate')\n .mockReturnValue('template with dsn');\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(getCloudflareWorkerTemplateSpy).toHaveBeenCalledWith(\n testDsn,\n testFeatures,\n );\n expect(clackMocks.note).toHaveBeenCalledWith('template with dsn');\n });\n\n it('passes performance feature flag correctly', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, {\n performance: false,\n logs: false,\n });\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n { performance: false, logs: false },\n );\n });\n\n it('passes logs feature flag correctly', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, { performance: false, logs: true });\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n { performance: false, logs: true },\n );\n });\n\n it('passes both feature flags correctly', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, { performance: true, logs: true });\n\n expect(wrapWorkerWithSentrySpy).toHaveBeenCalledWith(\n path.join(tmpDir, defaultEntryPoint),\n testDsn,\n { performance: true, logs: true },\n );\n });\n });\n\n describe('and the entry point file does not exist', () => {\n it('does not throw an error', async () => {\n vi.spyOn(wrapWorker, 'wrapWorkerWithSentry').mockResolvedValue(\n undefined,\n );\n\n await expect(\n createSentryInitFile(testDsn, testFeatures),\n ).resolves.not.toThrow();\n });\n\n it('does not call wrapWorkerWithSentry', async () => {\n const wrapWorkerWithSentrySpy = vi\n .spyOn(wrapWorker, 'wrapWorkerWithSentry')\n .mockResolvedValue(undefined);\n\n await createSentryInitFile(testDsn, testFeatures);\n\n expect(wrapWorkerWithSentrySpy).not.toHaveBeenCalled();\n });\n });\n });\n});\n"]}
@@ -7,6 +7,7 @@ const templates_1 = require("../../src/cloudflare/templates");
7
7
  (0, vitest_1.it)('generates worker template with performance monitoring enabled', () => {
8
8
  const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
9
9
  performance: true,
10
+ logs: false,
10
11
  });
11
12
  (0, vitest_1.expect)(template).toMatchInlineSnapshot(`
12
13
  "import * as Sentry from '@sentry/cloudflare';
@@ -30,6 +31,7 @@ const templates_1 = require("../../src/cloudflare/templates");
30
31
  (0, vitest_1.it)('generates worker template with performance monitoring disabled', () => {
31
32
  const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
32
33
  performance: false,
34
+ logs: false,
33
35
  });
34
36
  (0, vitest_1.expect)(template).toMatchInlineSnapshot(`
35
37
  "import * as Sentry from '@sentry/cloudflare';
@@ -46,18 +48,70 @@ const templates_1 = require("../../src/cloudflare/templates");
46
48
  } satisfies ExportedHandler<Env>,
47
49
  );
48
50
  "
51
+ `);
52
+ });
53
+ (0, vitest_1.it)('generates worker template with logs enabled', () => {
54
+ const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
55
+ performance: false,
56
+ logs: true,
57
+ });
58
+ (0, vitest_1.expect)(template).toMatchInlineSnapshot(`
59
+ "import * as Sentry from '@sentry/cloudflare';
60
+
61
+ export default Sentry.withSentry(
62
+ (env) => ({
63
+ dsn: 'my-dsn',
64
+ // Enable logs to be sent to Sentry
65
+ enableLogs: true,
66
+ }),
67
+ {
68
+ async fetch(request, env, ctx): Promise<Response> {
69
+ // Your worker logic here
70
+ return new Response('Hello World!');
71
+ },
72
+ } satisfies ExportedHandler<Env>,
73
+ );
74
+ "
75
+ `);
76
+ });
77
+ (0, vitest_1.it)('generates worker template with both performance and logs enabled', () => {
78
+ const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
79
+ performance: true,
80
+ logs: true,
81
+ });
82
+ (0, vitest_1.expect)(template).toMatchInlineSnapshot(`
83
+ "import * as Sentry from '@sentry/cloudflare';
84
+
85
+ export default Sentry.withSentry(
86
+ (env) => ({
87
+ dsn: 'my-dsn',
88
+ // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
89
+ tracesSampleRate: 1,
90
+ // Enable logs to be sent to Sentry
91
+ enableLogs: true,
92
+ }),
93
+ {
94
+ async fetch(request, env, ctx): Promise<Response> {
95
+ // Your worker logic here
96
+ return new Response('Hello World!');
97
+ },
98
+ } satisfies ExportedHandler<Env>,
99
+ );
100
+ "
49
101
  `);
50
102
  });
51
103
  (0, vitest_1.it)('includes the correct DSN', () => {
52
104
  const dsn = 'https://example@sentry.io/123';
53
105
  const template = (0, templates_1.getCloudflareWorkerTemplate)(dsn, {
54
106
  performance: true,
107
+ logs: false,
55
108
  });
56
109
  (0, vitest_1.expect)(template).toContain(`dsn: '${dsn}'`);
57
110
  });
58
111
  (0, vitest_1.it)('wraps handler with Sentry.withSentry', () => {
59
112
  const template = (0, templates_1.getCloudflareWorkerTemplate)('my-dsn', {
60
113
  performance: false,
114
+ logs: false,
61
115
  });
62
116
  (0, vitest_1.expect)(template).toContain('Sentry.withSentry');
63
117
  (0, vitest_1.expect)(template).toContain('async fetch(request, env, ctx)');
@@ -1 +1 @@
1
- {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/cloudflare/templates.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8DAA6E;AAE7E,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,IAAA,WAAE,EAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;OAiBtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;OAetC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,GAAG,EAAE;gBAChD,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC7D,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { getCloudflareWorkerTemplate } from '../../src/cloudflare/templates';\n\ndescribe('Cloudflare code templates', () => {\n describe('getCloudflareWorkerTemplate', () => {\n it('generates worker template with performance monitoring enabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: true,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t\t// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.\n \t\ttracesSampleRate: 1,\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('generates worker template with performance monitoring disabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('includes the correct DSN', () => {\n const dsn = 'https://example@sentry.io/123';\n const template = getCloudflareWorkerTemplate(dsn, {\n performance: true,\n });\n\n expect(template).toContain(`dsn: '${dsn}'`);\n });\n\n it('wraps handler with Sentry.withSentry', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n });\n\n expect(template).toContain('Sentry.withSentry');\n expect(template).toContain('async fetch(request, env, ctx)');\n expect(template).toContain('satisfies ExportedHandler<Env>');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/cloudflare/templates.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8DAA6E;AAE7E,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,IAAA,WAAE,EAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;OAiBtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;OAetC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;OAiBtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;OAmBtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,GAAG,EAAE;gBAChD,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAA,uCAA2B,EAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAChD,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC7D,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { getCloudflareWorkerTemplate } from '../../src/cloudflare/templates';\n\ndescribe('Cloudflare code templates', () => {\n describe('getCloudflareWorkerTemplate', () => {\n it('generates worker template with performance monitoring enabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: true,\n logs: false,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t\t// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.\n \t\ttracesSampleRate: 1,\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('generates worker template with performance monitoring disabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n logs: false,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('generates worker template with logs enabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n logs: true,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t\t// Enable logs to be sent to Sentry\n \t\tenableLogs: true,\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('generates worker template with both performance and logs enabled', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: true,\n logs: true,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from '@sentry/cloudflare';\n\n export default Sentry.withSentry(\n \t(env) => ({\n \t\tdsn: 'my-dsn',\n \t\t// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.\n \t\ttracesSampleRate: 1,\n \t\t// Enable logs to be sent to Sentry\n \t\tenableLogs: true,\n \t}),\n \t{\n \t\tasync fetch(request, env, ctx): Promise<Response> {\n \t\t\t// Your worker logic here\n \t\t\treturn new Response('Hello World!');\n \t\t},\n \t} satisfies ExportedHandler<Env>,\n );\n \"\n `);\n });\n\n it('includes the correct DSN', () => {\n const dsn = 'https://example@sentry.io/123';\n const template = getCloudflareWorkerTemplate(dsn, {\n performance: true,\n logs: false,\n });\n\n expect(template).toContain(`dsn: '${dsn}'`);\n });\n\n it('wraps handler with Sentry.withSentry', () => {\n const template = getCloudflareWorkerTemplate('my-dsn', {\n performance: false,\n logs: false,\n });\n\n expect(template).toContain('Sentry.withSentry');\n expect(template).toContain('async fetch(request, env, ctx)');\n expect(template).toContain('satisfies ExportedHandler<Env>');\n });\n });\n});\n"]}
@@ -55,13 +55,17 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
55
55
  const filePath = copyFixture('simple-with-satisfies.ts');
56
56
  await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-test-dsn', {
57
57
  performance: false,
58
+ logs: false,
58
59
  });
59
60
  const result = readResult();
60
61
  (0, vitest_1.expect)(result).toMatchSnapshot();
61
62
  });
62
63
  (0, vitest_1.it)('preserves complex handler logic', async () => {
63
64
  const filePath = copyFixture('complex-handler.ts');
64
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
65
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
66
+ performance: false,
67
+ logs: false,
68
+ });
65
69
  const result = readResult();
66
70
  (0, vitest_1.expect)(result).toMatchSnapshot();
67
71
  });
@@ -69,13 +73,48 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
69
73
  (0, vitest_1.describe)('performance monitoring', () => {
70
74
  (0, vitest_1.it)('includes tracesSampleRate when performance is enabled', async () => {
71
75
  const filePath = copyFixture('simple.ts');
72
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: true });
76
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
77
+ performance: true,
78
+ logs: false,
79
+ });
73
80
  const result = readResult();
74
81
  (0, vitest_1.expect)(result).toMatchSnapshot();
75
82
  });
76
83
  (0, vitest_1.it)('omits tracesSampleRate when performance is disabled', async () => {
77
84
  const filePath = copyFixture('simple.ts');
78
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
85
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
86
+ performance: false,
87
+ logs: false,
88
+ });
89
+ const result = readResult();
90
+ (0, vitest_1.expect)(result).toMatchSnapshot();
91
+ });
92
+ });
93
+ (0, vitest_1.describe)('logs', () => {
94
+ (0, vitest_1.it)('includes enableLogs when logs is enabled', async () => {
95
+ const filePath = copyFixture('simple.ts');
96
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
97
+ performance: false,
98
+ logs: true,
99
+ });
100
+ const result = readResult();
101
+ (0, vitest_1.expect)(result).toMatchSnapshot();
102
+ });
103
+ (0, vitest_1.it)('omits enableLogs when logs is disabled', async () => {
104
+ const filePath = copyFixture('simple.ts');
105
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
106
+ performance: false,
107
+ logs: false,
108
+ });
109
+ const result = readResult();
110
+ (0, vitest_1.expect)(result).not.toContain('enableLogs');
111
+ });
112
+ (0, vitest_1.it)('includes both tracesSampleRate and enableLogs when both are enabled', async () => {
113
+ const filePath = copyFixture('simple.ts');
114
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
115
+ performance: true,
116
+ logs: true,
117
+ });
79
118
  const result = readResult();
80
119
  (0, vitest_1.expect)(result).toMatchSnapshot();
81
120
  });
@@ -83,19 +122,28 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
83
122
  (0, vitest_1.describe)('import handling', () => {
84
123
  (0, vitest_1.it)('adds Sentry import at the beginning of the file', async () => {
85
124
  const filePath = copyFixture('with-comment.ts');
86
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
125
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
126
+ performance: false,
127
+ logs: false,
128
+ });
87
129
  const result = readResult();
88
130
  (0, vitest_1.expect)(result).toMatchSnapshot();
89
131
  });
90
132
  (0, vitest_1.it)('preserves existing imports', async () => {
91
133
  const filePath = copyFixture('with-import.ts');
92
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
134
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
135
+ performance: false,
136
+ logs: false,
137
+ });
93
138
  const result = readResult();
94
139
  (0, vitest_1.expect)(result).toMatchSnapshot();
95
140
  });
96
141
  (0, vitest_1.it)('preserves an external default export', async () => {
97
142
  const filePath = copyFixture('external-default-export.ts');
98
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
143
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
144
+ performance: false,
145
+ logs: false,
146
+ });
99
147
  const result = readResult();
100
148
  (0, vitest_1.expect)(result).toMatchSnapshot();
101
149
  });
@@ -104,14 +152,20 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
104
152
  (0, vitest_1.it)('does not wrap again if Sentry is already present', async () => {
105
153
  const filePath = copyFixture('already-wrapped.ts');
106
154
  const originalContent = fs.readFileSync(path.join(fixturesDir, 'already-wrapped.ts'), 'utf-8');
107
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'new-dsn', { performance: true });
155
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'new-dsn', {
156
+ performance: true,
157
+ logs: false,
158
+ });
108
159
  const result = readResult();
109
160
  (0, vitest_1.expect)(result).toBe(originalContent);
110
161
  });
111
162
  (0, vitest_1.it)('does not modify if @sentry/cloudflare is imported', async () => {
112
163
  const filePath = copyFixture('with-sentry-import.ts');
113
164
  const originalContent = fs.readFileSync(path.join(fixturesDir, 'with-sentry-import.ts'), 'utf-8');
114
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
165
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
166
+ performance: false,
167
+ logs: false,
168
+ });
115
169
  const result = readResult();
116
170
  (0, vitest_1.expect)(result).toBe(originalContent);
117
171
  });
@@ -120,7 +174,10 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
120
174
  (0, vitest_1.it)('uses the provided DSN', async () => {
121
175
  const filePath = copyFixture('simple.ts');
122
176
  const testDsn = 'https://d7a9abbecd95ed7d0f5b6c965f5fb6ba@o447951.ingest.us.sentry.io/4510147615391744';
123
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, testDsn, { performance: false });
177
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, testDsn, {
178
+ performance: false,
179
+ logs: false,
180
+ });
124
181
  const result = readResult();
125
182
  (0, vitest_1.expect)(result).toMatchSnapshot();
126
183
  });
@@ -128,13 +185,19 @@ const wrap_worker_1 = require("../../src/cloudflare/wrap-worker");
128
185
  (0, vitest_1.describe)('edge cases', () => {
129
186
  (0, vitest_1.it)('handles worker without satisfies clause', async () => {
130
187
  const filePath = copyFixture('simple.ts');
131
- await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false });
188
+ await (0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
189
+ performance: false,
190
+ logs: false,
191
+ });
132
192
  const result = readResult();
133
193
  (0, vitest_1.expect)(result).toMatchSnapshot();
134
194
  });
135
195
  (0, vitest_1.it)('handles files with no default export gracefully', async () => {
136
196
  const filePath = copyFixture('no-default-export.ts');
137
- await (0, vitest_1.expect)((0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', { performance: false })).resolves.not.toThrow();
197
+ await (0, vitest_1.expect)((0, wrap_worker_1.wrapWorkerWithSentry)(filePath, 'my-dsn', {
198
+ performance: false,
199
+ logs: false,
200
+ })).resolves.not.toThrow();
138
201
  const result = readResult();
139
202
  (0, vitest_1.expect)(result).toMatchSnapshot();
140
203
  });
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-worker.test.js","sourceRoot":"","sources":["../../../test/cloudflare/wrap-worker.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { wrapWorkerWithSentry } from '../../src/cloudflare/wrap-worker';\n\ndescribe('wrapWorkerWithSentry', () => {\n const fixturesDir = path.join(__dirname, 'fixtures', 'worker');\n let tmpDir: string;\n\n function copyFixture(fixtureName: string): string {\n const content = fs.readFileSync(\n path.join(fixturesDir, fixtureName),\n 'utf-8',\n );\n const targetPath = path.join(tmpDir, 'worker.ts');\n fs.writeFileSync(targetPath, content);\n return targetPath;\n }\n\n function readResult(): string {\n return fs.readFileSync(path.join(tmpDir, 'worker.ts'), 'utf-8');\n }\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'wrap-worker-'));\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n describe('basic wrapping', () => {\n it('wraps a simple worker export with Sentry', async () => {\n const filePath = copyFixture('simple-with-satisfies.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-test-dsn', {\n performance: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves complex handler logic', async () => {\n const filePath = copyFixture('complex-handler.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('performance monitoring', () => {\n it('includes tracesSampleRate when performance is enabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: true });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('omits tracesSampleRate when performance is disabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('import handling', () => {\n it('adds Sentry import at the beginning of the file', async () => {\n const filePath = copyFixture('with-comment.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves existing imports', async () => {\n const filePath = copyFixture('with-import.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves an external default export', async () => {\n const filePath = copyFixture('external-default-export.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('idempotency', () => {\n it('does not wrap again if Sentry is already present', async () => {\n const filePath = copyFixture('already-wrapped.ts');\n const originalContent = fs.readFileSync(\n path.join(fixturesDir, 'already-wrapped.ts'),\n 'utf-8',\n );\n\n await wrapWorkerWithSentry(filePath, 'new-dsn', { performance: true });\n\n const result = readResult();\n\n expect(result).toBe(originalContent);\n });\n\n it('does not modify if @sentry/cloudflare is imported', async () => {\n const filePath = copyFixture('with-sentry-import.ts');\n const originalContent = fs.readFileSync(\n path.join(fixturesDir, 'with-sentry-import.ts'),\n 'utf-8',\n );\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toBe(originalContent);\n });\n });\n\n describe('DSN handling', () => {\n it('uses the provided DSN', async () => {\n const filePath = copyFixture('simple.ts');\n\n const testDsn =\n 'https://d7a9abbecd95ed7d0f5b6c965f5fb6ba@o447951.ingest.us.sentry.io/4510147615391744';\n\n await wrapWorkerWithSentry(filePath, testDsn, { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('edge cases', () => {\n it('handles worker without satisfies clause', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('handles files with no default export gracefully', async () => {\n const filePath = copyFixture('no-default-export.ts');\n\n await expect(\n wrapWorkerWithSentry(filePath, 'my-dsn', { performance: false }),\n ).resolves.not.toThrow();\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"wrap-worker.test.js","sourceRoot":"","sources":["../../../test/cloudflare/wrap-worker.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAyE;AACzE,4CAA8B;AAC9B,gDAAkC;AAClC,4CAA8B;AAC9B,kEAAwE;AAExE,IAAA,iBAAQ,EAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,IAAI,MAAc,CAAC;IAEnB,SAAS,WAAW,CAAC,WAAmB;QACtC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EACnC,OAAO,CACR,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,SAAS,UAAU;QACjB,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,WAAE,CAAC,aAAa,EAAE,CAAC;QAEnB,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACzB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACxC;QAED,WAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAA,WAAE,EAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,0BAA0B,CAAC,CAAC;YAEzD,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,aAAa,EAAE;gBAClD,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;YAEnD,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,IAAA,WAAE,EAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAA,WAAE,EAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAEhD,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAE/C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,4BAA4B,CAAC,CAAC;YAE3D,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,IAAA,WAAE,EAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAC5C,OAAO,CACR,CAAC;YAEF,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,SAAS,EAAE;gBAC9C,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;YACtD,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAC/C,OAAO,CACR,CAAC;YAEF,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAA,WAAE,EAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,OAAO,GACX,uFAAuF,CAAC;YAE1F,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,OAAO,EAAE;gBAC5C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,IAAA,WAAE,EAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;YAErD,MAAM,IAAA,eAAM,EACV,IAAA,kCAAoB,EAAC,QAAQ,EAAE,QAAQ,EAAE;gBACvC,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;aACZ,CAAC,CACH,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAEzB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport { wrapWorkerWithSentry } from '../../src/cloudflare/wrap-worker';\n\ndescribe('wrapWorkerWithSentry', () => {\n const fixturesDir = path.join(__dirname, 'fixtures', 'worker');\n let tmpDir: string;\n\n function copyFixture(fixtureName: string): string {\n const content = fs.readFileSync(\n path.join(fixturesDir, fixtureName),\n 'utf-8',\n );\n const targetPath = path.join(tmpDir, 'worker.ts');\n fs.writeFileSync(targetPath, content);\n return targetPath;\n }\n\n function readResult(): string {\n return fs.readFileSync(path.join(tmpDir, 'worker.ts'), 'utf-8');\n }\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'wrap-worker-'));\n });\n\n afterEach(() => {\n if (fs.existsSync(tmpDir)) {\n fs.rmSync(tmpDir, { recursive: true });\n }\n\n vi.restoreAllMocks();\n });\n\n describe('basic wrapping', () => {\n it('wraps a simple worker export with Sentry', async () => {\n const filePath = copyFixture('simple-with-satisfies.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-test-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves complex handler logic', async () => {\n const filePath = copyFixture('complex-handler.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('performance monitoring', () => {\n it('includes tracesSampleRate when performance is enabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: true,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('omits tracesSampleRate when performance is disabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('logs', () => {\n it('includes enableLogs when logs is enabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: true,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('omits enableLogs when logs is disabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).not.toContain('enableLogs');\n });\n\n it('includes both tracesSampleRate and enableLogs when both are enabled', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: true,\n logs: true,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('import handling', () => {\n it('adds Sentry import at the beginning of the file', async () => {\n const filePath = copyFixture('with-comment.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves existing imports', async () => {\n const filePath = copyFixture('with-import.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('preserves an external default export', async () => {\n const filePath = copyFixture('external-default-export.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('idempotency', () => {\n it('does not wrap again if Sentry is already present', async () => {\n const filePath = copyFixture('already-wrapped.ts');\n const originalContent = fs.readFileSync(\n path.join(fixturesDir, 'already-wrapped.ts'),\n 'utf-8',\n );\n\n await wrapWorkerWithSentry(filePath, 'new-dsn', {\n performance: true,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toBe(originalContent);\n });\n\n it('does not modify if @sentry/cloudflare is imported', async () => {\n const filePath = copyFixture('with-sentry-import.ts');\n const originalContent = fs.readFileSync(\n path.join(fixturesDir, 'with-sentry-import.ts'),\n 'utf-8',\n );\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toBe(originalContent);\n });\n });\n\n describe('DSN handling', () => {\n it('uses the provided DSN', async () => {\n const filePath = copyFixture('simple.ts');\n\n const testDsn =\n 'https://d7a9abbecd95ed7d0f5b6c965f5fb6ba@o447951.ingest.us.sentry.io/4510147615391744';\n\n await wrapWorkerWithSentry(filePath, testDsn, {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n\n describe('edge cases', () => {\n it('handles worker without satisfies clause', async () => {\n const filePath = copyFixture('simple.ts');\n\n await wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n });\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n\n it('handles files with no default export gracefully', async () => {\n const filePath = copyFixture('no-default-export.ts');\n\n await expect(\n wrapWorkerWithSentry(filePath, 'my-dsn', {\n performance: false,\n logs: false,\n }),\n ).resolves.not.toThrow();\n\n const result = readResult();\n\n expect(result).toMatchSnapshot();\n });\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const Constants_1 = require("../lib/Constants");
5
+ (0, vitest_1.describe)('Constants', () => {
6
+ (0, vitest_1.it)('exposes Apple Snapshots as a selectable integration', () => {
7
+ (0, vitest_1.expect)(Object.keys(Constants_1.Integration)).toContain('appleSnapshots');
8
+ (0, vitest_1.expect)((0, Constants_1.getIntegrationDescription)(Constants_1.Integration.appleSnapshots)).toBe('Apple Snapshots');
9
+ (0, vitest_1.expect)((0, Constants_1.mapIntegrationToPlatform)(Constants_1.Integration.appleSnapshots)).toBe('iOS');
10
+ });
11
+ });
12
+ //# sourceMappingURL=constants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../test/constants.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAE9C,gDAI0B;AAE1B,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAA,WAAE,EAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,IAAA,eAAM,EAAC,MAAM,CAAC,IAAI,CAAC,uBAAW,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAA,eAAM,EAAC,IAAA,qCAAyB,EAAC,uBAAW,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAChE,iBAAiB,CAClB,CAAC;QACF,IAAA,eAAM,EAAC,IAAA,oCAAwB,EAAC,uBAAW,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\n\nimport {\n getIntegrationDescription,\n Integration,\n mapIntegrationToPlatform,\n} from '../lib/Constants';\n\ndescribe('Constants', () => {\n it('exposes Apple Snapshots as a selectable integration', () => {\n expect(Object.keys(Integration)).toContain('appleSnapshots');\n expect(getIntegrationDescription(Integration.appleSnapshots)).toBe(\n 'Apple Snapshots',\n );\n expect(mapIntegrationToPlatform(Integration.appleSnapshots)).toBe('iOS');\n });\n});\n"]}
@@ -36,9 +36,12 @@ const templates_1 = require("../../src/nextjs/templates");
36
36
  // Define how likely Replay events are sampled when an error occurs.
37
37
  replaysOnErrorSampleRate: 1.0,
38
38
 
39
- // Enable sending user PII (Personally Identifiable Information)
40
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
41
- sendDefaultPii: true,
39
+ dataCollection: {
40
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
41
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
42
+ // userInfo: false,
43
+ // httpBodies: [],
44
+ },
42
45
  });
43
46
 
44
47
  export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
@@ -74,9 +77,12 @@ const templates_1 = require("../../src/nextjs/templates");
74
77
  // Define how likely Replay events are sampled when an error occurs.
75
78
  replaysOnErrorSampleRate: 1.0,
76
79
 
77
- // Enable sending user PII (Personally Identifiable Information)
78
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
79
- sendDefaultPii: true,
80
+ dataCollection: {
81
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
82
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
83
+ // userInfo: false,
84
+ // httpBodies: [],
85
+ },
80
86
  });
81
87
 
82
88
  export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
@@ -104,9 +110,12 @@ const templates_1 = require("../../src/nextjs/templates");
104
110
  // Enable logs to be sent to Sentry
105
111
  enableLogs: true,
106
112
 
107
- // Enable sending user PII (Personally Identifiable Information)
108
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
109
- sendDefaultPii: true,
113
+ dataCollection: {
114
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
115
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
116
+ // userInfo: false,
117
+ // httpBodies: [],
118
+ },
110
119
  });
111
120
 
112
121
  export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
@@ -143,9 +152,12 @@ const templates_1 = require("../../src/nextjs/templates");
143
152
  // Define how likely Replay events are sampled when an error occurs.
144
153
  replaysOnErrorSampleRate: 1.0,
145
154
 
146
- // Enable sending user PII (Personally Identifiable Information)
147
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
148
- sendDefaultPii: true,
155
+ dataCollection: {
156
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
157
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
158
+ // userInfo: false,
159
+ // httpBodies: [],
160
+ },
149
161
  });
150
162
 
151
163
  export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
@@ -187,9 +199,12 @@ const templates_1 = require("../../src/nextjs/templates");
187
199
  // Enable logs to be sent to Sentry
188
200
  enableLogs: true,
189
201
 
190
- // Enable sending user PII (Personally Identifiable Information)
191
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
192
- sendDefaultPii: true,
202
+ dataCollection: {
203
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
204
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
205
+ // userInfo: false,
206
+ // httpBodies: [],
207
+ },
193
208
  });
194
209
  "
195
210
  `);
@@ -213,9 +228,12 @@ const templates_1 = require("../../src/nextjs/templates");
213
228
  // Enable logs to be sent to Sentry
214
229
  enableLogs: true,
215
230
 
216
- // Enable sending user PII (Personally Identifiable Information)
217
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
218
- sendDefaultPii: true,
231
+ dataCollection: {
232
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
233
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
234
+ // userInfo: false,
235
+ // httpBodies: [],
236
+ },
219
237
  });
220
238
  "
221
239
  `);
@@ -242,9 +260,12 @@ const templates_1 = require("../../src/nextjs/templates");
242
260
  // Enable logs to be sent to Sentry
243
261
  enableLogs: true,
244
262
 
245
- // Enable sending user PII (Personally Identifiable Information)
246
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
247
- sendDefaultPii: true,
263
+ dataCollection: {
264
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
265
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
266
+ // userInfo: false,
267
+ // httpBodies: [],
268
+ },
248
269
  });
249
270
  "
250
271
  `);
@@ -268,9 +289,12 @@ const templates_1 = require("../../src/nextjs/templates");
268
289
  // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
269
290
  tracesSampleRate: 1,
270
291
 
271
- // Enable sending user PII (Personally Identifiable Information)
272
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
273
- sendDefaultPii: true,
292
+ dataCollection: {
293
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
294
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
295
+ // userInfo: false,
296
+ // httpBodies: [],
297
+ },
274
298
  });
275
299
  "
276
300
  `);
@@ -310,9 +334,12 @@ const templates_1 = require("../../src/nextjs/templates");
310
334
  // Enable logs to be sent to Sentry
311
335
  enableLogs: true,
312
336
 
313
- // Enable sending user PII (Personally Identifiable Information)
314
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
315
- sendDefaultPii: true,
337
+ dataCollection: {
338
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
339
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
340
+ // userInfo: false,
341
+ // httpBodies: [],
342
+ },
316
343
  });
317
344
  "
318
345
  `);
@@ -337,9 +364,12 @@ const templates_1 = require("../../src/nextjs/templates");
337
364
  // Enable logs to be sent to Sentry
338
365
  enableLogs: true,
339
366
 
340
- // Enable sending user PII (Personally Identifiable Information)
341
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
342
- sendDefaultPii: true,
367
+ dataCollection: {
368
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
369
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
370
+ // userInfo: false,
371
+ // httpBodies: [],
372
+ },
343
373
  });
344
374
  "
345
375
  `);
@@ -364,9 +394,12 @@ const templates_1 = require("../../src/nextjs/templates");
364
394
  // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
365
395
  tracesSampleRate: 1,
366
396
 
367
- // Enable sending user PII (Personally Identifiable Information)
368
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#sendDefaultPii
369
- sendDefaultPii: true,
397
+ dataCollection: {
398
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
399
+ // https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/options/#dataCollection
400
+ // userInfo: false,
401
+ // httpBodies: [],
402
+ },
370
403
  });
371
404
  "
372
405
  `);