docs(website): derive navigation targets from the publication manifest

The navigation bar named `/guide/` while the manifest published the guide's
first page at `guide/quickstart.md`, so the item served a 404 in both locales.

`landingLink` resolves each item against `orderedPages`, the ordering the
sidebar already renders, and a test asserts every navigation target is a route
the manifest publishes.
This commit is contained in:
Yichen Jiang
2026-08-12 14:02:29 +08:00
parent 0a2ac90617
commit d6af042cf7
6 changed files with 90 additions and 28 deletions

View File

@@ -5,7 +5,7 @@ import { existsSync, globSync, mkdirSync, mkdtempSync, readFileSync, realpathSyn
import { tmpdir } from 'node:os'
import { basename, join, resolve } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { docsPages, sectionSpec, type DocsPage } from '../website/docs.ts'
import { docsPages, landingLink, routeLink, sectionSpec, type DocsPage } from '../website/docs.ts'
import {
addProjectionFrontmatter, projectedPageContent, publishableImage, rewriteMarkdown,
} from './project-doc-site.ts'
@@ -386,6 +386,19 @@ describe('sidebar ordering', () => {
expect(() => sectionSpec('root', 'Guide')).toThrow()
})
it('lands every navigation item on a page the manifest publishes', () => {
// The navigation bar named `/guide/` while the manifest published the guide's
// first page at `guide/quickstart.md`, so the item served a 404.
const collections = [
['root', 'zh-guide'], ['root', 'zh-develop'], ['root', 'zh-reference'],
['en', 'en-guide'], ['en', 'en-develop'], ['en', 'en-reference'],
] as const
const published = new Set(docsPages.map(page => routeLink(page.route)))
for (const [locale, collection] of collections) {
expect(published, `${locale}/${collection}`).toContain(landingLink(locale, collection))
}
})
it('collapses the subsystem groups and leaves the smaller ones open', () => {
expect(sectionSpec('root', '执行与工具').collapsed).toBe(true)
expect(sectionSpec('en', 'Execution and tools').collapsed).toBe(true)