@sentry/wizard 6.6.0 → 6.7.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 +28 -0
- package/LICENSE +97 -8
- package/dist/bin.js +5 -0
- package/dist/bin.js.map +1 -1
- package/dist/e2e-tests/tests/help-message.test.js +5 -1
- package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-15.test.js +79 -0
- package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router.test.d.ts +1 -0
- package/dist/e2e-tests/tests/react-router.test.js +255 -0
- package/dist/e2e-tests/tests/react-router.test.js.map +1 -0
- package/dist/e2e-tests/utils/index.d.ts +8 -2
- package/dist/e2e-tests/utils/index.js +72 -21
- package/dist/e2e-tests/utils/index.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/src/android/android-wizard.js +8 -1
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/angular/angular-wizard.js +8 -1
- package/dist/src/angular/angular-wizard.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +8 -1
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/flutter/flutter-wizard.js +8 -1
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +35 -9
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +3 -3
- package/dist/src/nextjs/templates.js +18 -7
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +8 -1
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +8 -1
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-router/codemods/client.entry.d.ts +1 -0
- package/dist/src/react-router/codemods/client.entry.js +73 -0
- package/dist/src/react-router/codemods/client.entry.js.map +1 -0
- package/dist/src/react-router/codemods/react-router-config.d.ts +9 -0
- package/dist/src/react-router/codemods/react-router-config.js +178 -0
- package/dist/src/react-router/codemods/react-router-config.js.map +1 -0
- package/dist/src/react-router/codemods/root.d.ts +1 -0
- package/dist/src/react-router/codemods/root.js +171 -0
- package/dist/src/react-router/codemods/root.js.map +1 -0
- package/dist/src/react-router/codemods/routes-config.d.ts +1 -0
- package/dist/src/react-router/codemods/routes-config.js +106 -0
- package/dist/src/react-router/codemods/routes-config.js.map +1 -0
- package/dist/src/react-router/codemods/server-entry.d.ts +4 -0
- package/dist/src/react-router/codemods/server-entry.js +275 -0
- package/dist/src/react-router/codemods/server-entry.js.map +1 -0
- package/dist/src/react-router/codemods/utils.d.ts +2 -0
- package/dist/src/react-router/codemods/utils.js +13 -0
- package/dist/src/react-router/codemods/utils.js.map +1 -0
- package/dist/src/react-router/codemods/vite.d.ts +8 -0
- package/dist/src/react-router/codemods/vite.js +169 -0
- package/dist/src/react-router/codemods/vite.js.map +1 -0
- package/dist/src/react-router/react-router-wizard.d.ts +2 -0
- package/dist/src/react-router/react-router-wizard.js +254 -0
- package/dist/src/react-router/react-router-wizard.js.map +1 -0
- package/dist/src/react-router/sdk-example.d.ts +18 -0
- package/dist/src/react-router/sdk-example.js +306 -0
- package/dist/src/react-router/sdk-example.js.map +1 -0
- package/dist/src/react-router/sdk-setup.d.ts +17 -0
- package/dist/src/react-router/sdk-setup.js +250 -0
- package/dist/src/react-router/sdk-setup.js.map +1 -0
- package/dist/src/react-router/templates.d.ts +11 -0
- package/dist/src/react-router/templates.js +273 -0
- package/dist/src/react-router/templates.js.map +1 -0
- package/dist/src/remix/remix-wizard.js +8 -1
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/run.d.ts +2 -1
- package/dist/src/run.js +6 -0
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js +8 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +8 -1
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +30 -0
- package/dist/src/utils/ast-utils.js +71 -1
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +5 -2
- package/dist/src/utils/clack/index.js +14 -2
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/utils/types.d.ts +9 -0
- package/dist/src/utils/types.js.map +1 -1
- 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/nextjs/templates.test.js +20 -0
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/react-router/codemods/client-entry.test.d.ts +1 -0
- package/dist/test/react-router/codemods/client-entry.test.js +168 -0
- package/dist/test/react-router/codemods/client-entry.test.js.map +1 -0
- package/dist/test/react-router/codemods/react-router-config.test.d.ts +1 -0
- package/dist/test/react-router/codemods/react-router-config.test.js +168 -0
- package/dist/test/react-router/codemods/react-router-config.test.js.map +1 -0
- package/dist/test/react-router/codemods/root.test.d.ts +1 -0
- package/dist/test/react-router/codemods/root.test.js +178 -0
- package/dist/test/react-router/codemods/root.test.js.map +1 -0
- package/dist/test/react-router/codemods/server-entry.test.d.ts +1 -0
- package/dist/test/react-router/codemods/server-entry.test.js +415 -0
- package/dist/test/react-router/codemods/server-entry.test.js.map +1 -0
- package/dist/test/react-router/codemods/vite.test.d.ts +1 -0
- package/dist/test/react-router/codemods/vite.test.js +158 -0
- package/dist/test/react-router/codemods/vite.test.js.map +1 -0
- package/dist/test/react-router/routes-config.test.d.ts +1 -0
- package/dist/test/react-router/routes-config.test.js +156 -0
- package/dist/test/react-router/routes-config.test.js.map +1 -0
- package/dist/test/react-router/sdk-setup.test.d.ts +1 -0
- package/dist/test/react-router/sdk-setup.test.js +411 -0
- package/dist/test/react-router/sdk-setup.test.js.map +1 -0
- package/dist/test/react-router/templates.test.d.ts +1 -0
- package/dist/test/react-router/templates.test.js +220 -0
- package/dist/test/react-router/templates.test.js.map +1 -0
- package/dist/test/utils/clack/index.test.js +1 -1
- package/dist/test/utils/clack/index.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
// Mock makeCodeSnippet utility
|
|
5
|
+
vitest_1.vi.mock('../../src/utils/clack', () => {
|
|
6
|
+
return {
|
|
7
|
+
__esModule: true,
|
|
8
|
+
makeCodeSnippet: vitest_1.vi.fn((colors, callback) => {
|
|
9
|
+
// Mock implementation that just calls the callback with simple string functions
|
|
10
|
+
const unchanged = (str) => str;
|
|
11
|
+
const plus = (str) => `+ ${str}`;
|
|
12
|
+
const minus = (str) => `- ${str}`;
|
|
13
|
+
return callback(unchanged, plus, minus);
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
const templates_1 = require("../../src/react-router/templates");
|
|
18
|
+
(0, vitest_1.describe)('React Router Templates', () => {
|
|
19
|
+
(0, vitest_1.beforeEach)(() => {
|
|
20
|
+
vitest_1.vi.clearAllMocks();
|
|
21
|
+
});
|
|
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
|
+
(0, vitest_1.it)('should have correct EXAMPLE_PAGE_TEMPLATE_TSX content', () => {
|
|
31
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('import type { Route }');
|
|
32
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('export async function loader()');
|
|
33
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('throw new Error("some error thrown in a loader")');
|
|
34
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('export default function SentryExamplePage()');
|
|
35
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_TSX).toContain('Loading this page will throw an error');
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)('should have correct EXAMPLE_PAGE_TEMPLATE_JSX content', () => {
|
|
38
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_JSX).not.toContain('import type { Route }');
|
|
39
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_JSX).toContain('export async function loader()');
|
|
40
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_JSX).toContain('throw new Error("some error thrown in a loader")');
|
|
41
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_JSX).toContain('export default function SentryExamplePage()');
|
|
42
|
+
(0, vitest_1.expect)(templates_1.EXAMPLE_PAGE_TEMPLATE_JSX).toContain('Loading this page will throw an error');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.describe)('getManualClientEntryContent', () => {
|
|
46
|
+
(0, vitest_1.it)('should generate manual client entry with all features enabled', () => {
|
|
47
|
+
const dsn = 'https://test.sentry.io/123';
|
|
48
|
+
const enableTracing = true;
|
|
49
|
+
const enableReplay = true;
|
|
50
|
+
const enableLogs = true;
|
|
51
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs);
|
|
52
|
+
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
53
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
54
|
+
(0, vitest_1.expect)(result).toContain('sendDefaultPii: true');
|
|
55
|
+
(0, vitest_1.expect)(result).toContain('Sentry.reactRouterTracingIntegration()');
|
|
56
|
+
(0, vitest_1.expect)(result).toContain('Sentry.replayIntegration()');
|
|
57
|
+
(0, vitest_1.expect)(result).toContain('enableLogs: true');
|
|
58
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 1.0');
|
|
59
|
+
(0, vitest_1.expect)(result).toContain('replaysSessionSampleRate: 0.1');
|
|
60
|
+
(0, vitest_1.expect)(result).toContain('replaysOnErrorSampleRate: 1.0');
|
|
61
|
+
(0, vitest_1.expect)(result).toContain('tracePropagationTargets');
|
|
62
|
+
(0, vitest_1.expect)(result).toContain('<HydratedRouter />');
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)('should generate manual client entry with tracing disabled', () => {
|
|
65
|
+
const dsn = 'https://test.sentry.io/123';
|
|
66
|
+
const enableTracing = false;
|
|
67
|
+
const enableReplay = true;
|
|
68
|
+
const enableLogs = false;
|
|
69
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs);
|
|
70
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
71
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 0');
|
|
72
|
+
(0, vitest_1.expect)(result).not.toContain('Sentry.reactRouterTracingIntegration()');
|
|
73
|
+
(0, vitest_1.expect)(result).toContain('Sentry.replayIntegration()');
|
|
74
|
+
(0, vitest_1.expect)(result).not.toContain('enableLogs: true');
|
|
75
|
+
(0, vitest_1.expect)(result).not.toContain('tracePropagationTargets');
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)('should generate manual client entry with replay disabled', () => {
|
|
78
|
+
const dsn = 'https://test.sentry.io/123';
|
|
79
|
+
const enableTracing = true;
|
|
80
|
+
const enableReplay = false;
|
|
81
|
+
const enableLogs = true;
|
|
82
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs);
|
|
83
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
84
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 1.0');
|
|
85
|
+
(0, vitest_1.expect)(result).toContain('Sentry.reactRouterTracingIntegration()');
|
|
86
|
+
(0, vitest_1.expect)(result).not.toContain('Sentry.replayIntegration()');
|
|
87
|
+
(0, vitest_1.expect)(result).toContain('enableLogs: true');
|
|
88
|
+
(0, vitest_1.expect)(result).not.toContain('replaysSessionSampleRate');
|
|
89
|
+
(0, vitest_1.expect)(result).not.toContain('replaysOnErrorSampleRate');
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)('should generate manual client entry with no integrations', () => {
|
|
92
|
+
const dsn = 'https://test.sentry.io/123';
|
|
93
|
+
const enableTracing = false;
|
|
94
|
+
const enableReplay = false;
|
|
95
|
+
const enableLogs = false;
|
|
96
|
+
const result = (0, templates_1.getManualClientEntryContent)(dsn, enableTracing, enableReplay, enableLogs);
|
|
97
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
98
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 0');
|
|
99
|
+
(0, vitest_1.expect)(result).not.toContain('Sentry.reactRouterTracingIntegration()');
|
|
100
|
+
(0, vitest_1.expect)(result).not.toContain('Sentry.replayIntegration()');
|
|
101
|
+
(0, vitest_1.expect)(result).not.toContain('enableLogs: true');
|
|
102
|
+
(0, vitest_1.expect)(result).toContain('integrations: [');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
(0, vitest_1.describe)('getManualServerEntryContent', () => {
|
|
106
|
+
(0, vitest_1.it)('should generate manual server entry content', () => {
|
|
107
|
+
const result = (0, templates_1.getManualServerEntryContent)();
|
|
108
|
+
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
109
|
+
(0, vitest_1.expect)(result).toContain('createReadableStreamFromReadable');
|
|
110
|
+
(0, vitest_1.expect)(result).toContain('renderToPipeableStream');
|
|
111
|
+
(0, vitest_1.expect)(result).toContain('ServerRouter');
|
|
112
|
+
(0, vitest_1.expect)(result).toContain('+ const handleRequest = Sentry.createSentryHandleRequest({');
|
|
113
|
+
(0, vitest_1.expect)(result).toContain('+ export const handleError = Sentry.createSentryHandleError({');
|
|
114
|
+
(0, vitest_1.expect)(result).toContain('logErrors: false');
|
|
115
|
+
(0, vitest_1.expect)(result).toContain('export default handleRequest');
|
|
116
|
+
(0, vitest_1.expect)(result).toContain('rest of your server entry');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
(0, vitest_1.describe)('getManualRootContent', () => {
|
|
120
|
+
(0, vitest_1.it)('should generate manual root content for TypeScript', () => {
|
|
121
|
+
const isTs = true;
|
|
122
|
+
const result = (0, templates_1.getManualRootContent)(isTs);
|
|
123
|
+
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
124
|
+
(0, vitest_1.expect)(result).toContain('export function ErrorBoundary({ error }: Route.ErrorBoundaryProps)');
|
|
125
|
+
(0, vitest_1.expect)(result).toContain('let stack: string | undefined');
|
|
126
|
+
(0, vitest_1.expect)(result).toContain('isRouteErrorResponse(error)');
|
|
127
|
+
(0, vitest_1.expect)(result).toContain('+ Sentry.captureException(error)');
|
|
128
|
+
(0, vitest_1.expect)(result).toContain('details = error.message');
|
|
129
|
+
(0, vitest_1.expect)(result).toContain('error.status === 404');
|
|
130
|
+
});
|
|
131
|
+
(0, vitest_1.it)('should generate manual root content for JavaScript', () => {
|
|
132
|
+
const isTs = false;
|
|
133
|
+
const result = (0, templates_1.getManualRootContent)(isTs);
|
|
134
|
+
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
135
|
+
(0, vitest_1.expect)(result).toContain('export function ErrorBoundary({ error })');
|
|
136
|
+
(0, vitest_1.expect)(result).not.toContain(': Route.ErrorBoundaryProps');
|
|
137
|
+
(0, vitest_1.expect)(result).toContain('let stack');
|
|
138
|
+
(0, vitest_1.expect)(result).not.toContain(': string | undefined');
|
|
139
|
+
(0, vitest_1.expect)(result).toContain('isRouteErrorResponse(error)');
|
|
140
|
+
(0, vitest_1.expect)(result).toContain('+ Sentry.captureException(error)');
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
(0, vitest_1.describe)('getManualServerInstrumentContent', () => {
|
|
144
|
+
(0, vitest_1.it)('should generate server instrumentation with all features enabled', () => {
|
|
145
|
+
const dsn = 'https://test.sentry.io/123';
|
|
146
|
+
const enableTracing = true;
|
|
147
|
+
const enableProfiling = true;
|
|
148
|
+
const enableLogs = true;
|
|
149
|
+
const result = (0, templates_1.getManualServerInstrumentContent)(dsn, enableTracing, enableProfiling, enableLogs);
|
|
150
|
+
(0, vitest_1.expect)(result).toContain("+ import * as Sentry from '@sentry/react-router'");
|
|
151
|
+
(0, vitest_1.expect)(result).toContain("import { nodeProfilingIntegration } from '@sentry/profiling-node'");
|
|
152
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
153
|
+
(0, vitest_1.expect)(result).toContain('sendDefaultPii: true');
|
|
154
|
+
(0, vitest_1.expect)(result).toContain('enableLogs: true');
|
|
155
|
+
(0, vitest_1.expect)(result).toContain('integrations: [nodeProfilingIntegration()]');
|
|
156
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 1.0');
|
|
157
|
+
(0, vitest_1.expect)(result).toContain('profilesSampleRate: 1.0');
|
|
158
|
+
(0, vitest_1.expect)(result).toContain('Capture 100% of the transactions');
|
|
159
|
+
(0, vitest_1.expect)(result).toContain('profile every transaction');
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.it)('should generate server instrumentation with tracing disabled', () => {
|
|
162
|
+
const dsn = 'https://test.sentry.io/123';
|
|
163
|
+
const enableTracing = false;
|
|
164
|
+
const enableProfiling = false;
|
|
165
|
+
const result = (0, templates_1.getManualServerInstrumentContent)(dsn, enableTracing, enableProfiling);
|
|
166
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
167
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 0');
|
|
168
|
+
(0, vitest_1.expect)(result).not.toContain('nodeProfilingIntegration');
|
|
169
|
+
(0, vitest_1.expect)(result).not.toContain('profilesSampleRate');
|
|
170
|
+
(0, vitest_1.expect)(result).not.toContain('integrations: [nodeProfilingIntegration()]');
|
|
171
|
+
// When logs are not enabled, enableLogs should not appear
|
|
172
|
+
(0, vitest_1.expect)(result).not.toContain('enableLogs: true');
|
|
173
|
+
});
|
|
174
|
+
(0, vitest_1.it)('should generate server instrumentation with profiling disabled but tracing enabled', () => {
|
|
175
|
+
const dsn = 'https://test.sentry.io/123';
|
|
176
|
+
const enableTracing = true;
|
|
177
|
+
const enableProfiling = false;
|
|
178
|
+
const enableLogs = false;
|
|
179
|
+
const result = (0, templates_1.getManualServerInstrumentContent)(dsn, enableTracing, enableProfiling, enableLogs);
|
|
180
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
181
|
+
(0, vitest_1.expect)(result).toContain('tracesSampleRate: 1.0');
|
|
182
|
+
(0, vitest_1.expect)(result).not.toContain('nodeProfilingIntegration');
|
|
183
|
+
(0, vitest_1.expect)(result).not.toContain('profilesSampleRate');
|
|
184
|
+
(0, vitest_1.expect)(result).not.toContain('integrations:');
|
|
185
|
+
});
|
|
186
|
+
(0, vitest_1.it)('should handle special characters in DSN', () => {
|
|
187
|
+
const dsn = 'https://test@example.com/sentry/123?param=value';
|
|
188
|
+
const enableTracing = true;
|
|
189
|
+
const enableProfiling = false;
|
|
190
|
+
const result = (0, templates_1.getManualServerInstrumentContent)(dsn, enableTracing, enableProfiling);
|
|
191
|
+
(0, vitest_1.expect)(result).toContain(`dsn: "${dsn}"`);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
(0, vitest_1.describe)('getManualReactRouterConfigContent', () => {
|
|
195
|
+
(0, vitest_1.it)('should generate TypeScript config snippet with type imports and satisfies', () => {
|
|
196
|
+
const result = (0, templates_1.getManualReactRouterConfigContent)(true);
|
|
197
|
+
(0, vitest_1.expect)(result).toContain('import type { Config }');
|
|
198
|
+
(0, vitest_1.expect)(result).toContain('} satisfies Config;');
|
|
199
|
+
(0, vitest_1.expect)(result).toContain('sentryOnBuildEnd');
|
|
200
|
+
(0, vitest_1.expect)(result).toContain('ssr: true');
|
|
201
|
+
});
|
|
202
|
+
(0, vitest_1.it)('should generate JavaScript config snippet without TS-only syntax', () => {
|
|
203
|
+
const result = (0, templates_1.getManualReactRouterConfigContent)(false);
|
|
204
|
+
// JS version should NOT have TypeScript-only syntax
|
|
205
|
+
(0, vitest_1.expect)(result).not.toContain('import type');
|
|
206
|
+
(0, vitest_1.expect)(result).not.toContain('satisfies Config');
|
|
207
|
+
// JS version should have the standard import and export
|
|
208
|
+
(0, vitest_1.expect)(result).toContain('import { sentryOnBuildEnd }');
|
|
209
|
+
(0, vitest_1.expect)(result).toContain('sentryOnBuildEnd');
|
|
210
|
+
(0, vitest_1.expect)(result).toContain('ssr: true');
|
|
211
|
+
(0, vitest_1.expect)(result).toContain('export default {');
|
|
212
|
+
});
|
|
213
|
+
(0, vitest_1.it)('should default to TypeScript when no parameter is passed', () => {
|
|
214
|
+
const result = (0, templates_1.getManualReactRouterConfigContent)();
|
|
215
|
+
(0, vitest_1.expect)(result).toContain('import type { Config }');
|
|
216
|
+
(0, vitest_1.expect)(result).toContain('} satisfies Config;');
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
//# sourceMappingURL=templates.test.js.map
|
|
@@ -0,0 +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\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\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"]}
|
|
@@ -277,7 +277,7 @@ function mockUserResponse(fn, response) {
|
|
|
277
277
|
}),
|
|
278
278
|
captureSession: vitest_1.vi.fn(),
|
|
279
279
|
});
|
|
280
|
-
const flushSpy = vitest_1.vi.fn();
|
|
280
|
+
const flushSpy = vitest_1.vi.fn(() => Promise.resolve(true));
|
|
281
281
|
vitest_1.vi.spyOn(Sentry, 'flush').mockImplementation(flushSpy);
|
|
282
282
|
(0, vitest_1.it)('ends the process with an error exit code by default', async () => {
|
|
283
283
|
// @ts-expect-error - vitest doesn't like the empty function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../test/utils/clack/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abort,\n askForToolConfigPath,\n askForWizardLogin,\n createNewConfigFile,\n getPackageManager,\n installPackage,\n} from '../../../src/utils/clack/';\n\nimport * as fs from 'node:fs';\nimport * as ChildProcess from 'node:child_process';\nimport type { PackageManager } from '../../../src/utils/package-manager';\nimport * as PackageManagerUtils from '../../../src/utils/package-manager';\n\nimport {\n NPM,\n PNPM,\n YARN_V1,\n YARN_V2,\n} from '../../../src/utils/package-manager';\n\nimport axios from 'axios';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n vi,\n it,\n describe,\n expect,\n beforeEach,\n Mocked,\n Mock,\n afterEach,\n} from 'vitest';\n\nvi.mock('node:child_process', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof ChildProcess>('node:child_process')),\n}));\n\nvi.mock('@clack/prompts', () => ({\n log: {\n info: vi.fn(),\n success: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n },\n outro: vi.fn(),\n text: vi.fn(),\n confirm: vi.fn(),\n cancel: vi.fn(),\n // passthrough for abortIfCancelled\n isCancel: vi.fn().mockReturnValue(false),\n spinner: vi\n .fn()\n .mockImplementation(() => ({ start: vi.fn(), stop: vi.fn() })),\n select: vi.fn(),\n}));\nconst clackMock = clack as Mocked<typeof clack>;\n\nvi.mock('axios');\nconst mockedAxios = axios as Mocked<typeof axios>;\n\nvi.mock('opn', () => ({\n default: vi.fn(() => Promise.resolve({ on: vi.fn() })),\n}));\n\nfunction mockUserResponse(fn: Mock, response: unknown) {\n fn.mockReturnValueOnce(response);\n}\n\ndescribe('askForToolConfigPath', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('returns undefined if users have no config file', async () => {\n mockUserResponse(clack.confirm as Mock, false);\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(result).toBeUndefined();\n });\n\n it('returns the path if users have a config file and the entered path is valid', async () => {\n mockUserResponse(clack.confirm as Mock, true);\n mockUserResponse(clack.text as Mock, 'my.webpack.config.js');\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(clack.text).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining(\n 'enter the path to your Webpack config file',\n ),\n }),\n );\n\n expect(result).toBe('my.webpack.config.js');\n });\n});\n\ndescribe('createNewConfigFile', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('writes the file to disk and returns true if the file was created successfully', async () => {\n const writeFileSpy = vi\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(vi.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(true);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n });\n\n it('logs more information if provided as an argument', async () => {\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(vi.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n const moreInfo = 'More information...';\n\n await createNewConfigFile(filename, code, moreInfo);\n\n expect(clack.log.info).toHaveBeenCalledTimes(1);\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining(moreInfo),\n );\n });\n\n it('returns false and logs a warning if the file could not be created', async () => {\n const writeFileSpy = vi\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(() => Promise.reject(new Error('Could not write')));\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(false);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n expect(clack.log.warn).toHaveBeenCalledTimes(1);\n });\n\n it('returns false if the passed path is not absolute', async () => {\n const result = await createNewConfigFile(\n './relative/webpack.config.js',\n '',\n );\n\n expect(result).toBe(false);\n });\n});\n\ndescribe('installPackage', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n const spawnSpy = vi.spyOn(ChildProcess, 'spawn').mockImplementation(() => ({\n // @ts-expect-error - not passing the full object but directly resolving\n // to simulate a successful install\n on: vi.fn((evt: 'close', cb: (args) => void) => {\n if (evt === 'close') {\n cb(0);\n }\n }),\n // @ts-expect-error - this is fine\n stderr: { on: vi.fn() },\n }));\n\n it('force-installs a package if the forceInstall flag is set', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@some/package', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n\n it.each([false, undefined])(\n \"doesn't force-install a package if the forceInstall flag is %s\",\n async (flag) => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@sentry/sveltekit',\n packageNameDisplayLabel: '@sentry/sveltekit',\n forceInstall: flag,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@sentry/sveltekit'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n },\n );\n\n it('adds install flags if defined', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n\n ['install', '@some/package', '--ignore-workspace-root-check', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n});\n\ndescribe('askForWizardLogin', () => {\n beforeEach(() => {\n vi.clearAllMocks();\n mockedAxios.get.mockClear();\n clackMock.confirm.mockClear();\n clackMock.confirm.mockReset();\n mockUserResponse(clack.confirm as Mock, undefined);\n });\n\n it('asks if a user already has a Sentry account by default', async () => {\n mockUserResponse(clack.confirm as Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({ url: 'https://santry.io/' });\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('already have a Sentry account'),\n }),\n );\n });\n\n it('skips asking for if a user already has a Sentry account if org and project are pre-selected', async () => {\n mockUserResponse(clackMock.confirm as Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({\n url: 'https://santry.io/',\n orgSlug: 'my-org',\n projectSlug: 'my-project',\n });\n\n expect(clack.confirm).not.toHaveBeenCalled();\n });\n});\n\ndescribe('abort', () => {\n const sentryTxn = {\n setStatus: vi.fn(),\n finish: vi.fn(),\n };\n\n let sentrySession = {\n status: 999,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n sentrySession = {\n status: 999,\n };\n });\n\n vi.spyOn(Sentry, 'getCurrentHub').mockReturnValue({\n getScope: () => ({\n // @ts-expect-error - don't care about the rest of the required props value\n getTransaction: () => sentryTxn,\n // @ts-expect-error - don't care about the rest of the required props value\n getSession: () => sentrySession,\n }),\n captureSession: vi.fn(),\n });\n\n const flushSpy = vi.fn();\n vi.spyOn(Sentry, 'flush').mockImplementation(flushSpy);\n\n it('ends the process with an error exit code by default', async () => {\n // @ts-expect-error - vitest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort();\n\n expect(exitSpy).toHaveBeenCalledWith(1);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('aborted');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('crashed');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n\n it('ends the process with a custom exit code and message if provided', async () => {\n // @ts-expect-error - vitest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort('Bye', 0);\n\n expect(exitSpy).toHaveBeenCalledWith(0);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Bye');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('cancelled');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('abnormal');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n});\n\ndescribe('getPackageManager', () => {\n afterEach(() => {\n vi.clearAllMocks();\n // @ts-expect-error - this variable is set by the wizard\n delete global.__sentry_wizard_cached_package_manager;\n });\n\n it('returns the auto-detected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(YARN_V1);\n\n const packageManager = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager).toBe(YARN_V1);\n });\n\n it('caches the auto-detected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(YARN_V1);\n\n const packageManager1 = await getPackageManager();\n const packageManager2 = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager1).toBe(YARN_V1);\n expect(packageManager2).toBe(YARN_V1);\n });\n\n describe('when auto detection fails', () => {\n it('returns a fallback package manager if fallback is specified', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n const packageManager = await getPackageManager(YARN_V2);\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager).toBe(YARN_V2);\n });\n\n it(\"doesn't cache the fallback package manager\", async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValue(null);\n\n const packageManager1 = await getPackageManager(YARN_V2);\n const packageManager2 = await getPackageManager(NPM);\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(2);\n\n expect(packageManager1).toBe(YARN_V2);\n expect(packageManager2).toBe(NPM);\n });\n\n it('returns the user-selected package manager if no fallback is provided', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n clackMock.select.mockReturnValueOnce(Promise.resolve(PNPM));\n\n const packageManager = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n expect(packageManager).toBe(PNPM);\n });\n\n it('caches the user-selected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n clackMock.select.mockReturnValueOnce(Promise.resolve(PNPM));\n\n const packageManager1 = await getPackageManager();\n const packageManager2 = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n expect(clackMock.select).toHaveBeenCalledTimes(1);\n\n expect(packageManager1).toBe(PNPM);\n expect(packageManager2).toBe(PNPM);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../test/utils/clack/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abort,\n askForToolConfigPath,\n askForWizardLogin,\n createNewConfigFile,\n getPackageManager,\n installPackage,\n} from '../../../src/utils/clack/';\n\nimport * as fs from 'node:fs';\nimport * as ChildProcess from 'node:child_process';\nimport type { PackageManager } from '../../../src/utils/package-manager';\nimport * as PackageManagerUtils from '../../../src/utils/package-manager';\n\nimport {\n NPM,\n PNPM,\n YARN_V1,\n YARN_V2,\n} from '../../../src/utils/package-manager';\n\nimport axios from 'axios';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\nimport * as Sentry from '@sentry/node';\n\nimport {\n vi,\n it,\n describe,\n expect,\n beforeEach,\n Mocked,\n Mock,\n afterEach,\n} from 'vitest';\n\nvi.mock('node:child_process', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof ChildProcess>('node:child_process')),\n}));\n\nvi.mock('@clack/prompts', () => ({\n log: {\n info: vi.fn(),\n success: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n },\n outro: vi.fn(),\n text: vi.fn(),\n confirm: vi.fn(),\n cancel: vi.fn(),\n // passthrough for abortIfCancelled\n isCancel: vi.fn().mockReturnValue(false),\n spinner: vi\n .fn()\n .mockImplementation(() => ({ start: vi.fn(), stop: vi.fn() })),\n select: vi.fn(),\n}));\nconst clackMock = clack as Mocked<typeof clack>;\n\nvi.mock('axios');\nconst mockedAxios = axios as Mocked<typeof axios>;\n\nvi.mock('opn', () => ({\n default: vi.fn(() => Promise.resolve({ on: vi.fn() })),\n}));\n\nfunction mockUserResponse(fn: Mock, response: unknown) {\n fn.mockReturnValueOnce(response);\n}\n\ndescribe('askForToolConfigPath', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('returns undefined if users have no config file', async () => {\n mockUserResponse(clack.confirm as Mock, false);\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(result).toBeUndefined();\n });\n\n it('returns the path if users have a config file and the entered path is valid', async () => {\n mockUserResponse(clack.confirm as Mock, true);\n mockUserResponse(clack.text as Mock, 'my.webpack.config.js');\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(clack.text).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining(\n 'enter the path to your Webpack config file',\n ),\n }),\n );\n\n expect(result).toBe('my.webpack.config.js');\n });\n});\n\ndescribe('createNewConfigFile', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it('writes the file to disk and returns true if the file was created successfully', async () => {\n const writeFileSpy = vi\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(vi.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(true);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n });\n\n it('logs more information if provided as an argument', async () => {\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(vi.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n const moreInfo = 'More information...';\n\n await createNewConfigFile(filename, code, moreInfo);\n\n expect(clack.log.info).toHaveBeenCalledTimes(1);\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining(moreInfo),\n );\n });\n\n it('returns false and logs a warning if the file could not be created', async () => {\n const writeFileSpy = vi\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(() => Promise.reject(new Error('Could not write')));\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(false);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n expect(clack.log.warn).toHaveBeenCalledTimes(1);\n });\n\n it('returns false if the passed path is not absolute', async () => {\n const result = await createNewConfigFile(\n './relative/webpack.config.js',\n '',\n );\n\n expect(result).toBe(false);\n });\n});\n\ndescribe('installPackage', () => {\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n const spawnSpy = vi.spyOn(ChildProcess, 'spawn').mockImplementation(() => ({\n // @ts-expect-error - not passing the full object but directly resolving\n // to simulate a successful install\n on: vi.fn((evt: 'close', cb: (args) => void) => {\n if (evt === 'close') {\n cb(0);\n }\n }),\n // @ts-expect-error - this is fine\n stderr: { on: vi.fn() },\n }));\n\n it('force-installs a package if the forceInstall flag is set', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@some/package', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n\n it.each([false, undefined])(\n \"doesn't force-install a package if the forceInstall flag is %s\",\n async (flag) => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@sentry/sveltekit',\n packageNameDisplayLabel: '@sentry/sveltekit',\n forceInstall: flag,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@sentry/sveltekit'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n },\n );\n\n it('adds install flags if defined', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: vi.fn(),\n addOverride: vi.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n\n ['install', '@some/package', '--ignore-workspace-root-check', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n});\n\ndescribe('askForWizardLogin', () => {\n beforeEach(() => {\n vi.clearAllMocks();\n mockedAxios.get.mockClear();\n clackMock.confirm.mockClear();\n clackMock.confirm.mockReset();\n mockUserResponse(clack.confirm as Mock, undefined);\n });\n\n it('asks if a user already has a Sentry account by default', async () => {\n mockUserResponse(clack.confirm as Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({ url: 'https://santry.io/' });\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n message: expect.stringContaining('already have a Sentry account'),\n }),\n );\n });\n\n it('skips asking for if a user already has a Sentry account if org and project are pre-selected', async () => {\n mockUserResponse(clackMock.confirm as Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({\n url: 'https://santry.io/',\n orgSlug: 'my-org',\n projectSlug: 'my-project',\n });\n\n expect(clack.confirm).not.toHaveBeenCalled();\n });\n});\n\ndescribe('abort', () => {\n const sentryTxn = {\n setStatus: vi.fn(),\n finish: vi.fn(),\n };\n\n let sentrySession = {\n status: 999,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n sentrySession = {\n status: 999,\n };\n });\n\n vi.spyOn(Sentry, 'getCurrentHub').mockReturnValue({\n getScope: () => ({\n // @ts-expect-error - don't care about the rest of the required props value\n getTransaction: () => sentryTxn,\n // @ts-expect-error - don't care about the rest of the required props value\n getSession: () => sentrySession,\n }),\n captureSession: vi.fn(),\n });\n\n const flushSpy = vi.fn(() => Promise.resolve(true));\n vi.spyOn(Sentry, 'flush').mockImplementation(flushSpy);\n\n it('ends the process with an error exit code by default', async () => {\n // @ts-expect-error - vitest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort();\n\n expect(exitSpy).toHaveBeenCalledWith(1);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('aborted');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('crashed');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n\n it('ends the process with a custom exit code and message if provided', async () => {\n // @ts-expect-error - vitest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort('Bye', 0);\n\n expect(exitSpy).toHaveBeenCalledWith(0);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Bye');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('cancelled');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('abnormal');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n});\n\ndescribe('getPackageManager', () => {\n afterEach(() => {\n vi.clearAllMocks();\n // @ts-expect-error - this variable is set by the wizard\n delete global.__sentry_wizard_cached_package_manager;\n });\n\n it('returns the auto-detected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(YARN_V1);\n\n const packageManager = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager).toBe(YARN_V1);\n });\n\n it('caches the auto-detected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(YARN_V1);\n\n const packageManager1 = await getPackageManager();\n const packageManager2 = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager1).toBe(YARN_V1);\n expect(packageManager2).toBe(YARN_V1);\n });\n\n describe('when auto detection fails', () => {\n it('returns a fallback package manager if fallback is specified', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n const packageManager = await getPackageManager(YARN_V2);\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n\n expect(packageManager).toBe(YARN_V2);\n });\n\n it(\"doesn't cache the fallback package manager\", async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValue(null);\n\n const packageManager1 = await getPackageManager(YARN_V2);\n const packageManager2 = await getPackageManager(NPM);\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(2);\n\n expect(packageManager1).toBe(YARN_V2);\n expect(packageManager2).toBe(NPM);\n });\n\n it('returns the user-selected package manager if no fallback is provided', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n clackMock.select.mockReturnValueOnce(Promise.resolve(PNPM));\n\n const packageManager = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n expect(packageManager).toBe(PNPM);\n });\n\n it('caches the user-selected package manager', async () => {\n const detectPacManSpy = vi\n .spyOn(PackageManagerUtils, '_detectPackageManger')\n .mockReturnValueOnce(null);\n\n clackMock.select.mockReturnValueOnce(Promise.resolve(PNPM));\n\n const packageManager1 = await getPackageManager();\n const packageManager2 = await getPackageManager();\n\n expect(detectPacManSpy).toHaveBeenCalledTimes(1);\n expect(clackMock.select).toHaveBeenCalledTimes(1);\n\n expect(packageManager1).toBe(PNPM);\n expect(packageManager2).toBe(PNPM);\n });\n });\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/wizard",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.7.0",
|
|
4
4
|
"homepage": "https://github.com/getsentry/sentry-wizard",
|
|
5
5
|
"repository": "https://github.com/getsentry/sentry-wizard",
|
|
6
6
|
"description": "Sentry wizard helping you to configure your project",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"test:watch": "vitest"
|
|
92
92
|
},
|
|
93
93
|
"author": "Sentry",
|
|
94
|
-
"license": "MIT",
|
|
94
|
+
"license": "FSL-1.1-MIT",
|
|
95
95
|
"volta": {
|
|
96
96
|
"node": "18.20.6",
|
|
97
97
|
"yarn": "1.22.19"
|