/** * GitWand — Résolveur de FRAGMENTS JSON (accuracy lot E, lot E) * * `tryResolveJsonConflict` exige que chaque côté du hunk parse comme un * document JSON complet. Or les conflits réels de `package.json` / * `composer.json` sont presque toujours des fragments — quelques lignes * `"clé": valeur,` au milieu d'un objet. Le moteur textuel les traite ligne à * ligne (union non_overlapping, value_only…), ce qui est exactement la * mauvaise granularité : mesuré sur benchmark/, non_overlapping n'est en * accord avec le merge humain que 48–67 % du temps sur ces fichiers. * * Ici : 3-way par CLÉ. * - ajoutée d'un côté → gardée ; supprimée d'un côté (intacte de l'autre) → supprimée ; * - modifiée d'un côté → prise ; modifiée pareil des deux → prise ; * - modifiée des deux côtés en valeurs DIFFÉRENTES → arbitrage borné : * si les deux valeurs sont des contraintes de version au MÊME opérateur * (`^7.23.0` vs `^7.23.3`), la plus récente gagne — c'est ce que les * équipes livrent, mesuré sur le corpus (elles prennent la dépendance la * plus récente apportée par l'autre branche). Sinon → null, fallback. * * Conservateur par construction : une ligne qui n'est pas exactement une * entrée `"clé": ` (objet imbriqué multi-lignes, * commentaire, ligne vide) → null, on ne devine pas. */ export interface FragmentEntry { key: string; /** Texte source de la valeur (non re-sérialisé — le formatage d'origine est conservé). */ valueText: string; /** Ligne d'origine SANS sa virgule finale (indentation et espaces intacts). */ rawNoComma: string; /** La ligne d'origine portait-elle une virgule finale ? */ hadComma: boolean; } /** Parse les lignes d'un côté du hunk. `null` dès qu'une ligne n'est pas une entrée simple. */ export declare function parseFragmentEntries(lines: string[]): FragmentEntry[] | null; /** * Si `a` et `b` sont deux contraintes de version au même opérateur * (`"^7.23.0"` vs `"^7.23.3"`), retourne la plus récente. Sinon `null`. * Volontairement strict : opérateurs différents, wildcards, prérelease, * plages composées → null. */ export declare function pickNewerRange(a: string, b: string): string | null; export interface FragmentMergeResult { lines: string[] | null; reason: string; } export declare function tryResolveJsonFragment(baseLines: string[], oursLines: string[], theirsLines: string[]): FragmentMergeResult; //# sourceMappingURL=json-fragment.d.ts.map