/** * GitWand — Stratégies de merge appliquées par les profils * * Trois fonctions clés exportées : * - mergeArrayAsSet : merge 3-way de tableaux comme des sets (par identité) * - mergeOrderedListViaPatch : merge 3-way de tableaux via RFC 6902 add/remove * - tryMergeWithProfile : helper de haut niveau qui route base/ours/theirs en * fonction de la stratégie, retourne null si non résolvable. * * Les fonctions sont génériques sur unknown et peuvent être appelées tant pour * des sous-arbres JSON que des sous-arbres YAML (le résolveur YAML les utilise * après yaml.parse → représentation JS-native). */ import type { JsonPatchOp, PathStrategy } from "./types.js"; /** * Merge 3-way de deux tableaux interprétés comme des sets identifiés par * `identity`. La sémantique : * * - Pour chaque item présent dans ours OU theirs, on regarde s'il était dans * la base. * - Item ajouté d'un seul côté → ajouté au résultat. * - Item modifié d'un seul côté (même identité, valeur différente) → version * modifiée gagne. * - Item modifié des deux côtés différemment → conflit, retour null. * - Item supprimé d'un côté + non modifié de l'autre → supprimé du résultat. * - Item supprimé d'un côté + modifié de l'autre → conflit. * * L'ordre du résultat suit ours pour les items qu'il contient, puis ajoute * en queue les nouveaux de theirs (sémantique "ours d'abord, theirs ensuite"). */ export declare function mergeArrayAsSet(base: unknown[], ours: unknown[], theirs: unknown[], identity: (item: unknown) => string): unknown[] | null; /** * Merge 3-way d'un sous-arbre via RFC 6902 (add/remove/replace). Si les * deltas base→ours et base→theirs n'entrent pas en conflit (paths disjoints), * on applique séquentiellement les deux. Sinon, retourne null. */ export declare function mergeOrderedListViaPatch(base: unknown, ours: unknown, theirs: unknown): unknown | null; /** * Routeur de stratégie. Reçoit base/ours/theirs déjà parsés (JSON values) et * la PathStrategy à appliquer. Retourne la valeur fusionnée ou null. * * Note : "merge-keys" et "opaque" ne sont **pas** gérés ici — ils sont * délégués au pipeline existant (mergeObjects récursif côté json.ts) qui sait * descendre dans la structure. Ce module gère uniquement les stratégies qui * apportent quelque chose de nouveau en v2.2 (set, ordered-list). */ export declare function applyStrategy(strategy: PathStrategy, base: unknown, ours: unknown, theirs: unknown): { handled: true; value: unknown | null; } | { handled: false; }; export type { JsonPatchOp }; //# sourceMappingURL=merge-strategies.d.ts.map