mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
43 lines
1.3 KiB
TypeScript
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
|
|
})
|
|
}
|