pengzhanbo 4d2361a704
feat(theme)!: add collections support (#704)
* feat(theme)!: add collection support
2025-10-07 23:13:09 +08:00

52 lines
1.4 KiB
TypeScript

import type { App } from 'vuepress'
import fs, { constants, promises as fsp } from 'node:fs'
import { resolve } from 'node:path'
import process from 'node:process'
import { colors } from 'vuepress/utils'
import { logger } from '../utils/index.js'
const CONFIG_FILE_NAME = 'plume.config'
const extensions: string[] = ['ts', 'js', 'mjs', 'cjs', 'mts', 'cts']
export async function findConfigPath(app: App, configPath?: string): Promise<string | undefined> {
const cwd = process.cwd()
if (configPath) {
const path = resolve(cwd, configPath)
if (existsSync(path) && (await fsp.stat(path)).isFile()) {
return path
}
}
const source = app.dir.source('.vuepress')
const paths: string[] = []
extensions.forEach(ext =>
paths.push(
resolve(cwd, `${source}/${CONFIG_FILE_NAME}.${ext}`),
resolve(cwd, `./${CONFIG_FILE_NAME}.${ext}`),
resolve(cwd, `./.vuepress/${CONFIG_FILE_NAME}.${ext}`),
),
)
let current: string | undefined
for (const path of paths) {
if (existsSync(path) && (await fsp.stat(path)).isFile()) {
current = path
break
}
}
if (configPath && current) {
logger.warn(`Can not find config file: ${colors.gray(configPath)}\nUse config file: ${colors.gray(current)}`)
}
return current
}
function existsSync(fp: string) {
try {
fs.accessSync(fp, constants.R_OK)
return true
}
catch {
return false
}
}