UNPKG

fortify-schema

Version:

A modern TypeScript validation library designed around familiar interface syntax and powerful conditional validation. Experience schema validation that feels natural to TypeScript developers while unlocking advanced runtime validation capabilities.

76 lines (69 loc) 1.73 kB
import { SchemaInterface } from "../../../../types/SchemaValidator.type"; /** * 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; } }