Skip to content

Commit b31f858

Browse files
authored
fix: support named & default export for middleware in ntl dev (#2116)
* fix: support named & default export for middleware in ntl dev * chore: linting * chore: add typing * fix: more verbose * chore: formatting
1 parent eb0f213 commit b31f858

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

packages/runtime/src/templates/edge-shared/utils.ts

+2
Original file line numberDiff line numberDiff line change
@@ -305,3 +305,5 @@ export const redirectTrailingSlash = (url: URL, trailingSlash: boolean): Respons
305305
return Response.redirect(url, 308)
306306
}
307307
}
308+
309+
export const isFunction = (f: unknown) => Boolean(f) && typeof f === 'function'

packages/runtime/src/templates/edge/next-dev.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NextRequest } from 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/request.js'
22
import { NextResponse } from 'https://esm.sh/v91/[email protected]/deno/dist/server/web/spec-extension/response.js'
33
import { fromFileUrl } from 'https://deno.land/[email protected]/path/mod.ts'
4-
import { buildResponse } from '../edge-shared/utils.ts'
4+
import { buildResponse, isFunction } from '../edge-shared/utils.ts'
55

66
globalThis.NFRequestContextMap ||= new Map()
77
globalThis.__dirname = fromFileUrl(new URL('./', import.meta.url)).slice(0, -1)
@@ -36,7 +36,17 @@ const handler = async (req, context) => {
3636
// We need to cache-bust the import because otherwise it will claim it
3737
// doesn't exist if the user creates it after the server starts
3838
const nextMiddleware = await import(`../../middleware.js#${++idx}`)
39-
middleware = nextMiddleware.middleware
39+
40+
// The middleware file can export a named `middleware` export or a `default` export
41+
middleware = isFunction(nextMiddleware.middleware)
42+
? nextMiddleware.middleware
43+
: isFunction(nextMiddleware.default)
44+
? nextMiddleware.default
45+
: undefined
46+
47+
if (!middleware) {
48+
throw new Error('The middleware must export a `middleware` or a `default` function')
49+
}
4050
} catch (importError) {
4151
if (importError.code === 'ERR_MODULE_NOT_FOUND' && importError.message.includes(`middleware.js`)) {
4252
// No middleware, so we silently return

0 commit comments

Comments
 (0)