Skip to content

feat(executor/analyzer): support aggregated array identifier data - #24

Merged
atinseau merged 1 commit into
masterfrom
feature/support-aggregated-array-identifier-data
Mar 17, 2026
Merged

atinseau merged 1 commit into
masterfrom
feature/support-aggregated-array-identifier-data

Conversation

@atinseau

Copy link
Copy Markdown
Owner

Changements apportés

  • Ajout du type IdentifierData et IdentifierDataEntry dans src/types.ts pour modéliser les données d'identifiants scalaires (objet unique) ou agrégées (tableau d'objets)
  • Modification de resolveWithIdentifier() dans src/analyzer.ts pour résoudre les propriétés au sein du schéma items lorsque le schéma d'identifiant est un tableau, et encapsuler le résultat dans { type: "array", items: <resolved> }
  • Modification de resolveRootWithIdentifier() dans src/analyzer.ts pour retourner le schéma tableau complet tel quel pour {{$root:N}}
  • Modification de resolveExpression() dans src/executor.ts pour extraire la propriété de chaque élément lorsque identifierData[N] est un tableau, produisant un tableau résultat
  • Modification de mergeDataWithIdentifiers() dans src/executor.ts pour ignorer l'aplatissement des clés individuelles quand les données d'identifiant sont un tableau (accessible uniquement via $root:N)
  • Remplacement de tous les types inline Record<number, Record<string, unknown>> par IdentifierData dans src/executor.ts, src/dispatch.ts, src/compiled-template.ts et src/types.ts
  • Ajout de IdentifierData et IdentifierDataEntry aux exports publics dans src/index.ts

Tests

  • Création de tests/aggregated-identifiers.spec.ts (~1130 lignes) couvrant :
    • Extraction de propriétés depuis des données agrégées ({{key:N}} → tableau)
    • Accès $root:N retournant le tableau complet
    • Coexistence identifiants scalaires et agrégés
    • Cas limites : tableau vide, élément unique, propriétés imbriquées, valeurs null/mixtes
    • Inférence de schéma de sortie pour identifiants agrégés via analyze()
    • Diagnostics d'erreur (IDENTIFIER_PROPERTY_NOT_FOUND, UNKNOWN_IDENTIFIER)
    • Intégration avec le moteur Typebars (analyze, execute, analyzeAndExecute, compile)
    • Intégration avec le helper map et limitation documentée de ($root:N) en sub-expression
    • Templates objet/tableau avec identifiants agrégés
    • Rétrocompatibilité complète des identifiants scalaires

Remarques

  • ($root:N) ne peut pas être utilisé comme argument de sub-expression Handlebars (ex: {{ map ($root:4) "prop" }}) car Handlebars l'interprète comme un appel de helper. La syntaxe {{key:N}} est le mécanisme principal pour consommer les données agrégées.
  • La rétrocompatibilité est totalement préservée : les identifiants scalaires existants fonctionnent de manière identique.

🚀

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@atinseau
atinseau merged commit 117385b into master Mar 17, 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