UNPKG

fortify-schema

Version:

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

75 lines (69 loc) 1.97 kB
import { SchemaInterface } from "../../../../types/SchemaValidator.type"; /** * Revolutionary schema composition with inheritance */ export const Extend = { /** * Create schema inheritance with method-like syntax * * @example * ```typescript * const BaseEntitySchema = Interface({ * id: "uuid", * createdAt: "date", * updatedAt: "date" * }); * * const UserSchema = Extend.from(BaseEntitySchema).with({ * email: "email", * username: "string(3,20)", * profile: { * firstName: "string", * lastName: "string" * } * }); * * const AdminSchema = Extend.from(UserSchema).with({ * permissions: "string[]", * role: Make.const("admin") * }).override({ * email: "email(,254)" // Override with more specific validation * }); * ``` */ from(baseSchema: SchemaInterface): ExtendBuilder { return new ExtendBuilder(baseSchema); } }; /** * Builder for schema extension */ export class ExtendBuilder { constructor(private baseSchema: SchemaInterface) {} with(additionalFields: any): ExtendWithBuilder { return new ExtendWithBuilder(this.baseSchema, additionalFields); } } /** * Builder for extended schema with additional methods */ export class ExtendWithBuilder { constructor( private baseSchema: SchemaInterface, private additionalFields: any ) {} override(overrides: any): SchemaInterface { // Merge base schema, additional fields, and overrides return { ...this.baseSchema, ...this.additionalFields, ...overrides } as SchemaInterface; } build(): SchemaInterface { return { ...this.baseSchema, ...this.additionalFields } as SchemaInterface; } }