Files

1.3 KiB

Schemas Layer Architecture

Responsibility

Zod validation schemas for dual-layer validation (preload UX + main security), type inference via z.infer<>.

Dependencies

  • zod: Runtime validation

Consumers

  • @redis-ui/ipc: Main process validation (security)
  • Preload: Fail-fast validation (UX)
  • TypeScript: Type inference

Module Structure

src/
├── connection.ts, backup.ts    # Domain schemas
└── __tests__/                  # Validation tests

Complete Schema Pattern (Types + Validation + Composition)

export const createConnectionSchema = z.object({
  name: z.string().min(1).max(255),
  host: z.string().min(1),
  port: z.number().int().min(1).max(65535),
  password: z.string().optional(),
  database: z.number().int().min(0).max(15).default(0),
})

// Type inference
export type CreateConnectionInput = z.infer<typeof createConnectionSchema>

// Update schema (partial + ID required)
export const updateConnectionSchema = createConnectionSchema.partial().extend({
  id: z.string().min(1)
})

Dual-Validation Flow

Renderer input → Preload (Zod parse, fail fast) → IPC → Main (Zod parse again, security)

Architectural Boundaries

  • NO any types: Use z.unknown()
  • NO skipping validation: Always validate at boundaries
  • NO business logic: Structure validation only