UNPKG

pastoralist

Version:

A tool to watch over node module resolutions and overrides

17 lines 131 kB
import{createRequire as Ws}from"node:module";var Ys=Ws(import.meta.url);var mr=[0,128,0],zs=[210,180,140],Xs=(e,t,r)=>[Math.round(e[0]+(t[0]-e[0])*r),Math.round(e[1]+(t[1]-e[1])*r),Math.round(e[2]+(t[2]-e[2])*r)],it=(e)=>{let t=e.split(""),r=t.length;if(r===0)return"";if(r===1)return`${ue(...mr)}${e}${h.RESET}`;return t.map((n,s)=>{if(n===" ")return n;let o=s/(r-1),[a,c,u]=Xs(mr,zs,o);return`${ue(a,c,u)}${n}`}).join("")+h.RESET};var R=process.env.DEBUG==="true"||!1,nt="\uD83E\uDDD1‍\uD83C\uDF3E",qs="\uD83D\uDC11";var Qs="•",Zs=" ",Jg=`${Zs}${Qs} `;var st="Pastoralist:",h={RESET:"\x1B[0m",BOLD:"\x1B[1m",CLEAR_LINE:"\r\x1B[K",HIDE_CURSOR:"\x1B[?25l",SHOW_CURSOR:"\x1B[?25h",FG_GREEN:"\x1B[32m",FG_RED:"\x1B[31m",FG_YELLOW:"\x1B[33m",FG_GOLD:"\x1B[93m",FG_ORANGE:"\x1B[38;5;208m",FG_CYAN:"\x1B[36m",FG_GRAY:"\x1B[90m",FG_WHITE:"\x1B[97m"},ue=(e,t,r)=>`\x1B[38;2;${e};${t};${r}m`,Js=h.BOLD,eo=h.FG_GOLD,to=h.RESET,em=`${nt} ${it("Pastoralist")} is scanning overrides...`,tm=`${Js}${eo}The herd is safe!${to} ${qs}`,yr="rc-file-suggestion",fr="Your pastoralist config is getting large (>10 lines). Consider moving it to a .pastoralistrc file using: pastoralist init --useRcConfigFile",Ce={MOCK_MODE:"PASTORALIST_MOCK_SECURITY",FORCE_VULNERABLE:"MOCK_FORCE_VULNERABLE",MOCK_FILE:"MOCK_ALERTS_FILE",GITHUB_TOKEN:"GITHUB_TOKEN"};var Sr=(e,t,r)=>{return(i,n,...s)=>{if(!t)return;let o=`${st}[${r}][${n}] ${i}`;console[e](o,...s)}},ro=(e)=>{return(t,r,...i)=>{let n=`${st}[${e}][${r}] ${t}`;console.warn(n,...i)}},vr=" ",m=({file:e,isLogging:t=!1})=>({debug:Sr("debug",t,e),error:Sr("error",t,e),warn:ro(e),print:(r)=>console.log(r),line:(r)=>console.log(` `+r),indent:(r)=>console.log(vr+r),item:(r,i)=>console.log(`${vr}${r}. ${i}`)});var br=20,Ar=10;var Or=3;var S=(e)=>`${h.FG_GREEN}${e}${h.RESET}`,x=(e)=>`${h.FG_RED}${e}${h.RESET}`,v=(e)=>`${h.FG_YELLOW}${e}${h.RESET}`,Ee=(e)=>`${h.FG_GOLD}${e}${h.RESET}`;var p=(e)=>`${h.FG_CYAN}${e}${h.RESET}`,y=(e)=>`${h.FG_GRAY}${e}${h.RESET}`;var U=(e,t)=>{return`\x1B]8;;${e}\x07${t||e}\x1B]8;;\x07`};var Pr=80,Tr=3;var ot=new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),Cr=/\[(0)?m/,at=/\p{Emoji_Presentation}/u,P={topLeft:"┌",topRight:"┐",bottomLeft:"└",bottomRight:"┘",horizontal:"─",vertical:"│"},W=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],Re=80,ct=604800000,Er=50,Rr=80,xr=60,ut=4,wr=[255,215,0],kr=[255,255,255],_r=0.25,lt=20,Ir=2,xe=50;var io=Tr,we=()=>{return process.stdout.columns||Pr},L=(e)=>{let t=e.replace(ot,"");if(typeof Intl<"u"&&Intl.Segmenter){let s=new Intl.Segmenter("en",{granularity:"grapheme"}),o=Array.from(s.segment(t)),a=o.filter((c)=>at.test(c.segment)).length;return o.length+a}let i=Array.from(t),n=i.filter((s)=>at.test(s)).length;return i.length+n},dt=(e,t,r="left")=>{let i=L(e),n=Math.max(0,t-i),s=" ".repeat(n);if(r==="left")return e+s;return s+e},no=(e)=>Cr.test(e),so=(e,t)=>Object.assign({},e,{result:e.result+t,hasOpenAnsi:!no(t)}),oo=(e,t,r)=>{let i=r-3-e.visibleCount,n=e.result+t.substring(0,i);return Object.assign({},e,{result:n,isTruncated:!0})},Lr=(e,t,r)=>{let i=r-3-e.visibleCount;if(t.length>i)return oo(e,t,r);let n=e.result+t,s=e.visibleCount+t.length;return Object.assign({},e,{result:n,visibleCount:s})},ao=()=>({result:"",visibleCount:0,hasOpenAnsi:!1,isTruncated:!1}),Vr=(e)=>{if(e.hasOpenAnsi)return e.result+"\x1B[0m...";return e.result+"..."},co=(e)=>Array.from(e.matchAll(ot),(t)=>t),uo=(e,t,r)=>{let i=t[r-1],n=i?i.index+i[0].length:0;return e.substring(n,t[r].index)},lo=(e,t,r,i)=>{let n=Lr(e,t,i);if(n.isTruncated)return n;return so(n,r)},po=(e,t,r)=>t.reduce((i,n,s)=>{if(i.isTruncated)return i;let o=uo(e,t,s);return lo(i,o,n[0],r)},ao()),ho=(e,t)=>{let r=t[t.length-1];if(!r)return e;return e.substring(r.index+r[0].length)},go=(e,t)=>{if(L(e)<=t)return e;if(t<=3)return".".repeat(t);let i=co(e),n=po(e,i,t);if(n.isTruncated)return Vr(n);let s=ho(e,i),o=Lr(n,s,t);if(o.isTruncated)return Vr(o);return o.result};var Dr=(e,t=io)=>{return" ".repeat(t)+e};var mo=(e)=>`${P.topLeft}${P.horizontal.repeat(e-2)}${P.topRight}`,yo=(e,t)=>{let r=L(t),i=Math.max(0,e-5-r),n=P.horizontal.repeat(i);return`${P.topLeft}${P.horizontal} ${t} ${n}${P.topRight}`},fo=(e,t)=>{if(t)return yo(e,t);return mo(e)},ke=(e,t={})=>{let r=t.width??we()-2,i=t.padding??1,n=r-2-i*2,s=" ".repeat(i),o=P.horizontal.repeat(r-2),a=fo(r,t.title),c=`${P.bottomLeft}${o}${P.bottomRight}`,u=e.map((l)=>{let g=go(l,n),b=dt(g,n);return`${P.vertical}${s}${b}${s}${P.vertical}`});return[a].concat(u,c)};var So={green:S,yellow:v,red:x,cyan:p,gray:y},Nr=(e,t)=>{let r=Math.max(0,t-L(e));return e+" ".repeat(r)},vo=(e,t)=>{let r=Math.max(0,t-L(e));return" ".repeat(r)+e},bo=(e,t)=>`+-${"-".repeat(e)}-+-${"-".repeat(t)}-+`,Ao=(e,t,r,i,n)=>{let s=vo(t,i),o=n?So[n](s):s;return`| ${Nr(e,r)} | ${o} |`},Oo=(e,t,r)=>{let i=e.reduce((s,o)=>Math.max(s,L(o.label)),0),n=e.reduce((s,o)=>Math.max(s,L(String(o.value))),0);return{labelWidth:Math.max(t,i),valueWidth:Math.max(r,n)}},Po=(e,t,r)=>{let i=t+r+Or;return`| ${Nr(e,i)} |`},To=(e,t={})=>{let{title:r,minLabelWidth:i=br,minValueWidth:n=Ar}=t,{labelWidth:s,valueWidth:o}=Oo(e,i,n),a=bo(s,o),c=r?[a,Po(r,s,o),a]:[a],u=e.map((l)=>Ao(l.label,String(l.value),s,o,l.color));return c.concat(u,[a]).join(` `)};var Mr=(e=process.stdout)=>({write:(t)=>e.write(t),writeLine:(t)=>e.write(`${t} `),clearLine:()=>e.write(h.CLEAR_LINE),hideCursor:()=>e.write(h.HIDE_CURSOR),showCursor:()=>e.write(h.SHOW_CURSOR)}),f=Mr();var Co="▪▫▪ Pastoralist",d={success:S("●"),error:x("■"),warning:v("▲"),info:p("◆"),arrow:p("▸"),bullet:y("▫"),check:S("●"),CHECK:S("✓"),SHIELD:p("⬢"),step:p("▶"),section:p("►"),search:p("◇"),edit:v("◆"),folder:p("▸"),skip:y("○"),help:p("◇"),hint:v("\uD83D\uDCA1")},Eo={success:d.success,error:d.error,warning:d.warning,info:d.info,step:d.step,save:d.arrow,next:d.bullet},Ro={config:`${d.step} Step 1: Configuration Location`,workspace:`${d.step} Step 2: Workspace Configuration`,security:`${d.step} Step 3: Security Configuration`};var pt=(e,t,r,i=f)=>{let n=e[t];i.clearLine(),i.write(`${n} ${r}`)},Y=(e)=>{let t=e.interval;if(t!==null)clearInterval(t);return Object.assign({},e,{interval:null,isSpinning:!1})},ht=(e,t)=>{return Object.assign({},e,{text:t})},gt=(e)=>{let t=(e.frameIndex+1)%W.length;return Object.assign({},e,{frameIndex:t})},mt=(e,t=f)=>{let r=setInterval(()=>{pt(W,e.frameIndex,e.text,t),Object.assign(e,gt(e))},Re);return Object.assign({},e,{interval:r,isSpinning:!0})},Z=(e,t,r=f)=>{r.clearLine(),r.writeLine(`${e} ${t}`)},yt=(e,t=f)=>{if(e.isSpinning)return w(e,t);t.hideCursor();let i=mt(e,t);return Object.assign(e,i),w(e,t)},ft=(e,t=f)=>{if(!e.isSpinning)return w(e,t);let i=Y(e);return Object.assign(e,i),t.clearLine(),t.showCursor(),w(e,t)},St=(e,t,r=f)=>{let i=Y(e);Object.assign(e,i);let n=t||e.text;return Z(d.success,n,r),r.showCursor(),w(e,r)},vt=(e,t,r=f)=>{let i=Y(e);Object.assign(e,i);let n=t||e.text;return Z(d.error,n,r),r.showCursor(),w(e,r)},bt=(e,t,r=f)=>{let i=Y(e);Object.assign(e,i);let n=t||e.text;return Z(d.info,n,r),r.showCursor(),w(e,r)},At=(e,t,r=f)=>{let i=Y(e);Object.assign(e,i);let n=t||e.text;return Z(d.warning,n,r),r.showCursor(),w(e,r)},xo=(e,t,r=f)=>{let i=ht(e,t);return Object.assign(e,i),w(e,r)},w=(e,t=f)=>{return{start:()=>yt(e,t),stop:()=>ft(e,t),succeed:(r)=>St(e,r,t),fail:(r)=>vt(e,r,t),info:(r)=>bt(e,r,t),warn:(r)=>At(e,r,t),update:(r)=>xo(e,r,t)}},wo=(e,t=f)=>{return w({text:e,isSpinning:!1,frameIndex:0,interval:null},t)},Fr=wo;var ko=(e,t,r)=>[Math.round(e[0]+(t[0]-e[0])*r),Math.round(e[1]+(t[1]-e[1])*r),Math.round(e[2]+(t[2]-e[2])*r)],_e=(e,t)=>{let r=e.split(""),i=r.length;if(i===0)return"";let s=r.map((a,c)=>{if(a===" ")return a;let l=c/i,g=Math.abs(l-t),b=Math.min(g,1-g),$=Math.max(0,1-b/_r),[ce,js,Ks]=ko(wr,kr,$);return`${ue(ce,js,Ks)}${a}`});return h.BOLD+s.join("")+h.RESET},_o=(e)=>{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)},Io=(e,t)=>{return Array.from({length:t},()=>e).flat()},Vo=(e,t,r,i,n,s)=>{i.clearLine(),i.write(`${n}${_e(e,t)}${s}`),_o(r)},Ie=(e,t=xe,r=f,i="",n="",s=process.stdout.isTTY??!1)=>{let o=s,a=Array.from({length:lt},(c,u)=>u/lt);if(o)Io(a,Ir).forEach((u)=>Vo(e,u,t,r,i,n)),r.clearLine();r.writeLine(`${i}${_e(e,0)}${n}`)};var le={pipe:"│",branch:"├──",last:"└──",indent:" "},$r=" ",Ot=2;var{BOLD:Lo,RESET:Ve,FG_RED:Pt,FG_WHITE:Hr}=h,Le=(e)=>e!==void 0,Do={write:()=>{},writeLine:()=>{},clearLine:()=>{},hideCursor:()=>{},showCursor:()=>{}},No=(e)=>{if(e.quiet)return Do;return e.out||f},Mo=(e)=>{let t=e;return{get:()=>t,set:(r)=>{t=r}}},Fo=()=>({phase:"idle",ancestors:[],spinner:{active:!1,frame:0,text:"",interval:null},progress:{current:0,total:0}}),De=(e)=>e.map((t)=>{if(t)return`${le.pipe}${le.indent}`;return $r}).join(""),Tt=(e)=>{if(e)return le.last;return le.branch},$o=(...e)=>e.filter(Boolean).join(" "),Uo=(e,t,...r)=>$o(De(e)+Tt(t),...r),Ur=(e,t)=>{let r=e.get(),i=r.ancestors.concat(t);e.set(Object.assign({},r,{ancestors:i}))},Gr=(e)=>{let t=e.get(),r=t.ancestors.slice(0,-1);e.set(Object.assign({},t,{ancestors:r}))},Go=(e,t)=>({line:(r,...i)=>{let{ancestors:n}=t.get();e.writeLine(Uo(n,r,...i))},open:(r=!0)=>Ur(t,r),close:()=>Gr(t),nested:(r,i)=>{Ur(t,!r);try{i()}finally{Gr(t)}}}),Ho=(e,t)=>{let r=e.get(),i=Object.assign({},r.spinner,{frame:t});e.set(Object.assign({},r,{spinner:i}))},Bo=(e)=>{let r=(e.get().spinner.frame+1)%W.length;Ho(e,r)},jo=(e,t)=>setInterval(()=>{e(),t()},Re),Ko=(e)=>{if(e===null)return;clearInterval(e)},Wo=(e,t)=>{let r=t.get(),i=W[r.spinner.frame],n=De(r.ancestors);e.clearLine(),e.write(`${n}${i} ${r.spinner.text}`)},Yo=(e,t,r)=>{let i=e.get(),n=Object.assign({},i.spinner,{active:!0,text:t,interval:r});e.set(Object.assign({},i,{spinner:n}))},zo=(e)=>{let t=e.get(),r=Object.assign({},t.spinner,{active:!1,interval:null});e.set(Object.assign({},t,{spinner:r}))},Xo=(e,t,r)=>(i)=>{e.hideCursor();let n=jo(r,()=>Bo(t));Yo(t,i,n)},qo=(e,t)=>()=>{Ko(t.get().spinner.interval),zo(t),e.clearLine(),e.showCursor()},Qo=(e)=>()=>e.get().spinner.active,Zo=(e,t)=>{let r=()=>Wo(e,t);return{start:Xo(e,t,r),stop:qo(e,t),isActive:Qo(t),render:r}},Jo=(e)=>(t)=>{return e.stop(),t()},ea=(e)=>(t,r,i)=>{Ie(t,xe,e,r,i)},Br=(e)=>{let t=No(e),r=Mo(Fo()),i=Go(t,r),n=Zo(t,r),s=Jo(n),o=ea(t);return{out:t,state:r,tree:i,spinner:n,paused:s,completer:o}},jr=()=>["",`${nt} ${S("Pastoralist")}`,""].join(` `),Kr=(e,t,r)=>`${r} (${e}/${t})`,Wr=(e)=>{return`[${e.severity.toUpperCase()}] ${e.packageName}@${e.currentVersion}`},Yr=(e)=>{if(e)return d.warning;return d.error},zr=(e)=>{if(!e||e.length===0)return;return`CVE: ${e.join(", ")}`},ta=(e,t)=>{if(!e||!t)return"No fix available";return`Fix: upgrade to ${t}`},Xr=(e)=>{let t=zr(e.cves),r=ta(e.fixAvailable,e.patchedVersion);return[e.title,t,r,e.url].filter(Le)},qr=(e)=>`${e.packageName}@${e.version}`,Qr=(e,t)=>{if(t)return d.info;if(e)return d.warning;return d.success},ra=(e)=>{if(!e||e.length===0)return;return`Patches: ${e.join(", ")}`},ia=(e)=>{let t=Object.keys(e??{}).length;if(t===0)return;return`Used by: ${t} package${t===1?"":"s"}`},na=(e)=>{if(!e)return;if(typeof e==="object"&&e.reason)return`Kept: ${e.reason}`;return"Kept by user"},sa=(e)=>{if(!e)return;return`Potentially fixed in ${e}, maybe removable`},Zr=(e)=>{let t=zr(e.cves),r=ra(e.patches),i=ia(e.dependents),n=na(e.keep),s=sa(e.potentiallyFixedIn);return[e.reason,t,r,i,n,s].filter(Le)},Jr=(e)=>`${e.packageName}@${e.toVersion}`,oa=(e)=>{if(!e||e.length===0)return;return`Blocks ${e.join(", ")}`},ei=(e)=>{let t=`${e.fromVersion} → ${e.toVersion}`,r=oa(e.cves);return[t,r,e.reason].filter(Le)},ti=(e)=>`${e.packageName}@${e.version}`,Ct=(e,t,r)=>{if(e===1)return t;return r},aa=(e)=>{let t=Ct(e,"y","ies");return`${d.CHECK} ${e} vulnerabilit${t} fixed`},ca=(e)=>{let t=Ct(e,"","s");return`${d.CHECK} ${e} stale override${t} removed`},ua=(e)=>{let t=Ct(e,"","s");return`${d.SHIELD} ${e} package${t} protected`},ri=(e)=>[e.vulnerabilitiesFixed?aa(e.vulnerabilitiesFixed):void 0,e.staleOverridesRemoved?ca(e.staleOverridesRemoved):void 0,e.packagesProtected?ua(e.packagesProtected):void 0].filter(Le),ii=(e)=>{let t=y(" . ");return[`${d.error} ${e.severityCritical} crit`,`${d.warning} ${e.severityHigh} high`,`${d.info} ${e.severityMedium} med`,`${d.check} ${e.severityLow} low`,`${d.arrow} ${e.overridesTracked} tracked`,`${d.skip} ${e.overridesRemoved} removed`,`${e.packagesScanned} scanned`].join(t)},Et=(e,t)=>{let r=t.length-1;t.forEach((i,n)=>e.line(n===r,i))},Rt=(e,t,r)=>{if(r.length===0)return;e.nested(t,()=>Et(e,r))},la=(e,t)=>{let r=Object.keys(t),i=r.length-1;r.forEach((n,s)=>{e.line(s===i,`${n}: ${t[n]}`)})},ni=(e,t,r)=>{if(Object.keys(t).length===0)return;e.line(r,"Overrides"),e.nested(r,()=>la(e,t))},si=(e,t)=>{if(!t||t.length===0)return;let i=t.length-1;e.line(!0,"Changes"),e.nested(!0,()=>{t.forEach((n,s)=>{e.line(s===i,n)})})},da=(e)=>{if(e%2===0)return Pt;return Hr},pa=(e)=>Array.from({length:e},(t,r)=>{return`${da(r)}-${Ve}`}).join(""),ha=(e)=>{let t=" ".repeat(Ot);return t+e+t},ga=(e)=>`${Pt}|${Ve}${Lo}${Hr}${e}${Ve}${Pt}|${Ve}`,oi=(e)=>{let t=L(e)+Ot*2,r=pa(t+2),i=ga(ha(e));return[r,i,r]};class ai{context;constructor(e){this.context=e}banner(){return this.context.paused(()=>this.context.out.writeLine(jr())),this}startPhase(e,t,r=!1){return this.context.paused(()=>{let i=this.context.state.get();this.context.state.set(Object.assign({},i,{phase:e})),this.context.tree.line(r,t),this.context.tree.open(!r)}),this}progress(e,t,r){let i=Kr(e,t,r);if(this.updateProgressState(e,t,i),e===1&&!this.context.spinner.isActive())this.context.spinner.start(i);return this}item(e,t=!1){return this.context.paused(()=>this.context.tree.line(t,d.success,e)),this}vulnerability(e,t=!1){return this.context.paused(()=>{let r=Yr(e.fixAvailable),i=Wr(e),n=Xr(e);this.context.tree.line(t,r,i),this.context.tree.nested(t,()=>Et(this.context.tree,n))}),this}override(e,t=!1){return this.context.paused(()=>{let r=Qr(e.isSecurityFix,e.keep),i=qr(e),n=Zr(e);this.context.tree.line(t,r,i),Rt(this.context.tree,t,n)}),this}securityFix(e,t=!1){return this.context.paused(()=>{let r=Jr(e),i=ei(e);this.context.tree.line(t,d.success,r),Rt(this.context.tree,t,i)}),this}removedOverride(e,t=!1){return this.context.paused(()=>{let r=ti(e);this.context.tree.line(t,d.info,r),this.context.tree.nested(t,()=>this.context.tree.line(!0,e.reason))}),this}endPhase(e){return this.context.paused(()=>{if(e)this.context.tree.line(!0,d.success,e);this.context.tree.close()}),this}summary(e,t){return this.context.paused(()=>{let r=Boolean(t&&t.length>0);ni(this.context.tree,e,!r),si(this.context.tree,t)}),this}executiveSummary(e){return this.context.paused(()=>{ri(e).forEach((r)=>this.context.out.writeLine(r))}),this}compactSummary(e){return this.context.paused(()=>{this.context.out.writeLine(ii(e))}),this}complete(e,t=""){return this.context.paused(()=>{let r=this.context.state.get();this.context.state.set(Object.assign({},r,{phase:"complete",ancestors:[]}));let i=De([])+Tt(!0);this.context.completer(e,i,t)}),this}notice(e){return this.context.paused(()=>{let t=oi(e);this.context.out.writeLine(""),t.forEach((r)=>this.context.out.writeLine(r)),this.context.out.writeLine("")}),this}stop(){return this.context.spinner.stop(),this}updateProgressState(e,t,r){let i=this.context.state.get(),n=Object.assign({},i.spinner,{text:r});this.context.state.set(Object.assign({},i,{spinner:n,progress:{current:e,total:t}}))}}var ci=(e={})=>new ai(Br(e));import{existsSync as mi,mkdirSync as wa,readFileSync as ka,writeFileSync as _a}from"fs";import{join as Ia}from"path";class z{max;ttl;cache;head;tail;constructor(e){this.max=e.max,this.ttl=e.ttl,this.cache=new Map,this.head=null,this.tail=null}get(e){let t=this.cache.get(e);if(!t)return;if(this.isExpired(t)){this.delete(e);return}return this.moveToFront(t),t.value}set(e,t){let r=this.cache.get(e);if(r){r.value=t,r.timestamp=Date.now(),this.moveToFront(r);return}let i={key:e,value:t,prev:null,next:null,timestamp:Date.now()};if(this.cache.set(e,i),this.addToFront(i),this.cache.size>this.max)this.evictLRU()}has(e){let t=this.cache.get(e);if(!t)return!1;if(this.isExpired(t))return this.delete(e),!1;return!0}delete(e){let t=this.cache.get(e);if(!t)return!1;return this.removeNode(t),this.cache.delete(e),!0}clear(){this.cache.clear(),this.head=null,this.tail=null}get size(){return this.cache.size}keys(){return Array.from(this.cache.keys())}values(){let e=[],t=this.head;while(t){if(!this.isExpired(t))e=e.concat(t.value);t=t.next}return e}isExpired(e){let t=this.ttl;if(t===void 0)return!1;return Date.now()-e.timestamp>t}moveToFront(e){if(e===this.head)return;this.removeNode(e),this.addToFront(e)}addToFront(e){if(e.next=this.head,e.prev=null,this.head)this.head.prev=e;if(this.head=e,!this.tail)this.tail=e}removeNode(e){if(e.prev)e.prev.next=e.next;else this.head=e.next;if(e.next)e.next.prev=e.prev;else this.tail=e.prev}evictLRU(){if(!this.tail)return;this.cache.delete(this.tail.key),this.removeNode(this.tail)}}import{existsSync as li,mkdirSync as di,readFileSync as pi,writeFileSync as hi,renameSync as ma,readdirSync as ya,statSync as fa,unlinkSync as gi}from"fs";import{join as T,dirname as Sa,basename as va}from"path";import{homedir as xt,tmpdir as ba}from"os";import{createHash as Aa}from"crypto";var Ne=1,M={REGISTRY:"registry",OSV:"osv",TREE:"tree",ALERTS:"alerts",DECISIONS:"decisions"};var D={REGISTRY:86400000,OSV:2592000000,TREE:2592000000,ALERTS:21600000,DECISIONS:21600000},F={REGISTRY:1,OSV:1,TREE:1,ALERTS:1,DECISIONS:1},ui=["bun.lock","bun.lockb","yarn.lock","pnpm-lock.yaml","package-lock.json"];var J=(e=process.cwd())=>{let t=ui.find((r)=>li(T(e,r)));if(!t)return"no-lockfile";try{let r=pi(T(e,t),"utf8");return Aa("sha256").update(r).digest("hex").slice(0,16)}catch{return"no-lockfile"}},Oa=(e)=>{try{di(e,{recursive:!0});let t=`.write-test-${process.pid}-${Math.random().toString(36).slice(2)}`,r=T(e,t);return hi(r,""),gi(r),!0}catch{return!1}},Pa=(e)=>{return e.cacheDir??process.env.PASTORALIST_CACHE_DIR},Ta=(e)=>{return T(e,"node_modules",".cache","pastoralist")},Ca=()=>{if(process.platform==="darwin")return T(xt(),"Library","Caches","pastoralist");if(process.platform==="win32"){let t=process.env.LOCALAPPDATA;if(t)return T(t,"pastoralist","Cache");return T(xt(),"AppData","Local","pastoralist","Cache")}let e=process.env.XDG_CACHE_HOME;if(e)return T(e,"pastoralist");return T(xt(),".cache","pastoralist")},Ea=()=>{let e=Ca(),t=T(ba(),"pastoralist","cache");return[e,t]},Ra=(e)=>{return[Ta(e)].concat(Ea()).find(Oa)},C=(e={})=>{let t=Pa(e);if(t)return t;let r=Ra(e.root??process.cwd());if(r)return r;throw Error("Unable to create a writable cache directory")},Me=(e,t={})=>{try{let r=t.keep??5,i=t.maxAgeMs??604800000,n=Date.now();ya(e).filter((o)=>o.includes(".backup-")).map((o)=>{let a=T(e,o),c=fa(a).mtimeMs;return{path:a,mtime:c}}).sort((o,a)=>a.mtime-o.mtime).forEach((o,a)=>{let c=n-o.mtime>i,u=a>=r;if(c||u)gi(o.path)})}catch{return}};class k{filePath;ttl;version;maxEntries;enabled;data=null;constructor(e,t){if(this.filePath=T(t.dir,`${e}.json`),this.ttl=t.ttl,this.version=t.version,this.maxEntries=t.maxEntries??1000,this.enabled=t.enabled??!0,this.enabled)di(t.dir,{recursive:!0})}empty(){return{schema:Ne,version:this.version,entries:{}}}load(){if(this.data)return this.data;if(!li(this.filePath))return this.data=this.empty(),this.data;try{let e=pi(this.filePath,"utf8"),t=JSON.parse(e),r=t?.schema===Ne,i=t?.version===this.version;if(!r||!i)return this.data=this.empty(),this.data;return this.data=t,this.data}catch{return this.data=this.empty(),this.data}}flush(e){let t=Sa(this.filePath),r=Math.random().toString(36).slice(2),i=`${va(this.filePath)}.tmp-${process.pid}-${r}`,n=T(t,i);hi(n,JSON.stringify(e)),ma(n,this.filePath),this.data=e}isExpired(e){if(this.ttl<=0)return!1;return Date.now()-e.t>this.ttl}get(e){if(!this.enabled)return;let t=this.load(),r=t.entries[e];if(!r)return;if(this.isExpired(r)){let{[e]:i,...n}=t.entries;this.flush(Object.assign({},t,{entries:n}));return}return r.v}set(e,t){if(!this.enabled)return;let r=this.load(),i=Object.assign({},r.entries,{[e]:{v:t,t:Date.now()}}),n=Object.entries(i),s=n.length>this.maxEntries,o=n.slice().sort((c,u)=>u[1].t-c[1].t),a=s?Object.fromEntries(o.slice(0,this.maxEntries)):i;this.flush(Object.assign({},r,{entries:a}))}has(e){return this.get(e)!==void 0}delete(e){if(!this.enabled)return;let t=this.load(),{[e]:r,...i}=t.entries;this.flush(Object.assign({},t,{entries:i}))}clear(){if(!this.enabled)return;this.flush(this.empty())}prune(){if(!this.enabled)return 0;let e=this.load(),t=Object.keys(e.entries).length,r=Object.fromEntries(Object.entries(e.entries).filter(([,n])=>!this.isExpired(n))),i=Object.keys(r).length;if(t!==i)this.flush(Object.assign({},e,{entries:r}));return t-i}}var yi=()=>C(),fi=()=>Ia(yi(),"hints.json");function Si(){let e=fi();if(!mi(e))return{};try{return JSON.parse(ka(e,"utf8"))}catch{return{}}}function Va(e){let t=yi(),r=fi();try{if(!mi(t))wa(t,{recursive:!0});_a(r,JSON.stringify(e))}catch{return}}function La(e,t=ct){let i=Si()[e];if(!i)return!0;return Date.now()-i>t}function Da(e){let t=Si();t[e]=Date.now(),Va(t)}function Na(e,t){let r=(n,s)=>{if(!s)return n;return n.concat(s)},i=e.split(" ").reduce((n,s)=>{let{current:o}=n,a=o?o+" "+s:s;if(a.length<=t)return Object.assign({},n,{current:a});return{lines:r(n.lines,o),current:s}},{lines:[],current:""});return r(i.lines,i.current)}function Ma(e,t=Er){let r=t-4,i=r-3,n=Na(e,i),s=Ee("+"+"-".repeat(t-2)+"+"),o=n.map((a,c)=>{let u=c===0?d.hint+" ":" ",g="| "+dt(u+a,r)+" |";return Ee(g)});return[s].concat(o,s).join(` `)}function wt(e,t,r=ct,i=f){if(!La(e,r))return;i.writeLine(""),i.writeLine(Ma(t)),i.writeLine(""),Da(e)}var vi=()=>Math.min(we()-ut,Rr),Fa=()=>Math.min(we()-ut,xr),$a=(e,t,r)=>{if(t===0||t===r-1)return v(e);return e.replace(/^│/,v("│")).replace(/│$/,v("│"))},kt=(e)=>e.map((t,r)=>$a(t,r,e.length)),Ua=(e,t)=>{return` ${p(`${t+1}.`)} ${e.name}`};function Ga(e,t=!0){let r=t?S("●"):y("○"),i=t?S("Y"):"y",n=!t?S("N"):"n",s=t?S("[enter for yes]"):S("[enter for no]");return`${r} ${e} (${i}/${n}) ${y(s)}: `}function Ha(e,t){let r=[`${p("?")} ${e}`,""].concat(t.map(Ua)),i=ke(r,{title:v("Configuration"),padding:1,width:vi()});return kt(i).join(` `)}function Ba(){return` ${p("▶")} Enter your choice ${y("(number)")}: `}function ja(e,t){let r=p("◆");if(t){let i=y(`[enter for "${t}"]`);return`${r} ${e} ${i}: `}return`${r} ${e}: `}function Ka(e,t){let i=[`${p(`▶ Step ${e}:`)} ${t}`],n=ke(i,{padding:1,width:Fa()});return` ${kt(n).join(` `)} `}function Wa(e){return Dr(y(`${d.info} ${e}`),3)}function Ya(e,t,r){let i=r||S(`✓ ${e}`),n=t.map((a,c)=>` ${p(`${c+1}.`)} ${a}`),s=[i,""].concat(n),o=ke(s,{title:v("Next Steps"),padding:2,width:vi()});return kt(o).join(` `)}var bi=(e)=>e.split("-")[0],Ai=(e)=>{let t=parseInt(e,10);return isNaN(t)?0:t};function A(e,t){let r=bi(e),i=bi(t),n=r.split(".").map(Ai),s=i.split(".").map(Ai),o=Math.max(n.length,s.length);return Array.from({length:o}).reduce((a,c,u)=>{if(a!==0)return a;let l=n[u]||0,g=s[u]||0;return l-g},0)}class _t{concurrency;running;queue;constructor(e){if(e<1)throw Error("Concurrency must be at least 1");this.concurrency=e,this.running=0,this.queue=[]}run(e){return new Promise((t,r)=>{let i={task:e,resolve:t,reject:r};this.queue=this.queue.concat(i),this.process()})}async process(){let e=this.running>=this.concurrency,t=this.queue.length===0;if(e||t)return;this.running++;let[i,...n]=this.queue;if(this.queue=n,!i){this.running--;return}try{let s=await i.task();i.resolve(s)}catch(s){i.reject(s)}finally{this.running--,this.process()}}get queueSize(){return this.queue.length}get activeCount(){return this.running}clear(){this.queue=[]}}var It=(e)=>{let t=new _t(e);return(r)=>t.run(r)};var Oi=/[.+^${}()|[\]\\]/g,Pi=/\*\*/g,Ti=/\*/g,Ci=/\?/g,Ei="{{GLOBSTAR}}",Ri=/{{GLOBSTAR}}/g,xi=200,wi=["node_modules",".git"],de={retries:3,factor:2,minTimeout:1000,maxTimeout:30000},ki="https://registry.npmjs.org",_i=5,Ii=1000,Vi={retries:2,minTimeout:500,maxTimeout:3000};var Qa=({retries:e=de.retries,factor:t=de.factor,minTimeout:r=de.minTimeout,maxTimeout:i=de.maxTimeout,onFailedAttempt:n,onRetry:s})=>{return{retries:e,factor:t,minTimeout:r,maxTimeout:i,onFailedAttempt:n,onRetry:s}},Za=(e)=>{if(e instanceof Error)return e;return Error(String(e))},Ja=(e,t,r)=>{let i=e;return i.attemptNumber=t,i.retriesLeft=r,i},ec=(e,t,r,i)=>{let n=r*Math.pow(t,e-1);return Math.min(n,i)},tc=(e)=>{return new Promise((t)=>setTimeout(t,e))},rc=(e,t)=>{return t-e},ic=(e)=>{return e>=0},nc=(e,t,r)=>{return Ja(Za(e),t,Math.max(0,r))},sc=async(e,t)=>{if(!t.onFailedAttempt)return;await t.onFailedAttempt(e)},oc=(e,t,r)=>{if(!r.onRetry)return;r.onRetry(e,t)},ac=async(e,t)=>{let r=ec(e,t.factor,t.minTimeout,t.maxTimeout);await tc(r)},cc=async(e,t,r,i)=>{let n=rc(i,t.retries),s=nc(r,i,n);if(!ic(n))throw s;return await sc(s,t),oc(i,s.retriesLeft,t),await ac(i,t),Li(e,t,i+1)},Li=async(e,t,r)=>{try{return await e()}catch(i){return cc(e,t,i,r)}},G=async(e,t={})=>{return Li(e,Qa(t),1)};import{execFile as uc}from"node:child_process";import{promisify as lc}from"util";var dc=lc(uc),pc=()=>new Date().toISOString(),hc=async(e)=>{let{stdout:t}=await dc("git",["log","--diff-filter=A","--follow","--format=%aI","-1","--",e]);return t.trim()},gc=async(e="package.json",t=pc)=>{try{let r=await hc(e);return r.length>0?r:t()}catch{return t()}};var mc=It(_i),Vt=null,yc=()=>{if(!Vt)Vt=new k(M.REGISTRY,{dir:C(),ttl:D.REGISTRY,version:F.REGISTRY,maxEntries:Ii});return Vt};var Di=(e)=>{let t=e.split(".")[0];return parseInt(t,10)||0},fc=(e)=>{return e.includes("-")},Sc=async(e)=>{let t=yc(),r=`pkg:${e}`,i=t.get(r);if(i!==void 0)return i;try{let n=await G(async()=>{let s=await fetch(`${ki}/${encodeURIComponent(e)}`,{headers:{Accept:"application/json"}});if(!s.ok)throw Error(`Failed to fetch ${e}: ${s.status}`);return s.json()},Vi);return t.set(r,n),n}catch{return null}};var Ni=async(e,t)=>{let r=await Sc(e);if(!r)return null;if(!r.versions||typeof r.versions!=="object")return null;let n=Di(t),o=Object.keys(r.versions).filter((c)=>{let l=Di(c)===n,g=!fc(c),b=A(c,t)>=0;if(!l)return!1;if(!g)return!1;return b});if(o.length===0)return null;return o.slice().sort((c,u)=>A(u,c))[0]},vc=(e,t,r)=>{return r.findIndex((i)=>i.name===e.name)===t},bc=(e)=>{return[e.name,e.minVersion]},Ac=(e)=>{return e.filter(vc).map(bc)},Oc=([e,t])=>{return mc(async()=>{let r=await Ni(e,t);return{name:e,version:r}})},Pc=(e)=>{return Boolean(e.version)},Tc=(e)=>{let t=e.filter(Pc).map((r)=>[r.name,r.version]);return new Map(t)},Lt=async(e)=>{let t=await Promise.all(Ac(e).map((r)=>Oc(r)));return Tc(t)};import*as _ from"fs";import{dirname as Jc,resolve as X}from"path";import{execFile as eu}from"node:child_process";import{promisify as tu}from"util";import{readdirSync as Fi,existsSync as ee,statSync as Dt}from"node:fs";import{resolve as he,relative as Fe,join as Nt,isAbsolute as Cc}from"node:path";var pe=new Map,ge=(e)=>e.replaceAll("\\","/"),Ec=(e)=>{let s=e.replace(Oi,"\\$&").replace(Pi,Ei).replace(Ti,"[^/]*").replace(Ci,"[^/]").replace(Ri,".*");return new RegExp(`^${s}$`)},Rc=()=>{let e=pe.keys().next().value;if(e!==void 0)pe.delete(e)},xc=()=>{if(pe.size<xi)return;Rc()},Mt=(e)=>{let t=pe.get(e);if(t)return t;xc();let r=Ec(e);return pe.set(e,r),r},$i=(e)=>!e.includes("*")&&!e.includes("?"),Ui=(e,t)=>{let r=Cc(e)?e:he(t,e);return ge(Fe(t,r))},wc=(e,t)=>{if($i(t))return e===t;return Mt(t).test(e)},kc=(e)=>e.split("/").filter((t)=>!t.includes("*")&&t!=="").join("/"),_c=(e,t)=>t.some((r)=>{if(Mt(r).test(e))return!0;let n=kc(r);return n!==""&&e.includes(n)}),Gi=(e)=>wi.includes(e),Ft=(e,t)=>_c(e,t),Hi=(e,t,r)=>{if(!ee(e))return[];return Fi(e,{withFileTypes:!0}).flatMap((i)=>Ic(i,e,t,r))},Ic=(e,t,r,i)=>{let n=Nt(t,e.name),s=ge(Fe(r,n));if(Ft(s,i))return[];if(!e.isDirectory())return[s];if(Gi(e.name))return[];return Hi(n,r,i)},Vc=(e)=>Array.isArray(e)?e:[e],Lc=(e,t,r)=>r?he(t,e):e,Bi=(e)=>ge(e).split("/").filter((t)=>t!==""&&t!=="."),ji=(e)=>{let t=e.findIndex(Ki);if(t===-1)return e.length;return t},Ki=(e)=>e.includes("*")||e.includes("?"),Dc=(e,t)=>Mt(t).test(e),Wi=(e,t)=>t.length>0?he(e,...t):e,Nc=(e,t)=>{let r=Bi(e),i=ji(r),n=r.slice(0,i),s=r.slice(i),o=Wi(t,n);if(!ee(o))return;if(s.length===0)return;return{root:o,remainingSegments:s}},Mc=(e,t)=>({cwd:e,ignorePatterns:t}),Fc=(e)=>({candidates:[e],results:[]}),$c=(e,t,r)=>{let i=r.length-1;return{segment:e,isLast:t===i}},Yi=(e,t)=>ge(Fe(e,t)),$t=(e,t)=>!Ft(e,t),Uc=(e)=>ee(e)&&Dt(e).isDirectory(),Gc=(e)=>ee(e)&&!Dt(e).isDirectory(),Mi=(e,t)=>e.filter((r)=>r.type===t).map((r)=>r.path),Hc=(e,t)=>({candidates:Mi(t,"candidate"),results:e.concat(Mi(t,"result"))}),Bc=(e,t,r)=>{let i=Nt(e,t.segment),n=Yi(r.cwd,i);if(!$t(n,r.ignorePatterns))return[];if(t.isLast&&Gc(i))return[{type:"result",path:n}];if(!t.isLast&&Uc(i))return[{type:"candidate",path:i}];return[]},jc=(e,t,r,i)=>!t.isLast&&!Gi(e.name)&&$t(r,i),Kc=(e,t,r,i)=>{if(!Dc(e.name,r.segment))return[];let n=Nt(t,e.name),s=Yi(i.cwd,n);if(e.isDirectory()){if(!jc(e,r,s,i.ignorePatterns))return[];return[{type:"candidate",path:n}]}if(!r.isLast)return[];if(!$t(s,i.ignorePatterns))return[];return[{type:"result",path:s}]},Wc=(e,t,r)=>Fi(e,{withFileTypes:!0}).flatMap((i)=>Kc(i,e,t,r)),Yc=(e,t,r)=>{if(!ee(e))return[];if(!Ki(t.segment))return Bc(e,t,r);return Wc(e,t,r)},zc=(e,t,r,i,n)=>{if(e.candidates.length===0)return e;let s=$c(t,r,i),o=e.candidates.flatMap((a)=>Yc(a,s,n));return Hc(e.results,o)},Xc=(e,t,r)=>{let i=Nc(e,t);if(!i)return[];let n=Mc(t,r),s=Fc(i.root);return i.remainingSegments.reduce((a,c,u,l)=>zc(a,c,u,l,n),s).results},qc=(e,t,r)=>{if($i(e.pattern)){let c=he(t,e.pattern);if(!ee(c))return[];if(Dt(c).isDirectory())return[];let u=ge(Fe(t,c));if(Ft(u,r))return[];return[u]}if(!e.hasGlobStar)return Xc(e.pattern,t,r);let i=Bi(e.pattern),n=ji(i),s=i.slice(0,n),o=Wi(t,s);return Hi(o,t,r).filter((c)=>wc(c,e.pattern))},Qc=(e,t)=>e.map((r)=>{let i=Ui(r,t);return{pattern:i,hasGlobStar:i.includes("**")}}),Zc=(e,t,r)=>Array.from(new Set(e.flatMap((i)=>qc(i,t,r)))),me=(e,t={})=>{let{cwd:r=process.cwd(),ignore:i=[],absolute:n=!1}=t,s=he(r),o=Qc(Vc(e),s),a=i.map((c)=>Ui(c,s));return Zc(o,s,a).map((c)=>Lc(c,s,n)).sort()},zi=(e,t={})=>me(e,t);var qi=50,Qi=10485760,Zi=60000,Ji=/^[\w@][\w\-./]*@/gm,en=/^\s{2}\/[\w@]/gm;var ru=tu(eu),N=m({file:"packageJSON.ts",isLogging:R}),ye=null,te=null,iu=(e)=>{if(!ye)ye=new k(M.TREE,{dir:e??C(),ttl:D.TREE,version:F.TREE,maxEntries:qi});return ye},I=new z({max:500}),Af=()=>{return{size:I.size,keys:Array.from(I.keys())}},Of=()=>{let e=I.size;return I.clear(),N.debug(`Cache cleared. Had ${e} entries`,"forceClearCache"),e},$e=(e,t=process.cwd())=>{let r=X(t,e);return _.existsSync(r)},re=(e=process.cwd())=>{if($e("bun.lockb",e)||$e("bun.lock",e))return"bun";if($e("yarn.lock",e))return"yarn";if($e("pnpm-lock.yaml",e))return"pnpm";return"npm"},nu=(e)=>{return e?.resolutions!==void 0},su=(e)=>{return e?.overrides!==void 0},ou=(e)=>{return e?.pnpm?.overrides!==void 0},au=(e)=>{if(nu(e))return"resolutions";if(su(e))return"overrides";if(ou(e))return"pnpm";return null},cu=(e)=>{return{yarn:"resolutions",pnpm:"pnpm",npm:"overrides",bun:"overrides"}[e]},uu=(e,t)=>{return Object.assign({},e,{resolutions:t})},lu=(e,t)=>{let r=e.pnpm||{},i=Object.assign({},r,{overrides:t});return Object.assign({},e,{pnpm:i})},du=(e,t)=>{return Object.assign({},e,{overrides:t})},pu=(e,t,r)=>{if(r==="resolutions")return uu(e,t);if(r==="pnpm")return lu(e,t);if(r==="overrides")return du(e,t);return e},hu=(e)=>{try{let t=_.readFileSync(e,"utf8");return JSON.parse(t)}catch(t){N.error(`Invalid JSON at: ${e}`,"parseJsonFile",t);return}},fe=(e)=>{let t=X(e),r=I.get(t);if(r)return r;let i=hu(t);if(i)I.set(t,i);return i},gu=(e)=>{let t=Boolean(e.pastoralist?.overridePaths),r=Boolean(e.pastoralist?.resolutionPaths),i=Boolean(e.pastoralist?.security),n=Boolean(e.pastoralist?.depPaths);if(t)return!0;if(r)return!0;if(i)return!0;return n},Gt=(e)=>{let t=e.pastoralist?.depPaths,r=e.pastoralist?.overridePaths,i=e.pastoralist?.resolutionPaths,n=e.pastoralist?.security;return Object.assign({},t?{depPaths:t}:void 0,r?{overridePaths:r}:void 0,i?{resolutionPaths:i}:void 0,n?{security:n}:void 0)},mu=(e)=>{let{resolutions:t,overrides:r,pnpm:i,...n}=e;if(!i)return n;let{overrides:s,...o}=i,a=Object.keys(o).length>0;return Object.assign({},n,a?{pnpm:o}:void 0)},yu=(e)=>{if(!gu(e)){let{pastoralist:i,...n}=e;return n}let r=Gt(e);return Object.assign({},e,{pastoralist:r})},fu=(e,t)=>{let r=Gt(e),i=Object.assign({appendix:t},r);return Object.assign({},e,{pastoralist:i})},Su=(e)=>{let t=mu(e);return yu(t)},vu=(e)=>{let t=Gt(e),r=Object.keys(t).length>0,{pastoralist:i,...n}=e;if(!r)return n;return Object.assign({},n,{pastoralist:t})},bu=(e,t)=>{if(t&&Object.keys(t).length>0)return fu(e,t);return vu(e)},Au=(e)=>Object.keys(e).length>0,Ou=(e,t,r)=>{let i=au(e);if(i)return i;if(t)return null;let n=Jc(X(r));return cu(re(n))},Pu=(e,t,r,i,n)=>{let s=bu(e,t);if(!Au(r))return s;let o=Ou(s,i,n);return pu(s,r,o)},tn=(e)=>{return JSON.stringify(e,null,2)+` `},Tu=(e)=>{if(!e.pastoralist)return 0;return JSON.stringify(e.pastoralist,null,2).split(` `).length},Cu=(e)=>{return Tu(e)>10},Eu=(e)=>{try{let t=JSON.parse(e);return Boolean(t.name)}catch{return!1}},Ru=(e,t)=>{let r=X(e);if(!r.endsWith(".json")){N.error(`Invalid target file: ${r}`,"writeJsonFile");return}let n=X(process.cwd(),"package.json");if(r===n&&!Eu(t))return;_.writeFileSync(r,t)},xu=(e,t)=>{let r=t&&Object.keys(t).length>0,i=e&&Object.keys(e).length>0;return Boolean(r||i)},wu=({appendix:e,path:t,config:r,overrides:i,isTesting:n=!1})=>{if(!xu(e,i))return Su(r);return Pu(r,e,i||{},n,t)},ku=(e,t)=>{if(t){N.print(` [DRY RUN] No changes detected, skipping write.`);return}N.print(` [DRY RUN] Would write to package.json:`),N.print(e)},_u=(e,t,r)=>{if(R)N.debug(`Writing updated package.json: ${r}`,"updatePackageJSON");if(Ru(e,r),I.delete(X(e)),Cu(t))wt(yr,fr)},nn=({appendix:e,path:t,config:r,overrides:i,isTesting:n=!1,dryRun:s=!1,silent:o=!1})=>{let a=wu({appendix:e,path:t,config:r,overrides:i,isTesting:n});if(n)return a;let c=tn(a),u=tn(r),l=c===u;if(s&&!o)ku(c,l);if(l)return;if(s)return a;_u(t,a,c)},Iu=(e)=>{let t;try{t=JSON.parse(e)}catch(n){return N.debug("Failed to parse npm ls output","parseNpmLsOutput",n),{}}let r={},i=(n)=>{if(!(n&&typeof n==="object"))return;Object.entries(n).forEach(([o,a])=>{if(r[o]=!0,a&&typeof a==="object"&&"dependencies"in a)i(a.dependencies)})};if(t.dependencies)i(t.dependencies);return r},Vu=async(e=process.cwd())=>{try{let{stdout:t}=await ru("npm",["ls","--json","--all"],{cwd:e,encoding:"utf8",maxBuffer:Qi,timeout:Zi});return t}catch(t){let r=t;if(r.code===1&&r.stdout)return r.stdout;throw t}},Lu=(e)=>{let t=J(e),r=re(e),i=process.versions.node;return`tree:${t}:${r}:${i}`},Du=()=>{if(!te)te=new Map;return te},Nu=(e,t,r,i)=>(async()=>{try{let s=await(i||Vu)(r),o=Iu(s);return t.set(e,o),o}catch(n){return N.debug("Failed to get dependency tree","getDependencyTree",n),{}}finally{te?.delete(e)}})(),sn=async(e,t,r=process.cwd())=>{let i=Lu(r),n=iu(t),s=n.get(i);if(s)return s;let o=Du(),a=o.get(i);if(a)return a;let c=Nu(i,n,r,e);return o.set(i,c),c},on=()=>{ye?.clear(),ye=null,te?.clear(),te=null},Mu=(e)=>{try{let t=_.readFileSync(e,"utf8"),i=JSON.parse(t).packages||{};return Math.max(0,Object.keys(i).length-1)}catch{return 0}},rn=(e,t)=>{try{let i=_.readFileSync(e,"utf8").match(t);return i?i.length:0}catch{return 0}},Ut=(e,t)=>X(e,t),an=(e="./")=>{let t=Ut(e,"package-lock.json");if(_.existsSync(t))return Mu(t);let r=Ut(e,"yarn.lock");if(_.existsSync(r))return rn(r,Ji);let i=Ut(e,"pnpm-lock.yaml");if(_.existsSync(i))return rn(i,en);return 0},Fu=(e,t)=>{if(e.length>0)return;throw t.error("No depPaths provided","findPackageJsonFiles"),Error("No depPaths provided to findPackageJsonFiles")},$u=(e,t,r,i)=>{i.debug(`Searching with patterns: ${e.join(", ")}, ignoring: ${t.join(", ")}, cwd: ${r}`,"findPackageJsonFiles")},Uu=(e,t,r)=>me(e,{cwd:r,ignore:t,absolute:!0}),Gu=(e,t,r,i)=>{if(e.length>0)return;let n=`No package.json files found matching patterns: ${t.join(", ")} in directory: ${r}`;throw i.error(n,"findPackageJsonFiles"),Error(n)},cn=(e,t=[],r="./",i=N)=>{Fu(e,i);try{$u(e,t,r,i);let n=Uu(e,t,r);return Gu(n,e,r,i),i.debug(`Found ${n.length} files`,"findPackageJsonFiles"),n}catch(n){throw i.error("Error finding package.json files","findPackageJsonFiles",n),n}};var Hu=(e="@")=>(t)=>(r)=>t+e+r,Ue=Hu("@"),un=(e)=>(...t)=>t.join(e),Tf=un("@"),Cf=un(":");var dn="(unused override)",Bu=(e,t)=>{return t?.find((r)=>r.packageName===e)?.reason},ju=(e,t)=>{return t?.[e]},Ht=(e,t,r,i)=>{if(t)return t;let n=Bu(e,r);if(n)return n;return ju(e,i)},Ku=(e,t)=>{if(!Boolean(t))return!1;return t.some((i)=>i.packageName===e)},Wu=(e,t)=>{return t?.filter((r)=>r.packageName===e)||[]},Yu=()=>({source:"security",securityChecked:!0,securityCheckDate:new Date().toISOString()}),zu=(e,t)=>{if(!Boolean(t))return e;return Object.assign({},e,{securityProvider:t})},Xu=(e,t)=>{let r=t.flatMap((n)=>n.cves||[]),i=Array.from(new Set(r));if(i.length===0)return e;return Object.assign({},e,{cves:i})},ln=(e)=>{return{low:1,medium:2,high:3,critical:4}[e.toLowerCase()]||0},qu=(e,t)=>{let r=t.map((n)=>n.severity).filter(Boolean);if(r.length===0)return e;let i=r.reduce((n,s)=>{return ln(s)>ln(n)?s:n});return Object.assign({},e,{severity:i})},Qu=(e,t)=>{let r=t.find((i)=>i.url)?.url;if(!r)return e;return Object.assign({},e,{url:r})},Zu=(e,t)=>{let r=t.find((i)=>i.vulnerableRange)?.vulnerableRange;if(!r)return e;return Object.assign({},e,{vulnerableRange:r})},Ju=(e,t)=>{let r=t.find((i)=>i.patchedVersion)?.patchedVersion;if(!r)return e;return Object.assign({},e,{patchedVersion:r})},el=(e,t)=>{let r=t.flatMap((n)=>n.sources||[]),i=Array.from(new Set(r));if(i.length===0)return e;return Object.assign({},e,{sources:i})},tl=(e,t)=>{let r=t.flatMap((o)=>o.sources||[]),i=Array.from(new Set(r));if(i.length===0)return e;let s=i.length>=2?"confirmed":"possible";return Object.assign({},e,{confidence:s})},rl=(e)=>{let r=e.flatMap(il).reduce((i,[n,s])=>{if(!i.has(n))i.set(n,s);return i},new Map);return Array.from(r.values())},il=(e)=>{return(e.cves||[]).map((r)=>[r,nl(r,e)])},nl=(e,t)=>{let r={cve:e};if(t.severity)r.severity=t.severity;if(t.patchedVersion)r.patchedVersion=t.patchedVersion;return r},sl=(e,t)=>{let r=rl(t);if(r.length===0)return e;return Object.assign({},e,{cveDetails:r})},Bt=(e,t,r)=>{if(!Ku(e,t))return{};let n=Wu(e,t);return[(o)=>zu(o,r),(o)=>Xu(o,n),(o)=>sl(o,n),(o)=>qu(o,n),(o)=>Qu(o,n),(o)=>Zu(o,n),(o)=>Ju(o,n),(o)=>el(o,n),(o)=>tl(o,n)].reduce((o,a)=>a(o),Yu())},ol=(e)=>{let t=e;if(!t.cve)return e;let{cve:r,...i}=t,n=i.cves||[],s=Array.from(new Set(n.concat(r)));return Object.assign({},i,{cves:s})},al=(e,t,r)=>{let n={addedDate:r||new Date().toISOString()},o=Object.assign({},n,e?{reason:e}:void 0);return Object.assign({},o,t)},pn=(e,t,r,i,n)=>{let o=Boolean(t)?t:al(r,i,n),a=o?ol(o):o;return{dependents:e,ledger:a}},hn=(e,t,r)=>{return Object.assign({},e,{[t]:r})},gn=(e,t,r,i)=>{if(e)return Ue(t)(r??"");if(i?.[t]||!1)return`${t} (transitive dependency)`;return`${t} ${dn}`},mn=(e)=>{return typeof e==="object"},cl=(e)=>{if(!Boolean(e?.dependents))return!0;return Object.keys(e.dependents).length===0},yn=(e)=>{return Object.keys(e).filter((i)=>{let n=e[i];if(!n)return!1;return!cl(n)}).reduce((i,n)=>{return i[n]=e[n],i},{})},fn=(e)=>{let t=e?.dependencies||{},r=e?.devDependencies||{},i=e?.peerDependencies||{};return Object.assign({},t,r,i)},Sn=(e,t)=>{let r=new Set(t);return e.some((i)=>r.has(i))},vn=(e,t)=>{if(!Boolean(e))return!1;return Object.keys(e).length>0&&t},Se=(e)=>{if(!e)return!1;return Object.keys(e).length>0},ie=(e,t,r)=>{let i=e[t],n=Object.assign({},i?.dependents,r.dependents),s=i?Object.assign({},i,{dependents:n}):{dependents:n};return Object.assign({},e,{[t]:s})},ul=(e)=>{let t=e.ledger;if(!t)return!1;return Boolean(t.securityChecked||t.securityProvider||t.cves?.length||t.severity)},ll=(e)=>{if(!e.patches)return!1;return e.patches.length>0},Ge=(e)=>{let t=e.ledger?.keep,i=typeof t==="object"&&t!==null;if(t===!0)return!0;return i},dl=(e,t,r)=>{let i=e.ledger?.keep;if(!i||i===!0)return!1;let s=new Date,o=i.until?new Date(i.until):null;if(o?s>=o:!1)return!0;if(i.untilVersion){let u=r[t]?.replace(/^[\^~]/,"");if((u?A(u,i.untilVersion):-1)>=0)return!0}return!1},pl=(e)=>{if(Ge(e))return!1;if(ul(e))return!1;return!ll(e)},hl=(e,t)=>{if(e.ledger?.addedDate)return e.ledger.addedDate;if(t)return t;return new Date().toISOString().split("T")[0]},bn=(e,t)=>Object.entries(e).reduce((r,[i,n])=>{return r[i]=pl(n)?{addedDate:hl(n,t)}:n,r},{}),gl=(e,t,r)=>{let i=Ge(e),n=i&&dl(e,t,r);if(i&&!n)return!1;let o=e?.dependents;if(!o)return!1;let a=Object.values(o);if(!a.length)return!1;return a.every((c)=>c.includes(dn))},An=(e,t={})=>{if(!e)return[];return Object.keys(e).filter((r)=>{let i=r.lastIndexOf("@")>0?r.slice(0,r.lastIndexOf("@")):r;return gl(e[r],i,t)})},On=(e,t)=>{let r=new Set(t);return Object.fromEntries(Object.entries(e).filter(([i])=>!r.has(i)))},He=(e)=>e.map((t)=>{let r=t.lastIndexOf("@");if(r<=0)return t;return t.slice(0,r)}),Pn=(e,t)=>{let r=new Set(t);return Object.fromEntries(Object.entries(e).filter(([i])=>!r.has(i)))};var jt=m({file:"workspace.ts",isLogging:R}),ml=(e,t)=>{return Boolean(t[e])},yl=(e,t)=>{return e.filter((r)=>!ml(r,t))},fl=(e,t)=>{if(e<=0)return!1;return!t},En=(e,t,r,i)=>{let n=Object.keys(e),s=yl(n,t),o=Boolean(i?.depPaths);if(fl(s.length,o))r.debug(`Found overrides for packages not in root dependencies: ${s.join(", ")}`,"checkMonorepoOverrides"),r.debug("For monorepo support, use --depPaths flag or add depPaths configuration in package.json","checkMonorepoOverrides");return s},Sl=(e)=>{let t=e?.dependencies||{},r=e?.devDependencies||{},i=e?.peerDependencies||{};return Object.assign({},t,r,i)},vl=(e)=>{return e.map((r)=>fe(r)).filter(Boolean).reduce((r,i)=>{let n=Sl(i);return Object.assign(r,n),r},{})},Rn=(e,t,r,i)=>{let n=i(e,t,r),s=vl(e);return{appendix:n,allWorkspaceDeps:s}},bl=(e,t)=>{let r=Boolean(e),i=t.length>0;return r&&i},Al=(e,t)=>{return Object.entries(t).reduce((r,[i,n])=>ie(r,i,n),e)},xn=(e,t,r,i)=>{if(!bl(t,r))return e;return i.debug("Using overridePaths configuration for monorepo support","mergeOverridePaths"),Object.values(t).reduce(Al,e)},wn=(e,t)=>{return typeof t[e]==="object"},kn=(e,t)=>{return Boolean(t[e])},Ol=(e,t,r)=>{if(!wn(e,t))return!1;if(kn(e,r))return!1;return jt.debug(`Found unused nested override for ${e}: parent package not in dependencies`,"isUnusedNestedOverride"),!0},Pl=(e,t,r)=>{if(wn(e,t))return!1;if(kn(e,r))return!1;return!0},Tn=(e,t)=>{jt.debug(`Found unused override for ${e}: ${t}`,"isUnusedSimpleOverride")},Tl=(e)=>{jt.debug(`Keeping override for ${e}: found in dependency tree`,"isUnusedSimpleOverride")},Cl=(e,t,r)=>{if(!r)return Tn(e,"no dependencies at all"),!0;if(Boolean(t[e]))return Tl(e),!1;return Tn(e,"not in dependency tree"),!0},El=(e,t,r,i,n)=>{if(!Pl(e,t,r))return!1;return Cl(e,i,n)},Rl=async(e,t,r,i,n)=>{if(Ol(e,t,r))return!0;return El(e,t,r,i,n)},xl=async(e,t)=>{let r=Object.keys(e),i=Object.keys(t).length>0,n=i?await sn():{},s=await Promise.all(r.map((o)=>Rl(o,e,t,n,i)));return r.filter((o,a)=>s[a])},wl=(e,t)=>{if(!t)return!1;return Object.values(t).flatMap((i)=>Object.keys(i)).some((i)=>i.startsWith(`${e}@`))},kl=(e,t)=>{return e.filter((r)=>wl(r,t))},_l=(e,t)=>{let r=new Set(t);return e.filter((i)=>!r.has(i))},Il=(e,t)=>{let r=He([e])[0]??e;return e.startsWith(`${r}@`)&&t.has(r)},Vl=(e,t,r)=>{let i=new Set(t);return Object.keys(e).filter((s)=>Il(s,i)).reduce((s,o)=>{r.debug(`Removed appendix entry for ${o}`,"removeAppendixEntries");let{[o]:a,...c}=s;return c},e)},_n=(e,t)=>{return{finalOverrides:e,finalAppendix:t}},Cn=(e,t)=>{return _n(e,t)},Ll=(e,t)=>{t.debug(`Found ${e.length} packages to remove from overrides: ${e.join(", ")}`,"cleanupUnusedOverrides")},Dl=(e,t)=>{Ll(t,e.logInstance);let r=e.updateOverrides(e.overridesData,t)||e.overrides,i=Vl(e.appendix,t,e.logInstance);return _n(r,i)},Nl=(e,t)=>{if(e.length===0)return;t.debug(`Keeping overrides for packages tracked in overridePaths: ${e.join(", ")}`,"cleanupUnusedOverrides")},Ml=(e,t)=>{let r=kl(t.missingInRoot,t.overridePaths);return{actuallyRemovable:_l(e,r),trackedInPaths:r}},Fl=async(e)=>{let t=await xl(e.overrides,e.allDeps);if(t.length===0)return Cn(e.overrides,e.appendix);let{actuallyRemovable:r,trackedInPaths:i}=Ml(t,e);if(r.length>0)return Dl(e,r);return Nl(i,e.logInstance),Cn(e.overrides,e.appendix)},Lf=async(e,t,r,i,n,s,o,a)=>{return Fl({overrides:e,overridesData:t,appendix:r,allDeps:i,missingInRoot:n,overridePaths:s,logInstance:o,updateOverrides:a})};var Kt=m({file:"patches.ts",isLogging:R}),$l=["patches/*.patch",".patches/*.patch","*.patch","patches/**/*.patch"],Ul=(e)=>{return e.split("/").pop()||""},Gl=(e)=>{return e.replace(".patch","")},Hl=(e)=>{return e.length>=2?`${e[0]}/${e[1]}`:e[0]},Bl=(e)=>{return e[0]},jl=(e)=>{if(!e.includes("+"))return e;let r=e.split("+");return e.startsWith("@")?Hl(r):Bl(r)},Kl=(e,t,r)=>{let i=e[t]||[];return Object.assign({},e,{[t]:i.concat(r)})},Wl=(e,t)=>{let r=Ul(e);if(!r.endsWith(".patch"))return t;let n=Gl(r),s=jl(n);if(!Boolean(s))return t;return Kt.debug(`Found patch for ${s}: ${e}`,"processPatchFile"),Kl(t,s,e)},Yl=(e)=>{return e.reduce((t,r)=>Wl(r,t),{})},In=(e="./")=>{try{let t=me($l,{cwd:e});return Yl(t)}catch(t){return Kt.error("Error detecting patches","detectPatches",t),{}}},zl=(e,t)=>{return t[e]||[]},Xl=(e,t)=>{return Boolean(t[e])},ql=(e,t)=>{return e.flatMap(([r,i])=>{if(Xl(r,t))return[];return Kt.debug(`Found unused patches for ${r}: ${i.join(", ")}`,"collectUnusedPatches"),i})},Vn=(e,t)=>{let r=Object.entries(e);return ql(r,t)},Ql=(e)=>{let t=e.lastIndexOf("@");if(t<=0)return e;return e.slice(0,t)},Zl=(e,t,r)=>{let i=Ql(t),n=zl(i,r);if(!(n.length>0))return e;let o=Object.assign({},e[t],{patches:n});return Object.assign({},e,{[t]:o})},Ln=(e,t)=>{return Object.keys(e).reduce((i,n)=>Zl(i,n,t),e)};var ve=m({file:"overrides.ts",isLogging:R}),Wt=(e)=>Object.keys(e??{}).length>0,Jl=(e,t,r)=>{let i=t?.overrides||{};return[{type:"overrides",overrides:e},{type:"pnpmOverrides",overrides:i},{type:"resolutions",overrides:r}]},ed=(e)=>{return e.filter(({overrides:t})=>Object.keys(t).length>0)},td=(e)=>{return e.length>1},rd=({overrides:e={},pnpm:t={},resolutions:r={}}={})=>{let i=Wt(e),n=Wt(t?.overrides),s=Wt(r);if(!(i||n||s))return;let a=Jl(e,t,r),c=ed(a);if(td(c)){ve.error("Only 1 override object allowed","defineOverride");return}return c[0]},id=(e)=>{return Object.keys(e).reduce((r,i)=>{let n=e[i];return r[i]=n,r},{})},nd=(e)=>{return{type:"pnpm",pnpm:{overrides:e}}},sd=(e)=>{return{type:"resolutions",resolutions:e}},od=(e)=>{return{type:"npm",overrides:e}},ad=(e,t)=>{if(e==="pnpmOverrides")return nd(t);if(e==="resolutions")return sd(t);return od(t)},Be=({config:e={}})=>{let t=rd(e);if(!t){ve.debug("No overrides configuration found","resolveOverrides");return}let{type:i,overrides:n}=t,s=Object.keys(n).length>0,o=Boolean(i);if(!(s&&o)){ve.debug("No active overrides found","resolveOverrides");return}let c=id(n);return ad(i,c)},cd=(e)=>{return e?.resolutions},ud=(e)=>{return e?.pnpm?.overrides},ld=(e)=>{return e?.overrides},ne=(e)=>{let t=e?.type;if(!t){ve.error("no type found","getOverridesByType");return}if(t==="resolutions")return cd(e);if(t==="pnpm")return ud(e);return ld(e)},dd=(e,t)=>{return!t.includes(e)},pd=(e,t)=>{return Object.entries(e).reduce((r,[i,n])=>{if(dd(i,t))r[i]=n;return r},{})},Gf=(e,t)=>{if(!e)return;let i=ne(e);if(!i||Object.keys(i).length===0){ve.debug("No overrides found to update","updateOverrides");return}return pd(i,t)};import{writeFileSync as hd}from"fs";import{resolve as gd}from"path";var Yt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Nn=(e,t)=>Ue(e)(t),Dn=(e,t,r)=>Object.assign({},e,{[t]:r}),Mn=(e,t,r,i)=>{let n=r.get(t);if(n)return Dn(e,t,n);let s=i();return r.set(t,s),Dn(e,t,s)},Fn=(e,t,r,i,n,s,o)=>{let a=e[t]?.dependents||{},c=hn(a,r,i),u=e[t]?.ledger;return pn(c,u,n,s||{},o)},md=(e,t,r)=>{if(Yt(t,e))return!1;return!r?.[e]},yd=(e,t,r)=>Fn(e.appendix,t,e.packageName,r,e.packageReason,e.securityLedger,e.addedDate),fd=(e)=>{let{override:t,overrideVersion:r="",deps:i,appendix:n,cache:s,onlyUsedOverrides:o=!1,dependencyTree:a}=e,c=Yt(i,t);if(o&&md(t,i,a))return n;let l=Nn(t,r),g=i[t],b=gn(c,t,g,a);return Mn(n,l,s,()=>yd(e,l,b))},Sd=({override:e,overrideVersion:t="",packageName:r,parentOverride:i="",deps:n,appendix:s,packageReason:o,securityOverrideDetails:a,securityProvider:c,manualOverrideReasons:u,cache:l,addedDate:g})=>{let b=Nn(e,t),$=`${i}@${n[i]} (nested override)`;return Mn(s,b,l,()=>bd(s,b,r,$,o,{nestedPkg:e,securityOverrideDetails:a,securityProvider:c,manualOverrideReasons:u,addedDate:g}))},vd=(e,t)=>Ht(e.nestedPkg,void 0,e.securityOverrideDetails,e.manualOverrideReasons)||t,bd=(e,t,r,i,n,s)=>{let o=vd(s,n),a=Bt(s.nestedPkg,s.securityOverrideDetails,s.securityProvider);return Fn(e,t,r,i,o,a,s.addedDate)},Ad=(e)=>{let t=e.overrides?.[e.override];return Object.entries(t)},Od=(e,t,[r,i])=>Object.assign({},e,{override:r,overrideVersion:i,parentOverride:e.override,appendix:t}),Pd=(e)=>{let{override:t,deps:r,appendix:i}=e;if(!Yt(r,t))return i;return Ad(e).reduce((s,o)=>Sd(Od(e,s,o)),i)},Td=(e)=>Ht(e.override,e.reason,e.securityOverrideDetails,e.manualOverrideReasons),Cd=(e)=>Object.assign({},e,{packageReason:Td(e),securityLedger:Bt(e.override,e.securityOverrideDetails,e.securityProvider)}),Ed=(e)=>e.overrides?.[e.override]??"",Rd=(e)=>{let t=Cd(e),r=Ed(t);if(mn(r))return Pd(t);return fd(Object.assign({},t,{overrideVersion:r}))},xd=(e)=>Object.assign({},e,{overrides:e.overrides??{},appendix:e.appendix??{},dependencies:e.dependencies??{},devDependencies:e.devDependencies??{},peerDependencies:e.peerDependencies??{},packageName:e.packageName??"",cache:e.cache??new Map,onlyUsedOverrides:e.onlyUsedOverrides??!1}),wd=(e)=>Object.assign({},e.dependencies,e.devDependencies,e.peerDependencies),kd=(e,t,r)=>Object.assign({},e,{override:t,deps:wd(e),appendix:r}),be=(e={})=>{let t=xd(e),r=Object.assign({},t.appendix),i=Object.keys(t.o