UNPKG

fortify-schema

Version:

A modern TypeScript validation library designed around familiar interface syntax and powerful conditional validation. Experience schema validation that feels natural to TypeScript developers while unlocking advanced runtime validation capabilities.

117 lines (99 loc) 3.21 kB
const { Interface, Mod } = require('fortify-schema'); // Test 1: Schema basique console.log('=== Test 1: Schema basique ==='); const UserSchema = Interface({ id: "number", email: "email", name: "string(2,50)", age: "number(18,120)?", status: "active|inactive" }); const validUser = { id: 1, email: "test@example.com", name: "John Doe", age: 25, status: "active" }; const invalidUser = { id: "not-a-number", email: "invalid-email", name: "X", // trop court age: 15, // trop jeune status: "unknown" }; console.log('Utilisateur valide:', UserSchema.safeParse(validUser)); console.log('Utilisateur invalide:', UserSchema.safeParse(invalidUser)); // Test 2: Validation conditionnelle console.log('\n=== Test 2: Validation conditionnelle ==='); const ConditionalSchema = Interface({ role: "admin|user|guest", permissions: "when role=admin *? string[] : string[]?", maxProjects: "when role=free *? int(1,3) : int(1,)" }); const adminUser = { role: "admin", permissions: ["read", "write", "delete"], maxProjects: 100 }; const guestUser = { role: "guest", // permissions optionnel pour non-admin maxProjects: 1 }; console.log('Admin user:', ConditionalSchema.safeParse(adminUser)); console.log('Guest user:', ConditionalSchema.safeParse(guestUser)); // Test 3: Arrays et types complexes console.log('\n=== Test 3: Arrays et types complexes ==='); const ComplexSchema = Interface({ tags: "string[](1,5)?", metadata: "object?", createdAt: "date", isActive: "boolean" }); const complexData = { tags: ["javascript", "validation", "schema"], metadata: { source: "api", version: "1.0" }, createdAt: new Date(), isActive: true }; console.log('Données complexes:', ComplexSchema.safeParse(complexData)); // Test 4: Transformation de schema console.log('\n=== Test 4: Transformation de schema ==='); try { const PublicUserSchema = Mod.omit(UserSchema, ["id"]); const ExtendedUserSchema = Mod.extend(UserSchema, { createdAt: "date", updatedAt: "date?" }); console.log('Schema public (sans id):', PublicUserSchema.safeParse({ email: "test@example.com", name: "Jane Doe", status: "active" })); console.log('Schema étendu:', ExtendedUserSchema.safeParse({ ...validUser, createdAt: new Date() })); } catch (error) { console.log('Erreur transformation:', error.message); } // Test 5: Cas limites et erreurs console.log('\n=== Test 5: Cas limites ==='); const EdgeCaseSchema = Interface({ literal: "=exactly-this", union: "red|green|blue", range: "number(0,100)", optional: "string?" }); console.log('Littéral correct:', EdgeCaseSchema.safeParse({ literal: "exactly-this" })); console.log('Littéral incorrect:', EdgeCaseSchema.safeParse({ literal: "wrong-value" })); // Test 6: Performance basique console.log('\n=== Test 6: Performance ==='); const start = performance.now(); for (let i = 0; i < 4; i++) { UserSchema.safeParse(validUser); } const end = performance.now(); console.log(`4 validations en ${(end - start).toFixed(2)}ms`); console.log('\n=== Fin des tests ===');