@sentry/wizard 6.12.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 +15 -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/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 +6 -3
- package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js +4 -4
- package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router.test.js +3 -6
- 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 +6 -3
- 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/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/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-router/codemods/client.entry.d.ts +1 -1
- package/dist/src/react-router/codemods/client.entry.js +93 -52
- package/dist/src/react-router/codemods/client.entry.js.map +1 -1
- package/dist/src/react-router/codemods/server-entry.js +8 -7
- package/dist/src/react-router/codemods/server-entry.js.map +1 -1
- package/dist/src/react-router/react-router-wizard.js +13 -19
- package/dist/src/react-router/react-router-wizard.js.map +1 -1
- package/dist/src/react-router/sdk-setup.d.ts +2 -2
- package/dist/src/react-router/sdk-setup.js +16 -15
- package/dist/src/react-router/sdk-setup.js.map +1 -1
- package/dist/src/react-router/templates.d.ts +1 -3
- package/dist/src/react-router/templates.js +24 -92
- 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/sveltekit/sdk-setup/setup.js +17 -4
- package/dist/src/sveltekit/sdk-setup/setup.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/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/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/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-router/codemods/client-entry.test.js +15 -11
- package/dist/test/react-router/codemods/client-entry.test.js.map +1 -1
- package/dist/test/react-router/codemods/server-entry.test.js +21 -8
- package/dist/test/react-router/codemods/server-entry.test.js.map +1 -1
- package/dist/test/react-router/sdk-setup.test.js +46 -10
- package/dist/test/react-router/sdk-setup.test.js.map +1 -1
- package/dist/test/react-router/templates.test.js +26 -64
- 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/sveltekit/templates.test.js +78 -27
- package/dist/test/sveltekit/templates.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 -170
- package/dist/src/react-router/codemods/root.js.map +0 -1
- package/dist/test/react-router/codemods/root.test.js +0 -182
- package/dist/test/react-router/codemods/root.test.js.map +0 -1
- /package/dist/test/{react-router/codemods/root.test.d.ts → apple/lookup-xcode-project.test.d.ts} +0 -0
|
@@ -20,13 +20,6 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
20
20
|
vitest_1.vi.clearAllMocks();
|
|
21
21
|
});
|
|
22
22
|
(0, vitest_1.describe)('Template Constants', () => {
|
|
23
|
-
(0, vitest_1.it)('should have correct ERROR_BOUNDARY_TEMPLATE content', () => {
|
|
24
|
-
(0, vitest_1.expect)(templates_1.ERROR_BOUNDARY_TEMPLATE).toContain('function ErrorBoundary({ error })');
|
|
25
|
-
(0, vitest_1.expect)(templates_1.ERROR_BOUNDARY_TEMPLATE).toContain('isRouteErrorResponse(error)');
|
|
26
|
-
(0, vitest_1.expect)(templates_1.ERROR_BOUNDARY_TEMPLATE).toContain('Sentry.captureException(error)');
|
|
27
|
-
(0, vitest_1.expect)(templates_1.ERROR_BOUNDARY_TEMPLATE).toContain('error.status === 404');
|
|
28
|
-
(0, vitest_1.expect)(templates_1.ERROR_BOUNDARY_TEMPLATE).toContain('An unexpected error occurred');
|
|
29
|
-
});
|
|
30
23
|
(0, vitest_1.it)('should have correct EXAMPLE_PAGE_TEMPLATE_TSX content', () => {
|
|
31
24
|
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('import type { Route }');
|
|
32
25
|
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('export async function loader()');
|
|
@@ -43,15 +36,12 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
43
36
|
});
|
|
44
37
|
});
|
|
45
38
|
(0, vitest_1.describe)('getManualClientEntryContent', () => {
|
|
46
|
-
(0, vitest_1.it)('should generate manual client entry with all features enabled', () => {
|
|
39
|
+
(0, vitest_1.it)('should generate manual client entry with all features enabled and onError', () => {
|
|
47
40
|
const dsn = 'https://test.sentry.io/123';
|
|
48
|
-
const
|
|
49
|
-
const enableReplay = true;
|
|
50
|
-
const enableLogs = true;
|
|
51
|
-
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs);
|
|
41
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, true, true, true, false, true);
|
|
52
42
|
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
53
43
|
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
54
|
-
(0, vitest_1.expect)(result).toContain('
|
|
44
|
+
(0, vitest_1.expect)(result).toContain('// httpBodies: [],');
|
|
55
45
|
(0, vitest_1.expect)(result).toContain('Sentry.reactRouterTracingIntegration()');
|
|
56
46
|
(0, vitest_1.expect)(result).toContain('Sentry.replayIntegration()');
|
|
57
47
|
(0, vitest_1.expect)(result).toContain('enableLogs: true');
|
|
@@ -59,7 +49,12 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
59
49
|
(0, vitest_1.expect)(result).toContain('replaysSessionSampleRate: 0.1');
|
|
60
50
|
(0, vitest_1.expect)(result).toContain('replaysOnErrorSampleRate: 1.0');
|
|
61
51
|
(0, vitest_1.expect)(result).toContain('tracePropagationTargets');
|
|
62
|
-
(0, vitest_1.expect)(result).toContain('
|
|
52
|
+
(0, vitest_1.expect)(result).toContain('onError={Sentry.sentryOnError}');
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.it)('should not include onError when useOnError is false', () => {
|
|
55
|
+
const dsn = 'https://test.sentry.io/123';
|
|
56
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, true, true, true);
|
|
57
|
+
(0, vitest_1.expect)(result).not.toContain('onError={Sentry.sentryOnError}');
|
|
63
58
|
});
|
|
64
59
|
(0, vitest_1.it)('should generate manual client entry with tracing disabled', () => {
|
|
65
60
|
const dsn = 'https://test.sentry.io/123';
|
|
@@ -104,38 +99,29 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
104
99
|
(0, vitest_1.describe)('Instrumentation API', () => {
|
|
105
100
|
(0, vitest_1.it)('should generate client entry with instrumentation API enabled', () => {
|
|
106
101
|
const dsn = 'https://test.sentry.io/123';
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const enableLogs = false;
|
|
110
|
-
const useInstrumentationAPI = true;
|
|
111
|
-
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs, useInstrumentationAPI);
|
|
112
|
-
(0, vitest_1.expect)(result).toContain('const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });');
|
|
102
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, true, false, false, true, true);
|
|
103
|
+
(0, vitest_1.expect)(result).toContain('const tracing = Sentry.reactRouterTracingIntegration();');
|
|
113
104
|
(0, vitest_1.expect)(result).toContain('integrations: [');
|
|
114
105
|
(0, vitest_1.expect)(result).toContain('tracing');
|
|
115
|
-
(0, vitest_1.expect)(result).toContain('
|
|
106
|
+
(0, vitest_1.expect)(result).toContain('instrumentations={[tracing.clientInstrumentation]}');
|
|
107
|
+
(0, vitest_1.expect)(result).toContain('onError={Sentry.sentryOnError}');
|
|
116
108
|
});
|
|
117
109
|
(0, vitest_1.it)('should generate client entry with instrumentation API and replay enabled', () => {
|
|
118
110
|
const dsn = 'https://test.sentry.io/123';
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
const enableLogs = false;
|
|
122
|
-
const useInstrumentationAPI = true;
|
|
123
|
-
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs, useInstrumentationAPI);
|
|
124
|
-
(0, vitest_1.expect)(result).toContain('const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });');
|
|
111
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, true, true, false, true, true);
|
|
112
|
+
(0, vitest_1.expect)(result).toContain('const tracing = Sentry.reactRouterTracingIntegration();');
|
|
125
113
|
(0, vitest_1.expect)(result).toContain('tracing');
|
|
126
114
|
(0, vitest_1.expect)(result).toContain('Sentry.replayIntegration()');
|
|
127
|
-
(0, vitest_1.expect)(result).toContain('
|
|
115
|
+
(0, vitest_1.expect)(result).toContain('instrumentations={[tracing.clientInstrumentation]}');
|
|
116
|
+
(0, vitest_1.expect)(result).toContain('onError={Sentry.sentryOnError}');
|
|
128
117
|
});
|
|
129
118
|
(0, vitest_1.it)('should not use instrumentation API when explicitly disabled', () => {
|
|
130
119
|
const dsn = 'https://test.sentry.io/123';
|
|
131
|
-
const
|
|
132
|
-
const
|
|
133
|
-
const enableLogs = false;
|
|
134
|
-
const useInstrumentationAPI = false;
|
|
135
|
-
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs, useInstrumentationAPI);
|
|
136
|
-
(0, vitest_1.expect)(result).not.toContain('const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });');
|
|
120
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, true, false, false, false, true);
|
|
121
|
+
(0, vitest_1.expect)(result).not.toContain('const tracing');
|
|
137
122
|
(0, vitest_1.expect)(result).toContain('Sentry.reactRouterTracingIntegration()');
|
|
138
|
-
(0, vitest_1.expect)(result).not.toContain('
|
|
123
|
+
(0, vitest_1.expect)(result).not.toContain('instrumentations');
|
|
124
|
+
(0, vitest_1.expect)(result).toContain('onError={Sentry.sentryOnError}');
|
|
139
125
|
});
|
|
140
126
|
});
|
|
141
127
|
});
|
|
@@ -153,43 +139,19 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
153
139
|
(0, vitest_1.expect)(result).toContain('rest of your server entry');
|
|
154
140
|
});
|
|
155
141
|
(0, vitest_1.describe)('Instrumentation API', () => {
|
|
156
|
-
(0, vitest_1.it)('should generate server entry with
|
|
142
|
+
(0, vitest_1.it)('should generate server entry with instrumentations when useInstrumentationAPI is true', () => {
|
|
157
143
|
const result = (0, templates_1.getManualServerEntryContent)(true);
|
|
158
144
|
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
159
|
-
(0, vitest_1.expect)(result).toContain('export const
|
|
145
|
+
(0, vitest_1.expect)(result).toContain('export const instrumentations = [Sentry.createSentryServerInstrumentation()];');
|
|
160
146
|
(0, vitest_1.expect)(result).toContain('Enable automatic server-side instrumentation for loaders, actions, middleware');
|
|
161
147
|
});
|
|
162
|
-
(0, vitest_1.it)('should not include
|
|
148
|
+
(0, vitest_1.it)('should not include instrumentations when useInstrumentationAPI is false', () => {
|
|
163
149
|
const result = (0, templates_1.getManualServerEntryContent)(false);
|
|
164
|
-
(0, vitest_1.expect)(result).not.toContain('
|
|
150
|
+
(0, vitest_1.expect)(result).not.toContain('instrumentations');
|
|
165
151
|
(0, vitest_1.expect)(result).not.toContain('createSentryServerInstrumentation');
|
|
166
152
|
});
|
|
167
153
|
});
|
|
168
154
|
});
|
|
169
|
-
(0, vitest_1.describe)('getManualRootContent', () => {
|
|
170
|
-
(0, vitest_1.it)('should generate manual root content for TypeScript', () => {
|
|
171
|
-
const isTs = true;
|
|
172
|
-
const result = (0, templates_1.getManualRootContent)(isTs);
|
|
173
|
-
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
174
|
-
(0, vitest_1.expect)(result).toContain('export function ErrorBoundary({ error }: Route.ErrorBoundaryProps)');
|
|
175
|
-
(0, vitest_1.expect)(result).toContain('let stack: string | undefined');
|
|
176
|
-
(0, vitest_1.expect)(result).toContain('isRouteErrorResponse(error)');
|
|
177
|
-
(0, vitest_1.expect)(result).toContain('+ Sentry.captureException(error)');
|
|
178
|
-
(0, vitest_1.expect)(result).toContain('details = error.message');
|
|
179
|
-
(0, vitest_1.expect)(result).toContain('error.status === 404');
|
|
180
|
-
});
|
|
181
|
-
(0, vitest_1.it)('should generate manual root content for JavaScript', () => {
|
|
182
|
-
const isTs = false;
|
|
183
|
-
const result = (0, templates_1.getManualRootContent)(isTs);
|
|
184
|
-
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
185
|
-
(0, vitest_1.expect)(result).toContain('export function ErrorBoundary({ error })');
|
|
186
|
-
(0, vitest_1.expect)(result).not.toContain(': Route.ErrorBoundaryProps');
|
|
187
|
-
(0, vitest_1.expect)(result).toContain('let stack');
|
|
188
|
-
(0, vitest_1.expect)(result).not.toContain(': string | undefined');
|
|
189
|
-
(0, vitest_1.expect)(result).toContain('isRouteErrorResponse(error)');
|
|
190
|
-
(0, vitest_1.expect)(result).toContain('+ Sentry.captureException(error)');
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
155
|
(0, vitest_1.describe)('getManualServerInstrumentContent', () => {
|
|
194
156
|
(0, vitest_1.it)('should generate server instrumentation with all features enabled', () => {
|
|
195
157
|
const dsn = 'https://test.sentry.io/123';
|
|
@@ -200,7 +162,7 @@ const templates_1 = require("../../src/react-router/templates");
|
|
|
200
162
|
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
201
163
|
(0, vitest_1.expect)(result).toContain("import { nodeProfilingIntegration } from '@sentry/profiling-node'");
|
|
202
164
|
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
203
|
-
(0, vitest_1.expect)(result).toContain('
|
|
165
|
+
(0, vitest_1.expect)(result).toContain('// httpBodies: [],');
|
|
204
166
|
(0, vitest_1.expect)(result).toContain('enableLogs: true');
|
|
205
167
|
(0, vitest_1.expect)(result).toContain('integrations: [nodeProfilingIntegration()]');
|
|
206
168
|
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 1.0');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/react-router/templates.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi, beforeEach } from 'vitest';\n\n// Mock makeCodeSnippet utility\nvi.mock('../../src/utils/clack', () => {\n return {\n __esModule: true,\n makeCodeSnippet: vi.fn(\n (\n colors: boolean,\n callback: (\n unchanged: (str: string) => string,\n plus: (str: string) => string,\n minus: (str: string) => string,\n ) => string,\n ) => {\n // Mock implementation that just calls the callback with simple string functions\n const unchanged = (str: string) => str;\n const plus = (str: string) => `+ ${str}`;\n const minus = (str: string) => `- ${str}`;\n return callback(unchanged, plus, minus);\n },\n ),\n };\n});\n\nimport {\n ERROR_BOUNDARY_TEMPLATE,\n EXAMPLE_PAGE_TEMPLATE_TSX,\n EXAMPLE_PAGE_TEMPLATE_JSX,\n getManualClientEntryContent,\n getManualServerEntryContent,\n getManualRootContent,\n getManualServerInstrumentContent,\n getManualReactRouterConfigContent,\n} from '../../src/react-router/templates';\n\ndescribe('React Router Templates', () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe('Template Constants', () => {\n it('should have correct ERROR_BOUNDARY_TEMPLATE content', () => {\n expect(ERROR_BOUNDARY_TEMPLATE).toContain(\n 'function ErrorBoundary({ error })',\n );\n expect(ERROR_BOUNDARY_TEMPLATE).toContain('isRouteErrorResponse(error)');\n expect(ERROR_BOUNDARY_TEMPLATE).toContain(\n 'Sentry.captureException(error)',\n );\n expect(ERROR_BOUNDARY_TEMPLATE).toContain('error.status === 404');\n expect(ERROR_BOUNDARY_TEMPLATE).toContain('An unexpected error occurred');\n });\n\n it('should have correct EXAMPLE_PAGE_TEMPLATE_TSX content', () => {\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain('import type { Route }');\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'export async function loader()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'throw new Error(\"some error thrown in a loader\")',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'export default function SentryExamplePage()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'Loading this page will throw an error',\n );\n });\n\n it('should have correct EXAMPLE_PAGE_TEMPLATE_JSX content', () => {\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).not.toContain('import type { Route }');\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'export async function loader()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'throw new Error(\"some error thrown in a loader\")',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'export default function SentryExamplePage()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'Loading this page will throw an error',\n );\n });\n });\n\n describe('getManualClientEntryContent', () => {\n it('should generate manual client entry with all features enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = true;\n const enableLogs = true;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('sendDefaultPii: true');\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).toContain('enableLogs: true');\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('replaysSessionSampleRate: 0.1');\n expect(result).toContain('replaysOnErrorSampleRate: 1.0');\n expect(result).toContain('tracePropagationTargets');\n expect(result).toContain('<HydratedRouter />');\n });\n\n it('should generate manual client entry with tracing disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableReplay = true;\n const enableLogs = false;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).not.toContain('enableLogs: true');\n expect(result).not.toContain('tracePropagationTargets');\n });\n\n it('should generate manual client entry with replay disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = false;\n const enableLogs = true;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('Sentry.replayIntegration()');\n expect(result).toContain('enableLogs: true');\n expect(result).not.toContain('replaysSessionSampleRate');\n expect(result).not.toContain('replaysOnErrorSampleRate');\n });\n\n it('should generate manual client entry with no integrations', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableReplay = false;\n const enableLogs = false;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('Sentry.replayIntegration()');\n expect(result).not.toContain('enableLogs: true');\n expect(result).toContain('integrations: [');\n });\n\n describe('Instrumentation API', () => {\n it('should generate client entry with instrumentation API enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = false;\n const enableLogs = false;\n const useInstrumentationAPI = true;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n useInstrumentationAPI,\n );\n\n expect(result).toContain(\n 'const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });',\n );\n expect(result).toContain('integrations: [');\n expect(result).toContain('tracing');\n expect(result).toContain(\n 'unstable_instrumentations={[tracing.clientInstrumentation]}',\n );\n });\n\n it('should generate client entry with instrumentation API and replay enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = true;\n const enableLogs = false;\n const useInstrumentationAPI = true;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n useInstrumentationAPI,\n );\n\n expect(result).toContain(\n 'const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });',\n );\n expect(result).toContain('tracing');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).toContain(\n 'unstable_instrumentations={[tracing.clientInstrumentation]}',\n );\n });\n\n it('should not use instrumentation API when explicitly disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = false;\n const enableLogs = false;\n const useInstrumentationAPI = false;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n useInstrumentationAPI,\n );\n\n expect(result).not.toContain(\n 'const tracing = Sentry.reactRouterTracingIntegration({ useInstrumentationAPI: true });',\n );\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('unstable_instrumentations');\n });\n });\n });\n\n describe('getManualServerEntryContent', () => {\n it('should generate manual server entry content', () => {\n const result = getManualServerEntryContent();\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain('createReadableStreamFromReadable');\n expect(result).toContain('renderToPipeableStream');\n expect(result).toContain('ServerRouter');\n expect(result).toContain(\n '+ const handleRequest = Sentry.createSentryHandleRequest({',\n );\n expect(result).toContain(\n '+ export const handleError = Sentry.createSentryHandleError({',\n );\n expect(result).toContain('logErrors: false');\n expect(result).toContain('export default handleRequest');\n expect(result).toContain('rest of your server entry');\n });\n\n describe('Instrumentation API', () => {\n it('should generate server entry with unstable_instrumentations when useInstrumentationAPI is true', () => {\n const result = getManualServerEntryContent(true);\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(\n 'export const unstable_instrumentations = [Sentry.createSentryServerInstrumentation()];',\n );\n expect(result).toContain(\n 'Enable automatic server-side instrumentation for loaders, actions, middleware',\n );\n });\n\n it('should not include unstable_instrumentations when useInstrumentationAPI is false', () => {\n const result = getManualServerEntryContent(false);\n\n expect(result).not.toContain('unstable_instrumentations');\n expect(result).not.toContain('createSentryServerInstrumentation');\n });\n });\n });\n\n describe('getManualRootContent', () => {\n it('should generate manual root content for TypeScript', () => {\n const isTs = true;\n const result = getManualRootContent(isTs);\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(\n 'export function ErrorBoundary({ error }: Route.ErrorBoundaryProps)',\n );\n expect(result).toContain('let stack: string | undefined');\n expect(result).toContain('isRouteErrorResponse(error)');\n expect(result).toContain('+ Sentry.captureException(error)');\n expect(result).toContain('details = error.message');\n expect(result).toContain('error.status === 404');\n });\n\n it('should generate manual root content for JavaScript', () => {\n const isTs = false;\n const result = getManualRootContent(isTs);\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain('export function ErrorBoundary({ error })');\n expect(result).not.toContain(': Route.ErrorBoundaryProps');\n expect(result).toContain('let stack');\n expect(result).not.toContain(': string | undefined');\n expect(result).toContain('isRouteErrorResponse(error)');\n expect(result).toContain('+ Sentry.captureException(error)');\n });\n });\n\n describe('getManualServerInstrumentContent', () => {\n it('should generate server instrumentation with all features enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableProfiling = true;\n const enableLogs = true;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n enableLogs,\n );\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(\n \"import { nodeProfilingIntegration } from '@sentry/profiling-node'\",\n );\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('sendDefaultPii: true');\n expect(result).toContain('enableLogs: true');\n expect(result).toContain('integrations: [nodeProfilingIntegration()]');\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('profilesSampleRate: 1.0');\n expect(result).toContain('Capture 100% of the transactions');\n expect(result).toContain('profile every transaction');\n });\n\n it('should generate server instrumentation with tracing disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableProfiling = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('nodeProfilingIntegration');\n expect(result).not.toContain('profilesSampleRate');\n expect(result).not.toContain(\n 'integrations: [nodeProfilingIntegration()]',\n );\n // When logs are not enabled, enableLogs should not appear\n expect(result).not.toContain('enableLogs: true');\n });\n\n it('should generate server instrumentation with profiling disabled but tracing enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableProfiling = false;\n const enableLogs = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).not.toContain('nodeProfilingIntegration');\n expect(result).not.toContain('profilesSampleRate');\n expect(result).not.toContain('integrations:');\n });\n\n it('should handle special characters in DSN', () => {\n const dsn = 'https://test@example.com/sentry/123?param=value';\n const enableTracing = true;\n const enableProfiling = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n });\n });\n\n describe('getManualReactRouterConfigContent', () => {\n it('should generate TypeScript config snippet with type imports and satisfies', () => {\n const result = getManualReactRouterConfigContent(true);\n\n expect(result).toContain('import type { Config }');\n expect(result).toContain('} satisfies Config;');\n expect(result).toContain('sentryOnBuildEnd');\n expect(result).toContain('ssr: true');\n });\n\n it('should generate JavaScript config snippet without TS-only syntax', () => {\n const result = getManualReactRouterConfigContent(false);\n\n // JS version should NOT have TypeScript-only syntax\n expect(result).not.toContain('import type');\n expect(result).not.toContain('satisfies Config');\n\n // JS version should have the standard import and export\n expect(result).toContain('import { sentryOnBuildEnd }');\n expect(result).toContain('sentryOnBuildEnd');\n expect(result).toContain('ssr: true');\n expect(result).toContain('export default {');\n });\n\n it('should default to TypeScript when no parameter is passed', () => {\n const result = getManualReactRouterConfigContent();\n\n expect(result).toContain('import type { Config }');\n expect(result).toContain('} satisfies Config;');\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/react-router/templates.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi, beforeEach } from 'vitest';\n\n// Mock makeCodeSnippet utility\nvi.mock('../../src/utils/clack', () => {\n return {\n __esModule: true,\n makeCodeSnippet: vi.fn(\n (\n colors: boolean,\n callback: (\n unchanged: (str: string) => string,\n plus: (str: string) => string,\n minus: (str: string) => string,\n ) => string,\n ) => {\n // Mock implementation that just calls the callback with simple string functions\n const unchanged = (str: string) => str;\n const plus = (str: string) => `+ ${str}`;\n const minus = (str: string) => `- ${str}`;\n return callback(unchanged, plus, minus);\n },\n ),\n };\n});\n\nimport {\n EXAMPLE_PAGE_TEMPLATE_TSX,\n EXAMPLE_PAGE_TEMPLATE_JSX,\n getManualClientEntryContent,\n getManualServerEntryContent,\n getManualServerInstrumentContent,\n getManualReactRouterConfigContent,\n} from '../../src/react-router/templates';\n\ndescribe('React Router Templates', () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe('Template Constants', () => {\n it('should have correct EXAMPLE_PAGE_TEMPLATE_TSX content', () => {\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain('import type { Route }');\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'export async function loader()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'throw new Error(\"some error thrown in a loader\")',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'export default function SentryExamplePage()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_TSX).toContain(\n 'Loading this page will throw an error',\n );\n });\n\n it('should have correct EXAMPLE_PAGE_TEMPLATE_JSX content', () => {\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).not.toContain('import type { Route }');\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'export async function loader()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'throw new Error(\"some error thrown in a loader\")',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'export default function SentryExamplePage()',\n );\n expect(EXAMPLE_PAGE_TEMPLATE_JSX).toContain(\n 'Loading this page will throw an error',\n );\n });\n });\n\n describe('getManualClientEntryContent', () => {\n it('should generate manual client entry with all features enabled and onError', () => {\n const dsn = 'https://test.sentry.io/123';\n\n const result = getManualClientEntryContent(\n dsn,\n true,\n true,\n true,\n false,\n true,\n );\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('// httpBodies: [],');\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).toContain('enableLogs: true');\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('replaysSessionSampleRate: 0.1');\n expect(result).toContain('replaysOnErrorSampleRate: 1.0');\n expect(result).toContain('tracePropagationTargets');\n expect(result).toContain('onError={Sentry.sentryOnError}');\n });\n\n it('should not include onError when useOnError is false', () => {\n const dsn = 'https://test.sentry.io/123';\n\n const result = getManualClientEntryContent(dsn, true, true, true);\n\n expect(result).not.toContain('onError={Sentry.sentryOnError}');\n });\n\n it('should generate manual client entry with tracing disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableReplay = true;\n const enableLogs = false;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).not.toContain('enableLogs: true');\n expect(result).not.toContain('tracePropagationTargets');\n });\n\n it('should generate manual client entry with replay disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableReplay = false;\n const enableLogs = true;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('Sentry.replayIntegration()');\n expect(result).toContain('enableLogs: true');\n expect(result).not.toContain('replaysSessionSampleRate');\n expect(result).not.toContain('replaysOnErrorSampleRate');\n });\n\n it('should generate manual client entry with no integrations', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableReplay = false;\n const enableLogs = false;\n\n const result = getManualClientEntryContent(\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('Sentry.replayIntegration()');\n expect(result).not.toContain('enableLogs: true');\n expect(result).toContain('integrations: [');\n });\n\n describe('Instrumentation API', () => {\n it('should generate client entry with instrumentation API enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n\n const result = getManualClientEntryContent(\n dsn,\n true,\n false,\n false,\n true,\n true,\n );\n\n expect(result).toContain(\n 'const tracing = Sentry.reactRouterTracingIntegration();',\n );\n expect(result).toContain('integrations: [');\n expect(result).toContain('tracing');\n expect(result).toContain(\n 'instrumentations={[tracing.clientInstrumentation]}',\n );\n expect(result).toContain('onError={Sentry.sentryOnError}');\n });\n\n it('should generate client entry with instrumentation API and replay enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n\n const result = getManualClientEntryContent(\n dsn,\n true,\n true,\n false,\n true,\n true,\n );\n\n expect(result).toContain(\n 'const tracing = Sentry.reactRouterTracingIntegration();',\n );\n expect(result).toContain('tracing');\n expect(result).toContain('Sentry.replayIntegration()');\n expect(result).toContain(\n 'instrumentations={[tracing.clientInstrumentation]}',\n );\n expect(result).toContain('onError={Sentry.sentryOnError}');\n });\n\n it('should not use instrumentation API when explicitly disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n\n const result = getManualClientEntryContent(\n dsn,\n true,\n false,\n false,\n false,\n true,\n );\n\n expect(result).not.toContain('const tracing');\n expect(result).toContain('Sentry.reactRouterTracingIntegration()');\n expect(result).not.toContain('instrumentations');\n expect(result).toContain('onError={Sentry.sentryOnError}');\n });\n });\n });\n\n describe('getManualServerEntryContent', () => {\n it('should generate manual server entry content', () => {\n const result = getManualServerEntryContent();\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain('createReadableStreamFromReadable');\n expect(result).toContain('renderToPipeableStream');\n expect(result).toContain('ServerRouter');\n expect(result).toContain(\n '+ const handleRequest = Sentry.createSentryHandleRequest({',\n );\n expect(result).toContain(\n '+ export const handleError = Sentry.createSentryHandleError({',\n );\n expect(result).toContain('logErrors: false');\n expect(result).toContain('export default handleRequest');\n expect(result).toContain('rest of your server entry');\n });\n\n describe('Instrumentation API', () => {\n it('should generate server entry with instrumentations when useInstrumentationAPI is true', () => {\n const result = getManualServerEntryContent(true);\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(\n 'export const instrumentations = [Sentry.createSentryServerInstrumentation()];',\n );\n expect(result).toContain(\n 'Enable automatic server-side instrumentation for loaders, actions, middleware',\n );\n });\n\n it('should not include instrumentations when useInstrumentationAPI is false', () => {\n const result = getManualServerEntryContent(false);\n\n expect(result).not.toContain('instrumentations');\n expect(result).not.toContain('createSentryServerInstrumentation');\n });\n });\n });\n\n describe('getManualServerInstrumentContent', () => {\n it('should generate server instrumentation with all features enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableProfiling = true;\n const enableLogs = true;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n enableLogs,\n );\n\n expect(result).toContain(\n \"+ import * as Sentry from '@sentry/react-router'\",\n );\n expect(result).toContain(\n \"import { nodeProfilingIntegration } from '@sentry/profiling-node'\",\n );\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('// httpBodies: [],');\n expect(result).toContain('enableLogs: true');\n expect(result).toContain('integrations: [nodeProfilingIntegration()]');\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).toContain('profilesSampleRate: 1.0');\n expect(result).toContain('Capture 100% of the transactions');\n expect(result).toContain('profile every transaction');\n });\n\n it('should generate server instrumentation with tracing disabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = false;\n const enableProfiling = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 0');\n expect(result).not.toContain('nodeProfilingIntegration');\n expect(result).not.toContain('profilesSampleRate');\n expect(result).not.toContain(\n 'integrations: [nodeProfilingIntegration()]',\n );\n // When logs are not enabled, enableLogs should not appear\n expect(result).not.toContain('enableLogs: true');\n });\n\n it('should generate server instrumentation with profiling disabled but tracing enabled', () => {\n const dsn = 'https://test.sentry.io/123';\n const enableTracing = true;\n const enableProfiling = false;\n const enableLogs = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n enableLogs,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n expect(result).toContain('tracesSampleRate: 1.0');\n expect(result).not.toContain('nodeProfilingIntegration');\n expect(result).not.toContain('profilesSampleRate');\n expect(result).not.toContain('integrations:');\n });\n\n it('should handle special characters in DSN', () => {\n const dsn = 'https://test@example.com/sentry/123?param=value';\n const enableTracing = true;\n const enableProfiling = false;\n\n const result = getManualServerInstrumentContent(\n dsn,\n enableTracing,\n enableProfiling,\n );\n\n expect(result).toContain(`dsn: \"${dsn}\"`);\n });\n });\n\n describe('getManualReactRouterConfigContent', () => {\n it('should generate TypeScript config snippet with type imports and satisfies', () => {\n const result = getManualReactRouterConfigContent(true);\n\n expect(result).toContain('import type { Config }');\n expect(result).toContain('} satisfies Config;');\n expect(result).toContain('sentryOnBuildEnd');\n expect(result).toContain('ssr: true');\n });\n\n it('should generate JavaScript config snippet without TS-only syntax', () => {\n const result = getManualReactRouterConfigContent(false);\n\n // JS version should NOT have TypeScript-only syntax\n expect(result).not.toContain('import type');\n expect(result).not.toContain('satisfies Config');\n\n // JS version should have the standard import and export\n expect(result).toContain('import { sentryOnBuildEnd }');\n expect(result).toContain('sentryOnBuildEnd');\n expect(result).toContain('ssr: true');\n expect(result).toContain('export default {');\n });\n\n it('should default to TypeScript when no parameter is passed', () => {\n const result = getManualReactRouterConfigContent();\n\n expect(result).toContain('import type { Config }');\n expect(result).toContain('} satisfies Config;');\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const fs = __importStar(require("fs"));
|
|
27
|
+
const sdk_setup_1 = require("../../src/remix/sdk-setup");
|
|
28
|
+
const clack_1 = require("../../src/utils/clack");
|
|
29
|
+
const vitest_1 = require("vitest");
|
|
30
|
+
const writeFileSpy = vitest_1.vi
|
|
31
|
+
.spyOn(fs.promises, 'writeFile')
|
|
32
|
+
.mockImplementation(() => Promise.resolve());
|
|
33
|
+
vitest_1.vi.mock('@clack/prompts', () => {
|
|
34
|
+
const mock = {
|
|
35
|
+
log: {
|
|
36
|
+
info: vitest_1.vi.fn(),
|
|
37
|
+
success: vitest_1.vi.fn(),
|
|
38
|
+
warn: vitest_1.vi.fn(),
|
|
39
|
+
},
|
|
40
|
+
confirm: vitest_1.vi.fn().mockResolvedValue(true),
|
|
41
|
+
isCancel: vitest_1.vi.fn().mockReturnValue(false),
|
|
42
|
+
};
|
|
43
|
+
return { ...mock, default: mock };
|
|
44
|
+
});
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
46
|
+
vitest_1.vi.mock('../../src/utils/clack', async () => ({
|
|
47
|
+
...(await vitest_1.vi.importActual('../../src/utils/clack')),
|
|
48
|
+
getPackageDotJson: vitest_1.vi.fn().mockResolvedValue({
|
|
49
|
+
scripts: {
|
|
50
|
+
build: 'remix build',
|
|
51
|
+
},
|
|
52
|
+
version: '1.0.0',
|
|
53
|
+
}),
|
|
54
|
+
}));
|
|
55
|
+
(0, vitest_1.describe)('updateBuildScript', () => {
|
|
56
|
+
(0, vitest_1.afterEach)(() => {
|
|
57
|
+
vitest_1.vi.clearAllMocks();
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('uses npx @sentry/remix --upload-sourcemaps for the upload command', async () => {
|
|
60
|
+
await (0, sdk_setup_1.updateBuildScript)({
|
|
61
|
+
org: 'my-org',
|
|
62
|
+
project: 'my-project',
|
|
63
|
+
isHydrogen: false,
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.expect)(writeFileSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining('package.json'), vitest_1.expect.stringContaining('npx @sentry/remix --upload-sourcemaps --org my-org --project my-project'));
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('replaces the remix build command with sourcemap flag and upload', async () => {
|
|
68
|
+
await (0, sdk_setup_1.updateBuildScript)({
|
|
69
|
+
org: 'my-org',
|
|
70
|
+
project: 'my-project',
|
|
71
|
+
isHydrogen: false,
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.expect)(writeFileSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining('package.json'), vitest_1.expect.stringContaining('remix build --sourcemap && npx @sentry/remix --upload-sourcemaps'));
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('includes --url flag when a custom url is provided', async () => {
|
|
76
|
+
await (0, sdk_setup_1.updateBuildScript)({
|
|
77
|
+
org: 'my-org',
|
|
78
|
+
project: 'my-project',
|
|
79
|
+
url: 'https://self-hosted.example.com',
|
|
80
|
+
isHydrogen: false,
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.expect)(writeFileSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining('package.json'), vitest_1.expect.stringContaining('--url https://self-hosted.example.com'));
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('uses shopify hydrogen build for hydrogen apps', async () => {
|
|
85
|
+
vitest_1.vi.mocked(clack_1.getPackageDotJson).mockResolvedValue({
|
|
86
|
+
scripts: {
|
|
87
|
+
build: 'shopify hydrogen build',
|
|
88
|
+
},
|
|
89
|
+
version: '1.0.0',
|
|
90
|
+
});
|
|
91
|
+
await (0, sdk_setup_1.updateBuildScript)({
|
|
92
|
+
org: 'my-org',
|
|
93
|
+
project: 'my-project',
|
|
94
|
+
isHydrogen: true,
|
|
95
|
+
});
|
|
96
|
+
(0, vitest_1.expect)(writeFileSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining('package.json'), vitest_1.expect.stringContaining('shopify hydrogen build --sourcemap && npx @sentry/remix --upload-sourcemaps --org my-org --project my-project --buildPath ./dist'));
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.it)('sets build script when none exists', async () => {
|
|
99
|
+
vitest_1.vi.mocked(clack_1.getPackageDotJson).mockResolvedValue({
|
|
100
|
+
scripts: {},
|
|
101
|
+
version: '1.0.0',
|
|
102
|
+
});
|
|
103
|
+
await (0, sdk_setup_1.updateBuildScript)({
|
|
104
|
+
org: 'my-org',
|
|
105
|
+
project: 'my-project',
|
|
106
|
+
isHydrogen: false,
|
|
107
|
+
});
|
|
108
|
+
(0, vitest_1.expect)(writeFileSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining('package.json'), vitest_1.expect.stringContaining('remix build --sourcemap && npx @sentry/remix --upload-sourcemaps'));
|
|
109
|
+
});
|
|
110
|
+
(0, vitest_1.it)('throws when build script has an unknown command', async () => {
|
|
111
|
+
vitest_1.vi.mocked(clack_1.getPackageDotJson).mockResolvedValue({
|
|
112
|
+
scripts: {
|
|
113
|
+
build: 'some-custom-build-tool',
|
|
114
|
+
},
|
|
115
|
+
version: '1.0.0',
|
|
116
|
+
});
|
|
117
|
+
await (0, vitest_1.expect)((0, sdk_setup_1.updateBuildScript)({
|
|
118
|
+
org: 'my-org',
|
|
119
|
+
project: 'my-project',
|
|
120
|
+
isHydrogen: false,
|
|
121
|
+
})).rejects.toThrow("build` script doesn't contain a known build command");
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=build-script.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-script.test.js","sourceRoot":"","sources":["../../../test/remix/build-script.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\n\nimport { updateBuildScript } from '../../src/remix/sdk-setup';\nimport { getPackageDotJson } from '../../src/utils/clack';\n\nimport { vi, it, describe, expect, afterEach } from 'vitest';\n\nconst writeFileSpy = vi\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(() => Promise.resolve());\n\nvi.mock('@clack/prompts', () => {\n const mock = {\n log: {\n info: vi.fn(),\n success: vi.fn(),\n warn: vi.fn(),\n },\n confirm: vi.fn().mockResolvedValue(true),\n isCancel: vi.fn().mockReturnValue(false),\n };\n return { ...mock, default: mock };\n});\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-return\nvi.mock('../../src/utils/clack', async () => ({\n ...(await vi.importActual('../../src/utils/clack')),\n getPackageDotJson: vi.fn().mockResolvedValue({\n scripts: {\n build: 'remix build',\n },\n version: '1.0.0',\n }),\n}));\n\ndescribe('updateBuildScript', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('uses npx @sentry/remix --upload-sourcemaps for the upload command', async () => {\n await updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n isHydrogen: false,\n });\n\n expect(writeFileSpy).toHaveBeenCalledWith(\n expect.stringContaining('package.json'),\n expect.stringContaining(\n 'npx @sentry/remix --upload-sourcemaps --org my-org --project my-project',\n ),\n );\n });\n\n it('replaces the remix build command with sourcemap flag and upload', async () => {\n await updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n isHydrogen: false,\n });\n\n expect(writeFileSpy).toHaveBeenCalledWith(\n expect.stringContaining('package.json'),\n expect.stringContaining(\n 'remix build --sourcemap && npx @sentry/remix --upload-sourcemaps',\n ),\n );\n });\n\n it('includes --url flag when a custom url is provided', async () => {\n await updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n url: 'https://self-hosted.example.com',\n isHydrogen: false,\n });\n\n expect(writeFileSpy).toHaveBeenCalledWith(\n expect.stringContaining('package.json'),\n expect.stringContaining('--url https://self-hosted.example.com'),\n );\n });\n\n it('uses shopify hydrogen build for hydrogen apps', async () => {\n vi.mocked(getPackageDotJson).mockResolvedValue({\n scripts: {\n build: 'shopify hydrogen build',\n },\n version: '1.0.0',\n });\n\n await updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n isHydrogen: true,\n });\n\n expect(writeFileSpy).toHaveBeenCalledWith(\n expect.stringContaining('package.json'),\n expect.stringContaining(\n 'shopify hydrogen build --sourcemap && npx @sentry/remix --upload-sourcemaps --org my-org --project my-project --buildPath ./dist',\n ),\n );\n });\n\n it('sets build script when none exists', async () => {\n vi.mocked(getPackageDotJson).mockResolvedValue({\n scripts: {},\n version: '1.0.0',\n });\n\n await updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n isHydrogen: false,\n });\n\n expect(writeFileSpy).toHaveBeenCalledWith(\n expect.stringContaining('package.json'),\n expect.stringContaining(\n 'remix build --sourcemap && npx @sentry/remix --upload-sourcemaps',\n ),\n );\n });\n\n it('throws when build script has an unknown command', async () => {\n vi.mocked(getPackageDotJson).mockResolvedValue({\n scripts: {\n build: 'some-custom-build-tool',\n },\n version: '1.0.0',\n });\n\n await expect(\n updateBuildScript({\n org: 'my-org',\n project: 'my-project',\n isHydrogen: false,\n }),\n ).rejects.toThrow(\"build` script doesn't contain a known build command\");\n });\n});\n"]}
|
|
@@ -40,8 +40,7 @@ const vitest_1 = require("vitest");
|
|
|
40
40
|
})],
|
|
41
41
|
|
|
42
42
|
replaysSessionSampleRate: 0.1,
|
|
43
|
-
replaysOnErrorSampleRate: 1
|
|
44
|
-
sendDefaultPii: true
|
|
43
|
+
replaysOnErrorSampleRate: 1
|
|
45
44
|
})"
|
|
46
45
|
`);
|
|
47
46
|
});
|
|
@@ -67,8 +66,7 @@ const vitest_1 = require("vitest");
|
|
|
67
66
|
})],
|
|
68
67
|
|
|
69
68
|
replaysSessionSampleRate: 0.1,
|
|
70
|
-
replaysOnErrorSampleRate: 1
|
|
71
|
-
sendDefaultPii: true
|
|
69
|
+
replaysOnErrorSampleRate: 1
|
|
72
70
|
})"
|
|
73
71
|
`);
|
|
74
72
|
});
|
|
@@ -100,9 +98,7 @@ const vitest_1 = require("vitest");
|
|
|
100
98
|
useEffect,
|
|
101
99
|
useLocation,
|
|
102
100
|
useMatches
|
|
103
|
-
})]
|
|
104
|
-
|
|
105
|
-
sendDefaultPii: true
|
|
101
|
+
})]
|
|
106
102
|
})"
|
|
107
103
|
`);
|
|
108
104
|
});
|
|
@@ -154,9 +150,7 @@ const vitest_1 = require("vitest");
|
|
|
154
150
|
useEffect,
|
|
155
151
|
useLocation,
|
|
156
152
|
useMatches
|
|
157
|
-
})]
|
|
158
|
-
|
|
159
|
-
sendDefaultPii: true
|
|
153
|
+
})]
|
|
160
154
|
})"
|
|
161
155
|
`);
|
|
162
156
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-entry.test.js","sourceRoot":"","sources":["../../../test/remix/client-entry.test.ts"],"names":[],"mappings":";;AAAA,kFAAkF;AAClF,uCAAuC;AACvC,yDAAiE;AACjE,mCAA8C;AAE9C,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAA,WAAE,EAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,0CAA0C;QAC1C,MAAM,sBAAsB,GAAG,IAAA,sBAAW,EAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,GAAG,GAAG,uBAAuB,CAAC;QACpC,MAAM,gBAAgB,GAAG;YACvB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;SACX,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,gCAAoB,EACjC,sBAAsB,EACtB,GAAG,EACH,gBAAgB,CACjB,CAAC;QAEF,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC
|
|
1
|
+
{"version":3,"file":"client-entry.test.js","sourceRoot":"","sources":["../../../test/remix/client-entry.test.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - magicast is ESM and TS complains about that. It works though\nimport { parseModule } from 'magicast';\nimport { updateEntryClientMod } from '../../src/remix/sdk-setup';\nimport { describe, expect, it } from 'vitest';\n\ndescribe('initializeSentryOnEntryClient', () => {\n it('should initialize Sentry on client entry with all features enabled', () => {\n // Empty entry.client.tsx file for testing\n const originalEntryClientMod = parseModule('');\n\n const dsn = 'https://sentry.io/123';\n const selectedFeatures = {\n performance: true,\n replay: true,\n logs: true,\n };\n\n const result = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n expect(result.generate().code).toMatchInlineSnapshot(`\n \"import { useEffect,} from \"react\";\n\n import {\n useLocation,\n useMatches,\n } from \"@remix-run/react\";\n\n import { init, replayIntegration, browserTracingIntegration,} from \"@sentry/remix\";\n\n init({\n dsn: \"https://sentry.io/123\",\n tracesSampleRate: 1,\n enableLogs: true,\n\n integrations: [browserTracingIntegration({\n useEffect,\n useLocation,\n useMatches\n }), replayIntegration({\n maskAllText: true,\n blockAllMedia: true\n })],\n\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1\n })\"\n `);\n });\n\n it('should initialize Sentry on client entry when performance disabled', () => {\n // Empty entry.client.tsx file for testing\n const originalEntryClientMod = parseModule('');\n\n const dsn = 'https://sentry.io/123';\n const selectedFeatures = {\n performance: false,\n replay: true,\n logs: false,\n };\n\n const result = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n expect(result.generate().code).toMatchInlineSnapshot(`\n \"import { init, replayIntegration,} from \"@sentry/remix\";\n\n init({\n dsn: \"https://sentry.io/123\",\n\n integrations: [replayIntegration({\n maskAllText: true,\n blockAllMedia: true\n })],\n\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1\n })\"\n `);\n });\n\n it('should initialize Sentry on client entry when replay disabled', () => {\n // Empty entry.client.tsx file for testing\n const originalEntryClientMod = parseModule('');\n\n const dsn = 'https://sentry.io/123';\n const selectedFeatures = {\n performance: true,\n replay: false,\n logs: false,\n };\n\n const result = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n expect(result.generate().code).toMatchInlineSnapshot(`\n \"import { useEffect,} from \"react\";\n\n import {\n useLocation,\n useMatches,\n } from \"@remix-run/react\";\n\n import { init, browserTracingIntegration,} from \"@sentry/remix\";\n\n init({\n dsn: \"https://sentry.io/123\",\n tracesSampleRate: 1,\n\n integrations: [browserTracingIntegration({\n useEffect,\n useLocation,\n useMatches\n })]\n })\"\n `);\n });\n\n it('should initialize Sentry on client entry with only logs enabled', () => {\n // Empty entry.client.tsx file for testing\n const originalEntryClientMod = parseModule('');\n\n const dsn = 'https://sentry.io/123';\n const selectedFeatures = {\n performance: false,\n replay: false,\n logs: true,\n };\n\n const result = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n expect(result.generate().code).toMatchInlineSnapshot(`\n \"import { init,} from \"@sentry/remix\";\n\n init({\n dsn: \"https://sentry.io/123\",\n enableLogs: true\n })\"\n `);\n });\n\n it('should initialize Sentry on client entry with performance and logs enabled', () => {\n // Empty entry.client.tsx file for testing\n const originalEntryClientMod = parseModule('');\n\n const dsn = 'https://sentry.io/123';\n const selectedFeatures = {\n performance: true,\n replay: false,\n logs: true,\n };\n\n const result = updateEntryClientMod(\n originalEntryClientMod,\n dsn,\n selectedFeatures,\n );\n\n expect(result.generate().code).toMatchInlineSnapshot(`\n \"import { useEffect,} from \"react\";\n\n import {\n useLocation,\n useMatches,\n } from \"@remix-run/react\";\n\n import { init, browserTracingIntegration,} from \"@sentry/remix\";\n\n init({\n dsn: \"https://sentry.io/123\",\n tracesSampleRate: 1,\n enableLogs: true,\n\n integrations: [browserTracingIntegration({\n useEffect,\n useLocation,\n useMatches\n })]\n })\"\n `);\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|