diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index 06b8fa5de5..8732d83308 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -1,6 +1,6 @@ import { existsSync, readdirSync } from 'node:fs' import { mkdir, readFile } from 'node:fs/promises' -import { addBuildPlugin, addComponent, addPlugin, addTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, findPath, logger, updateTemplates } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule, findPath, logger, updateTemplates, useNitro } from '@nuxt/kit' import { dirname, join, relative, resolve } from 'pathe' import { genImport, genObjectFromRawEntries, genString } from 'knitwork' import { joinURL } from 'ufo' @@ -337,6 +337,22 @@ export default defineNuxtModule({ }) } + if (nuxt.options.experimental.appManifest) { + // Add all redirect paths as valid routes to router; we will handle these in a client-side middleware + // when the app manifest is enabled. + nuxt.hook('pages:extend', routes => { + const nitro = useNitro() + for (const path in nitro.options.routeRules) { + const rule = nitro.options.routeRules[path] + if (!rule.redirect) { continue } + routes.push({ + path: path.replace(/\/[^/]*\*\*/, '/:pathMatch(.*)'), + file: resolve(runtimeDir, 'component-stub'), + }) + } + }) + } + // Extract macros from pages const pageMetaOptions: PageMetaPluginOptions = { dev: nuxt.options.dev, diff --git a/packages/nuxt/src/pages/runtime/component-stub.ts b/packages/nuxt/src/pages/runtime/component-stub.ts new file mode 100644 index 0000000000..b1c6ea436a --- /dev/null +++ b/packages/nuxt/src/pages/runtime/component-stub.ts @@ -0,0 +1 @@ +export default {}