JSPM

@pearl-framework/validate

0.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 13
  • Score
    100M100P100Q40558F

Pearl.js validation — Zod-powered FormRequest, validation pipes, and error formatting

Package Exports

  • @pearl-framework/validate

Readme

@pearl-framework/validate

FormRequest, ValidationPipe, and Zod-powered rules for Pearl.js

Installation

pnpm add @pearl-framework/validate @pearl-framework/http zod

Usage

FormRequest

import { FormRequest } from '@pearl-framework/validate'
import { z } from 'zod'

export class CreateUserRequest extends FormRequest {
  schema = z.object({
    name:     z.string().min(2).max(100),
    email:    z.string().email(),
    password: z.string().min(8),
  })

  async authorize(): Promise<boolean> {
    return true // or check ctx.get('auth.user')
  }
}

// In your route handler
router.post('/users', async (ctx) => {
  const request = await CreateUserRequest.validate(ctx)
  // request.data is fully typed
  const { name, email } = request.data
})

ValidationPipe (middleware)

import { ValidationPipe } from '@pearl-framework/validate'

router.post('/users', createUser, [
  ValidationPipe(CreateUserRequest)
])

Standalone validation

import { validate } from '@pearl-framework/validate'
import { z } from 'zod'

const schema = z.object({ email: z.string().email() })
const result = await validate(schema, { email: 'bad' })
// throws ValidationException with per-field errors

Built-in rules

import { rules } from '@pearl-framework/validate'

z.object({
  email:    rules.email(),
  password: rules.password(),   // min 8, mixed case, number
  slug:     rules.slug(),
  uuid:     rules.uuid(),
  url:      rules.url(),
})