buddy-bot
Version:
Automated & optimized dependency updates for JavaScript & TypeScript projects. Like Renovate & Dependabot.
7 lines (5 loc) • 3.31 kB
JavaScript
// @bun
import{C as _}from"./chunk-5fv4yjx7.js";import{D as B,H as I}from"./chunk-cmr43ay2.js";function T(q){let G=q.split("/").pop()||"";if(["deps.yaml","dependencies.yaml","pkgx.yaml",".deps.yaml"].includes(G))return!0;let j=G.replace(/\.(yaml|yml)$/,"");return["deps","dependencies","pkgx",".deps"].includes(j)}async function x(q,G){try{if(!T(q))return null;let H=[];try{let w=await _(q);if(w&&typeof w==="object"){if(w.allDependencies&&Array.isArray(w.allDependencies)){for(let z of w.allDependencies)if(z.name&&z.constraint)H.push({name:z.name,currentVersion:z.constraint,type:"dependencies",file:q})}}}catch(w){console.warn(`ts-pkgx failed to parse ${q}, attempting fallback YAML parsing:`,w);try{H=await S(G,q)}catch(z){console.warn(`Fallback YAML parsing also failed for ${q}:`,z),H=[]}}let j=q.split("/").pop()||"";return{path:q,type:j,content:G,dependencies:H}}catch(H){return console.warn(`Failed to parse dependency file ${q}:`,H),null}}async function S(q,G){let H=[],j=q.split(`
`),w=!1;for(let z of j){let J=z.trim();if(J==="dependencies:"){w=!0;continue}if(w){if(J&&!z.startsWith(" ")&&!z.startsWith("\t")){w=!1;continue}let K=J.match(/^([\w@/-]+):\s*(.+)$/);if(K){let[,X,L]=K;H.push({name:X.trim(),currentVersion:L.trim(),type:"dependencies",file:G})}}}return H}async function U(q,G,H){try{if(!T(q))return console.log(`\u26A0\uFE0F updateDependencyFile: ${q} is not a dependency file, returning original content`),G;if(G.trim().startsWith("{")&&G.includes('"require"'))return console.log(`\u26A0\uFE0F updateDependencyFile: Content appears to be JSON (composer.json), but file is ${q}`),console.log(`Content preview: ${G.substring(0,200)}`),G;let j=G;for(let w of H){let z=w.name.replace(/\s*\(dev\)$/,"").replace(/\s*\(peer\)$/,"").replace(/\s*\(optional\)$/,""),J=new RegExp(`(\\s*\\b${z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b\\s*:\\s*)([^\\s#\\n\\r]+)(\\s*#.*)?`,"g"),K=j.match(J);if(K){let L=K[0].match(new RegExp(`(\\s*\\b${z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b\\s*:\\s*)([^\\s#\\n\\r]+)(\\s*#.*)?`));if(L){let $=L[1],Q=L[2],b=L[3]||"";if(((Y)=>{let R=["latest","*","main","master","develop","dev"],E=Y.toLowerCase().trim();return R.includes(E)})(Q)){console.log(`\u26A0\uFE0F Skipping update for ${z} - version "${Q}" should be respected`);continue}let Z=Q.match(/^(\D*)/),A=Z?Z[1]:"",O=/^[\^~>=<]/.test(w.newVersion)?w.newVersion:`${A}${w.newVersion}`,W=`${$}${O}${b}`;j=j.replace(J,W)}}}return j}catch(j){return console.warn(`Failed to update dependency file ${q}:`,j),G}}async function C(q){let G=[],H=new Map;for(let j of q)if(T(j.file)){if(!H.has(j.file))H.set(j.file,[]);H.get(j.file).push(j)}for(let[j,w]of H)try{let z=await import("fs");if(z.existsSync(j)){let J=z.readFileSync(j,"utf-8"),K=await U(j,J,w);if(K!==J)G.push({path:j,content:K,type:"update"}),console.log(`\u2705 Generated update for ${j} with ${w.length} package changes`);else console.log(`\u2139\uFE0F No changes needed for ${j} - versions already up to date`)}else console.warn(`\u26A0\uFE0F Dependency file ${j} does not exist`)}catch(z){console.warn(`Failed to generate updates for dependency file ${j}:`,z)}return G}export{U as updateDependencyFile,x as parseDependencyFile,T as isDependencyFile,C as generateDependencyFileUpdates};
export{T as A,x as B};
//# debugId=98F9A21EC35AD32A64756E2164756E21