Skip to content

feat(analyzer): emit UNSUPPORTED_SCHEMA diagnostics, harden coercion - #22

Merged
atinseau merged 1 commit into
masterfrom
feature/emit-unsupported-schema-diagnostics
Mar 16, 2026
Merged

atinseau merged 1 commit into
masterfrom
feature/emit-unsupported-schema-diagnostics

Conversation

@atinseau

Copy link
Copy Markdown
Owner

Changements apportés

  • Remplacement du lancement d'UnsupportedSchemaError dans analyzeFromAst par une collecte de diagnostics structurés via addDiagnostic avec le code UNSUPPORTED_SCHEMA
  • Extraction de findConditionalSchemaLocations dans schema-resolver.ts : nouvelle fonction non-jetante retournant un tableau de { keyword, schemaPath } à la place de assertNoConditionalSchema
  • Conservation d'assertNoConditionalSchema comme enveloppe dépréciée pour la rétrocompatibilité
  • Ajout du code UNSUPPORTED_SCHEMA à l'union DiagnosticCode dans types.ts
  • Renforcement de coerceTextValue (analyzer.ts) et coerceValue (executor.ts) : retourne undefined au lieu de NaN pour les chaînes non numériques, valide les entiers, et n'accepte que "true"/"false" (insensible à la casse) pour les booléens

Breaking Changes

  • analyze(), engine.analyze(), engine.validate(), engine.analyzeAndExecute() et tpl.analyze() ne lèvent plus UnsupportedSchemaError pour les schémas if/then/else — ils retournent désormais { valid: false, diagnostics: [...] }
  • engine.execute() avec l'option schema lève désormais TemplateAnalysisError au lieu de UnsupportedSchemaError pour les schémas conditionnels
  • La coercition d'une chaîne invalide (ex. "hello" → number) retourne maintenant undefined au lieu de NaN

Tests

  • Mise à jour de conditional-schema.spec.ts : remplacement des assertions .toThrow(UnsupportedSchemaError) par des vérifications result.valid === false avec diagnostic UNSUPPORTED_SCHEMA
  • Ajout d'une suite dédiée à findConditionalSchemaLocations (racine, nested, allOf)
  • Ajout d'une suite de rétrocompatibilité pour assertNoConditionalSchema
  • Ajout de suites complètes dans coerce-execution.spec.ts pour la coercition booléenne (insensibilité à la casse, espaces) et numérique (entiers, chaînes vides, valeurs limites)

🚀

@atinseau
atinseau merged commit db15562 into master Mar 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant