From 232fdd8cf3bbd4f68fac70349927d85b5f46eb89 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Tue, 16 Nov 2021 17:13:19 +0100 Subject: [PATCH] fix(kit): support chainable `extendRoutes` in container (#1966) --- packages/kit/src/module/container.ts | 14 +++++++++++--- packages/kit/src/module/utils.ts | 6 +++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/module/container.ts b/packages/kit/src/module/container.ts index 6c444318ab..76e41d3895 100644 --- a/packages/kit/src/module/container.ts +++ b/packages/kit/src/module/container.ts @@ -2,8 +2,7 @@ import { parse, relative } from 'pathe' import consola from 'consola' import type { Nuxt, NuxtPluginTemplate, NuxtTemplate } from '../types/nuxt' import { chainFn } from '../utils/task' -import { resolveAlias } from '../utils/resolve' -import { addTemplate, addPluginTemplate, addServerMiddleware, extendPages } from './utils' +import { isNuxt2, addTemplate, addPluginTemplate, addServerMiddleware } from './utils' import { installModule } from './install' /** Legacy ModuleContainer for backwards compatibility with existing Nuxt 2 modules. */ @@ -104,7 +103,16 @@ export function createModuleContainer (nuxt: Nuxt) { /** Allows extending routes by chaining `options.build.extendRoutes` function. */ extendRoutes (fn) { - extendPages(routes => fn(routes, resolveAlias)) + if (isNuxt2(nuxt)) { + nuxt.options.router.extendRoutes = chainFn(nuxt.options.router.extendRoutes, fn) + } else { + nuxt.hook('pages:extend', async (pages, ...args) => { + const maybeRoutes = await fn(pages, ...args) + if (maybeRoutes) { + console.warn('[kit] [compat] Using `extendRoutes` in Nuxt 3 needs to directly modify first argument instead of returning updated routes. Skipping extended routes.') + } + }) + } }, /** `requireModule` is a shortcut for `addModule` */ diff --git a/packages/kit/src/module/utils.ts b/packages/kit/src/module/utils.ts index 1388ab6c22..7eb04f8f19 100644 --- a/packages/kit/src/module/utils.ts +++ b/packages/kit/src/module/utils.ts @@ -354,7 +354,11 @@ export function addComponent (opts: AddComponentOptions) { export function extendPages (cb: NuxtHooks['pages:extend']) { const nuxt = useNuxt() - nuxt.hook('pages:extend', cb) + if (isNuxt2(nuxt)) { + nuxt.hook('build:extendRoutes', cb) + } else { + nuxt.hook('pages:extend', cb) + } } const serialize = (data: any) => JSON.stringify(data, null, 2).replace(/"{(.+)}"/g, '$1')