fortify-schema
Version:
TypeScript interface-like schema validation system that's easier to use than Zod
58 lines (48 loc) • 2.19 kB
text/typescript
import { Interface } from "../schema/mode/interfaces/Interface";
import { ConditionalSyntaxUtils } from "../schema/extensions/components/ConditionalValidation/utils/SyntaxParser";
console.log("🔍 DETAILED DEBUG: Conditional Logic");
console.log("====================================\n");
// Test the syntax parser directly
console.log("1. Testing syntax parser...");
const parsedConfig = ConditionalSyntaxUtils.parse("when:role=admin:string[]:string[]?");
console.log("Parsed config:", JSON.stringify(parsedConfig, null, 2));
if (parsedConfig && parsedConfig.conditions) {
console.log("Conditions found:", parsedConfig.conditions.length);
parsedConfig.conditions.forEach((condition: any, index: number) => {
console.log(`Condition ${index}:`, {
hasConditionFunction: typeof condition.condition === 'function',
schema: condition.schema
});
// Test the condition function
if (typeof condition.condition === 'function') {
console.log(` Testing condition with 'admin':`, condition.condition('admin'));
console.log(` Testing condition with 'user':`, condition.condition('user'));
}
});
}
console.log("\n2. Testing schema validation...");
const TestSchema = Interface({
role: "admin|user",
permissions: "when:role=admin:string[]:string[]?"
});
// Test case that should fail
const testData = {
role: "user",
permissions: ["read"] // This should fail
};
console.log("Test data:", testData);
const result = TestSchema.safeParse(testData);
console.log("Validation result:", result.success);
if (!result.success) {
console.log("Errors:", result.errors);
} else {
console.log("❌ This should have failed!");
}
console.log("\n3. Manual condition evaluation...");
if (parsedConfig && parsedConfig.conditions && parsedConfig.conditions[0]) {
const condition = parsedConfig.conditions[0];
const roleValue = testData.role;
const conditionResult = condition.condition(roleValue);
console.log(`Condition function(${roleValue}):`, conditionResult);
console.log("Expected schema:", conditionResult ? condition.schema : parsedConfig.default);
}