43 lines
1.3 KiB
TypeScript

import type { App } from 'vuepress'
import { removeLeadingSlash } from '@vuepress/helper'
import { path, tinyglobby } from 'vuepress/utils'
const pagePaths: string[] = []
export function initPagePaths(app: App) {
pagePaths.length = 0
pagePaths.push(...tinyglobby.globSync(app.options.pagePatterns, {
cwd: app.dir.source(),
ignore: ['**/node_modules/**', '**/.vuepress/**'],
}))
sortPagePaths()
}
export function updatePagePaths(filepath: string, type: 'create' | 'delete') {
if (!filepath)
return
if (type === 'create') {
pagePaths.push(filepath)
}
if (type === 'delete' && pagePaths.includes(filepath)) {
pagePaths.splice(pagePaths.indexOf(filepath), 1)
}
sortPagePaths()
}
export function findFirstPage(filename: string, currentPath: string) {
const dirname = path.dirname(currentPath)
let filepath = filename[0] === '.' ? path.join(dirname, filename) : removeLeadingSlash(filename)
filepath = filepath.slice(-1) === '/' ? `${filepath}/README.md` : filepath
filepath = path.extname(filepath) ? filepath : `${filepath}.md`
return pagePaths.find(pagePath => pagePath === filepath || pagePath.endsWith(filepath))
}
function sortPagePaths() {
pagePaths.sort((a, b) => {
const al = a.split('/').length
const bl = b.split('/').length
return al - bl
})
}