/** * GitWand — RFC 6902 (JSON Patch) minimal * * Implémentation maison, pas de dep externe. Couvre `add`, `remove`, `replace`. * `move` et `copy` non implémentées (gérées par séquences add/remove). * * Trois primitives : * - `diffJson(base, target)` produit la séquence d'ops qui transforme base en target. * - `applyJsonPatch(doc, ops)` applique séquentiellement, retourne le doc résultat * (immutable — entrée non modifiée). * - `mergeJsonPatches(oursOps, theirsOps)` concatène si les paths sont disjoints, * `null` si conflit (au moins une op des deux côtés sur le même path). * * JSON Pointer (RFC 6901) avec escape `~0` → `~` et `~1` → `/`. */ import type { JsonPatchOp } from "./types.js"; /** * Parse un JSON Pointer en tableau de tokens. Le pointer racine `""` retourne * `[]`. Chaque token est ré-échappé : `~0` → `~`, `~1` → `/`. */ export declare function parseJsonPointer(pointer: string): string[]; /** * Construit un JSON Pointer depuis un tableau de tokens. Échappe `~` et `/`. */ export declare function buildJsonPointer(tokens: ReadonlyArray): string; /** Type minimum pour parcourir un JSON. `null` est une valeur valide (pas une absence). */ type JsonValue = unknown; /** * Applique une séquence d'opérations RFC 6902 à un document. Retourne le * nouveau document (l'entrée n'est pas modifiée). Lance une `Error` si une * opération réfère à un path inexistant (sauf `add` qui crée). */ export declare function applyJsonPatch(doc: JsonValue, ops: ReadonlyArray): JsonValue; /** * Calcule la séquence d'ops RFC 6902 qui transforme `base` en `target`. * * Stratégie : récursion structurelle. Sur les objets, on compare clé-par-clé * (ajout / remove / récursion). Sur les tableaux, on émet `replace` global * dès que les longueurs diffèrent ou qu'un élément à un index donné diffère — * pas de LCS-on-arrays ici (c'est le rôle des stratégies `set` / `ordered-list` * du registre, qui appellent `diffJson` à un niveau plus fin). */ export declare function diffJson(base: JsonValue, target: JsonValue): JsonPatchOp[]; /** Égalité structurelle (récursive) entre deux JSON values. */ export declare function jsonStructEqual(a: JsonValue, b: JsonValue): boolean; /** * Fusionne deux séquences d'ops. Si les paths sont disjoints (aucun path * touché par les deux), on retourne la concaténation `[...ours, ...theirs]`. * Sinon, on retourne `null` avec une liste des paths en conflit (utile pour * la `DecisionTrace`). * * Disjoint = aucun path d'`ours` n'est égal ni préfixe d'un path de `theirs`, * et vice versa. (Si `ours` modifie `/foo/bar` et `theirs` modifie `/foo`, ils * sont en conflit même si les chaînes ne sont pas identiques.) */ export declare function mergeJsonPatches(ours: ReadonlyArray, theirs: ReadonlyArray): { merged: JsonPatchOp[] | null; conflictingPaths: string[]; }; export {}; //# sourceMappingURL=json-patch.d.ts.map