Skip to content

Commit 4fab2f0

Browse files
committed
ref: remove warning, no point if they cannot do anything about it
1 parent 388033a commit 4fab2f0

File tree

3 files changed

+1
-209
lines changed

3 files changed

+1
-209
lines changed

packages/nextjs/src/config/util.ts

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -181,37 +181,3 @@ export function detectActiveBundler(): 'turbopack' | 'webpack' {
181181
return 'webpack';
182182
}
183183
}
184-
185-
/**
186-
* Finds the middleware or proxy file in the Next.js project.
187-
* Next.js only allows one middleware file, so this returns the first match.
188-
*/
189-
export function findMiddlewareFile(): { path: string; contents: string } | undefined {
190-
const projectDir = process.cwd();
191-
192-
// In Next.js 16+, the file is called 'proxy', in earlier versions it's 'middleware'
193-
const nextVersion = getNextjsVersion();
194-
const nextMajor = nextVersion ? parseSemver(nextVersion).major : undefined;
195-
const basename = nextMajor && nextMajor >= 16 ? 'proxy' : 'middleware';
196-
const directories = [projectDir, `${projectDir}/src`];
197-
const extensions = ['.ts', '.js'];
198-
199-
// Find the first existing middleware/proxy file
200-
for (const dir of directories) {
201-
for (const ext of extensions) {
202-
const filePath = `${dir}/${basename}${ext}`;
203-
if (fs.existsSync(filePath)) {
204-
try {
205-
const contents = fs.readFileSync(filePath, 'utf-8');
206-
207-
return { path: filePath, contents };
208-
} catch {
209-
// If we can't read the file, continue searching
210-
continue;
211-
}
212-
}
213-
}
214-
}
215-
216-
return undefined;
217-
}

packages/nextjs/src/config/withSentryConfig.ts

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import type {
1818
} from './types';
1919
import {
2020
detectActiveBundler,
21-
findMiddlewareFile,
2221
getNextjsVersion,
2322
requiresInstrumentationHook,
2423
supportsProductionCompileHook,
@@ -27,7 +26,6 @@ import { constructWebpackConfigFunction } from './webpack';
2726

2827
let showedExportModeTunnelWarning = false;
2928
let showedExperimentalBuildModeWarning = false;
30-
let showedMiddlewareMatcherWarning = false;
3129

3230
// Packages we auto-instrument need to be external for instrumentation to work
3331
// Next.js externalizes some packages by default, see: https://nextjs.org/docs/app/api-reference/config/next-config-js/serverExternalPackages
@@ -91,45 +89,6 @@ export function withSentryConfig<C>(nextConfig?: C, sentryBuildOptions: SentryBu
9189
}
9290
}
9391

94-
/**
95-
* Checks if the user has a middleware/proxy file with a matcher that might exclude the tunnel route.
96-
* Warns the user if their matcher might interfere with the tunnel route.
97-
*/
98-
function checkMiddlewareMatcherForTunnelRoute(tunnelPath: string): void {
99-
if (showedMiddlewareMatcherWarning) {
100-
return;
101-
}
102-
103-
try {
104-
const middlewareFile = findMiddlewareFile();
105-
106-
// No middleware file found
107-
if (!middlewareFile) {
108-
return;
109-
}
110-
111-
// Look for config.matcher export
112-
const isProxy = middlewareFile.path.includes('proxy');
113-
const hasConfigMatcher = /export\s+const\s+config\s*=\s*{[^}]*matcher\s*:/s.test(middlewareFile.contents);
114-
115-
if (hasConfigMatcher) {
116-
// eslint-disable-next-line no-console
117-
console.warn(
118-
`[@sentry/nextjs] WARNING: You have a ${isProxy ? 'proxy' : 'middleware'} file (${path.basename(middlewareFile.path)}) with a \`config.matcher\`. ` +
119-
`If your matcher runs on the Sentry tunnel route (${tunnelPath}), it may interfere with event delivery. ` +
120-
'Please ensure your matcher excludes the tunnel route. For example:\n\n' +
121-
' export const config = {\n' +
122-
' // Use a negative lookahead to exclude the Sentry tunnel route\n' +
123-
` matcher: '/((?!${tunnelPath.replace(/^\//, '')}|_next/static|_next/image|favicon.ico).*)',\n` +
124-
' };\n',
125-
);
126-
showedMiddlewareMatcherWarning = true;
127-
}
128-
} catch {
129-
// Silently fail - this is just a helpful warning, not critical
130-
}
131-
}
132-
13392
/**
13493
* Generates a random tunnel route path that's less likely to be blocked by ad-blockers
13594
*/
@@ -167,7 +126,6 @@ function getFinalConfigObject(
167126
userSentryOptions.tunnelRoute = resolvedTunnelRoute || undefined;
168127

169128
setUpTunnelRewriteRules(incomingUserNextConfigObject, resolvedTunnelRoute);
170-
checkMiddlewareMatcherForTunnelRoute(resolvedTunnelRoute);
171129
}
172130
}
173131

packages/nextjs/test/config/util.test.ts

Lines changed: 1 addition & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import * as fs from 'fs';
2-
import * as path from 'path';
3-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
1+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
42
import * as util from '../../src/config/util';
53

