@vibgrate/cli 2026.625.2 → 2026.628.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,78 +0,0 @@
1
- import {a as a$1}from'./chunk-MKDRULJ6.js';import {p,o,j as j$1,n,a as a$2,i,k,d,e,q,r,s}from'./chunk-XTHPCEME.js';import {a,b}from'./chunk-EK7ODJWE.js';import*as F from'path';import {basename,dirname}from'path';import*as ge from'fs/promises';import {readFile,mkdtemp,rm,mkdir,writeFile}from'fs/promises';import B from'typescript';import*as Xn from'crypto';import j from'chalk';import*as Ht from'os';import {spawn}from'child_process';import {createRequire}from'module';import*as eo from'zlib';import {promisify}from'util';import {mkdirSync,writeFileSync}from'fs';var Ot=a(ce=>{var ws=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",bo=ws+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",Ss="["+ws+"]["+bo+"]*",vo=new RegExp("^"+Ss+"$"),wo=function(e,t){let n=[],r=t.exec(e);for(;r;){let s=[];s.startIndex=t.lastIndex-r[0].length;let o=r.length;for(let i=0;i<o;i++)s.push(r[i]);n.push(s),r=t.exec(e);}return n},So=function(e){let t=vo.exec(e);return !(t===null||typeof t>"u")};ce.isExist=function(e){return typeof e<"u"};ce.isEmptyObject=function(e){return Object.keys(e).length===0};ce.merge=function(e,t,n){if(t){let r=Object.keys(t),s=r.length;for(let o=0;o<s;o++)n==="strict"?e[r[o]]=[t[r[o]]]:e[r[o]]=t[r[o]];}};ce.getValue=function(e){return ce.isExist(e)?e:""};var ko=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],jo=["__proto__","constructor","prototype"];ce.isName=So;ce.getAllMatches=wo;ce.nameRegexp=Ss;ce.DANGEROUS_PROPERTY_NAMES=ko;ce.criticalProperties=jo;});var An=a(Ts=>{var xn=Ot(),Po={allowBooleanAttributes:false,unpairedTags:[]};Ts.validate=function(e,t){t=Object.assign({},Po,t);let n=[],r=false,s=false;e[0]==="\uFEFF"&&(e=e.substr(1));for(let o=0;o<e.length;o++)if(e[o]==="<"&&e[o+1]==="?"){if(o+=2,o=js(e,o),o.err)return o}else if(e[o]==="<"){let i=o;if(o++,e[o]==="!"){o=Ps(e,o);continue}else {let a=false;e[o]==="/"&&(a=true,o++);let c="";for(;o<e.length&&e[o]!==">"&&e[o]!==" "&&e[o]!==" "&&e[o]!==`
2
- `&&e[o]!=="\r";o++)c+=e[o];if(c=c.trim(),c[c.length-1]==="/"&&(c=c.substring(0,c.length-1),o--),!No(c)){let p;return c.trim().length===0?p="Invalid space after '<'.":p="Tag '"+c+"' is an invalid name.",V("InvalidTag",p,K(e,o))}let l=Mo(e,o);if(l===false)return V("InvalidAttr","Attributes for '"+c+"' have open quote.",K(e,o));let u=l.value;if(o=l.index,u[u.length-1]==="/"){let p=o-u.length;u=u.substring(0,u.length-1);let d=Es(u,t);if(d===true)r=true;else return V(d.err.code,d.err.msg,K(e,p+d.err.line))}else if(a)if(l.tagClosed){if(u.trim().length>0)return V("InvalidTag","Closing tag '"+c+"' can't have attributes or invalid starting.",K(e,i));if(n.length===0)return V("InvalidTag","Closing tag '"+c+"' has not been opened.",K(e,i));{let p=n.pop();if(c!==p.tagName){let d=K(e,p.tagStartPos);return V("InvalidTag","Expected closing tag '"+p.tagName+"' (opened in line "+d.line+", col "+d.col+") instead of closing tag '"+c+"'.",K(e,i))}n.length==0&&(s=true);}}else return V("InvalidTag","Closing tag '"+c+"' doesn't have proper closing.",K(e,o));else {let p=Es(u,t);if(p!==true)return V(p.err.code,p.err.msg,K(e,o-u.length+p.err.line));if(s===true)return V("InvalidXml","Multiple possible root nodes found.",K(e,o));t.unpairedTags.indexOf(c)!==-1||n.push({tagName:c,tagStartPos:i}),r=true;}for(o++;o<e.length;o++)if(e[o]==="<")if(e[o+1]==="!"){o++,o=Ps(e,o);continue}else if(e[o+1]==="?"){if(o=js(e,++o),o.err)return o}else break;else if(e[o]==="&"){let p=xo(e,o);if(p==-1)return V("InvalidChar","char '&' is not expected.",K(e,o));o=p;}else if(s===true&&!ks(e[o]))return V("InvalidXml","Extra text at the end",K(e,o));e[o]==="<"&&o--;}}else {if(ks(e[o]))continue;return V("InvalidChar","char '"+e[o]+"' is not expected.",K(e,o))}if(r){if(n.length==1)return V("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",K(e,n[0].tagStartPos));if(n.length>0)return V("InvalidXml","Invalid '"+JSON.stringify(n.map(o=>o.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1})}else return V("InvalidXml","Start tag expected.",1);return true};function ks(e){return e===" "||e===" "||e===`
3
- `||e==="\r"}function js(e,t){let n=t;for(;t<e.length;t++)if(e[t]=="?"||e[t]==" "){let r=e.substr(n,t-n);if(t>5&&r==="xml")return V("InvalidXml","XML declaration allowed only at the start of the document.",K(e,t));if(e[t]=="?"&&e[t+1]==">"){t++;break}else continue}return t}function Ps(e,t){if(e.length>t+5&&e[t+1]==="-"&&e[t+2]==="-"){for(t+=3;t<e.length;t++)if(e[t]==="-"&&e[t+1]==="-"&&e[t+2]===">"){t+=2;break}}else if(e.length>t+8&&e[t+1]==="D"&&e[t+2]==="O"&&e[t+3]==="C"&&e[t+4]==="T"&&e[t+5]==="Y"&&e[t+6]==="P"&&e[t+7]==="E"){let n=1;for(t+=8;t<e.length;t++)if(e[t]==="<")n++;else if(e[t]===">"&&(n--,n===0))break}else if(e.length>t+9&&e[t+1]==="["&&e[t+2]==="C"&&e[t+3]==="D"&&e[t+4]==="A"&&e[t+5]==="T"&&e[t+6]==="A"&&e[t+7]==="["){for(t+=8;t<e.length;t++)if(e[t]==="]"&&e[t+1]==="]"&&e[t+2]===">"){t+=2;break}}return t}var Eo='"',To="'";function Mo(e,t){let n="",r="",s=false;for(;t<e.length;t++){if(e[t]===Eo||e[t]===To)r===""?r=e[t]:r!==e[t]||(r="");else if(e[t]===">"&&r===""){s=true;break}n+=e[t];}return r!==""?false:{value:n,index:t,tagClosed:s}}var Co=new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`,"g");function Es(e,t){let n=xn.getAllMatches(e,Co),r={};for(let s=0;s<n.length;s++){if(n[s][1].length===0)return V("InvalidAttr","Attribute '"+n[s][2]+"' has no space in starting.",Vt(n[s]));if(n[s][3]!==void 0&&n[s][4]===void 0)return V("InvalidAttr","Attribute '"+n[s][2]+"' is without value.",Vt(n[s]));if(n[s][3]===void 0&&!t.allowBooleanAttributes)return V("InvalidAttr","boolean attribute '"+n[s][2]+"' is not allowed.",Vt(n[s]));let o=n[s][2];if(!Ao(o))return V("InvalidAttr","Attribute '"+o+"' is an invalid name.",Vt(n[s]));if(!r.hasOwnProperty(o))r[o]=1;else return V("InvalidAttr","Attribute '"+o+"' is repeated.",Vt(n[s]))}return true}function $o(e,t){let n=/\d/;for(e[t]==="x"&&(t++,n=/[\da-fA-F]/);t<e.length;t++){if(e[t]===";")return t;if(!e[t].match(n))break}return -1}function xo(e,t){if(t++,e[t]===";")return -1;if(e[t]==="#")return t++,$o(e,t);let n=0;for(;t<e.length;t++,n++)if(!(e[t].match(/\w/)&&n<20)){if(e[t]===";")break;return -1}return t}function V(e,t,n){return {err:{code:e,msg:t,line:n.line||n,col:n.col}}}function Ao(e){return xn.isName(e)}function No(e){return xn.isName(e)}function K(e,t){let n=e.substring(0,t).split(/\r?\n/);return {line:n.length,col:n[n.length-1].length+1}}function Vt(e){return e.startIndex+e[1].length}});var As=a(Nn=>{var{DANGEROUS_PROPERTY_NAMES:Ms,criticalProperties:Lo}=Ot(),Cs=e=>Ms.includes(e)?"__"+e:e,$s={preserveOrder:false,attributeNamePrefix:"@_",attributesGroupName:false,textNodeName:"#text",ignoreAttributes:true,removeNSPrefix:false,allowBooleanAttributes:false,parseTagValue:true,parseAttributeValue:false,trimValues:true,cdataPropName:false,numberParseOptions:{hex:true,leadingZeros:true,eNotation:true},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:false,isArray:()=>false,commentPropName:false,unpairedTags:[],processEntities:true,htmlEntities:false,ignoreDeclaration:false,ignorePiTags:false,transformTagName:false,transformAttributeName:false,updateTag:function(e,t,n){return e},captureMetaData:false,maxNestedTags:100,strictReservedNames:true,onDangerousProperty:Cs};function Io(e,t){if(typeof e!="string")return;let n=e.toLowerCase();if(Ms.some(r=>n===r.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);if(Lo.some(r=>n===r.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`)}function xs(e){return typeof e=="boolean"?{enabled:e,maxEntitySize:1e4,maxExpansionDepth:10,maxTotalExpansions:1e3,maxExpandedLength:1e5,allowedTags:null,tagFilter:null}:typeof e=="object"&&e!==null?{enabled:e.enabled!==false,maxEntitySize:Math.max(1,e.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,e.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,e.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,e.maxExpandedLength??1e5),maxEntityCount:Math.max(1,e.maxEntityCount??1e3),allowedTags:e.allowedTags??null,tagFilter:e.tagFilter??null}:xs(true)}var Ro=function(e){let t=Object.assign({},$s,e),n=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(let{value:r,name:s}of n)r&&Io(r,s);return t.onDangerousProperty===null&&(t.onDangerousProperty=Cs),t.processEntities=xs(t.processEntities),t};Nn.buildOptions=Ro;Nn.defaultOptions=$s;});var Ls=a((Zu,Ns)=>{var Ln=class{constructor(t){this.tagname=t,this.child=[],this[":@"]={};}add(t,n){t==="__proto__"&&(t="#__proto__"),this.child.push({[t]:n});}addChild(t){t.tagname==="__proto__"&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child});}};Ns.exports=Ln;});var Fs=a((ep,Rs)=>{var Is=Ot(),In=class{constructor(t){this.suppressValidationErr=!t,this.options=t||{};}readDocType(t,n){let r=Object.create(null),s=0;if(t[n+3]==="O"&&t[n+4]==="C"&&t[n+5]==="T"&&t[n+6]==="Y"&&t[n+7]==="P"&&t[n+8]==="E"){n=n+9;let o=1,i=false,a=false,c="";for(;n<t.length;n++)if(t[n]==="<"&&!a){if(i&&rt(t,"!ENTITY",n)){n+=7;let l,u;if([l,u,n]=this.readEntityExp(t,n+1,this.suppressValidationErr),u.indexOf("&")===-1){if(this.options.enabled!==false&&this.options.maxEntityCount!=null&&s>=this.options.maxEntityCount)throw new Error(`Entity count (${s+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);let p=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");r[l]={regx:RegExp(`&${p};`,"g"),val:u},s++;}}else if(i&&rt(t,"!ELEMENT",n)){n+=8;let{index:l}=this.readElementExp(t,n+1);n=l;}else if(i&&rt(t,"!ATTLIST",n))n+=8;else if(i&&rt(t,"!NOTATION",n)){n+=9;let{index:l}=this.readNotationExp(t,n+1,this.suppressValidationErr);n=l;}else if(rt(t,"!--",n))a=true;else throw new Error("Invalid DOCTYPE");o++,c="";}else if(t[n]===">"){if(a?t[n-1]==="-"&&t[n-2]==="-"&&(a=false,o--):o--,o===0)break}else t[n]==="["?i=true:c+=t[n];if(o!==0)throw new Error("Unclosed DOCTYPE")}else throw new Error("Invalid Tag instead of DOCTYPE");return {entities:r,i:n}}readEntityExp(t,n){n=X(t,n);let r="";for(;n<t.length&&!/\s/.test(t[n])&&t[n]!=='"'&&t[n]!=="'";)r+=t[n],n++;if(_t(r),n=X(t,n),!this.suppressValidationErr){if(t.substring(n,n+6).toUpperCase()==="SYSTEM")throw new Error("External entities are not supported");if(t[n]==="%")throw new Error("Parameter entities are not supported")}let s="";if([n,s]=this.readIdentifierVal(t,n,"entity"),this.options.enabled!==false&&this.options.maxEntitySize!=null&&s.length>this.options.maxEntitySize)throw new Error(`Entity "${r}" size (${s.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return n--,[r,s,n]}readNotationExp(t,n){n=X(t,n);let r="";for(;n<t.length&&!/\s/.test(t[n]);)r+=t[n],n++;!this.suppressValidationErr&&_t(r),n=X(t,n);let s=t.substring(n,n+6).toUpperCase();if(!this.suppressValidationErr&&s!=="SYSTEM"&&s!=="PUBLIC")throw new Error(`Expected SYSTEM or PUBLIC, found "${s}"`);n+=s.length,n=X(t,n);let o=null,i=null;if(s==="PUBLIC")[n,o]=this.readIdentifierVal(t,n,"publicIdentifier"),n=X(t,n),(t[n]==='"'||t[n]==="'")&&([n,i]=this.readIdentifierVal(t,n,"systemIdentifier"));else if(s==="SYSTEM"&&([n,i]=this.readIdentifierVal(t,n,"systemIdentifier"),!this.suppressValidationErr&&!i))throw new Error("Missing mandatory system identifier for SYSTEM notation");return {notationName:r,publicIdentifier:o,systemIdentifier:i,index:--n}}readIdentifierVal(t,n,r){let s="",o=t[n];if(o!=='"'&&o!=="'")throw new Error(`Expected quoted string, found "${o}"`);for(n++;n<t.length&&t[n]!==o;)s+=t[n],n++;if(t[n]!==o)throw new Error(`Unterminated ${r} value`);return n++,[n,s]}readElementExp(t,n){n=X(t,n);let r="";for(;n<t.length&&!/\s/.test(t[n]);)r+=t[n],n++;if(!this.suppressValidationErr&&!Is.isName(r))throw new Error(`Invalid element name: "${r}"`);n=X(t,n);let s="";if(t[n]==="E"&&rt(t,"MPTY",n))n+=4;else if(t[n]==="A"&&rt(t,"NY",n))n+=2;else if(t[n]==="("){for(n++;n<t.length&&t[n]!==")";)s+=t[n],n++;if(t[n]!==")")throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[n]}"`);return {elementName:r,contentModel:s.trim(),index:n}}readAttlistExp(t,n){n=X(t,n);let r="";for(;n<t.length&&!/\s/.test(t[n]);)r+=t[n],n++;_t(r),n=X(t,n);let s="";for(;n<t.length&&!/\s/.test(t[n]);)s+=t[n],n++;if(!_t(s))throw new Error(`Invalid attribute name: "${s}"`);n=X(t,n);let o="";if(t.substring(n,n+8).toUpperCase()==="NOTATION"){if(o="NOTATION",n+=8,n=X(t,n),t[n]!=="(")throw new Error(`Expected '(', found "${t[n]}"`);n++;let a=[];for(;n<t.length&&t[n]!==")";){let c="";for(;n<t.length&&t[n]!=="|"&&t[n]!==")";)c+=t[n],n++;if(c=c.trim(),!_t(c))throw new Error(`Invalid notation name: "${c}"`);a.push(c),t[n]==="|"&&(n++,n=X(t,n));}if(t[n]!==")")throw new Error("Unterminated list of notations");n++,o+=" ("+a.join("|")+")";}else {for(;n<t.length&&!/\s/.test(t[n]);)o+=t[n],n++;let a=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!a.includes(o.toUpperCase()))throw new Error(`Invalid attribute type: "${o}"`)}n=X(t,n);let i="";return t.substring(n,n+8).toUpperCase()==="#REQUIRED"?(i="#REQUIRED",n+=8):t.substring(n,n+7).toUpperCase()==="#IMPLIED"?(i="#IMPLIED",n+=7):[n,i]=this.readIdentifierVal(t,n,"ATTLIST"),{elementName:r,attributeName:s,attributeType:o,defaultValue:i,index:n}}},X=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function rt(e,t,n){for(let r=0;r<t.length;r++)if(t[r]!==e[n+r+1])return false;return true}function _t(e){if(Is.isName(e))return e;throw new Error(`Invalid entity name ${e}`)}Rs.exports=In;});var Os=a((tp,Bs)=>{var Fo=/^[-+]?0x[a-fA-F0-9]+$/,Bo=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,Oo={hex:true,leadingZeros:true,decimalPoint:".",eNotation:true};function Vo(e,t={}){if(t=Object.assign({},Oo,t),!e||typeof e!="string")return e;let n=e.trim();if(t.skipLike!==void 0&&t.skipLike.test(n))return e;if(e==="0")return 0;if(t.hex&&Fo.test(n))return Do(n,16);if(n.search(/[eE]/)!==-1){let r=n.match(/^([-\+])?(0*)([0-9]*(\.[0-9]*)?[eE][-\+]?[0-9]+)$/);if(r){if(t.leadingZeros)n=(r[1]||"")+r[3];else if(!(r[2]==="0"&&r[3][0]==="."))return e;return t.eNotation?Number(n):e}else return e}else {let r=Bo.exec(n);if(r){let s=r[1],o=r[2],i=_o(r[3]);if(!t.leadingZeros&&o.length>0&&s&&n[2]!==".")return e;if(!t.leadingZeros&&o.length>0&&!s&&n[1]!==".")return e;if(t.leadingZeros&&o===e)return 0;{let a=Number(n),c=""+a;return c.search(/[eE]/)!==-1?t.eNotation?a:e:n.indexOf(".")!==-1?c==="0"&&i===""||c===i||s&&c==="-"+i?a:e:o?i===c||s+i===c?a:e:n===c||n===s+c?a:e}}else return e}}function _o(e){return e&&e.indexOf(".")!==-1&&(e=e.replace(/0+$/,""),e==="."?e="0":e[0]==="."?e="0"+e:e[e.length-1]==="."&&(e=e.substr(0,e.length-1))),e}function Do(e,t){if(parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}Bs.exports=Vo;});var Rn=a((np,Vs)=>{function Go(e){return typeof e=="function"?e:Array.isArray(e)?t=>{for(let n of e)if(typeof n=="string"&&t===n||n instanceof RegExp&&n.test(t))return true}:()=>false}Vs.exports=Go;});var Gs=a((sp,Ds)=>{var ln=Ot(),Tt=Ls(),Uo=Fs(),qo=Os(),Wo=Rn(),Fn=class{constructor(t){if(this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"\xA2"},pound:{regex:/&(pound|#163);/g,val:"\xA3"},yen:{regex:/&(yen|#165);/g,val:"\xA5"},euro:{regex:/&(euro|#8364);/g,val:"\u20AC"},copyright:{regex:/&(copy|#169);/g,val:"\xA9"},reg:{regex:/&(reg|#174);/g,val:"\xAE"},inr:{regex:/&(inr|#8377);/g,val:"\u20B9"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(n,r)=>_s(r,10,"&#")},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(n,r)=>_s(r,16,"&#x")}},this.addExternalEntities=zo,this.parseXml=Yo,this.parseTextData=Ho,this.resolveNameSpace=Jo,this.buildAttributesMap=Qo,this.isItStopNode=ti,this.replaceEntitiesValue=Zo,this.readStopNodeData=si,this.saveTextToParentTag=ei,this.addChild=Xo,this.ignoreAttributesFn=Wo(this.options.ignoreAttributes),this.entityExpansionCount=0,this.currentExpandedLength=0,this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(let n=0;n<this.options.stopNodes.length;n++){let r=this.options.stopNodes[n];typeof r=="string"&&(r.startsWith("*.")?this.stopNodesWildcard.add(r.substring(2)):this.stopNodesExact.add(r));}}}};function zo(e){let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=t[n],s=r.replace(/[.\-+*:]/g,"\\.");this.lastEntities[r]={regex:new RegExp("&"+s+";","g"),val:e[r]};}}function Ho(e,t,n,r,s,o,i){if(e!==void 0&&(this.options.trimValues&&!r&&(e=e.trim()),e.length>0)){i||(e=this.replaceEntitiesValue(e,t,n));let a=this.options.tagValueProcessor(t,e,n,s,o);return a==null?e:typeof a!=typeof e||a!==e?a:this.options.trimValues?On(e,this.options.parseTagValue,this.options.numberParseOptions):e.trim()===e?On(e,this.options.parseTagValue,this.options.numberParseOptions):e}}function Jo(e){if(this.options.removeNSPrefix){let t=e.split(":"),n=e.charAt(0)==="/"?"/":"";if(t[0]==="xmlns")return "";t.length===2&&(e=n+t[1]);}return e}var Ko=new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`,"gm");function Qo(e,t,n){if(this.options.ignoreAttributes!==true&&typeof e=="string"){let r=ln.getAllMatches(e,Ko),s=r.length,o={};for(let i=0;i<s;i++){let a=this.resolveNameSpace(r[i][1]);if(this.ignoreAttributesFn(a,t))continue;let c=r[i][4],l=this.options.attributeNamePrefix+a;if(a.length)if(this.options.transformAttributeName&&(l=this.options.transformAttributeName(l)),l=ri(l,this.options),c!==void 0){this.options.trimValues&&(c=c.trim()),c=this.replaceEntitiesValue(c,n,t);let u=this.options.attributeValueProcessor(a,c,t);u==null?o[l]=c:typeof u!=typeof c||u!==c?o[l]=u:o[l]=On(c,this.options.parseAttributeValue,this.options.numberParseOptions);}else this.options.allowBooleanAttributes&&(o[l]=true);}if(!Object.keys(o).length)return;if(this.options.attributesGroupName){let i={};return i[this.options.attributesGroupName]=o,i}return o}}var Yo=function(e){e=e.replace(/\r\n?/g,`
4
- `);let t=new Tt("!xml"),n=t,r="",s="";this.entityExpansionCount=0,this.currentExpandedLength=0;let o=new Uo(this.options.processEntities);for(let i=0;i<e.length;i++)if(e[i]==="<")if(e[i+1]==="/"){let c=ot(e,">",i,"Closing Tag is not closed."),l=e.substring(i+2,c).trim();if(this.options.removeNSPrefix){let d=l.indexOf(":");d!==-1&&(l=l.substr(d+1));}this.options.transformTagName&&(l=this.options.transformTagName(l)),n&&(r=this.saveTextToParentTag(r,n,s));let u=s.substring(s.lastIndexOf(".")+1);if(l&&this.options.unpairedTags.indexOf(l)!==-1)throw new Error(`Unpaired tag can not be used as closing tag: </${l}>`);let p=0;u&&this.options.unpairedTags.indexOf(u)!==-1?(p=s.lastIndexOf(".",s.lastIndexOf(".")-1),this.tagsNodeStack.pop()):p=s.lastIndexOf("."),s=s.substring(0,p),n=this.tagsNodeStack.pop(),r="",i=c;}else if(e[i+1]==="?"){let c=Bn(e,i,false,"?>");if(!c)throw new Error("Pi Tag is not closed.");if(r=this.saveTextToParentTag(r,n,s),!(this.options.ignoreDeclaration&&c.tagName==="?xml"||this.options.ignorePiTags)){let l=new Tt(c.tagName);l.add(this.options.textNodeName,""),c.tagName!==c.tagExp&&c.attrExpPresent&&(l[":@"]=this.buildAttributesMap(c.tagExp,s,c.tagName)),this.addChild(n,l,s,i);}i=c.closeIndex+1;}else if(e.substr(i+1,3)==="!--"){let c=ot(e,"-->",i+4,"Comment is not closed.");if(this.options.commentPropName){let l=e.substring(i+4,c-2);r=this.saveTextToParentTag(r,n,s),n.add(this.options.commentPropName,[{[this.options.textNodeName]:l}]);}i=c;}else if(e.substr(i+1,2)==="!D"){let c=o.readDocType(e,i);this.docTypeEntities=c.entities,i=c.i;}else if(e.substr(i+1,2)==="!["){let c=ot(e,"]]>",i,"CDATA is not closed.")-2,l=e.substring(i+9,c);r=this.saveTextToParentTag(r,n,s);let u=this.parseTextData(l,n.tagname,s,true,false,true,true);u==null&&(u=""),this.options.cdataPropName?n.add(this.options.cdataPropName,[{[this.options.textNodeName]:l}]):n.add(this.options.textNodeName,u),i=c+2;}else {let c=Bn(e,i,this.options.removeNSPrefix),l=c.tagName,u=c.rawTagName,p=c.tagExp,d=c.attrExpPresent,g=c.closeIndex;if(this.options.transformTagName){let m=this.options.transformTagName(l);p===l&&(p=m),l=m;}if(this.options.strictReservedNames&&(l===this.options.commentPropName||l===this.options.cdataPropName||l===this.options.textNodeName||l===this.options.attributesGroupName))throw new Error(`Invalid tag name: ${l}`);n&&r&&n.tagname!=="!xml"&&(r=this.saveTextToParentTag(r,n,s,false));let y=n;y&&this.options.unpairedTags.indexOf(y.tagname)!==-1&&(n=this.tagsNodeStack.pop(),s=s.substring(0,s.lastIndexOf("."))),l!==t.tagname&&(s+=s?"."+l:l);let h=i;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,s,l)){let m="";if(p.length>0&&p.lastIndexOf("/")===p.length-1)l[l.length-1]==="/"?(l=l.substr(0,l.length-1),s=s.substr(0,s.length-1),p=l):p=p.substr(0,p.length-1),i=c.closeIndex;else if(this.options.unpairedTags.indexOf(l)!==-1)i=c.closeIndex;else {let M=this.readStopNodeData(e,u,g+1);if(!M)throw new Error(`Unexpected end of ${u}`);i=M.i,m=M.tagContent;}let E=new Tt(l);l!==p&&d&&(E[":@"]=this.buildAttributesMap(p,s,l)),m&&(m=this.parseTextData(m,l,s,true,d,true,true)),s=s.substr(0,s.lastIndexOf(".")),E.add(this.options.textNodeName,m),this.addChild(n,E,s,h);}else {if(p.length>0&&p.lastIndexOf("/")===p.length-1){if(l[l.length-1]==="/"?(l=l.substr(0,l.length-1),s=s.substr(0,s.length-1),p=l):p=p.substr(0,p.length-1),this.options.transformTagName){let E=this.options.transformTagName(l);p===l&&(p=E),l=E;}let m=new Tt(l);l!==p&&d&&(m[":@"]=this.buildAttributesMap(p,s,l)),this.addChild(n,m,s,h),s=s.substr(0,s.lastIndexOf("."));}else if(this.options.unpairedTags.indexOf(l)!==-1){let m=new Tt(l);l!==p&&d&&(m[":@"]=this.buildAttributesMap(p,s)),this.addChild(n,m,s,h),s=s.substr(0,s.lastIndexOf(".")),i=c.closeIndex;continue}else {let m=new Tt(l);if(this.tagsNodeStack.length>this.options.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(n),l!==p&&d&&(m[":@"]=this.buildAttributesMap(p,s,l)),this.addChild(n,m,s),n=m;}r="",i=g;}}else r+=e[i];return t.child};function Xo(e,t,n,r){this.options.captureMetaData||(r=void 0);let s=this.options.updateTag(t.tagname,n,t[":@"]);s===false||(typeof s=="string"&&(t.tagname=s),e.addChild(t,r));}var Zo=function(e,t,n){if(e.indexOf("&")===-1)return e;let r=this.options.processEntities;if(!r.enabled||r.allowedTags&&!r.allowedTags.includes(t)||r.tagFilter&&!r.tagFilter(t,n))return e;for(let s in this.docTypeEntities){let o=this.docTypeEntities[s],i=e.match(o.regx);if(i){if(this.entityExpansionCount+=i.length,r.maxTotalExpansions&&this.entityExpansionCount>r.maxTotalExpansions)throw new Error(`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${r.maxTotalExpansions}`);let a=e.length;if(e=e.replace(o.regx,o.val),r.maxExpandedLength&&(this.currentExpandedLength+=e.length-a,this.currentExpandedLength>r.maxExpandedLength))throw new Error(`Total expanded content size exceeded: ${this.currentExpandedLength} > ${r.maxExpandedLength}`)}}if(e.indexOf("&")===-1)return e;for(let s of Object.keys(this.lastEntities)){let o=this.lastEntities[s],i=e.match(o.regex);if(i&&(this.entityExpansionCount+=i.length,r.maxTotalExpansions&&this.entityExpansionCount>r.maxTotalExpansions))throw new Error(`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${r.maxTotalExpansions}`);e=e.replace(o.regex,o.val);}if(e.indexOf("&")===-1)return e;if(this.options.htmlEntities)for(let s of Object.keys(this.htmlEntities)){let o=this.htmlEntities[s],i=e.match(o.regex);if(i&&(this.entityExpansionCount+=i.length,r.maxTotalExpansions&&this.entityExpansionCount>r.maxTotalExpansions))throw new Error(`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${r.maxTotalExpansions}`);e=e.replace(o.regex,o.val);}return e=e.replace(this.ampEntity.regex,this.ampEntity.val),e};function ei(e,t,n,r){return e&&(r===void 0&&(r=t.child.length===0),e=this.parseTextData(e,t.tagname,n,false,t[":@"]?Object.keys(t[":@"]).length!==0:false,r),e!==void 0&&e!==""&&t.add(this.options.textNodeName,e),e=""),e}function ti(e,t,n,r){return !!(t&&t.has(r)||e&&e.has(n))}function ni(e,t,n=">"){let r,s="";for(let o=t;o<e.length;o++){let i=e[o];if(r)i===r&&(r="");else if(i==='"'||i==="'")r=i;else if(i===n[0])if(n[1]){if(e[o+1]===n[1])return {data:s,index:o}}else return {data:s,index:o};else i===" "&&(i=" ");s+=i;}}function ot(e,t,n,r){let s=e.indexOf(t,n);if(s===-1)throw new Error(r);return s+t.length-1}function Bn(e,t,n,r=">"){let s=ni(e,t+1,r);if(!s)return;let o=s.data,i=s.index,a=o.search(/\s/),c=o,l=true;a!==-1&&(c=o.substring(0,a),o=o.substring(a+1).trimStart());let u=c;if(n){let p=c.indexOf(":");p!==-1&&(c=c.substr(p+1),l=c!==s.data.substr(p+1));}return {tagName:c,tagExp:o,closeIndex:i,attrExpPresent:l,rawTagName:u}}function si(e,t,n){let r=n,s=1;for(;n<e.length;n++)if(e[n]==="<")if(e[n+1]==="/"){let o=ot(e,">",n,`${t} is not closed`);if(e.substring(n+2,o).trim()===t&&(s--,s===0))return {tagContent:e.substring(r,n),i:o};n=o;}else if(e[n+1]==="?")n=ot(e,"?>",n+1,"StopNode is not closed.");else if(e.substr(n+1,3)==="!--")n=ot(e,"-->",n+3,"StopNode is not closed.");else if(e.substr(n+1,2)==="![")n=ot(e,"]]>",n,"StopNode is not closed.")-2;else {let o=Bn(e,n,">");o&&((o&&o.tagName)===t&&o.tagExp[o.tagExp.length-1]!=="/"&&s++,n=o.closeIndex);}}function On(e,t,n){if(t&&typeof e=="string"){let r=e.trim();return r==="true"?true:r==="false"?false:qo(e,n)}else return ln.isExist(e)?e:""}function _s(e,t,n){let r=Number.parseInt(e,t);return r>=0&&r<=1114111?String.fromCodePoint(r):n+e+";"}function ri(e,t){if(ln.criticalProperties.includes(e))throw new Error(`[SECURITY] Invalid name: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);return ln.DANGEROUS_PROPERTY_NAMES.includes(e)?t.onDangerousProperty(e):e}Ds.exports=Fn;});var Ws=a(qs=>{function oi(e,t){return Us(e,t)}function Us(e,t,n){let r,s={};for(let o=0;o<e.length;o++){let i=e[o],a=ii(i),c="";if(n===void 0?c=a:c=n+"."+a,a===t.textNodeName)r===void 0?r=i[a]:r+=""+i[a];else {if(a===void 0)continue;if(i[a]){let l=Us(i[a],t,c),u=ci(l,t);i[":@"]?ai(l,i[":@"],c,t):Object.keys(l).length===1&&l[t.textNodeName]!==void 0&&!t.alwaysCreateTextNode?l=l[t.textNodeName]:Object.keys(l).length===0&&(t.alwaysCreateTextNode?l[t.textNodeName]="":l=""),s[a]!==void 0&&s.hasOwnProperty(a)?(Array.isArray(s[a])||(s[a]=[s[a]]),s[a].push(l)):t.isArray(a,c,u)?s[a]=[l]:s[a]=l;}}}return typeof r=="string"?r.length>0&&(s[t.textNodeName]=r):r!==void 0&&(s[t.textNodeName]=r),s}function ii(e){let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=t[n];if(r!==":@")return r}}function ai(e,t,n,r){if(t){let s=Object.keys(t),o=s.length;for(let i=0;i<o;i++){let a=s[i];r.isArray(a,n+"."+a,true,true)?e[a]=[t[a]]:e[a]=t[a];}}}function ci(e,t){let{textNodeName:n}=t,r=Object.keys(e).length;return !!(r===0||r===1&&(e[n]||typeof e[n]=="boolean"||e[n]===0))}qs.prettify=oi;});var Hs=a((op,zs)=>{var{buildOptions:li}=As(),ui=Gs(),{prettify:pi}=Ws(),di=An(),Vn=class{constructor(t){this.externalEntities={},this.options=li(t);}parse(t,n){if(typeof t!="string")if(t.toString)t=t.toString();else throw new Error("XML data is accepted in String or Bytes[] form.");if(n){n===true&&(n={});let o=di.validate(t,n);if(o!==true)throw Error(`${o.err.msg}:${o.err.line}:${o.err.col}`)}let r=new ui(this.options);r.addExternalEntities(this.externalEntities);let s=r.parseXml(t);return this.options.preserveOrder||s===void 0?s:pi(s,this.options)}addEntity(t,n){if(n.indexOf("&")!==-1)throw new Error("Entity value can't have '&'");if(t.indexOf("&")!==-1||t.indexOf(";")!==-1)throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");if(n==="&")throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=n;}};zs.exports=Vn;});var Ys=a((ip,Qs)=>{function fi(e,t){let n="";return t.format&&t.indentBy.length>0&&(n=`
5
- `),Ks(e,t,"",n)}function Ks(e,t,n,r){let s="",o=false;if(!Array.isArray(e)){if(e!=null){let i=e.toString();return i=_n(i,t),i}return ""}for(let i=0;i<e.length;i++){let a=e[i],c=mi(a);if(c===void 0)continue;let l="";if(n.length===0?l=c:l=`${n}.${c}`,c===t.textNodeName){let y=a[c];hi(l,t)||(y=t.tagValueProcessor(c,y),y=_n(y,t)),o&&(s+=r),s+=y,o=false;continue}else if(c===t.cdataPropName){o&&(s+=r),s+=`<![CDATA[${a[c][0][t.textNodeName]}]]>`,o=false;continue}else if(c===t.commentPropName){s+=r+`<!--${a[c][0][t.textNodeName]}-->`,o=true;continue}else if(c[0]==="?"){let y=Js(a[":@"],t),h=c==="?xml"?"":r,m=a[c][0][t.textNodeName];m=m.length!==0?" "+m:"",s+=h+`<${c}${m}${y}?>`,o=true;continue}let u=r;u!==""&&(u+=t.indentBy);let p=Js(a[":@"],t),d=r+`<${c}${p}`,g=Ks(a[c],t,l,u);t.unpairedTags.indexOf(c)!==-1?t.suppressUnpairedNode?s+=d+">":s+=d+"/>":(!g||g.length===0)&&t.suppressEmptyNode?s+=d+"/>":g&&g.endsWith(">")?s+=d+`>${g}${r}</${c}>`:(s+=d+">",g&&r!==""&&(g.includes("/>")||g.includes("</"))?s+=r+t.indentBy+g+r:s+=g,s+=`</${c}>`),o=true;}return s}function mi(e){let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=t[n];if(Object.prototype.hasOwnProperty.call(e,r)&&r!==":@")return r}}function Js(e,t){let n="";if(e&&!t.ignoreAttributes)for(let r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;let s=t.attributeValueProcessor(r,e[r]);s=_n(s,t),s===true&&t.suppressBooleanAttributes?n+=` ${r.substr(t.attributeNamePrefix.length)}`:n+=` ${r.substr(t.attributeNamePrefix.length)}="${s}"`;}return n}function hi(e,t){e=e.substr(0,e.length-t.textNodeName.length-1);let n=e.substr(e.lastIndexOf(".")+1);for(let r in t.stopNodes)if(t.stopNodes[r]===e||t.stopNodes[r]==="*."+n)return true;return false}function _n(e,t){if(e&&e.length>0&&t.processEntities)for(let n=0;n<t.entities.length;n++){let r=t.entities[n];e=e.replace(r.regex,r.val);}return e}Qs.exports=fi;});var Zs=a((ap,Xs)=>{var gi=Ys(),yi=Rn(),bi={attributeNamePrefix:"@_",attributesGroupName:false,textNodeName:"#text",ignoreAttributes:true,cdataPropName:false,format:false,indentBy:" ",suppressEmptyNode:false,suppressUnpairedNode:true,suppressBooleanAttributes:true,tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},preserveOrder:false,commentPropName:false,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&amp;"},{regex:new RegExp(">","g"),val:"&gt;"},{regex:new RegExp("<","g"),val:"&lt;"},{regex:new RegExp("'","g"),val:"&apos;"},{regex:new RegExp('"',"g"),val:"&quot;"}],processEntities:true,stopNodes:[],oneListGroup:false};function Ke(e){this.options=Object.assign({},bi,e),this.options.ignoreAttributes===true||this.options.attributesGroupName?this.isAttribute=function(){return false}:(this.ignoreAttributesFn=yi(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Si),this.processTextOrObjNode=vi,this.options.format?(this.indentate=wi,this.tagEndChar=`>
6
- `,this.newLine=`
7
- `):(this.indentate=function(){return ""},this.tagEndChar=">",this.newLine="");}Ke.prototype.build=function(e){return this.options.preserveOrder?gi(e,this.options):(Array.isArray(e)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(e={[this.options.arrayNodeName]:e}),this.j2x(e,0,[]).val)};Ke.prototype.j2x=function(e,t,n){let r="",s="",o=n.join(".");for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i))if(typeof e[i]>"u")this.isAttribute(i)&&(s+="");else if(e[i]===null)this.isAttribute(i)||i===this.options.cdataPropName?s+="":i[0]==="?"?s+=this.indentate(t)+"<"+i+"?"+this.tagEndChar:s+=this.indentate(t)+"<"+i+"/"+this.tagEndChar;else if(e[i]instanceof Date)s+=this.buildTextValNode(e[i],i,"",t);else if(typeof e[i]!="object"){let a=this.isAttribute(i);if(a&&!this.ignoreAttributesFn(a,o))r+=this.buildAttrPairStr(a,""+e[i]);else if(!a)if(i===this.options.textNodeName){let c=this.options.tagValueProcessor(i,""+e[i]);s+=this.replaceEntitiesValue(c);}else s+=this.buildTextValNode(e[i],i,"",t);}else if(Array.isArray(e[i])){let a=e[i].length,c="",l="";for(let u=0;u<a;u++){let p=e[i][u];if(!(typeof p>"u"))if(p===null)i[0]==="?"?s+=this.indentate(t)+"<"+i+"?"+this.tagEndChar:s+=this.indentate(t)+"<"+i+"/"+this.tagEndChar;else if(typeof p=="object")if(this.options.oneListGroup){let d=this.j2x(p,t+1,n.concat(i));c+=d.val,this.options.attributesGroupName&&p.hasOwnProperty(this.options.attributesGroupName)&&(l+=d.attrStr);}else c+=this.processTextOrObjNode(p,i,t,n);else if(this.options.oneListGroup){let d=this.options.tagValueProcessor(i,p);d=this.replaceEntitiesValue(d),c+=d;}else c+=this.buildTextValNode(p,i,"",t);}this.options.oneListGroup&&(c=this.buildObjectNode(c,i,l,t)),s+=c;}else if(this.options.attributesGroupName&&i===this.options.attributesGroupName){let a=Object.keys(e[i]),c=a.length;for(let l=0;l<c;l++)r+=this.buildAttrPairStr(a[l],""+e[i][a[l]]);}else s+=this.processTextOrObjNode(e[i],i,t,n);return {attrStr:r,val:s}};Ke.prototype.buildAttrPairStr=function(e,t){return t=this.options.attributeValueProcessor(e,""+t),t=this.replaceEntitiesValue(t),this.options.suppressBooleanAttributes&&t==="true"?" "+e:" "+e+'="'+t+'"'};function vi(e,t,n,r){let s=this.j2x(e,n+1,r.concat(t));return e[this.options.textNodeName]!==void 0&&Object.keys(e).length===1?this.buildTextValNode(e[this.options.textNodeName],t,s.attrStr,n):this.buildObjectNode(s.val,t,s.attrStr,n)}Ke.prototype.buildObjectNode=function(e,t,n,r){if(e==="")return t[0]==="?"?this.indentate(r)+"<"+t+n+"?"+this.tagEndChar:this.indentate(r)+"<"+t+n+this.closeTag(t)+this.tagEndChar;{let s="</"+t+this.tagEndChar,o="";return t[0]==="?"&&(o="?",s=""),(n||n==="")&&e.indexOf("<")===-1?this.indentate(r)+"<"+t+n+o+">"+e+s:this.options.commentPropName!==false&&t===this.options.commentPropName&&o.length===0?this.indentate(r)+`<!--${e}-->`+this.newLine:this.indentate(r)+"<"+t+n+o+this.tagEndChar+e+this.indentate(r)+s}};Ke.prototype.closeTag=function(e){let t="";return this.options.unpairedTags.indexOf(e)!==-1?this.options.suppressUnpairedNode||(t="/"):this.options.suppressEmptyNode?t="/":t=`></${e}`,t};Ke.prototype.buildTextValNode=function(e,t,n,r){if(this.options.cdataPropName!==false&&t===this.options.cdataPropName)return this.indentate(r)+`<![CDATA[${e}]]>`+this.newLine;if(this.options.commentPropName!==false&&t===this.options.commentPropName)return this.indentate(r)+`<!--${e}-->`+this.newLine;if(t[0]==="?")return this.indentate(r)+"<"+t+n+"?"+this.tagEndChar;{let s=this.options.tagValueProcessor(t,e);return s=this.replaceEntitiesValue(s),s===""?this.indentate(r)+"<"+t+n+this.closeTag(t)+this.tagEndChar:this.indentate(r)+"<"+t+n+">"+s+"</"+t+this.tagEndChar}};Ke.prototype.replaceEntitiesValue=function(e){if(e&&e.length>0&&this.options.processEntities)for(let t=0;t<this.options.entities.length;t++){let n=this.options.entities[t];e=e.replace(n.regex,n.val);}return e};function wi(e){return this.options.indentBy.repeat(e)}function Si(e){return e.startsWith(this.options.attributeNamePrefix)&&e!==this.options.textNodeName?e.substr(this.attrPrefixLen):false}Xs.exports=Ke;});var Dn=a((cp,er)=>{var ki=An(),ji=Hs(),Pi=Zs();er.exports={XMLParser:ji,XMLValidator:ki,XMLBuilder:Pi};});function ho(e){switch(e){case "node":return "nodejs";case "python":return "python";case "dotnet":return "dotnet";case "java":return "java";case "php":return "php";case "ruby":return "ruby";case "go":return "go";default:return null}}function Je(e,t){if(!t)return null;switch(e){case "python":case "php":case "ruby":case "go":{let n=t.match(/(\d+)\.(\d+)/);return n?`${n[1]}.${n[2]}`:null}case "dotnet":{let n=t.match(/(\d+)\.(\d+)/)??t.match(/(\d+)/);return n?n[2]!==void 0?`${n[1]}.${n[2]}`:`${n[1]}.0`:null}case "node":{let n=t.match(/(\d+)/);return n?n[1]:null}case "java":{let n=t.match(/1\.(\d+)/);if(n)return n[1];let r=t.match(/(\d+)/);return r?r[1]:null}default:return null}}function go(e,t,n=Date.now()){let r=t.find(o=>String(o.cycle)===e);if(!r)return null;if(typeof r.eol=="boolean")return r.eol;let s=Date.parse(r.eol);return Number.isNaN(s)?null:s<=n}function bs(e){let t=String(e).match(/^(\d+)(?:\.(\d+))?/);return t?{major:parseInt(t[1],10),minor:t[2]?parseInt(t[2],10):0}:null}function an(e){return e.major*1e3+e.minor}function vs(e,t){if(typeof e.releaseDate!="string")return true;let n=Date.parse(e.releaseDate);return Number.isNaN(n)?true:n<=t}function yo(e,t){if(e.lts===true)return true;if(typeof e.lts=="string"){let n=Date.parse(e.lts);return !Number.isNaN(n)&&n<=t}return false}function cn(e,t){return e.products[t]?.cycles??[]}function Bt(e,t,n=Date.now()){let r=null;for(let s of cn(e,t)){if(!vs(s,n))continue;let o=bs(s.cycle);o&&(!r||an(o)>an(r))&&(r=o);}return r}function $n(e,t,n=Date.now()){let r=null;for(let s of cn(e,t)){if(!vs(s,n)||!yo(s,n))continue;let o=bs(s.cycle);o&&(!r||an(o)>an(r))&&(r=o);}return r}function nt(e,t,n){let r=cn(e,t).find(s=>String(s.cycle)===n);return r&&typeof r.eol=="string"?r.eol:void 0}function st(e,t,n,r=Date.now()){let s=ho(t);if(!s)return null;let o=Je(t,n);return o?go(o,cn(e,s),r):null}var ke={generatedAt:"2026-06-01",source:"endoflife.date",products:{nodejs:{product:"nodejs",cycles:[{cycle:"24",releaseDate:"2025-05-06",lts:"2025-10-28",eol:"2028-04-30"},{cycle:"23",releaseDate:"2024-10-16",lts:false,eol:"2025-06-01"},{cycle:"22",releaseDate:"2024-04-24",lts:"2024-10-29",eol:"2027-04-30"},{cycle:"20",releaseDate:"2023-04-18",lts:"2023-10-24",eol:"2026-04-30"},{cycle:"18",releaseDate:"2022-04-19",lts:"2022-10-25",eol:"2025-04-30"}]},python:{product:"python",cycles:[{cycle:"3.14",releaseDate:"2025-10-07",eol:"2030-10-01"},{cycle:"3.13",releaseDate:"2024-10-07",eol:"2029-10-01"},{cycle:"3.12",releaseDate:"2023-10-02",eol:"2028-10-01"},{cycle:"3.11",releaseDate:"2022-10-24",eol:"2027-10-01"},{cycle:"3.10",releaseDate:"2021-10-04",eol:"2026-10-01"},{cycle:"3.9",releaseDate:"2020-10-05",eol:"2025-10-01"},{cycle:"3.8",releaseDate:"2019-10-14",eol:"2024-10-07"}]},dotnet:{product:"dotnet",cycles:[{cycle:"10.0",releaseDate:"2025-11-11",lts:true,eol:"2028-11-10"},{cycle:"9.0",releaseDate:"2024-11-12",lts:false,eol:"2026-05-12"},{cycle:"8.0",releaseDate:"2023-11-14",lts:true,eol:"2026-11-10"},{cycle:"7.0",releaseDate:"2022-11-08",lts:false,eol:"2024-05-14"},{cycle:"6.0",releaseDate:"2021-11-08",lts:true,eol:"2024-11-12"}]},java:{product:"java",cycles:[{cycle:"25",releaseDate:"2025-09-16",lts:true,eol:"2033-09-01"},{cycle:"21",releaseDate:"2023-09-19",lts:true,eol:"2031-09-01"},{cycle:"17",releaseDate:"2021-09-14",lts:true,eol:"2029-09-01"},{cycle:"11",releaseDate:"2018-09-25",lts:true,eol:"2026-09-01"},{cycle:"8",releaseDate:"2014-03-18",lts:true,eol:"2030-12-01"}]},php:{product:"php",cycles:[{cycle:"8.4",releaseDate:"2024-11-21",eol:"2028-12-31"},{cycle:"8.3",releaseDate:"2023-11-23",eol:"2027-12-31"},{cycle:"8.2",releaseDate:"2022-12-08",eol:"2026-12-31"},{cycle:"8.1",releaseDate:"2021-11-25",eol:"2025-12-31"},{cycle:"8.0",releaseDate:"2020-11-26",eol:"2023-11-26"}]},ruby:{product:"ruby",cycles:[{cycle:"3.5",releaseDate:"2025-12-25",eol:"2029-03-31"},{cycle:"3.4",releaseDate:"2024-12-25",eol:"2028-03-31"},{cycle:"3.3",releaseDate:"2023-12-25",eol:"2027-03-31"},{cycle:"3.2",releaseDate:"2022-12-25",eol:"2026-03-31"},{cycle:"3.1",releaseDate:"2021-12-25",eol:"2025-03-31"}]},go:{product:"go",cycles:[{cycle:"1.25",releaseDate:"2025-08-13",eol:false},{cycle:"1.24",releaseDate:"2025-02-11",eol:false},{cycle:"1.23",releaseDate:"2024-08-13",eol:true},{cycle:"1.22",releaseDate:"2024-02-06",eol:true}]}}};var be=b(a$1(),1),Ze=b(a$1(),1),dt=b(a$1(),1),Br=b(Dn(),1),ft=b(a$1(),1),mt=b(a$1(),1),_r=b(Dn(),1),ht=b(a$1(),1),Pe=b(a$1(),1),Ee=b(a$1(),1),Te=b(a$1(),1),Me=b(a$1(),1),Ce=b(a$1(),1),bn=b(a$1(),1),me=b(a$1(),1),vn=b(a$1(),1),gt=b(a$1(),1),he=b(a$1(),1),Nt=b(a$1(),1),Y=b(a$1(),1),$e=b(a$1(),1),Jt=b(a$1(),1),Kt=b(a$1(),1),Qt=b(a$1(),1),Z=b(a$1(),1),ue=b(a$1(),1),pe=b(a$1(),1),de=b(a$1(),1),fe=b(a$1(),1),Xr=b(a$1(),1);var Ei=["vibgrate.config.ts","vibgrate.config.js","vibgrate.config.json"],Ti="VIBGRATE_TRUST_CONFIG";function Mi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Gt(e,t){if(B.isParenthesizedExpression(e))return Gt(e.expression,t);if(B.isStringLiteralLike(e))return e.text;if(B.isNumericLiteral(e))return Number(e.text);if(e.kind===B.SyntaxKind.TrueKeyword)return true;if(e.kind===B.SyntaxKind.FalseKeyword)return false;if(e.kind===B.SyntaxKind.NullKeyword)return null;if(B.isArrayLiteralExpression(e))return e.elements.map(n=>{if(B.isSpreadElement(n))throw new Error("Spread not supported in static config arrays");return Gt(n,t)});if(B.isObjectLiteralExpression(e)){let n={};for(let r of e.properties){if(!B.isPropertyAssignment(r)||r.initializer===void 0)throw new Error("Only plain object properties are supported in static config");if(B.isComputedPropertyName(r.name))throw new Error("Computed property names are not supported in static config");let s=B.isIdentifier(r.name)||B.isStringLiteral(r.name)||B.isNumericLiteral(r.name)?r.name.text:null;if(s===null)throw new Error("Unsupported object key in static config");n[s]=Gt(r.initializer,t);}return n}if(B.isIdentifier(e)){let n=t.get(e.text);if(!n)throw new Error(`Unknown identifier in static config: ${e.text}`);return Gt(n,t)}throw new Error("Non-static expression in config")}function Ci(e,t){let n=t.endsWith(".ts")?B.ScriptKind.TS:B.ScriptKind.JS,r=B.createSourceFile(t,e,B.ScriptTarget.ESNext,true,n),s=new Map;for(let o of r.statements)if(B.isVariableStatement(o)&&o.declarationList.flags&B.NodeFlags.Const)for(let i of o.declarationList.declarations)B.isIdentifier(i.name)&&i.initializer&&s.set(i.name.text,i.initializer);for(let o of r.statements){if(!B.isExportAssignment(o))continue;let i=Gt(o.expression,s);return Mi(i)?{...mn,...i}:null}return null}var $i=5242880,xi=180,mn={exclude:[],maxFileSizeToScan:$i,projectScanTimeout:xi,thresholds:{failOnError:{eolDays:180,frameworkMajorLag:3,dependencyTwoPlusPercent:50},warn:{frameworkMajorLag:2,dependencyTwoPlusPercent:30}}};async function Ai(e){let t=mn;for(let r of Ei){let s=F.join(e,r);if(await p(s)){if(r.endsWith(".json")){let a=await o(s);t={...mn,...JSON.parse(a)};break}let o$1=await o(s),i=null;try{i=Ci(o$1,s);}catch{i=null;}if(i){t=i;break}if(process.env[Ti]==="1")try{let a=await import(s);t={...mn,...a.default??a};break}catch{}}}let n=F.join(e,".vibgrate","auto-excludes.json");if(await p(n))try{let r=await o(n),s=JSON.parse(r);if(Array.isArray(s)&&s.length>0){let o=t.exclude??[];t={...t,exclude:[...new Set([...o,...s])]};}}catch{}return t}async function mp(e){let t=F.join(e,"vibgrate.config.ts");return await ge.writeFile(t,`import type { VibgrateConfig } from '@vibgrate/cli';
8
-
9
- const config: VibgrateConfig = {
10
- // exclude: ['legacy/**'],
11
- // maxFileSizeToScan: 5_242_880, // 5 MB (default)
12
- // projectScanTimeout: 180, // 3 min per project (default, in seconds)
13
- thresholds: {
14
- failOnError: {
15
- eolDays: 180,
16
- frameworkMajorLag: 3,
17
- dependencyTwoPlusPercent: 50,
18
- },
19
- warn: {
20
- frameworkMajorLag: 2,
21
- dependencyTwoPlusPercent: 30,
22
- },
23
- },
24
- };
25
-
26
- export default config;
27
- `,"utf8"),t}async function Ni(e,t){if(t.length===0)return false;let n=F.join(e,"vibgrate.config.json");if(await p(n))try{let a=await o(n),c=JSON.parse(a),l=Array.isArray(c.exclude)?c.exclude:[],u=[...new Set([...l,...t])];return c.exclude=u,await ge.writeFile(n,JSON.stringify(c,null,2)+`
28
- `,"utf8"),!0}catch{}let r=F.join(e,".vibgrate"),s=F.join(r,"auto-excludes.json"),o$1=[];if(await p(s))try{let a=await o(s),c=JSON.parse(a);Array.isArray(c)&&(o$1=c);}catch{}let i=[...new Set([...o$1,...t])];try{return await ge.mkdir(r,{recursive:!0}),await ge.writeFile(s,JSON.stringify(i,null,2)+`
29
- `,"utf8"),!0}catch{return false}}var Li=864e5,Ii=365.25;function Ri(e,t,n){if(!e||!t||!n)return null;let r=n[e],s=n[t];if(!r||!s)return null;let o=Date.parse(r),i=Date.parse(s);if(Number.isNaN(o)||Number.isNaN(i))return null;let a=(i-o)/Li;return a>0?a:0}function Fi(e){return e===null?null:e/Ii}function Bi(e){let t=0,n=0,r=0;for(let s of e)s==null||Number.isNaN(s)||(t+=s,s>n&&(n=s),r++);return r===0?null:{total:t,max:n,measured:r}}function Oi(e){if(!e||e.measured===0)return null;let t=e.total/e.measured,n=Math.min(t*20,100),r=Math.min(e.max*10,100),s=100-(n*.7+r*.3);return Math.max(0,Math.min(100,Math.round(s)))}var tr="driftscore-2.0",nr={failOnError:{eolDays:180,frameworkMajorLag:3,dependencyTwoPlusPercent:50},warn:{frameworkMajorLag:2,dependencyTwoPlusPercent:30}};function Pr(e,t,n){return Math.min(n,Math.max(t,e))}function Vi(e){if(e.length===0)return null;let t=e.map(r=>r.runtimeMajorsBehind).filter(r=>r!==void 0);if(t.length===0)return null;let n=Math.max(...t);return n===0?100:n===1?80:n===2?50:n===3?20:0}function _i(e){let t=e.flatMap(a=>a.frameworks);if(t.length===0)return null;let n=t.map(a=>a.majorsBehind).filter(a=>a!==null);if(n.length===0)return null;let r=Math.max(...n),s=n.reduce((a,c)=>a+c,0)/n.length,o=Math.min(r*20,100),i=Math.min(s*15,100);return Pr(100-(o*.6+i*.4),0,100)}function Di(e){let t=0,n=0,r=0,s=0;for(let l of e)t+=l.dependencyAgeBuckets.current,n+=l.dependencyAgeBuckets.oneBehind,r+=l.dependencyAgeBuckets.twoPlusBehind,s+=l.dependencyAgeBuckets.unknown;let o=t+n+r;if(o===0)return null;let i=t/o,a=n/o,c=r/o;return Pr(Math.round(i*100-a*10-c*40),0,100)}var sr=1e3*60*60*24*30;function Gi(e){if(!e.some(s=>s.runtimeMajorsBehind!==void 0||s.runtimeEol!==void 0&&s.runtimeEol!==null))return null;let n=100,r=Date.now();for(let s of e){if(s.runtimeEol===true){n=Math.min(n,0);continue}if(s.runtimeEol===false){if(s.runtimeEolDate){let o=Date.parse(s.runtimeEolDate)-r;Number.isNaN(o)||(o<=6*sr?n=Math.min(n,40):o<=12*sr&&(n=Math.min(n,75)));}continue}s.type==="node"&&s.runtimeMajorsBehind!==void 0&&(s.runtimeMajorsBehind>=3?n=Math.min(n,0):s.runtimeMajorsBehind>=2?n=Math.min(n,30):s.runtimeMajorsBehind>=1&&(n=Math.min(n,70))),s.type==="dotnet"&&s.runtimeMajorsBehind!==void 0&&(s.runtimeMajorsBehind>=3?n=Math.min(n,0):s.runtimeMajorsBehind>=2?n=Math.min(n,20):s.runtimeMajorsBehind>=1&&(n=Math.min(n,60))),s.type==="python"&&s.runtimeMajorsBehind!==void 0&&(s.runtimeMajorsBehind>=6?n=Math.min(n,0):s.runtimeMajorsBehind>=4?n=Math.min(n,20):s.runtimeMajorsBehind>=2&&(n=Math.min(n,60))),s.type==="java"&&s.runtimeMajorsBehind!==void 0&&(s.runtimeMajorsBehind>=10?n=Math.min(n,0):s.runtimeMajorsBehind>=4?n=Math.min(n,30):s.runtimeMajorsBehind>=1&&(n=Math.min(n,70)));}return n}function Ui(e){let t=e.map(o=>o.libyears).filter(o=>!!o);if(t.length===0)return null;let n=t.reduce((o,i)=>o+i.total,0),r=t.reduce((o,i)=>o+i.measured,0),s=t.reduce((o,i)=>Math.max(o,i.max),0);return r===0?null:Oi({total:n,max:s,measured:r})}function qi(e){let t=0,n=0;for(let s of e)t+=s.dependencyAgeBuckets.current+s.dependencyAgeBuckets.oneBehind+s.dependencyAgeBuckets.twoPlusBehind,n+=s.dependencyAgeBuckets.unknown;let r=t+n;return r===0?null:Math.round(t/r*100)/100}function Gn(e){let t=Vi(e),n=_i(e),r=Di(e),s=Gi(e),o=Ui(e),i=[{score:t,weight:.25},{score:n,weight:.25},{score:r,weight:.3},{score:s,weight:.2},{score:o,weight:.15}],a=qi(e)??void 0,c=m=>100-m,l=()=>{let m={runtimeScore:c(Math.round(t??100)),frameworkScore:c(Math.round(n??100)),dependencyScore:c(Math.round(r??100)),eolScore:c(Math.round(s??100))};return o!==null&&(m.freshnessScore=c(Math.round(o))),m},u=i.filter(m=>m.score!==null);if(u.length===0)return {score:0,riskLevel:"low",components:l(),methodologyVersion:tr,...a!==void 0?{confidence:a}:{}};let p=u.reduce((m,E)=>m+E.weight,0),d=0;for(let m of u)d+=m.score*(m.weight/p);let g=c(Math.round(d)),y;g<=30?y="low":g<=60?y="moderate":y="high";let h=[];return t!==null&&h.push("runtime"),n!==null&&h.push("framework"),r!==null&&h.push("dependency"),s!==null&&h.push("eol"),o!==null&&h.push("freshness"),{score:g,riskLevel:y,components:l(),measured:h,methodologyVersion:tr,...a!==void 0?{confidence:a}:{}}}function Wi(e,t){let n={failOnError:{...nr.failOnError,...t?.thresholds?.failOnError},warn:{...nr.warn,...t?.thresholds?.warn}},r=[];for(let s of e){let o=s.type==="node"?"Node.js":s.type==="dotnet"?".NET":s.type==="python"?"Python":s.type==="java"?"Java":s.type;if(s.runtimeEol===true){let a=s.runtimeEolDate?` on ${s.runtimeEolDate}`:"";r.push({ruleId:"vibgrate/runtime-eol",level:"error",message:`${o} runtime "${s.runtime}" reached end-of-life${a} (latest: ${s.runtimeLatest}).`,location:s.path});}else s.runtimeMajorsBehind!==void 0&&s.runtimeMajorsBehind>=3?r.push({ruleId:"vibgrate/runtime-eol",level:"error",message:`${o} runtime "${s.runtime}" is ${s.runtimeMajorsBehind} major versions behind (latest: ${s.runtimeLatest}). Likely at or past EOL.`,location:s.path}):s.runtimeMajorsBehind!==void 0&&s.runtimeMajorsBehind>=2&&r.push({ruleId:"vibgrate/runtime-lag",level:"warning",message:`${o} runtime "${s.runtime}" is ${s.runtimeMajorsBehind} major versions behind (latest: ${s.runtimeLatest}).`,location:s.path});for(let a of s.frameworks)a.majorsBehind!==null&&n.failOnError.frameworkMajorLag!==void 0&&a.majorsBehind>=n.failOnError.frameworkMajorLag?r.push({ruleId:"vibgrate/framework-major-lag",level:"error",message:`${a.name} is ${a.majorsBehind} major versions behind (current: ${a.currentVersion}, latest: ${a.latestVersion}).`,location:s.path}):a.majorsBehind!==null&&n.warn.frameworkMajorLag!==void 0&&a.majorsBehind>=n.warn.frameworkMajorLag&&r.push({ruleId:"vibgrate/framework-major-lag",level:"warning",message:`${a.name} is ${a.majorsBehind} major versions behind (current: ${a.currentVersion}, latest: ${a.latestVersion}).`,location:s.path});let i=s.dependencyAgeBuckets.current+s.dependencyAgeBuckets.oneBehind+s.dependencyAgeBuckets.twoPlusBehind;if(i>0){let a=s.dependencyAgeBuckets.twoPlusBehind/i*100;n.failOnError.dependencyTwoPlusPercent!==void 0&&a>=n.failOnError.dependencyTwoPlusPercent?r.push({ruleId:"vibgrate/dependency-rot",level:"error",message:`${Math.round(a)}% of dependencies are 2+ major versions behind in ${s.name}.`,location:s.path}):n.warn.dependencyTwoPlusPercent!==void 0&&a>=n.warn.dependencyTwoPlusPercent&&r.push({ruleId:"vibgrate/dependency-rot",level:"warning",message:`${Math.round(a)}% of dependencies are 2+ major versions behind in ${s.name}.`,location:s.path});}for(let a of s.dependencies)a.majorsBehind!==null&&a.majorsBehind>=3&&r.push({ruleId:"vibgrate/dependency-major-lag",level:"error",message:`${a.package} is ${a.majorsBehind} major versions behind (spec: ${a.currentSpec}, latest: ${a.latestStable}).`,location:s.path});}return r}function zi(e,t,n){let r=n?`${e}:${t}:${n}`:`${e}:${t}`;return Xn.createHash("sha256").update(r).digest("hex").slice(0,16)}function Hi(e,t,n){let r=n?`${e}:${t}:${n}`:`${e}:${t}`;return Xn.createHash("sha256").update(r).digest("hex").slice(0,16)}var Ji=20,Ki=50,rr={red:"#E5484D",amber:"#F5A524",green:"#30A46C",unknown:"#6B7280"},hp="#24292F";function gp(e){if(e==null||!Number.isFinite(e))return "unknown";let t=Math.round(e);return t<=Ji?"green":t<=Ki?"amber":"red"}function yp(e){if(e==null||!Number.isFinite(e))return "unknown";let t=Math.round(Math.min(100,Math.max(0,e)));return t===100?"100":String(t).padStart(2,"0")}function bp(e){return rr[e]??rr.unknown}function Qi(e){let t=[];t.push(""),t.push(j.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),t.push(j.bold.cyan("\u2551 Vibgrate Drift Report \u2551")),t.push(j.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),t.push("");for(let a of e.projects){if(t.push(j.bold(` \u2500\u2500 ${a.name} `)+j.dim(`(${a.type}) ${a.path}`)),a.runtime){let u=a.runtimeMajorsBehind!==void 0&&a.runtimeMajorsBehind>0?j.yellow(` (${a.runtimeMajorsBehind} major${a.runtimeMajorsBehind>1?"s":""} behind)`):j.green(" (current)");t.push(` Runtime: ${a.runtime}${u}`);}if(a.targetFramework&&t.push(` Target: ${a.targetFramework}`),a.frameworks.length>0){t.push(" Frameworks:");for(let u of a.frameworks){let p=u.majorsBehind!==null?u.majorsBehind===0?j.green("current"):j.yellow(`${u.majorsBehind} behind`):j.dim("unknown");t.push(` ${u.name}: ${u.currentVersion??"?"} \u2192 ${u.latestVersion??"?"} (${p})`);}}let c=a.dependencyAgeBuckets;c.current+c.oneBehind+c.twoPlusBehind+c.unknown>0&&(t.push(" Dependencies:"),t.push(` ${j.green(`${c.current} current`)} ${j.yellow(`${c.oneBehind} 1-behind`)} ${j.red(`${c.twoPlusBehind} 2+ behind`)} ${j.dim(`${c.unknown} unknown`)}`)),t.push("");}if(e.delta!==void 0){let a=e.delta<0?j.green(`${e.delta}`):e.delta>0?j.red(`+${e.delta}`):j.dim("0");t.push(j.bold(" Drift Delta: ")+a+" (vs baseline)"),t.push("");}if(e.extended&&t.push(...Xi(e.extended)),e.findings.length>0){let a=e.findings.filter(p=>p.level==="error"),c=e.findings.filter(p=>p.level==="warning"),l=e.findings.filter(p=>p.level==="note"),u=[a.length>0?j.red(`${a.length} error${a.length!==1?"s":""}`):"",c.length>0?j.yellow(`${c.length} warning${c.length!==1?"s":""}`):"",l.length>0?j.blue(`${l.length} note${l.length!==1?"s":""}`):""].filter(Boolean).join(j.dim(", "));t.push(j.bold.underline(" Findings")+j.dim(` (${u})`));for(let p of e.findings){let d=p.level==="error"?j.red("\u2716"):p.level==="warning"?j.yellow("\u26A0"):j.blue("\u2139");t.push(` ${d} ${p.message}`),t.push(j.dim(` ${p.ruleId} in ${p.location}`));}t.push("");}let n=ea(e);if(n.length>0){t.push(j.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),t.push(j.bold.cyan("\u2551 Top Priority Actions \u2551")),t.push(j.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),t.push("");for(let a=0;a<n.length;a++){let c=n[a],l=j.bold.cyan(` ${a+1}.`);t.push(`${l} ${j.bold(c.title)}`),t.push(j.dim(` ${c.explanation}`)),c.impact&&t.push(` Impact: ${j.green(c.impact)}`),t.push("");}}if(e.extended?.architecture&&t.push(...Zi(e.extended.architecture)),e.solutions&&e.solutions.length>0){t.push(j.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),t.push(j.bold.cyan("\u2551 Solution Drift Summary \u2551")),t.push(j.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),t.push("");for(let a of e.solutions){let c=a.drift?.score,l=typeof c=="number"?c<=30?j.green:c<=60?j.yellow:j.red:j.dim;t.push(` \u2022 ${a.name} (${a.projectPaths.length} projects) \u2014 ${typeof c=="number"?l(`${c}/100`):j.dim("n/a")}`);}t.push("");}let r=e.drift.score<=30?j.green:e.drift.score<=60?j.yellow:j.red;t.push(j.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),t.push(j.bold.cyan("\u2551 Drift Score Summary \u2551")),t.push(j.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),t.push(""),t.push(j.bold(" Drift Score: ")+r.bold(`${e.drift.score}/100`)),t.push(j.bold(" Risk Level: ")+Yi(e.drift.riskLevel)),t.push(j.bold(" Projects: ")+`${e.projects.length}`);let s=e.billing;if(s&&(t.push(j.bold(" Classified: ")+`${j.cyan(s.microCount)} micro \xB7 ${j.cyan(s.smallCount)} small \xB7 ${j.cyan(s.standardCount)} standard`),t.push(j.bold(" Billable: ")+j.bold.white(`${s.billableProjects}`)+j.dim(` \xB7 ${s.totalScanned} detected \u2192 ${s.billableProjects} billable (micro-project pricing)`))),e.vcs){let a=[e.vcs.type];e.vcs.branch&&a.push(e.vcs.branch),e.vcs.shortSha&&a.push(j.dim(e.vcs.shortSha)),t.push(j.bold(" VCS: ")+a.join(" "));}t.push("");let o=new Set(e.drift.measured??["runtime","framework","dependency","eol"]);t.push(" "+j.bold.underline("Score Breakdown")),t.push(` Runtime: ${o.has("runtime")?Ut(e.drift.components.runtimeScore):j.dim("n/a")}`),t.push(` Frameworks: ${o.has("framework")?Ut(e.drift.components.frameworkScore):j.dim("n/a")}`),t.push(` Dependencies: ${o.has("dependency")?Ut(e.drift.components.dependencyScore):j.dim("n/a")}`),t.push(` EOL Risk: ${o.has("eol")?Ut(e.drift.components.eolScore):j.dim("n/a")}`),t.push("");let i=[`Scanned at ${e.timestamp}`];if(e.durationMs!==void 0){let a=(e.durationMs/1e3).toFixed(1);i.push(`${a}s`);}return e.filesScanned!==void 0&&i.push(`${e.filesScanned} file${e.filesScanned!==1?"s":""} scanned`),e.treeSummary&&(i.push(`${e.treeSummary.totalFiles.toLocaleString()} workspace files`),i.push(`${e.treeSummary.totalDirs.toLocaleString()} dirs`)),t.push(j.dim(` ${i.join(" \xB7 ")}`)),t.push(""),t.join(`
30
- `)}function Yi(e){switch(e){case "low":return j.bgGreen.black(" LOW ");case "moderate":return j.bgYellow.black(" MODERATE ");case "high":return j.bgRed.white(" HIGH ");default:return e}}function Ut(e){let n=Math.round(e/100*20),r=20-n;return (e<=30?j.green:e<=60?j.yellow:j.red)("\u2588".repeat(n))+j.dim("\u2591".repeat(r))+` ${Math.round(e)}`}var or={frontend:"Frontend",metaFrameworks:"Meta-frameworks",bundlers:"Bundlers",css:"CSS / UI",backend:"Backend",orm:"ORM / Database",testing:"Testing",lintFormat:"Lint & Format",apiMessaging:"API & Messaging",observability:"Observability",payment:"Payment",auth:"Auth",email:"Email",cloud:"Cloud",databases:"Databases",messaging:"Messaging",crm:"CRM & Comms",storage:"Storage",search:"Search & AI"};function Xi(e){let t=[];if(e.toolingInventory){let n=e.toolingInventory,r=Object.entries(n).filter(([,s])=>s.length>0);if(r.length>0){t.push(j.bold.underline(" Tech Stack"));for(let[s,o]of r){let i=or[s]??s,a=o.map(c=>j.white(c.name)).join(j.dim(", "));t.push(` ${j.cyan(i)}: ${a}`);}t.push("");}}if(e.serviceDependencies){let n=e.serviceDependencies,r=Object.entries(n).filter(([,s])=>s.length>0);if(r.length>0){t.push(j.bold.underline(" Services & Integrations"));for(let[s,o]of r){let i=or[s]??s,a=o.map(c=>{let l=c.version?j.dim(` ${c.version}`):"";return j.white(c.name)+l}).join(j.dim(", "));t.push(` ${j.cyan(i)}: ${a}`);}t.push("");}}if(e.breakingChangeExposure){let n=e.breakingChangeExposure;if(n.deprecatedPackages.length>0||n.legacyPolyfills.length>0){t.push(j.bold.underline(" Breaking Change Exposure"));let r=n.exposureScore>=40?j.red:n.exposureScore>=20?j.yellow:j.green;t.push(` Exposure Score: ${r.bold(`${n.exposureScore}/100`)}`),n.deprecatedPackages.length>0&&t.push(` ${j.red("Deprecated")}: ${n.deprecatedPackages.map(o=>j.dim(o)).join(", ")}`),n.legacyPolyfills.length>0&&t.push(` ${j.yellow("Polyfills")}: ${n.legacyPolyfills.map(o=>j.dim(o)).join(", ")}`),n.peerConflictsDetected&&t.push(` ${j.red("\u26A0")} Peer dependency conflicts detected`),t.push(` Recommendation: ${j.bold(n.overallRecommendation)}`);let s=n.projectIntelligence.filter(o=>o.packages.length>0).slice(0,3);if(s.length>0){t.push(" Major Upgrade Intelligence:");for(let o of s){t.push(` - ${o.project} (${o.recommendation})`);for(let i of o.packages.slice(0,2))t.push(` \xB7 ${i.package} ${i.currentVersion??"?"} \u2192 ${i.targetVersion??"?"} | touched ~${i.usage.touchedPercent}% | ${i.automatable}`);}}t.push("");}}if(e.tsModernity&&e.tsModernity.typescriptVersion){let n=e.tsModernity;t.push(j.bold.underline(" TypeScript"));let r=[];r.push(`v${n.typescriptVersion}`),n.strict===true?r.push(j.green("strict \u2714")):n.strict===false&&r.push(j.yellow("strict \u2716")),n.moduleType&&r.push(n.moduleType.toUpperCase()),n.target&&r.push(`target: ${n.target}`),t.push(` ${r.join(j.dim(" \xB7 "))}`),t.push("");}if(e.buildDeploy){let n=e.buildDeploy;(n.ci.length>0||n.docker.dockerfileCount>0||n.packageManagers.length>0)&&(t.push(j.bold.underline(" Build & Deploy")),n.ci.length>0&&t.push(` CI: ${n.ci.join(", ")}`),n.docker.dockerfileCount>0&&t.push(` Docker: ${n.docker.dockerfileCount} Dockerfile${n.docker.dockerfileCount!==1?"s":""} (${n.docker.baseImages.join(", ")})`),n.packageManagers.length>0&&t.push(` Package Managers: ${n.packageManagers.join(", ")}`),n.monorepoTools.length>0&&t.push(` Monorepo: ${n.monorepoTools.join(", ")}`),n.iac.length>0&&t.push(` IaC: ${n.iac.join(", ")}`),t.push(""));}if(e.uiPurpose){let n=e.uiPurpose;t.push(j.bold.underline(" Product Purpose Signals")),t.push(` Frameworks: ${n.detectedFrameworks.length>0?n.detectedFrameworks.join(", "):j.dim("unknown")}`),t.push(` Evidence: ${n.topEvidence.length}${n.capped?j.dim(` of ${n.evidenceCount} (capped)`):""}`);let r=n.topEvidence.slice(0,8);if(r.length>0){t.push(" Top Signals:");for(let s of r)t.push(` - [${s.kind}] ${s.value} ${j.dim(`(${s.file})`)}`);}if(n.unknownSignals.length>0){t.push(" Unknowns:");for(let s of n.unknownSignals.slice(0,4))t.push(` - ${j.yellow(s)}`);}t.push("");}if(e.securityPosture){let n=e.securityPosture;t.push(j.bold.underline(" Security Posture"));let r=[];r.push(n.lockfilePresent?j.green("Lockfile \u2714"):j.red("Lockfile \u2716")),r.push(n.gitignoreCoversEnv?j.green(".env \u2714"):j.red(".env \u2716")),r.push(n.gitignoreCoversNodeModules?j.green("node_modules \u2714"):j.yellow("node_modules \u2716")),n.multipleLockfileTypes&&r.push(j.yellow("Multiple lockfiles \u26A0")),n.envFilesTracked&&r.push(j.red("Env files tracked \u2716")),t.push(` ${r.join(j.dim(" \xB7 "))}`),t.push("");}if(e.platformMatrix){let n=e.platformMatrix;(n.nativeModules.length>0||n.dockerBaseImages.length>0)&&(t.push(j.bold.underline(" Platform")),n.nativeModules.length>0&&t.push(` Native modules: ${n.nativeModules.map(r=>j.dim(r)).join(", ")}`),n.osAssumptions.length>0&&t.push(` OS assumptions: ${n.osAssumptions.join(", ")}`),t.push(""));}if(e.codeQuality){let n=e.codeQuality;if(t.push(j.bold.underline(" Code Quality")),t.push(` Files: ${j.white(`${n.filesAnalyzed}`)} \xB7 Functions: ${j.white(`${n.functionsAnalyzed}`)} \xB7 Avg complexity: ${j.white(`${n.avgCyclomaticComplexity}`)} \xB7 Avg length: ${j.white(`${n.avgFunctionLength}`)} lines`),t.push(` Max nesting: ${n.maxNestingDepth} \xB7 Circular deps: ${n.circularDependencies} \xB7 Dead code: ${n.deadCodePercent}%`),n.godFiles.length>0){let r=n.godFiles.slice(0,3).map(s=>`${s.path} (${s.lines} lines)`).join(", ");t.push(` ${j.yellow("God files")}: ${r}`);}t.push("");}if(e.dependencyGraph){let n=e.dependencyGraph;n.lockfileType&&(t.push(j.bold.underline(" Dependency Graph")),t.push(` ${n.lockfileType}: ${j.white(`${n.totalUnique}`)} unique, ${j.white(`${n.totalInstalled}`)} installed`),n.duplicatedPackages.length>0&&t.push(` ${j.yellow(`${n.duplicatedPackages.length} duplicated`)} packages`),n.phantomDependencies.length>0&&t.push(` ${j.red(`${n.phantomDependencies.length} phantom`)} dependencies`),t.push(""));}return t}function Zi(e){let t=[];if(t.push(j.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")),t.push(j.bold.cyan("\u2551 Architecture Layers \u2551")),t.push(j.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D")),t.push(""),t.push(j.bold(" Archetype: ")+`${e.archetype}`+j.dim(` (${Math.round(e.archetypeConfidence*100)}% confidence)`)),t.push(` Files classified: ${e.totalClassified}`+(e.unclassified>0?j.dim(` (${e.unclassified} unclassified)`):"")),t.push(""),e.layers.length>0){for(let n of e.layers){let r=n.riskLevel==="none"?j.dim("none"):n.riskLevel==="low"?j.green("low"):n.riskLevel==="moderate"?j.yellow("moderate"):j.red("high");t.push(` ${j.bold(n.layer)} ${n.fileCount} file${n.fileCount!==1?"s":""} drift ${Ut(n.driftScore)} risk ${r}`);}t.push("");}return t}function ea(e){let t=[],n=e.projects.filter(i=>i.runtimeMajorsBehind!==void 0&&i.runtimeMajorsBehind>=3);if(n.length>0){let i=n.map(l=>l.name).join(", "),a="End-of-life runtimes no longer receive security patches and block ecosystem upgrades.",c=[];for(let l of n)c.push(`
31
- ./${l.path}`),c.push(`
32
- ${l.runtime} \u2192 ${l.runtimeLatest} (${l.runtimeMajorsBehind} major${l.runtimeMajorsBehind>1?"s":""} behind)`);a+=c.join(""),t.push({title:`Upgrade EOL runtime${n.length>1?"s":""} in ${i}`,explanation:a,impact:`\u2212${Math.min(n.length*10,30)} drift points (runtime & EOL)`,severity:100});}let r=[];for(let i of e.projects)for(let a of i.frameworks)a.majorsBehind!==null&&a.majorsBehind>=3&&r.push({name:a.name,fw:`${a.currentVersion} \u2192 ${a.latestVersion}`,behind:a.majorsBehind,project:i.name,projectPath:i.path});if(r.length>0){let i=r.sort((d,g)=>g.behind-d.behind)[0],a=r.length>1?` (+${r.length-1} more)`:"",c=`${i.behind} major versions behind. Major framework drift increases breaking change risk and blocks access to security fixes and performance improvements.`,l=[],u=0;for(let d of r){if(u>=8)break;l.push(`
33
- ./${d.projectPath}`),l.push(`
34
- ${d.name}: ${d.fw} (${d.behind} major${d.behind>1?"s":""} behind)`),u++;}let p=r.length-u;c+=l.join(""),p>0&&(c+=`
35
- ... and ${p} more`),t.push({title:`Upgrade ${i.name} ${i.fw} in ${i.project}${a}`,explanation:c,impact:"\u22125\u201315 drift points",severity:90});}for(let i of e.projects){let a=i.dependencyAgeBuckets,c=a.current+a.oneBehind+a.twoPlusBehind;if(c===0)continue;let l=Math.round(a.twoPlusBehind/c*100);if(l>=40){let u=`${a.twoPlusBehind} of ${c} dependencies are 2+ majors behind. Run \`npm outdated\` and prioritise packages with known CVEs or breaking API changes.`,p=i.dependencies.filter(d=>d.majorsBehind!==null&&d.majorsBehind>=2).sort((d,g)=>(g.majorsBehind??0)-(d.majorsBehind??0));if(p.length>0){let d=[],g=0;d.push(`
36
- ./${i.path}`);for(let h of p){if(g>=8)break;let m=h.resolvedVersion??h.currentSpec,E=h.latestStable??"?";d.push(`
37
- ${h.package}: ${m} \u2192 ${E} (${h.majorsBehind} major${h.majorsBehind>1?"s":""} behind)`),g++;}let y=p.length-g;u+=d.join(""),y>0&&(u+=`
38
- ... and ${y} more`);}t.push({title:`Reduce dependency rot in ${i.name} (${l}% severely outdated)`,explanation:u,impact:"\u22125\u201310 drift points",severity:80+l/10});}}let s=[];for(let i of e.projects)for(let a of i.frameworks)a.majorsBehind===2&&s.push({name:a.name,project:i.name,projectPath:i.path,fw:`${a.currentVersion} \u2192 ${a.latestVersion}`});let o=[...new Map(s.map(i=>[i.name,i])).values()];if(o.length>0){let i=o.slice(0,3).map(d=>`${d.name} (${d.fw})`).join(", "),a=o.length>3?` +${o.length-3} more`:"",c="These frameworks are 2 major versions behind. Create upgrade tickets and check migration guides \u2014 the gap will widen with each new release.",l=[],u=0;for(let d of s){if(u>=8)break;l.push(`
39
- ./${d.projectPath}`),l.push(`
40
- ${d.name}: ${d.fw}`),u++;}let p=s.length-u;c+=l.join(""),p>0&&(c+=`
41
- ... and ${p} more`),t.push({title:`Plan major framework upgrades: ${i}${a}`,explanation:c,impact:"\u22125\u201310 drift points",severity:60});}if(e.extended?.breakingChangeExposure){let i=e.extended.breakingChangeExposure,a=i.deprecatedPackages.length+i.legacyPolyfills.length;if(a>0){let c=[...i.deprecatedPackages,...i.legacyPolyfills].slice(0,5).join(", "),l=a>5?` +${a-5} more`:"",u=`${a} package${a!==1?"s":""} are deprecated or legacy polyfills. These receive no updates and may have known vulnerabilities.`,p=new Set([...i.deprecatedPackages,...i.legacyPolyfills]),d=[],g=0;for(let h of e.projects){let m=h.dependencies.filter(E=>p.has(E.package));if(m.length!==0){if(g>=10)break;d.push(`
42
- ./${h.path}`);for(let E of m){if(g>=10)break;let M=E.resolvedVersion??E.currentSpec,C=i.deprecatedPackages.includes(E.package)?"deprecated":"polyfill";d.push(`
43
- ${E.package}: ${M} (${C})`),g++;}}}let y=a-g;u+=d.join(""),y>0&&(u+=`
44
- ... and ${y} more`),t.push({title:`Replace deprecated/legacy packages: ${c}${l}`,explanation:u,severity:55});}}if(e.extended?.dependencyGraph){let i=e.extended.dependencyGraph,a=i.phantomDependencies.length;if(a>=10){let c="Packages used in code but not declared in package.json. These rely on transitive installs and can break unpredictably when other packages update.",l=i.phantomDependencyDetails;if(l&&l.length>0){let u=new Map;for(let y of l)u.has(y.sourcePath)||u.set(y.sourcePath,[]),u.get(y.sourcePath).push({package:y.package,spec:y.spec});let p=[],d=0;for(let[y,h]of u){if(d>=10)break;p.push(`
45
- ./${y}`);for(let m of h){if(d>=10)break;p.push(`
46
- ${m.package}: ${m.spec}`),d++;}}let g=a-d;c+=p.join(""),g>0&&(c+=`
47
- ... and ${g} more`);}t.push({title:`Fix ${a} phantom dependencies`,explanation:c,severity:45});}}if(e.extended?.securityPosture){let i=e.extended.securityPosture;if(i.envFilesTracked||!i.lockfilePresent){let a=[];i.envFilesTracked&&a.push(".env files are tracked in git"),i.lockfilePresent||a.push("no lockfile found");let c;i.envFilesTracked?(c="Environment files may contain secrets. Add them to .gitignore and rotate any exposed credentials immediately.",c+=`
48
- ./.gitignore`,c+=`
49
- Add: .env, .env.*, .env.local`):(c="Without a lockfile, installs are non-deterministic. Run the install command to generate one and commit it.",c+=`
50
- ./`,c+=`
51
- Missing: ${i.lockfileTypes.length>0?i.lockfileTypes.join(", ")+" (multiple types detected)":"package-lock.json, pnpm-lock.yaml, or yarn.lock"}`),t.push({title:`Fix security posture: ${a.join(", ")}`,explanation:c,severity:95});}}if(e.extended?.dependencyGraph){let a=e.extended.dependencyGraph.duplicatedPackages.filter(c=>c.versions.length>=3);if(a.length>=3){a.slice(0,4).map(g=>`${g.name} (${g.versions.length}v)`).join(", ");let l=`${a.length} packages have 3+ versions installed. Run \`npm dedupe\` to reduce bundle size and install time.`,u=[],p=0;for(let g of a){if(p>=8)break;u.push(`
52
- ${g.name}: ${g.versions.join(", ")} (${g.consumers} consumer${g.consumers!==1?"s":""})`),p++;}let d=a.length-p;l+=u.join(""),d>0&&(l+=`
53
- ... and ${d} more`),t.push({title:"Deduplicate heavily-versioned packages",explanation:l,severity:35});}}return t.sort((i,a)=>a.severity-i.severity),t.slice(0,5)}function ta(e){let t=na(e.findings),n=e.findings.map(r=>sa(r));return {$schema:"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json",version:"2.1.0",runs:[{tool:{driver:{name:"vibgrate",version:e.vibgrateVersion,informationUri:"https://vibgrate.com",rules:t}},results:n,invocations:[{executionSuccessful:true,startTimeUtc:e.timestamp}]}]}}function na(e){return [...new Set(e.map(n=>n.ruleId))].map(n=>({"vibgrate/runtime-eol":{id:"vibgrate/runtime-eol",shortDescription:{text:"Runtime at or past end-of-life"},helpUri:"https://vibgrate.com/rules/runtime-eol"},"vibgrate/runtime-lag":{id:"vibgrate/runtime-lag",shortDescription:{text:"Runtime major version lag"},helpUri:"https://vibgrate.com/rules/runtime-lag"},"vibgrate/framework-major-lag":{id:"vibgrate/framework-major-lag",shortDescription:{text:"Framework major version behind latest"},helpUri:"https://vibgrate.com/rules/framework-major-lag"},"vibgrate/dependency-rot":{id:"vibgrate/dependency-rot",shortDescription:{text:"High percentage of outdated dependencies"},helpUri:"https://vibgrate.com/rules/dependency-rot"},"vibgrate/dependency-major-lag":{id:"vibgrate/dependency-major-lag",shortDescription:{text:"Individual dependency severely behind"},helpUri:"https://vibgrate.com/rules/dependency-major-lag"}})[n]??{id:n,shortDescription:{text:n},helpUri:"https://vibgrate.com"})}function sa(e){return {ruleId:e.ruleId,level:e.level==="error"?"error":e.level==="warning"?"warning":"note",message:{text:e.message},locations:[{physicalLocation:{artifactLocation:{uri:e.location}}}]}}function ra(e){let t=[],n=e.billing;t.push("# Vibgrate Drift Report"),t.push(""),t.push("| Metric | Value |"),t.push("|--------|-------|"),t.push(`| **Drift Score** | ${e.drift.score}/100 |`),t.push(`| **Risk Level** | ${e.drift.riskLevel.toUpperCase()} |`),t.push(`| **Projects** | ${e.projects.length} |`),n&&(t.push(`| **Classification** | ${n.microCount} micro \xB7 ${n.smallCount} small \xB7 ${n.standardCount} standard |`),t.push(`| **Billable Projects** | ${n.billableProjects} (${n.totalScanned} detected \u2192 ${n.billableProjects} billable) |`));let r=[e.timestamp];e.durationMs!==void 0&&r.push(`${(e.durationMs/1e3).toFixed(1)}s`),e.filesScanned!==void 0&&r.push(`${e.filesScanned} files`),e.treeSummary&&r.push(`${e.treeSummary.totalFiles.toLocaleString()} workspace files \xB7 ${e.treeSummary.totalDirs.toLocaleString()} dirs`),t.push(`| **Scanned** | ${r.join(" \xB7 ")} |`),e.vcs&&(t.push(`| **VCS** | ${e.vcs.type} |`),e.vcs.branch&&t.push(`| **Branch** | ${e.vcs.branch} |`),e.vcs.sha&&t.push(`| **Commit** | \`${e.vcs.shortSha}\` |`)),t.push(""),t.push("## Score Breakdown"),t.push(""),t.push("| Component | Score |"),t.push("|-----------|-------|"),t.push(`| Runtime | ${e.drift.components.runtimeScore} |`),t.push(`| Frameworks | ${e.drift.components.frameworkScore} |`),t.push(`| Dependencies | ${e.drift.components.dependencyScore} |`),t.push(`| EOL Risk | ${e.drift.components.eolScore} |`),t.push(""),t.push("## Projects"),t.push("");for(let s of e.projects){if(t.push(`### ${s.name} (${s.type})`),t.push(""),s.runtime){let a=s.runtimeMajorsBehind!==void 0&&s.runtimeMajorsBehind>0?` \u2014 ${s.runtimeMajorsBehind} major(s) behind`:" \u2014 current";t.push(`- **Runtime:** ${s.runtime}${a}`);}if(s.frameworks.length>0){t.push("- **Frameworks:**");for(let a of s.frameworks){let c=a.majorsBehind!==null?a.majorsBehind===0?"current":`${a.majorsBehind} behind`:"unknown";t.push(` - ${a.name}: ${a.currentVersion??"?"} \u2192 ${a.latestVersion??"?"} (${c})`);}}let o=s.dependencyAgeBuckets;o.current+o.oneBehind+o.twoPlusBehind+o.unknown>0&&t.push(`- **Dependencies:** ${o.current} current, ${o.oneBehind} 1-behind, ${o.twoPlusBehind} 2+ behind, ${o.unknown} unknown`),t.push("");}if(e.extended?.uiPurpose){let s=e.extended.uiPurpose;if(t.push("## Product Purpose Signals"),t.push(""),t.push(`- **Frameworks:** ${s.detectedFrameworks.length>0?s.detectedFrameworks.join(", "):"unknown"}`),t.push(`- **Evidence Items:** ${s.topEvidence.length}${s.capped?` (capped from ${s.evidenceCount})`:""}`),s.topEvidence.length>0){t.push("- **Top Evidence:**");for(let o of s.topEvidence.slice(0,10))t.push(` - [${o.kind}] ${o.value} (${o.file})`);}if(s.unknownSignals.length>0){t.push("- **Unknowns:**");for(let o of s.unknownSignals.slice(0,5))t.push(` - ${o}`);}t.push("");}if(e.extended?.standards&&e.extended.standards.recommended.length>0){let s=e.extended.standards;t.push("## Recommended Standards"),t.push("");let o=s.projectPurposes.map(i=>`${i.project} \u2192 ${i.category}`).join(", ");if(o&&t.push(`- **Detected purpose:** ${o}`),s.frameworks.length>0){t.push("- **Compliance framework coverage:**");for(let i of s.frameworks)t.push(` - ${i.name}: ${i.recommendedMembers}/${i.totalMembers} member standards apply`);}t.push("- **Top standards to consider:**");for(let i of s.recommended.slice(0,10)){let a=i.complianceRelevant?" _(compliance)_":"";t.push(` - **${i.name}** \u2014 ${i.reason}${a}`);}t.push("");}if(e.findings.length>0){t.push("## Findings"),t.push(""),t.push("| Level | Rule | Message | Location |"),t.push("|-------|------|---------|----------|");for(let s of e.findings){let o=s.level==="error"?"\u{1F534}":s.level==="warning"?"\u{1F7E1}":"\u{1F535}";t.push(`| ${o} ${s.level} | ${s.ruleId} | ${s.message} | ${s.location} |`);}t.push("");}if(e.delta!==void 0){let s=e.delta>0?"\u{1F4C8}":e.delta<0?"\u{1F4C9}":"\u27A1\uFE0F";t.push(`## Drift Delta: ${s} ${e.delta>0?"+":""}${e.delta} vs baseline`),t.push("");}return t.join(`
54
- `)}async function we(e,t){let n,r=new Promise(s=>{n=setTimeout(()=>s({ok:false}),t);});try{return await Promise.race([e.then(o=>({ok:!0,value:o})),r])}finally{clearTimeout(n);}}function la(e,t){return new Promise((n,r)=>{let s=spawn(e,t,{stdio:["ignore","pipe","pipe"]}),o="",i="";s.stdout.on("data",a=>o+=String(a)),s.stderr.on("data",a=>i+=String(a)),s.on("error",r),s.on("close",a=>{if(a!==0){r(new Error(`${e} ${t.join(" ")} failed (code=${a}): ${i.trim()}`));return}n(o);});})}async function Mr(e,t){try{return JSON.parse(e)}catch{throw new Error(`Invalid JSON in package version manifest: ${t}`)}}async function ua(e){let t=await mkdtemp(F.join(Ht.tmpdir(),"vibgrate-manifest-"));try{await la("unzip",["-qq",e,"-d",t]);let n=[F.join(t,"package-versions.json"),F.join(t,"manifest.json"),F.join(t,"index.json")];for(let r of n)try{let s=await readFile(r,"utf8");return await Mr(s,r)}catch{}throw new Error("Zip must contain package-versions.json, manifest.json, or index.json")}finally{await rm(t,{recursive:true,force:true});}}async function pa(e){let t=F.resolve(e);if(t.toLowerCase().endsWith(".zip"))return ua(t);let n=await readFile(t,"utf8");return Mr(n,t)}function W(e,t,n){if(!e)return;let r=e[t];if(r)return t==="nuget"?r[n.toLowerCase()]??r[n]:r[n]}function Wt(e){return e.filter(t=>Ze.valid(t)&&Ze.prerelease(t)===null)}function hn(e){let t=Wt(e);return t.length===0?null:t.sort(Ze.rcompare)[0]??null}function da(e){if(!e||typeof e!="object")return;let t={};for(let[n,r]of Object.entries(e))n==="created"||n==="modified"||typeof r=="string"&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function un(e){let t=null,n=[],r=null,s;if(e&&typeof e=="object"){let a=e,c=a["dist-tags.latest"];typeof c=="string"&&(t=c);let l=a["dist-tags"];!t&&l&&typeof l=="object"&&typeof l.latest=="string"&&(t=l.latest);let u=a.versions;Array.isArray(u)?n=u.map(String):typeof u=="string"&&(n=[u]),r=Cr(a.license??a.licenses),s=da(a.time);}let o=Wt(n),i=hn(o);return !t&&i&&(t=i),{latest:t,stableVersions:o,latestStableOverall:i,license:r,...s?{releaseDates:s}:{}}}function Cr(e){if(!e)return null;if(typeof e=="string")return e.trim()||null;if(Array.isArray(e)){let t=e.map(Cr).filter(n=>!!n);return t.length===0?null:t.length===1?t[0]:`(${t.join(" OR ")})`}if(typeof e=="object"){let t=e;if(typeof t.type=="string")return t.type.trim()||null;if(typeof t.spdx=="string")return t.spdx.trim()||null}return null}var fa=24,ma=7e3,ha=3e4,ga=process.platform==="win32"?"npm.cmd":"npm";function ya(e,t=process.platform){let n=t==="win32"?ma:ha,r=[],s=[],o=0;for(let i of e){let a=i.length+1;(s.length>=fa||s.length>0&&o+a>n)&&(r.push(s),s=[],o=0),s.push(i),o+=a;}return s.length>0&&r.push(s),r}async function qt(e,t){return new Promise((n,r)=>{let s=spawn(ga,["view",...e,"--json"],{cwd:t,stdio:["ignore","pipe","pipe"]}),o="",i="";s.stdout.on("data",a=>o+=String(a)),s.stderr.on("data",a=>i+=String(a)),s.on("error",r),s.on("close",a=>{if(a!==0){r(new Error(`npm view ${e.join(" ")} failed (code=${a}): ${i.trim()}`));return}let c=o.trim();if(!c){n(null);return}try{n(JSON.parse(c));}catch{n(c.replace(/^"|"$/g,""));}});})}var ba=class{constructor(e,t,n,r=false){this.cwd=e,this.sem=t,this.manifest=n,this.offline=r;}meta=new Map;async prefetch(e){let n=[...new Set(e.filter(Boolean))].filter(s=>!this.meta.has(s));if(n.length===0)return;let r=this.sem.run(()=>this.fetchBatch(n));for(let s of n){let o=r.then(i=>i.get(s)??{latest:null,stableVersions:[],latestStableOverall:null,license:null});this.meta.set(s,o);}await r;}get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(()=>this.fetchOne(e));return this.meta.set(e,n),n}async fetchBatch(e){let t=new Map,n=[];for(let r of e){let s=W(this.manifest,"npm",r);if(s){let o=Wt(s.versions??[]),i=hn(o);t.set(r,{latest:s.latest??i,stableVersions:o,latestStableOverall:i,license:s.license??null,...s.releaseDates?{releaseDates:s.releaseDates}:{}});}else this.offline?t.set(r,{latest:null,stableVersions:[],latestStableOverall:null,license:null}):n.push(r);}if(n.length===0)return t;for(let r of ya(n)){let s=await this.fetchRemoteChunk(r);for(let[o,i]of s)t.set(o,i);}return t}async fetchRemoteChunk(e){let t=new Map;if(e.length===1)return t.set(e[0],await this.fetchOneRemote(e[0])),t;try{let n=await qt([...e,"dist-tags.latest","versions","license","licenses","time"],this.cwd);if(Array.isArray(n))for(let r=0;r<n.length&&r<e.length;r++)t.set(e[r],un(n[r]));else if(n&&typeof n=="object"){let r=n,s=0;for(let o of e)o in r&&(t.set(o,un(r[o])),s++);s===0&&e.length===1&&t.set(e[0],un(r));}}catch{}for(let n of e)t.has(n)||t.set(n,await this.fetchOneRemote(n));return t}async fetchOne(e){let t=W(this.manifest,"npm",e);if(t){let n=Wt(t.versions??[]),r=hn(n);return {latest:t.latest??r,stableVersions:n,latestStableOverall:r,license:t.license??null,...t.releaseDates?{releaseDates:t.releaseDates}:{}}}return this.offline?{latest:null,stableVersions:[],latestStableOverall:null,license:null}:this.fetchOneRemote(e)}async fetchOneRemote(e){try{let t=await qt([e,"dist-tags.latest","versions","license","licenses","time"],this.cwd);return un(t)}catch{let t=null,n=[];try{let o=await qt([e,"dist-tags"],this.cwd);o&&typeof o=="object"&&typeof o.latest=="string"&&(t=o.latest);}catch{}try{let o=await qt([e,"versions"],this.cwd);Array.isArray(o)?n=o.map(String):typeof o=="string"&&(n=[o]);}catch{}let r=Wt(n),s=hn(r);return !t&&s&&(t=s),{latest:t,stableVersions:r,latestStableOverall:s,license:null}}}};async function va(e){try{let t=new AbortController,n=setTimeout(()=>t.abort(),5e3),r=await fetch("https://registry.npmjs.org/npm/latest",{method:"HEAD",signal:t.signal});return clearTimeout(n),r.ok}catch{try{let t=await qt(["npm","dist-tags.latest"],e);return typeof t=="string"&&t.length>0}catch{return false}}}function $r(e){let t=e.trim();return !t||t.startsWith("workspace:")||t.startsWith("file:")||t.startsWith("link:")||t.startsWith("git+")||t.includes("://")||t.startsWith("github:")?false:t==="*"||t.toLowerCase()==="latest"?true:Ze.validRange(t)!==null}function xr(e){switch(e){case "public-domain":case "permissive":return "low";case "weak-copyleft":return "medium";case "copyleft":case "network-copyleft":case "proprietary":return "high";default:return "medium"}}var Ar={attribution:false,copyleft:false,networkCopyleft:false,discloseSource:false,patentGrant:false,commercialRestriction:false};function wa(e){return {spdxId:e.id,name:e.name,family:e.family,category:e.category,osiApproved:e.osi??false,fsfLibre:e.fsf??false,deprecated:e.deprecated??false,referenceUrl:e.url??`https://spdx.org/licenses/${e.id}.html`,riskLevel:xr(e.category),obligations:{...Ar,...e.obligations??{}}}}var U={attribution:true},Sa={attribution:true,patentGrant:true},re={attribution:true,copyleft:true,discloseSource:true},Qe={attribution:true,copyleft:true,discloseSource:true},pn={attribution:true,copyleft:true,networkCopyleft:true,discloseSource:true},ka=[{id:"CC0-1.0",name:"Creative Commons Zero v1.0 Universal",family:"CC",category:"public-domain",fsf:true},{id:"Unlicense",name:"The Unlicense",family:"Public Domain",category:"public-domain",osi:true,fsf:true},{id:"0BSD",name:"BSD Zero Clause License",family:"BSD",category:"permissive",osi:true},{id:"WTFPL",name:"Do What The F*ck You Want To Public License",family:"WTFPL",category:"permissive",fsf:true},{id:"MIT",name:"MIT License",family:"MIT",category:"permissive",osi:true,fsf:true,obligations:U},{id:"MIT-0",name:"MIT No Attribution",family:"MIT",category:"permissive",osi:true},{id:"ISC",name:"ISC License",family:"ISC",category:"permissive",osi:true,fsf:true,obligations:U},{id:"BSD-2-Clause",name:'BSD 2-Clause "Simplified" License',family:"BSD",category:"permissive",osi:true,fsf:true,obligations:U},{id:"BSD-3-Clause",name:'BSD 3-Clause "New" or "Revised" License',family:"BSD",category:"permissive",osi:true,fsf:true,obligations:U},{id:"BSD-3-Clause-Clear",name:"BSD 3-Clause Clear License",family:"BSD",category:"permissive",osi:true,obligations:U},{id:"Apache-2.0",name:"Apache License 2.0",family:"Apache",category:"permissive",osi:true,fsf:true,obligations:Sa},{id:"Apache-1.1",name:"Apache Software License 1.1",family:"Apache",category:"permissive",osi:true,obligations:U},{id:"Zlib",name:"zlib License",family:"Zlib",category:"permissive",osi:true,fsf:true},{id:"BSL-1.0",name:"Boost Software License 1.0",family:"Boost",category:"permissive",osi:true,fsf:true,obligations:U},{id:"PostgreSQL",name:"PostgreSQL License",family:"BSD",category:"permissive",osi:true,obligations:U},{id:"Python-2.0",name:"Python License 2.0",family:"Python",category:"permissive",osi:true,obligations:U},{id:"PSF-2.0",name:"Python Software Foundation License 2.0",family:"Python",category:"permissive",obligations:U},{id:"Artistic-2.0",name:"Artistic License 2.0",family:"Artistic",category:"permissive",osi:true,fsf:true,obligations:U},{id:"NCSA",name:"University of Illinois/NCSA Open Source License",family:"NCSA",category:"permissive",osi:true,fsf:true,obligations:U},{id:"Unicode-DFS-2016",name:"Unicode License Agreement - Data Files and Software (2016)",family:"Unicode",category:"permissive",osi:true,obligations:U},{id:"BlueOak-1.0.0",name:"Blue Oak Model License 1.0.0",family:"BlueOak",category:"permissive",obligations:U},{id:"LGPL-2.0-only",name:"GNU Library General Public License v2 only",family:"LGPL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"LGPL-2.1-only",name:"GNU Lesser General Public License v2.1 only",family:"LGPL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"LGPL-2.1-or-later",name:"GNU Lesser General Public License v2.1 or later",family:"LGPL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"LGPL-3.0-only",name:"GNU Lesser General Public License v3.0 only",family:"LGPL",category:"weak-copyleft",osi:true,fsf:true,obligations:{...re,patentGrant:true}},{id:"LGPL-3.0-or-later",name:"GNU Lesser General Public License v3.0 or later",family:"LGPL",category:"weak-copyleft",osi:true,fsf:true,obligations:{...re,patentGrant:true}},{id:"MPL-2.0",name:"Mozilla Public License 2.0",family:"MPL",category:"weak-copyleft",osi:true,fsf:true,obligations:{...re,patentGrant:true}},{id:"MPL-1.1",name:"Mozilla Public License 1.1",family:"MPL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"EPL-1.0",name:"Eclipse Public License 1.0",family:"EPL",category:"weak-copyleft",osi:true,fsf:true,obligations:{...re,patentGrant:true}},{id:"EPL-2.0",name:"Eclipse Public License 2.0",family:"EPL",category:"weak-copyleft",osi:true,fsf:true,obligations:{...re,patentGrant:true}},{id:"CDDL-1.0",name:"Common Development and Distribution License 1.0",family:"CDDL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"CDDL-1.1",name:"Common Development and Distribution License 1.1",family:"CDDL",category:"weak-copyleft",obligations:re},{id:"CPL-1.0",name:"Common Public License 1.0",family:"CPL",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"MS-PL",name:"Microsoft Public License",family:"Microsoft",category:"weak-copyleft",osi:true,fsf:true,obligations:U},{id:"MS-RL",name:"Microsoft Reciprocal License",family:"Microsoft",category:"weak-copyleft",osi:true,fsf:true,obligations:re},{id:"GPL-2.0-only",name:"GNU General Public License v2.0 only",family:"GPL",category:"copyleft",osi:true,fsf:true,obligations:Qe},{id:"GPL-2.0-or-later",name:"GNU General Public License v2.0 or later",family:"GPL",category:"copyleft",osi:true,fsf:true,obligations:Qe},{id:"GPL-3.0-only",name:"GNU General Public License v3.0 only",family:"GPL",category:"copyleft",osi:true,fsf:true,obligations:{...Qe,patentGrant:true}},{id:"GPL-3.0-or-later",name:"GNU General Public License v3.0 or later",family:"GPL",category:"copyleft",osi:true,fsf:true,obligations:{...Qe,patentGrant:true}},{id:"EUPL-1.1",name:"European Union Public License 1.1",family:"EUPL",category:"copyleft",osi:true,fsf:true,obligations:Qe},{id:"EUPL-1.2",name:"European Union Public License 1.2",family:"EUPL",category:"copyleft",osi:true,fsf:true,obligations:Qe},{id:"OSL-3.0",name:"Open Software License 3.0",family:"OSL",category:"copyleft",osi:true,fsf:true,obligations:{...Qe,patentGrant:true}},{id:"CECILL-2.1",name:"CeCILL Free Software License Agreement v2.1",family:"CeCILL",category:"copyleft",osi:true,fsf:true,obligations:Qe},{id:"CC-BY-SA-4.0",name:"Creative Commons Attribution Share Alike 4.0 International",family:"CC",category:"copyleft",obligations:{attribution:true,copyleft:true}},{id:"AGPL-3.0-only",name:"GNU Affero General Public License v3.0 only",family:"AGPL",category:"network-copyleft",osi:true,fsf:true,obligations:{...pn,patentGrant:true}},{id:"AGPL-3.0-or-later",name:"GNU Affero General Public License v3.0 or later",family:"AGPL",category:"network-copyleft",osi:true,fsf:true,obligations:{...pn,patentGrant:true}},{id:"SSPL-1.0",name:"Server Side Public License 1.0",family:"SSPL",category:"network-copyleft",obligations:pn},{id:"BUSL-1.1",name:"Business Source License 1.1",family:"BUSL",category:"proprietary",obligations:{commercialRestriction:true,discloseSource:true}},{id:"Elastic-2.0",name:"Elastic License 2.0",family:"Elastic",category:"proprietary",obligations:{commercialRestriction:true}},{id:"RPL-1.5",name:"Reciprocal Public License 1.5",family:"RPL",category:"network-copyleft",osi:true,obligations:pn},{id:"Commons-Clause",name:"Commons Clause License Condition v1.0",family:"Commons-Clause",category:"proprietary",obligations:{commercialRestriction:true}},{id:"LicenseRef-Proprietary",name:"Proprietary / Commercial",family:"Proprietary",category:"proprietary",obligations:{commercialRestriction:true}},{id:"CC-BY-NC-4.0",name:"Creative Commons Attribution Non Commercial 4.0 International",family:"CC",category:"proprietary",obligations:{attribution:true,commercialRestriction:true}},{id:"CC-BY-4.0",name:"Creative Commons Attribution 4.0 International",family:"CC",category:"permissive",obligations:U}],ja=ka.map(wa),Nr=new Map;for(let e of ja)Nr.set(e.spdxId.toLowerCase(),e);function D(e){return Nr.get(e.trim().toLowerCase())}function gn(e="Unknown"){return {spdxId:"NOASSERTION",name:e,family:"Unknown",category:"unknown",osiApproved:false,fsfLibre:false,deprecated:false,referenceUrl:"",riskLevel:"medium",obligations:{...Ar}}}function Lr(e){return e.trim().toLowerCase().replace(/^\(+|\)+$/g,"").replace(/[._]/g,"-").replace(/\s+/g," ").replace(/\s*-\s*/g,"-").replace(/\bversion\b/g,"v").replace(/\blicen[sc]e\b/g,"").replace(/\s+/g," ").trim()}var Pa={mit:"MIT","mit license":"MIT","the mit license":"MIT",expat:"MIT",isc:"ISC",apache:"Apache-2.0","apache 2":"Apache-2.0",apache2:"Apache-2.0","apache 2.0":"Apache-2.0","apache-2":"Apache-2.0","apache license 2.0":"Apache-2.0","apache license version 2.0":"Apache-2.0","asl 2.0":"Apache-2.0",al2:"Apache-2.0",bsd:"BSD-3-Clause","bsd license":"BSD-3-Clause","bsd-2":"BSD-2-Clause","bsd 2-clause":"BSD-2-Clause","simplified bsd":"BSD-2-Clause",freebsd:"BSD-2-Clause","bsd-3":"BSD-3-Clause","bsd 3-clause":"BSD-3-Clause","new bsd":"BSD-3-Clause","modified bsd":"BSD-3-Clause","revised bsd":"BSD-3-Clause",gpl:"GPL-3.0-or-later",gplv2:"GPL-2.0-only",gpl2:"GPL-2.0-only","gpl-2":"GPL-2.0-only","gpl 2.0":"GPL-2.0-only","gpl-2.0":"GPL-2.0-only","gpl-2.0+":"GPL-2.0-or-later","gnu gpl v2":"GPL-2.0-only",gplv3:"GPL-3.0-only",gpl3:"GPL-3.0-only","gpl-3":"GPL-3.0-only","gpl 3.0":"GPL-3.0-only","gpl-3.0":"GPL-3.0-only","gpl-3.0+":"GPL-3.0-or-later","gnu gpl v3":"GPL-3.0-only","gnu general public v3":"GPL-3.0-only",lgpl:"LGPL-3.0-or-later","lgplv2.1":"LGPL-2.1-only","lgpl-2.1":"LGPL-2.1-only","lgpl 2.1":"LGPL-2.1-only",lgplv3:"LGPL-3.0-only","lgpl-3":"LGPL-3.0-only","lgpl-3.0":"LGPL-3.0-only","lgpl 3.0":"LGPL-3.0-only",agpl:"AGPL-3.0-or-later",agplv3:"AGPL-3.0-only","agpl-3":"AGPL-3.0-only","agpl-3.0":"AGPL-3.0-only","agpl 3.0":"AGPL-3.0-only","gnu agpl v3":"AGPL-3.0-only",mpl:"MPL-2.0","mpl 2.0":"MPL-2.0","mpl-2":"MPL-2.0","mozilla public 2.0":"MPL-2.0",epl:"EPL-2.0","eclipse public 2.0":"EPL-2.0","epl-2":"EPL-2.0",sspl:"SSPL-1.0","server side public":"SSPL-1.0",busl:"BUSL-1.1","business source":"BUSL-1.1",elastic:"Elastic-2.0","elastic-2":"Elastic-2.0","commons clause":"Commons-Clause",proprietary:"LicenseRef-Proprietary",commercial:"LicenseRef-Proprietary","see license in license":"LicenseRef-Proprietary",unlicensed:"LicenseRef-Proprietary","all rights reserved":"LicenseRef-Proprietary",cc0:"CC0-1.0","cc0 1.0":"CC0-1.0","public domain":"CC0-1.0","the unlicense":"Unlicense",wtfpl:"WTFPL",boost:"BSL-1.0",bsl:"BSL-1.0","zlib/libpng":"Zlib",python:"Python-2.0",psf:"PSF-2.0",artistic:"Artistic-2.0"},Ir=new Map;for(let[e,t]of Object.entries(Pa))Ir.set(Lr(e),t);function Rr(e){return Ir.get(Lr(e))}var Ea=/\(|\)|\bWITH\b|\bAND\b|\bOR\b|[^\s()]+/gi;function Ta(e){let t=(e??"").trim(),n=[],r=[],s=false,o=false,i=false,a=false,c=t.match(Ea)??[];for(let u of c){let p=u.toUpperCase();if(u==="("||u===")")continue;if(p==="OR"){s=true,a=false;continue}if(p==="AND"){o=true,a=false;continue}if(p==="WITH"){a=true;continue}if(a){r.includes(u)||r.push(u),a=false;continue}let d=u;d.endsWith("+")&&(i=true,d=d.slice(0,-1)),d&&!n.includes(d)&&n.push(d);}let l=s?"OR":o?"AND":"SINGLE";return {licenseIds:n,exceptions:r,operator:l,orLater:i,normalized:Ma(n,r,l,i,t)}}function Ma(e,t,n,r,s){if(e.length===0)return s.trim();if(e.length===1){let i=e[0];return r&&!i.endsWith("+")&&(i+="+"),t.length>0&&(i+=` WITH ${t.join(" WITH ")}`),i}let o=n==="AND"?" AND ":" OR ";return e.join(o)}function Ca(e){return /\b(?:AND|OR|WITH)\b|\+\s*$|\(/i.test(e)}var ir={"public-domain":0,permissive:1,"weak-copyleft":2,copyleft:3,"network-copyleft":4,proprietary:5,unknown:2};function ye(e,t,n,r,s){return {spdxId:e.spdxId,name:e.name,expression:r??e.spdxId,family:e.family,category:e.category,riskLevel:e.riskLevel,osiApproved:e.osiApproved,fsfLibre:e.fsfLibre,obligations:e.obligations,matchStatus:t,confidence:n,components:s??[e.spdxId]}}function Fr(e){let t=e.toLowerCase();if(/\bagpl/.test(t))return D("AGPL-3.0-or-later");if(/\bsspl/.test(t))return D("SSPL-1.0");if(/\bbusl|business source/.test(t))return D("BUSL-1.1");if(/\blgpl/.test(t))return D("LGPL-3.0-or-later");if(/\bgpl/.test(t))return D("GPL-3.0-or-later");if(/\bmpl|mozilla/.test(t))return D("MPL-2.0");if(/\bepl|eclipse/.test(t))return D("EPL-2.0");if(/\bapache/.test(t))return D("Apache-2.0");if(/\bbsd/.test(t))return D("BSD-3-Clause");if(/\bmit\b/.test(t))return D("MIT");if(/\bisc\b/.test(t))return D("ISC");if(/commons clause/.test(t))return D("Commons-Clause");if(/proprietary|commercial|all rights reserved/.test(t))return D("LicenseRef-Proprietary");if(/public domain|cc0/.test(t))return D("CC0-1.0")}function $a(e){let t=(e??"").trim();if(!t||/^(unknown|noassertion|none|n\/a)$/i.test(t))return ye(gn(),"unknown",0);let n=D(t);if(n)return ye(n,"exact",1);if(Ca(t))return xa(t);let r=Rr(t);if(r){let o=D(r);if(o)return ye(o,"alias",.95)}let s=Fr(t);return s?{...ye(s,"fuzzy",.6),name:t.slice(0,120)}:ye(gn(t.slice(0,120)),"unknown",0)}function xa(e){let t=Ta(e);if(t.licenseIds.length===0)return ye(gn(e.slice(0,120)),"unknown",0);let n=t.licenseIds.map(c=>{let l=D(c);if(l)return ye(l,"exact",1);let u=Rr(c);if(u){let d=D(u);if(d)return ye(d,"alias",.95)}let p=Fr(c);return p?ye(p,"fuzzy",.6):ye(gn(c),"unknown",0)}),r=t.operator!=="OR",s=n[0];for(let c of n){let l=ir[c.category]>ir[s.category];(r?l:!l)&&(s=c);}let o=Aa(r?n:[s]),i=n.map(c=>c.spdxId),a=s.category;return {spdxId:s.spdxId,name:t.normalized,expression:t.normalized,family:s.family,category:a,riskLevel:xr(a),osiApproved:n.every(c=>c.osiApproved),fsfLibre:n.every(c=>c.fsfLibre),obligations:o,matchStatus:"expression",confidence:Math.min(...n.map(c=>c.confidence))||.5,components:i}}function Aa(e){let t={attribution:false,copyleft:false,networkCopyleft:false,discloseSource:false,patentGrant:false,commercialRestriction:false};for(let n of e)t.attribution||=n.obligations.attribution,t.copyleft||=n.obligations.copyleft,t.networkCopyleft||=n.obligations.networkCopyleft,t.discloseSource||=n.obligations.discloseSource,t.patentGrant||=n.obligations.patentGrant,t.commercialRestriction||=n.obligations.commercialRestriction;return t}function Na(e,t){let n=(e??"").trim();if(!n)return {raw:null,spdxId:null,source:"none",confidence:0};let r=$a(n);return {raw:n.slice(0,200),spdxId:r.matchStatus==="unknown"?null:r.spdxId,source:t,confidence:r.confidence}}var ar={react:"React","react-dom":"React DOM",vue:"Vue","@angular/core":"Angular",svelte:"Svelte","solid-js":"Solid",preact:"Preact",lit:"Lit",qwik:"Qwik","htmx.org":"htmx",alpinejs:"Alpine.js",stimulus:"Stimulus",next:"Next.js",nuxt:"Nuxt","@remix-run/react":"Remix","@remix-run/node":"Remix (Node)",gatsby:"Gatsby",astro:"Astro","@sveltejs/kit":"SvelteKit","@analogjs/platform":"Analog","@tanstack/start":"TanStack Start",express:"Express",fastify:"Fastify","@nestjs/core":"NestJS",hono:"Hono",koa:"Koa","@hapi/hapi":"Hapi",restify:"Restify","@elysiajs/eden":"Elysia",elysia:"Elysia","@adonisjs/core":"AdonisJS",moleculer:"Moleculer","@feathersjs/feathers":"Feathers",sails:"Sails",typescript:"TypeScript",redux:"Redux","@reduxjs/toolkit":"Redux Toolkit",zustand:"Zustand",mobx:"MobX",jotai:"Jotai",recoil:"Recoil",pinia:"Pinia",vuex:"Vuex","@tanstack/react-query":"TanStack Query",swr:"SWR",xstate:"XState","@ngrx/store":"NgRx",prisma:"Prisma","drizzle-orm":"Drizzle",typeorm:"TypeORM",sequelize:"Sequelize","@mikro-orm/core":"MikroORM",mongoose:"Mongoose",knex:"Knex",kysely:"Kysely",objection:"Objection.js",vite:"Vite",webpack:"webpack",rollup:"Rollup",esbuild:"esbuild",parcel:"Parcel",turbo:"Turbo",tsup:"tsup","@swc/core":"SWC",bun:"Bun",vitest:"Vitest",jest:"Jest","@playwright/test":"Playwright",cypress:"Cypress",mocha:"Mocha",ava:"AVA",storybook:"Storybook","@storybook/react":"Storybook"};async function La(e,t,n$1,r,s=ke){let o=n$1?await n$1.findPackageJsonFiles(e):await j$1(e),i=[],a=new Map,c;try{let h=n$1?E=>n$1.pathExists(E):p,m=F.join(e,"package.json");if(await h(m))try{let E=n$1?await n$1.readJsonFile(m):await n(m);if(E.packageManager){let M=E.packageManager.split("@")[0]?.toLowerCase();M&&["pnpm","yarn","npm","bun"].includes(M)&&(c=M);}}catch{}c||await h(F.join(e,"pnpm-workspace.yaml"))&&(c="pnpm"),c||(await h(F.join(e,"pnpm-lock.yaml"))?c="pnpm":await h(F.join(e,"yarn.lock"))?c="yarn":await h(F.join(e,"package-lock.json"))?c="npm":await h(F.join(e,"bun.lockb"))&&(c="bun"));}catch{}let l=r??n$1?.projectScanTimeout??18e4,u=typeof Ht.availableParallelism=="function"?Ht.availableParallelism():Ht.cpus().length||4,p$1=Math.max(2,Math.min(16,u*2)),d=new a$2(p$1),g=new Set;if(await Promise.all(o.map(async h=>{try{let m=n$1?await n$1.readJsonFile(h):await n(h),E=[m.dependencies,m.devDependencies,m.peerDependencies,m.optionalDependencies];for(let M of E)if(M)for(let[C,T]of Object.entries(M))$r(T)&&g.add(C);}catch{}})),g.size>0)try{await t.prefetch([...g]);}catch{}let y=await Promise.all(o.map(async h=>d.run(async()=>{try{let m=Ia(h,e,t,n$1,s),E=await we(m,l);if(E.ok)return E.value;let M=F.relative(e,F.dirname(h));return n$1&&n$1.addStuckPath(M||"."),console.error(`Timeout scanning ${h} (>${l/1e3}s) \u2014 skipped`),n$1?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects"),null}catch(m){let E=m instanceof Error?m.message:String(m);return console.error(`Error scanning ${h}: ${E}`),null}})));for(let h of y)h&&(i.push(h),a.set(h.name,h.path));for(let h of i){let m=[];for(let E of h.dependencies){let M=a.get(E.package);M&&M!==h.path&&m.push({path:M,name:E.package,refType:"workspace"});}m.length>0&&(h.projectReferences=m),c&&(h.packageManager=c);}return i}async function Ia(e,t,n$1,r,s){let o=r?await r.readJsonFile(e):await n(e),i=F.dirname(e),a=F.relative(t,i)||".",c=o.engines?.node??void 0,l,u,p,d;if(c){let b=$n(s,"nodejs"),v=be.minVersion(c);if(b&&v){let w=be.major(v);l=`${b.major}.0.0`,u=Math.max(0,b.major-w);}p=st(s,"node",c);let S=Je("node",c);S&&(d=nt(s,"nodejs",S));}let g=[{name:"dependencies",deps:o.dependencies},{name:"devDependencies",deps:o.devDependencies},{name:"peerDependencies",deps:o.peerDependencies},{name:"optionalDependencies",deps:o.optionalDependencies}],y=[],h=[],m={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},E=[];for(let b of g)if(b.deps)for(let[v,S]of Object.entries(b.deps))$r(S)&&E.push({pkg:v,section:b.name,spec:S});await n$1.prefetch(E.map(b=>b.pkg));let M=E.map(async b=>{let v=await n$1.get(b.pkg);return {...b,meta:v}}),C=await Promise.all(M);for(let{pkg:b,section:v,spec:S,meta:w}of C){let P=w.stableVersions.length>0?be.maxSatisfying(w.stableVersions,S)??null:null,f=w.latestStableOverall,$=null,N="unknown";if(P&&f){let ee=be.major(P);$=be.major(f)-ee,$===0?N=be.eq(P,f)?"current":"minor-behind":N="major-behind",$===0?m.current++:$===1?m.oneBehind++:m.twoPlusBehind++;}else m.unknown++;let _=Ri(P,f,w.releaseDates),ie=Fi(_);y.push({package:b,section:v,currentSpec:S,resolvedVersion:P,latestStable:f,majorsBehind:$,drift:N,license:Na(w.license,"registry"),ageDays:_,libyears:ie}),b in ar&&h.push({name:ar[b],currentVersion:P,latestVersion:f,majorsBehind:$});}for(let b of g)if(b.deps)for(let[v,S]of Object.entries(b.deps))S.trim().startsWith("workspace:")&&(y.push({package:v,section:b.name,currentSpec:S,resolvedVersion:null,latestStable:null,majorsBehind:null,drift:"unknown",license:{raw:null,spdxId:null,source:"none",confidence:0}}),m.unknown++);y.sort((b,v)=>{let S={"major-behind":0,"minor-behind":1,current:2,unknown:3},w=(S[b.drift]??9)-(S[v.drift]??9);return w!==0?w:b.package.localeCompare(v.package)});let T;try{T=r?await r.countFilesUnder(t,i):void 0;}catch{}return {type:"node",path:a,name:o.name??F.basename(i),runtime:c,runtimeLatest:l,runtimeMajorsBehind:u,runtimeEol:p,runtimeEolDate:d,frameworks:h,dependencies:y,dependencyAgeBuckets:m,libyears:Bi(y.map(b=>b.libyears))??void 0,fileCount:T}}var Or=new Br.XMLParser({ignoreAttributes:false,attributeNamePrefix:"@_"}),cr={"Microsoft.AspNetCore.App":"ASP.NET Core","Microsoft.AspNetCore.Mvc":"ASP.NET Core MVC","Microsoft.AspNetCore.Components":"Blazor","Microsoft.AspNetCore.Components.WebAssembly":"Blazor WASM","Microsoft.AspNetCore.SignalR":"SignalR","Microsoft.AspNetCore.OData":"OData","Microsoft.AspNetCore.Identity":"ASP.NET Identity","Microsoft.AspNetCore.Authentication.JwtBearer":"JWT Bearer Auth","Microsoft.AspNetCore.Diagnostics.HealthChecks":"Health Checks","Swashbuckle.AspNetCore":"Swashbuckle","NSwag.AspNetCore":"NSwag","Microsoft.EntityFrameworkCore":"EF Core","Microsoft.EntityFrameworkCore.SqlServer":"EF Core SQL Server","Microsoft.EntityFrameworkCore.Sqlite":"EF Core SQLite","Microsoft.EntityFrameworkCore.Design":"EF Core Design","Microsoft.EntityFrameworkCore.Tools":"EF Core Tools","Npgsql.EntityFrameworkCore.PostgreSQL":"EF Core PostgreSQL","Pomelo.EntityFrameworkCore.MySql":"EF Core MySQL (Pomelo)","MongoDB.EntityFrameworkCore":"EF Core MongoDB",Dapper:"Dapper","Dapper.Contrib":"Dapper Contrib",NHibernate:"NHibernate",Npgsql:"Npgsql",MySqlConnector:"MySqlConnector","MongoDB.Driver":"MongoDB Driver","StackExchange.Redis":"StackExchange.Redis","Microsoft.Data.SqlClient":"SqlClient","Oracle.ManagedDataAccess.Core":"Oracle (Managed)",Cassandra:"Cassandra Driver","Neo4j.Driver":"Neo4j Driver",Marten:"Marten",LiteDB:"LiteDB","RavenDB.Client":"RavenDB","Microsoft.Extensions.Hosting":".NET Hosting","Microsoft.Extensions.Hosting.Abstractions":".NET Hosting Abstractions","Microsoft.Extensions.DependencyInjection":".NET DI","Microsoft.Extensions.DependencyInjection.Abstractions":".NET DI Abstractions","Microsoft.Extensions.Configuration":".NET Configuration","Microsoft.Extensions.Configuration.Abstractions":".NET Configuration Abstractions","Microsoft.Extensions.Configuration.Binder":".NET Configuration Binder","Microsoft.Extensions.Configuration.EnvironmentVariables":".NET Configuration EnvVars","Microsoft.Extensions.Configuration.Json":".NET Configuration JSON","Microsoft.Extensions.Configuration.UserSecrets":".NET Configuration UserSecrets","Microsoft.Extensions.Logging":".NET Logging","Microsoft.Extensions.Logging.Abstractions":".NET Logging Abstractions","Microsoft.Extensions.Logging.Console":".NET Logging Console","Microsoft.Extensions.Logging.Debug":".NET Logging Debug","Microsoft.Extensions.Logging.EventSource":".NET Logging EventSource","Microsoft.Extensions.Options":".NET Options","Microsoft.Extensions.Options.ConfigurationExtensions":".NET Options Configuration","Microsoft.Extensions.Options.DataAnnotations":".NET Options DataAnnotations","Microsoft.Extensions.Caching.Memory":".NET Memory Cache","Microsoft.Extensions.Caching.Abstractions":".NET Caching Abstractions","Microsoft.Extensions.Caching.StackExchangeRedis":".NET Redis Cache","Microsoft.Extensions.Http":".NET HttpClientFactory","Microsoft.Extensions.Http.Resilience":".NET HttpClient Resilience","Microsoft.Extensions.Resilience":".NET Resilience","Microsoft.Extensions.Diagnostics":".NET Diagnostics","Microsoft.Extensions.Diagnostics.HealthChecks":".NET Health Checks (Extensions)","Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions":".NET Health Checks Abstractions","Microsoft.Extensions.FileProviders.Abstractions":".NET File Providers","Microsoft.Extensions.FileProviders.Physical":".NET File Providers Physical","Microsoft.Extensions.Localization":".NET Localization","Microsoft.Extensions.Localization.Abstractions":".NET Localization Abstractions","Microsoft.Extensions.Primitives":".NET Primitives","System.Text.Json":".NET System.Text.Json","System.Text.Encodings.Web":".NET System.Text.Encodings.Web","System.Net.Http.Json":".NET System.Net.Http.Json","System.ComponentModel.Annotations":".NET ComponentModel Annotations",MediatR:"MediatR",Wolverine:"Wolverine",Brighter:"Brighter",AutoMapper:"AutoMapper",Mapster:"Mapster","Riok.Mapperly":"Mapperly",FluentValidation:"FluentValidation","FluentValidation.AspNetCore":"FluentValidation ASP.NET","Newtonsoft.Json":"Newtonsoft.Json",MessagePack:"MessagePack","protobuf-net":"protobuf-net",CsvHelper:"CsvHelper",Serilog:"Serilog","Serilog.AspNetCore":"Serilog ASP.NET","Serilog.Sinks.Console":"Serilog Console","Serilog.Sinks.Seq":"Serilog Seq","Serilog.Sinks.File":"Serilog File","Serilog.Sinks.Elasticsearch":"Serilog Elasticsearch",NLog:"NLog","NLog.Web.AspNetCore":"NLog ASP.NET",log4net:"log4net",OpenTelemetry:"OpenTelemetry","OpenTelemetry.Extensions.Hosting":"OpenTelemetry Hosting","OpenTelemetry.Instrumentation.AspNetCore":"OpenTelemetry ASP.NET","OpenTelemetry.Exporter.Prometheus":"OpenTelemetry Prometheus","OpenTelemetry.Exporter.Jaeger":"OpenTelemetry Jaeger","OpenTelemetry.Exporter.OpenTelemetryProtocol":"OpenTelemetry OTLP","App.Metrics":"App.Metrics","prometheus-net":"Prometheus.NET","Elastic.Apm":"Elastic APM",xunit:"xUnit","xunit.runner.visualstudio":"xUnit Runner",NUnit:"NUnit",NUnit3TestAdapter:"NUnit Adapter","MSTest.TestFramework":"MSTest","MSTest.TestAdapter":"MSTest Adapter",Moq:"Moq",NSubstitute:"NSubstitute",FakeItEasy:"FakeItEasy",FluentAssertions:"FluentAssertions",Shouldly:"Shouldly",Bogus:"Bogus",AutoFixture:"AutoFixture","WireMock.Net":"WireMock.Net",Testcontainers:"Testcontainers",Respawn:"Respawn",BenchmarkDotNet:"BenchmarkDotNet","coverlet.collector":"Coverlet",SpecFlow:"SpecFlow",TUnit:"TUnit","Verify.Xunit":"Verify",Snapshooter:"Snapshooter",MassTransit:"MassTransit","MassTransit.RabbitMQ":"MassTransit RabbitMQ","MassTransit.Azure.ServiceBus.Core":"MassTransit Azure SB",NServiceBus:"NServiceBus","RabbitMQ.Client":"RabbitMQ Client","Confluent.Kafka":"Confluent Kafka","Azure.Messaging.ServiceBus":"Azure Service Bus","Azure.Messaging.EventHubs":"Azure Event Hubs","Amazon.SQS":"AWS SQS","Amazon.SNS":"AWS SNS",Rebus:"Rebus",EasyNetQ:"EasyNetQ",SlimMessageBus:"SlimMessageBus",CAP:"DotNetCore.CAP","AWSSDK.Core":"AWS SDK Core","AWSSDK.S3":"AWS SDK S3","AWSSDK.SQS":"AWS SDK SQS","AWSSDK.DynamoDBv2":"AWS SDK DynamoDB","AWSSDK.Lambda":"AWS SDK Lambda","AWSSDK.SecretsManager":"AWS SDK Secrets Manager","AWSSDK.CloudWatch":"AWS SDK CloudWatch","Azure.Storage.Blobs":"Azure Blob Storage","Azure.Identity":"Azure Identity","Azure.Security.KeyVault.Secrets":"Azure Key Vault","Azure.Cosmos":"Azure Cosmos DB","Microsoft.Azure.Functions.Worker":"Azure Functions","Google.Cloud.Storage.V1":"GCP Storage","Google.Cloud.PubSub.V1":"GCP Pub/Sub","Google.Cloud.Firestore":"GCP Firestore","Microsoft.Identity.Web":"Microsoft Identity Web","Microsoft.Identity.Client":"MSAL",IdentityServer4:"IdentityServer4","Duende.IdentityServer":"Duende IdentityServer","Microsoft.AspNetCore.Authentication.OpenIdConnect":"OpenID Connect",IdentityModel:"IdentityModel",Refit:"Refit",RestSharp:"RestSharp","Flurl.Http":"Flurl",Polly:"Polly","Polly.Extensions.Http":"Polly HTTP","Microsoft.Extensions.Http.Polly":"HttpClient Polly","Grpc.AspNetCore":"gRPC ASP.NET","Grpc.Net.Client":"gRPC Client","GraphQL.Server.All":"GraphQL Server","HotChocolate.AspNetCore":"Hot Chocolate (GraphQL)",Hangfire:"Hangfire","Hangfire.Core":"Hangfire Core","Hangfire.AspNetCore":"Hangfire ASP.NET",Quartz:"Quartz.NET","Quartz.Extensions.Hosting":"Quartz.NET Hosting",Coravel:"Coravel",EPPlus:"EPPlus",ClosedXML:"ClosedXML",iTextSharp:"iTextSharp",QuestPDF:"QuestPDF",ImageSharp:"ImageSharp","SixLabors.ImageSharp":"ImageSharp","LaunchDarkly.ServerSdk":"LaunchDarkly","Microsoft.FeatureManagement":"Feature Management","Microsoft.FeatureManagement.AspNetCore":"Feature Management ASP.NET","Dapr.Client":"Dapr","Steeltoe.Discovery.ClientCore":"Steeltoe",Ocelot:"Ocelot (API Gateway)","Yarp.ReverseProxy":"YARP","Microsoft.AspNetCore.SignalR.Client":"SignalR Client"};function Hn(e){return e.replace(/\\/g,"/")}function Ra(e){let t=e.match(/^net(\d+)\.\d+$/);if(t?.[1])return parseInt(t[1],10);let n=e.match(/^netcoreapp(\d+)\.\d+$/);return n?.[1]?parseInt(n[1],10):(e.startsWith("netstandard")||e.match(/^net(\d)(\d+)?$/),null)}function lr(e){return e.endsWith(".csproj")||e.endsWith(".vbproj")}function Jn(e){return F.basename(e).replace(/\.(cs|vb)proj$/i,"")}function Fa(e,t){let r=Or.parse(e)?.Project;if(!r)return {targetFrameworks:[],packageReferences:[],projectReferences:[],projectName:Jn(t)};let s=Array.isArray(r.PropertyGroup)?r.PropertyGroup:r.PropertyGroup?[r.PropertyGroup]:[],o=[];for(let l of s)if(l.TargetFramework&&o.push(String(l.TargetFramework)),l.TargetFrameworks){let u=String(l.TargetFrameworks).split(";").map(p=>p.trim()).filter(Boolean);o.push(...u);}let i=Array.isArray(r.ItemGroup)?r.ItemGroup:r.ItemGroup?[r.ItemGroup]:[],a=[],c=[];for(let l of i){let u=Array.isArray(l.PackageReference)?l.PackageReference:l.PackageReference?[l.PackageReference]:[];for(let d of u){let g=d["@_Include"]??d["@_include"]??"",y=d["@_Version"]??d["@_version"]??d.Version??"";g&&y&&a.push({name:String(g),version:String(y)});}let p=Array.isArray(l.ProjectReference)?l.ProjectReference:l.ProjectReference?[l.ProjectReference]:[];for(let d of p){let g=d["@_Include"]??d["@_include"]??"";g&&c.push(String(g).replace(/\\/g,"/"));}}return {targetFrameworks:[...new Set(o)],packageReferences:a,projectReferences:c,projectName:Jn(t)}}function Ba(e){let n=Or.parse(e)?.packages;if(!n)return [];let r=Array.isArray(n.package)?n.package:n.package?[n.package]:[],s=[];for(let o of r){let i=o["@_id"]??o["@_Id"]??"",a=o["@_version"]??o["@_Version"]??"";i&&a&&s.push({name:String(i),version:String(a)});}return s}async function Oa(e,t,n,r,s=ke){let o$1=n?await n.findFiles(e,lr):await i(e,lr),i$1=n?await n.findSolutionFiles(e):await k(e),a=new Set;for(let p of i$1)try{let d=n?await n.readTextFile(p):await o(p),g=F.dirname(p),y=/Project\("[^"]*"\)\s*=\s*"[^"]*",\s*"([^"]+\.(?:cs|vb)proj)"/g,h;for(;(h=y.exec(d))!==null;)if(h[1]){let m=F.resolve(g,h[1].replace(/\\/g,"/"));a.add(m);}}catch{}let c=new Set([...o$1,...a]),l=[],u=r??n?.projectScanTimeout??18e4;for(let p of c)try{let d=Va(p,e,t,n,s),g=await we(d,u);if(g.ok)l.push(g.value);else {let y=Hn(F.relative(e,F.dirname(p)));n&&n.addStuckPath(y||"."),console.error(`Timeout scanning ${p} (>${u/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(d){let g=d instanceof Error?d.message:String(d);console.error(`Error scanning ${p}: ${g}`);}return l}async function Va(e,t,n,r,s){let o$1=r?await r.readTextFile(e):await o(e),i=Fa(o$1,e),a=F.dirname(e);{let b=F.join(a,"packages.config");try{let v=r?await r.readTextFile(b):await o(b),S=new Set(i.packageReferences.map(w=>w.name.toLowerCase()));for(let w of Ba(v))S.has(w.name.toLowerCase())||(i.packageReferences.push(w),S.add(w.name.toLowerCase()));}catch{}}let c=i.targetFrameworks[0],l=Bt(s,"dotnet")?.major,u,p,d,g=c;if(c){let b=Ra(c);b!==null&&l!==void 0&&(u=Math.max(0,l-b)),p=st(s,"dotnet",c);let v=Je("dotnet",c);v&&(d=nt(s,"dotnet",v));}let y=[],h={current:0,oneBehind:0,twoPlusBehind:0,unknown:0};if(n){let b=i.packageReferences.map(async S=>{let w=await n.get(S.name);return {ref:S,meta:w}}),v=await Promise.all(b);for(let{ref:S,meta:w}of v){let P=dt.valid(S.version)?S.version:null,f=w.latestStableOverall,$=null,N="unknown";if(P&&f){let _=dt.major(P);$=dt.major(f)-_,$===0?N=dt.eq(P,f)?"current":"minor-behind":$>0?N="major-behind":N="current",$<=0?h.current++:$===1?h.oneBehind++:h.twoPlusBehind++;}else h.unknown++;y.push({package:S.name,section:"dependencies",currentSpec:S.version,resolvedVersion:P,latestStable:f,majorsBehind:$,drift:N});}}else for(let b of i.packageReferences)y.push({package:b.name,section:"dependencies",currentSpec:b.version,resolvedVersion:b.version,latestStable:null,majorsBehind:null,drift:"unknown"}),h.unknown++;let m=[],E=new Map(y.map(b=>[b.package,b]));for(let b of i.packageReferences)if(b.name in cr){let v=E.get(b.name);m.push({name:cr[b.name],currentVersion:v?.resolvedVersion??b.version,latestVersion:v?.latestStable??null,majorsBehind:v?.majorsBehind??null});}let M=i.projectReferences.map(b=>{let v=F.resolve(a,b),S=Hn(F.relative(t,F.dirname(v))),w=Jn(v);return {path:S||".",name:w,refType:"project"}}),C;try{C=r?await r.countFilesUnder(t,a):void 0;}catch{}y.sort((b,v)=>{let S={"major-behind":0,"minor-behind":1,current:2,unknown:3},w=(S[b.drift]??9)-(S[v.drift]??9);return w!==0?w:b.package.localeCompare(v.package)});let T=h;return {type:"dotnet",path:Hn(F.relative(t,a))||".",name:i.projectName,targetFramework:g,runtime:c,runtimeLatest:l!==void 0?`net${l}.0`:void 0,runtimeMajorsBehind:u,runtimeEol:p,runtimeEolDate:d,frameworks:m,dependencies:y,dependencyAgeBuckets:T,projectReferences:M.length>0?M:void 0,fileCount:C}}var ur={django:"Django",flask:"Flask",fastapi:"FastAPI",starlette:"Starlette",tornado:"Tornado",bottle:"Bottle",sanic:"Sanic",falcon:"Falcon",aiohttp:"aiohttp",quart:"Quart",litestar:"Litestar",robyn:"Robyn",sqlalchemy:"SQLAlchemy","django-rest-framework":"DRF",djangorestframework:"DRF",peewee:"Peewee","tortoise-orm":"Tortoise ORM",sqlmodel:"SQLModel",pony:"Pony ORM",alembic:"Alembic",psycopg2:"psycopg2","psycopg2-binary":"psycopg2",psycopg:"psycopg3",asyncpg:"asyncpg",pymongo:"PyMongo",motor:"Motor",redis:"redis-py",celery:"Celery",boto3:"AWS SDK (boto3)",botocore:"AWS SDK (botocore)",numpy:"NumPy",pandas:"pandas",scipy:"SciPy","scikit-learn":"scikit-learn",tensorflow:"TensorFlow",torch:"PyTorch",keras:"Keras",matplotlib:"Matplotlib",seaborn:"Seaborn",plotly:"Plotly",polars:"Polars",dask:"Dask",xgboost:"XGBoost",lightgbm:"LightGBM",transformers:"Transformers (HF)",langchain:"LangChain",openai:"OpenAI SDK",pytest:"pytest",unittest2:"unittest2",nose2:"nose2",tox:"tox",hypothesis:"Hypothesis","factory-boy":"factory_boy",faker:"Faker",coverage:"Coverage.py",responses:"responses",httpx:"HTTPX",uvicorn:"Uvicorn",gunicorn:"Gunicorn",hypercorn:"Hypercorn",dramatiq:"Dramatiq",rq:"RQ",huey:"Huey",pyjwt:"PyJWT",authlib:"Authlib","python-jose":"python-jose",passlib:"Passlib",cryptography:"cryptography",pydantic:"Pydantic",marshmallow:"Marshmallow",attrs:"attrs",cerberus:"Cerberus",msgpack:"msgpack",protobuf:"protobuf",requests:"Requests",urllib3:"urllib3",ansible:"Ansible",fabric:"Fabric",invoke:"Invoke",paramiko:"Paramiko",black:"Black",ruff:"Ruff",flake8:"Flake8",mypy:"mypy",pylint:"Pylint",isort:"isort",bandit:"Bandit",structlog:"structlog",loguru:"Loguru","sentry-sdk":"Sentry SDK","opentelemetry-api":"OpenTelemetry","prometheus-client":"prometheus-client"};function Zn(e){let t=e.trim();if(!t||t.startsWith("#")||t.startsWith("-"))return null;let r=t.split(";")[0].trim().match(/^([A-Za-z0-9][-A-Za-z0-9_.]*[A-Za-z0-9]?)(?:\[.*?\])?\s*(.*)?$/);if(!r)return null;let s=r[1],o=(r[2]??"").trim(),i=s.toLowerCase().replace(/[_.]+/g,"-");return {name:s,spec:o,normalisedName:i}}function _a(e){return e.match(/^==\s*([^\s,;]+)/)?.[1]??null}function Da(e){let t=e.replace(/^[vV]/,"").trim();if(/(?:a\d|b\d|rc\d|alpha|beta|dev|post)/i.test(t))return null;let n=t.split(".");for(;n.length<3;)n.push("0");return t=n.slice(0,3).join("."),ft.valid(t)}function Ga(e){let t=[];for(let n of e.split(`
55
- `)){let r=Zn(n);r&&t.push(r);}return t}function Ua(e){let t={dependencies:[]},n=e.match(/^\s*name\s*=\s*"([^"]+)"/m);n&&(t.projectName=n[1]);let r=e.match(/^\s*requires-python\s*=\s*"([^"]+)"/m);r&&(t.pythonVersion=r[1]);let s=e.match(/^\s*dependencies\s*=\s*\[([\s\S]*?)\]/m);if(s){let i=s[1],a=/"([^"]+)"/g,c;for(;(c=a.exec(i))!==null;){let l=Zn(c[1]);l&&t.dependencies.push(l);}}let o=e.match(/\[tool\.poetry\.dependencies\]([\s\S]*?)(?=\n\s*\[|\n*$)/);if(o){let i=o[1].split(`
56
- `);for(let a of i){let c=a.match(/^\s*([A-Za-z0-9][-A-Za-z0-9_.]*)\s*=\s*(?:"([^"]+)"|{.*?version\s*=\s*"([^"]+)".*?})/);if(c){let l=c[1];if(l.toLowerCase()==="python"){t.pythonVersion=c[2]??c[3]??void 0;continue}let u=c[2]??c[3]??"",p=l.toLowerCase().replace(/[_.]+/g,"-");t.dependencies.push({name:l,spec:u?`==${u}`:"",normalisedName:p});}}}return t}function qa(e){let t=[],n=e.match(/\[packages\]([\s\S]*?)(?=\n\s*\[|\n*$)/);if(n){let s=n[1].split(`
57
- `);for(let o of s){let i=o.match(/^\s*([A-Za-z0-9][-A-Za-z0-9_.]*)\s*=\s*(?:"([^"]+)"|{.*?version\s*=\s*"([^"]+)".*?}|\*|"[*]")/);if(i){let a=i[1],c=i[2]??i[3]??"",l=a.toLowerCase().replace(/[_.]+/g,"-");t.push({name:a,spec:c||"*",normalisedName:l});}}}let r=e.match(/\[dev-packages\]([\s\S]*?)(?=\n\s*\[|\n*$)/);if(r){let s=r[1].split(`
58
- `);for(let o of s){let i=o.match(/^\s*([A-Za-z0-9][-A-Za-z0-9_.]*)\s*=\s*(?:"([^"]+)"|{.*?version\s*=\s*"([^"]+)".*?}|\*|"[*]")/);if(i){let a=i[1],c=i[2]??i[3]??"",l=a.toLowerCase().replace(/[_.]+/g,"-");t.push({name:a,spec:c||"*",normalisedName:l});}}}return t}function Wa(e){let t={deps:[]},n=e.match(/\[metadata\]([\s\S]*?)(?=\n\s*\[|\n*$)/);if(n){let s=n[1].match(/^\s*name\s*=\s*(.+)$/m);s&&(t.name=s[1].trim());}let r=e.match(/\[options\]([\s\S]*?)(?=\n\s*\[|\n*$)/);if(r){let s=r[1].match(/^\s*python_requires\s*=\s*(.+)$/m);s&&(t.pythonVersion=s[1].trim());let o=r[1].match(/install_requires\s*=\s*\n((?:\s+.*\n?)*)/);if(o){let i=o[1];for(let a of i.split(`
59
- `)){let c=Zn(a);c&&t.deps.push(c);}}}return t}var Vr=new Set(["requirements.txt","requirements-dev.txt","requirements_dev.txt","requirements-test.txt","dev-requirements.txt","pyproject.toml","setup.py","setup.cfg","Pipfile"]);async function za(e,t,n,r,s=ke){let o=n?await n.findFiles(e,l=>Vr.has(l)||/^requirements.*\.txt$/.test(l)):await Ha(e),i=new Map;for(let l of o){let u=F.dirname(l);i.has(u)||i.set(u,[]),i.get(u).push(l);}let a=[],c=r??n?.projectScanTimeout??18e4;for(let[l,u]of i)try{let p=Ja(l,u,e,t,n,s),d=await we(p,c);if(d.ok)a.push(d.value);else {let g=F.relative(e,l);n&&n.addStuckPath(g||"."),console.error(`Timeout scanning Python project ${l} (>${c/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(p){let d=p instanceof Error?p.message:String(p);console.error(`Error scanning Python project ${l}: ${d}`);}return a}async function Ha(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Vr.has(n)||/^requirements.*\.txt$/.test(n))}async function Ja(e,t,n,r,s,o$1){let i=F.relative(n,e)||".",a=F.basename(e===n?n:e),c,l=new Map;for(let b of t){let v=F.basename(b),S=s?await s.readTextFile(b):await o(b);if(v==="pyproject.toml"){let w=Ua(S);w.projectName&&(a=w.projectName),w.pythonVersion&&(c=w.pythonVersion);for(let P of w.dependencies)l.has(P.normalisedName)||l.set(P.normalisedName,P);}else if(v==="setup.cfg"){let w=Wa(S);w.name&&(a=w.name),w.pythonVersion&&!c&&(c=w.pythonVersion);for(let P of w.deps)l.has(P.normalisedName)||l.set(P.normalisedName,P);}else if(v==="Pipfile")for(let w of qa(S))l.has(w.normalisedName)||l.set(w.normalisedName,w);else if(v.startsWith("requirements")&&v.endsWith(".txt"))for(let w of Ga(S))l.has(w.normalisedName)||l.set(w.normalisedName,w);}let u,p,d,g;if(c){let b=c.match(/(\d+)\.(\d+)/);if(b){let S=parseInt(b[1],10),w=parseInt(b[2],10),P=Bt(o$1,"python");P&&(S===P.major?u=Math.max(0,P.minor-w):S<P.major&&(u=P.minor+(P.major-S)*10),p=`${P.major}.${P.minor}`);}d=st(o$1,"python",c);let v=Je("python",c);v&&(g=nt(o$1,"python",v));}let y=[],h=[],m={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},M=[...l.values()].map(async b=>{let v=await r.get(b.normalisedName);return {dep:b,meta:v}}),C=await Promise.all(M);for(let{dep:b,meta:v}of C){let S=_a(b.spec),w=S?Da(S):null,P=v.latestStableOverall,f=null,$="unknown";if(w&&P){let N=ft.major(w);f=ft.major(P)-N,f===0?$=ft.eq(w,P)?"current":"minor-behind":f>0?$="major-behind":$="current",f<=0?m.current++:f===1?m.oneBehind++:m.twoPlusBehind++;}else m.unknown++;y.push({package:b.name,section:"dependencies",currentSpec:b.spec||"*",resolvedVersion:w,latestStable:P,majorsBehind:f,drift:$}),b.normalisedName in ur&&h.push({name:ur[b.normalisedName],currentVersion:w,latestVersion:P,majorsBehind:f});}y.sort((b,v)=>{let S={"major-behind":0,"minor-behind":1,current:2,unknown:3},w=(S[b.drift]??9)-(S[v.drift]??9);return w!==0?w:b.package.localeCompare(v.package)});let T;try{T=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"python",path:i,name:a,runtime:c,runtimeLatest:p,runtimeMajorsBehind:u,runtimeEol:d,runtimeEolDate:g,frameworks:h,dependencies:y,dependencyAgeBuckets:m,fileCount:T}}var Ka=new _r.XMLParser({ignoreAttributes:false,attributeNamePrefix:"@_"}),pr={"org.springframework.boot:spring-boot-starter-web":"Spring Boot Web","org.springframework.boot:spring-boot-starter":"Spring Boot","org.springframework.boot:spring-boot-starter-data-jpa":"Spring Data JPA","org.springframework.boot:spring-boot-starter-security":"Spring Security","org.springframework.boot:spring-boot-starter-webflux":"Spring WebFlux","org.springframework.boot:spring-boot-starter-actuator":"Spring Actuator","org.springframework.boot:spring-boot-starter-test":"Spring Boot Test","org.springframework:spring-core":"Spring Framework","org.springframework:spring-web":"Spring Web","org.springframework:spring-webmvc":"Spring MVC","org.springframework.cloud:spring-cloud-starter-netflix-eureka-client":"Spring Cloud Eureka","org.springframework.cloud:spring-cloud-starter-gateway":"Spring Cloud Gateway","org.springframework.kafka:spring-kafka":"Spring Kafka","jakarta.platform:jakarta.jakartaee-api":"Jakarta EE","jakarta.servlet:jakarta.servlet-api":"Jakarta Servlet","javax.servlet:javax.servlet-api":"Java Servlet (Legacy)","io.micronaut:micronaut-core":"Micronaut","io.micronaut:micronaut-http-server-netty":"Micronaut HTTP","io.quarkus:quarkus-core":"Quarkus","io.quarkus:quarkus-resteasy":"Quarkus RESTEasy","io.quarkus:quarkus-resteasy-reactive":"Quarkus RESTEasy Reactive","io.vertx:vertx-core":"Vert.x","io.vertx:vertx-web":"Vert.x Web","org.hibernate.orm:hibernate-core":"Hibernate","org.hibernate:hibernate-core":"Hibernate","org.mybatis:mybatis":"MyBatis","org.mybatis.spring.boot:mybatis-spring-boot-starter":"MyBatis Spring Boot","org.jooq:jooq":"jOOQ","org.flywaydb:flyway-core":"Flyway","org.liquibase:liquibase-core":"Liquibase","com.zaxxer:HikariCP":"HikariCP","org.postgresql:postgresql":"PostgreSQL JDBC","com.mysql:mysql-connector-j":"MySQL Connector","mysql:mysql-connector-java":"MySQL Connector (Legacy)","com.oracle.database.jdbc:ojdbc11":"Oracle JDBC","org.mongodb:mongodb-driver-sync":"MongoDB Driver","io.lettuce:lettuce-core":"Lettuce (Redis)","redis.clients:jedis":"Jedis (Redis)","org.apache.kafka:kafka-clients":"Apache Kafka","com.rabbitmq:amqp-client":"RabbitMQ Client","software.amazon.awssdk:sqs":"AWS SQS","software.amazon.awssdk:sns":"AWS SNS","com.squareup.okhttp3:okhttp":"OkHttp","com.squareup.retrofit2:retrofit":"Retrofit","org.apache.httpcomponents.client5:httpclient5":"Apache HttpClient 5","io.grpc:grpc-netty":"gRPC","com.graphql-java:graphql-java":"GraphQL Java","com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter":"Netflix DGS","com.fasterxml.jackson.core:jackson-databind":"Jackson","com.google.code.gson:gson":"Gson","junit:junit":"JUnit 4","org.junit.jupiter:junit-jupiter":"JUnit 5","org.junit.jupiter:junit-jupiter-api":"JUnit 5","org.mockito:mockito-core":"Mockito","org.assertj:assertj-core":"AssertJ","org.testcontainers:testcontainers":"Testcontainers","io.rest-assured:rest-assured":"REST Assured","org.awaitility:awaitility":"Awaitility","com.tngtech.archunit:archunit-junit5":"ArchUnit","org.hamcrest:hamcrest":"Hamcrest","org.slf4j:slf4j-api":"SLF4J","ch.qos.logback:logback-classic":"Logback","org.apache.logging.log4j:log4j-core":"Log4j2","org.projectlombok:lombok":"Lombok","org.mapstruct:mapstruct":"MapStruct","software.amazon.awssdk:bom":"AWS SDK v2","com.google.cloud:google-cloud-bom":"Google Cloud SDK","com.azure:azure-sdk-bom":"Azure SDK","io.jsonwebtoken:jjwt-api":"JJWT","com.nimbusds:nimbus-jose-jwt":"Nimbus JOSE+JWT","io.micrometer:micrometer-core":"Micrometer","io.opentelemetry:opentelemetry-api":"OpenTelemetry","io.prometheus:simpleclient":"Prometheus Client","io.projectreactor:reactor-core":"Project Reactor","io.reactivex.rxjava3:rxjava":"RxJava 3"};function Qa(e,t){let r=Ka.parse(e)?.project;if(!r)return {artifactId:F.basename(F.dirname(t)),dependencies:[],modules:[],properties:{}};let s={};if(r.properties&&typeof r.properties=="object")for(let[h,m]of Object.entries(r.properties))(typeof m=="string"||typeof m=="number")&&(s[h]=String(m));let o,i=["java.version","maven.compiler.source","maven.compiler.target","maven.compiler.release","java.source.version"];for(let h of i)if(s[h]){o=String(s[h]);break}let a=r.dependencies,l=(a?.dependency?Array.isArray(a.dependency)?a.dependency:[a.dependency]:[]).filter(h=>h.groupId&&h.artifactId).map(h=>({groupId:Mt(String(h.groupId??""),s),artifactId:Mt(String(h.artifactId??""),s),version:Mt(String(h.version??""),s),scope:h.scope?String(h.scope):void 0})),u=r.dependencyManagement?.dependencies,p=u?.dependency?Array.isArray(u.dependency)?u.dependency:[u.dependency]:[];for(let h of p)h.groupId&&h.artifactId&&h.version&&l.push({groupId:Mt(String(h.groupId),s),artifactId:Mt(String(h.artifactId),s),version:Mt(String(h.version),s),scope:h.scope?String(h.scope):void 0});let g=(r.modules?.module?Array.isArray(r.modules.module)?r.modules.module:[r.modules.module]:[]).map(String),y;return r.parent?.groupId&&r.parent?.artifactId&&(y={groupId:String(r.parent.groupId),artifactId:String(r.parent.artifactId),version:String(r.parent.version??"")}),{groupId:r.groupId?String(r.groupId):y?.groupId,artifactId:String(r.artifactId??F.basename(F.dirname(t))),version:r.version?String(r.version):y?.version,packaging:r.packaging?String(r.packaging):void 0,javaVersion:o,dependencies:l,modules:g,parent:y,properties:s}}function Mt(e,t){return e.replace(/\$\{([^}]+)\}/g,(n,r)=>t[r]??`\${${r}}`)}function Ya(e,t){let n=[],r=F.basename(F.dirname(t)),s,o=e.match(/(?:sourceCompatibility|targetCompatibility|javaVersion)\s*[=:]\s*['"]?(?:JavaVersion\.VERSION_)?(\d+)['"]?/);o&&(s=o[1]);let i=e.match(/JavaLanguageVersion\.of\((\d+)\)/);i&&(s=i[1]);let a=/(?:implementation|api|compileOnly|runtimeOnly|testImplementation|testRuntimeOnly|annotationProcessor|kapt)\s*(?:\(?\s*)?['"]([^'"]+)['"]/g,c;for(;(c=a.exec(e))!==null;){let p=c[1].split(":");p.length>=2&&n.push({groupId:p[0],artifactId:p[1],version:p[2]??"",configuration:c[0].split(/\s/)[0]});}let l=/(?:implementation|api|compileOnly|runtimeOnly|testImplementation|testRuntimeOnly|annotationProcessor|kapt)\s*\(\s*"([^"]+)"\s*\)/g;for(;(c=l.exec(e))!==null;){let p=c[1].split(":");if(p.length>=2){let d=`${p[0]}:${p[1]}`;n.some(g=>`${g.groupId}:${g.artifactId}`===d)||n.push({groupId:p[0],artifactId:p[1],version:p[2]??"",configuration:c[0].split(/\s/)[0]});}}let u=/(?:implementation|api)\s*(?:\(?\s*)?platform\s*\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(c=u.exec(e))!==null;){let p=c[1].split(":");p.length>=2&&n.push({groupId:p[0],artifactId:p[1],version:p[2]??"",configuration:"platform"});}return {javaVersion:s,dependencies:n,projectName:r}}function Xa(e){let t=e.trim();if(!t||t.includes("$")||/(?:-SNAPSHOT|-alpha|-beta|-rc|-M\d|-CR\d)/i.test(t))return null;t=t.replace(/\.(?:RELEASE|Final|GA)$/i,"");let n=t.split(".");for(;n.length<3;)n.push("0");return t=n.slice(0,3).join("."),mt.valid(t)}var Dr=new Set(["pom.xml","build.gradle","build.gradle.kts"]);async function Za(e,t,n,r,s=ke){let o=n?await n.findFiles(e,u=>Dr.has(u)):await ec(e),i=new Map;for(let u of o){let p=F.dirname(u);i.has(p)||i.set(p,[]),i.get(p).push(u);}let a=[],c=r??n?.projectScanTimeout??18e4;for(let[u,p]of i)try{let d=tc(u,p,e,t,n,s),g=await we(d,c);if(g.ok)a.push(g.value);else {let y=F.relative(e,u);n&&n.addStuckPath(y||"."),console.error(`Timeout scanning Java project ${u} (>${c/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(d){let g=d instanceof Error?d.message:String(d);console.error(`Error scanning Java project ${u}: ${g}`);}let l=new Map;for(let u of a)l.set(u.name,u.path);return a}async function ec(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Dr.has(n))}async function tc(e,t,n,r,s,o$1){let i=F.relative(n,e)||".",a=F.basename(e===n?n:e),c,l=new Map,u=[];for(let S of t){let w=F.basename(S),P=s?await s.readTextFile(S):await o(S);if(w==="pom.xml"){let f=Qa(P,S);f.artifactId&&(a=f.artifactId),f.javaVersion&&(c=f.javaVersion);for(let $ of f.dependencies){let N=`${$.groupId}:${$.artifactId}`;!l.has(N)&&$.version&&!$.version.includes("${")&&l.set(N,$);}for(let $ of f.modules)u.push({path:F.join(i,$),name:$,refType:"project"});}else if(w==="build.gradle"||w==="build.gradle.kts"){let f=Ya(P,S);f.projectName&&(a=f.projectName),f.javaVersion&&(c=f.javaVersion);for(let $ of f.dependencies){let N=`${$.groupId}:${$.artifactId}`;!l.has(N)&&$.version&&l.set(N,$);}}}let p,d,g,y=$n(o$1,"java")?.major,h=y!==void 0?String(y):void 0;if(c){let S=c.match(/^(1\.)?(\d+)/);if(S){let P=(S[1],parseInt(S[2],10));y!==void 0&&(p=Math.max(0,y-P));}d=st(o$1,"java",c);let w=Je("java",c);w&&(g=nt(o$1,"java",w));}let m=[],E=[],M={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},T=[...l.entries()].map(async([S,w])=>{let P=await r.get(w.groupId,w.artifactId);return {key:S,dep:w,meta:P}}),b=await Promise.all(T);for(let{key:S,dep:w,meta:P}of b){let f=Xa(w.version),$=P.latestStableOverall,N=null,_="unknown";if(f&&$){let ie=mt.major(f);N=mt.major($)-ie,N===0?_=mt.eq(f,$)?"current":"minor-behind":N>0?_="major-behind":_="current",N<=0?M.current++:N===1?M.oneBehind++:M.twoPlusBehind++;}else M.unknown++;m.push({package:S,section:"dependencies",currentSpec:w.version,resolvedVersion:f,latestStable:$,majorsBehind:N,drift:_}),S in pr&&E.push({name:pr[S],currentVersion:f,latestVersion:$,majorsBehind:N});}m.sort((S,w)=>{let P={"major-behind":0,"minor-behind":1,current:2,unknown:3},f=(P[S.drift]??9)-(P[w.drift]??9);return f!==0?f:S.package.localeCompare(w.package)});let v;try{v=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"java",path:i,name:a,runtime:c?`Java ${c}`:void 0,runtimeLatest:h,runtimeMajorsBehind:p,runtimeEol:d,runtimeEolDate:g,targetFramework:c?`Java ${c}`:void 0,frameworks:E,dependencies:m,dependencyAgeBuckets:M,projectReferences:u.length>0?u:void 0,fileCount:v}}var dr={rails:"Ruby on Rails",sinatra:"Sinatra",hanami:"Hanami",padrino:"Padrino",roda:"Roda",grape:"Grape",cuba:"Cuba",camping:"Camping",ramaze:"Ramaze","jsonapi-resources":"JSONAPI::Resources",active_model_serializers:"AMS",blueprinter:"Blueprinter",alba:"Alba","grape-entity":"Grape Entity",jbuilder:"Jbuilder",graphql:"GraphQL Ruby",activerecord:"ActiveRecord",sequel:"Sequel","rom-rb":"ROM",mongoid:"Mongoid",redis:"redis-rb",pg:"pg (PostgreSQL)",mysql2:"mysql2",sqlite3:"sqlite3",sidekiq:"Sidekiq",resque:"Resque",delayed_job:"Delayed Job",good_job:"GoodJob",solid_queue:"Solid Queue",que:"Que",rspec:"RSpec","rspec-rails":"RSpec Rails",minitest:"Minitest",capybara:"Capybara",factory_bot:"FactoryBot",factory_bot_rails:"FactoryBot Rails",faker:"Faker","shoulda-matchers":"Shoulda Matchers",vcr:"VCR",webmock:"WebMock",simplecov:"SimpleCov",cucumber:"Cucumber",devise:"Devise",omniauth:"OmniAuth",pundit:"Pundit",cancancan:"CanCanCan",rodauth:"Rodauth",jwt:"JWT",doorkeeper:"Doorkeeper","turbo-rails":"Turbo","stimulus-rails":"Stimulus","importmap-rails":"Importmap Rails",sprockets:"Sprockets",webpacker:"Webpacker","cssbundling-rails":"CSS Bundling","jsbundling-rails":"JS Bundling","tailwindcss-rails":"Tailwind CSS Rails",propshaft:"Propshaft",faraday:"Faraday",httparty:"HTTParty","rest-client":"REST Client",typhoeus:"Typhoeus",httpx:"HTTPX",puma:"Puma",unicorn:"Unicorn",thin:"Thin",passenger:"Passenger",falcon:"Falcon",capistrano:"Capistrano",kamal:"Kamal",mina:"Mina","sentry-ruby":"Sentry","sentry-rails":"Sentry Rails",newrelic_rpm:"New Relic",datadog:"Datadog",lograge:"Lograge",rubocop:"RuboCop","rubocop-rails":"RuboCop Rails","rubocop-rspec":"RuboCop RSpec","rubocop-performance":"RuboCop Performance",brakeman:"Brakeman","bundler-audit":"Bundler Audit",standard:"Standard",kaminari:"Kaminari",pagy:"Pagy",ransack:"Ransack",searchkick:"Searchkick","elasticsearch-rails":"Elasticsearch Rails",carrierwave:"CarrierWave",shrine:"Shrine",active_storage:"Active Storage",activeadmin:"ActiveAdmin",administrate:"Administrate",avo:"Avo",aasm:"AASM",statesman:"Statesman",dotenv:"dotenv",figaro:"Figaro"};function nc(e){let t=e.trim();if(!t||t.startsWith("#"))return null;let n=t.match(/^\s*gem\s+['"]([^'"]+)['"]\s*(?:,\s*['"]([^'"]+)['"])?/);if(!n)return null;let r=n[1],s=n[2]??"*";return {name:r,spec:s}}function sc(e){if(e==="*")return null;let t=e.match(/(?:~>|>=|>|=|<=|<)?\s*(\d+(?:\.\d+)*)/);return t?t[1]:null}function rc(e){let t=e.trim();if(/(?:\.pre|\.rc|\.beta|\.alpha|\.dev)/i.test(t))return null;let n=t.split(".");if(n.length<2)return null;for(;n.length<3;)n.push("0");let r=n.slice(0,3).join(".");return ht.valid(r)}function oc(e){let t=[],n="default",r=[];for(let s of e.split(/\r?\n/)){let o=s.trim(),i=o.match(/^\s*group\s+:(\w+)/);if(i){r.push(n);let u=i[1].toLowerCase();u==="development"||u==="dev"?n="development":u==="test"&&(n="test");}if(o==="end"&&r.length>0){n=r.pop();continue}let a=nc(o);if(!a)continue;let c=n,l=o.match(/group:\s*(?::(\w+)|\[([^\]]+)\])/);if(l){let u=(l[1]??l[2]??"").toLowerCase();u.includes("development")||u.includes("dev")?c="development":u.includes("test")&&(c="test");}t.push({name:a.name,spec:a.spec,group:c});}return t}function ic(e){let t=[];for(let n of e.split(/\r?\n/)){let s=n.trim().match(/\.add_(runtime_|development_)?dependency\s+['"]([^'"]+)['"]\s*(?:,\s*['"]([^'"]+)['"])?/);if(!s)continue;let o=s[1]??"runtime_",i=s[2],a=s[3]??"*";t.push({name:i,spec:a,group:o.startsWith("development")?"development":"default"});}return t}function ac(e){return e.match(/^\s*ruby\s+['"]([^'"]+)['"]/m)?.[1]}var Gr=new Set(["Gemfile"]);function es(e){return e.endsWith(".gemspec")}async function cc(e,t,n,r,s=ke){let o=n?await n.findFiles(e,l=>Gr.has(l)||es(l)):await lc(e),i=new Map;for(let l of o){let u=F.dirname(l);i.has(u)||i.set(u,[]),i.get(u).push(l);}let a=[],c=r??n?.projectScanTimeout??18e4;for(let[l,u]of i)try{let p=uc(l,u,e,t,n,s),d=await we(p,c);if(d.ok)a.push(d.value);else {let g=F.relative(e,l);n&&n.addStuckPath(g||"."),console.error(`Timeout scanning Ruby project ${l} (>${c/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(p){let d=p instanceof Error?p.message:String(p);console.error(`Error scanning Ruby project ${l}: ${d}`);}return a}async function lc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Gr.has(n)||es(n))}async function uc(e,t,n,r,s,o$1){let i=F.relative(n,e)||".",a=F.basename(e===n?n:e),c,l=new Map;for(let b of t){let v=F.basename(b),S=s?await s.readTextFile(b):await o(b);if(v==="Gemfile"){let w=ac(S);w&&(c=w);for(let P of oc(S))l.has(P.name)||l.set(P.name,P);}else if(es(v)){let w=v.replace(/\.gemspec$/,"");w&&(a=w);for(let P of ic(S))l.has(P.name)||l.set(P.name,P);}}let u,p,d,g;if(c){let b=c.match(/(\d+)\.(\d+)/);if(b){let S=parseInt(b[1],10),w=parseInt(b[2],10),P=Bt(o$1,"ruby");P&&(S===P.major?u=Math.max(0,P.minor-w):S<P.major&&(u=P.minor+(P.major-S)*10),p=`${P.major}.${P.minor}`);}d=st(o$1,"ruby",c);let v=Je("ruby",c);v&&(g=nt(o$1,"ruby",v));}let y=[],h=[],m={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},M=[...l.values()].map(async b=>{let v=await r.get(b.name);return {dep:b,meta:v}}),C=await Promise.all(M);for(let{dep:b,meta:v}of C){let S=sc(b.spec),w=S?rc(S):null,P=v.latestStableOverall,f=null,$="unknown";if(w&&P){let _=ht.major(w);f=ht.major(P)-_,f===0?$=ht.eq(w,P)?"current":"minor-behind":f>0?$="major-behind":$="current",f<=0?m.current++:f===1?m.oneBehind++:m.twoPlusBehind++;}else m.unknown++;let N=b.group==="development"||b.group==="test"?"devDependencies":"dependencies";y.push({package:b.name,section:N,currentSpec:b.spec,resolvedVersion:w,latestStable:P,majorsBehind:f,drift:$}),b.name in dr&&h.push({name:dr[b.name],currentVersion:w,latestVersion:P,majorsBehind:f});}y.sort((b,v)=>{let S={"major-behind":0,"minor-behind":1,current:2,unknown:3},w=(S[b.drift]??9)-(S[v.drift]??9);return w!==0?w:b.package.localeCompare(v.package)});let T;try{T=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"ruby",path:i,name:a,runtime:c,runtimeLatest:p,runtimeMajorsBehind:u,runtimeEol:d,runtimeEolDate:g,frameworks:h,dependencies:y,dependencyAgeBuckets:m,fileCount:T}}var fr={vapor:"Vapor",hummingbird:"Hummingbird",perfect:"Perfect",kitura:"Kitura",alamofire:"Alamofire",moya:"Moya","apollo-ios":"Apollo iOS",fluent:"Fluent","sqlite.swift":"SQLite.swift","realm-swift":"Realm Swift","grdb.swift":"GRDB.swift",kingfisher:"Kingfisher",snapkit:"SnapKit",sdwebimage:"SDWebImage",rxswift:"RxSwift",combine:"Combine",reactiveswift:"ReactiveSwift",quick:"Quick",nimble:"Nimble",snapshotTesting:"SnapshotTesting",swiftlog:"SwiftLog",cocoalumberjack:"CocoaLumberjack",swinject:"Swinject",needle:"Needle",swiftyjson:"SwiftyJSON",promisekit:"PromiseKit",then:"Then"},it={major:6,minor:0};function pc(e){let t=[],n=/\.package\s*\(\s*url:\s*"([^"]+)"[^)]*?(from|exact|upToNextMajor|revision|branch):\s*"([^"]+)"/g,r;for(;(r=n.exec(e))!==null;){let s=r[1],o=r[2],i=r[3],c=s.match(/\/([^/]+?)(\.git)?$/)?.[1]??s,l="range",u=i;o==="exact"?l="exact":o==="branch"?l="branch":o==="revision"&&(l="revision"),t.push({name:c,url:s,version:u,type:l});}return t}function dc(e){let t=new Map;try{let n=JSON.parse(e);if(!n.pins)return t;for(let r of n.pins)!r.identity||!r.state?.version||t.set(r.identity.toLowerCase(),r.state.version);}catch{}return t}function fc(e){return e.match(/\/\/\s*swift-tools-version:\s*(\d+\.\d+)/i)?.[1]}var Ur=new Set(["Package.swift"]);async function mc(e,t,n,r){let s=n?await n.findFiles(e,a=>Ur.has(a)):await hc(e),o=[],i=r??n?.projectScanTimeout??18e4;for(let a of s){let c=F.dirname(a);try{let l=gc(c,a,e,t,n),u=await we(l,i);if(u.ok)o.push(u.value);else {let p=F.relative(e,c);n&&n.addStuckPath(p||"."),console.error(`Timeout scanning Swift project ${c} (>${i/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(l){let u=l instanceof Error?l.message:String(l);console.error(`Error scanning Swift project ${c}: ${u}`);}}return o}async function hc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Ur.has(n))}async function gc(e,t,n,r,s){let o$1=F.relative(n,e)||".",i=F.basename(e===n?n:e),a=s?await s.readTextFile(t):await o(t),c=fc(a),l=pc(a),u=F.join(e,"Package.resolved"),p=new Map;try{let T=s?await s.readTextFile(u):await o(u);p=dc(T);}catch{}let d,g;if(c){let T=c.match(/(\d+)\.(\d+)/);if(T){let b=parseInt(T[1],10),v=parseInt(T[2],10);b===it.major?d=Math.max(0,it.minor-v):b<it.major&&(d=(it.major-b)*10+it.minor),g=`${it.major}.${it.minor}`;}}let y=[],h=[],m={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},E=l.map(async T=>{let b=await r.get(T.url);return {dep:T,meta:b}}),M=await Promise.all(E);for(let{dep:T,meta:b}of M){let v=p.get(T.name.toLowerCase())??(T.type==="exact"?T.version:null),S=v?Pe.valid(Pe.clean(v)):null,w=b.latestStableOverall,P=null,f="unknown";if(S&&w){let N=Pe.major(S);P=Pe.major(w)-N,P===0?f=Pe.eq(S,w)?"current":"minor-behind":P>0?f="major-behind":f="current",P<=0?m.current++:P===1?m.oneBehind++:m.twoPlusBehind++;}else m.unknown++;y.push({package:T.name,section:"dependencies",currentSpec:T.version,resolvedVersion:S,latestStable:w,majorsBehind:P,drift:f});let $=T.name.toLowerCase();$ in fr&&h.push({name:fr[$],currentVersion:S,latestVersion:w,majorsBehind:P});}y.sort((T,b)=>{let v={"major-behind":0,"minor-behind":1,current:2,unknown:3},S=(v[T.drift]??9)-(v[b.drift]??9);return S!==0?S:T.package.localeCompare(b.package)});let C;try{C=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"swift",path:o$1,name:i,runtime:c,runtimeLatest:g,runtimeMajorsBehind:d,frameworks:h,dependencies:y,dependencyAgeBuckets:m,fileCount:C}}var mr={"github.com/gin-gonic/gin":"Gin","github.com/labstack/echo":"Echo","github.com/gofiber/fiber":"Fiber","github.com/gorilla/mux":"Gorilla Mux","github.com/go-chi/chi":"Chi","github.com/beego/beego":"Beego","github.com/revel/revel":"Revel","k8s.io/kubernetes":"Kubernetes","k8s.io/client-go":"Kubernetes Client","github.com/prometheus/prometheus":"Prometheus","github.com/prometheus/client_golang":"Prometheus Client","go.etcd.io/etcd":"etcd","github.com/hashicorp/consul":"Consul","github.com/hashicorp/vault":"Vault","github.com/traefik/traefik":"Traefik","github.com/istio/istio":"Istio","gorm.io/gorm":"GORM","github.com/jmoiron/sqlx":"sqlx","github.com/go-sql-driver/mysql":"MySQL Driver","github.com/lib/pq":"PostgreSQL Driver","go.mongodb.org/mongo-driver":"MongoDB Driver","github.com/redis/go-redis":"Redis Client","github.com/go-redis/redis":"go-redis","google.golang.org/grpc":"gRPC","google.golang.org/protobuf":"Protobuf","github.com/grpc-ecosystem/grpc-gateway":"gRPC Gateway","github.com/stretchr/testify":"Testify","github.com/onsi/ginkgo":"Ginkgo","github.com/onsi/gomega":"Gomega","github.com/golang/mock":"GoMock","go.uber.org/zap":"Zap","github.com/sirupsen/logrus":"Logrus","github.com/rs/zerolog":"Zerolog","github.com/spf13/viper":"Viper","github.com/spf13/cobra":"Cobra","github.com/urfave/cli":"urfave/cli","github.com/go-resty/resty":"Resty","github.com/json-iterator/go":"jsoniter","gopkg.in/yaml.v3":"YAML v3","github.com/segmentio/kafka-go":"kafka-go","github.com/rabbitmq/amqp091-go":"RabbitMQ","github.com/nats-io/nats.go":"NATS","github.com/google/uuid":"UUID","github.com/spf13/cast":"Cast","github.com/pkg/errors":"pkg/errors"};function yc(e){let t=[],n,r=false;for(let s of e.split(/\r?\n/)){let o=s.trim();if(o.startsWith("go ")){let l=o.match(/^go\s+(\d+\.\d+)/);l&&(n=l[1]);continue}if(o.startsWith("require (")){r=true;continue}if(o===")"&&r){r=false;continue}let i=o;if(r)i=o;else if(o.startsWith("require "))i=o.substring(8);else continue;let a=i.includes("// indirect");i=i.replace(/\/\/.*$/,"").trim();let c=i.split(/\s+/);if(c.length>=2){let[l,u]=c;l&&u&&t.push({path:l,version:u,indirect:a});}}return {goVersion:n,deps:t}}var qr=new Set(["go.mod"]);async function bc(e,t,n,r,s=ke){let o=n?await n.findFiles(e,c=>qr.has(c)):await vc(e),i=[],a=r??n?.projectScanTimeout??18e4;for(let c of o){let l=F.dirname(c);try{let u=wc(l,c,e,t,n,s),p=await we(u,a);if(p.ok)i.push(p.value);else {let d=F.relative(e,l);n&&n.addStuckPath(d||"."),console.error(`Timeout scanning Go project ${l} (>${a/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(u){let p=u instanceof Error?u.message:String(u);console.error(`Error scanning Go project ${l}: ${p}`);}}return i}async function vc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>qr.has(n))}async function wc(e,t,n,r,s,o$1){let i=F.relative(n,e)||".",a=F.basename(e===n?n:e),c=s?await s.readTextFile(t):await o(t),{goVersion:l,deps:u}=yc(c),p=u.filter(v=>!v.indirect),d,g,y,h;if(l){let v=l.match(/(\d+)\.(\d+)/);if(v){let w=parseInt(v[1],10),P=parseInt(v[2],10),f=Bt(o$1,"go");f&&(w===f.major?d=Math.max(0,f.minor-P):w<f.major&&(d=f.minor+(f.major-w)*100),g=`${f.major}.${f.minor}`);}y=st(o$1,"go",l);let S=Je("go",l);S&&(h=nt(o$1,"go",S));}let m=[],E=[],M={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},C=p.map(async v=>{let S=await r.get(v.path);return {dep:v,meta:S}}),T=await Promise.all(C);for(let{dep:v,meta:S}of T){let w=Ee.valid(Ee.clean(v.version)),P=S.latestStableOverall,f=null,$="unknown";if(w&&P){let N=Ee.major(w);f=Ee.major(P)-N,f===0?$=Ee.eq(w,P)?"current":"minor-behind":f>0?$="major-behind":$="current",f<=0?M.current++:f===1?M.oneBehind++:M.twoPlusBehind++;}else M.unknown++;m.push({package:v.path,section:"dependencies",currentSpec:v.version,resolvedVersion:w,latestStable:P,majorsBehind:f,drift:$}),v.path in mr&&E.push({name:mr[v.path],currentVersion:w,latestVersion:P,majorsBehind:f});}m.sort((v,S)=>{let w={"major-behind":0,"minor-behind":1,current:2,unknown:3},P=(w[v.drift]??9)-(w[S.drift]??9);return P!==0?P:v.package.localeCompare(S.package)});let b;try{b=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"go",path:i,name:a,runtime:l,runtimeLatest:g,runtimeMajorsBehind:d,runtimeEol:y,runtimeEolDate:h,frameworks:E,dependencies:m,dependencyAgeBuckets:M,fileCount:b}}var hr={"actix-web":"Actix Web",rocket:"Rocket",axum:"Axum",warp:"Warp",tide:"Tide",poem:"Poem",tokio:"Tokio","async-std":"async-std",smol:"smol",serde:"Serde",serde_json:"Serde JSON",bincode:"Bincode",toml:"TOML",diesel:"Diesel",sqlx:"SQLx","sea-orm":"SeaORM",reqwest:"reqwest",hyper:"hyper",ureq:"ureq",clap:"clap",structopt:"structopt",log:"log",env_logger:"env_logger",tracing:"tracing","tracing-subscriber":"tracing-subscriber",anyhow:"anyhow",thiserror:"thiserror",eyre:"eyre",criterion:"Criterion",proptest:"proptest",mockall:"mockall",ring:"ring",rustls:"rustls",webpki:"webpki",bevy:"Bevy",wgpu:"wgpu",winit:"winit","wasm-bindgen":"wasm-bindgen","wasm-pack":"wasm-pack",substrate:"Substrate",ethers:"ethers-rs"};function Sc(e){let t=[],n=null;for(let r of e.split(/\r?\n/)){let s=r.trim();if(s==="[dependencies]"){n="dependencies";continue}else if(s==="[dev-dependencies]"){n="dev-dependencies";continue}else if(s.startsWith("[")&&s.endsWith("]")){n=null;continue}if(!n)continue;let o=s.match(/^([\w-]+)\s*=\s*"([^"]+)"/);if(o){t.push({name:o[1],version:o[2],optional:false,features:[],isDev:n==="dev-dependencies"});continue}let i=s.match(/^([\w-]+)\s*=\s*\{([^}]+)\}/);if(i){let a=i[1],c=i[2],u=c.match(/version\s*=\s*"([^"]+)"/)?.[1]??"*",d=!!c.match(/optional\s*=\s*true/),g=c.match(/features\s*=\s*\[([^\]]*)\]/),y=g?g[1].split(",").map(h=>h.trim().replace(/"/g,"")):[];t.push({name:a,version:u,optional:d,features:y,isDev:n==="dev-dependencies"});}}return t}function kc(e){return e.match(/^\s*edition\s*=\s*"(\d+)"/m)?.[1]}var Wr=new Set(["Cargo.toml"]);async function jc(e,t,n,r){let s=n?await n.findFiles(e,a=>Wr.has(a)):await Pc(e),o=[],i=r??n?.projectScanTimeout??18e4;for(let a of s){let c=F.dirname(a);try{let l=Ec(c,a,e,t,n),u=await we(l,i);if(u.ok)o.push(u.value);else {let p=F.relative(e,c);n&&n.addStuckPath(p||"."),console.error(`Timeout scanning Rust project ${c} (>${i/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(l){let u=l instanceof Error?l.message:String(l);console.error(`Error scanning Rust project ${c}: ${u}`);}}return o}async function Pc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Wr.has(n))}async function Ec(e,t,n,r,s){let o$1=F.relative(n,e)||".",i=F.basename(e===n?n:e),a=s?await s.readTextFile(t):await o(t),c=kc(a),u=Sc(a).filter(C=>!C.isDev),p,d;if(c){let C=parseInt(c,10),T=2024;p=Math.max(0,Math.floor((T-C)/3)),d=T.toString();}let g=[],y=[],h={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},m=u.map(async C=>{let T=await r.get(C.name);return {dep:C,meta:T}}),E=await Promise.all(m);for(let{dep:C,meta:T}of E){let b=Te.valid(Te.coerce(C.version)),v=T.latestStableOverall,S=null,w="unknown";if(b&&v){let f=Te.major(b);S=Te.major(v)-f,S===0?w=Te.eq(b,v)?"current":"minor-behind":S>0?w="major-behind":w="current",S<=0?h.current++:S===1?h.oneBehind++:h.twoPlusBehind++;}else h.unknown++;let P=C.isDev?"devDependencies":"dependencies";g.push({package:C.name,section:P,currentSpec:C.version,resolvedVersion:b,latestStable:v,majorsBehind:S,drift:w}),C.name in hr&&y.push({name:hr[C.name],currentVersion:b,latestVersion:v,majorsBehind:S});}g.sort((C,T)=>{let b={"major-behind":0,"minor-behind":1,current:2,unknown:3},v=(b[C.drift]??9)-(b[T.drift]??9);return v!==0?v:C.package.localeCompare(T.package)});let M;try{M=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"rust",path:o$1,name:i,runtime:c,runtimeLatest:d,runtimeMajorsBehind:p,frameworks:y,dependencies:g,dependencyAgeBuckets:h,fileCount:M}}var gr={"laravel/framework":"Laravel","symfony/symfony":"Symfony","symfony/http-foundation":"Symfony HttpFoundation","cakephp/cakephp":"CakePHP","yiisoft/yii2":"Yii 2","codeigniter4/framework":"CodeIgniter","slim/slim":"Slim","laminas/laminas-mvc":"Laminas","roots/wordpress":"WordPress","johnpbloch/wordpress":"WordPress Core","doctrine/orm":"Doctrine ORM","doctrine/dbal":"Doctrine DBAL","illuminate/database":"Laravel Eloquent","propel/propel":"Propel","phpunit/phpunit":"PHPUnit","pestphp/pest":"Pest","behat/behat":"Behat","codeception/codeception":"Codeception","mockery/mockery":"Mockery","guzzlehttp/guzzle":"Guzzle","symfony/http-client":"Symfony HttpClient","twig/twig":"Twig","smarty/smarty":"Smarty","league/plates":"Plates","firebase/php-jwt":"PHP-JWT","lcobucci/jwt":"JWT","league/fractal":"Fractal","api-platform/core":"API Platform","symfony/console":"Symfony Console","monolog/monolog":"Monolog","nesbot/carbon":"Carbon","ramsey/uuid":"UUID","vlucas/phpdotenv":"PHP dotenv","phpstan/phpstan":"PHPStan","vimeo/psalm":"Psalm","friendsofphp/php-cs-fixer":"PHP CS Fixer","squizlabs/php_codesniffer":"PHP_CodeSniffer"},at={major:8,minor:4};async function Tc(e,t){let n$1=t?await t.readJsonFile(e):await n(e),r=[],s;if(n$1.require?.php&&(s=n$1.require.php),n$1.require&&typeof n$1.require=="object")for(let[o,i]of Object.entries(n$1.require))o==="php"||o.startsWith("ext-")||r.push({name:o,version:String(i),isDev:false});if(n$1["require-dev"]&&typeof n$1["require-dev"]=="object")for(let[o,i]of Object.entries(n$1["require-dev"]))o==="php"||o.startsWith("ext-")||r.push({name:o,version:String(i),isDev:true});return {phpVersion:s,deps:r}}async function Mc(e,t){let n$1=new Map;try{let r=t?await t.readJsonFile(e):await n(e);for(let s of r.packages??[])s.name&&s.version&&n$1.set(s.name,s.version);for(let s of r["packages-dev"]??[])s.name&&s.version&&n$1.set(s.name,s.version);}catch{}return n$1}function Cc(e){return e.match(/(\d+)\.(\d+)/)?.[0]}var zr=new Set(["composer.json"]);async function $c(e,t,n,r){let s=n?await n.findFiles(e,a=>zr.has(a)):await xc(e),o=[],i=r??n?.projectScanTimeout??18e4;for(let a of s){let c=F.dirname(a);try{let l=Ac(c,a,e,t,n),u=await we(l,i);if(u.ok)o.push(u.value);else {let p=F.relative(e,c);n&&n.addStuckPath(p||"."),console.error(`Timeout scanning PHP project ${c} (>${i/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(l){let u=l instanceof Error?l.message:String(l);console.error(`Error scanning PHP project ${c}: ${u}`);}}return o}async function xc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>zr.has(n))}async function Ac(e,t,n,r,s){let o=F.relative(n,e)||".",i=F.basename(e===n?n:e),{phpVersion:a,deps:c}=await Tc(t,s),l=F.join(e,"composer.lock"),u=new Map;try{u=await Mc(l,s);}catch{}let p=c.filter(b=>!b.isDev),d,g,y;if(a&&(y=Cc(a),y)){let b=y.match(/(\d+)\.(\d+)/);if(b){let v=parseInt(b[1],10),S=parseInt(b[2],10);v===at.major?d=Math.max(0,at.minor-S):v<at.major&&(d=at.minor+(at.major-v)*10),g=`${at.major}.${at.minor}`;}}let h=[],m=[],E={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},M=p.map(async b=>{let v=await r.get(b.name);return {dep:b,meta:v}}),C=await Promise.all(M);for(let{dep:b,meta:v}of C){let S=u.get(b.name),w=S?Me.valid(Me.clean(S)):null,P=v.latestStableOverall,f=null,$="unknown";if(w&&P){let _=Me.major(w);f=Me.major(P)-_,f===0?$=Me.eq(w,P)?"current":"minor-behind":f>0?$="major-behind":$="current",f<=0?E.current++:f===1?E.oneBehind++:E.twoPlusBehind++;}else E.unknown++;let N=b.isDev?"devDependencies":"dependencies";h.push({package:b.name,section:N,currentSpec:b.version,resolvedVersion:w,latestStable:P,majorsBehind:f,drift:$}),b.name in gr&&m.push({name:gr[b.name],currentVersion:w,latestVersion:P,majorsBehind:f});}h.sort((b,v)=>{let S={"major-behind":0,"minor-behind":1,current:2,unknown:3},w=(S[b.drift]??9)-(S[v.drift]??9);return w!==0?w:b.package.localeCompare(v.package)});let T;try{T=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"php",path:o,name:i,runtime:y,runtimeLatest:g,runtimeMajorsBehind:d,frameworks:m,dependencies:h,dependencyAgeBuckets:E,fileCount:T}}var yr={flutter:"Flutter SDK",flutter_test:"Flutter Test",provider:"Provider",riverpod:"Riverpod",flutter_riverpod:"Flutter Riverpod",bloc:"BLoC",flutter_bloc:"Flutter BLoC",get:"GetX",mobx:"MobX",redux:"Redux",go_router:"GoRouter",auto_route:"AutoRoute",http:"http",dio:"Dio",retrofit:"Retrofit",graphql_flutter:"GraphQL Flutter",sqflite:"SQFlite",hive:"Hive",isar:"Isar",drift:"Drift",firebase_core:"Firebase Core",cloud_firestore:"Cloud Firestore",flutter_svg:"Flutter SVG",cached_network_image:"Cached Network Image",shimmer:"Shimmer",lottie:"Lottie",flutter_staggered_grid_view:"Staggered Grid View",mockito:"Mockito",mocktail:"Mocktail",integration_test:"Integration Test",test:"Test",intl:"Intl",shared_preferences:"Shared Preferences",path_provider:"Path Provider",package_info_plus:"Package Info Plus",url_launcher:"URL Launcher",image_picker:"Image Picker",json_serializable:"JSON Serializable",freezed:"Freezed",built_value:"Built Value",logger:"Logger",sentry_flutter:"Sentry Flutter",firebase_crashlytics:"Firebase Crashlytics",build_runner:"Build Runner",injectable:"Injectable",flutter_lints:"Flutter Lints",lint:"Lint"},ct={major:3,minor:6};function Nc(e){let t=[],n,r=null;for(let s of e.split(/\r?\n/)){let o=s.trim();if(o.startsWith("sdk:")){let a=o.match(/sdk:\s*['"]?>?=?\s*(\d[^<'"]*)/);a&&(n=a[1].trim());continue}if(o==="dependencies:"){r="dependencies";continue}else if(o==="dev_dependencies:"){r="dev_dependencies";continue}else if(/^\w+:/.test(s)){r=null;continue}if(!r)continue;let i=o.match(/^([\w_]+):\s*([^\s{]+)/);if(i){let a=i[1],c=i[2];if(c==="sdk:"||o.includes("sdk: flutter"))continue;t.push({name:a,version:c,isDev:r==="dev_dependencies"});}}return {dartVersion:n,deps:t}}async function Lc(e,t){let n=new Map;try{let r=t?await t.readTextFile(e):await o(e),s=null;for(let o of r.split(/\r?\n/)){let i=o.trim(),a=o.match(/^ {2}(\w+):$/);if(a){s=a[1];continue}if(s&&i.startsWith("version:")){let c=i.match(/version:\s*"?([^"]+)"?/);c&&(n.set(s,c[1]),s=null);}}}catch{}return n}function Ic(e){return e.match(/(\d+\.\d+\.\d+)/)?.[0]}var Hr=new Set(["pubspec.yaml"]);async function Rc(e,t,n,r){let s=n?await n.findFiles(e,a=>Hr.has(a)):await Fc(e),o=[],i=r??n?.projectScanTimeout??18e4;for(let a of s){let c=F.dirname(a);try{let l=Bc(c,a,e,t,n),u=await we(l,i);if(u.ok)o.push(u.value);else {let p=F.relative(e,c);n&&n.addStuckPath(p||"."),console.error(`Timeout scanning Dart project ${c} (>${i/1e3}s) \u2014 skipped`),n?.shouldShowTimeoutHint()&&console.error(" Tip: increase projectScanTimeout in vibgrate.config.ts (or --project-scan-timeout <seconds>) for large projects");}}catch(l){let u=l instanceof Error?l.message:String(l);console.error(`Error scanning Dart project ${c}: ${u}`);}}return o}async function Fc(e){let{findFiles:t}=await import('./fs-PXXYZATK-ZP2RBR47.js');return t(e,n=>Hr.has(n))}async function Bc(e,t,n,r,s){let o$1=F.relative(n,e)||".",i=F.basename(e===n?n:e),a=s?await s.readTextFile(t):await o(t),{dartVersion:c,deps:l}=Nc(a),u=F.join(e,"pubspec.lock"),p=new Map;try{p=await Lc(u,s);}catch{}let d=l.filter(v=>!v.isDev),g,y,h;if(c&&(h=Ic(c),h)){let v=h.match(/(\d+)\.(\d+)/);if(v){let S=parseInt(v[1],10),w=parseInt(v[2],10);S===ct.major?g=Math.max(0,ct.minor-w):S<ct.major&&(g=ct.minor+(ct.major-S)*10),y=`${ct.major}.${ct.minor}`;}}let m=[],E=[],M={current:0,oneBehind:0,twoPlusBehind:0,unknown:0},C=d.map(async v=>{let S=await r.get(v.name);return {dep:v,meta:S}}),T=await Promise.all(C);for(let{dep:v,meta:S}of T){let w=p.get(v.name),P=w?Ce.valid(Ce.clean(w)):null,f=S.latestStableOverall,$=null,N="unknown";if(P&&f){let ie=Ce.major(P);$=Ce.major(f)-ie,$===0?N=Ce.eq(P,f)?"current":"minor-behind":$>0?N="major-behind":N="current",$<=0?M.current++:$===1?M.oneBehind++:M.twoPlusBehind++;}else M.unknown++;let _=v.isDev?"devDependencies":"dependencies";m.push({package:v.name,section:_,currentSpec:v.version,resolvedVersion:P,latestStable:f,majorsBehind:$,drift:N}),v.name in yr&&E.push({name:yr[v.name],currentVersion:P,latestVersion:f,majorsBehind:$});}m.sort((v,S)=>{let w={"major-behind":0,"minor-behind":1,current:2,unknown:3},P=(w[v.drift]??9)-(w[S.drift]??9);return P!==0?P:v.package.localeCompare(S.package)});let b;try{b=s?await s.countFilesUnder(n,e):void 0;}catch{}return {type:"dart",path:o$1,name:i,runtime:h,runtimeLatest:y,runtimeMajorsBehind:g,frameworks:E,dependencies:m,dependencyAgeBuckets:M,fileCount:b}}var Oc="https://hex.pm/api",Vc=1e4,_c=10;async function Dc(e,t,n,r=false){let s=W(t,"hex",e);if(s?.latest)return s.latest;if(r)return null;let o=async()=>{try{let i=new AbortController,a=setTimeout(()=>i.abort(),Vc),c=`${Oc}/packages/${e}`,l=await fetch(c,{signal:i.signal,headers:{"User-Agent":"vibgrate-cli"}});if(clearTimeout(a),!l.ok)return null;let p=(await l.json()).releases;if(!p||p.length===0)return null;let d=p.filter(g=>!g.retired).map(g=>g.version).filter(g=>{try{return new bn.SemVer(g).prerelease.length===0}catch{return !1}});return d.length===0?null:(d.sort((g,y)=>{try{return (0,bn.gt)(g,y)?-1:1}catch{return 0}}),d[0])}catch(i){return i?.name==="AbortError",null}};return n?n.run(o):o()}async function Gc(e,t,n=false){let r=new Map,s=new a$2(_c),o=e.map(async i=>{let a=await Dc(i,t,s,n);a&&r.set(i,a);});return await Promise.all(o),r}var Uc=new Set(["mix.exs"]),qc=new Set(["phoenix","phoenix_live_view","phoenix_html","phoenix_ecto","phoenix_pubsub","ecto","ecto_sql","plug","plug_cowboy","cowboy","ranch","absinthe","absinthe_plug","guardian","comeonin","bcrypt_elixir","argon2_elixir","pbkdf2_elixir","ex_machina","mock","mox","excoveralls","credo","dialyxir","ex_doc","jason","poison","httpoison","tesla","finch","mint","hackney","timex","quantum","oban","broadway","gen_stage","flow","bamboo","swoosh","ex_aws","ex_aws_s3","redix","cachex","nebulex","floki","wallaby","hound"]);async function Wc(e,t){let n=t?await t.readTextFile(e):await o(e),r=[],s,o$1=n.match(/elixir:\s*"([^"]+)"/);o$1&&(s=o$1[1]);let i=/\{\s*:(\w+)\s*,\s*"([^"]+)"(?:,\s*(?:only|optional|runtime):\s*:(\w+))?\s*\}/g,a;for(;(a=i.exec(n))!==null;){let l=a[1],u=a[2],p=a[3];r.push({name:l,version:u,isDev:p==="dev"||p==="test"});}let c=/\{\s*:(\w+)\s*,\s*git:\s*"[^"]+"/g;for(;(a=c.exec(n))!==null;){a[1];}return {elixirVersion:s,deps:r}}async function zc(e,t){let n=new Map;try{let r=t?await t.readTextFile(e):await o(e),s=/"(\w+)":\s*\{\s*:hex\s*,\s*:\w+\s*,\s*"([^"]+)"/g,o$1;for(;(o$1=s.exec(r))!==null;){let i=o$1[1],a=o$1[2];n.set(i,a);}}catch{}return n}function Hc(e,t){try{let n=e.replace(/^[~><=\s]+/,""),r=(0,me.minVersion)((0,me.validRange)(n)||n);if(!r)return "unknown";if(!(0,me.gt)(t,r.version))return "current";let s=(0,me.minVersion)(t);return s?s.major>r.major?"major-behind":"minor-behind":"unknown"}catch{return "unknown"}}async function Jc(e,t,n,r=false){let s=`${e}/mix.exs`;if(!(t?await t.pathExists(s):await p(s)))return null;let{elixirVersion:i,deps:a}=await Wc(s,t),c=`${e}/mix.lock`,l=await zc(c,t),u=a.filter(m=>!m.isDev),p$1=u.map(m=>m.name),d=await Gc(p$1,n,r),g=[],y=[],h={current:0,oneBehind:0,twoPlusBehind:0,unknown:0};for(let m of u){let E=l.get(m.name),M=E||m.version,C=d.get(m.name),T=C?Hc(M,C):"unknown",b=null;if(E&&C)try{let v=(0,me.minVersion)((0,me.validRange)(M)||M),S=(0,me.minVersion)((0,me.validRange)(C)||C);v&&S&&(b=S.major-v.major);}catch{}g.push({package:m.name,section:m.isDev?"devDependencies":"dependencies",currentSpec:m.version,resolvedVersion:E||null,latestStable:C||null,majorsBehind:b,drift:T}),T==="current"?h.current++:b===1?h.oneBehind++:b&&b>1?h.twoPlusBehind++:h.unknown++,qc.has(m.name)&&y.push({name:m.name,currentVersion:E||null,latestVersion:C||null,majorsBehind:b});}return {type:"elixir",path:F.relative(e.includes("/")?e.split("/").slice(0,-1).join("/"):".",e)||".",name:F.basename(e),runtime:i,frameworks:y,dependencies:g,dependencyAgeBuckets:h}}async function Kc(e,t,n,r,s=false){let o=n?await n.findFiles(e,c=>Uc.has(c)):[],i=new Map;for(let c of o){let l=F.dirname(c);i.has(l)||i.set(l,[]),i.get(l).push(c);}let a=[];for(let[c]of i)try{let l=await Jc(c,n,t,s);l&&(l.path=F.relative(e,c)||".",a.push(l));}catch(l){console.error(`Error scanning Elixir project at ${c}:`,l);}return a}var Qc="https://hub.docker.com/v2",Yc=1e4,Xc=10;function ts(e){let t,n,r,s,[o,i]=e.split(":");s=i;let a=o.split("/");return a.length>1&&(a[0].includes(".")||a[0]==="localhost")?(t=a[0],a.length===3?(n=a[1],r=a[2]):r=a[1]):a.length===2?(n=a[0],r=a[1]):r=o,{registry:t,namespace:n,image:r,tag:s}}async function Zc(e,t,n){let r=async()=>{try{let s=new AbortController,o=setTimeout(()=>s.abort(),Yc),i=`${Qc}/repositories/${e}/${t}/tags?page_size=100`,a=await fetch(i,{signal:s.signal,headers:{"User-Agent":"vibgrate-cli"}});return clearTimeout(o),a.ok?((await a.json()).results||[]).map(u=>u.name):[]}catch(s){return s?.name==="AbortError"?[]:[]}};return n?n.run(r):r()}function el(e){let t=[];for(let n of e){if(["latest","master","main","stable","edge","dev"].includes(n))continue;let r=n.replace(/^v/,""),s=r.indexOf("-");s>0&&(r=r.substring(0,s));try{let o=new vn.SemVer(r);o.prerelease.length===0&&t.push(o);}catch{}}return t.length===0?null:(t.sort((n,r)=>(0, vn.gt)(n.version,r.version)?-1:1),t[0].version)}async function tl(e,t,n,r=false){let s=ts(e),o=`${s.namespace||"library"}/${s.image}`,i=W(t,"docker",o);if(i?.latest)return i.latest;if(r||s.registry&&s.registry!=="docker.io")return null;let a=s.namespace||"library",c=await Zc(a,s.image,n);return el(c)}async function nl(e,t,n=false){let r=new Map,s=new a$2(Xc),o=e.map(async i=>{let a=await tl(i,t,s,n);a&&r.set(i,a);});return await Promise.all(o),r}var sl=new Set(["Dockerfile","docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml"]);async function rl(e,t){let n=t?await t.readTextFile(e):await o(e),r=[],s=/^FROM\s+(?:--platform=[^\s]+\s+)?([^\s]+)/gm,o$1;for(;(o$1=s.exec(n))!==null;){let i=o$1[1];if(i==="scratch")continue;let a=ts(i);r.push({name:`${a.namespace||"library"}/${a.image}`,currentTag:a.tag||"latest"});}return r}async function ol(e,t){let n=t?await t.readTextFile(e):await o(e),r=[],s=/^\s*image:\s*([^\s#]+)/gm,o$1;for(;(o$1=s.exec(n))!==null;){let i=o$1[1].trim().replace(/["']/g,""),a=ts(i);r.push({name:`${a.namespace||"library"}/${a.image}`,currentTag:a.tag||"latest"});}return r}function il(e,t){try{if(e==="latest"||e==="stable")return "current";let n=e.replace(/^v/,""),r=n.indexOf("-");r>0&&(n=n.substring(0,r));let s=new gt.SemVer(n),o=new gt.SemVer(t);return (0,gt.gt)(o.version,s.version)?o.major>s.major?"major-behind":"minor-behind":"current"}catch{return "unknown"}}async function al(e,t,n,r=false){let s=[],o=`${e}/Dockerfile`;if(t?await t.pathExists(o):await p(o)){let g=await rl(o,t);s.push(...g);}let a=["docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml"];for(let g of a){let y=`${e}/${g}`;if(t?await t.pathExists(y):await p(y)){let m=await ol(y,t);s.push(...m);break}}if(s.length===0)return null;let c=new Map;for(let g of s)c.has(g.name)||c.set(g.name,g.currentTag);let l=Array.from(c.keys()),u=await nl(l,n,r),p$1=[],d={current:0,oneBehind:0,twoPlusBehind:0,unknown:0};for(let g of l){let y=c.get(g),h=u.get(g),m=h?il(y,h):"unknown",E=null;if(h)try{let M=y.replace(/^v/,"").split("-")[0],C=new gt.SemVer(M);E=new gt.SemVer(h).major-C.major;}catch{}p$1.push({package:g,section:"dependencies",currentSpec:y,resolvedVersion:y,latestStable:h||null,majorsBehind:E,drift:m}),m==="current"?d.current++:E===1?d.oneBehind++:E&&E>1?d.twoPlusBehind++:d.unknown++;}return {type:"docker",path:F.relative(e.includes("/")?e.split("/").slice(0,-1).join("/"):".",e)||".",name:F.basename(e),frameworks:[],dependencies:p$1,dependencyAgeBuckets:d}}async function cl(e,t,n,r,s=false){let o=n?await n.findFiles(e,c=>sl.has(c)):[],i=new Map;for(let c of o){let l=F.dirname(c);i.has(l)||i.set(l,[]),i.get(l).push(c);}let a=[];for(let[c]of i)try{let l=await al(c,n,t,s);l&&(l.path=F.relative(e,c)||".",a.push(l));}catch(l){console.error(`Error scanning Docker project at ${c}:`,l);}return a}var ll="https://artifacthub.io/api/v1",ul=1e4,pl=10;async function dl(e,t,n,r,s=false){let o=t?`${t}/${e}`:e,i=W(n,"helm",o);if(i?.latest)return i.latest;if(s)return null;let a=async()=>{try{let c=new AbortController,l=setTimeout(()=>c.abort(),ul),u=`${ll}/packages/search?kind=0&ts_query_web=${encodeURIComponent(e)}&limit=10`,p=await fetch(u,{signal:c.signal,headers:{"User-Agent":"vibgrate-cli"}});if(clearTimeout(l),!p.ok)return null;let g=(await p.json()).packages||[],y=g.find(h=>h.name===e);return t&&g.length>1&&(y=g.find(h=>h.name===e&&h.repository?.name===t)||y),y?y.version:null}catch(c){return c?.name==="AbortError",null}};return r?r.run(a):a()}async function fl(e,t,n=false){let r=new Map,s=new a$2(pl),o=e.map(async i=>{let a=await dl(i.name,i.repo,t,s,n);if(a){let c=i.repo?`${i.repo}/${i.name}`:i.name;r.set(c,a);}});return await Promise.all(o),r}var ml=new Set(["Chart.yaml","Chart.yml"]);async function hl(e,t){let n=t?await t.readTextFile(e):await o(e),r=[],s,o$1,i,a=n.match(/^name:\s*(.+)$/m);a&&(s=a[1].trim().replace(/["']/g,""));let c=n.match(/^version:\s*(.+)$/m);c&&(o$1=c[1].trim().replace(/["']/g,""));let l=n.match(/^appVersion:\s*(.+)$/m);l&&(i=l[1].trim().replace(/["']/g,""));let u=n.match(/^dependencies:\s*$/m);if(u){let p=u.index+u[0].length,d=n.substring(p),g=/^\s*-\s+name:\s*(.+)$/gm,y;for(;(y=g.exec(d))!==null;){let h=y[1].trim().replace(/["']/g,""),m=y.index,E=g.exec(d),M=E?E.index:d.length;g.lastIndex=m+1;let C=d.substring(m,M),T=C.match(/version:\s*(.+)$/m),b=T?T[1].trim().replace(/["']/g,""):"*",v=C.match(/repository:\s*(.+)$/m),S=v?v[1].trim().replace(/["']/g,""):void 0,w=C.match(/condition:\s*(.+)$/m),P=w?w[1].trim().replace(/["']/g,""):void 0;r.push({name:h,version:b,repository:S,condition:P});}}return {chartName:s,chartVersion:o$1,appVersion:i,dependencies:r}}async function gl(e,t){let n=new Map;try{let r=t?await t.readTextFile(e):await o(e),s=/^\s*-\s+name:\s*(.+)$/gm,o$1;for(;(o$1=s.exec(r))!==null;){let i=o$1[1].trim().replace(/["']/g,""),a=o$1.index,c=s.exec(r),l=c?c.index:r.length;s.lastIndex=a+1;let p=r.substring(a,l).match(/version:\s*(.+)$/m);if(p){let d=p[1].trim().replace(/["']/g,"");n.set(i,d);}}}catch{}return n}function yl(e,t){try{let n=e.replace(/^[~^><=\s]+/,""),r=(0,he.minVersion)((0,he.validRange)(n)||n);if(!r)return "unknown";if(!(0,he.gt)(t,r.version))return "current";let s=(0,he.minVersion)(t);return s?s.major>r.major?"major-behind":"minor-behind":"unknown"}catch{return "unknown"}}async function bl(e,t,n,r=false){let s=null;for(let h of ["Chart.yaml","Chart.yml"]){let m=`${e}/${h}`;if(t?await t.pathExists(m):await p(m)){s=m;break}}if(!s)return null;let{chartName:o,chartVersion:i,appVersion:a,dependencies:c}=await hl(s,t),l=`${e}/Chart.lock`,u=await gl(l,t),p$1=c.map(h=>({name:h.name,repo:h.repository})),d=await fl(p$1,n,r),g=[],y={current:0,oneBehind:0,twoPlusBehind:0,unknown:0};for(let h of c){let m=u.get(h.name),E=m||h.version,M=h.repository?`${h.repository}/${h.name}`:h.name,C=d.get(M),T=C?yl(E,C):"unknown",b=null;if(C)try{let v=(0,he.minVersion)((0,he.validRange)(E)||E),S=(0,he.minVersion)((0,he.validRange)(C)||C);v&&S&&(b=S.major-v.major);}catch{}g.push({package:h.name,section:"dependencies",currentSpec:h.version,resolvedVersion:m||null,latestStable:C||null,majorsBehind:b,drift:T}),T==="current"?y.current++:b===1?y.oneBehind++:b&&b>1?y.twoPlusBehind++:y.unknown++;}return {type:"helm",path:F.relative(e.includes("/")?e.split("/").slice(0,-1).join("/"):".",e)||".",name:o||F.basename(e),runtime:a,frameworks:[],dependencies:g,dependencyAgeBuckets:y}}async function vl(e,t,n,r,s=false){let o=n?await n.findFiles(e,c=>ml.has(c)):[],i=new Map;for(let c of o){let l=F.dirname(c);i.has(l)||i.set(l,[]),i.get(l).push(c);}let a=[];for(let[c]of i)try{let l=await bl(c,n,t,s);l&&(l.path=F.relative(e,c)||".",a.push(l));}catch(l){console.error(`Error scanning Helm chart at ${c}:`,l);}return a}var Jr="https://registry.terraform.io/v1",Kr=1e4,wl=10;async function Sl(e,t,n,r,s=false){let o=`${e}/${t}`,i=W(n,"terraform",o);if(i?.latest)return i.latest;if(s)return null;let a=async()=>{try{let c=new AbortController,l=setTimeout(()=>c.abort(),Kr),u=`${Jr}/providers/${e}/${t}/versions`,p=await fetch(u,{signal:c.signal,headers:{"User-Agent":"vibgrate-cli"}});if(clearTimeout(l),!p.ok)return null;let g=(await p.json()).versions||[];if(g.length===0)return null;let y=[];for(let h of g)try{let m=new Nt.SemVer(h.version);m.prerelease.length===0&&y.push(m);}catch{}return y.length===0?null:(y.sort((h,m)=>(0,Nt.gt)(h.version,m.version)?-1:1),y[0].version)}catch(c){return c?.name==="AbortError",null}};return r?r.run(a):a()}async function kl(e,t,n,r,s,o=false){let i=`${e}/${t}/${n}`,a=W(r,"terraform",i);if(a?.latest)return a.latest;if(o)return null;let c=async()=>{try{let l=new AbortController,u=setTimeout(()=>l.abort(),Kr),p=`${Jr}/modules/${e}/${t}/${n}/versions`,d=await fetch(p,{signal:l.signal,headers:{"User-Agent":"vibgrate-cli"}});if(clearTimeout(u),!d.ok)return null;let y=(await d.json()).modules||[];if(y.length===0||!y[0].versions)return null;let h=y[0].versions,m=[];for(let E of h)try{let M=new Nt.SemVer(E.version);M.prerelease.length===0&&m.push(M);}catch{}return m.length===0?null:(m.sort((E,M)=>(0,Nt.gt)(E.version,M.version)?-1:1),m[0].version)}catch(l){return l?.name==="AbortError",null}};return s?s.run(c):c()}async function jl(e,t,n=false){let r=new Map,s=new a$2(wl),o=e.map(async i=>{let a=null,c;i.type==="provider"?(c=`${i.namespace}/${i.name}`,a=await Sl(i.namespace,i.name,t,s,n)):(c=`${i.namespace}/${i.name}/${i.provider}`,a=await kl(i.namespace,i.name,i.provider,t,s,n)),a&&r.set(c,a);});return await Promise.all(o),r}async function Pl(e,t){let n=t?await t.readTextFile(e):await o(e),r=[],s=[],o$1,i=n.match(/terraform\s*\{[^}]*required_version\s*=\s*"([^"]+)"/s);i&&(o$1=i[1]);let a=n.match(/required_providers\s*\{([^}]+)\}/s);if(a){let d=a[1],g=/(\w+)\s*=\s*\{([^}]+)\}/g,y;for(;(y=g.exec(d))!==null;){let h=y[2],m=h.match(/source\s*=\s*"([^"]+)"/);if(!m)continue;let E=m[1],M=h.match(/version\s*=\s*"([^"]+)"/),C=M?M[1]:void 0;r.push({source:E,version:C});}}let c=/provider\s+"(\w+)"\s*\{([^}]+)\}/g,l;for(;(l=c.exec(n))!==null;){let d=l[1],y=l[2].match(/version\s*=\s*"([^"]+)"/);y&&(r.find(m=>m.source.endsWith(`/${d}`))||r.push({source:`hashicorp/${d}`,version:y[1]}));}let u=/module\s+"[^"]+"\s*\{([^}]+)\}/g,p;for(;(p=u.exec(n))!==null;){let d=p[1],g=d.match(/source\s*=\s*"([^"]+)"/);if(!g)continue;let y=g[1];if(y.startsWith("./")||y.startsWith("../")||y.startsWith("git::"))continue;let h=d.match(/version\s*=\s*"([^"]+)"/),m=h?h[1]:void 0;s.push({source:y,version:m});}return {terraformVersion:o$1,providers:r,modules:s}}async function El(e,t){let n=new Map;try{let r=t?await t.readTextFile(e):await o(e),s=/provider\s+"[^"]*\/([^/"]+\/[^/"]+)"\s*\{([^}]+)\}/g,o$1;for(;(o$1=s.exec(r))!==null;){let i=o$1[1],c=o$1[2].match(/version\s*=\s*"([^"]+)"/);c&&n.set(i,c[1]);}}catch{}return n}function br(e,t){try{let n=e.replace(/^[~><=\s]+/,""),r=(0,Y.minVersion)((0,Y.validRange)(n)||n);if(!r)return "unknown";if(!(0,Y.gt)(t,r.version))return "current";let s=(0,Y.minVersion)(t);return s?s.major>r.major?"major-behind":"minor-behind":"unknown"}catch{return "unknown"}}async function Tl(e,t,n,r=false){let s=[];if(t){let m=await t.findFiles(e,E=>E.endsWith(".tf"));s.push(...m);}else {let m=["main.tf","variables.tf","outputs.tf","versions.tf","providers.tf"];for(let E of m){let M=`${e}/${E}`;await p(M)&&s.push(M);}}if(s.length===0)return null;let o,i=[],a=[];for(let m of s){let{terraformVersion:E,providers:M,modules:C}=await Pl(m,t);E&&!o&&(o=E),i.push(...M),a.push(...C);}let c=new Map;for(let m of i)c.has(m.source)||c.set(m.source,m.version);let l=new Map;for(let m of a)l.has(m.source)||l.set(m.source,m.version);let u=`${e}/.terraform.lock.hcl`,p$1=await El(u,t),d=[];for(let[m]of c){let[E,M]=m.split("/");d.push({type:"provider",namespace:E,name:M});}for(let[m]of l){let E=m.split("/");if(E.length===3){let[M,C,T]=E;d.push({type:"module",namespace:M,name:C,provider:T});}}let g=await jl(d,n,r),y=[],h={current:0,oneBehind:0,twoPlusBehind:0,unknown:0};for(let[m,E]of c){let M=p$1.get(m),C=M||E||"unknown",T=g.get(m),b=T&&C!=="unknown"?br(C,T):"unknown",v=null;if(T&&C!=="unknown")try{let S=(0,Y.minVersion)((0,Y.validRange)(C)||C),w=(0,Y.minVersion)((0,Y.validRange)(T)||T);S&&w&&(v=w.major-S.major);}catch{}y.push({package:`provider:${m}`,section:"dependencies",currentSpec:E||"unknown",resolvedVersion:M||null,latestStable:T||null,majorsBehind:v,drift:b}),b==="current"?h.current++:v===1?h.oneBehind++:v&&v>1?h.twoPlusBehind++:h.unknown++;}for(let[m,E]of l){let M=E||"unknown",C=g.get(m),T=C&&M!=="unknown"?br(M,C):"unknown",b=null;if(C&&M!=="unknown")try{let v=(0,Y.minVersion)((0,Y.validRange)(M)||M),S=(0,Y.minVersion)((0,Y.validRange)(C)||C);v&&S&&(b=S.major-v.major);}catch{}y.push({package:`module:${m}`,section:"dependencies",currentSpec:E||"unknown",resolvedVersion:null,latestStable:C||null,majorsBehind:b,drift:T}),T==="current"?h.current++:b===1?h.oneBehind++:b&&b>1?h.twoPlusBehind++:h.unknown++;}return {type:"terraform",path:F.relative(e.includes("/")?e.split("/").slice(0,-1).join("/"):".",e)||".",name:F.basename(e),runtime:o,frameworks:[],dependencies:y,dependencyAgeBuckets:h}}async function Ml(e,t,n,r,s=false){let o=n?await n.findFiles(e,c=>c.endsWith(".tf")):[],i=new Map;for(let c of o){let l=F.dirname(c);i.has(l)||i.set(l,[]),i.get(l).push(c);}let a=[];for(let[c]of i)try{let l=await Tl(c,n,t,s);l&&(l.path=F.relative(e,c)||".",a.push(l));}catch(l){console.error(`Error scanning Terraform project at ${c}:`,l);}return a}var vr=[{name:"go.mod",type:"go"},{name:"Cargo.toml",type:"rust"},{name:"composer.json",type:"php"},{name:"Package.swift",type:"swift"},{name:"pubspec.yaml",type:"dart"},{name:"build.gradle.kts",type:"kotlin"},{name:"build.sbt",type:"scala"},{name:"DESCRIPTION",type:"r"},{name:"Podfile",type:"objective-c"},{name:"mix.exs",type:"elixir"},{name:"cpanfile",type:"perl"},{name:"Project.toml",type:"julia"},{name:"deps.edn",type:"clojure"},{name:"build.gradle",type:"groovy"},{name:"tsconfig.json",type:"typescript"},{name:"Makefile",type:"c"},{name:"CMakeLists.txt",type:"cpp"},{name:"*.vbp",type:"visual-basic"}],Cl=[{extensions:[".m",".mm"],type:"objective-c"},{extensions:[".c",".h"],type:"c"},{extensions:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],type:"cpp"},{extensions:[".cob",".cbl",".cpy"],type:"cobol"},{extensions:[".f",".for",".f90",".f95",".f03",".f08"],type:"fortran"},{extensions:[".pas",".pp",".lpr"],type:"pascal"},{extensions:[".adb",".ads",".ada"],type:"ada"},{extensions:[".asm",".s",".s43",".s65"],type:"assembly"},{extensions:[".rpg",".rpgle",".sqlrpgle"],type:"rpg"}];function lt(e,t="unknown"){return {package:e,section:"dependencies",currentSpec:t,resolvedVersion:null,latestStable:null,majorsBehind:null,drift:"unknown"}}function Ct(e,t,n=1){let r=new Set;for(let s of e.split(/\r?\n/)){let o=s.match(t);o?.[n]&&r.add(o[n]);}return [...r]}function $l(e,t){return F.basename(e)||F.basename(t)}function xl(e){return /^\s*(CC|CFLAGS|LDFLAGS)\s*[:?+]?=/m.test(e)||/\b(gcc|clang)\b/.test(e)||/\.(c|o)\b/.test(e)}function Un(e,t,n,r,s,o=[]){let i=r||".",a=`${n}:${i}`;t.has(a)||(t.add(a),e.push({type:n,path:i,name:$l(i,s),frameworks:[],dependencies:o,dependencyAgeBuckets:{current:0,oneBehind:0,twoPlusBehind:0,unknown:o.length}}));}async function Al(e,t){let n$1=F.basename(e),r=async()=>t?t.readTextFile(e):o(e);if(n$1==="composer.json"){let o=t?await t.readJsonFile(e):await n(e);if(!o||typeof o!="object")return [];let i=new Set;for(let a of ["require","require-dev"]){let c=o[a];if(c&&typeof c=="object")for(let l of Object.keys(c))i.add(l);}return [...i].map(a=>lt(a))}let s=await r();return s?n$1==="go.mod"?Ct(s,/^\s*require\s+([^\s]+)\s+(.+)$/).map(o=>lt(o)):n$1==="Cargo.toml"?Ct(s,/^\s*([A-Za-z0-9_\-]+)\s*=\s*['"{]/).map(o=>lt(o)):n$1==="pubspec.yaml"?Ct(s,/^\s{2,}([A-Za-z0-9_\-]+):\s*.+$/).map(o=>lt(o)):n$1==="mix.exs"?Ct(s,/\{\s*:([a-zA-Z0-9_]+),/).map(o=>lt(o)):n$1==="cpanfile"?Ct(s,/^\s*requires\s+['"]([^'"]+)['"]/).map(o=>lt(o)):n$1==="build.sbt"?Ct(s,/"([A-Za-z0-9_.\-]+)"\s*%{1,2}\s*"([A-Za-z0-9_.\-]+)"/,2).map(o=>lt(o)):[]:[]}function Nl(e){let t=new Map;for(let n of e){if(!n.isFile)continue;let r=F.extname(n.name).toLowerCase();if(r)for(let s of Cl){if(!s.extensions.includes(r))continue;let o=F.dirname(n.relPath)||".";t.has(o)||t.set(o,new Set),t.get(o)?.add(s.type);}}return t}async function Ll(e,t){let n=t?await t.walkDir(e):[],r=n.filter(c=>c.isFile&&vr.some(l=>l.name===c.name||l.name.startsWith("*.")&&c.name.endsWith(l.name.slice(1)))),s=new Set(n.filter(c=>c.isFile&&c.name.endsWith(".sh")).map(c=>F.dirname(c.relPath)||".")),o$1=[],i=new Set;for(let c of r){let l=vr.find(d=>d.name===c.name||d.name.startsWith("*.")&&c.name.endsWith(d.name.slice(1)));if(!l)continue;if(c.name==="Makefile"){let d=t?await t.readTextFile(c.absPath):await o(c.absPath);if(!xl(d))continue}let u=F.dirname(c.relPath)||".",p=await Al(c.absPath,t);Un(o$1,i,l.type,u,e,p);}for(let c of s)Un(o$1,i,"shell",c,e);let a=Nl(n);for(let[c,l]of a)for(let u of l)Un(o$1,i,u,c,e);return o$1}var Il=10,Rl=1048576,Fl=10,Bl=30,Ol=5242880,Vl=25,Kn=10,Qn=3,jp=1;function wr(e,t,n,r){let s=0;return e.fileCount!==void 0&&e.fileCount>=1&&e.fileCount<t&&s++,e.sizeBytes!==void 0&&e.sizeBytes>0&&e.sizeBytes<n&&s++,e.dependencyCount!==void 0&&e.dependencyCount<r&&s++,s}function _l(e){return wr(e,Il,Rl,Fl)>=2?"micro":wr(e,Bl,Ol,Vl)>=2?"small":"standard"}function Dl(e){switch(e){case "micro":case "function":return "micro";case "small":return "small";default:return "standard"}}function Pp(e){switch(e){case "micro":return 1/Kn;case "small":return 1/Qn;default:return 1}}function Gl(e){let t=0,n=0,r=0;for(let o of e)switch(Dl(o.classification)){case "micro":t++;break;case "small":n++;break;default:r++;break}let s=r+n/Qn+t/Kn;return {microCount:t,smallCount:n,standardCount:r,totalScanned:t+n+r,microBillingRatio:Kn,smallBillingRatio:Qn,billableProjectsRaw:Math.round(s*100)/100,billableProjects:Math.floor(s)}}var Ul=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;baseUrl="https://api.nuget.org/v3-flatcontainer";get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"nuget",e);if(r){let s=(r.versions??[]).filter(a=>$e.valid(a)&&$e.prerelease(a)===null),i=[...s].sort($e.rcompare)[0]??null;return {latest:r.latest??i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`${this.baseUrl}/${e.toLowerCase()}/index.json`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let c=((await o.json()).versions??[]).filter(p=>$e.valid(p)&&$e.prerelease(p)===null),u=[...c].sort($e.rcompare)[0]??null;return {latest:u,stableVersions:c,latestStableOverall:u}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}};function dn(e){let t=e.replace(/^[vV]/,"").trim();if(/(?:a|b|rc|alpha|beta|dev|post)\d*/i.test(t))return null;let n=t.split(".");for(;n.length<3;)n.push("0");return t=n.slice(0,3).join("."),Jt.valid(t)}var ql=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"pypi",e);if(r){let s=[];for(let a of r.versions??[]){let c=dn(a);c&&s.push(c);}let i=[...s].sort(Jt.rcompare)[0]??null;return {latest:r.latest?dn(r.latest)??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`https://pypi.org/pypi/${encodeURIComponent(e)}/json`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let i=await o.json(),a=Object.keys(i.releases??{}),c=[];for(let g of a){let y=dn(g);y&&c.push(y);}let l=i.info?.version??null,u=l?dn(l):null,d=[...c].sort(Jt.rcompare)[0]??u??null;return {latest:u??d,stableVersions:c,latestStableOverall:d}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}};function qn(e){let t=e.trim();if(/(?:-SNAPSHOT|-alpha|-beta|-rc|-M\d|-CR\d)/i.test(t))return null;t=t.replace(/\.(?:RELEASE|Final|GA)$/i,"");let n=t.split(".");for(;n.length<3;)n.push("0");return t=n.slice(0,3).join("."),Kt.valid(t)}var Wl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e,t){let n=`${e}:${t}`,r=this.meta.get(n);if(r)return r;let s=this.sem.run(async()=>{let o=`${e}:${t}`,i=W(this.manifest,"maven",o);if(i){let a=[];for(let u of i.versions??[]){let p=qn(u);p&&a.push(p);}let l=[...a].sort(Kt.rcompare)[0]??null;return {latest:i.latest?qn(i.latest)??l:l,stableVersions:a,latestStableOverall:l}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let a=`https://search.maven.org/solrsearch/select?q=g:%22${encodeURIComponent(e)}%22+AND+a:%22${encodeURIComponent(t)}%22&core=gav&rows=100&wt=json`,c=await fetch(a,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!c.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let p=((await c.json()).response?.docs??[]).map(h=>h.v).filter(h=>typeof h=="string"),d=[];for(let h of p){let m=qn(h);m&&d.push(m);}let y=[...d].sort(Kt.rcompare)[0]??null;return {latest:y,stableVersions:d,latestStableOverall:y}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(n,s),s}};function Wn(e){let t=e.trim();if(/(?:\.pre|\.rc|\.beta|\.alpha|\.dev)/i.test(t))return null;let n=t.split(".");if(n.length<2)return null;for(;n.length<3;)n.push("0");let r=n.slice(0,3).join(".");return Qt.valid(r)}var zl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"rubygems",e);if(r){let s=[];for(let a of r.versions??[]){let c=Wn(a);c&&s.push(c);}let i=[...s].sort(Qt.rcompare)[0]??null;return {latest:r.latest?Wn(r.latest)??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`https://rubygems.org/api/v1/versions/${encodeURIComponent(e)}.json`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let i=await o.json();if(!Array.isArray(i))return {latest:null,stableVersions:[],latestStableOverall:null};let a=[];for(let u of i){if(u.prerelease)continue;let p=u.number;if(!p)continue;let d=Wn(p);d&&a.push(d);}let l=[...a].sort(Qt.rcompare)[0]??null;return {latest:l,stableVersions:a,latestStableOverall:l}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}},Hl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"swift",e);if(r){let s=[];for(let a of r.versions??[]){let c=Z.valid(Z.clean(a));c&&s.push(c);}let i=[...s].sort(Z.rcompare)[0]??null;return {latest:r.latest?Z.valid(Z.clean(r.latest))??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=e.match(/github\.com[/:]([^/]+\/[^/]+?)(\.git)?$/i);if(!s)return {latest:null,stableVersions:[],latestStableOverall:null};let o=s[1],i=`https://api.github.com/repos/${o}/releases`,a=await fetch(i,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/vnd.github+json","User-Agent":"vibgrate-cli"}});if(!a.ok)return this.fetchFromTags(o);let c=await a.json();if(!Array.isArray(c))return {latest:null,stableVersions:[],latestStableOverall:null};let l=[];for(let d of c){if(d.prerelease||d.draft)continue;let g=d.tag_name;if(!g)continue;let y=Z.valid(Z.clean(g));y&&l.push(y);}let p=[...l].sort(Z.rcompare)[0]??null;return {latest:p,stableVersions:l,latestStableOverall:p}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}async fetchFromTags(e){try{let t=`https://api.github.com/repos/${e}/tags`,n=await fetch(t,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/vnd.github+json","User-Agent":"vibgrate-cli"}});if(!n.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let r=await n.json();if(!Array.isArray(r))return {latest:null,stableVersions:[],latestStableOverall:null};let s=[];for(let a of r){let c=a.name;if(!c||/(?:alpha|beta|rc|pre|dev)/i.test(c))continue;let l=Z.valid(Z.clean(c));l&&s.push(l);}let i=[...s].sort(Z.rcompare)[0]??null;return {latest:i,stableVersions:s,latestStableOverall:i}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}}},Jl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"go",e);if(r){let s=[];for(let a of r.versions??[]){let c=ue.valid(ue.clean(a));c&&s.push(c);}let i=[...s].sort(ue.rcompare)[0]??null;return {latest:r.latest?ue.valid(ue.clean(r.latest))??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let o=`https://proxy.golang.org/${encodeURIComponent(e)}/@v/list`,i=await fetch(o,{signal:AbortSignal.timeout(1e4),headers:{Accept:"text/plain"}});if(!i.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let c=(await i.text()).split(`
60
- `).filter(Boolean),l=[];for(let d of c){if(/[+-](?:alpha|beta|rc|pre|dev)/i.test(d)||/v\d+\.\d+\.\d+-\d{14}-[a-f0-9]+/.test(d))continue;let g=ue.valid(ue.clean(d));g&&l.push(g);}let p=[...l].sort(ue.rcompare)[0]??null;return {latest:p,stableVersions:l,latestStableOverall:p}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}},Kl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"cargo",e);if(r){let s=[];for(let a of r.versions??[]){let c=pe.valid(pe.clean(a));c&&s.push(c);}let i=[...s].sort(pe.rcompare)[0]??null;return {latest:r.latest?pe.valid(pe.clean(r.latest))??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`https://crates.io/api/v1/crates/${encodeURIComponent(e)}`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json","User-Agent":"vibgrate-cli (https://github.com/vibgrate/vibgrate-cli)"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let i=await o.json();if(!i.versions)return {latest:null,stableVersions:[],latestStableOverall:null};let a=[];for(let u of i.versions){if(u.yanked||!u.num||/[+-](?:alpha|beta|rc|pre|dev)/i.test(u.num))continue;let p=pe.valid(pe.clean(u.num));p&&a.push(p);}let l=[...a].sort(pe.rcompare)[0]??null;return {latest:l,stableVersions:a,latestStableOverall:l}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}},Ql=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"composer",e);if(r){let s=[];for(let a of r.versions??[]){let c=de.valid(de.clean(a));c&&s.push(c);}let i=[...s].sort(de.rcompare)[0]??null;return {latest:r.latest?de.valid(de.clean(r.latest))??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`https://repo.packagist.org/p2/${encodeURIComponent(e)}.json`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let i=await o.json();if(!i.packages)return {latest:null,stableVersions:[],latestStableOverall:null};let a=i.packages[e];if(!a||!Array.isArray(a))return {latest:null,stableVersions:[],latestStableOverall:null};let c=[];for(let p of a){let d=p.version??p.version_normalized;if(!d||d==="dev-master"||d.startsWith("dev-")||/[+-](?:alpha|beta|rc|pre|dev)/i.test(d))continue;let g=de.valid(de.clean(d));g&&c.push(g);}let u=[...c].sort(de.rcompare)[0]??null;return {latest:u,stableVersions:c,latestStableOverall:u}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}},Yl=class{constructor(e,t,n=false){this.sem=e,this.manifest=t,this.offline=n;}meta=new Map;get(e){let t=this.meta.get(e);if(t)return t;let n=this.sem.run(async()=>{let r=W(this.manifest,"pub",e);if(r){let s=[];for(let a of r.versions??[]){let c=fe.valid(fe.clean(a));c&&s.push(c);}let i=[...s].sort(fe.rcompare)[0]??null;return {latest:r.latest?fe.valid(fe.clean(r.latest))??i:i,stableVersions:s,latestStableOverall:i}}if(this.offline)return {latest:null,stableVersions:[],latestStableOverall:null};try{let s=`https://pub.dev/api/packages/${encodeURIComponent(e)}`,o=await fetch(s,{signal:AbortSignal.timeout(1e4),headers:{Accept:"application/json"}});if(!o.ok)return {latest:null,stableVersions:[],latestStableOverall:null};let i=await o.json();if(!i.versions)return {latest:null,stableVersions:[],latestStableOverall:null};let a=[];for(let u of i.versions){if(!u.version||/[+-](?:alpha|beta|rc|pre|dev)/i.test(u.version))continue;let p=fe.valid(fe.clean(u.version));p&&a.push(p);}let l=[...a].sort(fe.rcompare)[0]??null;return {latest:l,stableVersions:a,latestStableOverall:l}}catch{return {latest:null,stableVersions:[],latestStableOverall:null}}});return this.meta.set(e,n),n}};async function Qr(e){try{return await Xl(e)}catch{return {type:"unknown"}}}async function Xl(e){let t=await Zl(e);if(!t)return {type:"unknown"};let n=F.join(t,"HEAD"),r;try{r=(await ge.readFile(n,"utf8")).trim();}catch{return {type:"unknown"}}let s,o;if(r.startsWith("ref: ")){let a=r.slice(5);o=a.startsWith("refs/heads/")?a.slice(11):a,s=await eu(t,a);}else /^[0-9a-f]{40}$/i.test(r)&&(s=r);let i=await tu(t);return {type:"git",sha:s??void 0,shortSha:s?s.slice(0,7):void 0,branch:o??void 0,remoteUrl:i}}async function Zl(e){let t=F.resolve(e),n=F.parse(t).root;for(;t!==n;){let r=F.join(t,".git");try{let s=await ge.stat(r);if(s.isDirectory())return r;if(s.isFile()){let o=(await ge.readFile(r,"utf8")).trim();if(o.startsWith("gitdir: "))return F.resolve(t,o.slice(8))}}catch{}t=F.dirname(t);}return null}async function eu(e,t){let n=F.join(e,t);try{let s=(await ge.readFile(n,"utf8")).trim();if(/^[0-9a-f]{40}$/i.test(s))return s}catch{}let r=F.join(e,"packed-refs");try{let s=await ge.readFile(r,"utf8");for(let o of s.split(`
61
- `)){if(o.startsWith("#")||o.startsWith("^"))continue;let i=o.trim().split(" ");if(i.length>=2&&i[1]===t)return i[0]}}catch{}}async function tu(e){let t=await nu(e);if(t)try{let r=(await ge.readFile(t,"utf8")).match(/\[remote\s+"origin"\]([\s\S]*?)(?=\n\[|$)/);return r?r[1]?.match(/\n\s*url\s*=\s*(.+)\s*/)?.[1]?.trim():void 0}catch{return}}async function nu(e){let t=F.join(e,"config");try{if((await ge.stat(t)).isFile())return t}catch{}let n=F.join(e,"commondir");try{let r=(await ge.readFile(n,"utf8")).trim();if(!r)return;let s=F.resolve(e,r),o=F.join(s,"config");if((await ge.stat(o)).isFile())return o}catch{return}}function je(e){return e.replace(/[^a-zA-Z0-9_]/g,"_")}function $t(e){return e.replace(/"/g,'\\"')}function xt(e){return e===void 0||Number.isNaN(e)?"scoreUnknown":e>=80?"scoreHigh":e>=50?"scoreModerate":"scoreLow"}function zt(e){let t=e.drift?.score;return typeof t=="number"?`${e.name} (${t})`:e.name}function ns(){return ["classDef scoreHigh fill:#1e293b,stroke:#10b981,color:#f1f5f9,stroke-width:2px","classDef scoreModerate fill:#1e293b,stroke:#f59e0b,color:#f1f5f9,stroke-width:2px","classDef scoreLow fill:#1e293b,stroke:#ef4444,color:#f1f5f9,stroke-width:2px","classDef scoreUnknown fill:#1e293b,stroke:#64748b,color:#94a3b8,stroke-width:2px"]}function su(e){let t=["flowchart LR"],n=new Map(e.map(i=>[i.path,i])),r=[],s=new Set;for(let i of e){let a=je(i.projectId||i.path||i.name);for(let c of i.projectReferences??[]){let l=n.get(c.path);if(!l)continue;let u=je(l.projectId||l.path||l.name);r.push(`${a} --> ${u}`),s.add(a),s.add(u);}}let o=s.size===0;for(let i of e){let a=je(i.projectId||i.path||i.name);!o&&!s.has(a)||(t.push(`${a}["${$t(zt(i))}"]`),t.push(`class ${a} ${xt(i.drift?.score)}`));}return t.push(...r),t.push(...ns()),{mermaid:t.join(`
62
- `)}}function ru(e,t){let n=["flowchart LR"],r=new Map(t.map(a=>[a.path,a])),s=t.filter(a=>a.projectReferences?.some(c=>c.path===e.path)),o=(e.projectReferences??[]).map(a=>r.get(a.path)).filter(a=>!!a),i=je(e.projectId||e.path||e.name);n.push(`${i}["${$t(zt(e))}"]`),n.push(`class ${i} ${xt(e.drift?.score)}`);for(let a of s){let c=je(a.projectId||a.path||a.name);n.push(`${c}["${$t(zt(a))}"]`),n.push(`class ${c} ${xt(a.drift?.score)}`),n.push(`${c} --> ${i}`);}for(let a of o){let c=je(a.projectId||a.path||a.name);n.push(`${c}["${$t(zt(a))}"]`),n.push(`class ${c} ${xt(a.drift?.score)}`),n.push(`${i} --> ${c}`);}return n.push(...ns()),{mermaid:n.join(`
63
- `)}}function ou(e,t){let n=["flowchart TB"],r=je(e.solutionId||e.path||e.name),s=e.drift?.score,o=typeof s=="number"?` (${s})`:" (n/a)";n.push(`${r}["${$t(`${e.name}${o}`)}"]`),n.push(`class ${r} ${xt(s)}`);let i=new Map(t.map(a=>[a.path,a]));for(let a of e.projectPaths){let c=i.get(a);if(!c)continue;let l=je(c.projectId||c.path||c.name);n.push(`${l}["${$t(zt(c))}"]`),n.push(`class ${l} ${xt(c.drift?.score)}`),n.push(`${r} --> ${l}`);for(let u of c.projectReferences??[]){let p=i.get(u.path);if(!p)continue;let d=je(p.projectId||p.path||p.name);n.push(`${l} --> ${d}`);}}return n.push(...ns()),{mermaid:n.join(`
64
- `)}}var au=createRequire(import.meta.url),cu=au("../package.json");cu.version;var lu="https://registry.npmjs.org/@vibgrate%2fcli/latest",Zr=F.join(Ht.homedir(),".vibgrate"),uu=F.join(Zr,"update-check.json");async function Cp(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),1e4);t.unref?.();let n;try{n=await fetch(lu,{headers:{Accept:"application/json"},signal:e.signal});}finally{clearTimeout(t);}if(!n.ok)return null;let s=(await n.json()).version;return !s||!Xr.default.valid(s)?null:(await pu({latest:s,checkedAt:Date.now()}),s)}catch{return null}}async function pu(e){try{await ge.mkdir(Zr,{recursive:!0}),await ge.writeFile(uu,JSON.stringify(e),"utf-8");}catch{}}var du=[{category:"pricing",pattern:/price|pricing|billing|subscri|trial|credit|plan|tier|upgrade|premium|pro|enterprise/i},{category:"auth",pattern:/sign[- ]?in|sign[- ]?up|log[- ]?in|log[- ]?out|auth|sso|oauth|password|register|invite|onboard/i},{category:"dashboard",pattern:/dashboard|overview|home|main|summary|stats/i},{category:"settings",pattern:/setting|config|preference|option|profile|account/i},{category:"users",pattern:/user|member|team|role|permission|access|admin|owner/i},{category:"integrations",pattern:/integrat|connect|webhook|api[- ]?key|sync|import|export/i},{category:"reports",pattern:/report|analy|metric|chart|graph|insight|track/i},{category:"workflows",pattern:/workflow|automat|schedule|trigger|action|job|task|pipeline/i},{category:"projects",pattern:/project|workspace|organization|folder|repo/i},{category:"navigation",pattern:/menu|nav|sidebar|header|footer|breadcrumb/i}];function fu(e,t=3){let n=e.topEvidence,r=n.filter(u=>u.kind==="dependency").map(u=>u.value).slice(0,10),s=yu(n.filter(u=>u.kind==="route").map(u=>u.value)).slice(0,15),o=n.filter(u=>u.kind!=="dependency"&&u.kind!=="route"&&u.kind!=="feature_flag"),i=new Map,a={};for(let u of o){let p=mu(u.value);i.has(p)||i.set(p,new Set);let d=hu(u.value);d.length>=3&&i.get(p).add(d);}let c=[];for(let[u,p]of i){let d=gu([...p]);a[u]=d.length;for(let g of d.slice(0,t))c.push({kind:"text",value:g,category:u});}let l=n.filter(u=>u.kind==="feature_flag");return l.length>0&&(a.feature_flags=l.length,c.push({kind:"feature_flag",value:"feature flags detected",category:"feature_flags"})),{samples:c,categoryCounts:a,originalCount:n.length,dependencies:r,routes:s,detectedFrameworks:e.detectedFrameworks}}function mu(e){for(let{category:t,pattern:n}of du)if(n.test(e))return t;return "general"}function hu(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g," ").replace(/\s+/g," ").trim().slice(0,60)}function gu(e){let t=e.sort((r,s)=>s.length-r.length),n=[];for(let r of t)n.some(o=>{let i=r.slice(0,6);return o.startsWith(i)||o.includes(r)||r.includes(o)})||n.push(r);return n}function yu(e){let t=new Set,n=[];for(let r of e){let s=r.replace(/:[a-z_]+/gi,":param").replace(/\[\[*\.*\.*[a-z_]+\]*\]/gi,":param").replace(/\/+$/,"").toLowerCase();t.has(s)||(t.add(s),n.push(r));}return n}var vu=promisify(eo.gzip),le=50;function Dt(e){let t=e.match(/^(.+?)\s*\(/);return t?t[1].trim():e.trim()}function wu(e){return {databaseTechnologies:e.databaseTechnologies.slice(0,10),connectionStrings:[],connectionPoolSettings:e.connectionPoolSettings.slice(0,le),replicationSettings:e.replicationSettings.slice(0,20),readReplicaSettings:e.readReplicaSettings.slice(0,20),failoverSettings:e.failoverSettings.slice(0,20),collationAndEncoding:e.collationAndEncoding.slice(0,20),queryTimeoutDefaults:e.queryTimeoutDefaults.slice(0,20),manualIndexes:e.manualIndexes.map(Dt).slice(0,le),tables:e.tables.map(Dt).slice(0,le),views:e.views.map(Dt).slice(0,le),storedProcedures:e.storedProcedures.map(Dt).slice(0,le),triggers:e.triggers.map(Dt).slice(0,le),rowLevelSecurityPolicies:e.rowLevelSecurityPolicies.slice(0,20),otherServices:e.otherServices.slice(0,20)}}function Su(e){let t=new Set;return {integrations:e.integrations.filter(r=>{let s=r.provider.split(":")[0];return t.has(s)?false:(t.add(s),true)}).slice(0,le).map(r=>({provider:r.provider,endpoint:"",version:r.version,parameters:[],configOptions:[],authHints:[],files:[]})),openApiSpecifications:e.openApiSpecifications.slice(0,10),webhookUrls:e.webhookUrls.slice(0,20),callbackEndpoints:e.callbackEndpoints.slice(0,20),apiVersionPins:e.apiVersionPins.slice(0,20),tokenExpirationPolicies:e.tokenExpirationPolicies.slice(0,20),rateLimitOverrides:e.rateLimitOverrides.slice(0,20),customHeaders:e.customHeaders.slice(0,20),corsPolicies:e.corsPolicies.slice(0,20),oauthScopes:e.oauthScopes.slice(0,20),apiTokens:[]}}function ku(e){return {faviconFiles:e.faviconFiles.slice(0,1),productLogos:[]}}function ju(e){let t={...e};if(t.extended){let n={...t.extended};if(n.dataStores&&(n.dataStores=wu(n.dataStores)),n.apiSurface&&(n.apiSurface=Su(n.apiSurface)),n.assetBranding&&(n.assetBranding=ku(n.assetBranding)),n.uiPurpose){let r=fu(n.uiPurpose);n.uiPurpose={enabled:n.uiPurpose.enabled,detectedFrameworks:r.detectedFrameworks,evidenceCount:r.originalCount,capped:n.uiPurpose.capped,topEvidence:[],unknownSignals:[],compacted:r};}if(n.runtimeConfiguration&&(n.runtimeConfiguration={...n.runtimeConfiguration,environmentVariables:n.runtimeConfiguration.environmentVariables.slice(0,100),hiddenConfigFiles:n.runtimeConfiguration.hiddenConfigFiles.slice(0,le),startupArguments:n.runtimeConfiguration.startupArguments.slice(0,100)}),n.operationalResilience){let r=n.operationalResilience;n.operationalResilience={implicitTimeouts:r.implicitTimeouts.slice(0,30),defaultPaginationSize:r.defaultPaginationSize.slice(0,30),implicitRetryLogic:r.implicitRetryLogic.slice(0,30),defaultLocale:r.defaultLocale.slice(0,20),defaultCurrency:r.defaultCurrency.slice(0,20),implicitTimezone:r.implicitTimezone.slice(0,20),defaultCharacterEncoding:r.defaultCharacterEncoding.slice(0,20),sessionStores:r.sessionStores.slice(0,20),distributedLocks:r.distributedLocks.slice(0,20),jobSchedulers:r.jobSchedulers.slice(0,30),idempotencyKeys:r.idempotencyKeys.slice(0,20),rateLimitingCounters:r.rateLimitingCounters.slice(0,20),circuitBreakerState:r.circuitBreakerState.slice(0,20),abTestToggles:r.abTestToggles.slice(0,20),regionalEnablementRules:r.regionalEnablementRules.slice(0,20),betaAccessGroups:r.betaAccessGroups.slice(0,20),licensingEnforcementLogic:r.licensingEnforcementLogic.slice(0,20),killSwitches:r.killSwitches.slice(0,20),connectorRetryLogic:r.connectorRetryLogic.slice(0,20),apiPollingIntervals:r.apiPollingIntervals.slice(0,20),fieldMappings:r.fieldMappings.slice(0,20),schemaRegistryRules:r.schemaRegistryRules.slice(0,20),deadLetterQueueBehavior:r.deadLetterQueueBehavior.slice(0,20),dataMaskingRules:r.dataMaskingRules.slice(0,20),transformationLogic:r.transformationLogic.slice(0,20),timezoneHandling:r.timezoneHandling.slice(0,20),encryptionSettings:r.encryptionSettings.slice(0,30),hardcodedSecretSignals:r.hardcodedSecretSignals.slice(0,20)};}n.dependencyGraph&&(n.dependencyGraph={...n.dependencyGraph,phantomDependencies:n.dependencyGraph.phantomDependencies.slice(0,le),phantomDependencyDetails:n.dependencyGraph.phantomDependencyDetails?.slice(0,le),duplicatedPackages:n.dependencyGraph.duplicatedPackages.slice(0,le)}),t.extended=n;}return t}async function Pu(e){let t=JSON.stringify(e);return vu(t,{level:9})}async function xp(e){let t=ju(e);return {body:await Pu(t),contentEncoding:"gzip"}}function Eu(e){let n=e.replace(/[\x00-\x1F\x7F\uFEFF\u200B-\u200D\u2060]/g,"").trim().match(/^vibgrate\+(https?):?\/\/([^:]+):([^@]+)@([^/]+)\/(.+)$/);return n?{scheme:n[1],keyId:n[2],secret:n[3],host:n[4],workspaceId:n[5]}:null}async function Ap(e,t,n){let r=t,s=new URL(`${e.scheme}://${r}/v1/ingest/scan/preflight`);n?.repositoryName&&s.searchParams.set("repository",n.repositoryName),n?.vcsSha&&s.searchParams.set("vcsSha",n.vcsSha);let o=String(Date.now()),i=await fetch(s.toString(),{method:"GET",headers:{"X-Vibgrate-Timestamp":o,Authorization:`VibgrateDSN ${e.keyId}:${e.secret}`}}),a=await i.json();if(!i.ok&&a.status!=="error")throw new Error(`HTTP ${i.status}: ${JSON.stringify(a)}`);return a}async function Tu(e){let t=F.join(e,"package.json"),n$1=F.basename(e);if(await p(t))try{let r=await n(t);typeof r.name=="string"&&r.name.trim()&&(n$1=r.name.trim());}catch{}return n$1}var Mu=new Set(["node_modules",".git",".vibgrate",".wrangler",".next","dist","build","out",".turbo",".cache","coverage","bin","obj",".vs","TestResults",".nuxt",".output",".svelte-kit"]);async function Np(e,t){let n=t??await Qr(e);if(n.type==="git"&&n.sha)return {vcsSha:n.sha,method:"git_sha"};let r=await Cu(e);return r?{treeHash:r,method:"tree_metadata"}:{method:"unknown"}}async function Cu(e,t){let n=t?.maxFilesPerDirectory??500,r=[];async function s(i,a){let c;try{c=await ge.readdir(i,{withFileTypes:!0});}catch{return}let l=c.filter(u=>u.isFile());if(l.length>n){r.push(`${a||"."}|dir_overflow|${l.length}`);return}for(let u of c){if(u.isDirectory()){if(Mu.has(u.name))continue;let g=a?`${a}/${u.name}`:u.name;await s(F.join(i,u.name),g);continue}if(!u.isFile())continue;let p=a?`${a}/${u.name}`:u.name,d=F.join(i,u.name);try{let g=await ge.stat(d);r.push(`${p}|${g.size}|${g.mtimeMs}`);}catch{}}}if(await s(F.resolve(e),""),r.length===0)return;r.sort();let o=Xn.createHash("sha256");for(let i of r)o.update(i),o.update(`
65
- `);return o.digest("hex")}var Nu="https://api.vibgrate.com",Lu=1e3*60*60*24,Iu=5e3;function zn(e){return !!e&&typeof e=="object"&&typeof e.generatedAt=="string"&&typeof e.products=="object"&&e.products!==null}var Ru=class{apiBase;offline;manifest;cacheDir;fetchImpl;resolution=null;constructor(e={}){this.apiBase=(e.apiBase??process.env.VIBGRATE_API_BASE??Nu).replace(/\/+$/,""),this.offline=e.offline??false,this.manifest=e.manifest,this.cacheDir=e.cacheDir??F.join(Ht.homedir(),".vibgrate","cache"),this.fetchImpl=e.fetchImpl??globalThis.fetch;}resolve(){return this.resolution||(this.resolution=this.doResolve()),this.resolution}get cacheFile(){return F.join(this.cacheDir,"runtimes.json")}async doResolve(){let e;if(!this.offline){let n=await this.readCache();if(n){if(Date.now()-Date.parse(n.fetchedAt)<Lu)return {catalog:n.catalog,source:"cache"};e=n.catalog;}let r=await this.fetchFromApi();if(r)return await this.writeCache(r),{catalog:r,source:"api"}}let t=this.manifest?.runtimes;return zn(t)?{catalog:t,source:"manifest"}:e&&Date.parse(e.generatedAt)>Date.parse(ke.generatedAt)?{catalog:e,source:"cache"}:{catalog:ke,source:"bundled"}}async fetchFromApi(){if(!this.fetchImpl)return null;let e=new AbortController,t=setTimeout(()=>e.abort(),Iu);try{let n=await this.fetchImpl(`${this.apiBase}/v1/reference/runtimes`,{signal:e.signal,headers:{Accept:"application/json"}});if(!n.ok)return null;let r=await n.json();return zn(r)?r:null}catch{return null}finally{clearTimeout(t);}}async readCache(){try{let e=await readFile(this.cacheFile,"utf8"),t=JSON.parse(e);if(t&&typeof t.fetchedAt=="string"&&zn(t.catalog))return t}catch{}return null}async writeCache(e){try{await mkdir(this.cacheDir,{recursive:!0});let t={fetchedAt:new Date().toISOString(),catalog:e};await writeFile(this.cacheFile,JSON.stringify(t),"utf8");}catch{}}},_u=class so{constructor(t){this.outPath=t;}events=[];start=Date.now();lastThrottled=new Map;flushed=false;static fromEnv(){let t=process.env.VIBGRATE_TRACE_EVENTS;return t?new so(t):null}record(t,n={}){this.flushed||this.events.push({t:Date.now()-this.start,op:t,...n});}recordThrottled(t,n,r={},s=120){if(this.flushed)return;let o=Date.now(),i=this.lastThrottled.get(t)??0;o-i<s||(this.lastThrottled.set(t,o),this.record(n,r));}flush(t){if(this.flushed)return;this.flushed=true;let n={traceVersion:1,cliVersion:t.cliVersion,workspace:basename(t.rootDir)||t.rootDir,recordedAt:new Date().toISOString(),durationMs:Date.now()-this.start,events:this.events};try{mkdirSync(dirname(this.outPath),{recursive:!0}),writeFileSync(this.outPath,JSON.stringify(n));}catch{}}},fn=[j.cyan(" \u256D\u2500\u2500\u2500\u256E")+j.greenBright("\u279C"),j.cyan(" \u256D\u2524")+j.greenBright("\u25C9 \u25C9")+j.cyan("\u251C\u256E"),j.cyan(" \u2570\u2524")+j.dim("\u2500\u2500\u2500")+j.cyan("\u251C\u256F"),j.cyan(" \u2570\u2500\u2500\u2500\u256F")];function Sr(e){return [j.bold.white(" V I B G R A T E"),j.dim(" Drift Intelligence Engine")+j.dim(` v${e}`)]}var kr=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Du=class{steps=[];stats={projects:0,dependencies:0,frameworks:0,findings:{warnings:0,errors:0,notes:0}};spinnerFrame=0;timer=null;lastRowCount=0;startTime=Date.now();isTTY;useLiveUpdates;rootDir="";lastFrame="";cursorHidden=false;estimatedTotalMs=null;stepEstimates=new Map;stepStartTimes=new Map;stepTimings=[];lastLoggedStates=new Map;version;trace;constructor(e,t="unknown"){if(this.version=t,this.trace=_u.fromEnv(),this.isTTY=process.stderr.isTTY??false,this.useLiveUpdates=this.isTTY&&process.env.VIBGRATE_PROGRESS_MODE!=="plain",this.rootDir=e,this.isTTY){let n=()=>{this.cursorHidden&&(process.stderr.write("\x1B[?25h"),this.cursorHidden=false);};process.on("exit",n),process.on("SIGINT",()=>{n(),process.exit(130);}),process.on("SIGTERM",()=>{n(),process.exit(143);});}}setEstimatedTotal(e){this.estimatedTotalMs=e,this.trace?.record("setEstimatedTotal",{estimatedMs:e});}setStepEstimates(e){this.stepEstimates=e;}getStepTimings(){return [...this.stepTimings]}setSteps(e){if(this.steps=e.map(t=>({...t,status:"pending",weight:t.weight??1})),this.trace?.record("setSteps",{steps:e.map(t=>({id:t.id,label:t.label,weight:t.weight??1}))}),this.isTTY){let t=["",` ${fn[0]} ${Sr(this.version)[0]}`,` ${fn[1]} ${Sr(this.version)[1]}`,` ${fn[2]}`,` ${fn[3]} ${j.dim(this.rootDir)}`,""].join(`
66
- `)+`
67
- `;process.stderr.write(t),this.useLiveUpdates&&this.startSpinner();}this.render();}insertStepBefore(e,t){let n=this.steps.findIndex(s=>s.id===e),r={...t,status:"pending",weight:t.weight??1};n>=0?this.steps.splice(n,0,r):this.steps.push(r),this.trace?.record("insertStepBefore",{beforeId:e,step:{id:t.id,label:t.label,weight:t.weight??1}});}startStep(e,t){let n=this.steps.find(r=>r.id===e);n&&(n.status="active",n.detail=void 0,n.count=void 0,n.subProgress=0,n.subTotal=t),this.stepStartTimes.set(e,Date.now()),this.trace?.record("startStep",{id:e,subTotal:t}),this.render();}completeStep(e,t,n){let r=this.steps.find(o=>o.id===e);r&&(r.status="done",r.detail=t,r.count=n);let s=this.stepStartTimes.get(e);s&&this.stepTimings.push({id:e,durationMs:Date.now()-s}),this.trace?.record("completeStep",{id:e,detail:t,count:n}),this.render();}skipStep(e){let t=this.steps.find(n=>n.id===e);t&&(t.status="skipped",t.detail="disabled"),this.trace?.record("skipStep",{id:e}),this.render();}updateStepProgress(e,t,n,r){let s=this.steps.find(o=>o.id===e);s&&(s.subProgress=t,n!==void 0&&(s.subTotal=n),r!==void 0&&(s.subLabel=r)),this.trace?.recordThrottled(`sub:${e}`,"updateStepProgress",{id:e,current:t,total:n,label:r}),this.render();}updateStats(e){Object.assign(this.stats,e),this.traceStats(true),this.render();}addProjects(e){this.stats.projects+=e,this.traceStats(),this.render();}addDependencies(e){this.stats.dependencies+=e,this.traceStats(),this.render();}addFrameworks(e){this.stats.frameworks+=e,this.traceStats(),this.render();}addFindings(e,t,n){this.stats.findings.warnings+=e,this.stats.findings.errors+=t,this.stats.findings.notes+=n,this.traceStats(),this.render();}traceStats(e=false){if(!this.trace)return;let t={stats:{...this.stats,findings:{...this.stats.findings},treeSummary:this.stats.treeSummary?{...this.stats.treeSummary}:void 0}};e?this.trace.record("stats",t):this.trace.recordThrottled("stats","stats",t);}finish(){if(this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY){let n="";this.lastRowCount>0&&(n+=`\x1B[${this.lastRowCount}A`,n+="\x1B[J"),n+="\x1B[?25h",n&&process.stderr.write(n),this.cursorHidden=false,this.lastRowCount=0;}let e=this.formatElapsed(Date.now()-this.startTime),t=this.steps.filter(n=>n.status==="done").length;process.stderr.write(j.dim(` \u2714 ${t} scanners completed in ${e}
68
-
69
- `)),this.trace?.record("finish",{doneCount:t,elapsedMs:Date.now()-this.startTime,summary:`${t} scanners completed in ${e}`}),this.trace?.flush({cliVersion:this.version,rootDir:this.rootDir}),this.isTTY&&process.platform==="win32"&&process.stdout.write("\x1B[0G\x1B[K");}startSpinner(){this.cursorHidden||(process.stderr.write("\x1B[?25l"),this.cursorHidden=true),this.timer=setInterval(()=>{this.spinnerFrame=(this.spinnerFrame+1)%kr.length,this.render();},120);}clearLines(){}render(){if(!this.useLiveUpdates){this.renderCI();return}let e=[];for(let y of this.steps)e.push(this.renderStep(y));e.push("");let t=this.steps.reduce((y,h)=>y+(h.weight??1),0),n=0;for(let y of this.steps){let h=y.weight??1;if(y.status==="done"||y.status==="skipped")n+=h;else if(y.status==="active"&&y.subTotal&&y.subTotal>0&&y.subProgress!==void 0)n+=h*Math.min(y.subProgress/y.subTotal,.99);else if(y.status==="active"){let m=this.stepStartTimes.get(y.id),E=this.stepEstimates.get(y.id);if(m&&E&&E>0){let M=Date.now()-m;n+=h*Math.min(M/E,.95);}}}let r=t>0?Math.min(Math.round(n/t*100),99):0,s=30,o=Math.round(n/Math.max(t,1)*s),i=j.greenBright("\u2501".repeat(Math.min(o,s)))+j.dim("\u254C".repeat(Math.max(s-o,0))),a=Date.now()-this.startTime,c=this.formatElapsed(a),l=this.computeEtaString(a,n,t),u=this.stats.treeSummary?j.dim(` \xB7 ${this.stats.treeSummary.totalFiles.toLocaleString()} files \xB7 ${this.stats.treeSummary.totalDirs.toLocaleString()} dirs`):"";e.push(` ${i} ${j.bold.white(`${r}%`)} ${j.dim(c)}${l}${u}`),e.push(""),e.push(this.renderStats()),e.push("");let p=e.join(`
70
- `)+`
71
- `,d=this.countRenderedRows(e);if(p===this.lastFrame&&this.lastRowCount===d)return;this.lastFrame=p;let g="";this.lastRowCount>0&&(g+=`\x1B[${this.lastRowCount}A`,g+="\x1B[J"),g+=p,process.stderr.write(g),this.lastRowCount=d;}countRenderedRows(e){let t=Math.max(process.stderr.columns??80,20);return e.reduce((n,r)=>n+this.countWrappedRows(r,t),0)}countWrappedRows(e,t){let n=Math.max(this.getDisplayWidth(e),1);return Math.max(1,Math.ceil(n/t))}getDisplayWidth(e){let t=this.stripAnsi(e).replace(/\r/g,""),n=0;for(let r of t){let s=r.codePointAt(0);s!==void 0&&(s>=0&&s<32||s>=127&&s<160||(n+=this.isWideCodePoint(s)?2:1));}return n}stripAnsi(e){return e.replace(/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07\x1b]*(?:\x07|\x1b\\))/g,"")}isWideCodePoint(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}renderStep(e){let t=kr[this.spinnerFrame],n,r,s="";switch(e.status){case "done":n=j.green("\u2714"),r=j.white(e.label);break;case "active":if(n=j.cyan(t),r=j.bold.white(e.label),e.subTotal&&e.subTotal>0&&e.subProgress!==void 0&&e.subProgress>0&&(s=j.dim(` \xB7 ${e.subProgress.toLocaleString()} / ${e.subTotal.toLocaleString()}`)),e.subLabel){let i=e.subLabel.length>50?"\u2026"+e.subLabel.slice(-49):e.subLabel;s+=j.dim(` ${i}`);}break;case "skipped":n=j.dim("\u25CC"),r=j.dim.strikethrough(e.label);break;default:n=j.dim("\u25CB"),r=j.dim(e.label);break}return e.detail&&(s=j.dim(` \xB7 ${e.detail}`)),e.count!==void 0&&e.count>0&&(s+=j.cyan(` (${e.count})`)),` ${n} ${r}${s}`}renderStats(){let e=this.stats.projects,t=this.stats.dependencies,n=this.stats.frameworks,r=this.stats.findings.warnings,s=this.stats.findings.errors,o=this.stats.findings.notes,i=[j.bold.white(` ${e}`)+j.dim(` project${e!==1?"s":""}`),j.white(`${t}`)+j.dim(` dep${t!==1?"s":""}`),j.white(`${n}`)+j.dim(` framework${n!==1?"s":""}`)],a=[];return s>0&&a.push(j.red(`${s} \u2716`)),r>0&&a.push(j.yellow(`${r} \u26A0`)),o>0&&a.push(j.blue(`${o} \u2139`)),a.length>0&&i.push(a.join(j.dim(" \xB7 "))),` ${j.dim("\u2503")} ${i.join(j.dim(" \u2502 "))}`}renderCI(){for(let e of this.steps){let t=e.status==="done"?[e.status,e.detail??"",e.count?.toString()??""].join("|"):e.status;if(this.lastLoggedStates.get(e.id)!==t){if(this.lastLoggedStates.set(e.id,t),e.status==="active"){process.stderr.write(` \u25C9 ${e.label}...
72
- `);continue}if(e.status==="done"){let n=this.formatLoggedStepDetail(e);process.stderr.write(` \u2714 ${e.label}${n}
73
- `);continue}if(e.status==="skipped"){let n=e.detail?` \xB7 ${e.detail}`:"";process.stderr.write(` \u25CC ${e.label}${n}
74
- `);}}}}formatLoggedStepDetail(e){let t="";return e.detail&&(t+=` \xB7 ${e.detail}`),e.count!==void 0&&e.count>0&&(t+=` (${e.count})`),t}formatElapsed(e){let t=e/1e3;if(t<90)return `${t.toFixed(1)}s`;let n=Math.floor(t/60),r=Math.floor(t%60);return `${n}m ${r.toString().padStart(2,"0")}s`}computeEtaString(e,t,n){if(n===0||e<2e3)return "";let r=t/n;if(r<.03){if(this.estimatedTotalMs!==null&&this.estimatedTotalMs>0){let i=Math.max(0,this.estimatedTotalMs-e);if(i>1e3)return j.dim(` \xB7 ~${this.formatElapsed(i)} left`)}return ""}let s=e/r*(1-r),o;if(this.estimatedTotalMs!==null&&this.estimatedTotalMs>0){let i=Math.max(0,this.estimatedTotalMs-e),a=Math.max(.1,1-r),c=i*a+s*(1-a);o=Math.min(i,c);}else o=s;return o<1500?"":j.dim(` \xB7 ~${this.formatElapsed(o)} left`)}},ro="scan_history.json",jr=10;async function oo(e){let t=F.join(e,".vibgrate",ro);try{let n=await ge.readFile(t,"utf8"),r=JSON.parse(n);return r.version===1&&Array.isArray(r.records)?r:null}catch{return null}}async function Gu(e,t){let n=F.join(e,".vibgrate"),r=F.join(n,ro),s,o=await oo(e);o?(s=o,s.records.push(t),s.records.length>jr&&(s.records=s.records.slice(-jr))):s={version:1,records:[t]};try{await ge.mkdir(n,{recursive:!0}),await ge.writeFile(r,JSON.stringify(s,null,2)+`
75
- `,"utf8");}catch{}}function Uu(e,t){if(!e||e.records.length===0)return null;let n=e.records.filter(s=>{if(s.totalFiles===0||t===0)return false;let o=t/s.totalFiles;return o>=.33&&o<=3});if(n.length>0){let s=0,o=0;for(let i=0;i<n.length;i++){let a=n[i],c=i+1,l=t/a.totalFiles;s+=a.totalDurationMs*l*c,o+=c;}return Math.round(s/o)}let r=e.records[e.records.length-1];if(r.totalFiles>0&&t>0){let s=t/r.totalFiles;return Math.round(r.totalDurationMs*s)}return r.totalDurationMs}function qu(e,t){let n=new Map;if(!e||e.records.length===0)return n;let r=null;for(let o=e.records.length-1;o>=0;o--){let i=e.records[o];if(i.steps.length>0){r=i;break}}if(!r)return n;let s=r.totalFiles>0&&t>0?t/r.totalFiles:1;for(let o of r.steps)n.set(o.id,Math.round(o.durationMs*s));return n}async function Wu(e,t){let n=await t.findSolutionFiles(e),r=[];for(let s of n)try{let o=await t.readTextFile(s),i=F.dirname(s),c=[F.basename(e),F.relative(e,s).replace(/\\/g,"/")].join("/"),l=new Set,u=/Project\("[^"]*"\)\s*=\s*"([^"]*)",\s*"([^"]+\.(?:cs|vb)proj)"/g,p;for(;(p=u.exec(o))!==null;){let g=p[2],y=F.resolve(i,g.replace(/\\/g,"/"));l.add(F.relative(e,y).replace(/\\/g,"/"));}let d=F.basename(s,F.extname(s));r.push({path:c,name:d,type:"dotnet-sln",projectPaths:[...l]});}catch{}return r}async function Op(e$1,t,n$1){let r$1=t.vibgrateVersion??"unknown",s$1=Date.now(),o=await Ai(e$1),i=new a$2(t.concurrency),a=t.packageManifest?await pa(t.packageManifest):void 0,c=t.offline===true,l=t.maxPrivacy===true,u=new ba(e$1,i,a,c),p$1=new Ul(i,a,c),d$1=new ql(i,a,c),g=new Wl(i,a,c),y=new zl(i,a,c),h=new Hl(i,a,c),m=new Jl(i,a,c),E=new Kl(i,a,c),M=new Ql(i,a,c),C=new Yl(i,a,c),T=new d,b=[...new Set([...o.exclude??[],...t.exclude??[]])];T.setExcludePatterns(b);let v=(t.projectScanTimeout??o.projectScanTimeout??180)*1e3;T.setMaxFileSize(o.maxFileSizeToScan??5242880),T.setProjectScanTimeout(v);let S=o.scanners,w=0,P=k=>{w+=k;},f=new Du(e$1,r$1),$=[{id:"config",label:"Loading configuration"},{id:"discovery",label:"Discovering workspace",weight:3},{id:"vcs",label:"Detecting version control"},{id:"walk",label:"Indexing files",weight:8},{id:"drift",label:"Computing drift score"},{id:"findings",label:"Generating findings"}];if(f.setSteps($),f.completeStep("config","loaded"),!(c?true:await va(e$1))){f.finish();let k=["",j.red.bold(" \u2716 Vibgrate cannot connect to the npm registry to check package versions."),"",j.dim(" Possible causes:"),j.dim(" \u2022 No internet connection"),j.dim(" \u2022 Corporate proxy/firewall blocking registry.npmjs.org"),j.dim(" \u2022 npm is not installed or not in PATH"),"",j.dim(" Try running: ")+j.cyan("npm view npm dist-tags.latest"),""].join(`
76
- `);throw new Error(k)}let ie=await new Ru({offline:c,manifest:a}).resolve(),ee=ie.catalog,rs=e(e$1,b);f.startStep("discovery");let te=await rs;f.updateStats({treeSummary:te}),f.completeStep("discovery",`${te.totalFiles.toLocaleString()} files \xB7 ${te.totalDirs.toLocaleString()} dirs`);let os=await oo(e$1),io=Uu(os,te.totalFiles);f.setEstimatedTotal(io),f.setStepEstimates(qu(os,te.totalFiles)),f.startStep("vcs");let Se=await Qr(e$1),ao=Se.type!=="unknown"?`${Se.type}${Se.branch?` ${Se.branch}`:""}${Se.shortSha?` @ ${Se.shortSha}`:""}`:"none detected";f.completeStep("vcs",ao),f.startStep("walk",te.totalFiles),await T.walkDir(e$1,(k,x)=>{f.updateStepProgress("walk",k,te.totalFiles,x);});let Xt=T.getWalkSummary(e$1);Xt&&(Xt.totalFiles!==te.totalFiles||Xt.totalDirs!==te.totalDirs)&&f.updateStats({treeSummary:Xt}),f.completeStep("walk",`${te.totalFiles.toLocaleString()} files indexed`);let Le=await La(e$1,u,T,v,ee);if(Le.length>0){f.insertStepBefore("drift",{id:"node",label:"Found Node projects",weight:4}),f.startStep("node");for(let k of Le)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Le.length,f.addProjects(Le.length),f.completeStep("node",`${Le.length} project${Le.length!==1?"s":""}`,Le.length);}let Ie=await Oa(e$1,p$1,T,v,ee);if(Ie.length>0){f.insertStepBefore("drift",{id:"dotnet",label:"Found .NET projects",weight:2}),f.startStep("dotnet");for(let k of Ie)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Ie.length,f.addProjects(Ie.length),f.completeStep("dotnet",`${Ie.length} project${Ie.length!==1?"s":""}`,Ie.length);}let Re=await za(e$1,d$1,T,v,ee);if(Re.length>0){f.insertStepBefore("drift",{id:"python",label:"Found Python projects",weight:3}),f.startStep("python");for(let k of Re)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Re.length,f.addProjects(Re.length),f.completeStep("python",`${Re.length} project${Re.length!==1?"s":""}`,Re.length);}let Fe=await Za(e$1,g,T,v,ee);if(Fe.length>0){f.insertStepBefore("drift",{id:"java",label:"Found Java projects",weight:3}),f.startStep("java");for(let k of Fe)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Fe.length,f.addProjects(Fe.length),f.completeStep("java",`${Fe.length} project${Fe.length!==1?"s":""}`,Fe.length);}let Be=await cc(e$1,y,T,v,ee);if(Be.length>0){f.insertStepBefore("drift",{id:"ruby",label:"Found Ruby projects",weight:2}),f.startStep("ruby");for(let k of Be)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Be.length,f.addProjects(Be.length),f.completeStep("ruby",`${Be.length} project${Be.length!==1?"s":""}`,Be.length);}let Oe=await mc(e$1,h,T,v);if(Oe.length>0){f.insertStepBefore("drift",{id:"swift",label:"Found Swift projects",weight:2}),f.startStep("swift");for(let k of Oe)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Oe.length,f.addProjects(Oe.length),f.completeStep("swift",`${Oe.length} project${Oe.length!==1?"s":""}`,Oe.length);}let Ve=await bc(e$1,m,T,v,ee);if(Ve.length>0){f.insertStepBefore("drift",{id:"go",label:"Found Go projects",weight:2}),f.startStep("go");for(let k of Ve)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Ve.length,f.addProjects(Ve.length),f.completeStep("go",`${Ve.length} project${Ve.length!==1?"s":""}`,Ve.length);}let _e=await jc(e$1,E,T,v);if(_e.length>0){f.insertStepBefore("drift",{id:"rust",label:"Found Rust projects",weight:2}),f.startStep("rust");for(let k of _e)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=_e.length,f.addProjects(_e.length),f.completeStep("rust",`${_e.length} project${_e.length!==1?"s":""}`,_e.length);}let De=await $c(e$1,M,T,v);if(De.length>0){f.insertStepBefore("drift",{id:"php",label:"Found PHP projects",weight:2}),f.startStep("php");for(let k of De)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=De.length,f.addProjects(De.length),f.completeStep("php",`${De.length} project${De.length!==1?"s":""}`,De.length);}let Ge=await Rc(e$1,C,T,v);if(Ge.length>0){f.insertStepBefore("drift",{id:"dart",label:"Found Dart projects",weight:2}),f.startStep("dart");for(let k of Ge)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=Ge.length,f.addProjects(Ge.length),f.completeStep("dart",`${Ge.length} project${Ge.length!==1?"s":""}`,Ge.length);}let Ue=await Kc(e$1,a,T,v,c);if(Ue.length>0){f.insertStepBefore("drift",{id:"elixir",label:"Found Elixir projects",weight:2}),f.startStep("elixir");for(let k of Ue)f.addDependencies(k.dependencies.length),k.frameworks&&f.addFrameworks(k.frameworks.length);w+=Ue.length,f.addProjects(Ue.length),f.completeStep("elixir",`${Ue.length} project${Ue.length!==1?"s":""}`,Ue.length);}let qe=await cl(e$1,a,T,v,c);if(qe.length>0){f.insertStepBefore("drift",{id:"docker",label:"Found Docker images",weight:2}),f.startStep("docker");for(let k of qe)f.addDependencies(k.dependencies.length);w+=qe.length,f.addProjects(qe.length),f.completeStep("docker",`${qe.length} project${qe.length!==1?"s":""}`,qe.length);}let We=await vl(e$1,a,T,v,c);if(We.length>0){f.insertStepBefore("drift",{id:"helm",label:"Found Helm charts",weight:2}),f.startStep("helm");for(let k of We)f.addDependencies(k.dependencies.length),k.frameworks&&f.addFrameworks(k.frameworks.length);w+=We.length,f.addProjects(We.length),f.completeStep("helm",`${We.length} project${We.length!==1?"s":""}`,We.length);}let ze=await Ml(e$1,a,T,v,c);if(ze.length>0){f.insertStepBefore("drift",{id:"terraform",label:"Found Terraform configs",weight:2}),f.startStep("terraform");for(let k of ze)f.addDependencies(k.dependencies.length);w+=ze.length,f.addProjects(ze.length),f.completeStep("terraform",`${ze.length} project${ze.length!==1?"s":""}`,ze.length);}let He=await Ll(e$1,T);if(He.length>0){f.insertStepBefore("drift",{id:"polyglot",label:"Found additional language projects",weight:2}),f.startStep("polyglot");for(let k of He)f.addDependencies(k.dependencies.length),f.addFrameworks(k.frameworks.length);w+=He.length,f.addProjects(He.length),f.completeStep("polyglot",`${He.length} project${He.length!==1?"s":""}`,He.length);}let co=new Set(["docker","helm","terraform"]),jn=k=>co.has(k.type)?`${k.type}:${k.path}`:k.path,lo=[...Le,...Ie,...Re,...Fe,...Be,...Oe,...Ve,..._e,...De,...Ge,...Ue,...qe,...We,...ze,...He],Zt=new Map;for(let k of lo){let x=Zt.get(jn(k));if(!x)Zt.set(jn(k),k);else {let O=Mn=>Mn.dependencies.filter(et=>et.resolvedVersion||et.latestStable).length,ds=O(k)>O(x)||O(k)===O(x)&&k.dependencies.length>x.dependencies.length,Rt=ds?k:x,Tn=ds?x:k;if(Tn.projectReferences?.length)if(!Rt.projectReferences)Rt.projectReferences=Tn.projectReferences;else {let Mn=new Set(Rt.projectReferences.map(et=>et.path));for(let et of Tn.projectReferences)Mn.has(et.path)||Rt.projectReferences.push(et);}Zt.set(jn(k),Rt);}}let ne=[...Zt.values()],is=t.dsn||process.env.VIBGRATE_DSN,as=(is?Eu(is):null)?.workspaceId;for(let k of ne){k.drift=Gn([k]),k.projectId=zi(k.path,k.name,as);let x=F.resolve(e$1,k.path);try{let O=await T.sourceMetricsUnder(e$1,x);k.fileCount===void 0&&(k.fileCount=O.fileCount),k.sizeBytes=O.sizeBytes;}catch{}k.dependencyCount=k.dependencies.length,k.classification=_l({fileCount:k.fileCount,sizeBytes:k.sizeBytes,dependencyCount:k.dependencyCount});}let cs=F.join(e$1,".vibgrate","solutions.json"),ls=new Map;if(await p(cs))try{let k=await n(cs);for(let x of k.solutions??[])x.path&&x.solutionId&&ls.set(x.path,x.solutionId);}catch{}let jt=(await Wu(e$1,T)).map(k=>({solutionId:ls.get(k.path)??Hi(k.path,k.name,as),path:k.path,name:k.name,type:k.type,projectPaths:k.projectPaths})),Pn=new Map(ne.map(k=>[k.path,k]));for(let k of jt){let x=k.projectPaths.map(O=>Pn.get(O)??Pn.get(F.dirname(O).replace(/\\/g,"/"))).filter(O=>!!O);k.drift=x.length>0?Gn(x):void 0;for(let O of x)O.solutionId=k.solutionId,O.solutionName=k.name;}for(let k of ne)k.relationshipDiagram=ru(k,ne);for(let k of jt)k.relationshipDiagram=ou(k,ne);let uo=su(ne),It={};n$1&&await n$1({rootDir:e$1,opts:t,config:o,scanners:S,maxPrivacyMode:l,allProjects:ne,solutions:jt,projectsByPath:Pn,fileCache:T,progress:f,runtimeCatalog:ee,extended:It,addFilesScanned:P});let us=(Date.now()-Date.parse(ee.generatedAt))/(1e3*60*60*24),po=Number.isFinite(us)&&us>30;It.runtimeCatalogInfo={generatedAt:ee.generatedAt,source:ie.source,stale:po},f.startStep("drift");let En=Gn(ne);f.completeStep("drift",`${En.score}/100 \u2014 ${En.riskLevel} risk`),f.startStep("findings");let en=Wi(ne,o),tn=en.filter(k=>k.level==="warning").length,nn=en.filter(k=>k.level==="error").length,sn=en.filter(k=>k.level==="note").length;f.addFindings(tn,nn,sn);let rn=[];nn>0&&rn.push(`${nn} error${nn!==1?"s":""}`),tn>0&&rn.push(`${tn} warning${tn!==1?"s":""}`),sn>0&&rn.push(`${sn} note${sn!==1?"s":""}`),f.completeStep("findings",rn.join(", ")||"none"),f.finish();let Pt=T.stuckPaths,Et=T.skippedLargeFiles;if(Pt.length>0){console.log(j.yellow(`
77
- \u26A0 ${Pt.length} path${Pt.length===1?"":"s"} timed out (>${Math.round(v/1e3)}s) and ${Pt.length===1?"was":"were"} skipped:`));for(let O of Pt)console.log(j.dim(` \u2192 ${O}`));let k=Pt.map(O=>`${O}/**`);await Ni(e$1,k)&&console.log(j.green("\u2714")+` Added ${k.length} pattern${k.length!==1?"s":""} to exclude list in config`);}if(Et.length>0){let x=((o.maxFileSizeToScan??5242880)/1048576).toFixed(0);console.log(j.yellow(`
78
- \u26A0 ${Et.length} file${Et.length===1?"":"s"} skipped (>${x} MB):`));for(let O of Et.slice(0,10))console.log(j.dim(` \u2192 ${O}`));Et.length>10&&console.log(j.dim(` \u2026 and ${Et.length-10} more`));}T.clear(),ne.length===0&&console.log(j.yellow("No projects found."));let ps=Date.now()-s$1,fo=await zu(e$1,Se.remoteUrl,It.buildDeploy?.ci,t.repositoryName),mo=Gl(ne),oe={schemaVersion:"1.0",timestamp:new Date().toISOString(),vibgrateVersion:r$1,rootPath:F.basename(e$1),...Se.type!=="unknown"?{vcs:Se}:{},repository:fo,projects:ne,...jt.length>0?{solutions:jt}:{},drift:En,findings:en,...Object.keys(It).length>0?{extended:It}:{},durationMs:ps,filesScanned:w,treeSummary:te,relationshipDiagram:uo,billing:mo};if(t.baseline){let k=F.resolve(t.baseline);if(await p(k))try{let x=await n(k);oe.baseline=k,oe.delta=oe.drift.score-x.drift.score;}catch{console.error(j.yellow(`Warning: Could not read baseline file: ${k}`));}}if(!t.noLocalArtifacts&&!l){let k=F.join(e$1,".vibgrate");await q(k),await r(F.join(k,"scan_result.json"),oe),await r(F.join(k,"solutions.json"),{scannedAt:oe.timestamp,solutions:jt.map(x=>({solutionId:x.solutionId,name:x.name,path:x.path,type:x.type,projectPaths:x.projectPaths}))});}if(!t.noLocalArtifacts&&!l&&await Gu(e$1,{timestamp:oe.timestamp,totalDurationMs:ps,totalFiles:te.totalFiles,totalDirs:te.totalDirs,steps:f.getStepTimings()}),!t.noLocalArtifacts&&!l){let k={};for(let x of ne)x.drift&&x.path&&(k[x.path]={projectId:x.projectId,name:x.name,type:x.type,path:x.path,score:x.drift.score,riskLevel:x.drift.riskLevel,components:x.drift.components,measured:x.drift.measured,scannedAt:oe.timestamp,vibgrateVersion:r$1,solutionId:x.solutionId,solutionName:x.solutionName});if(Object.keys(k).length>0){let x=F.join(e$1,".vibgrate");await q(x),await r(F.join(x,"project_scores.json"),k);}}if(t.format==="json"){let k=JSON.stringify(oe,null,2);t.out?(await s(F.resolve(t.out),k),console.log(j.green("\u2714")+` JSON written to ${t.out}`)):console.log(k);}else if(t.format==="sarif"){let k=ta(oe),x=JSON.stringify(k,null,2);t.out?(await s(F.resolve(t.out),x),console.log(j.green("\u2714")+` SARIF written to ${t.out}`)):console.log(x);}else if(t.format==="md"){let k=ra(oe);console.log(k),t.out&&await s(F.resolve(t.out),k);}else {let k=Qi(oe);console.log(k),t.out&&await s(F.resolve(t.out),k);}return oe}async function zu(e,t,n$1,r){let s=r?.trim()?r.trim():await Tu(e),o,i=F.join(e,"package.json");if(await p(i))try{let a=await n(i);typeof a.version=="string"&&a.version.trim()&&(o=a.version.trim());}catch{}return {name:s,...o?{version:o}:{},...n$1&&n$1.length>0?{pipeline:n$1.join(",")}:{},...t?{remoteUrl:t}:{}}}export{Ul as $,Oa as A,za as B,Za as C,cc as D,mc as E,bc as F,jc as G,$c as H,Rc as I,Kc as J,cl as K,vl as L,Ml as M,Ll as N,Il as O,Rl as P,Fl as Q,Bl as R,Ol as S,Vl as T,Kn as U,Qn as V,jp as W,_l as X,Dl as Y,Pp as Z,Gl as _,Ai as a,ql as aa,mp as b,Wl as ba,Ni as c,zl as ca,Ri as d,Hl as da,Fi as e,Jl as ea,Bi as f,Kl as fa,Oi as g,Ql as ga,tr as h,Yl as ha,Gn as i,Qr as ia,Wi as j,su as ja,zi as k,ru as ka,Hi as l,ou as la,Ji as m,Cp as ma,Ki as n,fu as na,rr as o,xp as oa,hp as p,Eu as pa,gp as q,Ap as qa,yp as r,Tu as ra,bp as s,Np as sa,Qi as t,Cu as ta,ta as u,Op as ua,ra as v,pa as w,ba as x,va as y,La as z};