json-conflict-resolver
Version:
A rules-based JSON conflict resolver that parses Git conflict markers, reconstructs ours/theirs, and merges with deterministic strategies — beyond line-based merges.
2 lines (1 loc) • 1.68 kB
JavaScript
import{c as z}from"./chunk-WFDJ25NC.mjs";import{b as C}from"./chunk-Q4E7EFS7.mjs";import{a as y}from"./chunk-ICS3PEIS.mjs";import{a as F}from"./chunk-IOL4YJZP.mjs";import{j as b}from"./chunk-HB6Q755Y.mjs";import{b as d,c as w}from"./chunk-AUIVUOKV.mjs";import{a as S}from"./chunk-3PFH3U2T.mjs";import{execSync as k}from"child_process";import s from"fs/promises";var N=new Map,I=async({ours:o,theirs:n,base:f,format:t,filePath:e,config:a,normalizedConfig:m,logger:g,autoStage:u=!1})=>{var i;let r=[],[l]=await Promise.all([z({ours:o,theirs:n,base:f,filePath:e,conflicts:r,path:"",ctx:{config:m,strategies:(i=m.customStrategies)!=null?i:{},_strategyCache:N},logger:g}),b(e,a.backupDir)]);if(g.debug(e,JSON.stringify({merged:l,conflicts:r},null,2)),r.length===0){let c=await S(t,l);if(await s.writeFile(e,c,"utf8"),u)try{k(`git add ${e}`)}catch(p){g.warn(e,`Failed to stage file: ${p}`)}return{success:!0,conflicts:[]}}else{let c=await F(l,o,n,t);return await Promise.all([s.writeFile(e,c,"utf8"),a.writeConflictSidecar?s.writeFile(`${e}.conflict.json`,JSON.stringify(r,null,2)):null]),{success:!1,conflicts:r}}},q=async(o,n,f,t={})=>{let e=await y(t.loggerConfig,t.debug),a=await C(t);e.debug("git-merge",`Merging files: ours=${o}, base=${n}, theirs=${f}`);let[m,g,u]=await Promise.all([s.readFile(o,"utf8"),s.readFile(n,"utf8").catch(()=>"{}"),s.readFile(f,"utf8")]),r=d({...a,filename:""}),[l,i]=await w(m,r),[c,p]=await Promise.all([g,u].map(T=>w(T,[i]).then(([$])=>$))),x=typeof i=="string"?i:i.name,{success:M}=await I({ours:l,theirs:p,base:c,format:x,filePath:o,config:t,normalizedConfig:a,logger:e,autoStage:!1});await e.flush(),process.exit(M?0:1)};export{I as a,q as b};