11import fs from "node:fs" ;
22import path from "node:path" ;
33import { fileURLToPath } from "node:url" ;
4+ import matter from "gray-matter" ;
45import { defineConfig } from "vitepress" ;
56import {
67 groupIconMdPlugin ,
@@ -67,6 +68,14 @@ function pageItem(project, relativeFile) {
6768 } ;
6869}
6970
71+ function pageOrder ( project , relativeFile ) {
72+ const filePath = path . join ( docsSrcDir , project , relativeFile ) ;
73+ const content = fs . readFileSync ( filePath , "utf8" ) ;
74+ const order = matter ( content ) . data . order ;
75+
76+ return Number . isFinite ( order ) ? order : Number . POSITIVE_INFINITY ;
77+ }
78+
7079function listMarkdownFiles ( project , relativeDir = "" ) {
7180 const dir = path . join ( docsSrcDir , project , relativeDir ) ;
7281
@@ -75,7 +84,15 @@ function listMarkdownFiles(project, relativeDir = "") {
7584 . filter ( ( entry ) => entry . isFile ( ) )
7685 . map ( ( entry ) => entry . name )
7786 . filter ( ( file ) => file . endsWith ( ".md" ) && file !== "index.md" )
78- . sort ( ) ;
87+ . sort ( ( a , b ) => {
88+ const relA = path . join ( relativeDir , a ) ;
89+ const relB = path . join ( relativeDir , b ) ;
90+ const orderA = pageOrder ( project , relA ) ;
91+ const orderB = pageOrder ( project , relB ) ;
92+
93+ if ( orderA !== orderB ) return orderA - orderB ;
94+ return a . localeCompare ( b ) ;
95+ } ) ;
7996}
8097
8198function listNestedDocDirs ( project ) {
0 commit comments