From 93d028b06729647cb7c4b6b208fdc506e9f11d8d Mon Sep 17 00:00:00 2001 From: Dimitri POSTOLOV Date: Tue, 6 Sep 2022 13:40:27 +0300 Subject: [PATCH] use `title` package in nextra to determine sidebar title based on pagename (#814) * use `title` package in nextra to determine sidebar title based on pagename * update snapshots * fix types check --- .changeset/nice-shrimps-cheat.md | 5 +++++ .../nextra-theme-docs/src/utils/normalize-pages.ts | 2 +- .../__test__/__snapshots__/context.test.ts.snap | 10 +++++----- .../__test__/__snapshots__/page-map.test.ts.snap | 6 +++--- packages/nextra/package.json | 3 ++- packages/nextra/src/env.d.ts | 9 +++++++++ packages/nextra/src/plugin.ts | 6 +++++- pnpm-lock.yaml | 12 ++++++++++++ 8 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 .changeset/nice-shrimps-cheat.md diff --git a/.changeset/nice-shrimps-cheat.md b/.changeset/nice-shrimps-cheat.md new file mode 100644 index 0000000000..8ee9475e57 --- /dev/null +++ b/.changeset/nice-shrimps-cheat.md @@ -0,0 +1,5 @@ +--- +'nextra': patch +--- + +use `title` package in nextra to determine sidebar title based on pagename diff --git a/packages/nextra-theme-docs/src/utils/normalize-pages.ts b/packages/nextra-theme-docs/src/utils/normalize-pages.ts index 51cc5c85cd..18883f9af9 100644 --- a/packages/nextra-theme-docs/src/utils/normalize-pages.ts +++ b/packages/nextra-theme-docs/src/utils/normalize-pages.ts @@ -1,7 +1,7 @@ import { PageMapItem } from 'nextra' import { DEFAULT_PAGE_THEME } from '../constants' import { PageTheme } from '../types' -import { Folder, MdxFile } from 'nextra/src/types' +import { Folder, MdxFile } from 'nextra' function extendMeta( meta: string | Record = {}, diff --git a/packages/nextra/__test__/__snapshots__/context.test.ts.snap b/packages/nextra/__test__/__snapshots__/context.test.ts.snap index 40e9f2a9aa..0ea1d54181 100644 --- a/packages/nextra/__test__/__snapshots__/context.test.ts.snap +++ b/packages/nextra/__test__/__snapshots__/context.test.ts.snap @@ -1035,7 +1035,7 @@ exports[`context > getAllPages() > should work 1`] = ` "kind": "MdxPage", "locale": "en-US", "meta": { - "title": "loooooooooooooooooooong-title", + "title": "Loooooooooooooooooooong Title", }, "name": "loooooooooooooooooooong-title", "route": "/docs/advanced/more/loooooooooooooooooooong-title", @@ -1279,7 +1279,7 @@ exports[`context > getAllPages() > should work 1`] = ` "kind": "MdxPage", "locale": "en-US", "meta": { - "title": "code-block-without-language", + "title": "Code Block without Language", }, "name": "code-block-without-language", "route": "/docs/code-block-without-language", @@ -2749,7 +2749,7 @@ exports[`context > getCurrentLevelPages() > should work 1`] = ` "kind": "MdxPage", "locale": "en-US", "meta": { - "title": "loooooooooooooooooooong-title", + "title": "Loooooooooooooooooooong Title", }, "name": "loooooooooooooooooooong-title", "route": "/docs/advanced/more/loooooooooooooooooooong-title", @@ -2993,7 +2993,7 @@ exports[`context > getCurrentLevelPages() > should work 1`] = ` "kind": "MdxPage", "locale": "en-US", "meta": { - "title": "code-block-without-language", + "title": "Code Block without Language", }, "name": "code-block-without-language", "route": "/docs/code-block-without-language", @@ -3162,7 +3162,7 @@ exports[`context > getPagesUnderRoute() > should work 1`] = ` "kind": "MdxPage", "locale": "en-US", "meta": { - "title": "loooooooooooooooooooong-title", + "title": "Loooooooooooooooooooong Title", }, "name": "loooooooooooooooooooong-title", "route": "/docs/advanced/more/loooooooooooooooooooong-title", diff --git a/packages/nextra/__test__/__snapshots__/page-map.test.ts.snap b/packages/nextra/__test__/__snapshots__/page-map.test.ts.snap index 692e8ccb2f..c6f9f23fc9 100644 --- a/packages/nextra/__test__/__snapshots__/page-map.test.ts.snap +++ b/packages/nextra/__test__/__snapshots__/page-map.test.ts.snap @@ -196,7 +196,7 @@ exports[`Page Process > pageMap en-US 1`] = ` }, "title": "Change Log", }, - "code-block-without-language": "code-block-without-language", + "code-block-without-language": "Code Block without Language", "conditional-fetching": "Conditional Data Fetching", "data-fetching": "Data Fetching", "error-handling": { @@ -289,7 +289,7 @@ exports[`Page Process > pageMap en-US 1`] = ` }, { "data": { - "loooooooooooooooooooong-title": "loooooooooooooooooooong-title", + "loooooooooooooooooooong-title": "Loooooooooooooooooooong Title", }, "kind": "Meta", "locale": "en-US", @@ -695,7 +695,7 @@ exports[`Page Process > pageMap zh-CN 1`] = ` }, { "data": { - "loooooooooooooooooooong-title": "loooooooooooooooooooong-title", + "loooooooooooooooooooong-title": "Loooooooooooooooooooong Title", }, "kind": "Meta", "locale": "en-US", diff --git a/packages/nextra/package.json b/packages/nextra/package.json index 2c61024659..52ecef668a 100644 --- a/packages/nextra/package.json +++ b/packages/nextra/package.json @@ -86,7 +86,8 @@ "remark-gfm": "^3.0.1", "remark-reading-time": "^2.0.1", "shiki": "0.10.1", - "slash": "^3.0.0" + "slash": "^3.0.0", + "title": "^3.5.3" }, "peerDependencies": { "next": ">=9.5.3", diff --git a/packages/nextra/src/env.d.ts b/packages/nextra/src/env.d.ts index 80e47252fb..e372b58242 100644 --- a/packages/nextra/src/env.d.ts +++ b/packages/nextra/src/env.d.ts @@ -5,3 +5,12 @@ declare module globalThis { route: string } } + +declare module 'title' { + export default function title( + title: string, + special?: { + special: string[] + } + ) +} diff --git a/packages/nextra/src/plugin.ts b/packages/nextra/src/plugin.ts index 7048253216..7b7b14bf8f 100644 --- a/packages/nextra/src/plugin.ts +++ b/packages/nextra/src/plugin.ts @@ -16,6 +16,7 @@ import slash from 'slash' import grayMatter from 'gray-matter' import { findPagesDir } from 'next/dist/lib/find-pages-dir.js' import { Compiler } from 'webpack' +import title from 'title' import { restoreCache } from './content-dump' import { CWD, MARKDOWN_EXTENSION_REGEX, META_FILENAME } from './constants' @@ -103,7 +104,10 @@ export async function collectFiles( ) const defaultMeta: [string, string][] = mdxPages .filter(item => item.locale === locale) - .map(item => [item.name, item.frontMatter?.title || item.name]) + .map(item => [ + item.name, + item.frontMatter?.title || title(item.name.replace(/[-_]/g, ' ')) + ]) const metaFilename = locale ? META_FILENAME.replace('.', `.${locale}.`) : META_FILENAME diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb8513d4ca..9c1e5fb924 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -145,6 +145,7 @@ importers: remark-reading-time: ^2.0.1 shiki: 0.10.1 slash: ^3.0.0 + title: ^3.5.3 vitest: ^0.21.0 dependencies: '@mdx-js/mdx': 2.1.3 @@ -158,6 +159,7 @@ importers: remark-reading-time: 2.0.1 shiki: 0.10.1 slash: 3.0.0 + title: 3.5.3 devDependencies: '@types/github-slugger': 1.3.0 '@types/graceful-fs': 4.1.5 @@ -5782,6 +5784,16 @@ packages: titleize: 1.0.0 dev: false + /title/3.5.3: + resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} + hasBin: true + dependencies: + arg: 1.0.0 + chalk: 2.3.0 + clipboardy: 1.2.2 + titleize: 1.0.0 + dev: false + /titleize/1.0.0: resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} engines: {node: '>=0.10.0'}