fortify-schema
Version:
TypeScript interface-like schema validation system that's easier to use than Zod
146 lines (117 loc) ⢠4.56 kB
text/typescript
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!");