subBalancer.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { z } from 'zod';
  2. export const SubBalancerStrategySchema = z.enum(['leastLoad', 'leastPing', 'random', 'roundRobin']);
  3. export type SubBalancerStrategy = z.infer<typeof SubBalancerStrategySchema>;
  4. export const SubBalancerSchema = z.object({
  5. id: z.number(),
  6. remark: z.string(),
  7. strategy: SubBalancerStrategySchema,
  8. inboundIds: z.array(z.number()),
  9. memberWeights: z.record(z.string(), z.number()).nullish(),
  10. sortOrder: z.number(),
  11. enabled: z.boolean(),
  12. createdAt: z.number().optional(),
  13. updatedAt: z.number().optional(),
  14. });
  15. export type SubBalancer = z.infer<typeof SubBalancerSchema>;
  16. export const SubBalancerListSchema = z.array(SubBalancerSchema);
  17. export const SubBalancerFormSchema = z.object({
  18. remark: z
  19. .string()
  20. .trim()
  21. .min(1, 'pages.settings.subBalancers.errRemarkRequired')
  22. .max(256, 'pages.settings.subBalancers.errRemarkRequired'),
  23. strategy: SubBalancerStrategySchema,
  24. inboundIds: z
  25. .array(z.number().int().positive())
  26. .min(1, 'pages.settings.subBalancers.errInboundsRequired'),
  27. // inboundId (stringified) -> leastLoad weight; absent members weigh 1.0.
  28. memberWeights: z
  29. .record(
  30. z.string(),
  31. z
  32. .number({ message: 'pages.settings.subBalancers.errWeightPositive' })
  33. .positive('pages.settings.subBalancers.errWeightPositive'),
  34. )
  35. .optional(),
  36. sortOrder: z
  37. .number({ message: 'pages.settings.subBalancers.errSortOrder' })
  38. .int('pages.settings.subBalancers.errSortOrder')
  39. .min(1, 'pages.settings.subBalancers.errSortOrder'),
  40. enabled: z.boolean(),
  41. });
  42. export type SubBalancerFormValues = z.infer<typeof SubBalancerFormSchema>;