UNPKG

fortify-schema

Version:

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

172 lines (121 loc) 4.5 kB
# Fortify Schema Extensions Advanced extensions for the Fortify Schema validation library, providing powerful features for schema validation, documentation generation, and real-time validation. ## Architecture The extensions are built with a clean, maintainable architecture: - **Core Extensions**: High-level APIs for common use cases - **Specialized Modules**: Focused utilities in the `mods/` directory ## Available Extensions ### Smart Inference (`Smart`) Automatically infer schema definitions from sample data or TypeScript types. ```typescript import { Smart } from 'fortify-schema'; // Infer from sample data const sampleUser = { id: 1, email: "user@example.com", name: "John Doe", tags: ["developer", "typescript"] }; const UserSchema = Smart.fromSample(sampleUser); // Generates: { id: "positive", email: "email", name: "string", tags: "string[]" } // Infer from TypeScript interface with sample interface User { id: number; email: string; name?: string; } const schema = Smart.fromType<User>({ id: 1, email: "user@example.com", name: "John" }); ``` ### Conditional Validation (`When`) Create complex validation rules based on field dependencies. ```typescript import { When } from 'fortify-schema'; const OrderSchema = Interface({ orderType: Make.union("pickup", "delivery"), address: "string?", // Conditional validation deliveryFee: When.field("orderType") .is("delivery") .then("number(0,)") .default("number?") }); ``` ### Real-time Validation (`Live`) Reactive validation for forms and streaming data. ```typescript import { Live } from 'fortify-schema'; // Form validation const formValidator = Live.form(UserSchema); formValidator.bindField('email', emailInput); formValidator.enableAutoValidation(); // Stream validation const streamValidator = Live.stream(DataSchema); streamValidator.onValid(data => processData(data)); streamValidator.onInvalid((data, errors) => logErrors(errors)); ``` ### Auto Documentation (`Docs`) Generate comprehensive documentation from schemas. ```typescript import { Docs } from 'fortify-schema'; // Generate OpenAPI specification const openApiSpec = Docs.openapi(UserSchema, { title: "User API", version: "1.0.0", servers: ["https://api.example.com"] }); // Generate TypeScript definitions const typeDefinitions = Docs.typescript(UserSchema, { exportName: "User", namespace: "API" }); // Generate interactive documentation const interactiveDocs = Docs.interactive(UserSchema, { title: "User Schema Playground", allowTesting: true }); ``` ## Specialized Modules ### OpenAPICo nverter Convert schemas to OpenAPI 3.0 specifications. ```typescript import { OpenAPIConverter } from 'fortify-schema'; const openApiSchema = OpenAPIConverter.convertSchema(schema); const fullSpec = OpenAPIConverter.generateOpenAPISpec(schema, options); ``` ### TypeScriptGenerator Generate TypeScript code from schemas. ```typescript import { TypeScriptGenerator } from 'fortify-schema'; const interface = TypeScriptGenerator.generateInterface(schema, options); const utilityTypes = TypeScriptGenerator.generateUtilityTypes(schema, "User"); const module = TypeScriptGenerator.generateModule(schema, options); ``` ## Quick Access Use the `Quick` object for common operations: ```typescript import { Quick } from 'fortify-schema'; // Quick schema inference const schema = Quick.fromSample(sampleData); // Quick conditional validation const conditionalField = Quick.when("status").is("active").then("string"); // Quick documentation const docs = Quick.docs(schema); const typescript = Quick.typescript(schema); ``` ## Features - **Type Safety**: Full TypeScript support with proper type inference - **Performance**: Optimized validation engine with early termination - **Extensibility**: Clean architecture for adding new features - **Browser & Node.js**: Works in both environments - **Zero Dependencies**: Built on existing Fortify utilities ## Best Practices 1. **Use Smart Inference**: Start with `Smart.fromSample()` for rapid prototyping 2. **Leverage Conditional Validation**: Use `When` for complex business rules 3. **Real-time Feedback**: Implement `Live` validation for better UX 4. **Document Everything**: Generate docs with `Docs` for API documentation 5. **Type Generation**: Use TypeScript generation for type-safe APIs The extensions provide a powerful, flexible foundation for advanced schema validation while maintaining simplicity and performance.