243 lines
4.7 KiB
TypeScript
243 lines
4.7 KiB
TypeScript
import type { SocialLink } from '../common/social.js'
|
|
import type { AutoFrontmatterOptions } from './autoFrontmatter.js'
|
|
import type { PostsCategoryItem, PostsCoverLayout, PostsCoverStyle } from './posts.js'
|
|
import type { ProfileOptions } from './profile.js'
|
|
import type { ThemeSidebarItem } from './sidebar.js'
|
|
|
|
/**
|
|
* 文档集合
|
|
*
|
|
* 主题通过 集合的方式,聚合某个目录下的文章,作为一个独立的文档。
|
|
*
|
|
* @since 1.0.0-rc.165
|
|
*/
|
|
export type ThemeCollections = ThemeCollectionItem[]
|
|
|
|
export type ThemeCollectionItem = ThemePostCollection | ThemeDocCollection
|
|
|
|
export interface ThemeBaseCollection {
|
|
/**
|
|
* 文档集合类型
|
|
* - `post`: 文章列表(可用于 博客、专栏等)
|
|
* - `doc`: 文档(可用于 笔记、知识库等)
|
|
*/
|
|
type: 'post' | 'doc'
|
|
/**
|
|
* 文档集合目录,相对于源目录
|
|
*/
|
|
dir: string
|
|
/**
|
|
* 当启用 autoFrontmatter 时,文档集合的链接前缀
|
|
* - `post` 类型,用于文章的自动生成链接前缀
|
|
* - `doc` 类型,用于文档中文章的自动生成链接前缀
|
|
* @default '/${dir}/'
|
|
*/
|
|
linkPrefix?: string
|
|
|
|
/**
|
|
* 文档集合标题
|
|
*/
|
|
title: string
|
|
|
|
/**
|
|
* 标签颜色主题
|
|
*
|
|
* @default 'colored'
|
|
*/
|
|
tagsTheme?: 'colored' | 'gray' | 'brand'
|
|
|
|
/**
|
|
* 自动生成文章的 frontmatter
|
|
*/
|
|
autoFrontmatter?: AutoFrontmatterOptions | false
|
|
|
|
/**
|
|
* 文章元数据配置
|
|
* - 设置文章列表中的文章元信息 显示方式
|
|
* - 设置文章内容页元信息显示方式
|
|
*/
|
|
meta?: {
|
|
/**
|
|
* 元数据中是否显示标签
|
|
* @default true
|
|
*/
|
|
tags?: boolean
|
|
/**
|
|
* 元数据中是否显示阅读时间
|
|
* @default true
|
|
*/
|
|
readingTime?: boolean
|
|
/**
|
|
* 元数据中是否显示字数
|
|
* @default true
|
|
*/
|
|
wordCount?: boolean
|
|
/**
|
|
* 元数据中是否显示创建时间,或者创建时间的显示格式
|
|
* - `short`: 2022-01-01
|
|
* - `long`: 2022-01-01 00:00:00
|
|
* @default 'short'
|
|
*/
|
|
createTime?: 'short' | 'long' | boolean
|
|
}
|
|
}
|
|
|
|
/**
|
|
* post 类型的文章集合
|
|
*/
|
|
export interface ThemePostCollection extends ThemeBaseCollection {
|
|
type: 'post'
|
|
/**
|
|
* 通过 glob string 配置包含文件,
|
|
*
|
|
* 默认读取 `dir` 中的所有 `.md` 文件。
|
|
*
|
|
* @default - ['**\/*.md']
|
|
*/
|
|
include?: string[]
|
|
|
|
/**
|
|
* 通过 glob string 配置排除的文件
|
|
*
|
|
* @default - []
|
|
*/
|
|
exclude?: string[]
|
|
/**
|
|
* 分页
|
|
*/
|
|
pagination?: false | number | {
|
|
/**
|
|
* 每页显示的文章数量
|
|
* @default 15
|
|
*/
|
|
perPage?: number
|
|
}
|
|
|
|
/**
|
|
* 文章列表页链接
|
|
*
|
|
* @default '/${dir}/'
|
|
*/
|
|
link?: string
|
|
|
|
/**
|
|
* 是否启用文章列表页
|
|
* @default true
|
|
*/
|
|
postList?: boolean
|
|
|
|
/**
|
|
* 是否启用标签页
|
|
* @default true
|
|
*/
|
|
tags?: boolean
|
|
|
|
/**
|
|
* 自定义标签页链接
|
|
*
|
|
* @default '/${link}/tags/'
|
|
*/
|
|
tagsLink?: string
|
|
|
|
/**
|
|
* 标签页文本
|
|
*/
|
|
tagsText?: string
|
|
|
|
/**
|
|
* 是否启用归档页
|
|
* @default true
|
|
*/
|
|
archives?: boolean
|
|
|
|
/**
|
|
* 自定义归档页链接
|
|
*
|
|
* @default '/${link}/archives/'
|
|
*/
|
|
archivesLink?: string
|
|
|
|
/**
|
|
* 归档页文本
|
|
*/
|
|
archivesText?: string
|
|
|
|
/**
|
|
* 是否启用分类功能
|
|
* - 启用后会生成分类页
|
|
* @default true
|
|
*/
|
|
categories?: boolean
|
|
|
|
/**
|
|
* 自定义分类页链接
|
|
*
|
|
* @default '/${link}/categories/'
|
|
*/
|
|
categoriesLink?: string
|
|
|
|
/**
|
|
* 分类页文本
|
|
*/
|
|
categoriesText?: string
|
|
|
|
/**
|
|
* 分类页展开深度
|
|
*
|
|
* @default 'deep'
|
|
*/
|
|
categoriesExpand?: number | 'deep'
|
|
|
|
/**
|
|
* 文章分类列表转换函数,比如排除不需要的一级分类
|
|
* @param categories 分类列表
|
|
* @returns 返回一个新的分类列表
|
|
*/
|
|
categoriesTransform?: (categories: PostsCategoryItem[]) => PostsCategoryItem[]
|
|
|
|
/**
|
|
* 文章封面图
|
|
*
|
|
* 配置封面图的位置,支持 `'left'`、`'right'`、`'top'`、`'top-inside'`
|
|
*
|
|
* @default 'right'
|
|
*/
|
|
postCover?: PostsCoverLayout | PostsCoverStyle
|
|
|
|
/**
|
|
* 个人信息配置
|
|
*/
|
|
profile?: ProfileOptions | false
|
|
|
|
/**
|
|
* 社交账号配置
|
|
*/
|
|
social?: SocialLink[] | false
|
|
}
|
|
|
|
/**
|
|
* 文档类型的文章集合
|
|
*/
|
|
export interface ThemeDocCollection extends ThemeBaseCollection {
|
|
type: 'doc'
|
|
/**
|
|
* 侧边栏配置
|
|
*/
|
|
sidebar?: 'auto' | (string | ThemeSidebarItem)[]
|
|
|
|
/**
|
|
* 是否显示侧边栏滚动条
|
|
* @default true
|
|
*/
|
|
sidebarScrollbar?: boolean
|
|
|
|
/**
|
|
* 侧边栏为 `auto` 时,是否默认折叠
|
|
* - `true`: 默认折叠
|
|
* - `false`: 默认不折叠
|
|
*
|
|
* @default false
|
|
*/
|
|
sidebarCollapsed?: boolean
|
|
}
|