From c4cad445ead052349697422348c3fd7eb40cc853 Mon Sep 17 00:00:00 2001 From: Son Tran Date: Tue, 13 Aug 2024 01:41:01 +0700 Subject: [PATCH] feat(kit): add `prepend` option to `addRouteMiddleware` (#28496) --- docs/3.api/5.kit/7.pages.md | 19 +++++++++++++++++-- packages/kit/src/pages.ts | 7 +++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/3.api/5.kit/7.pages.md b/docs/3.api/5.kit/7.pages.md index 9e6ffab3bc..7e7dd6e8d3 100644 --- a/docs/3.api/5.kit/7.pages.md +++ b/docs/3.api/5.kit/7.pages.md @@ -209,6 +209,7 @@ type NuxtMiddleware = { interface AddRouteMiddlewareOptions { override?: boolean + prepend?: boolean } ``` @@ -246,7 +247,21 @@ A middleware object or an array of middleware objects with the following propert **Default**: `{}` -Options to pass to the middleware. If `override` is set to `true`, it will override the existing middleware with the same name. +- `override` (optional) + + **Type**: `boolean` + + **Default**: `false` + + If enabled, overrides the existing middleware with the same name. + +- `prepend` (optional) + + **Type**: `boolean` + + **Default**: `false` + + If enabled, prepends the middleware to the list of existing middleware. ### Examples @@ -272,7 +287,7 @@ export default defineNuxtModule({ name: 'auth', path: resolver.resolve('runtime/auth.ts'), global: true - }) + }, { prepend: true }) } }) ``` diff --git a/packages/kit/src/pages.ts b/packages/kit/src/pages.ts index b2fda348e3..35c73fae83 100644 --- a/packages/kit/src/pages.ts +++ b/packages/kit/src/pages.ts @@ -35,6 +35,11 @@ export interface AddRouteMiddlewareOptions { * @default false */ override?: boolean + /** + * Prepend middleware to the list + * @default false + */ + prepend?: boolean } export function addRouteMiddleware (input: NuxtMiddleware | NuxtMiddleware[], options: AddRouteMiddlewareOptions = {}) { @@ -51,6 +56,8 @@ export function addRouteMiddleware (input: NuxtMiddleware | NuxtMiddleware[], op } else { logger.warn(`'${middleware.name}' middleware already exists at '${foundPath}'. You can set \`override: true\` to replace it.`) } + } else if (options.prepend === true) { + app.middleware.unshift({ ...middleware }) } else { app.middleware.push({ ...middleware }) }