import { z } from 'zod'; const funcTypeEnum = z.enum([ 'scfWeb', 'scfFunc', 'tcbrContainer', 'tcbrFunc', 'tcbStatichost', ]); const targetPlatformEnum = z.enum(['default', 'intl', 'private']); const envParamSchema = z .object({ key: z.string(), value: z.string().optional(), fileld: z.string().optional(), placeholder: z.string().optional(), visible: z.boolean().optional(), }) .strict(); const gitPlatformSchema = z .object({ gitType: z.string(), gitUrl: z.string(), }) .strict(); const gitUrlItemSchema = z .object({ gitPlatform: gitPlatformSchema, }) .strict(); const row = z .object({ identifier: z.string(), title: z.string(), description: z.string().optional(), sampleCode: z.string().optional(), guide: z.string().max(262144).optional(), titleIcon: z.string().optional(), lang: z.enum(['zh', 'en']), language: z.string(), isCompile: z.boolean(), runtimeVersion: z.string(), entryPoint: z.string().optional(), funcTypes: z.array(funcTypeEnum).optional(), imagePath: z.string().optional(), containerPort: z.number().int().min(1).max(65535).optional(), gitUrl: z.string().max(256).optional(), gitUrlList: z.array(gitUrlItemSchema).optional(), zipFile: z.string().optional(), zipFilePath: z.string().optional(), zipFileStore: z.string().optional(), envParams: z.array(envParamSchema).optional(), tags: z.array(z.string()).optional(), category: z.string().optional(), displayPage: z.array(z.string()).optional(), linkurl: z.string().optional(), scfDemoID: z.string().max(256).optional(), isHide: z.boolean().optional(), order: z.number().int().min(1).max(5000), targetPlatform: z.array(targetPlatformEnum).min(1), // —— 旧 cms 平台系统字段,保留以保证使用处兼容性 —— _id: z.string(), _mainDep: z.string().optional(), _openid: z.string().optional(), createdAt: z.string(), updatedAt: z.string(), owner: z.string().optional(), createBy: z.string().optional(), updateBy: z.string().optional(), }) .strict(); export default z.array(row);