@@ -56,16 +56,28 @@ export async function generateMetadata(props: {
5656 } ;
5757}
5858
59+ type InferSource = typeof source ;
60+ type InferPage = NonNullable < ReturnType < typeof source . getPage > > ;
61+
5962function createRelativeLinkWithFilenameOnly (
60- source : LoaderOutput < LoaderConfig > ,
61- page : Page ,
63+ sourceInst : InferSource ,
64+ page : InferPage ,
6265) : FC < ComponentProps < 'a' > > {
63- return async function RelativeLink ( { href , ... props } ) {
64- const relativeLink = createRelativeLink ( source , page )
65- // support filename-only links
66- if ( href && ( ! href . startsWith ( 'http' ) && href . endsWith ( '.md' ) ) ) {
67- return relativeLink ( { href : `./ ${ href } ` , ...props } ) ;
66+ const RelativeLinkBase = createRelativeLink ( sourceInst , page ) ;
67+
68+ return function RelativeLink ( { href , ... props } ) {
69+ if ( ! href || href . startsWith ( 'http' ) ) {
70+ return < RelativeLinkBase { ...props } href = { href } /> ;
6871 }
69- return relativeLink ( { href, ...props } ) ;
72+
73+ let finalHref = href ;
74+
75+ const [ path , hash ] = href . split ( '#' ) ;
76+
77+ if ( path . endsWith ( '.md' ) ) {
78+ finalHref = `./${ path } ${ hash ? `#${ hash . toLowerCase ( ) } ` : '' } ` ;
79+ }
80+
81+ return < RelativeLinkBase { ...props } href = { finalHref } /> ;
7082 } ;
7183}
0 commit comments