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.

77 lines (65 loc) 1.91 kB
import { SchemaValidationResult } from "../types/types"; // Performance monitoring export class ValidationMetrics { private static metrics = new Map< string, { count: number; totalTime: number; errors: number } >(); static record(operation: string, timeMs: number, hasError: boolean): void { const current = this.metrics.get(operation) || { count: 0, totalTime: 0, errors: 0, }; this.metrics.set(operation, { count: current.count + 1, totalTime: current.totalTime + timeMs, errors: current.errors + (hasError ? 1 : 0), }); } static getMetrics(): Record<string, any> { const result: Record<string, any> = {}; for (const [op, data] of this.metrics.entries()) { result[op] = { ...data, avgTime: data.totalTime / data.count, errorRate: data.errors / data.count, }; } return result; } static reset(): void { this.metrics.clear(); } } // Validation cache for expensive operations export class ValidationCache { private static cache = new Map< string, { result: SchemaValidationResult; timestamp: number } >(); private static readonly TTL = 5 * 60 * 1000; // 5 minutes static get(key: string): SchemaValidationResult | null { const entry = this.cache.get(key); if (!entry) return null; if (Date.now() - entry.timestamp > this.TTL) { this.cache.delete(key); return null; } return { ...entry.result }; // Deep copy to prevent mutation } static set(key: string, result: SchemaValidationResult): void { if (this.cache.size > 1000) { // Prevent memory leaks const oldestKey = this.cache.keys().next().value; this.cache.delete(oldestKey || ""); } this.cache.set(key, { result: { ...result }, timestamp: Date.now(), }); } static clear(): void { this.cache.clear(); } }