tosijs-schema : Une bibliothèque TypeScript/JavaScript ultra-rapide pour une validation de données optimisée à l’extrême
tosijs-schema est une bibliothèque JavaScript/TypeScript axée sur le schéma, conçue pour générer une seule source fiable et conforme aux standards pour les types de données. Elle repose sur JSON Schema standard, permettant de définir les types une fois et d’en déduire automatiquement les types TypeScript via Infer. Son principal avantage réside dans des performances exceptionnelles, notamment grâce à une stratégie d’optimisation appelée « prime-jump » : pour les tableaux ou dictionnaires volumineux, elle valide uniquement un échantillon fixe (environ 1 %), garantissant une complexité temporelle en O(1) tout en maintenant une très haute probabilité de détection d’erreurs. Cette approche permet des gains de vitesse de 500 à 1 100 fois supérieurs à Zod dans des scénarios à grande échelle, même sans JIT (just-in-time) activé. Le benchmark montre que sur un tableau de 1 million d’éléments, tosijs-schema (mode optimisé) est 504,4 fois plus rapide que Zod, et sur un dictionnaire de 100 000 clés, il atteint 9,9 fois la vitesse de Zod. En phase de « chaud » (JIT activé), les gains s’accentuent : jusqu’à 1 124,8 fois plus rapide pour les tableaux. Cette efficacité est rendue possible par une architecture fonctionnelle légère, sans dépendances, et par une compilation optimisée du schéma en JSON Schema pur. La syntaxe est élégante et fluide, basée sur des propriétés (getters) comme s.string.email, s.integer.min(0).max(100), ou s.array(s.string).optional, ce qui rend les définitions concises. Des métadonnées comme title, description, default peuvent être ajoutées à tout nœud sans affecter la validation, mais sont essentielles pour la génération de documentation API (Swagger/OpenAPI). Le schéma est accessible via la propriété .schema, ce qui le rend directement compatible avec les API LLM comme OpenAI ou Anthropic. En effet, tosijs-schema est conçu pour être « natif aux LLM ». Contrairement à Zod, qui nécessite un adaptateur externe pour produire un JSON Schema propre (souvent avec des structures imbriquées et des artefacts coûteux en tokens), tosijs-schema fournit directement un schéma plat et minimal. Cela est crucial pour les sorties structurées d’OpenAI, où response_format: { type: "json_schema" } exige un schéma strict et sans surcharge. Le schéma généré est immédiatement utilisable, sans transformation. La validation est par défaut rapide et retourne un booléen. Pour obtenir des messages d’erreur détaillés, un callback onError peut être fourni, ou une exception peut être levée. Le validateur « échoue rapidement » : il s’arrête à la première erreur détectée, économisant ainsi des ressources CPU. Une option fullScan: true permet de forcer une vérification complète si une garantie absolue est nécessaire (ex. : données financières critiques). Des contraintes comme .min(n) et .max(n) s’appliquent aux objets et dictionnaires pour limiter le nombre de propriétés. Une « contrainte fantôme » est implémentée : maxProperties est ignorée par design, car compter toutes les clés d’un objet malveillant (100 000 clés) est coûteux en CPU après l’allocation mémoire. L’application ou la base de données gère les quotas, tandis que le validateur se concentre sur la structure. Enfin, tosijs-schema permet de comparer deux schémas pour détecter des changements brisants ou des dérives structurelles, utile en gestion de version d’API. L’approche fonctionnelle, l’absence de dépendances, la performance et la compatibilité LLM en font un choix idéal pour les applications modernes, en particulier dans les environnements serverless, CLI ou agents IA.
