64 lines
2.5 KiB
TypeScript
64 lines
2.5 KiB
TypeScript
import { z } from "zod";
|
||
|
||
export const configFormSchema = z.object({
|
||
'site.name': z.string(),
|
||
'site.description': z.string(),
|
||
'site.keywords': z.string(),
|
||
'site.url': z.string()
|
||
.refine((url) => {
|
||
if (!url || url === "") return true; // 允许空值
|
||
return url.startsWith("http://") || url.startsWith("https://");
|
||
}, "无效的URL格式,必须以http://或https://开头"),
|
||
'site.logo': z.string(),
|
||
'site.copyright': z.string(),
|
||
'site.icp': z.string(),
|
||
'site.icp_url': z.string(),
|
||
'site.color_style': z.string(),
|
||
'user.default_avatar': z.string(),
|
||
'user.default_role': z.string(),
|
||
'user.register_invite_code': z.boolean(),
|
||
'user.register_email_verification': z.boolean(),
|
||
'user.open_login': z.boolean(),
|
||
'user.open_reset_password': z.boolean(),
|
||
'email.smtp_host': z.string(),
|
||
'email.smtp_port': z.number().int().min(1).max(65535),
|
||
'email.smtp_user': z.string(),
|
||
'email.smtp_password': z.string(),
|
||
'email.smtp_from': z.string(),
|
||
'email.smtp_from_name': z.string(),
|
||
'email.smtp_from_email': z.string()
|
||
.refine((email) => {
|
||
if (!email || email === "") return true; // 允许空值
|
||
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
|
||
}, "无效的邮箱格式"),
|
||
'email.system_template': z.string(),
|
||
'blog.default_author': z.string(),
|
||
'blog.default_category': z.string(),
|
||
'blog.default_tag': z.string(),
|
||
'blog.open_comment': z.boolean(),
|
||
'logging.level': z.enum(["trace", "debug", "info", "warn", "error"], {
|
||
message: "日志级别必须是以下之一: trace, debug, info, warn, error"
|
||
}),
|
||
'logging.max_files': z.number().int().min(1).max(1000),
|
||
'logging.max_file_size': z.number().int().min(1).max(10240),
|
||
'cache.ttl': z.number().int().min(1).max(31536000),
|
||
'cache.max_size': z.number().int().min(1).max(1048576),
|
||
'switch.open_register': z.boolean(),
|
||
'switch.open_login': z.boolean(),
|
||
'switch.open_reset_password': z.boolean(),
|
||
'switch.open_comment': z.boolean(),
|
||
'switch.open_like': z.boolean(),
|
||
'switch.open_share': z.boolean(),
|
||
'switch.open_view': z.boolean(),
|
||
})
|
||
|
||
export type ConfigFormValues = z.infer<typeof configFormSchema>;
|
||
|
||
// GraphQL UpdateConfig 输入类型
|
||
export interface UpdateConfig {
|
||
key: string;
|
||
value: string; // GraphQL schema 要求所有值都是字符串
|
||
description?: string;
|
||
category?: string;
|
||
is_editable?: boolean;
|
||
} |