mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-14 18:13:54 +00:00
fix(nuxt): fix nested page types in typedPages
(#29352)
This commit is contained in:
parent
f22e3ea802
commit
fbfb4e3568
@ -170,10 +170,15 @@ export default defineNuxtModule({
|
||||
if (nuxt.apps.default) {
|
||||
nuxt.apps.default.pages = pages
|
||||
}
|
||||
const addedPagePaths = new Set<string>()
|
||||
function addPage (parent: EditableTreeNode, page: NuxtPage) {
|
||||
// Avoid duplicate keys in the generated RouteNamedMap type
|
||||
const absolutePagePath = joinURL(parent.path, page.path)
|
||||
|
||||
// @ts-expect-error TODO: either fix types upstream or figure out another
|
||||
// way to add a route without a file, which must be possible
|
||||
const route = parent.insert(page.path, page.file)
|
||||
const route = addedPagePaths.has(absolutePagePath) ? parent : parent.insert(page.path, page.file)
|
||||
addedPagePaths.add(absolutePagePath)
|
||||
if (page.meta) {
|
||||
route.addToMeta(page.meta)
|
||||
}
|
||||
|
12
test/fixtures/basic-types/pages/param/index.vue
vendored
Normal file
12
test/fixtures/basic-types/pages/param/index.vue
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
definePageMeta({
|
||||
name: 'param2',
|
||||
alias: ['/param-other'],
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<!-- -->
|
||||
</div>
|
||||
</template>
|
4
test/fixtures/basic-types/types.ts
vendored
4
test/fixtures/basic-types/types.ts
vendored
@ -162,6 +162,10 @@ describe('typed router integration', () => {
|
||||
// @ts-expect-error this is an invalid param
|
||||
router.push({ name: 'param-id', params: { bob: 23 } })
|
||||
router.push({ name: 'param-id', params: { id: 4 } })
|
||||
// @ts-expect-error this is an invalid route
|
||||
router.push({ name: 'param' })
|
||||
// @ts-expect-error this is an invalid route
|
||||
router.push({ name: '/param' })
|
||||
})
|
||||
|
||||
it('correctly reads custom names typed in `definePageMeta`', () => {
|
||||
|
Loading…
Reference in New Issue
Block a user