/** * GitWand — Résolveur YAML structurel * * Résout les conflits dans les fichiers YAML (.yaml / .yml) en analysant * la structure indentée et en fusionnant clé par clé, similaire au résolveur JSON. * * v2.2 — Si un FormatProfile s'applique au filePath, un fast path parse-merge- * serialize est tenté en premier (perd les commentaires mais débloque * helm/values.yaml et kubernetes manifests sur containers/env/volumes/…). * Le pipeline line-based reste le défaut quand aucun profil n'est applicable. * * Implémenté sans dépendance externe pour le pipeline line-based — la lib * `yaml` est utilisée uniquement par le fast path profil. * * Stratégie : * 1. Parser chaque version en "entrées" hiérarchiques (clé + contenu indenté) * 2. Pour chaque clé au même niveau : * - Ajoutée d'un seul côté → accepter * - Supprimée d'un seul côté, l'autre intact → supprimer * - Modifiée des deux côtés de façon identique → accepter * - Modifiée d'un seul côté → accepter la modification * - Modifiée des deux côtés différemment → conflit non résolvable * 3. Pour les valeurs scalaires strictement identiques → garder * 4. Pour les blocs imbriqués → récursion * * Limites (cas non gérés → fallback textuel) : * - Anchors et aliases YAML (&anchor / *alias) * - Multi-line strings (| et > block scalars) * - Séquences (listes avec -) : fusion conservatrice (union si disjoint, sinon conflit) * - Flow mappings/sequences inline ({ } / [ ]) */ /** * Une entrée YAML parsée. * Peut représenter : * - key: value (scalaire) * - key: (début d'objet indenté) * - - item (élément de liste) * - # commentaire ou ligne vide */ export interface YamlEntry { /** Indentation en espaces */ indent: number; /** Clé de l'entrée, ou null pour les lignes non-clé (commentaires, listes) */ key: string | null; /** Valeur scalaire sur la même ligne que la clé, ou null si objet/liste */ scalar: string | null; /** Lignes brutes constituant cette entrée (clé + contenu indenté suivant) */ rawLines: string[]; } /** Résultat du merge YAML */ export interface YamlMergeResult { /** Lignes fusionnées (null = conflit non résolvable) */ mergedLines: string[] | null; /** Description de la fusion */ reason: string; /** Clés résolues automatiquement */ resolvedKeys: number; /** Clés en conflit */ unresolvedKeys: number; } /** * Tente de résoudre un conflit YAML en fusionnant structurellement * les trois versions. * * @param baseLines - Lignes de la version base * @param oursLines - Lignes de la version ours * @param theirsLines - Lignes de la version theirs * @returns `YamlMergeResult` avec `mergedLines !== null` si résolu, `null` sinon */ export declare function tryResolveYamlConflict(baseLines: string[], oursLines: string[], theirsLines: string[], filePath?: string): YamlMergeResult; //# sourceMappingURL=yaml.d.ts.map