Skip to content

Commit 4c39ed8

Browse files
committed
support next proxy files
1 parent da08d49 commit 4c39ed8

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

packages/nextjs/src/config/templates/middlewareWrapperTemplate.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type NextApiModule =
1515
// ESM export
1616
default?: EdgeRouteHandler;
1717
middleware?: EdgeRouteHandler;
18+
proxy?: EdgeRouteHandler;
1819
}
1920
// CJS export
2021
| EdgeRouteHandler;
@@ -29,6 +30,9 @@ let userProvidedDefaultHandler: EdgeRouteHandler | undefined = undefined;
2930
if ('middleware' in userApiModule && typeof userApiModule.middleware === 'function') {
3031
// Handle when user defines via named ESM export: `export { middleware };`
3132
userProvidedNamedHandler = userApiModule.middleware;
33+
} else if ('proxy' in userApiModule && typeof userApiModule.proxy === 'function') {
34+
// Handle when user defines via named ESM export (Next.js 16): `export { proxy };`
35+
userProvidedNamedHandler = userApiModule.proxy;
3236
} else if ('default' in userApiModule && typeof userApiModule.default === 'function') {
3337
// Handle when user defines via ESM export: `export default myFunction;`
3438
userProvidedDefaultHandler = userApiModule.default;
@@ -40,6 +44,7 @@ if ('middleware' in userApiModule && typeof userApiModule.middleware === 'functi
4044
export const middleware = userProvidedNamedHandler
4145
? Sentry.wrapMiddlewareWithSentry(userProvidedNamedHandler)
4246
: undefined;
47+
export const proxy = userProvidedNamedHandler ? Sentry.wrapMiddlewareWithSentry(userProvidedNamedHandler) : undefined;
4348
export default userProvidedDefaultHandler ? Sentry.wrapMiddlewareWithSentry(userProvidedDefaultHandler) : undefined;
4449

4550
// Re-export anything exported by the page module we're wrapping. When processing this code, Rollup is smart enough to

packages/nextjs/src/config/webpack.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,11 @@ export function constructWebpackConfigFunction({
183183
);
184184
};
185185

186-
const possibleMiddlewareLocations = pageExtensions.map(middlewareFileEnding => {
187-
return path.join(middlewareLocationFolder, `middleware.${middlewareFileEnding}`);
186+
const possibleMiddlewareLocations = pageExtensions.flatMap(middlewareFileEnding => {
187+
return [
188+
path.join(middlewareLocationFolder, `middleware.${middlewareFileEnding}`),
189+
path.join(middlewareLocationFolder, `proxy.${middlewareFileEnding}`),
190+
];
188191
});
189192
const isMiddlewareResource = (resourcePath: string): boolean => {
190193
const normalizedAbsoluteResourcePath = normalizeLoaderResourcePath(resourcePath);

packages/nextjs/test/config/loaders.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,27 @@ describe('webpack loaders', () => {
129129
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/middleware.tsx',
130130
expectedWrappingTargetKind: undefined,
131131
},
132+
// Next.js 16+ renamed middleware to proxy
133+
{
134+
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/src/proxy.js',
135+
expectedWrappingTargetKind: 'middleware',
136+
},
137+
{
138+
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/src/proxy.ts',
139+
expectedWrappingTargetKind: 'middleware',
140+
},
141+
{
142+
resourcePath: './src/proxy.ts',
143+
expectedWrappingTargetKind: 'middleware',
144+
},
145+
{
146+
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/src/proxy.tsx',
147+
expectedWrappingTargetKind: 'middleware',
148+
},
149+
{
150+
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/proxy.tsx',
151+
expectedWrappingTargetKind: undefined,
152+
},
132153
{
133154
resourcePath: '/Users/Maisey/projects/squirrelChasingSimulator/src/pages/api/testApiRoute.ts',
134155
expectedWrappingTargetKind: 'api-route',

0 commit comments

Comments
 (0)