From 458acbb8e1e09756d71e4b9c7ba0da3237a8c3f0 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 12 Oct 2023 23:21:02 +0100 Subject: [PATCH] fix(nuxt): give priority to later middleware when deduping (#23552) --- packages/nuxt/src/core/app.ts | 2 +- packages/nuxt/test/app.test.ts | 6 +++--- test/basic.test.ts | 3 +-- test/fixtures/basic/extends/bar/middleware/override.ts | 2 +- .../basic/extends/node_modules/foo/middleware/override.ts | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/nuxt/src/core/app.ts b/packages/nuxt/src/core/app.ts index 1ae3d3b8e0..655c73fa35 100644 --- a/packages/nuxt/src/core/app.ts +++ b/packages/nuxt/src/core/app.ts @@ -152,7 +152,7 @@ export async function resolveApp (nuxt: Nuxt, app: NuxtApp) { } // Normalize and de-duplicate plugins and middleware - app.middleware = uniqueBy(await resolvePaths(app.middleware, 'path'), 'name') + app.middleware = uniqueBy(await resolvePaths([...app.middleware].reverse(), 'path'), 'name').reverse() app.plugins = uniqueBy(await resolvePaths(app.plugins, 'src'), 'src') // Resolve app.config diff --git a/packages/nuxt/test/app.test.ts b/packages/nuxt/test/app.test.ts index e8f3e65644..c72091a80e 100644 --- a/packages/nuxt/test/app.test.ts +++ b/packages/nuxt/test/app.test.ts @@ -141,9 +141,9 @@ describe('resolveApp', () => { // TODO: fix this expect(fixtureMiddleware).toMatchInlineSnapshot(` [ - "/layer1/middleware/global.global.ts", - "/layer1/middleware/named-from-layer.ts", - "/layer1/middleware/named-override.ts", + "/layer2/middleware/global.global.ts", + "/layer2/middleware/named-from-layer.ts", + "/middleware/named-override.ts", "/middleware/named.ts", ] `) diff --git a/test/basic.test.ts b/test/basic.test.ts index ab217f06be..04f54eef72 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -1019,8 +1019,7 @@ describe('extends support', () => { expect(html).toContain('Middleware | foo: Injected by extended middleware from foo') }) - // theme is added after layers - it('extends foo/middleware/override over bar/middleware/override', async () => { + it('extends bar/middleware/override over foo/middleware/override', async () => { const html = await $fetch('/override') expect(html).toContain('Middleware | override: Injected by extended middleware from bar') }) diff --git a/test/fixtures/basic/extends/bar/middleware/override.ts b/test/fixtures/basic/extends/bar/middleware/override.ts index eca4b646c3..00edf78124 100644 --- a/test/fixtures/basic/extends/bar/middleware/override.ts +++ b/test/fixtures/basic/extends/bar/middleware/override.ts @@ -1,3 +1,3 @@ export default defineNuxtRouteMiddleware((to) => { - to.meta.override = 'This middleware should be overridden by bar' + to.meta.override = 'Injected by extended middleware from bar' }) diff --git a/test/fixtures/basic/extends/node_modules/foo/middleware/override.ts b/test/fixtures/basic/extends/node_modules/foo/middleware/override.ts index 00edf78124..fbbfd73091 100644 --- a/test/fixtures/basic/extends/node_modules/foo/middleware/override.ts +++ b/test/fixtures/basic/extends/node_modules/foo/middleware/override.ts @@ -1,3 +1,3 @@ export default defineNuxtRouteMiddleware((to) => { - to.meta.override = 'Injected by extended middleware from bar' + to.meta.override = 'This middleware should be overriden by bar' })