Skip to content

feat(helpers): add array helper for constructing arrays - #30

Merged
atinseau merged 1 commit into
masterfrom
feature/add-array-helper
Mar 20, 2026
Merged

atinseau merged 1 commit into
masterfrom
feature/add-array-helper

Conversation

@atinseau

Copy link
Copy Markdown
Owner

Changements apportés

  • Création du helper array dans src/helpers/array-helpers.ts — collecte ses arguments en un tableau : {{ array name status }} → ["Alice", "active"]
  • Ajout de l'analyse statique dédiée dans src/analyzer.ts : validation du nombre d'arguments (≥ 1), résolution du schéma de chaque argument, inférence du type de retour { type: "array", items: <union des types> }
  • Ajout du support sub-expression (processArraySubExpression) pour permettre {{#if (array name "test")}}…{{/if}}
  • Ajout de ArrayHelpers.ARRAY_HELPER_NAME dans DIRECT_EXECUTION_HELPERS (src/executor.ts) et DIRECT_EXECUTION_HELPER_NAMES (src/typebars.ts) pour préserver les valeurs brutes en mode single-expression
  • Enregistrement automatique du helper dans le constructeur de Typebars
  • Export de ArrayHelpers depuis src/helpers/index.ts

Tests

  • Création de tests/array-helpers.spec.ts avec couverture complète :
    • Analyse : arguments string, number, littéraux, sub-expressions, identifiers, types mixtes, erreur sans argument
    • Schéma de sortie : items homogènes (string, number), union oneOf pour types hétérogènes
    • Exécution : valeurs résolues, littéraux, sub-expressions, propriétés optionnelles (undefined)
    • Intégration object template : helper dans propriétés imbriquées, niveaux multiples, propriétés sibling
    • Blocs conditionnels (#if), arguments variadiques (5+), analyzeAndExecute, compiled templates

Remarques

  • Aucune vérification de compatibilité de types entre arguments (contrairement à default) : {{array name count}} est valide et produit (string | number)[]
  • Le helper filtre automatiquement l'objet options de Handlebars via isHandlebarsOptions()

🚀

@atinseau
atinseau merged commit fdd6cbd into master Mar 20, 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