mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import type { Matcher } from 'picomatch'
|
|
import { toArray, uniq } from '@pengzhanbo/utils'
|
|
import picomatch from 'picomatch'
|
|
|
|
/**
|
|
* Resolve include and exclude patterns into pattern and ignore arrays.
|
|
* Converts various pattern formats into a standardized format for matching.
|
|
*
|
|
* 将 include 和 exclude 模式解析为 pattern 和 ignore 数组。
|
|
* 将各种模式格式转换为用于匹配的标准化格式。
|
|
*
|
|
* @param include - Patterns to include, can be string or array / 要包含的模式,可以是字符串或数组
|
|
* @param exclude - Patterns to exclude, can be string or array / 要排除的模式,可以是字符串或数组
|
|
* @returns Object containing pattern and ignore arrays / 包含 pattern 和 ignore 数组的对象
|
|
*/
|
|
export function resolveMatcherPattern(include?: string | string[], exclude?: string | string[]): {
|
|
pattern: string[]
|
|
ignore: string[]
|
|
} {
|
|
const pattern: string[] = []
|
|
const ignore: string[] = uniq(toArray(exclude))
|
|
|
|
if (!include || include.length === 0) {
|
|
pattern.push('**/*.md')
|
|
}
|
|
else {
|
|
toArray(include).forEach((item) => {
|
|
if (item.startsWith('!')) {
|
|
ignore.push(item.slice(1))
|
|
}
|
|
else {
|
|
pattern.push(item)
|
|
}
|
|
})
|
|
}
|
|
|
|
return { pattern, ignore }
|
|
}
|
|
|
|
/**
|
|
* Create a file matcher function using picomatch.
|
|
* Returns a function that tests if a file path matches the given patterns.
|
|
*
|
|
* 使用 picomatch 创建文件匹配器函数。
|
|
* 返回一个测试文件路径是否匹配给定模式的函数。
|
|
*
|
|
* @param include - Patterns to include / 要包含的模式
|
|
* @param exclude - Patterns to exclude / 要排除的模式
|
|
* @returns Matcher function that tests file paths / 测试文件路径的匹配器函数
|
|
*/
|
|
export function createMatcher(include?: string | string[], exclude?: string | string[]): Matcher {
|
|
exclude = ['**/node_modules/**', '**/.vuepress/**', ...toArray(exclude)]
|
|
const { pattern, ignore } = resolveMatcherPattern(include, exclude)
|
|
|
|
return picomatch(pattern, { ignore })
|
|
}
|