UNPKG

fortify-schema

Version:

TypeScript interface-like schema validation system that's easier to use than Zod

146 lines (117 loc) • 4.56 kB
import { Interface, Make, Mod, Smart, When, Live, Docs, Quick } from "../.."; console.log("šŸš€ REVOLUTIONARY FEATURES SHOWCASE"); console.log("===================================\n"); // 1. Smart Schema Inference console.log("1ļøāƒ£ Smart Schema Inference"); console.log("-------------------------"); const sampleUser = { id: 1, email: "user@example.com", name: "John Doe", age: 30, tags: ["developer", "typescript"], website: "https://johndoe.com", uuid: "550e8400-e29b-41d4-a716-446655440000" }; const inferredSchema = Smart.fromSample(sampleUser); console.log("✨ Inferred schema from sample:", JSON.stringify(inferredSchema, null, 2)); // 2. Conditional Validation console.log("\n2ļøāƒ£ Conditional Validation"); console.log("-------------------------"); const ConditionalUserSchema = Interface({ accountType: Make.union("free", "premium", "enterprise"), email: "email", name: "string", // Revolutionary conditional validation maxProjects: When.field("accountType") .is("free").then("int(1,3)") .is("premium").then("int(1,50)") .is("enterprise").then("int(1,)") .default("int(1,1)"), paymentMethod: When.field("accountType") .isNot("free").then("string") .default("string?") }); console.log("✨ Conditional schema created with dependent validation"); // 3. Schema Inheritance console.log("\n3ļøāƒ£ Schema Inheritance"); console.log("--------------------"); const BaseEntitySchema = Interface({ id: "uuid", createdAt: "date", updatedAt: "date" }); // const ExtendedUserSchema = When.extend.from(BaseEntitySchema).with({ // email: "email", // username: "string(3,20)", // profile: { // firstName: "string", // lastName: "string", // bio: "string(,500)?" // } // }).override({ // id: "positive" // Override with more specific validation // }); console.log("✨ Extended schema with inheritance created"); // 4. Real-time Validation console.log("\n4ļøāƒ£ Real-time Validation"); console.log("----------------------"); const UserSchema = Interface({ email: "email", username: "string(3,20)", password: "string(8,)" }); const liveValidator = Live.validator(UserSchema); // Simulate real-time field validation liveValidator.onValidation((result) => { console.log("šŸ“” Live validation result:", { isValid: result.isValid, errorCount: Object.keys(result.errors).length }); }); // Validate fields one by one console.log("✨ Validating fields in real-time..."); liveValidator.validateField('email', 'user@example.com'); liveValidator.validateField('username', 'johndoe'); liveValidator.validateField('password', 'securepass123'); // 5. Auto Documentation console.log("\n5ļøāƒ£ Auto Documentation"); console.log("---------------------"); const documentation = Docs.generate(UserSchema, { title: "User API Schema", description: "Schema for user management endpoints", examples: true }); console.log("✨ Generated documentation:"); console.log("šŸ“„ Markdown length:", documentation.markdown.length, "chars"); console.log("🌐 HTML length:", documentation.html.length, "chars"); console.log("šŸ“‹ OpenAPI spec generated"); // Generate TypeScript definitions const typeDefinitions = Docs.typescript(UserSchema, { exportName: "User", namespace: "API" }); console.log("šŸ“ TypeScript definitions:"); console.log(typeDefinitions); // 6. Quick Access Utilities console.log("\n6ļøāƒ£ Quick Access Utilities"); console.log("------------------------"); // Quick inference const quickSchema = Quick.fromSample({ id: 123, name: "Quick Test", active: true }); console.log("⚔ Quick schema inference:", JSON.stringify(quickSchema, null, 2)); // Quick documentation const quickDocs = Quick.docs(UserSchema, { title: "Quick Docs" }); console.log("⚔ Quick documentation generated"); console.log("\nšŸŽ‰ REVOLUTIONARY FEATURES SHOWCASE COMPLETE!"); console.log("============================================"); console.log("āœ… Smart Inference - Automatic schema generation"); console.log("āœ… Conditional Validation - Dependent field validation"); console.log("āœ… Real-time Validation - Live reactive validation"); console.log("āœ… Auto Documentation - Markdown, HTML, OpenAPI, TypeScript"); console.log("āœ… Schema Inheritance - Extend and override schemas"); console.log("āœ… Quick Utilities - Easy access to common features"); console.log("\nšŸš€ Fortify Schema is now the most revolutionary validation library!");