fortify-schema
Version:
TypeScript interface-like schema validation system that's easier to use than Zod
125 lines (107 loc) ⢠4.71 kB
text/typescript
import { Interface } from "../schema/mode/interfaces/Interface";
console.log("š REVOLUTIONARY CLEAN SYNTAX TEST");
console.log("==================================\n");
// šÆ ZERO IMPORTS NEEDED - Just pure, clean syntax!
console.log("⨠No Make, no Mod, no complex imports - just pure syntax!");
// 1. Union Types with Pipe Syntax (like TypeScript!)
console.log("\n1ļøā£ Union Types with Pipe Syntax");
const StatusSchema = Interface({
status: "active|inactive|pending", // ā
Clean union syntax!
priority: "low|medium|high", // ā
No Make.union() needed!
type: "user|admin|guest" // ā
Pure TypeScript-like syntax!
});
const statusResult = StatusSchema.safeParse({
status: "active",
priority: "high",
type: "admin"
});
console.log("ā
Union validation:", statusResult.success);
if (statusResult.success) {
console.log(" Data:", statusResult.data);
}
// 2. Constant Values with Equals Syntax
console.log("\n2ļøā£ Constant Values with Equals Syntax");
const ConfigSchema = Interface({
version: "=1.0", // ā
Clean constant syntax!
environment: "=production", // ā
No Make.const() needed!
debug: "=false", // ā
Boolean constants!
maxUsers: "=1000" // ā
Number constants!
});
const configResult = ConfigSchema.safeParse({
version: 1.0, // ā
Number to match =1.0
environment: "production", // ā
String to match =production
debug: false, // ā
Boolean to match =false
maxUsers: 1000 // ā
Number to match =1000
});
console.log("ā
Constant validation:", configResult.success);
if (configResult.success) {
console.log(" Config data:", configResult.data);
}
// 3. Mixed Clean Syntax - The Ultimate Test
console.log("\n3ļøā£ Mixed Clean Syntax - The Ultimate Test");
const UltimateSchema = Interface({
// Basic types (already clean)
id: "positive",
email: "email",
name: "string(2,50)",
age: "int(18,120)?",
// Revolutionary clean syntax
role: "user|admin|moderator", // ā
Union without imports
status: "active|inactive", // ā
Clean unions
type: "=premium", // ā
Constant without imports
plan: "=enterprise", // ā
Clean constants
// Arrays and constraints (already clean)
tags: "string[](1,10)?",
scores: "number(0,100)[]?",
// Nested objects (already clean)
profile: {
bio: "string(,500)?",
theme: "light|dark", // ā
Nested unions!
notifications: "=true" // ā
Nested constants!
}
});
const ultimateResult = UltimateSchema.safeParse({
id: 1,
email: "user@example.com",
name: "John Doe",
age: 30,
role: "admin",
status: "active",
type: "premium",
plan: "enterprise",
tags: ["developer", "typescript"],
scores: [95, 87, 92],
profile: {
bio: "Full-stack developer",
theme: "dark",
notifications: true
}
});
console.log("ā
Ultimate validation:", ultimateResult.success);
if (ultimateResult.success) {
console.log(" Ultimate data keys:", Object.keys(ultimateResult.data));
console.log(" Profile theme:", ultimateResult.data.profile.theme);
}
// 4. Error Testing - Show clean error messages
console.log("\n4ļøā£ Error Testing - Clean Error Messages");
const errorResult = StatusSchema.safeParse({
status: "invalid" as any, // ā Invalid union value (bypassing TS for demo)
priority: "urgent" as any, // ā Invalid union value (bypassing TS for demo)
type: "superuser" as any // ā Invalid union value (bypassing TS for demo)
});
console.log("ā Error validation:", errorResult.success);
if (!errorResult.success) {
console.log(" Clean error messages:");
errorResult.errors.forEach((error, index) => {
console.log(` ${index + 1}. ${error}`);
});
}
console.log("\nš REVOLUTIONARY CLEAN SYNTAX COMPLETE!");
console.log("=======================================");
console.log("ā
Union Types: 'active|inactive|pending' (no Make.union!)");
console.log("ā
Constants: '=admin' (no Make.const!)");
console.log("ā
Arrays: 'string[](1,10)' (already clean!)");
console.log("ā
Constraints: 'string(2,50)' (already clean!)");
console.log("ā
Optional: 'string?' (already clean!)");
console.log("ā
Nested: Full object nesting support!");
console.log("\nš ZERO imports needed - just pure, intuitive syntax!");