@@ -49,14 +49,14 @@ gtag('config', ${encodedGtagId});`,
4949}
5050
5151const enNav : DefaultTheme . NavItem [ ] = [
52- { text : 'Get Started' , link : '/en/getting-started/quick-start ' } ,
52+ { text : 'Get Started' , link : '/en/getting-started/overview ' } ,
5353 { text : 'Deploy' , link : '/en/getting-started/docker' } ,
5454 { text : 'Operate' , link : '/en/operations/production-checklist' } ,
5555 { text : 'Reference' , link : '/en/reference/s3-compatibility' } ,
5656]
5757
5858const zhNav : DefaultTheme . NavItem [ ] = [
59- { text : '入门' , link : '/zh/getting-started/quick-start ' } ,
59+ { text : '入门' , link : '/zh/getting-started/overview ' } ,
6060 { text : '部署' , link : '/zh/getting-started/docker' } ,
6161 { text : '运维' , link : '/zh/operations/production-checklist' } ,
6262 { text : '参考' , link : '/zh/reference/s3-compatibility' } ,
@@ -66,7 +66,7 @@ const enSidebar: DefaultTheme.Sidebar = [
6666 {
6767 text : 'Getting Started' ,
6868 items : [
69- { text : 'Overview' , link : '/en/' } ,
69+ { text : 'Overview' , link : '/en/getting-started/overview ' } ,
7070 { text : 'Quick Start' , link : '/en/getting-started/quick-start' } ,
7171 { text : 'S3 Clients' , link : '/en/getting-started/s3-clients' } ,
7272 ] ,
@@ -112,7 +112,7 @@ const zhSidebar: DefaultTheme.Sidebar = [
112112 {
113113 text : '入门' ,
114114 items : [
115- { text : '概览' , link : '/zh/' } ,
115+ { text : '概览' , link : '/zh/getting-started/overview ' } ,
116116 { text : '快速开始' , link : '/zh/getting-started/quick-start' } ,
117117 { text : 'S3 客户端' , link : '/zh/getting-started/s3-clients' } ,
118118 ] ,
@@ -154,6 +154,53 @@ const zhSidebar: DefaultTheme.Sidebar = [
154154 } ,
155155]
156156
157+ type MarkdownFenceRenderer = (
158+ tokens : Array < { content : string ; info : string ; map : [ number , number ] | null } > ,
159+ idx : number ,
160+ options : unknown ,
161+ env : { path ?: string ; relativePath ?: string } | undefined ,
162+ self : { renderToken : MarkdownFenceRenderer } ,
163+ ) => string
164+
165+ type MarkdownItLike = {
166+ renderer : {
167+ rules : {
168+ fence ?: MarkdownFenceRenderer
169+ }
170+ }
171+ }
172+
173+ function stableHash ( value : string ) {
174+ let hash = 0
175+
176+ for ( let index = 0 ; index < value . length ; index += 1 ) {
177+ hash = Math . imul ( 31 , hash ) + value . charCodeAt ( index )
178+ }
179+
180+ return ( hash >>> 0 ) . toString ( 36 )
181+ }
182+
183+ function configureMermaidMarkdown ( md : MarkdownItLike ) {
184+ const defaultFence = md . renderer . rules . fence
185+
186+ md . renderer . rules . fence = ( tokens , idx , options , env , self ) => {
187+ const token = tokens [ idx ]
188+ const language = token . info . trim ( ) . split ( / \s + / , 1 ) [ 0 ]
189+
190+ if ( language !== 'mermaid' && language !== 'mmd' ) {
191+ return defaultFence
192+ ? defaultFence ( tokens , idx , options , env , self )
193+ : self . renderToken ( tokens , idx , options , env , self )
194+ }
195+
196+ const source = `${ env ?. path || env ?. relativePath || 'page' } :${ idx } :${ token . map ?. join ( '-' ) || '' } `
197+ const id = `mermaid-${ stableHash ( source ) } `
198+ const code = encodeURIComponent ( token . content )
199+
200+ return `<ClientOnly><MermaidBlock id="${ id } " code="${ code } " /></ClientOnly>`
201+ }
202+ }
203+
157204export default defineConfig ( {
158205 title : 'SynapS3' ,
159206 titleTemplate : ':title | SynapS3' ,
@@ -166,6 +213,9 @@ export default defineConfig({
166213 hostname : siteBaseUrl ,
167214 } ,
168215 head,
216+ markdown : {
217+ config : configureMermaidMarkdown ,
218+ } ,
169219 transformPageData ( pageData ) {
170220 if ( pageData . relativePath !== 'index.md' ) {
171221 return
0 commit comments