Skip to content
This repository has been archived by the owner on Apr 6, 2023. It is now read-only.

feat(nuxt): custom history and routes for app/router.options.ts #7129

Merged
merged 11 commits into from
Sep 4, 2022
11 changes: 6 additions & 5 deletions packages/nuxt/src/pages/runtime/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { withoutBase, isEqual } from 'ufo'
import NuxtPage from './page'
import { callWithNuxt, defineNuxtPlugin, useRuntimeConfig, showError, clearError, navigateTo, useError, useState } from '#app'
// @ts-ignore
import routes from '#build/routes'
import _routes from '#build/routes'
// @ts-ignore
import routerOptions from '#build/router.options'
// @ts-ignore
Expand Down Expand Up @@ -55,15 +55,16 @@ export default defineNuxtPlugin(async (nuxtApp) => {
nuxtApp.vueApp.component('NuxtChild', NuxtPage)

const baseURL = useRuntimeConfig().app.baseURL
const routerHistory = process.client
? createWebHistory(baseURL)
: createMemoryHistory(baseURL)
const routerHistory = routerOptions.history?.(baseURL) ??
(process.client ? createWebHistory(baseURL) : createMemoryHistory(baseURL))

const routes = !routerOptions.routes ? _routes : Array.isArray(routerOptions.routes) ? routerOptions.routes : routerOptions.routes(_routes)
danielroe marked this conversation as resolved.
Show resolved Hide resolved

const initialURL = process.server ? nuxtApp.ssrContext!.url : createCurrentLocation(baseURL, window.location)
const router = createRouter({
...routerOptions,
history: routerHistory,
routes
routes: routerOptions.routes || routes
pi0 marked this conversation as resolved.
Show resolved Hide resolved
})
nuxtApp.vueApp.use(router)

Expand Down
7 changes: 5 additions & 2 deletions packages/schema/src/types/router.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import type { RouterOptions as _RouterOptions } from 'vue-router'
import type { RouterOptions as _RouterOptions, RouterHistory } from 'vue-router'


export type RouterConfig = Partial<Omit<_RouterOptions, 'history' | 'routes'>>
export type RouterConfig = Partial<Omit<_RouterOptions, 'history' | 'routes'>> & {
history?: (baseURL?: string) => RouterHistory
routes?: _RouterOptions['routes'] | ((scannedRoutes: _RouterOptions['routes']) => _RouterOptions['routes'])
}

/** @deprecated Use RouterConfig instead */
export type RouterOptions = RouterConfig
Expand Down
4 changes: 2 additions & 2 deletions test/fixtures/basic/extends/bar/app/router.options.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { RouterOptions } from '@nuxt/schema'
import type { RouterConfig } from '@nuxt/schema'

export default <RouterOptions>{
export default <RouterConfig>{
linkExactActiveClass: 'bar-exact-active-class'
}