From fadac14305b6a3dc0d45360b710b3afcca3a926c Mon Sep 17 00:00:00 2001 From: LekoArts Date: Tue, 16 May 2023 10:45:04 +0200 Subject: [PATCH 1/5] fix: support named & default export for middleware in ntl dev --- packages/runtime/src/templates/edge-shared/utils.ts | 2 ++ packages/runtime/src/templates/edge/next-dev.js | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index 35dbd3bb5a..e0cd627408 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -305,3 +305,5 @@ export const redirectTrailingSlash = (url: URL, trailingSlash: boolean): Respons return Response.redirect(url, 308) } } + +export const isFunction = f => Boolean(f) && typeof f === 'function' diff --git a/packages/runtime/src/templates/edge/next-dev.js b/packages/runtime/src/templates/edge/next-dev.js index 5f095c6a07..b3fdc1ce99 100644 --- a/packages/runtime/src/templates/edge/next-dev.js +++ b/packages/runtime/src/templates/edge/next-dev.js @@ -1,7 +1,7 @@ import { NextRequest } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js' import { NextResponse } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js' import { fromFileUrl } from 'https://deno.land/std@0.151.0/path/mod.ts' -import { buildResponse } from '../edge-shared/utils.ts' +import { buildResponse, isFunction } from '../edge-shared/utils.ts' globalThis.NFRequestContextMap ||= new Map() globalThis.__dirname = fromFileUrl(new URL('./', import.meta.url)).slice(0, -1) @@ -36,7 +36,9 @@ const handler = async (req, context) => { // We need to cache-bust the import because otherwise it will claim it // doesn't exist if the user creates it after the server starts const nextMiddleware = await import(`../../middleware.js#${++idx}`) - middleware = nextMiddleware.middleware + + // The middleware file can export a named `middleware` export or a `default` export + middleware = isFunction(nextMiddleware.middleware) ? nextMiddleware.middleware : nextMiddleware.default } catch (importError) { if (importError.code === 'ERR_MODULE_NOT_FOUND' && importError.message.includes(`middleware.js`)) { // No middleware, so we silently return From 086a8d6b45a7a36c6858e5bced2e8d027e7fa0bf Mon Sep 17 00:00:00 2001 From: LekoArts Date: Tue, 16 May 2023 10:45:34 +0200 Subject: [PATCH 2/5] chore: linting --- packages/runtime/src/templates/edge-shared/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index e0cd627408..aa411d7765 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -306,4 +306,4 @@ export const redirectTrailingSlash = (url: URL, trailingSlash: boolean): Respons } } -export const isFunction = f => Boolean(f) && typeof f === 'function' +export const isFunction = (f) => Boolean(f) && typeof f === 'function' From 7d538789b466e2e5809d306a75896e8693fd54d4 Mon Sep 17 00:00:00 2001 From: LekoArts Date: Tue, 16 May 2023 10:50:20 +0200 Subject: [PATCH 3/5] chore: add typing --- packages/runtime/src/templates/edge-shared/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index aa411d7765..e41f1f98e5 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -306,4 +306,4 @@ export const redirectTrailingSlash = (url: URL, trailingSlash: boolean): Respons } } -export const isFunction = (f) => Boolean(f) && typeof f === 'function' +export const isFunction = (f: unknown) => Boolean(f) && typeof f === 'function' From 71eb68219a9204f43da18040575716eebfd5d228 Mon Sep 17 00:00:00 2001 From: LekoArts Date: Wed, 17 May 2023 07:46:58 +0200 Subject: [PATCH 4/5] fix: more verbose --- packages/runtime/src/templates/edge/next-dev.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge/next-dev.js b/packages/runtime/src/templates/edge/next-dev.js index b3fdc1ce99..30ef92f4ac 100644 --- a/packages/runtime/src/templates/edge/next-dev.js +++ b/packages/runtime/src/templates/edge/next-dev.js @@ -38,7 +38,11 @@ const handler = async (req, context) => { const nextMiddleware = await import(`../../middleware.js#${++idx}`) // The middleware file can export a named `middleware` export or a `default` export - middleware = isFunction(nextMiddleware.middleware) ? nextMiddleware.middleware : nextMiddleware.default + middleware = isFunction(nextMiddleware.middleware) ? nextMiddleware.middleware : isFunction(nextMiddleware.default) ? nextMiddleware.default : undefined + + if (!middleware) { + throw new Error('The middleware must export a `middleware` or a `default` function') + } } catch (importError) { if (importError.code === 'ERR_MODULE_NOT_FOUND' && importError.message.includes(`middleware.js`)) { // No middleware, so we silently return From 60ef41f768c813bc0e3055c5918594ce5dca79e8 Mon Sep 17 00:00:00 2001 From: LekoArts Date: Wed, 17 May 2023 07:47:16 +0200 Subject: [PATCH 5/5] chore: formatting --- packages/runtime/src/templates/edge/next-dev.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge/next-dev.js b/packages/runtime/src/templates/edge/next-dev.js index 30ef92f4ac..5980b6a919 100644 --- a/packages/runtime/src/templates/edge/next-dev.js +++ b/packages/runtime/src/templates/edge/next-dev.js @@ -38,7 +38,11 @@ const handler = async (req, context) => { const nextMiddleware = await import(`../../middleware.js#${++idx}`) // The middleware file can export a named `middleware` export or a `default` export - middleware = isFunction(nextMiddleware.middleware) ? nextMiddleware.middleware : isFunction(nextMiddleware.default) ? nextMiddleware.default : undefined + middleware = isFunction(nextMiddleware.middleware) + ? nextMiddleware.middleware + : isFunction(nextMiddleware.default) + ? nextMiddleware.default + : undefined if (!middleware) { throw new Error('The middleware must export a `middleware` or a `default` function')