Files
pi-config/extensions/rpiv-pi/skills/annotate-inline/examples/subfolder-schemas-layer.md

51 lines
1.3 KiB
Markdown

# 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)
```typescript
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