@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.
- package/CHANGELOG.md +64 -0
- package/dist/bin.js +16 -1
- package/dist/bin.js.map +1 -1
- package/dist/e2e-tests/tests/angular-17.test.js +3 -4
- package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
- package/dist/e2e-tests/tests/angular-19.test.js +3 -4
- package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
- package/dist/e2e-tests/tests/cloudflare-worker.test.js +5 -0
- package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +60 -0
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/help-message.test.js +8 -3
- package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-3.test.js +12 -6
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +12 -6
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/pnpm-workspace.test.js +8 -4
- package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js +96 -0
- package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js.map +1 -0
- package/dist/e2e-tests/tests/react-router.test.js +6 -7
- package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +2 -4
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js +24 -8
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js +8 -4
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
- package/dist/lib/Constants.d.ts +1 -0
- package/dist/lib/Constants.js +5 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Steps/Integrations/Electron.js +2 -2
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/dist/src/android/android-wizard.js +3 -0
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/angular/codemods/main.d.ts +1 -1
- package/dist/src/angular/codemods/main.js +0 -1
- package/dist/src/angular/codemods/main.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +2 -3
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/check-installed-cli.d.ts +1 -1
- package/dist/src/apple/check-installed-cli.js +13 -7
- package/dist/src/apple/check-installed-cli.js.map +1 -1
- package/dist/src/apple/code-tools.js +17 -3
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/configure-package-manager.js +18 -5
- package/dist/src/apple/configure-package-manager.js.map +1 -1
- package/dist/src/apple/configure-xcode-project.js +8 -1
- package/dist/src/apple/configure-xcode-project.js.map +1 -1
- package/dist/src/apple/lookup-xcode-project.d.ts +8 -5
- package/dist/src/apple/lookup-xcode-project.js +22 -17
- package/dist/src/apple/lookup-xcode-project.js.map +1 -1
- package/dist/src/apple/options.d.ts +5 -0
- package/dist/src/apple/options.js.map +1 -1
- package/dist/src/apple/sentry-swift-package.d.ts +4 -0
- package/dist/src/apple/sentry-swift-package.js +17 -0
- package/dist/src/apple/sentry-swift-package.js.map +1 -0
- package/dist/src/apple/snapshots/apple-snapshots-wizard.d.ts +2 -0
- package/dist/src/apple/snapshots/apple-snapshots-wizard.js +251 -0
- package/dist/src/apple/snapshots/apple-snapshots-wizard.js.map +1 -0
- package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.d.ts +13 -0
- package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js +48 -0
- package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js.map +1 -0
- package/dist/src/apple/snapshots/snapshot-test-file.d.ts +18 -0
- package/dist/src/apple/snapshots/snapshot-test-file.js +122 -0
- package/dist/src/apple/snapshots/snapshot-test-file.js.map +1 -0
- package/dist/src/apple/snapshots/snapshot-verification-scheme.d.ts +6 -0
- package/dist/src/apple/snapshots/snapshot-verification-scheme.js +147 -0
- package/dist/src/apple/snapshots/snapshot-verification-scheme.js.map +1 -0
- package/dist/src/apple/snapshots/snapshotpreviews-package.d.ts +4 -0
- package/dist/src/apple/snapshots/snapshotpreviews-package.js +8 -0
- package/dist/src/apple/snapshots/snapshotpreviews-package.js.map +1 -0
- package/dist/src/apple/snapshots/snapshots-cli-preflight.d.ts +23 -0
- package/dist/src/apple/snapshots/snapshots-cli-preflight.js +136 -0
- package/dist/src/apple/snapshots/snapshots-cli-preflight.js.map +1 -0
- package/dist/src/apple/xcode-manager.d.ts +59 -1
- package/dist/src/apple/xcode-manager.js +507 -106
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/cloudflare/cloudflare-wizard.js +5 -0
- package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -1
- package/dist/src/cloudflare/sdk-setup.d.ts +1 -0
- package/dist/src/cloudflare/sdk-setup.js.map +1 -1
- package/dist/src/cloudflare/templates.d.ts +1 -0
- package/dist/src/cloudflare/templates.js +7 -1
- package/dist/src/cloudflare/templates.js.map +1 -1
- package/dist/src/cloudflare/wrap-worker.d.ts +1 -0
- package/dist/src/cloudflare/wrap-worker.js +7 -0
- package/dist/src/cloudflare/wrap-worker.js.map +1 -1
- package/dist/src/flutter/flutter-wizard.js +3 -0
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.js +12 -6
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nuxt/templates.js +12 -6
- package/dist/src/nuxt/templates.js.map +1 -1
- package/dist/src/react-native/expo.d.ts +6 -0
- package/dist/src/react-native/expo.js +27 -1
- package/dist/src/react-native/expo.js.map +1 -1
- package/dist/src/react-native/git.d.ts +5 -0
- package/dist/src/react-native/git.js +32 -1
- package/dist/src/react-native/git.js.map +1 -1
- package/dist/src/react-native/javascript.js +3 -1
- package/dist/src/react-native/javascript.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +12 -6
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-router/codemods/client.entry.d.ts +1 -1
- package/dist/src/react-router/codemods/client.entry.js +124 -26
- package/dist/src/react-router/codemods/client.entry.js.map +1 -1
- package/dist/src/react-router/codemods/react-router-config.js +1 -1
- package/dist/src/react-router/codemods/react-router-config.js.map +1 -1
- package/dist/src/react-router/codemods/server-entry.d.ts +1 -1
- package/dist/src/react-router/codemods/server-entry.js +40 -4
- package/dist/src/react-router/codemods/server-entry.js.map +1 -1
- package/dist/src/react-router/codemods/vite.js +46 -1
- package/dist/src/react-router/codemods/vite.js.map +1 -1
- package/dist/src/react-router/react-router-wizard.js +62 -21
- package/dist/src/react-router/react-router-wizard.js.map +1 -1
- package/dist/src/react-router/sdk-setup.d.ts +5 -3
- package/dist/src/react-router/sdk-setup.js +44 -16
- package/dist/src/react-router/sdk-setup.js.map +1 -1
- package/dist/src/react-router/templates.d.ts +2 -4
- package/dist/src/react-router/templates.js +89 -87
- package/dist/src/react-router/templates.js.map +1 -1
- package/dist/src/remix/sdk-setup.js +1 -2
- package/dist/src/remix/sdk-setup.js.map +1 -1
- package/dist/src/run.d.ts +4 -1
- package/dist/src/run.js +13 -0
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/tools/remix.js +4 -4
- package/dist/src/sourcemaps/tools/remix.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.js +1 -1
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup/setup.js +17 -4
- package/dist/src/sveltekit/sdk-setup/setup.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup/vite.js +1 -1
- package/dist/src/sveltekit/sdk-setup/vite.js.map +1 -1
- package/dist/src/sveltekit/templates.js +12 -6
- package/dist/src/sveltekit/templates.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +10 -0
- package/dist/src/utils/ast-utils.js +19 -1
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +2 -1
- package/dist/src/utils/clack/index.js +17 -6
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/utils/files.d.ts +2 -0
- package/dist/src/utils/files.js +58 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/git.d.ts +3 -1
- package/dist/src/utils/git.js +2 -1
- package/dist/src/utils/git.js.map +1 -1
- package/dist/src/utils/line-endings.d.ts +1 -0
- package/dist/src/utils/line-endings.js +76 -0
- package/dist/src/utils/line-endings.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/angular/angular-wizard.test.js +0 -5
- package/dist/test/angular/angular-wizard.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +78 -0
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/apple/configure-package-manager.test.d.ts +1 -0
- package/dist/test/apple/configure-package-manager.test.js +161 -0
- package/dist/test/apple/configure-package-manager.test.js.map +1 -0
- package/dist/test/apple/lookup-xcode-project.test.d.ts +1 -0
- package/dist/test/apple/lookup-xcode-project.test.js +167 -0
- package/dist/test/apple/lookup-xcode-project.test.js.map +1 -0
- package/dist/test/apple/snapshots/apple-snapshots-wizard.test.d.ts +1 -0
- package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js +487 -0
- package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js.map +1 -0
- package/dist/test/apple/snapshots/hosted-test-target-fixture.d.ts +24 -0
- package/dist/test/apple/snapshots/hosted-test-target-fixture.js +191 -0
- package/dist/test/apple/snapshots/hosted-test-target-fixture.js.map +1 -0
- package/dist/test/apple/snapshots/snapshot-test-file.test.d.ts +1 -0
- package/dist/test/apple/snapshots/snapshot-test-file.test.js +110 -0
- package/dist/test/apple/snapshots/snapshot-test-file.test.js.map +1 -0
- package/dist/test/apple/snapshots/snapshot-verification-scheme.test.d.ts +1 -0
- package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js +146 -0
- package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js.map +1 -0
- package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.d.ts +1 -0
- package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js +186 -0
- package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js.map +1 -0
- package/dist/test/apple/snapshots/snapshots-cli-preflight.test.d.ts +1 -0
- package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js +192 -0
- package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js.map +1 -0
- package/dist/test/apple/snapshots/source-file-insertion.test.d.ts +1 -0
- package/dist/test/apple/snapshots/source-file-insertion.test.js +77 -0
- package/dist/test/apple/snapshots/source-file-insertion.test.js.map +1 -0
- package/dist/test/apple/xcode-manager.test.js +452 -43
- package/dist/test/apple/xcode-manager.test.js.map +1 -1
- package/dist/test/cloudflare/sdk-setup.test.js +20 -2
- package/dist/test/cloudflare/sdk-setup.test.js.map +1 -1
- package/dist/test/cloudflare/templates.test.js +54 -0
- package/dist/test/cloudflare/templates.test.js.map +1 -1
- package/dist/test/cloudflare/wrap-worker.test.js +74 -11
- package/dist/test/cloudflare/wrap-worker.test.js.map +1 -1
- package/dist/test/constants.test.d.ts +1 -0
- package/dist/test/constants.test.js +12 -0
- package/dist/test/constants.test.js.map +1 -0
- package/dist/test/nextjs/templates.test.js +66 -33
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nuxt/templates.test.js +66 -36
- package/dist/test/nuxt/templates.test.js.map +1 -1
- package/dist/test/react-native/expo.test.js +140 -0
- package/dist/test/react-native/expo.test.js.map +1 -1
- package/dist/test/react-native/git.test.d.ts +1 -0
- package/dist/test/react-native/git.test.js +160 -0
- package/dist/test/react-native/git.test.js.map +1 -0
- package/dist/test/react-router/codemods/client-entry.test.js +38 -5
- package/dist/test/react-router/codemods/client-entry.test.js.map +1 -1
- package/dist/test/react-router/codemods/server-entry.test.js +83 -0
- package/dist/test/react-router/codemods/server-entry.test.js.map +1 -1
- package/dist/test/react-router/codemods/vite.test.js +89 -0
- package/dist/test/react-router/codemods/vite.test.js.map +1 -1
- package/dist/test/react-router/sdk-setup.test.js +98 -6
- package/dist/test/react-router/sdk-setup.test.js.map +1 -1
- package/dist/test/react-router/templates.test.js +50 -38
- package/dist/test/react-router/templates.test.js.map +1 -1
- package/dist/test/remix/build-script.test.d.ts +1 -0
- package/dist/test/remix/build-script.test.js +124 -0
- package/dist/test/remix/build-script.test.js.map +1 -0
- package/dist/test/remix/client-entry.test.js +4 -10
- package/dist/test/remix/client-entry.test.js.map +1 -1
- package/dist/test/run.test.d.ts +1 -0
- package/dist/test/run.test.js +137 -0
- package/dist/test/run.test.js.map +1 -0
- package/dist/test/sourcemaps/tools/vite.test.js +12 -8
- package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
- package/dist/test/sveltekit/templates.test.js +78 -27
- package/dist/test/sveltekit/templates.test.js.map +1 -1
- package/dist/test/utils/ast-utils.test.js +22 -0
- package/dist/test/utils/ast-utils.test.js.map +1 -1
- package/dist/test/utils/clack/index.test.js +101 -0
- package/dist/test/utils/clack/index.test.js.map +1 -1
- package/dist/test/utils/git.test.js +10 -0
- package/dist/test/utils/git.test.js.map +1 -1
- package/dist/test/utils/line-endings.test.d.ts +1 -0
- package/dist/test/utils/line-endings.test.js +103 -0
- package/dist/test/utils/line-endings.test.js.map +1 -0
- package/package.json +2 -2
- package/dist/src/react-router/codemods/root.d.ts +0 -1
- package/dist/src/react-router/codemods/root.js +0 -171
- package/dist/src/react-router/codemods/root.js.map +0 -1
- package/dist/test/react-router/codemods/root.test.js +0 -178
- package/dist/test/react-router/codemods/root.test.js.map +0 -1
- /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, {
|
|
134
|
-
|
|
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;
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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', {
|
|
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, {
|
|
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', {
|
|
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', {
|
|
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":"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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 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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
368
|
-
|
|
369
|
-
|
|
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
|
`);
|