| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { z } from 'zod'
- import { DEFAULT_MINIMUM_PASSWORD_STRENGTH } from '@/lib/constants'
- export const FormSchema = z
- .object({
- organization: z.string({
- required_error: 'Please select an organization',
- }),
- projectName: z
- .string()
- .trim()
- .min(1, 'Please enter a project name.') // Required field check
- .min(3, 'Project name must be at least 3 characters long.') // Minimum length check
- .max(64, 'Project name must be no longer than 64 characters.'), // Maximum length check
- highAvailability: z.boolean(),
- postgresVersion: z.string({
- required_error: 'Please enter a Postgres version.',
- }),
- instanceType: z.string().optional(),
- dbRegion: z.string({
- required_error: 'Please select a region.',
- }),
- cloudProvider: z.string({
- required_error: 'Please select a cloud provider.',
- }),
- dbPass: z
- .string({ required_error: 'Please enter a database password.' })
- .min(1, 'Password is required.'),
- dbPassStrength: z
- .union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)])
- .default(0),
- dbPassStrengthMessage: z.string().default(''),
- dbPassStrengthWarning: z.string().default(''),
- instanceSize: z.string().optional(),
- githubRepositoryId: z.string().optional().default(''),
- githubInstallationId: z.number().optional(),
- githubRepositoryName: z.string().optional().default(''),
- dataApi: z.boolean(),
- dataApiDefaultPrivileges: z.boolean(),
- enableRlsEventTrigger: z.boolean(),
- postgresVersionSelection: z.string(),
- useOrioleDb: z.boolean(),
- })
- .superRefine(
- ({ dbPassStrength, dbPassStrengthWarning, highAvailability, cloudProvider }, ctx) => {
- if (dbPassStrength < DEFAULT_MINIMUM_PASSWORD_STRENGTH) {
- ctx.addIssue({
- code: z.ZodIssueCode.custom,
- path: ['dbPass'],
- message: dbPassStrengthWarning || 'Password not secure enough',
- })
- }
- if (highAvailability && cloudProvider !== 'AWS_K8S') {
- ctx.addIssue({
- code: z.ZodIssueCode.custom,
- path: ['cloudProvider'],
- message: 'High availability is only supported on AWS (Revamped)',
- })
- }
- }
- )
- export type CreateProjectForm = z.infer<typeof FormSchema>
|