64
describe('util', () => {
@@ -336,134 +334,4 @@ describe('util', () => {
336334
expect(util.detectActiveBundler()).toBe('webpack');
337335
});
338336
});
339-
340-
describe('findMiddlewareFile', () => {
341-
vi.mock('../../src/config/util', async () => {
342-
const actual = await vi.importActual('../../src/config/util');
343-
return {
344-
...actual,
345-
getNextjsVersion: vi.fn(),
346-
};
347-
});
348-
349-
let originalCwd: string;
350-
let testDir: string;
351-
352-
beforeEach(() => {
353-
originalCwd = process.cwd();
354-
testDir = path.join(__dirname, '.test-middleware-temp');
355-
356-
// Create test directory
357-
if (!fs.existsSync(testDir)) {
358-
fs.mkdirSync(testDir, { recursive: true });
359-
}
360-
361-
process.chdir(testDir);
362-
});
363-
364-
afterEach(() => {
365-
process.chdir(originalCwd);
366-
367-
// Clean up test directory
368-
if (fs.existsSync(testDir)) {
369-
fs.rmSync(testDir, { recursive: true, force: true });
370-
}
371-
372-
vi.clearAllMocks();
373-
});
374-
375-
describe('Next.js <16 (middleware)', () => {
376-
beforeEach(() => {
377-
vi.mocked(util.getNextjsVersion).mockReturnValue('15.0.0');
378-
});
379-
380-
it('should find middleware.ts in root directory', () => {
381-
fs.writeFileSync(path.join(testDir, 'middleware.ts'), 'export default function middleware() {}');
382-
383-
const result = util.findMiddlewareFile();
384-
385-
expect(result).toBeDefined();
386-
expect(result?.path).toContain('middleware.ts');
387-
expect(result?.contents).toBe('export default function middleware() {}');
388-
});
389-
390-
it('should find middleware.js in root directory', () => {
391-
fs.writeFileSync(path.join(testDir, 'middleware.js'), 'module.exports = function middleware() {}');
392-
393-
const result = util.findMiddlewareFile();
394-
395-
expect(result).toBeDefined();
396-
expect(result?.path).toContain('middleware.js');
397-
expect(result?.contents).toBe('module.exports = function middleware() {}');
398-
});
399-
400-
it('should find middleware.ts in src directory', () => {
401-
fs.mkdirSync(path.join(testDir, 'src'), { recursive: true });
402-
fs.writeFileSync(path.join(testDir, 'src', 'middleware.ts'), 'export default function middleware() {}');
403-
404-
const result = util.findMiddlewareFile();
405-
406-
expect(result).toBeDefined();
407-
expect(result?.path).toContain(path.join('src', 'middleware.ts'));
408-
expect(result?.contents).toBe('export default function middleware() {}');
409-
});
410-
411-
it('should prefer root over src directory', () => {
412-
fs.mkdirSync(path.join(testDir, 'src'), { recursive: true });
413-
fs.writeFileSync(path.join(testDir, 'middleware.ts'), 'root middleware');
414-
fs.writeFileSync(path.join(testDir, 'src', 'middleware.ts'), 'src middleware');
415-
416-
const result = util.findMiddlewareFile();
417-
418-
expect(result).toBeDefined();
419-
expect(result?.contents).toBe('root middleware');
420-
});
421-
422-
it('should prefer .ts over .js extension', () => {
423-
fs.writeFileSync(path.join(testDir, 'middleware.ts'), 'typescript middleware');
424-
fs.writeFileSync(path.join(testDir, 'middleware.js'), 'javascript middleware');
425-
426-
const result = util.findMiddlewareFile();
427-
428-
expect(result).toBeDefined();
429-
expect(result?.contents).toBe('typescript middleware');
430-
});
431-
432-
it('should NOT find proxy.ts on Next.js <16', () => {
433-
fs.writeFileSync(path.join(testDir, 'proxy.ts'), 'export default function proxy() {}');
434-
435-
const result = util.findMiddlewareFile();
436-
437-
expect(result).toBeUndefined();
438-
});
439-
440-
it('should return undefined when no middleware file exists', () => {
441-
const result = util.findMiddlewareFile();
442-
443-
expect(result).toBeUndefined();
444-
});
445-
});
446-
447-
// Note: Tests for Next.js 16+ (proxy) behavior would require mocking getNextjsVersion,
448-
// which is challenging in this test setup due to module imports.
449-
// The logic is the same as middleware tests but with 'proxy' instead of 'middleware'.
450-
451-
describe('edge cases', () => {
452-
beforeEach(() => {
453-
vi.mocked(util.getNextjsVersion).mockReturnValue('15.0.0');
454-
});
455-
456-
it('should handle when getNextjsVersion returns undefined', () => {
457-
vi.mocked(util.getNextjsVersion).mockReturnValue(undefined);
458-
459-
fs.writeFileSync(path.join(testDir, 'middleware.ts'), 'export default function middleware() {}');
460-
461-
const result = util.findMiddlewareFile();
462-
463-
// Should default to 'middleware' when version is unknown
464-
expect(result).toBeDefined();
465-
expect(result?.path).toContain('middleware.ts');
466-
});
467-
});
468-
});
469337
});

0 commit comments

Comments
 (0)